pm80xx: add support for ATTO devices during SAS address initiailization
authorBenjamin Rood <benjaminjrood@gmail.com>
Mon, 2 Nov 2015 20:39:23 +0000 (15:39 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 3 Nov 2015 04:36:32 +0000 (23:36 -0500)
ATTO SAS controllers retrieve the SAS address from the NVRAM in a location
different from non-ATTO PMC Sierra SAS controllers.  This patch makes the
necessary adjustments in order to retrieve the SAS address on these types
of adapters.

Signed-off-by: Benjamin Rood <brood@attotech.com>
Reviewed-by: Jack Wang <jinpu.wang@profitbricks.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/pm8001/pm8001_init.c

index feaf504..861416f 100644 (file)
@@ -636,6 +636,11 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
                        payload.minor_function = 0;
                        payload.length = 128;
                }
+       } else if ((pm8001_ha->chip_id == chip_8070 ||
+                       pm8001_ha->chip_id == chip_8072) &&
+                       pm8001_ha->pdev->subsystem_vendor == PCI_VENDOR_ID_ATTO) {
+               payload.minor_function = 4;
+               payload.length = 4096;
        } else {
                payload.minor_function = 1;
                payload.length = 4096;
@@ -662,6 +667,11 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
                        else if (deviceid == 0x0042)
                                pm8001_ha->sas_addr[j] =
                                        payload.func_specific[0x010 + i];
+               } else if ((pm8001_ha->chip_id == chip_8070 ||
+                               pm8001_ha->chip_id == chip_8072) &&
+                               pm8001_ha->pdev->subsystem_vendor == PCI_VENDOR_ID_ATTO) {
+                       pm8001_ha->sas_addr[j] =
+                                       payload.func_specific[0x010 + i];
                } else
                        pm8001_ha->sas_addr[j] =
                                        payload.func_specific[0x804 + i];