aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorRaghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>2016-04-26 02:32:09 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2016-04-29 19:08:24 -0400
commit9cb62fa24e0d22dbe991c315d6c454a341ea3f76 (patch)
treebfbd79d31fc933b9941f4d0c77131c1ce34568a7 /drivers/scsi
parentfc4bf75ea300a5e62a2419f89dd0e22189dd7ab7 (diff)
aacraid: Log firmware AIF messages
Firmware AIF messages about cache loss and data recovery are being missed by the driver since currently they are not captured but rather let go. This patch to capture those messages and log them for the user. Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/aacraid/aacraid.h4
-rw-r--r--drivers/scsi/aacraid/commsup.c27
-rw-r--r--drivers/scsi/aacraid/linit.c2
-rw-r--r--drivers/scsi/aacraid/src.c3
4 files changed, 35 insertions, 1 deletions
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index 1936e0813f13..b70f3eb323f7 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -2065,6 +2065,10 @@ extern struct aac_common aac_config;
2065#define AifEnAddJBOD 30 /* JBOD created */ 2065#define AifEnAddJBOD 30 /* JBOD created */
2066#define AifEnDeleteJBOD 31 /* JBOD deleted */ 2066#define AifEnDeleteJBOD 31 /* JBOD deleted */
2067 2067
2068#define AifBuManagerEvent 42 /* Bu management*/
2069#define AifBuCacheDataLoss 10
2070#define AifBuCacheDataRecover 11
2071
2068#define AifCmdJobProgress 2 /* Progress report */ 2072#define AifCmdJobProgress 2 /* Progress report */
2069#define AifJobCtrZero 101 /* Array Zero progress */ 2073#define AifJobCtrZero 101 /* Array Zero progress */
2070#define AifJobStsSuccess 1 /* Job completes */ 2074#define AifJobStsSuccess 1 /* Job completes */
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index bb7988d53216..0aeecec1f5ea 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -901,6 +901,31 @@ void aac_printf(struct aac_dev *dev, u32 val)
901 memset(cp, 0, 256); 901 memset(cp, 0, 256);
902} 902}
903 903
904static inline int aac_aif_data(struct aac_aifcmd *aifcmd, uint32_t index)
905{
906 return le32_to_cpu(((__le32 *)aifcmd->data)[index]);
907}
908
909
910static void aac_handle_aif_bu(struct aac_dev *dev, struct aac_aifcmd *aifcmd)
911{
912 switch (aac_aif_data(aifcmd, 1)) {
913 case AifBuCacheDataLoss:
914 if (aac_aif_data(aifcmd, 2))
915 dev_info(&dev->pdev->dev, "Backup unit had cache data loss - [%d]\n",
916 aac_aif_data(aifcmd, 2));
917 else
918 dev_info(&dev->pdev->dev, "Backup Unit had cache data loss\n");
919 break;
920 case AifBuCacheDataRecover:
921 if (aac_aif_data(aifcmd, 2))
922 dev_info(&dev->pdev->dev, "DDR cache data recovered successfully - [%d]\n",
923 aac_aif_data(aifcmd, 2));
924 else
925 dev_info(&dev->pdev->dev, "DDR cache data recovered successfully\n");
926 break;
927 }
928}
904 929
905/** 930/**
906 * aac_handle_aif - Handle a message from the firmware 931 * aac_handle_aif - Handle a message from the firmware
@@ -1154,6 +1179,8 @@ static void aac_handle_aif(struct aac_dev * dev, struct fib * fibptr)
1154 ADD : DELETE; 1179 ADD : DELETE;
1155 break; 1180 break;
1156 } 1181 }
1182 case AifBuManagerEvent:
1183 aac_handle_aif_bu(dev, aifcmd);
1157 break; 1184 break;
1158 } 1185 }
1159 1186
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 79a1cec1a51f..a943bd230bc2 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -1299,6 +1299,8 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1299 else 1299 else
1300 shost->this_id = shost->max_id; 1300 shost->this_id = shost->max_id;
1301 1301
1302 aac_intr_normal(aac, 0, 2, 0, NULL);
1303
1302 /* 1304 /*
1303 * dmb - we may need to move the setting of these parms somewhere else once 1305 * dmb - we may need to move the setting of these parms somewhere else once
1304 * we get a fib that can report the actual numbers 1306 * we get a fib that can report the actual numbers
diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c
index bc0203f3d243..28f8b8a1b8a4 100644
--- a/drivers/scsi/aacraid/src.c
+++ b/drivers/scsi/aacraid/src.c
@@ -135,7 +135,8 @@ static irqreturn_t aac_src_intr_message(int irq, void *dev_id)
135 135
136 if (mode & AAC_INT_MODE_AIF) { 136 if (mode & AAC_INT_MODE_AIF) {
137 /* handle AIF */ 137 /* handle AIF */
138 aac_intr_normal(dev, 0, 2, 0, NULL); 138 if (dev->aif_thread && dev->fsa_dev)
139 aac_intr_normal(dev, 0, 2, 0, NULL);
139 if (dev->msi_enabled) 140 if (dev->msi_enabled)
140 aac_src_access_devreg(dev, AAC_CLEAR_AIF_BIT); 141 aac_src_access_devreg(dev, AAC_CLEAR_AIF_BIT);
141 mode = 0; 142 mode = 0;