summaryrefslogtreecommitdiff
path: root/drivers/scsi
diff options
context:
space:
mode:
authorVishakha Channapattan <vishakhavc@google.com>2021-04-15 13:33:49 +0300
committerMartin K. Petersen <martin.petersen@oracle.com>2021-04-16 05:28:59 +0300
commitb0c306e6216749378ce43f2c5ac4f17bb5ba35ff (patch)
treeb4af84eaf222c446ea1e65022d0da4c0c30f40bb /drivers/scsi
parent0602624ace23afddb92ec842fc602df04fad97c0 (diff)
downloadlinux-b0c306e6216749378ce43f2c5ac4f17bb5ba35ff.tar.xz
scsi: pm80xx: Add sysfs attribute to track iop1 count
A new sysfs variable 'ctl_iop1_count' is being introduced that tells if the controller is alive by indicating controller ticks. If on subsequent run we see the ticks changing that indicates that controller is not dead. Using the 'ctl_iop1_count' sysfs variable we can see ticks incrementing: linux-9saw:~# cat /sys/class/scsi_host/host*/ctl_iop1_count 0x00000069 0x0000006b 0x0000006d 0x00000072 Link: https://lore.kernel.org/r/20210415103352.3580-6-Viswas.G@microchip.com Acked-by: Jack Wang <jinpu.wang@ionos.com> Signed-off-by: Vishakha Channapattan <vishakhavc@google.com> Signed-off-by: Viswas G <Viswas.G@microchip.com> Signed-off-by: Ruksar Devadi <Ruksar.devadi@microchip.com> Signed-off-by: Ashokkumar N <Ashokkumar.N@microchip.com> Signed-off-by: Radha Ramachandran <radha@google.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/pm8001/pm8001_ctl.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/scsi/pm8001/pm8001_ctl.c b/drivers/scsi/pm8001/pm8001_ctl.c
index aa35c4d77d15..0b8802beb7ce 100644
--- a/drivers/scsi/pm8001/pm8001_ctl.c
+++ b/drivers/scsi/pm8001/pm8001_ctl.c
@@ -974,6 +974,28 @@ static ssize_t ctl_iop0_count_show(struct device *cdev,
}
static DEVICE_ATTR_RO(ctl_iop0_count);
+/**
+ * ctl_iop1_count_show - controller iop1 count check
+ * @cdev: pointer to embedded class device
+ * @buf: the buffer returned
+ *
+ * A sysfs 'read-only' shost attribute.
+ */
+
+static ssize_t ctl_iop1_count_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;
+ unsigned int iop1cnt;
+
+ iop1cnt = pm8001_mr32(pm8001_ha->general_stat_tbl_addr, 20);
+ return sysfs_emit(buf, "0x%08x\n", iop1cnt);
+
+}
+static DEVICE_ATTR_RO(ctl_iop1_count);
+
struct device_attribute *pm8001_host_attrs[] = {
&dev_attr_interface_rev,
&dev_attr_controller_fatal_error,
@@ -1001,6 +1023,7 @@ struct device_attribute *pm8001_host_attrs[] = {
&dev_attr_ctl_hmi_error,
&dev_attr_ctl_raae_count,
&dev_attr_ctl_iop0_count,
+ &dev_attr_ctl_iop1_count,
NULL,
};