public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH V3 0/9] pm80xx updates
@ 2017-09-19 17:09 Viswas G
  2017-09-19 17:09 ` [PATCH V3 1/9] pm80xx : redefine sas_identify_frame structure Viswas G
                   ` (8 more replies)
  0 siblings, 9 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:09 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

This patch set include some bug fixes and enhancement for pm80xx driver.

Changes from V2:
	- Corrected date.

Changes from V1:
        - sas_identify_frame_local structure moved to pm80xx_hwi.h
        - sata abort handling patch split to four patches.
                - tag allocation for phy control request.
                - cleanup in pm8001_abort_task function.
                - modified port reset timer value for PM8006 card
                - corrected SATA abort handling sequence.


Viswas G (9):
  pm80xx : redefine sas_identify_frame structure
  pm80xx : ILA and inactive firmware version through sysfs
  pm80xx : Different SAS addresses for phys.
  pm80xx : tag allocation for phy control request.
  pm80xx : cleanup in pm8001_abort_task function.
  pm80xx : modified port reset timer value for PM8006 card
  pm80xx : corrected SATA abort handling sequence.
  pm80xx : panic on ncq error cleaning up the read log.
  pm80xx : corrected linkrate value.

 drivers/scsi/pm8001/pm8001_ctl.c  |  54 +++++++++++++++++
 drivers/scsi/pm8001/pm8001_hwi.c  |  11 +++-
 drivers/scsi/pm8001/pm8001_init.c |  13 +++--
 drivers/scsi/pm8001/pm8001_sas.c  | 118 ++++++++++++++++++++++++++------------
 drivers/scsi/pm8001/pm8001_sas.h  |  10 ++++
 drivers/scsi/pm8001/pm80xx_hwi.c  |  61 ++++++++++++++++----
 drivers/scsi/pm8001/pm80xx_hwi.h  | 102 +++++++++++++++++++++++++++++++-
 7 files changed, 313 insertions(+), 56 deletions(-)

-- 
2.12.3

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

* [PATCH V3 1/9] pm80xx : redefine sas_identify_frame structure
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
@ 2017-09-19 17:09 ` Viswas G
  2017-09-19 17:09 ` [PATCH V3 2/9] pm80xx : ILA and inactive firmware version through sysfs Viswas G
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:09 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

sas_identify structure defined by pm80xx doesn't have CRC field.
So added a new sas_identify structure without CRC.

v2:
        - Since the structure changes is applicable for only pm80xx,
          sas_identify_frame_local structure moved to pm80xx_hwi.h.

Signed-off-by: Raj Dinesh <Raj.Dinesh@microsemi.com>
Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm80xx_hwi.h | 98 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 97 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/pm8001/pm80xx_hwi.h b/drivers/scsi/pm8001/pm80xx_hwi.h
index 7a443bad6163..82b8cf581da9 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.h
+++ b/drivers/scsi/pm8001/pm80xx_hwi.h
@@ -229,6 +229,102 @@
 #define IT_NEXUS_TIMEOUT       0x7D0
 #define PORT_RECOVERY_TIMEOUT  ((IT_NEXUS_TIMEOUT/100) + 30)
 
