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 lpfc_acqe_misconfigured_event {
|
||||||
struct {
|
struct {
|
||||||
uint32_t word0;
|
uint32_t word0;
|
||||||
#define lpfc_sli_misconfigured_port0_SHIFT 0
|
#define lpfc_sli_misconfigured_port0_state_SHIFT 0
|
||||||
#define lpfc_sli_misconfigured_port0_MASK 0x000000FF
|
#define lpfc_sli_misconfigured_port0_state_MASK 0x000000FF
|
||||||
#define lpfc_sli_misconfigured_port0_WORD word0
|
#define lpfc_sli_misconfigured_port0_state_WORD word0
|
||||||
#define lpfc_sli_misconfigured_port1_SHIFT 8
|
#define lpfc_sli_misconfigured_port1_state_SHIFT 8
|
||||||
#define lpfc_sli_misconfigured_port1_MASK 0x000000FF
|
#define lpfc_sli_misconfigured_port1_state_MASK 0x000000FF
|
||||||
#define lpfc_sli_misconfigured_port1_WORD word0
|
#define lpfc_sli_misconfigured_port1_state_WORD word0
|
||||||
#define lpfc_sli_misconfigured_port2_SHIFT 16
|
#define lpfc_sli_misconfigured_port2_state_SHIFT 16
|
||||||
#define lpfc_sli_misconfigured_port2_MASK 0x000000FF
|
#define lpfc_sli_misconfigured_port2_state_MASK 0x000000FF
|
||||||
#define lpfc_sli_misconfigured_port2_WORD word0
|
#define lpfc_sli_misconfigured_port2_state_WORD word0
|
||||||
#define lpfc_sli_misconfigured_port3_SHIFT 24
|
#define lpfc_sli_misconfigured_port3_state_SHIFT 24
|
||||||
#define lpfc_sli_misconfigured_port3_MASK 0x000000FF
|
#define lpfc_sli_misconfigured_port3_state_MASK 0x000000FF
|
||||||
#define lpfc_sli_misconfigured_port3_WORD word0
|
#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;
|
} theEvent;
|
||||||
#define LPFC_SLI_EVENT_STATUS_VALID 0x00
|
#define LPFC_SLI_EVENT_STATUS_VALID 0x00
|
||||||
#define LPFC_SLI_EVENT_STATUS_NOT_PRESENT 0x01
|
#define LPFC_SLI_EVENT_STATUS_NOT_PRESENT 0x01
|
||||||
#define LPFC_SLI_EVENT_STATUS_WRONG_TYPE 0x02
|
#define LPFC_SLI_EVENT_STATUS_WRONG_TYPE 0x02
|
||||||
#define LPFC_SLI_EVENT_STATUS_UNSUPPORTED 0x03
|
#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 {
|
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];
|
char message[128];
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
uint8_t evt_type;
|
uint8_t evt_type;
|
||||||
|
uint8_t operational = 0;
|
||||||
struct temp_event temp_event_data;
|
struct temp_event temp_event_data;
|
||||||
struct lpfc_acqe_misconfigured_event *misconfigured;
|
struct lpfc_acqe_misconfigured_event *misconfigured;
|
||||||
struct Scsi_Host *shost;
|
struct Scsi_Host *shost;
|
||||||
|
|
||||||
evt_type = bf_get(lpfc_trailer_type, acqe_sli);
|
evt_type = bf_get(lpfc_trailer_type, acqe_sli);
|
||||||
|
|
||||||
/* Special case Lancer */
|
lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
|
||||||
if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
|
"2901 Async SLI event - Event Data1:x%08x Event Data2:"
|
||||||
LPFC_SLI_INTF_IF_TYPE_2) {
|
"x%08x SLI Event Type:%d\n",
|
||||||
lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
|
acqe_sli->event_data1, acqe_sli->event_data2,
|
||||||
"2901 Async SLI event - Event Data1:x%08x Event Data2:"
|
evt_type);
|
||||||
"x%08x SLI Event Type:%d\n",
|
|
||||||
acqe_sli->event_data1, acqe_sli->event_data2,
|
|
||||||
evt_type);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
port_name = phba->Port[0];
|
port_name = phba->Port[0];
|
||||||
if (port_name == 0x00)
|
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 */
|
/* fetch the status for this port */
|
||||||
switch (phba->sli4_hba.lnk_info.lnk_no) {
|
switch (phba->sli4_hba.lnk_info.lnk_no) {
|
||||||
case LPFC_LINK_NUMBER_0:
|
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);
|
&misconfigured->theEvent);
|
||||||
break;
|
break;
|
||||||
case LPFC_LINK_NUMBER_1:
|
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);
|
&misconfigured->theEvent);
|
||||||
break;
|
break;
|
||||||
case LPFC_LINK_NUMBER_2:
|
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);
|
&misconfigured->theEvent);
|
||||||
break;
|
break;
|
||||||
case LPFC_LINK_NUMBER_3:
|
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);
|
&misconfigured->theEvent);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
status = ~LPFC_SLI_EVENT_STATUS_VALID;
|
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||||
break;
|
"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) {
|
switch (status) {
|
||||||
case LPFC_SLI_EVENT_STATUS_VALID:
|
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:
|
case LPFC_SLI_EVENT_STATUS_NOT_PRESENT:
|
||||||
sprintf(message, "Optics faulted/incorrectly "
|
sprintf(message, "Optics faulted/incorrectly "
|
||||||
"installed/not installed - Reseat optics, "
|
"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 "
|
sprintf(message, "Incompatible optics - Replace with "
|
||||||
"compatible optics for card to function.");
|
"compatible optics for card to function.");
|
||||||
break;
|
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:
|
default:
|
||||||
/* firmware is reporting a status we don't know about */
|
/* firmware is reporting a status we don't know about */
|
||||||
sprintf(message, "Unknown event status x%02x", status);
|
sprintf(message, "Unknown event status x%02x", status);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
phba->sli4_hba.lnk_info.optic_state = status;
|
||||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||||
"3176 Misconfigured Physical Port - "
|
"3176 Port Name %c %s\n", port_name, message);
|
||||||
"Port Name %c %s\n", port_name, message);
|
|
||||||
break;
|
break;
|
||||||
case LPFC_SLI_EVENT_TYPE_REMOTE_DPORT:
|
case LPFC_SLI_EVENT_TYPE_REMOTE_DPORT:
|
||||||
lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
|
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->sli4_hba.lpfc_vfi_blk_list);
|
||||||
INIT_LIST_HEAD(&phba->lpfc_vpi_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. */
|
/* Initialize the driver internal SLI layer lists. */
|
||||||
lpfc_sli_setup(phba);
|
lpfc_sli_setup(phba);
|
||||||
lpfc_sli_queue_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_GE 0x0 /* FCoE */
|
||||||
#define LPFC_LNK_FC 0x1 /* FC */
|
#define LPFC_LNK_FC 0x1 /* FC */
|
||||||
uint8_t lnk_no;
|
uint8_t lnk_no;
|
||||||
|
uint8_t optic_state;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LPFC_SLI4_HANDLER_CNT (LPFC_FCP_IO_CHAN_MAX+ \
|
#define LPFC_SLI4_HANDLER_CNT (LPFC_FCP_IO_CHAN_MAX+ \
|
||||||
|
|
Loading…
Reference in New Issue