All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx
@ 2011-05-07  0:30 madhu.iyengar
  2011-05-07  0:30 ` [PATCH 00/12] qla2xxx: Updates for scsi-misc-2.6 madhu.iyengar
                   ` (16 more replies)
  0 siblings, 17 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Madhuranath Iyengar

From: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>

James,

Please apply these patches. Thanks.

Andrew Vasquez (1):
  qla2xxx: Properly set the dsd_list_len for dsd_chaining in cmd type
    6.

Arun Easi (2):
  qla2xxx: Fix hang during driver unload when vport is active.
  qla2xxx: Fix vport delete hang when logins are outstanding.

Saurav Kashyap (1):
  qla2xxx: Fix virtual port failing to login after chip reset.

 drivers/scsi/qla2xxx/qla_attr.c |    5 +++--
 drivers/scsi/qla2xxx/qla_fw.h   |    3 +--
 drivers/scsi/qla2xxx/qla_nx.c   |    4 ++--
 drivers/scsi/qla2xxx/qla_os.c   |   32 +++++++++++++++++++-------------
 4 files changed, 25 insertions(+), 19 deletions(-)


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 00/12] qla2xxx: Updates for scsi-misc-2.6
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 1/4] qla2xxx: Properly set the dsd_list_len for dsd_chaining in cmd type 6 madhu.iyengar
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Madhuranath Iyengar

From: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>

James,

Please add these patches. Thanks.

Andrew Vasquez (2):
  qla2xxx: Allow an override of the registered maximum LUN.
  qla2xxx: Clear complete initialization control block.

Chad Dupuis (2):
  qla2xxx: Log if qla82xx firmware fails to load from flash.
  qla2xxx: Add qla82xx_rom_unlock() function.

Joe Carnuccio (5):
  qla2xxx: Correct buffer start in edc sysfs debug print.
  qla2xxx: Correctly read sfp single byte mailbox register.
  qla2xxx: Unify the read/write sfp mailbox command routines.
  qla2xxx: Refactor call to qla2xxx_read_sfp for thermal temperature.
  qla2xxx: Provide method for updating I2C attached VPD.

Madhuranath Iyengar (1):
  qla2xxx: Use passed in host to initialize local scsi_qla_host in
    queuecommand function