+#ifdef __LITTLE_ENDIAN_BITFIELD
+struct sas_identify_frame_local {
+	/* Byte 0 */
+	u8  frame_type:4;
+	u8  dev_type:3;
+	u8  _un0:1;
+
+	/* Byte 1 */
+	u8  _un1;
+
+	/* Byte 2 */
+	union {
+		struct {
+			u8  _un20:1;
+			u8  smp_iport:1;
+			u8  stp_iport:1;
+			u8  ssp_iport:1;
+			u8  _un247:4;
+		};
+		u8 initiator_bits;
+	};
+
+	/* Byte 3 */
+	union {
+		struct {
+			u8  _un30:1;
+			u8 smp_tport:1;
+			u8 stp_tport:1;
+			u8 ssp_tport:1;
+			u8 _un347:4;
+		};
+		u8 target_bits;
+	};
+
+	/* Byte 4 - 11 */
+	u8 _un4_11[8];
+
+	/* Byte 12 - 19 */
+	u8 sas_addr[SAS_ADDR_SIZE];
+
+	/* Byte 20 */
+	u8 phy_id;
+
+	u8 _un21_27[7];
+
+} __packed;
+
+#elif defined(__BIG_ENDIAN_BITFIELD)
+struct sas_identify_frame_local {
+	/* Byte 0 */
+	u8  _un0:1;
+	u8  dev_type:3;
+	u8  frame_type:4;
+
+	/* Byte 1 */
+	u8  _un1;
+
+	/* Byte 2 */
+	union {
+		struct {
+			u8  _un247:4;
+			u8  ssp_iport:1;
+			u8  stp_iport:1;
+			u8  smp_iport:1;
+			u8  _un20:1;
+		};
+		u8 initiator_bits;
+	};
+
+	/* Byte 3 */
+	union {
+		struct {
+			u8 _un347:4;
+			u8 ssp_tport:1;
+			u8 stp_tport:1;
+			u8 smp_tport:1;
+			u8 _un30:1;
+		};
+		u8 target_bits;
+	};
+
+	/* Byte 4 - 11 */
+	u8 _un4_11[8];
+
+	/* Byte 12 - 19 */
+	u8 sas_addr[SAS_ADDR_SIZE];
+
+	/* Byte 20 */
+	u8 phy_id;
+
+	u8 _un21_27[7];
+} __packed;
+#else
+#error "Bitfield order not defined!"
+#endif
+
 struct mpi_msg_hdr {
 	__le32	header;	/* Bits [11:0] - Message operation code */
 	/* Bits [15:12] - Message Category */
@@ -248,7 +344,7 @@ struct mpi_msg_hdr {
 struct phy_start_req {
 	__le32	tag;
 	__le32	ase_sh_lm_slr_phyid;
-	struct sas_identify_frame sas_identify; /* 28 Bytes */
+	struct sas_identify_frame_local sas_identify; /* 28 Bytes */
 	__le32 spasti;
 	u32	reserved[21];
 } __attribute__((packed, aligned(4)));
-- 
2.12.3

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

* [PATCH V3 2/9] pm80xx : ILA and inactive firmware version through sysfs
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
  2017-09-19 17:09 ` [PATCH V3 1/9] pm80xx : redefine sas_identify_frame structure Viswas G
@ 2017-09-19 17:09 ` Viswas G
  2017-09-19 17:09 ` [PATCH V3 3/9] pm80xx : Different SAS addresses for phys Viswas G
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:09 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

Added support to read ILA version and inactive firmware version
from MPI configuration table and export through sysfs.

Signed-off-by: Deepak Ukey <deepak.ukey@microsemi.com>
Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm8001_ctl.c | 54 ++++++++++++++++++++++++++++++++++++++++
 drivers/scsi/pm8001/pm8001_sas.h |  2 ++
 drivers/scsi/pm8001/pm80xx_hwi.c |  5 ++++
 drivers/scsi/pm8001/pm80xx_hwi.h |  2 ++
 4 files changed, 63 insertions(+)

diff --git a/drivers/scsi/pm8001/pm8001_ctl.c b/drivers/scsi/pm8001/pm8001_ctl.c
index be8269c8d127..596f3ff965f5 100644
--- a/drivers/scsi/pm8001/pm8001_ctl.c
+++ b/drivers/scsi/pm8001/pm8001_ctl.c
@@ -98,6 +98,58 @@ static ssize_t pm8001_ctl_fw_version_show(struct device *cdev,
 	}
 }
 static DEVICE_ATTR(fw_version, S_IRUGO, pm8001_ctl_fw_version_show, NULL);
+
+/**
+ * pm8001_ctl_ila_version_show - ila version
+ * @cdev: pointer to embedded class device
+ * @buf: the buffer returned
+ *
+ * A sysfs 'read-only' shost attribute.
+ */
+static ssize_t pm8001_ctl_ila_version_show(struct device *cdev,
+	struct device_attribute *attr, char *buf)
+{
+	struct Scsi_Host *shost = class_to_shost(cdev);
+	struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost);
+	struct pm8001_hba_info *pm8001_ha = sha->lldd_ha;
+
+	if (pm8001_ha->chip_id != chip_8001) {
+		return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x.%02x\n",
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version >> 24),
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version >> 16),
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version >> 8),
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version));
+	}
+	return 0;
+}
+static DEVICE_ATTR(ila_version, 0444, pm8001_ctl_ila_version_show, NULL);
+
+/**
+ * pm8001_ctl_inactive_fw_version_show - Inacative firmware version number
+ * @cdev: pointer to embedded class device
+ * @buf: the buffer returned
+ *
+ * A sysfs 'read-only' shost attribute.
+ */
+static ssize_t pm8001_ctl_inactive_fw_version_show(struct device *cdev,
+	struct device_attribute *attr, char *buf)
+{
+	struct Scsi_Host *shost = class_to_shost(cdev);
+	struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost);
+	struct pm8001_hba_info *pm8001_ha = sha->lldd_ha;
+
+	if (pm8001_ha->chip_id != chip_8001) {
+		return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x.%02x\n",
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version >> 24),
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version >> 16),
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version >> 8),
+		(u8)(pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version));
+	}
+	return 0;
+}
+static
+DEVICE_ATTR(inc_fw_ver, 0444, pm8001_ctl_inactive_fw_version_show, NULL);
+
 /**
  * pm8001_ctl_max_out_io_show - max outstanding io supported
  * @cdev: pointer to embedded class device
@@ -748,6 +800,8 @@ struct device_attribute *pm8001_host_attrs[] = {
 	&dev_attr_bios_version,
 	&dev_attr_ib_log,
 	&dev_attr_ob_log,
+	&dev_attr_ila_version,
+	&dev_attr_inc_fw_ver,
 	NULL,
 };
 
diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h
index e81a8fa7ef1a..c75de413e062 100644
--- a/drivers/scsi/pm8001/pm8001_sas.h
+++ b/drivers/scsi/pm8001/pm8001_sas.h
@@ -404,6 +404,8 @@ union main_cfg_table {
 	u32			port_recovery_timer;
 	u32			interrupt_reassertion_delay;
 	u32			fatal_n_non_fatal_dump;	        /* 0x28 */
+	u32			ila_version;
+	u32			inc_fw_version;
 	} pm80xx_tbl;
 };
 
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index eb4fee61df72..8fb5ddf08cc4 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -312,6 +312,11 @@ static void read_main_config_table(struct pm8001_hba_info *pm8001_ha)
 	/* read port recover and reset timeout */
 	pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer =
 		pm8001_mr32(address, MAIN_PORT_RECOVERY_TIMER);
+	/* read ILA and inactive firmware version */
+	pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version =
+		pm8001_mr32(address, MAIN_MPI_ILA_RELEASE_TYPE);
+	pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version =
+		pm8001_mr32(address, MAIN_MPI_INACTIVE_FW_VERSION);
 }
 
 /**
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.h b/drivers/scsi/pm8001/pm80xx_hwi.h
index 82b8cf581da9..e36c5176f9a9 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.h
+++ b/drivers/scsi/pm8001/pm80xx_hwi.h
@@ -1445,6 +1445,8 @@ typedef struct SASProtocolTimerConfig SASProtocolTimerConfig_t;
 #define MAIN_SAS_PHY_ATTR_TABLE_OFFSET	0x90 /* DWORD 0x24 */
 #define MAIN_PORT_RECOVERY_TIMER	0x94 /* DWORD 0x25 */
 #define MAIN_INT_REASSERTION_DELAY	0x98 /* DWORD 0x26 */
+#define MAIN_MPI_ILA_RELEASE_TYPE	0xA4 /* DWORD 0x29 */
+#define MAIN_MPI_INACTIVE_FW_VERSION	0XB0 /* DWORD 0x2C */
 
 /* Gereral Status Table offset - byte offset */
 #define GST_GSTLEN_MPIS_OFFSET		0x00
-- 
2.12.3

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

* [PATCH V3 3/9] pm80xx : Different SAS addresses for phys.
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
  2017-09-19 17:09 ` [PATCH V3 1/9] pm80xx : redefine sas_identify_frame structure Viswas G
  2017-09-19 17:09 ` [PATCH V3 2/9] pm80xx : ILA and inactive firmware version through sysfs Viswas G
@ 2017-09-19 17:09 ` Viswas G
  2017-09-19 17:09 ` [PATCH V3 4/9] pm80xx : tag allocation for phy control request Viswas G
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:09 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

Different SAS addresses are assigned for each set of phys.

Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm8001_init.c | 13 +++++++++----
 drivers/scsi/pm8001/pm80xx_hwi.c  |  3 +--
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index 0e013f76b582..7a697ca68501 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -132,7 +132,7 @@ static void pm8001_phy_init(struct pm8001_hba_info *pm8001_ha, int phy_id)
 	sas_phy->oob_mode = OOB_NOT_CONNECTED;
 	sas_phy->linkrate = SAS_LINK_RATE_UNKNOWN;
 	sas_phy->id = phy_id;
-	sas_phy->sas_addr = &pm8001_ha->sas_addr[0];
+	sas_phy->sas_addr = (u8 *)&phy->dev_sas_addr;
 	sas_phy->frame_rcvd = &phy->frame_rcvd[0];
 	sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata;
 	sas_phy->lldd_phy = phy;
@@ -591,10 +591,12 @@ static void  pm8001_post_sas_ha_init(struct Scsi_Host *shost,
 	for (i = 0; i < chip_info->n_phy; i++) {
 		sha->sas_phy[i] = &pm8001_ha->phy[i].sas_phy;
 		sha->sas_port[i] = &pm8001_ha->port[i].sas_port;
+		sha->sas_phy[i]->sas_addr =
+			(u8 *)&pm8001_ha->phy[i].dev_sas_addr;
 	}
 	sha->sas_ha_name = DRV_NAME;
 	sha->dev = pm8001_ha->dev;
-
+	sha->strict_wide_ports = 1;
 	sha->lldd_module = THIS_MODULE;
 	sha->sas_addr = &pm8001_ha->sas_addr[0];
 	sha->num_phys = chip_info->n_phy;
@@ -611,6 +613,7 @@ static void  pm8001_post_sas_ha_init(struct Scsi_Host *shost,
 static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
 {
 	u8 i, j;
+	u8 sas_add[8];
 #ifdef PM8001_READ_VPD
 	/* For new SPC controllers WWN is stored in flash vpd
 	*  For SPC/SPCve controllers WWN is stored in EEPROM
@@ -672,10 +675,12 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
 			pm8001_ha->sas_addr[j] =
 					payload.func_specific[0x804 + i];
 	}
-
+	memcpy(sas_add, pm8001_ha->sas_addr, SAS_ADDR_SIZE);
 	for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
+		if (i && ((i % 4) == 0))
+			sas_add[7] = sas_add[7] + 4;
 		memcpy(&pm8001_ha->phy[i].dev_sas_addr,
-			pm8001_ha->sas_addr, SAS_ADDR_SIZE);
+			sas_add, SAS_ADDR_SIZE);
 		PM8001_INIT_DBG(pm8001_ha,
 			pm8001_printk("phy %d sas_addr = %016llx\n", i,
 			pm8001_ha->phy[i].dev_sas_addr));
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 8fb5ddf08cc4..2b26445d1b97 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -3041,7 +3041,6 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
 	port->port_state = portstate;
 	phy->identify.device_type = 0;
 	phy->phy_attached = 0;
-	memset(&phy->dev_sas_addr, 0, SAS_ADDR_SIZE);
 	switch (portstate) {
 	case PORT_VALID:
 		break;
@@ -4394,7 +4393,7 @@ pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id)
 	payload.sas_identify.dev_type = SAS_END_DEVICE;
 	payload.sas_identify.initiator_bits = SAS_PROTOCOL_ALL;
 	memcpy(payload.sas_identify.sas_addr,
-		pm8001_ha->sas_addr, SAS_ADDR_SIZE);
+	  &pm8001_ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE);
 	payload.sas_identify.phy_id = phy_id;
 	ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0);
 	return ret;
-- 
2.12.3

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

* [PATCH V3 4/9] pm80xx : tag allocation for phy control request.
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
                   ` (2 preceding siblings ...)
  2017-09-19 17:09 ` [PATCH V3 3/9] pm80xx : Different SAS addresses for phys Viswas G
@ 2017-09-19 17:09 ` Viswas G
  2017-09-20 15:18   ` kbuild test robot
  2017-09-19 17:10 ` [PATCH V3 5/9] pm80xx : cleanup in pm8001_abort_task function Viswas G
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:09 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

tag is taken from the tag pool instead of using the hardcoded
tag value(1).

Signed-off-by: Deepak Ukey <deepak.ukey@microsemi.com>
Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm8001_hwi.c |  3 +++
 drivers/scsi/pm8001/pm80xx_hwi.c | 10 +++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
index 10546faac58c..bc4a6f649ec9 100644
--- a/drivers/scsi/pm8001/pm8001_hwi.c
+++ b/drivers/scsi/pm8001/pm8001_hwi.c
@@ -3198,11 +3198,13 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
 
 int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)
 {
+	u32 tag;
 	struct local_phy_ctl_resp *pPayload =
 		(struct local_phy_ctl_resp *)(piomb + 4);
 	u32 status = le32_to_cpu(pPayload->status);
 	u32 phy_id = le32_to_cpu(pPayload->phyop_phyid) & ID_BITS;
 	u32 phy_op = le32_to_cpu(pPayload->phyop_phyid) & OP_BITS;
+	tag = le32_to_cpu(pPayload->tag);
 	if (status != 0) {
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk("%x phy execute %x phy op failed!\n",
@@ -3211,6 +3213,7 @@ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk("%x phy execute %x phy op success!\n",
 			phy_id, phy_op));
+	pm8001_tag_free(pm8001_ha, tag);
 	return 0;
 }
 
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 2b26445d1b97..baab8a19c78e 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -4500,17 +4500,21 @@ static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha,
 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
 	u32 phyId, u32 phy_op)
 {
+	u32 tag;
+	int rc;
 	struct local_phy_ctl_req payload;
 	struct inbound_queue_table *circularQ;
 	int ret;
 	u32 opc = OPC_INB_LOCAL_PHY_CONTROL;
 	memset(&payload, 0, sizeof(payload));
+	rc = pm8001_tag_alloc(pm8001_ha, &tag);
+	if (rc)
+		return rc;
 	circularQ = &pm8001_ha->inbnd_q_tbl[0];
-	payload.tag = cpu_to_le32(1);
+	payload.tag = cpu_to_le32(tag);
 	payload.phyop_phyid =
 		cpu_to_le32(((phy_op & 0xFF) << 8) | (phyId & 0xFF));
-	ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0);
-	return ret;
+	return pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0);
 }
 
 static u32 pm80xx_chip_is_our_interupt(struct pm8001_hba_info *pm8001_ha)
-- 
2.12.3

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

* [PATCH V3 5/9] pm80xx : cleanup in pm8001_abort_task function.
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
                   ` (3 preceding siblings ...)
  2017-09-19 17:09 ` [PATCH V3 4/9] pm80xx : tag allocation for phy control request Viswas G
@ 2017-09-19 17:10 ` Viswas G
  2017-09-20 15:57   ` kbuild test robot
  2017-09-19 17:10 ` [PATCH V3 6/9] pm80xx : modified port reset timer value for PM8006 card Viswas G
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:10 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

Signed-off-by: Deepak Ukey <deepak.ukey@microsemi.com>
Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm8001_sas.c | 49 +++++++++++-----------------------------
 1 file changed, 13 insertions(+), 36 deletions(-)

diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index ce584c31d36e..e80b0542a67f 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -1159,40 +1159,35 @@ int pm8001_query_task(struct sas_task *task)
 int pm8001_abort_task(struct sas_task *task)
 {
 	unsigned long flags;
-	u32 tag = 0xdeadbeef;
+	u32 tag;
 	u32 device_id;
 	struct domain_device *dev ;
-	struct pm8001_hba_info *pm8001_ha = NULL;
+	struct pm8001_hba_info *pm8001_ha;
 	struct pm8001_ccb_info *ccb;
 	struct scsi_lun lun;
 	struct pm8001_device *pm8001_dev;
 	struct pm8001_tmf_task tmf_task;
 	int rc = TMF_RESP_FUNC_FAILED;
 	if (unlikely(!task || !task->lldd_task || !task->dev))
-		return rc;
+		return TMF_RESP_FUNC_FAILED;
+	dev = task->dev;
+	pm8001_dev = dev->lldd_dev;
+	pm8001_ha = pm8001_find_ha_by_dev(dev);
+	device_id = pm8001_dev->device_id;
+	rc = pm8001_find_tag(task, &tag);
+	if (rc == 0) {
+		pm8001_printk("no tag for task:%p\n", task);
+		return TMF_RESP_FUNC_FAILED;
+	}
 	spin_lock_irqsave(&task->task_state_lock, flags);
 	if (task->task_state_flags & SAS_TASK_STATE_DONE) {
 		spin_unlock_irqrestore(&task->task_state_lock, flags);
-		rc = TMF_RESP_FUNC_COMPLETE;
-		goto out;
+		return TMF_RESP_FUNC_COMPLETE;
 	}
 	spin_unlock_irqrestore(&task->task_state_lock, flags);
 	if (task->task_proto & SAS_PROTOCOL_SSP) {
 		struct scsi_cmnd *cmnd = task->uldd_task;
-		dev = task->dev;
-		ccb = task->lldd_task;
-		pm8001_dev = dev->lldd_dev;
-		pm8001_ha = pm8001_find_ha_by_dev(dev);
 		int_to_scsilun(cmnd->device->lun, &lun);
-		rc = pm8001_find_tag(task, &tag);
-		if (rc == 0) {
-			printk(KERN_INFO "No such tag in %s\n", __func__);
-			rc = TMF_RESP_FUNC_FAILED;
-			return rc;
-		}
-		device_id = pm8001_dev->device_id;
-		PM8001_EH_DBG(pm8001_ha,
-			pm8001_printk("abort io to deviceid= %d\n", device_id));
 		tmf_task.tmf = TMF_ABORT_TASK;
 		tmf_task.tag_of_task_to_be_managed = tag;
 		rc = pm8001_issue_ssp_tmf(dev, lun.scsi_lun, &tmf_task);
@@ -1200,28 +1195,10 @@ int pm8001_abort_task(struct sas_task *task)
 			pm8001_dev->sas_device, 0, tag);
 	} else if (task->task_proto & SAS_PROTOCOL_SATA ||
 		task->task_proto & SAS_PROTOCOL_STP) {
-		dev = task->dev;
-		pm8001_dev = dev->lldd_dev;
-		pm8001_ha = pm8001_find_ha_by_dev(dev);
-		rc = pm8001_find_tag(task, &tag);
-		if (rc == 0) {
-			printk(KERN_INFO "No such tag in %s\n", __func__);
-			rc = TMF_RESP_FUNC_FAILED;
-			return rc;
-		}
 		rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
 			pm8001_dev->sas_device, 0, tag);
 	} else if (task->task_proto & SAS_PROTOCOL_SMP) {
 		/* SMP */
-		dev = task->dev;
-		pm8001_dev = dev->lldd_dev;
-		pm8001_ha = pm8001_find_ha_by_dev(dev);
-		rc = pm8001_find_tag(task, &tag);
-		if (rc == 0) {
-			printk(KERN_INFO "No such tag in %s\n", __func__);
-			rc = TMF_RESP_FUNC_FAILED;
-			return rc;
-		}
 		rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
 			pm8001_dev->sas_device, 0, tag);
 
-- 
2.12.3

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

* [PATCH V3 6/9] pm80xx : modified port reset timer value for PM8006 card
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
                   ` (4 preceding siblings ...)
  2017-09-19 17:10 ` [PATCH V3 5/9] pm80xx : cleanup in pm8001_abort_task function Viswas G
@ 2017-09-19 17:10 ` Viswas G
  2017-09-19 17:10 ` [PATCH V3 7/9] pm80xx : corrected SATA abort handling sequence Viswas G
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:10 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

Added port reset timer value as 2000ms for PM8006 sata controller.

Signed-off-by: Deepak Ukey <deepak.ukey@microsemi.com>
Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm80xx_hwi.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index baab8a19c78e..8f1f5dc77d71 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -597,6 +597,12 @@ static void update_main_config_table(struct pm8001_hba_info *pm8001_ha)
 	pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer &= 0xffff0000;
 	pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer |=
 							PORT_RECOVERY_TIMEOUT;
+	if (pm8001_ha->chip_id == chip_8006) {
+		pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer &=
+					0x0000ffff;
+		pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer |=
+					0x140000;
+	}
 	pm8001_mw32(address, MAIN_PORT_RECOVERY_TIMER,
 			pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer);
 }
-- 
2.12.3

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

* [PATCH V3 7/9] pm80xx : corrected SATA abort handling sequence.
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
                   ` (5 preceding siblings ...)
  2017-09-19 17:10 ` [PATCH V3 6/9] pm80xx : modified port reset timer value for PM8006 card Viswas G
@ 2017-09-19 17:10 ` Viswas G
  2017-09-19 17:10 ` [PATCH V3 8/9] pm80xx : panic on ncq error cleaning up the read log Viswas G
  2017-09-19 17:10 ` [PATCH V3 9/9] pm80xx : corrected linkrate value Viswas G
  8 siblings, 0 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:10 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

