diff mbox series

[v2,4/7] qla2xxx: Add NVMe parameters support in Auxiliary Image Status

Message ID 20220826102559.17474-5-njavali@marvell.com
State New
Headers show
Series qla2xxx driver features | expand

Commit Message

Nilesh Javali Aug. 26, 2022, 10:25 a.m. UTC
From: Anil Gurumurthy <agurumurthy@marvell.com>

Add new API to obtain the NVMe Parameters region status from the
Auxiliary Image Status bitmap.

Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
---
 drivers/scsi/qla2xxx/qla_bsg.c  | 8 ++++++--
 drivers/scsi/qla2xxx/qla_bsg.h  | 3 ++-
 drivers/scsi/qla2xxx/qla_def.h  | 2 ++
 drivers/scsi/qla2xxx/qla_fw.h   | 3 +++
 drivers/scsi/qla2xxx/qla_init.c | 8 ++++++--
 5 files changed, 19 insertions(+), 5 deletions(-)

Comments

Himanshu Madhani Aug. 29, 2022, 4:15 p.m. UTC | #1
> On Aug 26, 2022, at 3:25 AM, Nilesh Javali <njavali@marvell.com> wrote:
> 
> From: Anil Gurumurthy <agurumurthy@marvell.com>
> 
> Add new API to obtain the NVMe Parameters region status from the
> Auxiliary Image Status bitmap.
> 
> Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
> Signed-off-by: Nilesh Javali <njavali@marvell.com>
> ---
> drivers/scsi/qla2xxx/qla_bsg.c  | 8 ++++++--
> drivers/scsi/qla2xxx/qla_bsg.h  | 3 ++-
> drivers/scsi/qla2xxx/qla_def.h  | 2 ++
> drivers/scsi/qla2xxx/qla_fw.h   | 3 +++
> drivers/scsi/qla2xxx/qla_init.c | 8 ++++++--
> 5 files changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
> index 5db9bf69dcff..cd75b179410d 100644
> --- a/drivers/scsi/qla2xxx/qla_bsg.c
> +++ b/drivers/scsi/qla2xxx/qla_bsg.c
> @@ -2519,19 +2519,23 @@ qla2x00_get_flash_image_status(struct bsg_job *bsg_job)
> 	qla27xx_get_active_image(vha, &active_regions);
> 	regions.global_image = active_regions.global;
> 
> +	if (IS_QLA27XX(ha))
> +		regions.nvme_params = QLA27XX_PRIMARY_IMAGE;
> +
> 	if (IS_QLA28XX(ha)) {
> 		qla28xx_get_aux_images(vha, &active_regions);
> 		regions.board_config = active_regions.aux.board_config;
> 		regions.vpd_nvram = active_regions.aux.vpd_nvram;
> 		regions.npiv_config_0_1 = active_regions.aux.npiv_config_0_1;
> 		regions.npiv_config_2_3 = active_regions.aux.npiv_config_2_3;
> +		regions.nvme_params = active_regions.aux.nvme_params;
> 	}
> 
> 	ql_dbg(ql_dbg_user, vha, 0x70e1,
> -	    "%s(%lu): FW=%u BCFG=%u VPDNVR=%u NPIV01=%u NPIV02=%u\n",
> +	    "%s(%lu): FW=%u BCFG=%u VPDNVR=%u NPIV01=%u NPIV02=%u NVME_PARAMS=%u\n",
> 	    __func__, vha->host_no, regions.global_image,
> 	    regions.board_config, regions.vpd_nvram,
> -	    regions.npiv_config_0_1, regions.npiv_config_2_3);
> +	    regions.npiv_config_0_1, regions.npiv_config_2_3, regions.nvme_params);
> 
> 	sg_copy_from_buffer(bsg_job->reply_payload.sg_list,
> 	    bsg_job->reply_payload.sg_cnt, &regions, sizeof(regions));
> diff --git a/drivers/scsi/qla2xxx/qla_bsg.h b/drivers/scsi/qla2xxx/qla_bsg.h
> index bb64b9c5a74b..d38dab0a07e8 100644
> --- a/drivers/scsi/qla2xxx/qla_bsg.h
> +++ b/drivers/scsi/qla2xxx/qla_bsg.h
> @@ -314,7 +314,8 @@ struct qla_active_regions {
> 	uint8_t vpd_nvram;
> 	uint8_t npiv_config_0_1;
> 	uint8_t npiv_config_2_3;
> -	uint8_t reserved[32];
> +	uint8_t nvme_params;
> +	uint8_t reserved[31];
> } __packed;
> 
> #include "qla_edif_bsg.h"
> diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
> index 22274b405d01..802eec6407d9 100644
> --- a/drivers/scsi/qla2xxx/qla_def.h
> +++ b/drivers/scsi/qla2xxx/qla_def.h
> @@ -4773,6 +4773,7 @@ struct active_regions {
> 		uint8_t vpd_nvram;
> 		uint8_t npiv_config_0_1;
> 		uint8_t npiv_config_2_3;
> +		uint8_t nvme_params;
> 	} aux;
> };
> 
> @@ -5057,6 +5058,7 @@ struct qla27xx_image_status {
> #define QLA28XX_AUX_IMG_VPD_NVRAM		BIT_1
> #define QLA28XX_AUX_IMG_NPIV_CONFIG_0_1		BIT_2
> #define QLA28XX_AUX_IMG_NPIV_CONFIG_2_3		BIT_3
> +#define QLA28XX_AUX_IMG_NVME_PARAMS		BIT_4
> 
> #define SET_VP_IDX	1
> #define SET_AL_PA	2
> diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h
> index 361015b5763e..f307beed9d29 100644
> --- a/drivers/scsi/qla2xxx/qla_fw.h
> +++ b/drivers/scsi/qla2xxx/qla_fw.h
> @@ -1675,6 +1675,7 @@ struct qla_flt_location {
> #define FLT_REG_VPD_SEC_27XX_1	0x52
> #define FLT_REG_VPD_SEC_27XX_2	0xD8
> #define FLT_REG_VPD_SEC_27XX_3	0xDA
> +#define FLT_REG_NVME_PARAMS_27XX	0x21
> 
> /* 28xx */
> #define FLT_REG_AUX_IMG_PRI_28XX	0x125
> @@ -1691,6 +1692,8 @@ struct qla_flt_location {
> #define FLT_REG_MPI_SEC_28XX		0xF0
> #define FLT_REG_PEP_PRI_28XX		0xD1
> #define FLT_REG_PEP_SEC_28XX		0xF1
> +#define FLT_REG_NVME_PARAMS_PRI_28XX	0x14E
> +#define FLT_REG_NVME_PARAMS_SEC_28XX	0x179
> 
> struct qla_flt_region {
> 	__le16	code;
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index e7fe0e52c11d..e12db95de688 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -7933,6 +7933,9 @@ qla28xx_component_status(
> 
> 	active_regions->aux.npiv_config_2_3 =
> 	    qla28xx_component_bitmask(aux, QLA28XX_AUX_IMG_NPIV_CONFIG_2_3);
> +
> +	active_regions->aux.nvme_params =
> +	    qla28xx_component_bitmask(aux, QLA28XX_AUX_IMG_NVME_PARAMS);
> }
> 
> static int
> @@ -8041,11 +8044,12 @@ qla28xx_get_aux_images(
> 	}
> 
> 	ql_dbg(ql_dbg_init, vha, 0x018f,
> -	    "aux images active: BCFG=%u VPD/NVR=%u NPIV0/1=%u NPIV2/3=%u\n",
> +	    "aux images active: BCFG=%u VPD/NVR=%u NPIV0/1=%u NPIV2/3=%u, NVME=%u\n",
> 	    active_regions->aux.board_config,
> 	    active_regions->aux.vpd_nvram,
> 	    active_regions->aux.npiv_config_0_1,
> -	    active_regions->aux.npiv_config_2_3);
> +	    active_regions->aux.npiv_config_2_3,
> +	    active_regions->aux.nvme_params);
> }
> 
> void
> -- 
> 2.19.0.rc0
> 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
index 5db9bf69dcff..cd75b179410d 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -2519,19 +2519,23 @@  qla2x00_get_flash_image_status(struct bsg_job *bsg_job)
 	qla27xx_get_active_image(vha, &active_regions);
 	regions.global_image = active_regions.global;
 
+	if (IS_QLA27XX(ha))
+		regions.nvme_params = QLA27XX_PRIMARY_IMAGE;
+
 	if (IS_QLA28XX(ha)) {
 		qla28xx_get_aux_images(vha, &active_regions);
 		regions.board_config = active_regions.aux.board_config;
 		regions.vpd_nvram = active_regions.aux.vpd_nvram;
 		regions.npiv_config_0_1 = active_regions.aux.npiv_config_0_1;
 		regions.npiv_config_2_3 = active_regions.aux.npiv_config_2_3;
+		regions.nvme_params = active_regions.aux.nvme_params;
 	}
 
 	ql_dbg(ql_dbg_user, vha, 0x70e1,
-	    "%s(%lu): FW=%u BCFG=%u VPDNVR=%u NPIV01=%u NPIV02=%u\n",
+	    "%s(%lu): FW=%u BCFG=%u VPDNVR=%u NPIV01=%u NPIV02=%u NVME_PARAMS=%u\n",
 	    __func__, vha->host_no, regions.global_image,
 	    regions.board_config, regions.vpd_nvram,
-	    regions.npiv_config_0_1, regions.npiv_config_2_3);
+	    regions.npiv_config_0_1, regions.npiv_config_2_3, regions.nvme_params);
 
 	sg_copy_from_buffer(bsg_job->reply_payload.sg_list,
 	    bsg_job->reply_payload.sg_cnt, &regions, sizeof(regions));
diff --git a/drivers/scsi/qla2xxx/qla_bsg.h b/drivers/scsi/qla2xxx/qla_bsg.h
index bb64b9c5a74b..d38dab0a07e8 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.h
+++ b/drivers/scsi/qla2xxx/qla_bsg.h
@@ -314,7 +314,8 @@  struct qla_active_regions {
 	uint8_t vpd_nvram;
 	uint8_t npiv_config_0_1;
 	uint8_t npiv_config_2_3;
-	uint8_t reserved[32];
+	uint8_t nvme_params;
+	uint8_t reserved[31];
 } __packed;
 
 #include "qla_edif_bsg.h"
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 22274b405d01..802eec6407d9 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -4773,6 +4773,7 @@  struct active_regions {
 		uint8_t vpd_nvram;
 		uint8_t npiv_config_0_1;
 		uint8_t npiv_config_2_3;
+		uint8_t nvme_params;
 	} aux;
 };
 
