All of lore.kernel.org
 help / color / mirror / Atom feed
From: Himanshu Madhani <hmadhani@marvell.com>
To: <James.Bottomley@HansenPartnership.com>, <martin.petersen@oracle.com>
Cc: <hmadhani@marvell.com>, <linux-scsi@vger.kernel.org>
Subject: [PATCH 12/18] qla2xxx: Fix RDP respond data format
Date: Wed, 26 Feb 2020 14:40:16 -0800	[thread overview]
Message-ID: <20200226224022.24518-13-hmadhani@marvell.com> (raw)
In-Reply-To: <20200226224022.24518-1-hmadhani@marvell.com>

From: Quinn Tran <qutran@marvell.com>

RPD information failed to dispay by switch cli command.
This is caused by driver failure to properly format RDP
respond data with data descriptor to allow switch to parse it
corretly.

Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
---
 drivers/scsi/qla2xxx/qla_os.c | 102 +++++++++++++++++++-----------------------
 1 file changed, 47 insertions(+), 55 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 5772f788661b..ede4529c4718 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -5972,7 +5972,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 	    &bbc_dma, GFP_KERNEL);
 
 	/* Prepare Response IOCB */
-	memset(rsp_els, 0, sizeof(*rsp_els));
 	rsp_els->entry_type = ELS_IOCB_TYPE;
 	rsp_els->entry_count = 1;
 	rsp_els->sys_define = 0;
@@ -6019,6 +6018,11 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 	rsp_payload->ls_req_info_desc2.req_payload_word_0 =
 	    cpu_to_be32p((uint32_t *)purex->els_frame_payload);
 
+
+	rsp_payload->sfp_diag_desc.desc_tag = cpu_to_be32(0x10000);
+	rsp_payload->sfp_diag_desc.desc_len =
+		cpu_to_be32(RDP_DESC_LEN(rsp_payload->sfp_diag_desc));
+
 	if (sfp) {
 		/* SFP Flags */
 		memset(sfp, 0, SFP_RTDI_LEN);
@@ -6042,23 +6046,18 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 				sfp_flags |= BIT_6; /* sfp+ */
 		}
 
+		rsp_payload->sfp_diag_desc.sfp_flags = cpu_to_be16(sfp_flags);
+
 		/* SFP Diagnostics */
 		memset(sfp, 0, SFP_RTDI_LEN);
 		rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa2, 0x60, 10, 0);
-		if (!rval && sfp_flags) {
+		if (!rval) {
 			uint16_t *trx = (void *)sfp; /* already be16 */
-
-			rsp_payload->sfp_diag_desc.desc_tag =
-			    cpu_to_be32(0x10000);
-			rsp_payload->sfp_diag_desc.desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(rsp_payload->sfp_diag_desc));
 			rsp_payload->sfp_diag_desc.temperature = trx[0];
 			rsp_payload->sfp_diag_desc.vcc = trx[1];
 			rsp_payload->sfp_diag_desc.tx_bias = trx[2];
 			rsp_payload->sfp_diag_desc.tx_power = trx[3];
 			rsp_payload->sfp_diag_desc.rx_power = trx[4];
-			rsp_payload->sfp_diag_desc.sfp_flags =
-			    cpu_to_be16(sfp_flags);
 		}
 	}
 
@@ -6071,14 +6070,14 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 	rsp_payload->port_speed_desc.operating_speed = cpu_to_be16(
 	    qla25xx_rdp_port_speed_currently(ha));
 
+	/* Link Error Status Descriptor */
+	rsp_payload->ls_err_desc.desc_tag = cpu_to_be32(0x10002);
+	rsp_payload->ls_err_desc.desc_len =
+		cpu_to_be32(RDP_DESC_LEN(rsp_payload->ls_err_desc));
+
 	if (stat) {
 		rval = qla24xx_get_isp_stats(vha, stat, stat_dma, 0);
 		if (!rval) {
-			/* Link Error Status Descriptor */
-			rsp_payload->ls_err_desc.desc_tag =
-			    cpu_to_be32(0x10002);
-			rsp_payload->ls_err_desc.desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(rsp_payload->ls_err_desc));
 			rsp_payload->ls_err_desc.link_fail_cnt =
 			    cpu_to_be32(stat->link_fail_cnt);
 			rsp_payload->ls_err_desc.loss_sync_cnt =
@@ -6117,28 +6116,47 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 	    vha->fabric_port_name,
 	    sizeof(rsp_payload->port_name_direct_desc.WWPN));
 