Saurav Kashyap (2):
  qla2xxx: Update firmware version after flash update for ISP82xx.
  qla2xxx: Add host number in reset and quiescent message logs.

 drivers/scsi/qla2xxx/qla_attr.c |   14 ++--
 drivers/scsi/qla2xxx/qla_bsg.c  |  151 +++++++++++++++++++++++++++++++++++++++
 drivers/scsi/qla2xxx/qla_bsg.h  |   42 +++++++++++
 drivers/scsi/qla2xxx/qla_gbl.h  |   13 ++--
 drivers/scsi/qla2xxx/qla_init.c |    9 ++-
 drivers/scsi/qla2xxx/qla_mbx.c  |  127 +++++++++------------------------
 drivers/scsi/qla2xxx/qla_mid.c  |    2 +-
 drivers/scsi/qla2xxx/qla_nx.c   |   34 ++++++---
 drivers/scsi/qla2xxx/qla_os.c   |   10 ++-
 9 files changed, 280 insertions(+), 122 deletions(-)


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 1/4] qla2xxx: Properly set the dsd_list_len for dsd_chaining in cmd type 6.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
  2011-05-07  0:30 ` [PATCH 00/12] qla2xxx: Updates for scsi-misc-2.6 madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 01/12] qla2xxx: Update firmware version after flash update for ISP82xx madhu.iyengar
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi

From: Andrew Vasquez <andrew.vasquez@qlogic.com>

The firmware spec has the fcp_data_dseg_len defined as a 32-bit
value, while the corresponding field in the driver structure has
it defined as a 16-bit value.

Cc: stable@kernel.org
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_fw.h |    3 +--
 drivers/scsi/qla2xxx/qla_nx.c |    4 ++--
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h
index 73888ae..691783a 100644
--- a/drivers/scsi/qla2xxx/qla_fw.h
+++ b/drivers/scsi/qla2xxx/qla_fw.h
@@ -416,8 +416,7 @@ struct cmd_type_6 {
 	uint8_t vp_index;
 
 	uint32_t fcp_data_dseg_address[2];	/* Data segment address. */
-	uint16_t fcp_data_dseg_len;		/* Data segment length. */
-	uint16_t reserved_1;			/* MUST be set to 0. */
+	uint32_t fcp_data_dseg_len;		/* Data segment length. */
 };
 
 #define COMMAND_TYPE_7	0x18		/* Command Type 7 entry */
diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index acd1ad3..8b217f3 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -2563,11 +2563,11 @@ qla2xx_build_scsi_type_6_iocbs(srb_t *sp, struct cmd_type_6 *cmd_pkt,
 			dsd_seg = (uint32_t *)&cmd_pkt->fcp_data_dseg_address;
 			*dsd_seg++ = cpu_to_le32(LSD(dsd_ptr->dsd_list_dma));
 			*dsd_seg++ = cpu_to_le32(MSD(dsd_ptr->dsd_list_dma));
-			cmd_pkt->fcp_data_dseg_len = dsd_list_len;
+			*dsd_seg++ = cpu_to_le32(dsd_list_len);
 		} else {
 			*cur_dsd++ = cpu_to_le32(LSD(dsd_ptr->dsd_list_dma));
 			*cur_dsd++ = cpu_to_le32(MSD(dsd_ptr->dsd_list_dma));
-			*cur_dsd++ = dsd_list_len;
+			*cur_dsd++ = cpu_to_le32(dsd_list_len);
 		}
 		cur_dsd = (uint32_t *)next_dsd;
 		while (avail_dsds) {
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 01/12] qla2xxx: Update firmware version after flash update for ISP82xx.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
  2011-05-07  0:30 ` [PATCH 00/12] qla2xxx: Updates for scsi-misc-2.6 madhu.iyengar
  2011-05-07  0:30 ` [PATCH 1/4] qla2xxx: Properly set the dsd_list_len for dsd_chaining in cmd type 6 madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 02/12] qla2xxx: Correct buffer start in edc sysfs debug print madhu.iyengar
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Saurav Kashyap

From: Saurav Kashyap <saurav.kashyap@qlogic.com>

The driver keeps a copy of the fw_version within the ha structure.
For ISP82xx, this local copy doesn't get updated, and as a result,
the old firmware version ends up getting displayed. This patch fixes
this issue.

Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_init.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 24d2d19..cb69693 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -5435,6 +5435,13 @@ qla82xx_restart_isp(scsi_qla_host_t *vha)
 		ha->isp_abort_cnt = 0;
 		clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
 
+		/* Update the firmware version */
+		qla2x00_get_fw_version(vha, &ha->fw_major_version,
+		    &ha->fw_minor_version, &ha->fw_subminor_version,
+		    &ha->fw_attributes, &ha->fw_memory_size,
+		    ha->mpi_version, &ha->mpi_capabilities,
+		    ha->phy_version);
+
 		if (ha->fce) {
 			ha->flags.fce_enabled = 1;
 			memset(ha->fce, 0,
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 02/12] qla2xxx: Correct buffer start in edc sysfs debug print.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (2 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 01/12] qla2xxx: Update firmware version after flash update for ISP82xx madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 2/4] qla2xxx: Fix hang during driver unload when vport is active madhu.iyengar
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Joe Carnuccio

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

The debug print prints the first byte of the buffer which is buf[8].

Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_attr.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 260c030..4e51124 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -633,7 +633,7 @@ qla2x00_sysfs_write_edc(struct file *filp, struct kobject *kobj,
 	if (rval != QLA_SUCCESS) {
 		DEBUG2(qla_printk(KERN_INFO, ha,
 		    "Unable to write EDC (%x) %02x:%02x:%04x:%02x:%02x.\n",
-		    rval, dev, adr, opt, len, *buf));
+		    rval, dev, adr, opt, len, buf[8]));
 		return 0;
 	}
 
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 2/4] qla2xxx: Fix hang during driver unload when vport is active.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (3 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 02/12] qla2xxx: Correct buffer start in edc sysfs debug print madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 3/4] qla2xxx: Fix vport delete hang when logins are outstanding madhu.iyengar
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi, Arun Easi

From: Arun Easi <arun.easi@qlogic.com>

Bumping ref count during fc_vport_terminate() was the cause. vport
delete would wait for ref count to drop to zero and that would never
happen.

Cc: stable@kernel.org
Signed-off-by: Arun Easi <arun.easi@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_os.c |   25 +++++++++++++++----------
 1 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 0ca6664..e1efbc7 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -2368,21 +2368,26 @@ qla2x00_remove_one(struct pci_dev *pdev)
 	base_vha = pci_get_drvdata(pdev);
 	ha = base_vha->hw;
 
-	spin_lock_irqsave(&ha->vport_slock, flags);
-	list_for_each_entry(vha, &ha->vp_list, list) {
-		atomic_inc(&vha->vref_count);
+	mutex_lock(&ha->vport_lock);
+	while (ha->cur_vport_count) {
+		struct Scsi_Host *scsi_host;
 
-		if (vha->fc_vport) {
-			spin_unlock_irqrestore(&ha->vport_slock, flags);
+		spin_lock_irqsave(&ha->vport_slock, flags);
 
-			fc_vport_terminate(vha->fc_vport);
+		BUG_ON(base_vha->list.next == &ha->vp_list);
+		/* This assumes first entry in ha->vp_list is always base vha */
+		vha = list_first_entry(&base_vha->list, scsi_qla_host_t, list);
+		scsi_host = scsi_host_get(vha->host);
 
-			spin_lock_irqsave(&ha->vport_slock, flags);
-		}
+		spin_unlock_irqrestore(&ha->vport_slock, flags);
+		mutex_unlock(&ha->vport_lock);
+
+		fc_vport_terminate(vha->fc_vport);
+		scsi_host_put(vha->host);
 
-		atomic_dec(&vha->vref_count);
+		mutex_lock(&ha->vport_lock);
 	}
-	spin_unlock_irqrestore(&ha->vport_slock, flags);
+	mutex_unlock(&ha->vport_lock);
 
 	set_bit(UNLOADING, &base_vha->dpc_flags);
 
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 3/4] qla2xxx: Fix vport delete hang when logins are outstanding.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (4 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 2/4] qla2xxx: Fix hang during driver unload when vport is active madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 03/12] qla2xxx: Use passed in host to initialize local scsi_qla_host in queuecommand function madhu.iyengar
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi, Arun Easi

From: Arun Easi <arun.easi@qlogic.com>

Timer is required to flush out entries that may be present in work queues.

Cc: stable@kernel.org
Signed-off-by: Arun Easi <arun.easi@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_attr.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 75faf48..260c030 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -1877,14 +1877,15 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)
 
 	scsi_remove_host(vha->host);
 
+	/* Allow timer to run to drain queued items, when removing vp */
+	qla24xx_deallocate_vp_id(vha);
+
 	if (vha->timer_active) {
 		qla2x00_vp_stop_timer(vha);
 		DEBUG15(printk(KERN_INFO "scsi(%ld): timer for the vport[%d]"
 		" = %p has stopped\n", vha->host_no, vha->vp_idx, vha));
 	}
 
-	qla24xx_deallocate_vp_id(vha);
-
 	/* No pending activities shall be there on the vha now */
 	DEBUG(msleep(random32()%10));  /* Just to see if something falls on
 					* the net we have placed below */
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 03/12] qla2xxx: Use passed in host to initialize local scsi_qla_host in queuecommand function
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (5 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 3/4] qla2xxx: Fix vport delete hang when logins are outstanding madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 4/4] qla2xxx: Fix virtual port failing to login after chip reset madhu.iyengar
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Madhuranath Iyengar

From: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>

Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_os.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 010f560..8401a6f 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -536,7 +536,7 @@ qla2x00_get_new_sp(scsi_qla_host_t *vha, fc_port_t *fcport,
 static int
 qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 {
-	scsi_qla_host_t *vha = shost_priv(cmd->device->host);
+	scsi_qla_host_t *vha = shost_priv(host);
 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
 	struct fc_rport *rport = starget_to_rport(scsi_target(cmd->device));
 	struct qla_hw_data *ha = vha->hw;
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 4/4] qla2xxx: Fix virtual port failing to login after chip reset.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (6 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 03/12] qla2xxx: Use passed in host to initialize local scsi_qla_host in queuecommand function madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 04/12] qla2xxx: Log if qla82xx firmware fails to load from flash madhu.iyengar
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Saurav Kashyap

From: Saurav Kashyap <saurav.kashyap@qlogic.com>

This patch ensures qla82xx_watchdog is not being run for the vport. It also
makes sure that beacon ON is not done for the vport, as it will lead to the
waking up of the dpc thread again and again.

Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_os.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index e1efbc7..010f560 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -3628,7 +3628,8 @@ qla2x00_timer(scsi_qla_host_t *vha)
 	if (!pci_channel_offline(ha->pdev))
 		pci_read_config_word(ha->pdev, PCI_VENDOR_ID, &w);
 
-	if (IS_QLA82XX(ha)) {
+	/* Make sure qla82xx_watchdog is run only for physical port */
+	if (!vha->vp_idx && IS_QLA82XX(ha)) {
 		if (test_bit(ISP_QUIESCE_NEEDED, &vha->dpc_flags))
 			start_dpc++;
 		qla82xx_watchdog(vha);
@@ -3709,8 +3710,8 @@ qla2x00_timer(scsi_qla_host_t *vha)
 		    atomic_read(&vha->loop_down_timer)));
 	}
 
-	/* Check if beacon LED needs to be blinked */
-	if (ha->beacon_blink_led == 1) {
+	/* Check if beacon LED needs to be blinked for physical host only */
+	if (!vha->vp_idx && (ha->beacon_blink_led == 1)) {
 		set_bit(BEACON_BLINK_NEEDED, &vha->dpc_flags);
 		start_dpc++;
 	}
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 04/12] qla2xxx: Log if qla82xx firmware fails to load from flash.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (7 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 4/4] qla2xxx: Fix virtual port failing to login after chip reset madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 05/12] qla2xxx: Add qla82xx_rom_unlock() function madhu.iyengar
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Chad Dupuis

From: Chad Dupuis <chad.dupuis@qlogic.com>

Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_nx.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index 8b217f3..752b03e 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -2410,9 +2410,13 @@ qla82xx_load_fw(scsi_qla_host_t *vha)
 
 	if (qla82xx_fw_load_from_flash(ha) == QLA_SUCCESS) {
 		qla_printk(KERN_ERR, ha,
-			"Firmware loaded successfully from flash\n");
+		    "Firmware loaded successfully from flash\n");
 		return QLA_SUCCESS;
+	} else {
+		qla_printk(KERN_ERR, ha,
+		    "Firmware load from flash failed\n");
 	}
+
 try_blob_fw:
 	qla_printk(KERN_INFO, ha,
 	    "Attempting to load firmware from blob\n");
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 05/12] qla2xxx: Add qla82xx_rom_unlock() function.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (8 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 04/12] qla2xxx: Log if qla82xx firmware fails to load from flash madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 06/12] qla2xxx: Correctly read sfp single byte mailbox register madhu.iyengar
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Chad Dupuis

From: Chad Dupuis <chad.dupuis@qlogic.com>

Encapsulate the unlocking of the ROM lock in a function for better
code readability.

Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_gbl.h |    1 -
 drivers/scsi/qla2xxx/qla_nx.c  |   20 +++++++++++++-------
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index fbb4b8f..53968cc 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -552,7 +552,6 @@ extern int qla82xx_wr_32(struct qla_hw_data *, ulong, u32);
 extern int qla82xx_rd_32(struct qla_hw_data *, ulong);
 extern int qla82xx_rdmem(struct qla_hw_data *, u64, void *, int);
 extern int qla82xx_wrmem(struct qla_hw_data *, u64, void *, int);
-extern void qla82xx_rom_unlock(struct qla_hw_data *);
 
 /* ISP 8021 IDC */
 extern void qla82xx_clear_drv_active(struct qla_hw_data *);
diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index 752b03e..5d5b603 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -844,6 +844,12 @@ qla82xx_rom_lock(struct qla_hw_data *ha)
 	return 0;
 }
 
+static void
+qla82xx_rom_unlock(struct qla_hw_data *ha)
+{
+	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+}
+
 static int
 qla82xx_wait_rom_busy(struct qla_hw_data *ha)
 {
@@ -924,7 +930,7 @@ qla82xx_rom_fast_read(struct qla_hw_data *ha, int addr, int *valp)
 		return -1;
 	}
 	ret = qla82xx_do_rom_fast_read(ha, addr, valp);
-	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+	qla82xx_rom_unlock(ha);
 	return ret;
 }
 
@@ -1056,7 +1062,7 @@ qla82xx_write_flash_dword(struct qla_hw_data *ha, uint32_t flashaddr,
 	ret = qla82xx_flash_wait_write_finish(ha);
 
 done_write:
-	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+	qla82xx_rom_unlock(ha);
 	return ret;
 }
 
@@ -1144,7 +1150,7 @@ qla82xx_pinit_from_rom(scsi_qla_host_t *vha)
 	qla82xx_wr_32(ha, QLA82XX_CRB_QDR_NET + 0xe4, val);
 	msleep(20);
 
-	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+	qla82xx_rom_unlock(ha);
 
 	/* Read the signature value from the flash.
 	 * Offset 0: Contain signature (0xcafecafe)
@@ -3010,7 +3016,7 @@ qla82xx_unprotect_flash(struct qla_hw_data *ha)
 		qla_printk(KERN_WARNING, ha, "Write disable failed\n");
 
 done_unprotect:
-	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+	qla82xx_rom_unlock(ha);
 	return ret;
 }
 
@@ -3039,7 +3045,7 @@ qla82xx_protect_flash(struct qla_hw_data *ha)
 	if (qla82xx_write_disable_flash(ha) != 0)
 		qla_printk(KERN_WARNING, ha, "Write disable failed\n");
 done_protect:
-	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+	qla82xx_rom_unlock(ha);
 	return ret;
 }
 
@@ -3067,7 +3073,7 @@ qla82xx_erase_sector(struct qla_hw_data *ha, int addr)
 	}
 	ret = qla82xx_flash_wait_write_finish(ha);
 done:
-	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+	qla82xx_rom_unlock(ha);
 	return ret;
 }
 
@@ -3247,7 +3253,7 @@ void qla82xx_rom_lock_recovery(struct qla_hw_data *ha)
 	 * else died while holding it.
 	 * In either case, unlock.
 	 */
-	qla82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK));
+	qla82xx_rom_unlock(ha);
 }
 
 /*
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 06/12] qla2xxx: Correctly read sfp single byte mailbox register.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (9 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 05/12] qla2xxx: Add qla82xx_rom_unlock() function madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 07/12] qla2xxx: Add host number in reset and quiescent message logs madhu.iyengar
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Joe Carnuccio

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

When reading a single byte using the READ SFP mailbox command, the
single byte of data is returned in MB[1] and not MB[8].

The reason that MB[8] was being used is that the spec was unclear
as it evolved over time; and we have not needed to read a single
byte until recently.

Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_mbx.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 975aeaa..aab628b 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -3608,14 +3608,14 @@ qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
 	mcp->mb[9] = adr;
 	mcp->mb[10] = opt;
 	mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-	mcp->in_mb = MBX_0;
+	mcp->in_mb = MBX_1|MBX_0;
 	mcp->tov = MBX_TOV_SECONDS;
 	mcp->flags = 0;
 	rval = qla2x00_mailbox_command(vha, mcp);
 
 	if (opt & BIT_0)
 		if (sfp)
-			*sfp = mcp->mb[8];
+			*sfp = mcp->mb[1];
 
 	if (rval != QLA_SUCCESS) {
 		DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 07/12] qla2xxx: Add host number in reset and quiescent message logs.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (10 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 06/12] qla2xxx: Correctly read sfp single byte mailbox register madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 08/12] qla2xxx: Allow an override of the registered maximum LUN madhu.iyengar
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Saurav Kashyap

From: Saurav Kashyap <saurav.kashyap@qlogic.com>

Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_nx.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index 5d5b603..e1138bc 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -3657,7 +3657,8 @@ void qla82xx_watchdog(scsi_qla_host_t *vha)
 		if (dev_state == QLA82XX_DEV_NEED_RESET &&
 		    !test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags)) {
 			qla_printk(KERN_WARNING, ha,
-			    "%s(): Adapter reset needed!\n", __func__);
+			    "scsi(%ld) %s: Adapter reset needed!\n",
+				vha->host_no, __func__);
 			set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
 			qla2xxx_wake_dpc(vha);
 		} else if (dev_state == QLA82XX_DEV_NEED_QUIESCENT &&
@@ -3704,8 +3705,9 @@ void qla82xx_watchdog(scsi_qla_host_t *vha)
 				if (ha->flags.mbox_busy) {
 					ha->flags.mbox_int = 1;
 					DEBUG2(qla_printk(KERN_ERR, ha,
-					    "Due to fw hung, doing premature "
-					    "completion of mbx command\n"));
+					    "scsi(%ld) Due to fw hung, doing "
+					    "premature completion of mbx "
+					    "command\n", vha->host_no));
 					if (test_bit(MBX_INTR_WAIT,
 					    &ha->mbx_cmd_flags))
 						complete(&ha->mbx_intr_comp);
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 08/12] qla2xxx: Allow an override of the registered maximum LUN.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (11 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 07/12] qla2xxx: Add host number in reset and quiescent message logs madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 09/12] qla2xxx: Clear complete initialization control block madhu.iyengar
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi

From: Andrew Vasquez <andrew.vasquez@qlogic.com>

The 'max_lun' value registered for each scsi_host is currently
capped at 0xffff.  The new module parameter can allow for
2nd-level flat-space addressing method-infrastructure to be
supported.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_gbl.h |    1 +
 drivers/scsi/qla2xxx/qla_mid.c |    2 +-
 drivers/scsi/qla2xxx/qla_os.c  |    8 +++++++-
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 53968cc..79a12aa 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -103,6 +103,7 @@ extern int ql2xenabledif;
 extern int ql2xenablehba_err_chk;
 extern int ql2xtargetreset;
 extern int ql2xdontresethba;
+extern unsigned int ql2xmaxlun;
 
 extern int qla2x00_loop_reset(scsi_qla_host_t *);
 extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index e34d7dd..5e34391 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -456,7 +456,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport)
 	else
 		host->max_cmd_len = MAX_CMDSZ;
 	host->max_channel = MAX_BUSES - 1;
-	host->max_lun = MAX_LUNS;
+	host->max_lun = ql2xmaxlun;
 	host->unique_id = host->host_no;
 	host->max_id = MAX_TARGETS_2200;
 	host->transportt = qla2xxx_transport_vport_template;
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 8401a6f..f461925 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -172,6 +172,12 @@ MODULE_PARM_DESC(ql2xdontresethba,
 	" 0 (Default) -- Reset on failure.\n"
 	" 1 -- Do not reset on failure.\n");
 
+uint ql2xmaxlun = MAX_LUNS;
+module_param(ql2xmaxlun, uint, S_IRUGO);
+MODULE_PARM_DESC(ql2xmaxlun,
+		"Defines the maximum LU number to register with the SCSI "
+		"midlayer. Default is 65535.");
+
 /*
  * SCSI host template entry points
  */
@@ -2136,7 +2142,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 	else
 		host->max_cmd_len = MAX_CMDSZ;
 	host->max_channel = MAX_BUSES - 1;
-	host->max_lun = MAX_LUNS;
+	host->max_lun = ql2xmaxlun;
 	host->transportt = qla2xxx_transport_template;
 	sht->vendor_id = (SCSI_NL_VID_TYPE_PCI | PCI_VENDOR_ID_QLOGIC);
 
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 09/12] qla2xxx: Clear complete initialization control block.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (12 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 08/12] qla2xxx: Allow an override of the registered maximum LUN madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 10/12] qla2xxx: Unify the read/write sfp mailbox command routines madhu.iyengar
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi

From: Andrew Vasquez <andrew.vasquez@qlogic.com>

Use proper init_cb_size member which takes into account
MID/non-MID init-cb structure sizes.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_init.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index cb69693..920b76b 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -5210,7 +5210,7 @@ qla81xx_nvram_config(scsi_qla_host_t *vha)
 	}
 
 	/* Reset Initialization control block */
-	memset(icb, 0, sizeof(struct init_cb_81xx));
+	memset(icb, 0, ha->init_cb_size);
 
 	/* Copy 1st segment. */
 	dptr1 = (uint8_t *)icb;
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 10/12] qla2xxx: Unify the read/write sfp mailbox command routines.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (13 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 09/12] qla2xxx: Clear complete initialization control block madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 11/12] qla2xxx: Refactor call to qla2xxx_read_sfp for thermal temperature madhu.iyengar
  2011-05-07  0:30 ` [PATCH 12/12] qla2xxx: Provide method for updating I2C attached VPD madhu.iyengar
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Joe Carnuccio

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