Modified SATA abort handling with following steps:
1) Set device state as recovery.
2) Send phy reset.
3) Wait for reset completion.
4) After successful reset, abort all IO's to the device.
5) After aborting all IO's to device, set device state as operational.

Signed-off-by: Deepak Ukey <deepak.ukey@microsemi.com>
Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm8001_hwi.c |  8 ++++-
 drivers/scsi/pm8001/pm8001_sas.c | 71 ++++++++++++++++++++++++++++++++++++++--
 drivers/scsi/pm8001/pm8001_sas.h |  8 +++++
 drivers/scsi/pm8001/pm80xx_hwi.c | 36 ++++++++++++++++----
 4 files changed, 113 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
index bc4a6f649ec9..db88a8e7ee0e 100644
--- a/drivers/scsi/pm8001/pm8001_hwi.c
+++ b/drivers/scsi/pm8001/pm8001_hwi.c
@@ -3209,10 +3209,16 @@ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk("%x phy execute %x phy op failed!\n",
 			phy_id, phy_op));
-	} else
+	} else {
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk("%x phy execute %x phy op success!\n",
 			phy_id, phy_op));
+		pm8001_ha->phy[phy_id].reset_success = true;
+	}
+	if (pm8001_ha->phy[phy_id].enable_completion) {
+		complete(pm8001_ha->phy[phy_id].enable_completion);
+		pm8001_ha->phy[phy_id].enable_completion = NULL;
+	}
 	pm8001_tag_free(pm8001_ha, tag);
 	return 0;
 }
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index e80b0542a67f..60d5bec5c45e 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -1167,13 +1167,16 @@ int pm8001_abort_task(struct sas_task *task)
 	struct scsi_lun lun;
 	struct pm8001_device *pm8001_dev;
 	struct pm8001_tmf_task tmf_task;
-	int rc = TMF_RESP_FUNC_FAILED;
+	int rc = TMF_RESP_FUNC_FAILED, ret;
+	u32 phy_id;
+	struct sas_task_slow slow_task;
 	if (unlikely(!task || !task->lldd_task || !task->dev))
 		return TMF_RESP_FUNC_FAILED;
 	dev = task->dev;
 	pm8001_dev = dev->lldd_dev;
 	pm8001_ha = pm8001_find_ha_by_dev(dev);
 	device_id = pm8001_dev->device_id;
+	phy_id = pm8001_dev->attached_phy;
 	rc = pm8001_find_tag(task, &tag);
 	if (rc == 0) {
 		pm8001_printk("no tag for task:%p\n", task);
@@ -1184,6 +1187,11 @@ int pm8001_abort_task(struct sas_task *task)
 		spin_unlock_irqrestore(&task->task_state_lock, flags);
 		return TMF_RESP_FUNC_COMPLETE;
 	}
