When using the special option to suppress the response iu, ensure
the adapter fully supports the feature by checking feature flags
from the adapter.

Signed-off-by: Dick Kennedy <dick.kenn...@broadcom.com>
Signed-off-by: James Smart <james.sm...@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_hw4.h  |  3 +++
 drivers/scsi/lpfc/lpfc_init.c | 13 ++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index 7c3afc3d3121..52fe28ae50fa 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -3293,6 +3293,9 @@ struct lpfc_sli4_parameters {
 #define cfg_eqdr_SHIFT                         8
 #define cfg_eqdr_MASK                          0x00000001
 #define cfg_eqdr_WORD                          word19
+#define cfg_nosr_SHIFT                         9
+#define cfg_nosr_MASK                          0x00000001
+#define cfg_nosr_WORD                          word19
 #define LPFC_NODELAY_MAX_IO            32
 };
 
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 7fc2db968379..895b1da784ee 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -10473,8 +10473,19 @@ lpfc_get_sli4_parameters(struct lpfc_hba *phba, 
LPFC_MBOXQ_t *mboxq)
                phba->cfg_enable_fc4_type = LPFC_ENABLE_FCP;
        }
 
-       if (bf_get(cfg_xib, mbx_sli4_parameters) && phba->cfg_suppress_rsp)
+       /*
+        * To support Suppress Response feature we must satisfy 3 conditions.
+        * lpfc_suppress_rsp module parameter must be set (default).
+        * In SLI4-Parameters Descriptor:
+        * Extended Inline Buffers (XIB) must be supported.
+        * Suppress Response IU Not Supported (SRIUNS) must NOT be supported
+        * (double negative).
+        */
+       if (phba->cfg_suppress_rsp && bf_get(cfg_xib, mbx_sli4_parameters) &&
+           !(bf_get(cfg_nosr, mbx_sli4_parameters)))
                phba->sli.sli_flag |= LPFC_SLI_SUPPRESS_RSP;
+       else
+               phba->cfg_suppress_rsp = 0;
 
        if (bf_get(cfg_eqdr, mbx_sli4_parameters))
                phba->sli.sli_flag |= LPFC_SLI_USE_EQDR;
-- 
2.13.1

Reply via email to