Commit dd807699 authored by Chandrakanth Patil's avatar Chandrakanth Patil Committed by Martin K. Petersen

scsi: megaraid_sas: Add support for Non-secure Aero PCI IDs

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: default avatarSumit Saxena <sumit.saxena@broadcom.com>
Signed-off-by: default avatarChandrakanth Patil <chandrakanth.patil@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 5885571d
...@@ -64,6 +64,10 @@ ...@@ -64,6 +64,10 @@
#define PCI_DEVICE_ID_LSI_AERO_10E2 0x10e2 #define PCI_DEVICE_ID_LSI_AERO_10E2 0x10e2
#define PCI_DEVICE_ID_LSI_AERO_10E5 0x10e5 #define PCI_DEVICE_ID_LSI_AERO_10E5 0x10e5
#define PCI_DEVICE_ID_LSI_AERO_10E6 0x10e6 #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 * Intel HBA SSDIDs
......
...@@ -168,6 +168,10 @@ static struct pci_device_id megasas_pci_table[] = { ...@@ -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_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_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_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, ...@@ -6991,6 +6995,12 @@ static int megasas_probe_one(struct pci_dev *pdev,
u16 control = 0; u16 control = 0;
switch (pdev->device) { 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_10E1:
case PCI_DEVICE_ID_LSI_AERO_10E5: case PCI_DEVICE_ID_LSI_AERO_10E5:
dev_info(&pdev->dev, "Adapter is in configurable secure mode\n"); 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) ...@@ -7246,6 +7256,10 @@ megasas_suspend(struct pci_dev *pdev, pm_message_t state)
struct megasas_instance *instance; struct megasas_instance *instance;
instance = pci_get_drvdata(pdev); instance = pci_get_drvdata(pdev);
if (!instance)
return 0;
instance->unload = 1; instance->unload = 1;
dev_info(&pdev->dev, "%s is called\n", __func__); dev_info(&pdev->dev, "%s is called\n", __func__);
...@@ -7299,6 +7313,10 @@ megasas_resume(struct pci_dev *pdev) ...@@ -7299,6 +7313,10 @@ megasas_resume(struct pci_dev *pdev)
int irq_flags = PCI_IRQ_LEGACY; int irq_flags = PCI_IRQ_LEGACY;
instance = pci_get_drvdata(pdev); instance = pci_get_drvdata(pdev);
if (!instance)
return 0;
host = instance->host; host = instance->host;
pci_set_power_state(pdev, PCI_D0); pci_set_power_state(pdev, PCI_D0);
pci_enable_wake(pdev, PCI_D0, 0); pci_enable_wake(pdev, PCI_D0, 0);
...@@ -7467,6 +7485,10 @@ static void megasas_detach_one(struct pci_dev *pdev) ...@@ -7467,6 +7485,10 @@ static void megasas_detach_one(struct pci_dev *pdev)
u32 pd_seq_map_sz; u32 pd_seq_map_sz;
instance = pci_get_drvdata(pdev); instance = pci_get_drvdata(pdev);
if (!instance)
return;
host = instance->host; host = instance->host;
fusion = instance->ctrl_context; fusion = instance->ctrl_context;
...@@ -7595,6 +7617,9 @@ static void megasas_shutdown(struct pci_dev *pdev) ...@@ -7595,6 +7617,9 @@ static void megasas_shutdown(struct pci_dev *pdev)
{ {
struct megasas_instance *instance = pci_get_drvdata(pdev); struct megasas_instance *instance = pci_get_drvdata(pdev);
if (!instance)
return;
instance->unload = 1; instance->unload = 1;
if (megasas_wait_for_adapter_operational(instance)) if (megasas_wait_for_adapter_operational(instance))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment