linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Saurav Kashyap <saurav.kashyap@qlogic.com>
To: jbottomley@parallels.com
Cc: giridhar.malavali@qlogic.com, saurav.kashyap@qlogic.com,
	andrew.vasquez@qlogic.com, linux-scsi@vger.kernel.org
Subject: [PATCH 12/42] qla2xxx: Add ISP8044 serdes bsg interface.
Date: Fri, 11 Apr 2014 16:54:17 -0400	[thread overview]
Message-ID: <1397249687-32666-13-git-send-email-saurav.kashyap@qlogic.com> (raw)
In-Reply-To: <1397249687-32666-1-git-send-email-saurav.kashyap@qlogic.com>

From: Joe Carnuccio <joe.carnuccio@qlogic.com>

Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_bsg.c |   47 +++++++++++++++++++++++++-
 drivers/scsi/qla2xxx/qla_bsg.h |    7 ++++
 drivers/scsi/qla2xxx/qla_dbg.c |    2 +-
 drivers/scsi/qla2xxx/qla_def.h |    7 ++++
 drivers/scsi/qla2xxx/qla_gbl.h |    5 +++
 drivers/scsi/qla2xxx/qla_mbx.c |   72 ++++++++++++++++++++++++++++++++++++++++
 6 files changed, 137 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
index 71ff340..467c694 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -2054,9 +2054,49 @@ qla26xx_serdes_op(struct fc_bsg_job *bsg_job)
 		bsg_job->reply->reply_payload_rcv_len = sizeof(sr);
 		break;
 	default:
-		ql_log(ql_log_warn, vha, 0x708c,
+		ql_dbg(ql_dbg_user, vha, 0x708c,
 		    "Unknown serdes cmd %x.\n", sr.cmd);
-		rval = -EDOM;
+		rval = -EINVAL;
+		break;
+	}
+
+	bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
+	    rval ? EXT_STATUS_MAILBOX : 0;
+
+	bsg_job->reply_len = sizeof(struct fc_bsg_reply);
+	bsg_job->reply->result = DID_OK << 16;
+	bsg_job->job_done(bsg_job);
+	return 0;
+}
+
+static int
+qla8044_serdes_op(struct fc_bsg_job *bsg_job)
+{
+	struct Scsi_Host *host = bsg_job->shost;
+	scsi_qla_host_t *vha = shost_priv(host);
+	int rval = 0;
+	struct qla_serdes_reg_ex sr;
+
+	memset(&sr, 0, sizeof(sr));
+
+	sg_copy_to_buffer(bsg_job->request_payload.sg_list,
+	    bsg_job->request_payload.sg_cnt, &sr, sizeof(sr));
+
+	switch (sr.cmd) {
+	case INT_SC_SERDES_WRITE_REG:
+		rval = qla8044_write_serdes_word(vha, sr.addr, sr.val);
+		bsg_job->reply->reply_payload_rcv_len = 0;
+		break;
+	case INT_SC_SERDES_READ_REG:
+		rval = qla8044_read_serdes_word(vha, sr.addr, &sr.val);
+		sg_copy_from_buffer(bsg_job->reply_payload.sg_list,
+		    bsg_job->reply_payload.sg_cnt, &sr, sizeof(sr));
+		bsg_job->reply->reply_payload_rcv_len = sizeof(sr);
+		break;
+	default:
+		ql_dbg(ql_dbg_user, vha, 0x70cf,
+		    "Unknown serdes cmd %x.\n", sr.cmd);
+		rval = -EINVAL;
 		break;
 	}
 
@@ -2121,6 +2161,9 @@ qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
 	case QL_VND_SERDES_OP:
 		return qla26xx_serdes_op(bsg_job);
 
+	case QL_VND_SERDES_OP_EX:
+		return qla8044_serdes_op(bsg_job);
+
 	default:
 		return -ENOSYS;
 	}
diff --git a/drivers/scsi/qla2xxx/qla_bsg.h b/drivers/scsi/qla2xxx/qla_bsg.h
index e5c2126..4e49d0a 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.h
+++ b/drivers/scsi/qla2xxx/qla_bsg.h
@@ -24,6 +24,7 @@
 #define QL_VND_READ_I2C		0x11
 #define QL_VND_FX00_MGMT_CMD	0x12
 #define QL_VND_SERDES_OP	0x13
+#define	QL_VND_SERDES_OP_EX	0x14
 
 /* BSG Vendor specific subcode returns */
 #define EXT_STATUS_OK			0
@@ -225,4 +226,10 @@ struct qla_serdes_reg {
 	uint16_t val;
 } __packed;
 
+struct qla_serdes_reg_ex {
+	uint16_t cmd;
+	uint32_t addr;
+	uint32_t val;
+} __packed;
+
 #endif
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 7cf1044..ba72e16 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -15,7 +15,7 @@
  * |                              |                    | 0x0144,0x0146	|
  * |                              |                    | 0x015b-0x0160	|
  * |                              |                    | 0x016e-0x0170	|
- * | Mailbox commands             |       0x1187       | 0x1018-0x1019	|
+ * | Mailbox commands             |       0x118d       | 0x1018-0x1019	|
  * |                              |                    | 0x10ca         |
  * |                              |                    | 0x1115-0x1116  |
  * |                              |                    | 0x111a-0x111b	|
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index bab1cf1..2326827 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -965,6 +965,13 @@ struct mbx_cmd_32 {
  */
 #define MBC_WRITE_MPI_REGISTER		0x01    /* Write MPI Register. */
 
+/*
+ * ISP8044 mailbox commands
+ */
+#define MBC_SET_GET_ETH_SERDES_REG	0x150
+#define HCS_WRITE_SERDES		0x3
+#define HCS_READ_SERDES			0x4
+
 /* Firmware return data sizes */
 #define FCAL_MAP_SIZE	128
 
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index e665e81..b66710b 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -347,6 +347,11 @@ extern int
 qla2x00_read_serdes_word(scsi_qla_host_t *, uint16_t, uint16_t *);
 
 extern int
+qla8044_write_serdes_word(scsi_qla_host_t *, uint32_t, uint32_t);
+extern int
+qla8044_read_serdes_word(scsi_qla_host_t *, uint32_t, uint32_t *);
+
+extern int
 qla2x00_set_serdes_params(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t);
 
 extern int
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 601562f..0f7887d 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -2879,6 +2879,78 @@ qla2x00_read_serdes_word(scsi_qla_host_t *vha, uint16_t addr, uint16_t *data)
 	return rval;
 }
 
+int
+qla8044_write_serdes_word(scsi_qla_host_t *vha, uint32_t addr, uint32_t data)
+{
+	int rval;
+	mbx_cmd_t mc;
+	mbx_cmd_t *mcp = &mc;
+
+	if (!IS_QLA8044(vha->hw))
+		return QLA_FUNCTION_FAILED;
+
+	ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1186,
+	    "Entered %s.\n", __func__);
+
+	mcp->mb[0] = MBC_SET_GET_ETH_SERDES_REG;
+	mcp->mb[1] = HCS_WRITE_SERDES;
+	mcp->mb[3] = LSW(addr);
+	mcp->mb[4] = MSW(addr);
+	mcp->mb[5] = LSW(data);
+	mcp->mb[6] = MSW(data);
+	mcp->out_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_1|MBX_0;
+	mcp->in_mb = MBX_0;
+	mcp->tov = MBX_TOV_SECONDS;
+	mcp->flags = 0;
+	rval = qla2x00_mailbox_command(vha, mcp);
+
+	if (rval != QLA_SUCCESS) {
+		ql_dbg(ql_dbg_mbx, vha, 0x1187,
+		    "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
+	} else {
+		ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1188,
+		    "Done %s.\n", __func__);
+	}
+
+	return rval;
+}
+
+int
+qla8044_read_serdes_word(scsi_qla_host_t *vha, uint32_t addr, uint32_t *data)
+{
+	int rval;
+	mbx_cmd_t mc;
+	mbx_cmd_t *mcp = &mc;
+
+	if (!IS_QLA8044(vha->hw))
+		return QLA_FUNCTION_FAILED;
+
+	ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1189,
+	    "Entered %s.\n", __func__);
+
+	mcp->mb[0] = MBC_SET_GET_ETH_SERDES_REG;
+	mcp->mb[1] = HCS_READ_SERDES;
+	mcp->mb[3] = LSW(addr);
+	mcp->mb[4] = MSW(addr);
+	mcp->out_mb = MBX_4|MBX_3|MBX_1|MBX_0;
+	mcp->in_mb = MBX_2|MBX_1|MBX_0;
+	mcp->tov = MBX_TOV_SECONDS;
+	mcp->flags = 0;
+	rval = qla2x00_mailbox_command(vha, mcp);
+
+	*data = mcp->mb[2] << 16 | mcp->mb[1];
+
+	if (rval != QLA_SUCCESS) {
+		ql_dbg(ql_dbg_mbx, vha, 0x118a,
+		    "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
+	} else {
+		ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x118b,
+		    "Done %s.\n", __func__);
+	}
+
+	return rval;
+}
+
 /**
  * qla2x00_set_serdes_params() -
  * @ha: HA context
-- 
1.7.7


  parent reply	other threads:[~2014-04-11 21:32 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-11 20:54 [PATCH 00/42] qla2xxx: 8.07.00.08-k: Updates for scsi "misc" branch Saurav Kashyap
2014-04-11 20:54 ` [PATCH 01/42] qla2xxx: Wait for reset completion without lock for ISPFX00 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 02/42] qla2xxx: Do not schedule reset when one is already active when receiving an invalid status handle Saurav Kashyap
2014-04-11 20:54 ` [PATCH 03/42] qla2xxx: Correct operations for ISP27xx template types 270 and 271 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 04/42] qla2xxx: Allow ISP83XX and ISP27XX both to write req_q_out register Saurav Kashyap
2014-04-11 20:54 ` [PATCH 05/42] qla2xxx: Correct ISP83xx/ISP27xx mislogic in setting out_mb in qla25xx_init_req_que() Saurav Kashyap
2014-04-11 20:54 ` [PATCH 06/42] qla2xxx: Log when device state is moved to failed state Saurav Kashyap
2014-04-11 20:54 ` [PATCH 07/42] qla2xxx: Issue abort command for outstanding commands during cleanup when only firmware is alive Saurav Kashyap
2014-04-11 20:54 ` [PATCH 08/42] qla2xxx: Add pci device id 0x2271 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 09/42] qla2xxx: Allow the next firmware dump if the previous dump capture fails for ISP8044 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 10/42] qla2xxx: Support of new firmware dump opcodes QLA8044_RDDFE(38), QLA8044_RDMDIO(39),QLA8044_POLLWR(40) Saurav Kashyap
2014-04-11 20:54 ` [PATCH 11/42] qla2xxx: Check for peg alive counter and clear any outstanding mailbox command Saurav Kashyap
2014-04-11 20:54 ` Saurav Kashyap [this message]
2014-04-11 20:54 ` [PATCH 13/42] qla2xxx: Correction to ISP27xx template entry types 256 and 258 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 14/42] qla2xxx: Track the process when the ROM_LOCK failure happens Saurav Kashyap
2014-04-11 20:54 ` [PATCH 15/42] qla2xxx: Remove unnecessary delays from fw dump code path Saurav Kashyap
2014-04-11 20:54 ` [PATCH 16/42] qla2xxx: Introduce fw_dump_flag to track fw dump progress Saurav Kashyap
2014-04-11 20:54 ` [PATCH 17/42] qla2xxx: Enable fw_dump_size for ISP8044 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 18/42] qla2xxx: Update entry type 270 to match spec update Saurav Kashyap
2014-04-11 20:54 ` [PATCH 19/42] qla2xxx: Change copyright year to 2014 in all the source files Saurav Kashyap
2014-04-11 20:54 ` [PATCH 20/42] qla2xxx: Decrease pci access for response queue processing for ISPFX00 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 21/42] qla2xxx: Use proper log message for flash lock failed error Saurav Kashyap
2014-04-11 20:54 ` [PATCH 22/42] qla2xxx: Include <delay.h> file for msleep declartion in qla_nx2.c file Saurav Kashyap
2014-04-11 20:54 ` [PATCH 23/42] qla2xxx: Remove unnecessary printk_ratelimited from qla_nx2.c Saurav Kashyap
2014-04-11 20:54 ` [PATCH 24/42] qla2xxx: ISP8044 poll ipmdio bus timeout improvement Saurav Kashyap
2014-04-11 20:54 ` [PATCH 25/42] qla2xxx: IOCB data should be copied to I/O mem using memcpy_toio Saurav Kashyap
2014-04-11 20:54 ` [PATCH 26/42] qla2xxx: Avoid escalating the SCSI error handler if the command is not found in firmware Saurav Kashyap
2014-04-11 20:54 ` [PATCH 27/42] qla2xxx: Adjust adapter reset routine to the changes in firmware specification for ISPFx00 Saurav Kashyap
2014-04-11 20:54 ` [PATCH 28/42] qla2xxx: Clear loop_id for ports that are marked lost during fabric scanning Saurav Kashyap
2014-04-11 20:54 ` [PATCH 29/42] qla2xxx: Check the QLA8044_CRB_DRV_ACTIVE_INDEX register when we are not the owner of the reset Saurav Kashyap
2014-04-11 20:54 ` [PATCH 30/42] qla2xxx: Reduce the time we wait for a command to complete during SCSI error handling Saurav Kashyap
2014-04-11 20:54 ` [PATCH 31/42] qla2xxx: ISP27xx firmware dump template spec updates (including T274) Saurav Kashyap
2014-04-11 20:54 ` [PATCH 32/42] qla2xxx: ISP27xx queue index shadow registers Saurav Kashyap
2014-04-11 20:54 ` [PATCH 33/42] qla2xxx: Delay driver unload if there is any pending activity going on Saurav Kashyap
2014-04-11 20:54 ` [PATCH 34/42] qla2xxx: Don't check for firmware hung during the reset context for ISP82XX Saurav Kashyap
2014-04-11 20:54 ` [PATCH 35/42] qla2xxx: Fix beacon blink logic for ISP26xx/83xx Saurav Kashyap
2014-04-11 20:54 ` [PATCH 36/42] qla2xxx: Add MBC option for fast SFP data access Saurav Kashyap
2014-04-11 20:54 ` [PATCH 37/42] qla2xxx: Remove mapped vp index iterator macro dead code Saurav Kashyap
2014-04-11 20:54 ` [PATCH 38/42] qla2xxx: T10-Dif: add T10-PI support Saurav Kashyap
2014-04-11 20:54 ` [PATCH 39/42] qla2xxx: ABTS cause double free of qla_tgt_cmd + Saurav Kashyap
2014-05-23  3:00   ` Nicholas A. Bellinger
2014-05-28 18:52     ` Quinn Tran
2014-04-11 20:54 ` [PATCH 40/42] qla2xxx: Do logins from a chip reset in DPC thread instead of the error handler thread Saurav Kashyap
2014-04-11 20:54 ` [PATCH 41/42] qla2xxx: Remove wait for online from host reset handler Saurav Kashyap
2014-04-11 20:54 ` [PATCH 42/42] qla2xxx: Update the driver version to 8.07.00.08-k Saurav Kashyap

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=1397249687-32666-13-git-send-email-saurav.kashyap@qlogic.com \
    --to=saurav.kashyap@qlogic.com \
    --cc=andrew.vasquez@qlogic.com \
    --cc=giridhar.malavali@qlogic.com \
    --cc=jbottomley@parallels.com \
    --cc=linux-scsi@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).