+	task->task_state_flags |= SAS_TASK_STATE_ABORTED;
+	if (task->slow_task == NULL) {
+		init_completion(&slow_task.completion);
+		task->slow_task = &slow_task;
+	}
 	spin_unlock_irqrestore(&task->task_state_lock, flags);
 	if (task->task_proto & SAS_PROTOCOL_SSP) {
 		struct scsi_cmnd *cmnd = task->uldd_task;
@@ -1195,8 +1203,61 @@ int pm8001_abort_task(struct sas_task *task)
 			pm8001_dev->sas_device, 0, tag);
 	} else if (task->task_proto & SAS_PROTOCOL_SATA ||
 		task->task_proto & SAS_PROTOCOL_STP) {
-		rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
-			pm8001_dev->sas_device, 0, tag);
+		if (pm8001_ha->chip_id == chip_8006) {
+			DECLARE_COMPLETION_ONSTACK(completion_reset);
+			DECLARE_COMPLETION_ONSTACK(completion);
+			struct pm8001_phy *phy = pm8001_ha->phy + phy_id;
+			/* 1. Set Device state as Recovery*/
+			pm8001_dev->setds_completion = &completion;
+			PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha,
+				pm8001_dev, 0x03);
+			wait_for_completion(&completion);
+			/* 2. Send Phy Control Hard Reset */
+			reinit_completion(&completion);
+			phy->reset_success = false;
+			phy->enable_completion = &completion;
+			phy->reset_completion = &completion_reset;
+			ret = PM8001_CHIP_DISP->phy_ctl_req(pm8001_ha, phy_id,
+				PHY_HARD_RESET);
+			if (ret)
+				goto out;
+			PM8001_MSG_DBG(pm8001_ha,
+				pm8001_printk("Waiting for local phy ctl\n"));
+			wait_for_completion(&completion);
+			if (!phy->reset_success)
+				goto out;
+			/* 3. Wait for Port Reset complete / Port reset TMO*/
+			PM8001_MSG_DBG(pm8001_ha,
+				pm8001_printk("Waiting for Port reset\n"));
+			wait_for_completion(&completion_reset);
+			if (phy->port_reset_status)
+				goto out;
+			/* 4. SATA Abort ALL
+			 * we wait for the task to be aborted so that the task
+			 * is removed from the ccb. on success the caller is
+			 * going to free the task.
+			 */
+			ret = pm8001_exec_internal_task_abort(pm8001_ha,
+				pm8001_dev, pm8001_dev->sas_device, 1, tag);
+			if (ret)
+				goto out;
+			ret = wait_for_completion_timeout(
+				&task->slow_task->completion,
+				PM8001_TASK_TIMEOUT * HZ);
+			if (!ret)
+				goto out;
+
+			/* 5. Set Device State as Operational */
+			reinit_completion(&completion);
+			pm8001_dev->setds_completion = &completion;
+			PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha,
+				pm8001_dev, 0x01);
+			wait_for_completion(&completion);
+		} else {
+			rc = pm8001_exec_internal_task_abort(pm8001_ha,
+				pm8001_dev, pm8001_dev->sas_device, 0, tag);
+		}
+		rc = TMF_RESP_FUNC_COMPLETE;
 	} else if (task->task_proto & SAS_PROTOCOL_SMP) {
 		/* SMP */
 		rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
@@ -1204,6 +1265,10 @@ int pm8001_abort_task(struct sas_task *task)
 
 	}
 out:
+	spin_lock_irqsave(&task->task_state_lock, flags);
+	if (task->slow_task == &slow_task)
+		task->slow_task = NULL;
+	spin_unlock_irqrestore(&task->task_state_lock, flags);
 	if (rc != TMF_RESP_FUNC_COMPLETE)
 		pm8001_printk("rc= %d\n", rc);
 	return rc;
diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h
index c75de413e062..80b4dd6df0c2 100644
--- a/drivers/scsi/pm8001/pm8001_sas.h
+++ b/drivers/scsi/pm8001/pm8001_sas.h
@@ -263,8 +263,15 @@ struct pm8001_phy {
 	u8			phy_state;
 	enum sas_linkrate	minimum_linkrate;
 	enum sas_linkrate	maximum_linkrate;
+	struct completion	*reset_completion;
+	bool			port_reset_status;
+	bool			reset_success;
 };
 
+/* port reset status */
+#define PORT_RESET_SUCCESS	0x00
+#define PORT_RESET_TMO		0x01
+
 struct pm8001_device {
 	enum sas_device_type	dev_type;
 	struct domain_device	*sas_device;
@@ -533,6 +540,7 @@ struct pm8001_hba_info {
 	u32			smp_exp_mode;
 	const struct firmware 	*fw_image;
 	struct isr_param irq_vector[PM8001_MAX_MSIX_VEC];
+	u32			reset_in_progress;
 };
 
 struct pm8001_work {
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 8f1f5dc77d71..92d2045dea68 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -1781,6 +1781,8 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
 			"task 0x%p done with io_status 0x%x resp 0x%x "
 			"stat 0x%x but aborted by upper layer!\n",
 			t, status, ts->resp, ts->stat));
+		if (t->slow_task)
+			complete(&t->slow_task->completion);
 		pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
 	} else {
 		spin_unlock_irqrestore(&t->task_state_lock, flags);
@@ -3044,6 +3046,7 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
 
 	struct pm8001_port *port = &pm8001_ha->port[port_id];
 	struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+	u32 port_sata = (phy->phy_type & PORT_TYPE_SATA);
 	port->port_state = portstate;
 	phy->identify.device_type = 0;
 	phy->phy_attached = 0;
@@ -3055,7 +3058,7 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
 			pm8001_printk(" PortInvalid portID %d\n", port_id));
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk(" Last phy Down and port invalid\n"));
-		if (phy->phy_type & PORT_TYPE_SATA) {
+		if (port_sata) {
 			phy->phy_type = 0;
 			port->port_attached = 0;
 			pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
@@ -3077,7 +3080,7 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
 			pm8001_printk(" Phy Down and PORT_LOSTCOMM\n"));
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk(" Last phy Down and port invalid\n"));
-		if (phy->phy_type & PORT_TYPE_SATA) {
+		if (port_sata) {
 			port->port_attached = 0;
 			phy->phy_type = 0;
 			pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
@@ -3093,6 +3096,11 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
 		break;
 
 	}
+	if (port_sata && (portstate != PORT_IN_RESET)) {
+		struct sas_ha_struct *sas_ha = pm8001_ha->sas;
+
+		sas_ha->notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
+	}
 }
 
 static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
@@ -3195,12 +3203,14 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
 	case HW_EVENT_PHY_DOWN:
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk("HW_EVENT_PHY_DOWN\n"));
-		if (phy->phy_type & PORT_TYPE_SATA)
-			sas_ha->notify_phy_event(&phy->sas_phy,
-				PHYE_LOSS_OF_SIGNAL);
+		hw_event_phy_down(pm8001_ha, piomb);
+		if (pm8001_ha->reset_in_progress) {
+			PM8001_MSG_DBG(pm8001_ha,
+				pm8001_printk("Reset in progress\n"));
+			return 0;
+		}
 		phy->phy_attached = 0;
 		phy->phy_state = 0;
