scsi: pm80xx: Add sysfs attribute to track RAAE count
authorVishakha Channapattan <vishakhavc@google.com>
Thu, 15 Apr 2021 10:33:47 +0000 (16:03 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 16 Apr 2021 02:28:59 +0000 (22:28 -0400)
A new sysfs variable 'ctl_raae_count' is being introduced that tells if the
controller is alive by indicating controller ticks. If on subsequent run we
see the ticks changing in RAAE count that indicates that controller is not
dead.

Using the 'ctl_raae_count' sysfs variable we can see ticks incrementing:

    linux-9saw:~# cat /sys/class/scsi_host/host*/ctl_raae_count
    0x00002245
    0x00002253
    0x0000225e

Link: https://lore.kernel.org/r/20210415103352.3580-4-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>
drivers/scsi/pm8001/pm8001_ctl.c

index 786bd2d252b67b61a68b22663cca252534eef149..4552e695be1471561911e6296377ad07c13d912b 100644 (file)
@@ -932,6 +932,27 @@ static ssize_t ctl_hmi_error_show(struct device *cdev,
 }
 static DEVICE_ATTR_RO(ctl_hmi_error);
 
+/**
+ * ctl_raae_count_show - controller raae count check
+ * @cdev: pointer to embedded class device
+ * @buf: the buffer returned
+ *
+ * A sysfs 'read-only' shost attribute.
+ */
+
+static ssize_t ctl_raae_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 raaecnt;
+
+       raaecnt = pm8001_mr32(pm8001_ha->general_stat_tbl_addr, 12);
+       return sysfs_emit(buf, "0x%08x\n", raaecnt);
+}
+static DEVICE_ATTR_RO(ctl_raae_count);
+
 struct device_attribute *pm8001_host_attrs[] = {
        &dev_attr_interface_rev,
        &dev_attr_controller_fatal_error,
@@ -957,6 +978,7 @@ struct device_attribute *pm8001_host_attrs[] = {
        &dev_attr_inc_fw_ver,
        &dev_attr_ctl_mpi_state,
        &dev_attr_ctl_hmi_error,
+       &dev_attr_ctl_raae_count,
        NULL,
 };