@@ -5057,6 +5058,7 @@  struct qla27xx_image_status {
 #define QLA28XX_AUX_IMG_VPD_NVRAM		BIT_1
 #define QLA28XX_AUX_IMG_NPIV_CONFIG_0_1		BIT_2
 #define QLA28XX_AUX_IMG_NPIV_CONFIG_2_3		BIT_3
+#define QLA28XX_AUX_IMG_NVME_PARAMS		BIT_4
 
 #define SET_VP_IDX	1
 #define SET_AL_PA	2
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h
index 361015b5763e..f307beed9d29 100644
--- a/drivers/scsi/qla2xxx/qla_fw.h
+++ b/drivers/scsi/qla2xxx/qla_fw.h
@@ -1675,6 +1675,7 @@  struct qla_flt_location {
 #define FLT_REG_VPD_SEC_27XX_1	0x52
 #define FLT_REG_VPD_SEC_27XX_2	0xD8
 #define FLT_REG_VPD_SEC_27XX_3	0xDA
+#define FLT_REG_NVME_PARAMS_27XX	0x21
 
 /* 28xx */
 #define FLT_REG_AUX_IMG_PRI_28XX	0x125
@@ -1691,6 +1692,8 @@  struct qla_flt_location {
 #define FLT_REG_MPI_SEC_28XX		0xF0
 #define FLT_REG_PEP_PRI_28XX		0xD1
 #define FLT_REG_PEP_SEC_28XX		0xF1
+#define FLT_REG_NVME_PARAMS_PRI_28XX	0x14E
+#define FLT_REG_NVME_PARAMS_SEC_28XX	0x179
 
 struct qla_flt_region {
 	__le16	code;
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index e7fe0e52c11d..e12db95de688 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -7933,6 +7933,9 @@  qla28xx_component_status(
 
 	active_regions->aux.npiv_config_2_3 =
 	    qla28xx_component_bitmask(aux, QLA28XX_AUX_IMG_NPIV_CONFIG_2_3);
+
+	active_regions->aux.nvme_params =
+	    qla28xx_component_bitmask(aux, QLA28XX_AUX_IMG_NVME_PARAMS);
 }
 
 static int
@@ -8041,11 +8044,12 @@  qla28xx_get_aux_images(
 	}
 
 	ql_dbg(ql_dbg_init, vha, 0x018f,
-	    "aux images active: BCFG=%u VPD/NVR=%u NPIV0/1=%u NPIV2/3=%u\n",
+	    "aux images active: BCFG=%u VPD/NVR=%u NPIV0/1=%u NPIV2/3=%u, NVME=%u\n",
 	    active_regions->aux.board_config,
 	    active_regions->aux.vpd_nvram,
 	    active_regions->aux.npiv_config_0_1,
-	    active_regions->aux.npiv_config_2_3);
+	    active_regions->aux.npiv_config_2_3,
+	    active_regions->aux.nvme_params);
 }
 
 void