scsi: lpfc: Add enablement of multiple adapter dumps
Some adapters support the ability to hold multiple adapter dumps on the adapter flash. Some adapters default to enabling this feature while others default to single-dump. Make support uniform by enabling dual dump by default. Link: https://lore.kernel.org/r/20191105005708.7399-11-jsmart2021@gmail.com Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
dcaa213679
commit
171f6c4194
|
@ -3530,6 +3530,7 @@ struct lpfc_sli4_parameters {
|
|||
|
||||
#define LPFC_SET_UE_RECOVERY 0x10
|
||||
#define LPFC_SET_MDS_DIAGS 0x11
|
||||
#define LPFC_SET_DUAL_DUMP 0x1e
|
||||
struct lpfc_mbx_set_feature {
|
||||
struct mbox_header header;
|
||||
uint32_t feature;
|
||||
|
@ -3544,6 +3545,15 @@ struct lpfc_mbx_set_feature {
|
|||
#define lpfc_mbx_set_feature_mds_deep_loopbk_SHIFT 1
|
||||
#define lpfc_mbx_set_feature_mds_deep_loopbk_MASK 0x00000001
|
||||
#define lpfc_mbx_set_feature_mds_deep_loopbk_WORD word6
|
||||
#define lpfc_mbx_set_feature_dd_SHIFT 0
|
||||
#define lpfc_mbx_set_feature_dd_MASK 0x00000001
|
||||
#define lpfc_mbx_set_feature_dd_WORD word6
|
||||
#define lpfc_mbx_set_feature_ddquery_SHIFT 1
|
||||
#define lpfc_mbx_set_feature_ddquery_MASK 0x00000001
|
||||
#define lpfc_mbx_set_feature_ddquery_WORD word6
|
||||
#define LPFC_DISABLE_DUAL_DUMP 0
|
||||
#define LPFC_ENABLE_DUAL_DUMP 1
|
||||
#define LPFC_QUERY_OP_DUAL_DUMP 2
|
||||
uint32_t word7;
|
||||
#define lpfc_mbx_set_feature_UERP_SHIFT 0
|
||||
#define lpfc_mbx_set_feature_UERP_MASK 0x0000ffff
|
||||
|
|
|
@ -6203,6 +6203,14 @@ lpfc_set_features(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox,
|
|||
mbox->u.mqe.un.set_feature.feature = LPFC_SET_MDS_DIAGS;
|
||||
mbox->u.mqe.un.set_feature.param_len = 8;
|
||||
break;
|
||||
case LPFC_SET_DUAL_DUMP:
|
||||
bf_set(lpfc_mbx_set_feature_dd,
|
||||
&mbox->u.mqe.un.set_feature, LPFC_ENABLE_DUAL_DUMP);
|
||||
bf_set(lpfc_mbx_set_feature_ddquery,
|
||||
&mbox->u.mqe.un.set_feature, 0);
|
||||
mbox->u.mqe.un.set_feature.feature = LPFC_SET_DUAL_DUMP;
|
||||
mbox->u.mqe.un.set_feature.param_len = 4;
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
|
@ -7200,7 +7208,7 @@ lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hrq,
|
|||
int
|
||||
lpfc_sli4_hba_setup(struct lpfc_hba *phba)
|
||||
{
|
||||
int rc, i, cnt, len;
|
||||
int rc, i, cnt, len, dd;
|
||||
LPFC_MBOXQ_t *mboxq;
|
||||
struct lpfc_mqe *mqe;
|
||||
uint8_t *vpd;
|
||||
|
@ -7451,6 +7459,23 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
|
|||
phba->sli3_options |= (LPFC_SLI3_NPIV_ENABLED | LPFC_SLI3_HBQ_ENABLED);
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
|
||||
/* Always try to enable dual dump feature if we can */
|
||||
lpfc_set_features(phba, mboxq, LPFC_SET_DUAL_DUMP);
|
||||
rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
|
||||
dd = bf_get(lpfc_mbx_set_feature_dd, &mboxq->u.mqe.un.set_feature);
|
||||
if ((rc == MBX_SUCCESS) && (dd == LPFC_ENABLE_DUAL_DUMP))
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI | LOG_INIT,
|
||||
"6448 Dual Dump is enabled\n");
|
||||
else
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_SLI | LOG_INIT,
|
||||
"6447 Dual Dump Mailbox x%x (x%x/x%x) failed, "
|
||||
"rc:x%x dd:x%x\n",
|
||||
bf_get(lpfc_mqe_command, &mboxq->u.mqe),
|
||||
lpfc_sli_config_mbox_subsys_get(
|
||||
phba, mboxq),
|
||||
lpfc_sli_config_mbox_opcode_get(
|
||||
phba, mboxq),
|
||||
rc, dd);
|
||||
/*
|
||||
* Allocate all resources (xri,rpi,vpi,vfi) now. Subsequent
|
||||
* calls depends on these resources to complete port setup.
|
||||
|
|
Loading…
Reference in New Issue