Addition of support for if_type=6 missed several checks for interface
type, resulting in the failure of several key management features
such as firmware dump and loopback testing.

Correct the checks on the if_type so that both SLI4 IF_TYPE's 2 and 6
are supported.

Signed-off-by: Dick Kennedy <dick.kenn...@broadcom.com>
Signed-off-by: James Smart <jsmart2...@gmail.com>
---
 drivers/scsi/lpfc/lpfc_attr.c    | 4 ++--
 drivers/scsi/lpfc/lpfc_bsg.c     | 6 +++---
 drivers/scsi/lpfc/lpfc_els.c     | 2 +-
 drivers/scsi/lpfc/lpfc_hbadisc.c | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index 83924d66fd39..513ac1be861f 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -1358,7 +1358,7 @@ lpfc_sli4_pdev_reg_request(struct lpfc_hba *phba, 
uint32_t opcode)
                return -EACCES;
 
        if ((phba->sli_rev < LPFC_SLI_REV4) ||
-           (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
+           (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) <
             LPFC_SLI_INTF_IF_TYPE_2))
                return -EPERM;
 
@@ -4361,7 +4361,7 @@ lpfc_link_speed_store(struct device *dev, struct 
device_attribute *attr,
        uint32_t prev_val, if_type;
 
        if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf);
-       if (if_type == LPFC_SLI_INTF_IF_TYPE_2 &&
+       if (if_type >= LPFC_SLI_INTF_IF_TYPE_2 &&
            phba->hba_flag & HBA_FORCED_LINK_SPEED)
                return -EPERM;
 
diff --git a/drivers/scsi/lpfc/lpfc_bsg.c b/drivers/scsi/lpfc/lpfc_bsg.c
index cb18dac68e28..8698af86485d 100644
--- a/drivers/scsi/lpfc/lpfc_bsg.c
+++ b/drivers/scsi/lpfc/lpfc_bsg.c
@@ -2222,7 +2222,7 @@ lpfc_bsg_diag_loopback_mode(struct bsg_job *job)
 
        if (phba->sli_rev < LPFC_SLI_REV4)
                rc = lpfc_sli3_bsg_diag_loopback_mode(phba, job);
-       else if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) ==
+       else if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) >=
                 LPFC_SLI_INTF_IF_TYPE_2)
                rc = lpfc_sli4_bsg_diag_loopback_mode(phba, job);
        else
@@ -2262,7 +2262,7 @@ lpfc_sli4_bsg_diag_mode_end(struct bsg_job *job)
 
        if (phba->sli_rev < LPFC_SLI_REV4)
                return -ENODEV;
-       if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
+       if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) <
            LPFC_SLI_INTF_IF_TYPE_2)
                return -ENODEV;
 
@@ -2354,7 +2354,7 @@ lpfc_sli4_bsg_link_diag_test(struct bsg_job *job)
                rc = -ENODEV;
                goto job_error;
        }
-       if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
+       if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) <
            LPFC_SLI_INTF_IF_TYPE_2) {
                rc = -ENODEV;
                goto job_error;
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 103ee7049633..d222baf35d15 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -5733,7 +5733,7 @@ lpfc_els_rcv_rdp(struct lpfc_vport *vport, struct 
lpfc_iocbq *cmdiocb,
        struct ls_rjt stat;
 
        if (phba->sli_rev < LPFC_SLI_REV4 ||
-           bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) !=
+           bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) <
                                                LPFC_SLI_INTF_IF_TYPE_2) {
                rjt_err = LSRJT_UNABLE_TPC;
                rjt_expl = LSEXP_REQ_UNSUPPORTED;
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 8857f559e6c3..91189e9c8530 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -4850,7 +4850,7 @@ lpfc_unreg_rpi(struct lpfc_vport *vport, struct 
lpfc_nodelist *ndlp)
                                if (phba->sli_rev == LPFC_SLI_REV4 &&
                                    (!(vport->load_flag & FC_UNLOADING)) &&
                                    (bf_get(lpfc_sli_intf_if_type,
-                                    &phba->sli4_hba.sli_intf) ==
+                                    &phba->sli4_hba.sli_intf) >=
                                      LPFC_SLI_INTF_IF_TYPE_2) &&
                                    (kref_read(&ndlp->kref) > 0)) {
                                        mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
-- 
2.13.7

Reply via email to