Make the read/write sfp mailbox command routines uniform, and remove redundancy.
Also protect against attempting to do a single byte dma in these routines.

Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_attr.c |   12 +++---
 drivers/scsi/qla2xxx/qla_gbl.h  |   11 ++----
 drivers/scsi/qla2xxx/qla_mbx.c  |   72 ++++++++++++--------------------------
 3 files changed, 33 insertions(+), 62 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 4e51124..532313e 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -496,8 +496,8 @@ do_read:
 			offset = 0;
 		}
 
-		rval = qla2x00_read_sfp(vha, ha->sfp_data_dma, addr, offset,
-		    SFP_BLOCK_SIZE);
+		rval = qla2x00_read_sfp(vha, ha->sfp_data_dma, ha->sfp_data,
+		    addr, offset, SFP_BLOCK_SIZE, 0);
 		if (rval != QLA_SUCCESS) {
 			qla_printk(KERN_WARNING, ha,
 			    "Unable to read SFP data (%x/%x/%x).\n", rval,
@@ -628,8 +628,8 @@ qla2x00_sysfs_write_edc(struct file *filp, struct kobject *kobj,
 
 	memcpy(ha->edc_data, &buf[8], len);
 
-	rval = qla2x00_write_edc(vha, dev, adr, ha->edc_data_dma,
-	    ha->edc_data, len, opt);
+	rval = qla2x00_write_sfp(vha, ha->edc_data_dma, ha->edc_data,
+	    dev, adr, len, opt);
 	if (rval != QLA_SUCCESS) {
 		DEBUG2(qla_printk(KERN_INFO, ha,
 		    "Unable to write EDC (%x) %02x:%02x:%04x:%02x:%02x.\n",
@@ -685,8 +685,8 @@ qla2x00_sysfs_write_edc_status(struct file *filp, struct kobject *kobj,
 			return -EINVAL;
 
 	memset(ha->edc_data, 0, len);
-	rval = qla2x00_read_edc(vha, dev, adr, ha->edc_data_dma,
-	    ha->edc_data, len, opt);
+	rval = qla2x00_read_sfp(vha, ha->edc_data_dma, ha->edc_data,
+			dev, adr, len, opt);
 	if (rval != QLA_SUCCESS) {
 		DEBUG2(qla_printk(KERN_INFO, ha,
 		    "Unable to write EDC status (%x) %02x:%02x:%04x:%02x.\n",
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 79a12aa..0b38122 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -323,15 +323,12 @@ extern int
 qla2x00_disable_fce_trace(scsi_qla_host_t *, uint64_t *, uint64_t *);
 
 extern int
-qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t, uint16_t);
+qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint8_t *,
+	uint16_t, uint16_t, uint16_t, uint16_t);
 
 extern int
-qla2x00_read_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t,
-    uint8_t *, uint16_t, uint16_t);
-
-extern int
-qla2x00_write_edc(scsi_qla_host_t *, uint16_t, uint16_t, dma_addr_t,
-    uint8_t *, uint16_t, uint16_t);
+qla2x00_write_sfp(scsi_qla_host_t *, dma_addr_t, uint8_t *,
+	uint16_t, uint16_t, uint16_t, uint16_t);
 
 extern int
 qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *);
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index aab628b..7184b87 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -2787,44 +2787,6 @@ qla2x00_disable_fce_trace(scsi_qla_host_t *vha, uint64_t *wr, uint64_t *rd)
 }
 
 int
-qla2x00_read_sfp(scsi_qla_host_t *vha, dma_addr_t sfp_dma, uint16_t addr,
-    uint16_t off, uint16_t count)
-{
-	int rval;
-	mbx_cmd_t mc;
-	mbx_cmd_t *mcp = &mc;
-
-	if (!IS_FWI2_CAPABLE(vha->hw))
-		return QLA_FUNCTION_FAILED;
-
-	DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
-
-	mcp->mb[0] = MBC_READ_SFP;
-	mcp->mb[1] = addr;
-	mcp->mb[2] = MSW(sfp_dma);
-	mcp->mb[3] = LSW(sfp_dma);
-	mcp->mb[6] = MSW(MSD(sfp_dma));
-	mcp->mb[7] = LSW(MSD(sfp_dma));
-	mcp->mb[8] = count;
-	mcp->mb[9] = off;
-	mcp->mb[10] = 0;
-	mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|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) {
-		DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
-		    vha->host_no, rval, mcp->mb[0]));
-	} else {
-		DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
-	}
-
-	return rval;
-}
-
-int
 qla2x00_get_idma_speed(scsi_qla_host_t *vha, uint16_t loop_id,
 	uint16_t *port_speed, uint16_t *mb)
 {
@@ -3589,15 +3551,22 @@ qla81xx_restart_mpi_firmware(scsi_qla_host_t *vha)
 }
 
 int
-qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
-    dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt)
+qla2x00_read_sfp(scsi_qla_host_t *vha, dma_addr_t sfp_dma, uint8_t *sfp,
+	uint16_t dev, uint16_t off, uint16_t len, uint16_t opt)
 {
 	int rval;
 	mbx_cmd_t mc;
 	mbx_cmd_t *mcp = &mc;
+	struct qla_hw_data *ha = vha->hw;
+
+	if (!IS_FWI2_CAPABLE(ha))
+		return QLA_FUNCTION_FAILED;
 
 	DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
 
+	if (len == 1)
+		opt |= BIT_0;
+
 	mcp->mb[0] = MBC_READ_SFP;
 	mcp->mb[1] = dev;
 	mcp->mb[2] = MSW(sfp_dma);
@@ -3605,7 +3574,7 @@ qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
 	mcp->mb[6] = MSW(MSD(sfp_dma));
 	mcp->mb[7] = LSW(MSD(sfp_dma));
 	mcp->mb[8] = len;
-	mcp->mb[9] = adr;
+	mcp->mb[9] = off;
 	mcp->mb[10] = opt;
 	mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
 	mcp->in_mb = MBX_1|MBX_0;
@@ -3614,8 +3583,7 @@ qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
 	rval = qla2x00_mailbox_command(vha, mcp);
 
 	if (opt & BIT_0)
-		if (sfp)
-			*sfp = mcp->mb[1];
+		*sfp = mcp->mb[1];
 
 	if (rval != QLA_SUCCESS) {
 		DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
@@ -3628,18 +3596,24 @@ qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
 }
 
 int
-qla2x00_write_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
-    dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt)
+qla2x00_write_sfp(scsi_qla_host_t *vha, dma_addr_t sfp_dma, uint8_t *sfp,
+	uint16_t dev, uint16_t off, uint16_t len, uint16_t opt)
 {
 	int rval;
 	mbx_cmd_t mc;
 	mbx_cmd_t *mcp = &mc;
+	struct qla_hw_data *ha = vha->hw;
+
+	if (!IS_FWI2_CAPABLE(ha))
+		return QLA_FUNCTION_FAILED;
 
 	DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
 
+	if (len == 1)
+		opt |= BIT_0;
+
 	if (opt & BIT_0)
-		if (sfp)
-			len = *sfp;
+		len = *sfp;
 
 	mcp->mb[0] = MBC_WRITE_SFP;
 	mcp->mb[1] = dev;
@@ -3648,10 +3622,10 @@ qla2x00_write_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
 	mcp->mb[6] = MSW(MSD(sfp_dma));
 	mcp->mb[7] = LSW(MSD(sfp_dma));
 	mcp->mb[8] = len;
-	mcp->mb[9] = adr;
+	mcp->mb[9] = off;
 	mcp->mb[10] = opt;
 	mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-	mcp->in_mb = MBX_0;
+	mcp->in_mb = MBX_1|MBX_0;
 	mcp->tov = MBX_TOV_SECONDS;
 	mcp->flags = 0;
 	rval = qla2x00_mailbox_command(vha, mcp);
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 11/12] qla2xxx: Refactor call to qla2xxx_read_sfp for thermal temperature.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (14 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 10/12] qla2xxx: Unify the read/write sfp mailbox command routines madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  0:30 ` [PATCH 12/12] qla2xxx: Provide method for updating I2C attached VPD madhu.iyengar
  16 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Joe Carnuccio

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

Eliminate duplicate code by refactoring the calls to qla2xxx_read_sfp()
in qla2x00_get_thermal_temp(). This keeps the parameter values separate
from the mailbox register mechanics. This also allows qla2xxx_read_sfp()
to be the sole "spec" for READ SFP semantics.

Signed-off_by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_mbx.c |   53 ++++++++-------------------------------
 1 files changed, 11 insertions(+), 42 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 7184b87..c26f0ac 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -4142,63 +4142,32 @@ int
 qla2x00_get_thermal_temp(scsi_qla_host_t *vha, uint16_t *temp, uint16_t *frac)
 {
 	int rval;
-	mbx_cmd_t mc;
-	mbx_cmd_t *mcp = &mc;
+	uint8_t byte;
 	struct qla_hw_data *ha = vha->hw;
 
-	DEBUG11(printk(KERN_INFO "%s(%ld): entered.\n", __func__, ha->host_no));
+	DEBUG11(printk(KERN_INFO "%s(%ld): entered.\n", __func__, vha->host_no));
 
-	/* High bits. */
-	mcp->mb[0] = MBC_READ_SFP;
-	mcp->mb[1] = 0x98;
-	mcp->mb[2] = 0;
-	mcp->mb[3] = 0;
-	mcp->mb[6] = 0;
-	mcp->mb[7] = 0;
-	mcp->mb[8] = 1;
-	mcp->mb[9] = 0x01;
-	mcp->mb[10] = BIT_13|BIT_0;
-	mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-	mcp->in_mb = MBX_1|MBX_0;
-	mcp->tov = MBX_TOV_SECONDS;
-	mcp->flags = 0;
-	rval = qla2x00_mailbox_command(vha, mcp);
+	/* Integer part */
+	rval = qla2x00_read_sfp(vha, 0, &byte, 0x98, 0x01, 1, BIT_13|BIT_0);
 	if (rval != QLA_SUCCESS) {
 		DEBUG2_3_11(printk(KERN_WARNING
-		    "%s(%ld): failed=%x (%x).\n", __func__,
-		    vha->host_no, rval, mcp->mb[0]));
+		    "%s(%ld): failed=%x.\n", __func__, vha->host_no, rval));
 		ha->flags.thermal_supported = 0;
 		goto fail;
 	}
-	*temp = mcp->mb[1] & 0xFF;
+	*temp = byte;
 
-	/* Low bits. */
-	mcp->mb[0] = MBC_READ_SFP;
-	mcp->mb[1] = 0x98;
-	mcp->mb[2] = 0;
-	mcp->mb[3] = 0;
-	mcp->mb[6] = 0;
-	mcp->mb[7] = 0;
-	mcp->mb[8] = 1;
-	mcp->mb[9] = 0x10;
-	mcp->mb[10] = BIT_13|BIT_0;
-	mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-	mcp->in_mb = MBX_1|MBX_0;
-	mcp->tov = MBX_TOV_SECONDS;
-	mcp->flags = 0;
-	rval = qla2x00_mailbox_command(vha, mcp);
+	/* Fraction part */
+	rval = qla2x00_read_sfp(vha, 0, &byte, 0x98, 0x10, 1, BIT_13|BIT_0);
 	if (rval != QLA_SUCCESS) {
 		DEBUG2_3_11(printk(KERN_WARNING
-		    "%s(%ld): failed=%x (%x).\n", __func__,
-		    vha->host_no, rval, mcp->mb[0]));
+		    "%s(%ld): failed=%x.\n", __func__, vha->host_no, rval));
 		ha->flags.thermal_supported = 0;
 		goto fail;
 	}
-	*frac = ((mcp->mb[1] & 0xFF) >> 6) * 25;
+	*frac = (byte >> 6) * 25;
 
-	if (rval == QLA_SUCCESS)
-		DEBUG11(printk(KERN_INFO
-		    "%s(%ld): done.\n", __func__, ha->host_no));
+	DEBUG11(printk(KERN_INFO "%s(%ld): done.\n", __func__, vha->host_no));
 fail:
 	return rval;
 }
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 12/12] qla2xxx: Provide method for updating I2C attached VPD.
  2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
                   ` (15 preceding siblings ...)
  2011-05-07  0:30 ` [PATCH 11/12] qla2xxx: Refactor call to qla2xxx_read_sfp for thermal temperature madhu.iyengar
@ 2011-05-07  0:30 ` madhu.iyengar
  2011-05-07  1:28   ` Madhu Iyengar
  16 siblings, 1 reply; 20+ messages in thread
From: madhu.iyengar @ 2011-05-07  0:30 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Joe Carnuccio

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

Provide bsg interface for updating VPD attached on the I2C serial bus.

Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_bsg.c |  151 ++++++++++++++++++++++++++++++++++++++++
 drivers/scsi/qla2xxx/qla_bsg.h |   42 +++++++++++
 2 files changed, 193 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
index 8c10e2c..e6c851f 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -1426,6 +1426,148 @@ qla2x00_update_optrom(struct fc_bsg_job *bsg_job)
 }
 
 static int
+qla2x00_update_fru_versions(struct fc_bsg_job *bsg_job)
+{
+	struct Scsi_Host *host = bsg_job->shost;
+	scsi_qla_host_t *vha = shost_priv(host);
+	struct qla_hw_data *ha = vha->hw;
+	int rval = 0;
+	uint8_t bsg[DMA_POOL_SIZE];
+	struct qla_image_version_list *list = (void *)bsg;
+	struct qla_image_version *image;
+	uint32_t count;
+	dma_addr_t sfp_dma;
+	void *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
+	if (!sfp) {
+		bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
+		    EXT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	sg_copy_to_buffer(bsg_job->request_payload.sg_list,
+	    bsg_job->request_payload.sg_cnt, list, sizeof(bsg));
+
+	image = list->version;
+	count = list->count;
+	while (count--) {
+		memcpy(sfp, &image->field_info, sizeof(image->field_info));
+		rval = qla2x00_write_sfp(vha, sfp_dma, sfp,
+		    image->field_address.device, image->field_address.offset,
+		    sizeof(image->field_info), image->field_address.option);
+		if (rval) {
+			bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
+			    EXT_STATUS_MAILBOX;
+			goto dealloc;
+		}
+		image++;
+	}
+
+	bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] = 0;
+
+dealloc:
+	dma_pool_free(ha->s_dma_pool, sfp, sfp_dma);
+
+done:
+	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
+qla2x00_read_fru_status(struct fc_bsg_job *bsg_job)
+{
+	struct Scsi_Host *host = bsg_job->shost;
+	scsi_qla_host_t *vha = shost_priv(host);
+	struct qla_hw_data *ha = vha->hw;
+	int rval = 0;
+	uint8_t bsg[DMA_POOL_SIZE];
+	struct qla_status_reg *sr = (void *)bsg;
+	dma_addr_t sfp_dma;
+	uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
+	if (!sfp) {
+		bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
+		    EXT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	sg_copy_to_buffer(bsg_job->request_payload.sg_list,
+	    bsg_job->request_payload.sg_cnt, sr, sizeof(*sr));
+
+	rval = qla2x00_read_sfp(vha, sfp_dma, sfp,
+	    sr->field_address.device, sr->field_address.offset,
+	    sizeof(sr->status_reg), sr->field_address.option);
+	sr->status_reg = *sfp;
+
+	if (rval) {
+		bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
+		    EXT_STATUS_MAILBOX;
+		goto dealloc;
+	}
+
+	sg_copy_from_buffer(bsg_job->reply_payload.sg_list,
+	    bsg_job->reply_payload.sg_cnt, sr, sizeof(*sr));
+
+	bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] = 0;
+
+dealloc:
+	dma_pool_free(ha->s_dma_pool, sfp, sfp_dma);
+
+done:
+	bsg_job->reply_len = sizeof(struct fc_bsg_reply);
+	bsg_job->reply->reply_payload_rcv_len = sizeof(*sr);
+	bsg_job->reply->result = DID_OK << 16;
+	bsg_job->job_done(bsg_job);
+
+	return 0;
+}
+
+static int
+qla2x00_write_fru_status(struct fc_bsg_job *bsg_job)
+{
+	struct Scsi_Host *host = bsg_job->shost;
+	scsi_qla_host_t *vha = shost_priv(host);
+	struct qla_hw_data *ha = vha->hw;
+	int rval = 0;
+	uint8_t bsg[DMA_POOL_SIZE];
+	struct qla_status_reg *sr = (void *)bsg;
+	dma_addr_t sfp_dma;
+	uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
+	if (!sfp) {
+		bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
+		    EXT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	sg_copy_to_buffer(bsg_job->request_payload.sg_list,
+	    bsg_job->request_payload.sg_cnt, sr, sizeof(*sr));
+
+	*sfp = sr->status_reg;
+	rval = qla2x00_write_sfp(vha, sfp_dma, sfp,
+	    sr->field_address.device, sr->field_address.offset,
+	    sizeof(sr->status_reg), sr->field_address.option);
+
+	if (rval) {
+		bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
+		    EXT_STATUS_MAILBOX;
+		goto dealloc;
+	}
+
+	bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] = 0;
+
+dealloc:
+	dma_pool_free(ha->s_dma_pool, sfp, sfp_dma);
+
+done:
+	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
 qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
 {
 	switch (bsg_job->request->rqst_data.h_vendor.vendor_cmd[0]) {
@@ -1453,6 +1595,15 @@ qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
 	case QL_VND_UPDATE_FLASH:
 		return qla2x00_update_optrom(bsg_job);
 
+	case QL_VND_SET_FRU_VERSION:
+		return qla2x00_update_fru_versions(bsg_job);
+
+	case QL_VND_READ_FRU_STATUS:
+		return qla2x00_read_fru_status(bsg_job);
+
+	case QL_VND_WRITE_FRU_STATUS:
+		return qla2x00_write_fru_status(bsg_job);
+
 	default:
 		bsg_job->reply->result = (DID_ERROR << 16);
 		bsg_job->job_done(bsg_job);
diff --git a/drivers/scsi/qla2xxx/qla_bsg.h b/drivers/scsi/qla2xxx/qla_bsg.h
index 0f0f54e..70caa63 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.h
+++ b/drivers/scsi/qla2xxx/qla_bsg.h
@@ -16,6 +16,16 @@
 #define QL_VND_FCP_PRIO_CFG_CMD	0x06
 #define QL_VND_READ_FLASH	0x07
 #define QL_VND_UPDATE_FLASH	0x08
+#define QL_VND_SET_FRU_VERSION	0x0B
+#define QL_VND_READ_FRU_STATUS	0x0C
+#define QL_VND_WRITE_FRU_STATUS	0x0D
+
+/* BSG Vendor specific subcode returns */
+#define EXT_STATUS_OK			0
+#define EXT_STATUS_ERR			1
+#define EXT_STATUS_INVALID_PARAM	6
+#define EXT_STATUS_MAILBOX		11
+#define EXT_STATUS_NO_MEMORY		17
 
 /* BSG definations for interpreting CommandSent field */
 #define INT_DEF_LB_LOOPBACK_CMD         0
@@ -141,4 +151,36 @@ struct qla_port_param {
 	uint16_t mode;
 	uint16_t speed;
 } __attribute__ ((packed));
+
+
+/* FRU VPD */
+
+#define MAX_FRU_SIZE	36
+
+struct qla_field_address {
+	uint16_t offset;
+	uint16_t device;
+	uint16_t option;
+} __packed;
+
+struct qla_field_info {
+	uint8_t version[MAX_FRU_SIZE];
+} __packed;
+
+struct qla_image_version {
+	struct qla_field_address field_address;
+	struct qla_field_info field_info;
+} __packed;
+
+struct qla_image_version_list {
+	uint32_t count;
+	struct qla_image_version version[0];
+} __packed;
+
+struct qla_status_reg {
+	struct qla_field_address field_address;
+	uint8_t status_reg;
+	uint8_t reserved[7];
+} __packed;
+
 #endif
-- 
1.6.0.2


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* RE: [PATCH 12/12] qla2xxx: Provide method for updating I2C attached VPD.
  2011-05-07  0:30 ` [PATCH 12/12] qla2xxx: Provide method for updating I2C attached VPD madhu.iyengar
@ 2011-05-07  1:28   ` Madhu Iyengar
  0 siblings, 0 replies; 20+ messages in thread
From: Madhu Iyengar @ 2011-05-07  1:28 UTC (permalink / raw)
  To: Madhu Iyengar, James.Bottomley
  Cc: Giridhar Malavali, Andrew Vasquez, linux-scsi, Joe Carnuccio

James,

We submitted this patch by mistake. Can you drop this patch?

We still would appreciate for you to consider the 11 scsi-misc patches in this set, and the 4 scsi-rc patches we sent today.

Thanks,
Madhu

> -----Original Message-----
> From: madhu.iyengar@qlogic.com [mailto:madhu.iyengar@qlogic.com]
> Sent: Friday, May 06, 2011 5:30 PM
> To: James.Bottomley@suse.de
> Cc: Giridhar Malavali; Madhu Iyengar; Andrew Vasquez; linux-
> scsi@vger.kernel.org; Joe Carnuccio
> Subject: [PATCH 12/12] qla2xxx: Provide method for updating I2C attached
> VPD.
>
> From: Joe Carnuccio <joe.carnuccio@qlogic.com>
>
> Provide bsg interface for updating VPD attached on the I2C serial bus.
>
> Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
> Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
> ---
>  drivers/scsi/qla2xxx/qla_bsg.c |  151
> ++++++++++++++++++++++++++++++++++++++++
>  drivers/scsi/qla2xxx/qla_bsg.h |   42 +++++++++++
>  2 files changed, 193 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/scsi/qla2xxx/qla_bsg.c
> b/drivers/scsi/qla2xxx/qla_bsg.c
> index 8c10e2c..e6c851f 100644
> --- a/drivers/scsi/qla2xxx/qla_bsg.c
> +++ b/drivers/scsi/qla2xxx/qla_bsg.c
> @@ -1426,6 +1426,148 @@ qla2x00_update_optrom(struct fc_bsg_job *bsg_job)
>  }
>
>  static int
> +qla2x00_update_fru_versions(struct fc_bsg_job *bsg_job)
> +{
> +     struct Scsi_Host *host = bsg_job->shost;
> +     scsi_qla_host_t *vha = shost_priv(host);
> +     struct qla_hw_data *ha = vha->hw;
> +     int rval = 0;
> +     uint8_t bsg[DMA_POOL_SIZE];
> +     struct qla_image_version_list *list = (void *)bsg;
> +     struct qla_image_version *image;
> +     uint32_t count;
> +     dma_addr_t sfp_dma;
> +     void *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
> +     if (!sfp) {
> +             bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
> +                 EXT_STATUS_NO_MEMORY;
> +             goto done;
> +     }
> +
> +     sg_copy_to_buffer(bsg_job->request_payload.sg_list,
> +         bsg_job->request_payload.sg_cnt, list, sizeof(bsg));
> +
> +     image = list->version;
> +     count = list->count;
> +     while (count--) {
> +             memcpy(sfp, &image->field_info, sizeof(image->field_info));
> +             rval = qla2x00_write_sfp(vha, sfp_dma, sfp,
> +                 image->field_address.device, image->field_address.offset,
> +                 sizeof(image->field_info), image->field_address.option);
> +             if (rval) {
> +                     bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
> +                         EXT_STATUS_MAILBOX;
> +                     goto dealloc;
> +             }
> +             image++;
> +     }
> +
> +     bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] = 0;
> +
> +dealloc:
> +     dma_pool_free(ha->s_dma_pool, sfp, sfp_dma);
> +
> +done:
> +     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
> +qla2x00_read_fru_status(struct fc_bsg_job *bsg_job)
> +{
> +     struct Scsi_Host *host = bsg_job->shost;
> +     scsi_qla_host_t *vha = shost_priv(host);
> +     struct qla_hw_data *ha = vha->hw;
> +     int rval = 0;
> +     uint8_t bsg[DMA_POOL_SIZE];
> +     struct qla_status_reg *sr = (void *)bsg;
> +     dma_addr_t sfp_dma;
> +     uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
> +     if (!sfp) {
> +             bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
> +                 EXT_STATUS_NO_MEMORY;
> +             goto done;
> +     }
> +
> +     sg_copy_to_buffer(bsg_job->request_payload.sg_list,
> +         bsg_job->request_payload.sg_cnt, sr, sizeof(*sr));
> +
> +     rval = qla2x00_read_sfp(vha, sfp_dma, sfp,
> +         sr->field_address.device, sr->field_address.offset,
> +         sizeof(sr->status_reg), sr->field_address.option);
> +     sr->status_reg = *sfp;
> +
> +     if (rval) {
> +             bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
> +                 EXT_STATUS_MAILBOX;
> +             goto dealloc;
> +     }
> +
> +     sg_copy_from_buffer(bsg_job->reply_payload.sg_list,
> +         bsg_job->reply_payload.sg_cnt, sr, sizeof(*sr));
> +
> +     bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] = 0;
> +
> +dealloc:
> +     dma_pool_free(ha->s_dma_pool, sfp, sfp_dma);
> +
> +done:
> +     bsg_job->reply_len = sizeof(struct fc_bsg_reply);
> +     bsg_job->reply->reply_payload_rcv_len = sizeof(*sr);
> +     bsg_job->reply->result = DID_OK << 16;
> +     bsg_job->job_done(bsg_job);
> +
> +     return 0;
> +}
> +
> +static int
> +qla2x00_write_fru_status(struct fc_bsg_job *bsg_job)
> +{
> +     struct Scsi_Host *host = bsg_job->shost;
> +     scsi_qla_host_t *vha = shost_priv(host);
> +     struct qla_hw_data *ha = vha->hw;
> +     int rval = 0;
> +     uint8_t bsg[DMA_POOL_SIZE];
> +     struct qla_status_reg *sr = (void *)bsg;
> +     dma_addr_t sfp_dma;
> +     uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
> +     if (!sfp) {
> +             bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
> +                 EXT_STATUS_NO_MEMORY;
> +             goto done;
> +     }
> +
> +     sg_copy_to_buffer(bsg_job->request_payload.sg_list,
> +         bsg_job->request_payload.sg_cnt, sr, sizeof(*sr));
> +
> +     *sfp = sr->status_reg;
> +     rval = qla2x00_write_sfp(vha, sfp_dma, sfp,
> +         sr->field_address.device, sr->field_address.offset,
> +         sizeof(sr->status_reg), sr->field_address.option);
> +
> +     if (rval) {
> +             bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] =
> +                 EXT_STATUS_MAILBOX;
> +             goto dealloc;
> +     }
> +
> +     bsg_job->reply->reply_data.vendor_reply.vendor_rsp[0] = 0;
> +
> +dealloc:
> +     dma_pool_free(ha->s_dma_pool, sfp, sfp_dma);
> +
> +done:
> +     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
>  qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
>  {
>       switch (bsg_job->request->rqst_data.h_vendor.vendor_cmd[0]) {
> @@ -1453,6 +1595,15 @@ qla2x00_process_vendor_specific(struct fc_bsg_job
> *bsg_job)
>       case QL_VND_UPDATE_FLASH:
>               return qla2x00_update_optrom(bsg_job);
>
> +     case QL_VND_SET_FRU_VERSION:
> +             return qla2x00_update_fru_versions(bsg_job);
> +
> +     case QL_VND_READ_FRU_STATUS:
> +             return qla2x00_read_fru_status(bsg_job);
> +
> +     case QL_VND_WRITE_FRU_STATUS:
> +             return qla2x00_write_fru_status(bsg_job);
> +
>       default:
>               bsg_job->reply->result = (DID_ERROR << 16);
>               bsg_job->job_done(bsg_job);
> diff --git a/drivers/scsi/qla2xxx/qla_bsg.h
> b/drivers/scsi/qla2xxx/qla_bsg.h
> index 0f0f54e..70caa63 100644
> --- a/drivers/scsi/qla2xxx/qla_bsg.h
> +++ b/drivers/scsi/qla2xxx/qla_bsg.h
> @@ -16,6 +16,16 @@
>  #define QL_VND_FCP_PRIO_CFG_CMD      0x06
>  #define QL_VND_READ_FLASH    0x07
>  #define QL_VND_UPDATE_FLASH  0x08
> +#define QL_VND_SET_FRU_VERSION       0x0B
> +#define QL_VND_READ_FRU_STATUS       0x0C
> +#define QL_VND_WRITE_FRU_STATUS      0x0D
> +
> +/* BSG Vendor specific subcode returns */
> +#define EXT_STATUS_OK                        0
> +#define EXT_STATUS_ERR                       1
> +#define EXT_STATUS_INVALID_PARAM     6
> +#define EXT_STATUS_MAILBOX           11
> +#define EXT_STATUS_NO_MEMORY         17
>
>  /* BSG definations for interpreting CommandSent field */
>  #define INT_DEF_LB_LOOPBACK_CMD         0
> @@ -141,4 +151,36 @@ struct qla_port_param {
>       uint16_t mode;
>       uint16_t speed;
>  } __attribute__ ((packed));
> +
> +
> +/* FRU VPD */
> +
> +#define MAX_FRU_SIZE 36
> +
> +struct qla_field_address {
> +     uint16_t offset;
> +     uint16_t device;
> +     uint16_t option;
> +} __packed;
> +
> +struct qla_field_info {
> +     uint8_t version[MAX_FRU_SIZE];
> +} __packed;
> +
> +struct qla_image_version {
> +     struct qla_field_address field_address;
> +     struct qla_field_info field_info;
> +} __packed;
> +
> +struct qla_image_version_list {
> +     uint32_t count;
> +     struct qla_image_version version[0];
> +} __packed;
> +
> +struct qla_status_reg {
> +     struct qla_field_address field_address;
> +     uint8_t status_reg;
> +     uint8_t reserved[7];
> +} __packed;
> +
>  #endif
> --
> 1.6.0.2


This message and any attached documents contain information from QLogic Corporation or its wholly-owned subsidiaries that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message.


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx
@ 2011-05-10 18:18 madhu.iyengar
  0 siblings, 0 replies; 20+ messages in thread
From: madhu.iyengar @ 2011-05-10 18:18 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, madhu.iyengar, andrew.vasquez, linux-scsi,
	Madhuranath Iyengar

From: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>

James,

Please apply these patches. Thanks.

Andrew Vasquez (1):
  qla2xxx: Properly set the dsd_list_len for dsd_chaining in cmd type
    6.

Arun Easi (2):
  qla2xxx: Fix hang during driver unload when vport is active.
  qla2xxx: Fix vport delete hang when logins are outstanding.

Saurav Kashyap (1):
  qla2xxx: Fix virtual port failing to login after chip reset.

 drivers/scsi/qla2xxx/qla_attr.c |    5 +++--
 drivers/scsi/qla2xxx/qla_fw.h   |    3 +--
 drivers/scsi/qla2xxx/qla_nx.c   |    4 ++--
 drivers/scsi/qla2xxx/qla_os.c   |   32 +++++++++++++++++++-------------
 4 files changed, 25 insertions(+), 19 deletions(-)


^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2011-05-10 18:24 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-07  0:30 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar
2011-05-07  0:30 ` [PATCH 00/12] qla2xxx: Updates for scsi-misc-2.6 madhu.iyengar
2011-05-07  0:30 ` [PATCH 1/4] qla2xxx: Properly set the dsd_list_len for dsd_chaining in cmd type 6 madhu.iyengar
2011-05-07  0:30 ` [PATCH 01/12] qla2xxx: Update firmware version after flash update for ISP82xx madhu.iyengar
2011-05-07  0:30 ` [PATCH 02/12] qla2xxx: Correct buffer start in edc sysfs debug print madhu.iyengar
2011-05-07  0:30 ` [PATCH 2/4] qla2xxx: Fix hang during driver unload when vport is active madhu.iyengar
2011-05-07  0:30 ` [PATCH 3/4] qla2xxx: Fix vport delete hang when logins are outstanding madhu.iyengar
2011-05-07  0:30 ` [PATCH 03/12] qla2xxx: Use passed in host to initialize local scsi_qla_host in queuecommand function madhu.iyengar
2011-05-07  0:30 ` [PATCH 4/4] qla2xxx: Fix virtual port failing to login after chip reset madhu.iyengar
2011-05-07  0:30 ` [PATCH 04/12] qla2xxx: Log if qla82xx firmware fails to load from flash madhu.iyengar
2011-05-07  0:30 ` [PATCH 05/12] qla2xxx: Add qla82xx_rom_unlock() function madhu.iyengar
2011-05-07  0:30 ` [PATCH 06/12] qla2xxx: Correctly read sfp single byte mailbox register madhu.iyengar
2011-05-07  0:30 ` [PATCH 07/12] qla2xxx: Add host number in reset and quiescent message logs madhu.iyengar
2011-05-07  0:30 ` [PATCH 08/12] qla2xxx: Allow an override of the registered maximum LUN madhu.iyengar
2011-05-07  0:30 ` [PATCH 09/12] qla2xxx: Clear complete initialization control block madhu.iyengar
2011-05-07  0:30 ` [PATCH 10/12] qla2xxx: Unify the read/write sfp mailbox command routines madhu.iyengar
2011-05-07  0:30 ` [PATCH 11/12] qla2xxx: Refactor call to qla2xxx_read_sfp for thermal temperature madhu.iyengar
2011-05-07  0:30 ` [PATCH 12/12] qla2xxx: Provide method for updating I2C attached VPD madhu.iyengar
2011-05-07  1:28   ` Madhu Iyengar
2011-05-10 18:18 [PATCH 0/4] qla2xxx: Patches for 2.6.39-rcx madhu.iyengar

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.