OSDN Git Service

scsi: mpi3mr: Print cable mngnt and temp threshold events
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Mon, 20 Dec 2021 14:11:54 +0000 (19:41 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 23 Dec 2021 05:04:24 +0000 (00:04 -0500)
Print cable management & temperature threshold event data.

Use vendor id & device id macro definitions from MPI3 headers.

Link: https://lore.kernel.org/r/20211220141159.16117-21-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpi3mr/mpi3mr_fw.c
drivers/scsi/mpi3mr/mpi3mr_os.c

index a9491f7..a4decaa 100644 (file)
@@ -3503,6 +3503,7 @@ static int mpi3mr_enable_events(struct mpi3mr_ioc *mrioc)
        mpi3mr_unmask_events(mrioc, MPI3_EVENT_PREPARE_FOR_RESET);
        mpi3mr_unmask_events(mrioc, MPI3_EVENT_CABLE_MGMT);
        mpi3mr_unmask_events(mrioc, MPI3_EVENT_ENERGY_PACK_CHANGE);
+       mpi3mr_unmask_events(mrioc, MPI3_EVENT_TEMP_THRESHOLD);
 
        retval = mpi3mr_issue_event_notification(mrioc);
        if (retval)
index 192986f..d893c6d 100644 (file)
@@ -2052,6 +2052,66 @@ static void mpi3mr_energypackchg_evt_th(struct mpi3mr_ioc *mrioc,
 }
 
 /**
+ * mpi3mr_tempthreshold_evt_th - Temp threshold event tophalf
+ * @mrioc: Adapter instance reference
+ * @event_reply: event data
+ *
+ * Displays temperature threshold event details and fault code
+ * if any is hit due to temperature exceeding threshold.
+ *
+ * Return: Nothing
+ */
+static void mpi3mr_tempthreshold_evt_th(struct mpi3mr_ioc *mrioc,
+       struct mpi3_event_notification_reply *event_reply)
+{
+       struct mpi3_event_data_temp_threshold *evtdata =
+           (struct mpi3_event_data_temp_threshold *)event_reply->event_data;
+
+       ioc_err(mrioc, "Temperature threshold levels %s%s%s exceeded for sensor: %d !!! Current temperature in Celsius: %d\n",
+           (le16_to_cpu(evtdata->status) & 0x1) ? "Warning " : " ",
+           (le16_to_cpu(evtdata->status) & 0x2) ? "Critical " : " ",
+           (le16_to_cpu(evtdata->status) & 0x4) ? "Fatal " : " ", evtdata->sensor_num,
+           le16_to_cpu(evtdata->current_temperature));
+       mpi3mr_print_fault_info(mrioc);
+}
+
+/**
+ * mpi3mr_cablemgmt_evt_th - Cable management event tophalf
+ * @mrioc: Adapter instance reference
+ * @event_reply: event data
+ *
+ * Displays Cable manegemt event details.
+ *
+ * Return: Nothing
+ */
+static void mpi3mr_cablemgmt_evt_th(struct mpi3mr_ioc *mrioc,
+       struct mpi3_event_notification_reply *event_reply)
+{
+       struct mpi3_event_data_cable_management *evtdata =
+           (struct mpi3_event_data_cable_management *)event_reply->event_data;
+
+       switch (evtdata->status) {
+       case MPI3_EVENT_CABLE_MGMT_STATUS_INSUFFICIENT_POWER:
+       {
+               ioc_info(mrioc, "An active cable with receptacle_id %d cannot be powered.\n"
+                   "Devices connected to this cable are not detected.\n"
+                   "This cable requires %d mW of power.\n",
+                   evtdata->receptacle_id,
+                   le32_to_cpu(evtdata->active_cable_power_requirement));
+               break;
+       }
+       case MPI3_EVENT_CABLE_MGMT_STATUS_DEGRADED:
+       {
+               ioc_info(mrioc, "A cable with receptacle_id %d is not running at optimal speed\n",
+                   evtdata->receptacle_id);
+               break;
+       }
+       default:
+               break;
+       }
+}
+
+/**
  * mpi3mr_os_handle_events - Firmware event handler
  * @mrioc: Adapter instance reference
  * @event_reply: event data
@@ -2125,9 +2185,18 @@ void mpi3mr_os_handle_events(struct mpi3mr_ioc *mrioc,
                mpi3mr_energypackchg_evt_th(mrioc, event_reply);
                break;
        }
+       case MPI3_EVENT_TEMP_THRESHOLD:
+       {
+               mpi3mr_tempthreshold_evt_th(mrioc, event_reply);
+               break;
+       }
+       case MPI3_EVENT_CABLE_MGMT:
+       {
+               mpi3mr_cablemgmt_evt_th(mrioc, event_reply);
+               break;
+       }
        case MPI3_EVENT_ENCL_DEVICE_STATUS_CHANGE:
        case MPI3_EVENT_SAS_DISCOVERY:
-       case MPI3_EVENT_CABLE_MGMT:
        case MPI3_EVENT_SAS_DEVICE_DISCOVERY_ERROR:
        case MPI3_EVENT_SAS_BROADCAST_PRIMITIVE:
        case MPI3_EVENT_PCIE_ENUMERATION:
@@ -4247,8 +4316,8 @@ static int mpi3mr_resume(struct pci_dev *pdev)
 
 static const struct pci_device_id mpi3mr_pci_id_table[] = {
        {
-               PCI_DEVICE_SUB(PCI_VENDOR_ID_LSI_LOGIC, 0x00A5,
-                   PCI_ANY_ID, PCI_ANY_ID)
+               PCI_DEVICE_SUB(MPI3_MFGPAGE_VENDORID_BROADCOM,
+                   MPI3_MFGPAGE_DEVID_SAS4116, PCI_ANY_ID, PCI_ANY_ID)
        },
        { 0 }
 };