+	/* Bufer Credit Descriptor */
+	rsp_payload->buffer_credit_desc.desc_tag = cpu_to_be32(0x10006);
+	rsp_payload->buffer_credit_desc.desc_len =
+		cpu_to_be32(RDP_DESC_LEN(rsp_payload->buffer_credit_desc));
+	rsp_payload->buffer_credit_desc.fcport_b2b = 0;
+	rsp_payload->buffer_credit_desc.attached_fcport_b2b = cpu_to_be32(0);
+	rsp_payload->buffer_credit_desc.fcport_rtt = cpu_to_be32(0);
+
 	if (bbc) {
 		memset(bbc, 0, sizeof(*bbc));
 		rval = qla24xx_get_buffer_credits(vha, bbc, bbc_dma);
 		if (!rval) {
-			/* Bufer Credit Descriptor */
-			rsp_payload->buffer_credit_desc.desc_tag =
-			    cpu_to_be32(0x10006);
-			rsp_payload->buffer_credit_desc.desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(
-				rsp_payload->buffer_credit_desc));
 			rsp_payload->buffer_credit_desc.fcport_b2b =
 			    cpu_to_be32(LSW(bbc->parameter[0]));
-			rsp_payload->buffer_credit_desc.attached_fcport_b2b =
-			    cpu_to_be32(0);
-			rsp_payload->buffer_credit_desc.fcport_rtt =
-			    cpu_to_be32(0);
 		}
 	}
 
 	if (rsp_payload_length < sizeof(*rsp_payload))
 		goto send;
 
+	/* Optical Element Descriptor, Temperature */
+	rsp_payload->optical_elmt_desc[0].desc_tag = cpu_to_be32(0x10007);
+	rsp_payload->optical_elmt_desc[0].desc_len =
+		cpu_to_be32(RDP_DESC_LEN(*rsp_payload->optical_elmt_desc));
+	/* Optical Element Descriptor, Voltage */
+	rsp_payload->optical_elmt_desc[1].desc_tag = cpu_to_be32(0x10007);
+	rsp_payload->optical_elmt_desc[1].desc_len =
+		cpu_to_be32(RDP_DESC_LEN(*rsp_payload->optical_elmt_desc));
+	/* Optical Element Descriptor, Tx Bias Current */
+	rsp_payload->optical_elmt_desc[2].desc_tag = cpu_to_be32(0x10007);
+	rsp_payload->optical_elmt_desc[2].desc_len =
+		cpu_to_be32(RDP_DESC_LEN(*rsp_payload->optical_elmt_desc));
+	/* Optical Element Descriptor, Tx Power */
+	rsp_payload->optical_elmt_desc[3].desc_tag = cpu_to_be32(0x10007);
+	rsp_payload->optical_elmt_desc[3].desc_len =
+		cpu_to_be32(RDP_DESC_LEN(*rsp_payload->optical_elmt_desc));
+	/* Optical Element Descriptor, Rx Power */
+	rsp_payload->optical_elmt_desc[4].desc_tag = cpu_to_be32(0x10007);
+	rsp_payload->optical_elmt_desc[4].desc_len =
+		cpu_to_be32(RDP_DESC_LEN(*rsp_payload->optical_elmt_desc));
+
 	if (sfp) {
 		memset(sfp, 0, SFP_RTDI_LEN);
 		rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa2, 0, 64, 0);
@@ -6146,11 +6164,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 			uint16_t *trx = (void *)sfp; /* already be16 */
 
 			/* Optical Element Descriptor, Temperature */
-			rsp_payload->optical_elmt_desc[0].desc_tag =
-			    cpu_to_be32(0x10007);
-			rsp_payload->optical_elmt_desc[0].desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(
-				*rsp_payload->optical_elmt_desc));
 			rsp_payload->optical_elmt_desc[0].high_alarm = trx[0];
 			rsp_payload->optical_elmt_desc[0].low_alarm = trx[1];
 			rsp_payload->optical_elmt_desc[0].high_warn = trx[2];
@@ -6159,11 +6172,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 			    cpu_to_be32(1 << 28);
 
 			/* Optical Element Descriptor, Voltage */
-			rsp_payload->optical_elmt_desc[1].desc_tag =
-			    cpu_to_be32(0x10007);
-			rsp_payload->optical_elmt_desc[1].desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(
-				*rsp_payload->optical_elmt_desc));
 			rsp_payload->optical_elmt_desc[1].high_alarm = trx[4];
 			rsp_payload->optical_elmt_desc[1].low_alarm = trx[5];
 			rsp_payload->optical_elmt_desc[1].high_warn = trx[6];
@@ -6172,11 +6180,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 			    cpu_to_be32(2 << 28);
 
 			/* Optical Element Descriptor, Tx Bias Current */
-			rsp_payload->optical_elmt_desc[2].desc_tag =
-			    cpu_to_be32(0x10007);
-			rsp_payload->optical_elmt_desc[2].desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(
-				*rsp_payload->optical_elmt_desc));
 			rsp_payload->optical_elmt_desc[2].high_alarm = trx[8];
 			rsp_payload->optical_elmt_desc[2].low_alarm = trx[9];
 			rsp_payload->optical_elmt_desc[2].high_warn = trx[10];
@@ -6185,11 +6188,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 			    cpu_to_be32(3 << 28);
 
 			/* Optical Element Descriptor, Tx Power */