-		hw_event_phy_down(pm8001_ha, piomb);
 		break;
 	case HW_EVENT_PORT_INVALID:
 		PM8001_MSG_DBG(pm8001_ha,
@@ -3307,9 +3317,17 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
 	case HW_EVENT_PORT_RESET_TIMER_TMO:
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk("HW_EVENT_PORT_RESET_TIMER_TMO\n"));
+		pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
+			port_id, phy_id, 0, 0);
 		sas_phy_disconnected(sas_phy);
 		phy->phy_attached = 0;
 		sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+		if (pm8001_ha->phy[phy_id].reset_completion) {
+			pm8001_ha->phy[phy_id].port_reset_status =
+					PORT_RESET_TMO;
+			complete(pm8001_ha->phy[phy_id].reset_completion);
+			pm8001_ha->phy[phy_id].reset_completion = NULL;
+		}
 		break;
 	case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
 		PM8001_MSG_DBG(pm8001_ha,
@@ -3334,6 +3352,12 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
 	case HW_EVENT_PORT_RESET_COMPLETE:
 		PM8001_MSG_DBG(pm8001_ha,
 			pm8001_printk("HW_EVENT_PORT_RESET_COMPLETE\n"));
+		if (pm8001_ha->phy[phy_id].reset_completion) {
+			pm8001_ha->phy[phy_id].port_reset_status =
+					PORT_RESET_SUCCESS;
+			complete(pm8001_ha->phy[phy_id].reset_completion);
+			pm8001_ha->phy[phy_id].reset_completion = NULL;
+		}
 		break;
 	case EVENT_BROADCAST_ASYNCH_EVENT:
 		PM8001_MSG_DBG(pm8001_ha,
-- 
2.12.3

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

* [PATCH V3 8/9] pm80xx : panic on ncq error cleaning up the read log.
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
                   ` (6 preceding siblings ...)
  2017-09-19 17:10 ` [PATCH V3 7/9] pm80xx : corrected SATA abort handling sequence Viswas G
@ 2017-09-19 17:10 ` Viswas G
  2017-09-19 17:10 ` [PATCH V3 9/9] pm80xx : corrected linkrate value Viswas G
  8 siblings, 0 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:10 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

when there's an error in 'ncq mode' the host has to read the ncq
error log (10h) to clear the error state. however, the ccb that
is setup for doing this doesn't setup the ccb so that the
previous state is cleared. if the ccb was previously used for an IO
n_elems is set and pm8001_ccb_task_free() treats this as the signal
to go free a scatter-gather list (that's already been free-ed).

Signed-off-by: Deepak Ukey <deepak.ukey@microsemi.com>
Signed-off-by: Viswas G <Viswas.G@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm80xx_hwi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 92d2045dea68..f2c0839afbe3 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -1489,6 +1489,7 @@ static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha,
 	ccb->device = pm8001_ha_dev;
 	ccb->ccb_tag = ccb_tag;
 	ccb->task = task;
+	ccb->n_elem = 0;
 	pm8001_ha_dev->id |= NCQ_READ_LOG_FLAG;
 	pm8001_ha_dev->id |= NCQ_2ND_RLE_FLAG;
 
-- 
2.12.3

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

* [PATCH V3 9/9] pm80xx : corrected linkrate value.
  2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
                   ` (7 preceding siblings ...)
  2017-09-19 17:10 ` [PATCH V3 8/9] pm80xx : panic on ncq error cleaning up the read log Viswas G
@ 2017-09-19 17:10 ` Viswas G
  8 siblings, 0 replies; 13+ messages in thread
From: Viswas G @ 2017-09-19 17:10 UTC (permalink / raw)
  To: linux-scsi
  Cc: Vasanthalakshmi.Tharmarajan, Viswas.G, deepak.ukey, Raj.Dinesh,
	jinpu.wang, martin.petersen

Corrected the value defined for LINKRATE_60 (6 Gig).

Signed-off-by: Raj Dinesh <Raj.Dinesh@microsemi.com>
Signed-off-by: Viswas G <viswas.g@microsemi.com>

Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/scsi/pm8001/pm80xx_hwi.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/pm8001/pm80xx_hwi.h b/drivers/scsi/pm8001/pm80xx_hwi.h
index e36c5176f9a9..889e69ce3689 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.h
+++ b/drivers/scsi/pm8001/pm80xx_hwi.h
@@ -167,7 +167,7 @@
 #define LINKMODE_AUTO			(0x03 << 12)
 #define LINKRATE_15			(0x01 << 8)
 #define LINKRATE_30			(0x02 << 8)
-#define LINKRATE_60			(0x06 << 8)
+#define LINKRATE_60			(0x04 << 8)
 #define LINKRATE_120			(0x08 << 8)
 
 /* phy_profile */
-- 
2.12.3

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

* Re: [PATCH V3 4/9] pm80xx : tag allocation for phy control request.
  2017-09-19 17:09 ` [PATCH V3 4/9] pm80xx : tag allocation for phy control request Viswas G
@ 2017-09-20 15:18   ` kbuild test robot
  2017-09-21  8:09     ` Jinpu Wang
  0 siblings, 1 reply; 13+ messages in thread
From: kbuild test robot @ 2017-09-20 15:18 UTC (permalink / raw)
  Cc: kbuild-all, linux-scsi, Vasanthalakshmi.Tharmarajan, Viswas.G,
	deepak.ukey, Raj.Dinesh, jinpu.wang, martin.petersen

[-- Attachment #1: Type: text/plain, Size: 3196 bytes --]

Hi Viswas,

[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on v4.14-rc1 next-20170920]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Viswas-G/pm80xx-updates/20170920-202506
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: x86_64-randconfig-a0-09202136 (attached as .config)
compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   drivers/scsi/pm8001/pm80xx_hwi.c: In function 'pm80xx_chip_phy_ctl_req':
>> drivers/scsi/pm8001/pm80xx_hwi.c:4507: warning: unused variable 'ret'

vim +/ret +4507 drivers/scsi/pm8001/pm80xx_hwi.c

f5860992d Sakthivel K 2013-04-17  4492  
f5860992d Sakthivel K 2013-04-17  4493  /**
f5860992d Sakthivel K 2013-04-17  4494   * pm80xx_chip_phy_ctl_req - support the local phy operation
f5860992d Sakthivel K 2013-04-17  4495   * @pm8001_ha: our hba card information.
f5860992d Sakthivel K 2013-04-17  4496   * @num: the inbound queue number
f5860992d Sakthivel K 2013-04-17  4497   * @phy_id: the phy id which we wanted to operate
f5860992d Sakthivel K 2013-04-17  4498   * @phy_op:
f5860992d Sakthivel K 2013-04-17  4499   */
f5860992d Sakthivel K 2013-04-17  4500  static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
f5860992d Sakthivel K 2013-04-17  4501  	u32 phyId, u32 phy_op)
f5860992d Sakthivel K 2013-04-17  4502  {
18e9bdf60 Viswas G    2017-09-19  4503  	u32 tag;
18e9bdf60 Viswas G    2017-09-19  4504  	int rc;
f5860992d Sakthivel K 2013-04-17  4505  	struct local_phy_ctl_req payload;
f5860992d Sakthivel K 2013-04-17  4506  	struct inbound_queue_table *circularQ;
f5860992d Sakthivel K 2013-04-17 @4507  	int ret;
f5860992d Sakthivel K 2013-04-17  4508  	u32 opc = OPC_INB_LOCAL_PHY_CONTROL;
f5860992d Sakthivel K 2013-04-17  4509  	memset(&payload, 0, sizeof(payload));
18e9bdf60 Viswas G    2017-09-19  4510  	rc = pm8001_tag_alloc(pm8001_ha, &tag);
18e9bdf60 Viswas G    2017-09-19  4511  	if (rc)
18e9bdf60 Viswas G    2017-09-19  4512  		return rc;
f5860992d Sakthivel K 2013-04-17  4513  	circularQ = &pm8001_ha->inbnd_q_tbl[0];
18e9bdf60 Viswas G    2017-09-19  4514  	payload.tag = cpu_to_le32(tag);
f5860992d Sakthivel K 2013-04-17  4515  	payload.phyop_phyid =
f5860992d Sakthivel K 2013-04-17  4516  		cpu_to_le32(((phy_op & 0xFF) << 8) | (phyId & 0xFF));
18e9bdf60 Viswas G    2017-09-19  4517  	return pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0);
f5860992d Sakthivel K 2013-04-17  4518  }
f5860992d Sakthivel K 2013-04-17  4519  

:::::: The code at line 4507 was first introduced by commit
:::::: f5860992db55c9e36b0f120dff73f0c34abe510d [SCSI] pm80xx: Added SPCv/ve specific hardware functionalities and relevant changes in common files

:::::: TO: Sakthivel K <Sakthivel.SaravananKamalRaju@pmcs.com>
:::::: CC: James Bottomley <JBottomley@Parallels.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 27453 bytes --]

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

* Re: [PATCH V3 5/9] pm80xx : cleanup in pm8001_abort_task function.
  2017-09-19 17:10 ` [PATCH V3 5/9] pm80xx : cleanup in pm8001_abort_task function Viswas G
@ 2017-09-20 15:57   ` kbuild test robot
  0 siblings, 0 replies; 13+ messages in thread
From: kbuild test robot @ 2017-09-20 15:57 UTC (permalink / raw)
  Cc: kbuild-all, linux-scsi, Vasanthalakshmi.Tharmarajan, Viswas.G,
	deepak.ukey, Raj.Dinesh, jinpu.wang, martin.petersen

[-- Attachment #1: Type: text/plain, Size: 5183 bytes --]

Hi Viswas,

[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on v4.14-rc1 next-20170920]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Viswas-G/pm80xx-updates/20170920-202506
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: x86_64-randconfig-a0-09202136 (attached as .config)
compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   drivers/scsi/pm8001/pm8001_sas.c: In function 'pm8001_abort_task':
   drivers/scsi/pm8001/pm8001_sas.c:1206: warning: label 'out' defined but not used
>> drivers/scsi/pm8001/pm8001_sas.c:1166: warning: unused variable 'ccb'

vim +/ccb +1166 drivers/scsi/pm8001/pm8001_sas.c

dbf9bfe61 jack wang 2009-10-14  1157  
dbf9bfe61 jack wang 2009-10-14  1158  /*  mandatory SAM-3, still need free task/ccb info, abord the specified task */
dbf9bfe61 jack wang 2009-10-14  1159  int pm8001_abort_task(struct sas_task *task)
dbf9bfe61 jack wang 2009-10-14  1160  {
dbf9bfe61 jack wang 2009-10-14  1161  	unsigned long flags;
a9d840710 Viswas G  2017-09-19  1162  	u32 tag;
dbf9bfe61 jack wang 2009-10-14  1163  	u32 device_id;
dbf9bfe61 jack wang 2009-10-14  1164  	struct domain_device *dev ;
a9d840710 Viswas G  2017-09-19  1165  	struct pm8001_hba_info *pm8001_ha;
dbf9bfe61 jack wang 2009-10-14 @1166  	struct pm8001_ccb_info *ccb;
dbf9bfe61 jack wang 2009-10-14  1167  	struct scsi_lun lun;
dbf9bfe61 jack wang 2009-10-14  1168  	struct pm8001_device *pm8001_dev;
dbf9bfe61 jack wang 2009-10-14  1169  	struct pm8001_tmf_task tmf_task;
dbf9bfe61 jack wang 2009-10-14  1170  	int rc = TMF_RESP_FUNC_FAILED;
dbf9bfe61 jack wang 2009-10-14  1171  	if (unlikely(!task || !task->lldd_task || !task->dev))
a9d840710 Viswas G  2017-09-19  1172  		return TMF_RESP_FUNC_FAILED;
a9d840710 Viswas G  2017-09-19  1173  	dev = task->dev;
a9d840710 Viswas G  2017-09-19  1174  	pm8001_dev = dev->lldd_dev;
a9d840710 Viswas G  2017-09-19  1175  	pm8001_ha = pm8001_find_ha_by_dev(dev);
a9d840710 Viswas G  2017-09-19  1176  	device_id = pm8001_dev->device_id;
a9d840710 Viswas G  2017-09-19  1177  	rc = pm8001_find_tag(task, &tag);
a9d840710 Viswas G  2017-09-19  1178  	if (rc == 0) {
a9d840710 Viswas G  2017-09-19  1179  		pm8001_printk("no tag for task:%p\n", task);
a9d840710 Viswas G  2017-09-19  1180  		return TMF_RESP_FUNC_FAILED;
a9d840710 Viswas G  2017-09-19  1181  	}
dbf9bfe61 jack wang 2009-10-14  1182  	spin_lock_irqsave(&task->task_state_lock, flags);
dbf9bfe61 jack wang 2009-10-14  1183  	if (task->task_state_flags & SAS_TASK_STATE_DONE) {
dbf9bfe61 jack wang 2009-10-14  1184  		spin_unlock_irqrestore(&task->task_state_lock, flags);
a9d840710 Viswas G  2017-09-19  1185  		return TMF_RESP_FUNC_COMPLETE;
dbf9bfe61 jack wang 2009-10-14  1186  	}
dbf9bfe61 jack wang 2009-10-14  1187  	spin_unlock_irqrestore(&task->task_state_lock, flags);
dbf9bfe61 jack wang 2009-10-14  1188  	if (task->task_proto & SAS_PROTOCOL_SSP) {
dbf9bfe61 jack wang 2009-10-14  1189  		struct scsi_cmnd *cmnd = task->uldd_task;
dbf9bfe61 jack wang 2009-10-14  1190  		int_to_scsilun(cmnd->device->lun, &lun);
dbf9bfe61 jack wang 2009-10-14  1191  		tmf_task.tmf = TMF_ABORT_TASK;
dbf9bfe61 jack wang 2009-10-14  1192  		tmf_task.tag_of_task_to_be_managed = tag;
dbf9bfe61 jack wang 2009-10-14  1193  		rc = pm8001_issue_ssp_tmf(dev, lun.scsi_lun, &tmf_task);
97ee20886 jack_wang 2009-11-05  1194  		pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
dbf9bfe61 jack wang 2009-10-14  1195  			pm8001_dev->sas_device, 0, tag);
dbf9bfe61 jack wang 2009-10-14  1196  	} else if (task->task_proto & SAS_PROTOCOL_SATA ||
dbf9bfe61 jack wang 2009-10-14  1197  		task->task_proto & SAS_PROTOCOL_STP) {
dbf9bfe61 jack wang 2009-10-14  1198  		rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
dbf9bfe61 jack wang 2009-10-14  1199  			pm8001_dev->sas_device, 0, tag);
dbf9bfe61 jack wang 2009-10-14  1200  	} else if (task->task_proto & SAS_PROTOCOL_SMP) {
dbf9bfe61 jack wang 2009-10-14  1201  		/* SMP */
dbf9bfe61 jack wang 2009-10-14  1202  		rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
dbf9bfe61 jack wang 2009-10-14  1203  			pm8001_dev->sas_device, 0, tag);
dbf9bfe61 jack wang 2009-10-14  1204  
dbf9bfe61 jack wang 2009-10-14  1205  	}
dbf9bfe61 jack wang 2009-10-14 @1206  out:
dbf9bfe61 jack wang 2009-10-14  1207  	if (rc != TMF_RESP_FUNC_COMPLETE)
dbf9bfe61 jack wang 2009-10-14  1208  		pm8001_printk("rc= %d\n", rc);
dbf9bfe61 jack wang 2009-10-14  1209  	return rc;
dbf9bfe61 jack wang 2009-10-14  1210  }
dbf9bfe61 jack wang 2009-10-14  1211  

