OSDN Git Service

scsi: megaraid_sas: Add support for Non-secure Aero PCI IDs
authorChandrakanth Patil <chandrakanth.patil@broadcom.com>
Tue, 25 Jun 2019 11:04:20 +0000 (16:34 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 27 Jun 2019 04:07:34 +0000 (00:07 -0400)
This patch will add support for non-secure Aero adapter PCI IDs.  Driver
will throw an error message when a non-secure type controller is
detected. Purpose of this interface is to avoid interacting with any
firmware which is not secured/signed by Broadcom. Any tampering on Firmware
component will be detected by hardware and it will be communicated to the
driver to avoid any further interaction with that component.

Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
Signed-off-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas.h
drivers/scsi/megaraid/megaraid_sas_base.c

index a08dd9c..61bcf7a 100644 (file)
 #define PCI_DEVICE_ID_LSI_AERO_10E2            0x10e2
 #define PCI_DEVICE_ID_LSI_AERO_10E5            0x10e5
 #define PCI_DEVICE_ID_LSI_AERO_10E6            0x10e6
+#define PCI_DEVICE_ID_LSI_AERO_10E0            0x10e0
+#define PCI_DEVICE_ID_LSI_AERO_10E3            0x10e3
+#define PCI_DEVICE_ID_LSI_AERO_10E4            0x10e4
+#define PCI_DEVICE_ID_LSI_AERO_10E7            0x10e7
 
 /*
  * Intel HBA SSDIDs
index 5490898..7d1cf4e 100644 (file)
@@ -168,6 +168,10 @@ static struct pci_device_id megasas_pci_table[] = {
        {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_AERO_10E2)},
        {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_AERO_10E5)},
        {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_AERO_10E6)},
+       {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_AERO_10E0)},
+       {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_AERO_10E3)},
+       {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_AERO_10E4)},
+       {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_AERO_10E7)},
        {}
 };
 
@@ -6991,6 +6995,12 @@ static int megasas_probe_one(struct pci_dev *pdev,
        u16 control = 0;
 
        switch (pdev->device) {
+       case PCI_DEVICE_ID_LSI_AERO_10E0:
+       case PCI_DEVICE_ID_LSI_AERO_10E3:
+       case PCI_DEVICE_ID_LSI_AERO_10E4:
+       case PCI_DEVICE_ID_LSI_AERO_10E7:
+               dev_err(&pdev->dev, "Adapter is in non secure mode\n");
+               return 1;
        case PCI_DEVICE_ID_LSI_AERO_10E1:
        case PCI_DEVICE_ID_LSI_AERO_10E5:
                dev_info(&pdev->dev, "Adapter is in configurable secure mode\n");
@@ -7246,6 +7256,10 @@ megasas_suspend(struct pci_dev *pdev, pm_message_t state)
        struct megasas_instance *instance;
 
        instance = pci_get_drvdata(pdev);
+
+       if (!instance)
+               return 0;
+
        instance->unload = 1;
 
        dev_info(&pdev->dev, "%s is called\n", __func__);
@@ -7299,6 +7313,10 @@ megasas_resume(struct pci_dev *pdev)
        int irq_flags = PCI_IRQ_LEGACY;
 
        instance = pci_get_drvdata(pdev);
+
+       if (!instance)
+               return 0;
+
        host = instance->host;
        pci_set_power_state(pdev, PCI_D0);
        pci_enable_wake(pdev, PCI_D0, 0);
@@ -7467,6 +7485,10 @@ static void megasas_detach_one(struct pci_dev *pdev)
        u32 pd_seq_map_sz;
 
        instance = pci_get_drvdata(pdev);
+
+       if (!instance)
+               return;
+
        host = instance->host;
        fusion = instance->ctrl_context;
 
@@ -7595,6 +7617,9 @@ static void megasas_shutdown(struct pci_dev *pdev)
 {
        struct megasas_instance *instance = pci_get_drvdata(pdev);
 
+       if (!instance)
+               return;
+
        instance->unload = 1;
 
        if (megasas_wait_for_adapter_operational(instance))