#define                        AifEnAddJBOD            30      /* JBOD created */
 #define                        AifEnDeleteJBOD         31      /* JBOD deleted */
 
+#define                        AifBuManagerEvent               42 /* Bu management*/
+#define                        AifBuCacheDataLoss              10
+#define                        AifBuCacheDataRecover   11
+
 #define                AifCmdJobProgress       2       /* Progress report */
 #define                        AifJobCtrZero   101     /* Array Zero progress */
 #define                        AifJobStsSuccess 1      /* Job completes */
 
        memset(cp, 0, 256);
 }
 
+static inline int aac_aif_data(struct aac_aifcmd *aifcmd, uint32_t index)
+{
+       return le32_to_cpu(((__le32 *)aifcmd->data)[index]);
+}
+
+
+static void aac_handle_aif_bu(struct aac_dev *dev, struct aac_aifcmd *aifcmd)
+{
+       switch (aac_aif_data(aifcmd, 1)) {
+       case AifBuCacheDataLoss:
+               if (aac_aif_data(aifcmd, 2))
+                       dev_info(&dev->pdev->dev, "Backup unit had cache data loss - [%d]\n",
+                       aac_aif_data(aifcmd, 2));
+               else
+                       dev_info(&dev->pdev->dev, "Backup Unit had cache data loss\n");
+               break;
+       case AifBuCacheDataRecover:
+               if (aac_aif_data(aifcmd, 2))
+                       dev_info(&dev->pdev->dev, "DDR cache data recovered successfully - [%d]\n",
+                       aac_aif_data(aifcmd, 2));
+               else
+                       dev_info(&dev->pdev->dev, "DDR cache data recovered successfully\n");
+               break;
+       }
+}
 
 /**
  *     aac_handle_aif          -       Handle a message from the firmware
                                  ADD : DELETE;
                                break;
                        }
+                       case AifBuManagerEvent:
+                               aac_handle_aif_bu(dev, aifcmd);
                        break;
                }
 
 
        else
                shost->this_id = shost->max_id;
 
+       aac_intr_normal(aac, 0, 2, 0, NULL);
+
        /*
         * dmb - we may need to move the setting of these parms somewhere else once
         * we get a fib that can report the actual numbers
 
 
        if (mode & AAC_INT_MODE_AIF) {
                /* handle AIF */
-               aac_intr_normal(dev, 0, 2, 0, NULL);
+               if (dev->aif_thread && dev->fsa_dev)
+                       aac_intr_normal(dev, 0, 2, 0, NULL);
                if (dev->msi_enabled)
                        aac_src_access_devreg(dev, AAC_CLEAR_AIF_BIT);
                mode = 0;