:::::: The code at line 1166 was first introduced by commit
:::::: dbf9bfe615717d1145f263c0049fe2328e6ed395 [SCSI] pm8001: add SAS/SATA HBA driver

:::::: TO: jack wang <jack_wang@usish.com>
:::::: CC: James Bottomley <James.Bottomley@suse.de>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 27453 bytes --]

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

* Re: [PATCH V3 4/9] pm80xx : tag allocation for phy control request.
  2017-09-20 15:18   ` kbuild test robot
@ 2017-09-21  8:09     ` Jinpu Wang
  0 siblings, 0 replies; 13+ messages in thread
From: Jinpu Wang @ 2017-09-21  8:09 UTC (permalink / raw)
  To: kbuild test robot
  Cc: Viswas G, kbuild-all, Linux SCSI Mailinglist,
	Vasanthalakshmi.Tharmarajan, deepak.ukey, Raj.Dinesh,
	Martin K. Petersen

On Wed, Sep 20, 2017 at 5:18 PM, kbuild test robot <lkp@intel.com> wrote:
> Hi Viswas,
>
> [auto build test WARNING on mkp-scsi/for-next]
> [also build test WARNING on v4.14-rc1 next-20170920]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url:    https://github.com/0day-ci/linux/commits/Viswas-G/pm80xx-updates/20170920-202506
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
> config: x86_64-randconfig-a0-09202136 (attached as .config)
> compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=x86_64
>
> All warnings (new ones prefixed by >>):
>
>    drivers/scsi/pm8001/pm80xx_hwi.c: In function 'pm80xx_chip_phy_ctl_req':
>>> drivers/scsi/pm8001/pm80xx_hwi.c:4507: warning: unused variable 'ret'
>
> vim +/ret +4507 drivers/scsi/pm8001/pm80xx_hwi.c

