mirror of
https://github.com/torvalds/linux.git
synced 2024-11-02 02:01:29 +00:00
lpfc: Add logging for misconfigured optics.
Add logging for misconfigured optics acqe reported by fw. Signed-off-by: Dick Kennedy <dick.kennedy@avagotech.com> Signed-off-by: James Smart <james.smart@avagotech.com> Reviewed-by: Hannes Reinicke <hare@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
4360ca9c24
commit
448193b5b5
@ -3448,23 +3448,50 @@ struct lpfc_acqe_fc_la {
|
||||
struct lpfc_acqe_misconfigured_event {
|
||||
struct {
|
||||
uint32_t word0;
|
||||
#define lpfc_sli_misconfigured_port0_SHIFT 0
|
||||
#define lpfc_sli_misconfigured_port0_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port0_WORD word0
|
||||
#define lpfc_sli_misconfigured_port1_SHIFT 8
|
||||
#define lpfc_sli_misconfigured_port1_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port1_WORD word0
|
||||
#define lpfc_sli_misconfigured_port2_SHIFT 16
|
||||
#define lpfc_sli_misconfigured_port2_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port2_WORD word0
|
||||
#define lpfc_sli_misconfigured_port3_SHIFT 24
|
||||
#define lpfc_sli_misconfigured_port3_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port3_WORD word0
|
||||
#define lpfc_sli_misconfigured_port0_state_SHIFT 0
|
||||
#define lpfc_sli_misconfigured_port0_state_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port0_state_WORD word0
|
||||
#define lpfc_sli_misconfigured_port1_state_SHIFT 8
|
||||
#define lpfc_sli_misconfigured_port1_state_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port1_state_WORD word0
|
||||
#define lpfc_sli_misconfigured_port2_state_SHIFT 16
|
||||
#define lpfc_sli_misconfigured_port2_state_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port2_state_WORD word0
|
||||
#define lpfc_sli_misconfigured_port3_state_SHIFT 24
|
||||
#define lpfc_sli_misconfigured_port3_state_MASK 0x000000FF
|
||||
#define lpfc_sli_misconfigured_port3_state_WORD word0
|
||||
uint32_t word1;
|
||||
#define lpfc_sli_misconfigured_port0_op_SHIFT 0
|
||||
#define lpfc_sli_misconfigured_port0_op_MASK 0x00000001
|
||||
#define lpfc_sli_misconfigured_port0_op_WORD word1
|
||||
#define lpfc_sli_misconfigured_port0_severity_SHIFT 1
|
||||
#define lpfc_sli_misconfigured_port0_severity_MASK 0x00000003
|
||||
#define lpfc_sli_misconfigured_port0_severity_WORD word1
|
||||
#define lpfc_sli_misconfigured_port1_op_SHIFT 8
|
||||
#define lpfc_sli_misconfigured_port1_op_MASK 0x00000001
|
||||
#define lpfc_sli_misconfigured_port1_op_WORD word1
|
||||
#define lpfc_sli_misconfigured_port1_severity_SHIFT 9
|
||||
#define lpfc_sli_misconfigured_port1_severity_MASK 0x00000003
|
||||
#define lpfc_sli_misconfigured_port1_severity_WORD word1
|
||||
#define lpfc_sli_misconfigured_port2_op_SHIFT 16
|
||||
#define lpfc_sli_misconfigured_port2_op_MASK 0x00000001
|
||||
#define lpfc_sli_misconfigured_port2_op_WORD word1
|
||||
#define lpfc_sli_misconfigured_port2_severity_SHIFT 17
|
||||
#define lpfc_sli_misconfigured_port2_severity_MASK 0x00000003
|
||||
#define lpfc_sli_misconfigured_port2_severity_WORD word1
|
||||
#define lpfc_sli_misconfigured_port3_op_SHIFT 24
|
||||
#define lpfc_sli_misconfigured_port3_op_MASK 0x00000001
|
||||
#define lpfc_sli_misconfigured_port3_op_WORD word1
|
||||
#define lpfc_sli_misconfigured_port3_severity_SHIFT 25
|
||||
#define lpfc_sli_misconfigured_port3_severity_MASK 0x00000003
|
||||
#define lpfc_sli_misconfigured_port3_severity_WORD word1
|
||||
} theEvent;
|
||||
#define LPFC_SLI_EVENT_STATUS_VALID 0x00
|
||||
#define LPFC_SLI_EVENT_STATUS_NOT_PRESENT 0x01
|
||||
#define LPFC_SLI_EVENT_STATUS_WRONG_TYPE 0x02
|
||||
#define LPFC_SLI_EVENT_STATUS_UNSUPPORTED 0x03
|
||||
#define LPFC_SLI_EVENT_STATUS_UNQUALIFIED 0x04
|
||||
#define LPFC_SLI_EVENT_STATUS_UNCERTIFIED 0x05
|
||||
};
|
||||
|
||||
struct lpfc_acqe_sli {
|
||||
|
@ -4079,22 +4079,18 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
|
||||
char message[128];
|
||||
uint8_t status;
|
||||
uint8_t evt_type;
|
||||
uint8_t operational = 0;
|
||||
struct temp_event temp_event_data;
|
||||
struct lpfc_acqe_misconfigured_event *misconfigured;
|
||||
struct Scsi_Host *shost;
|
||||
|
||||
evt_type = bf_get(lpfc_trailer_type, acqe_sli);
|
||||
|
||||
/* Special case Lancer */
|
||||
if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
|
||||
LPFC_SLI_INTF_IF_TYPE_2) {
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
|
||||
"2901 Async SLI event - Event Data1:x%08x Event Data2:"
|
||||
"x%08x SLI Event Type:%d\n",
|
||||
acqe_sli->event_data1, acqe_sli->event_data2,
|
||||
evt_type);
|
||||
return;
|
||||
}
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
|
||||
"2901 Async SLI event - Event Data1:x%08x Event Data2:"
|
||||
"x%08x SLI Event Type:%d\n",
|
||||
acqe_sli->event_data1, acqe_sli->event_data2,
|
||||
evt_type);
|
||||
|
||||
port_name = phba->Port[0];
|
||||
if (port_name == 0x00)
|
||||
@ -4140,29 +4136,46 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
|
||||
/* fetch the status for this port */
|
||||
switch (phba->sli4_hba.lnk_info.lnk_no) {
|
||||
case LPFC_LINK_NUMBER_0:
|
||||
status = bf_get(lpfc_sli_misconfigured_port0,
|
||||
status = bf_get(lpfc_sli_misconfigured_port0_state,
|
||||
&misconfigured->theEvent);
|
||||
operational = bf_get(lpfc_sli_misconfigured_port0_op,
|
||||
&misconfigured->theEvent);
|
||||
break;
|
||||
case LPFC_LINK_NUMBER_1:
|
||||
status = bf_get(lpfc_sli_misconfigured_port1,
|
||||
status = bf_get(lpfc_sli_misconfigured_port1_state,
|
||||
&misconfigured->theEvent);
|
||||
operational = bf_get(lpfc_sli_misconfigured_port1_op,
|
||||
&misconfigured->theEvent);
|
||||
break;
|
||||
case LPFC_LINK_NUMBER_2:
|
||||
status = bf_get(lpfc_sli_misconfigured_port2,
|
||||
status = bf_get(lpfc_sli_misconfigured_port2_state,
|
||||
&misconfigured->theEvent);
|
||||
operational = bf_get(lpfc_sli_misconfigured_port2_op,
|
||||
&misconfigured->theEvent);
|
||||
break;
|
||||
case LPFC_LINK_NUMBER_3:
|
||||
status = bf_get(lpfc_sli_misconfigured_port3,
|
||||
status = bf_get(lpfc_sli_misconfigured_port3_state,
|
||||
&misconfigured->theEvent);
|
||||
operational = bf_get(lpfc_sli_misconfigured_port3_op,
|
||||
&misconfigured->theEvent);
|
||||
break;
|
||||
default:
|
||||
status = ~LPFC_SLI_EVENT_STATUS_VALID;
|
||||
break;
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||
"3296 "
|
||||
"LPFC_SLI_EVENT_TYPE_MISCONFIGURED "
|
||||
"event: Invalid link %d",
|
||||
phba->sli4_hba.lnk_info.lnk_no);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Skip if optic state unchanged */
|
||||
if (phba->sli4_hba.lnk_info.optic_state == status)
|
||||
return;
|
||||
|
||||
switch (status) {
|
||||
case LPFC_SLI_EVENT_STATUS_VALID:
|
||||
return; /* no message if the sfp is okay */
|
||||
sprintf(message, "Physical Link is functional");
|
||||
break;
|
||||
case LPFC_SLI_EVENT_STATUS_NOT_PRESENT:
|
||||
sprintf(message, "Optics faulted/incorrectly "
|
||||
"installed/not installed - Reseat optics, "
|
||||
@ -4177,15 +4190,26 @@ lpfc_sli4_async_sli_evt(struct lpfc_hba *phba, struct lpfc_acqe_sli *acqe_sli)
|
||||
sprintf(message, "Incompatible optics - Replace with "
|
||||
"compatible optics for card to function.");
|
||||
break;
|
||||
case LPFC_SLI_EVENT_STATUS_UNQUALIFIED:
|
||||
sprintf(message, "Unqualified optics - Replace with "
|
||||
"Avago optics for Warranty and Technical "
|
||||
"Support - Link is%s operational",
|
||||
(operational) ? "" : " not");
|
||||
break;
|
||||
case LPFC_SLI_EVENT_STATUS_UNCERTIFIED:
|
||||
sprintf(message, "Uncertified optics - Replace with "
|
||||
"Avago-certified optics to enable link "
|
||||
"operation - Link is%s operational",
|
||||
(operational) ? "" : " not");
|
||||
break;
|
||||
default:
|
||||
/* firmware is reporting a status we don't know about */
|
||||
sprintf(message, "Unknown event status x%02x", status);
|
||||
break;
|
||||
}
|
||||
|
||||
phba->sli4_hba.lnk_info.optic_state = status;
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||
"3176 Misconfigured Physical Port - "
|
||||
"Port Name %c %s\n", port_name, message);
|
||||
"3176 Port Name %c %s\n", port_name, message);
|
||||
break;
|
||||
case LPFC_SLI_EVENT_TYPE_REMOTE_DPORT:
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
|
||||
@ -5259,6 +5283,9 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
|
||||
INIT_LIST_HEAD(&phba->sli4_hba.lpfc_vfi_blk_list);
|
||||
INIT_LIST_HEAD(&phba->lpfc_vpi_blk_list);
|
||||
|
||||
/* initialize optic_state to 0xFF */
|
||||
phba->sli4_hba.lnk_info.optic_state = 0xff;
|
||||
|
||||
/* Initialize the driver internal SLI layer lists. */
|
||||
lpfc_sli_setup(phba);
|
||||
lpfc_sli_queue_setup(phba);
|
||||
|
@ -442,6 +442,7 @@ struct lpfc_sli4_lnk_info {
|
||||
#define LPFC_LNK_GE 0x0 /* FCoE */
|
||||
#define LPFC_LNK_FC 0x1 /* FC */
|
||||
uint8_t lnk_no;
|
||||
uint8_t optic_state;
|
||||
};
|
||||
|
||||
#define LPFC_SLI4_HANDLER_CNT (LPFC_FCP_IO_CHAN_MAX+ \
|
||||
|
Loading…
Reference in New Issue
Block a user