-			rsp_payload->optical_elmt_desc[3].desc_tag =
-			    cpu_to_be32(0x10007);
-			rsp_payload->optical_elmt_desc[3].desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(
-				*rsp_payload->optical_elmt_desc));
 			rsp_payload->optical_elmt_desc[3].high_alarm = trx[12];
 			rsp_payload->optical_elmt_desc[3].low_alarm = trx[13];
 			rsp_payload->optical_elmt_desc[3].high_warn = trx[14];
@@ -6198,11 +6196,6 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 			    cpu_to_be32(4 << 28);
 
 			/* Optical Element Descriptor, Rx Power */
-			rsp_payload->optical_elmt_desc[4].desc_tag =
-			    cpu_to_be32(0x10007);
-			rsp_payload->optical_elmt_desc[4].desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(
-				*rsp_payload->optical_elmt_desc));
 			rsp_payload->optical_elmt_desc[4].high_alarm = trx[16];
 			rsp_payload->optical_elmt_desc[4].low_alarm = trx[17];
 			rsp_payload->optical_elmt_desc[4].high_warn = trx[18];
@@ -6256,16 +6249,15 @@ void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, void *pkt)
 		}
 	}
 
+	/* Optical Product Data Descriptor */
+	rsp_payload->optical_prod_desc.desc_tag = cpu_to_be32(0x10008);
+	rsp_payload->optical_prod_desc.desc_len =
+		cpu_to_be32(RDP_DESC_LEN(rsp_payload->optical_prod_desc));
+
 	if (sfp) {
 		memset(sfp, 0, SFP_RTDI_LEN);
 		rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa0, 20, 64, 0);
 		if (!rval) {
-			/* Optical Product Data Descriptor */
-			rsp_payload->optical_prod_desc.desc_tag =
-			    cpu_to_be32(0x10008);
-			rsp_payload->optical_prod_desc.desc_len =
-			    cpu_to_be32(RDP_DESC_LEN(
-				rsp_payload->optical_prod_desc));
 			memcpy(rsp_payload->optical_prod_desc.vendor_name,
 			    sfp + 0,
 			    sizeof(rsp_payload->optical_prod_desc.vendor_name));
-- 
2.12.0


  parent reply	other threads:[~2020-02-26 22:43 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-26 22:40 [PATCH 00/18] qla2xxx: fixes for the driver Himanshu Madhani
2020-02-26 22:40 ` [PATCH 01/18] qla2xxX: Add 16.0GT for PCI String Himanshu Madhani
2020-02-26 22:40 ` [PATCH 02/18] qla2xxx: Avoid setting firmware options twice in 24xx_update_fw_options Himanshu Madhani
2020-02-26 22:40 ` [PATCH 03/18] qla2xxx: Use FC generic update firmware options routine for ISP27xx Himanshu Madhani
2020-02-26 22:40 ` [PATCH 04/18] qla2xxx: Fix FCP-SCSI FC4 flag passing error Himanshu Madhani
2020-02-26 22:40 ` [PATCH 05/18] qla2xxx: Improved secure flash support messages Himanshu Madhani
2020-02-26 22:40 ` [PATCH 06/18] qla2xxx: Return appropriate failure through BSG Interface Himanshu Madhani
2020-02-26 22:40 ` [PATCH 07/18] qla2xxx: Use a dedicated interrupt handler for 'handshake-required' ISPs Himanshu Madhani
2020-02-26 22:40 ` [PATCH 08/18] qla2xxx: fix FW resource count values Himanshu Madhani
2020-02-26 22:40 ` [PATCH 09/18] qla2xxx: Update BPM enablement semantics Himanshu Madhani
2020-02-26 22:40 ` [PATCH 10/18] qla2xxx: add more FW debug information Himanshu Madhani
2020-02-26 22:40 ` [PATCH 11/18] qla2xxx: Force semaphore on flash validation failure Himanshu Madhani
2020-02-26 22:40 ` Himanshu Madhani [this message]
2020-02-26 22:40 ` [PATCH 13/18] qla2xxx: Fix NPIV instantiation after FW dump Himanshu Madhani
2020-02-26 22:40 ` [PATCH 14/18] qla2xxx: Serialize fc_port alloc in N2N Himanshu Madhani
2020-02-26 22:40 ` [PATCH 15/18] qla2xxx: Remove restriction of FC T10-PI and FC-NVMe Himanshu Madhani
2020-02-26 22:40 ` [PATCH 16/18] qla2xxx: Handle NVME status iocb correctly Himanshu Madhani
2020-02-26 22:40 ` [PATCH 17/18] qla2xxx: Set Nport ID for N2N Himanshu Madhani
2020-02-26 22:40 ` [PATCH 18/18] qla2xxx: Update driver version to 10.01.00.25-k Himanshu Madhani
2020-02-29  1:33 ` [PATCH 00/18] qla2xxx: fixes for the driver Martin K. Petersen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200226224022.24518-13-hmadhani@marvell.com \
    --to=hmadhani@marvell.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.