Indeed, ret is unused, Viswas, could you send a update patch to fix
the warning in this patch and patch5.

Thanks
>
> f5860992d Sakthivel K 2013-04-17  4492
> f5860992d Sakthivel K 2013-04-17  4493  /**
> f5860992d Sakthivel K 2013-04-17  4494   * pm80xx_chip_phy_ctl_req - support the local phy operation
> f5860992d Sakthivel K 2013-04-17  4495   * @pm8001_ha: our hba card information.
> f5860992d Sakthivel K 2013-04-17  4496   * @num: the inbound queue number
> f5860992d Sakthivel K 2013-04-17  4497   * @phy_id: the phy id which we wanted to operate
> f5860992d Sakthivel K 2013-04-17  4498   * @phy_op:
> f5860992d Sakthivel K 2013-04-17  4499   */
> f5860992d Sakthivel K 2013-04-17  4500  static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
> f5860992d Sakthivel K 2013-04-17  4501          u32 phyId, u32 phy_op)
> f5860992d Sakthivel K 2013-04-17  4502  {
> 18e9bdf60 Viswas G    2017-09-19  4503          u32 tag;
> 18e9bdf60 Viswas G    2017-09-19  4504          int rc;
> f5860992d Sakthivel K 2013-04-17  4505          struct local_phy_ctl_req payload;
> f5860992d Sakthivel K 2013-04-17  4506          struct inbound_queue_table *circularQ;
> f5860992d Sakthivel K 2013-04-17 @4507          int ret;
> f5860992d Sakthivel K 2013-04-17  4508          u32 opc = OPC_INB_LOCAL_PHY_CONTROL;
> f5860992d Sakthivel K 2013-04-17  4509          memset(&payload, 0, sizeof(payload));
> 18e9bdf60 Viswas G    2017-09-19  4510          rc = pm8001_tag_alloc(pm8001_ha, &tag);
> 18e9bdf60 Viswas G    2017-09-19  4511          if (rc)
> 18e9bdf60 Viswas G    2017-09-19  4512                  return rc;
> f5860992d Sakthivel K 2013-04-17  4513          circularQ = &pm8001_ha->inbnd_q_tbl[0];
> 18e9bdf60 Viswas G    2017-09-19  4514          payload.tag = cpu_to_le32(tag);
> f5860992d Sakthivel K 2013-04-17  4515          payload.phyop_phyid =
> f5860992d Sakthivel K 2013-04-17  4516                  cpu_to_le32(((phy_op & 0xFF) << 8) | (phyId & 0xFF));
> 18e9bdf60 Viswas G    2017-09-19  4517          return pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0);
> f5860992d Sakthivel K 2013-04-17  4518  }
> f5860992d Sakthivel K 2013-04-17  4519
>
> :::::: The code at line 4507 was first introduced by commit
> :::::: f5860992db55c9e36b0f120dff73f0c34abe510d [SCSI] pm80xx: Added SPCv/ve specific hardware functionalities and relevant changes in common files
>
> :::::: TO: Sakthivel K <Sakthivel.SaravananKamalRaju@pmcs.com>
> :::::: CC: James Bottomley <JBottomley@Parallels.com>
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



-- 
Jack Wang
Linux Kernel Developer

ProfitBricks GmbH
Greifswalder Str. 207
D - 10405 Berlin

Tel:       +49 30 577 008  042
Fax:      +49 30 577 008 299
Email:    jinpu.wang@profitbricks.com
URL:      https://www.profitbricks.de

Sitz der Gesellschaft: Berlin
Registergericht: Amtsgericht Charlottenburg, HRB 125506 B
Geschäftsführer: Achim Weiss

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

end of thread, other threads:[~2017-09-21  8:09 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-19 17:09 [PATCH V3 0/9] pm80xx updates Viswas G
2017-09-19 17:09 ` [PATCH V3 1/9] pm80xx : redefine sas_identify_frame structure Viswas G
2017-09-19 17:09 ` [PATCH V3 2/9] pm80xx : ILA and inactive firmware version through sysfs Viswas G
2017-09-19 17:09 ` [PATCH V3 3/9] pm80xx : Different SAS addresses for phys Viswas G
2017-09-19 17:09 ` [PATCH V3 4/9] pm80xx : tag allocation for phy control request Viswas G
2017-09-20 15:18   ` kbuild test robot
2017-09-21  8:09     ` Jinpu Wang
2017-09-19 17:10 ` [PATCH V3 5/9] pm80xx : cleanup in pm8001_abort_task function Viswas G
2017-09-20 15:57   ` kbuild test robot
2017-09-19 17:10 ` [PATCH V3 6/9] pm80xx : modified port reset timer value for PM8006 card Viswas G
2017-09-19 17:10 ` [PATCH V3 7/9] pm80xx : corrected SATA abort handling sequence Viswas G
2017-09-19 17:10 ` [PATCH V3 8/9] pm80xx : panic on ncq error cleaning up the read log Viswas G
2017-09-19 17:10 ` [PATCH V3 9/9] pm80xx : corrected linkrate value Viswas G

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox