diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-03-11 13:43:57 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 06:55:31 -0400 |
commit | 4711ba10b13891edf228944a9d0a21dfe7fe90f0 (patch) | |
tree | c846eb029eb2bc827a614df963b00aa412b95956 /drivers/scsi/isci/init.c | |
parent | 2e8320f751030a12efc3e64ee857bfa4647f81fe (diff) |
isci: fix oem parameter initialization and mode detection
1/ Since commit 858d4aa7 "isci: Move firmware loading to per PCI device" we have
been silently falling back to built-in defaults for the parameter settings by
skipping the call to scic_oem_parameters_set().
2/ The afe parameters from the firmware were not being honored
3/ The latest oem parameter definition flips the mode_type values which are
now 0: for APC 1: for MPC. For APC we need to make sure all the phys
default to the same address otherwise strict_wide_ports will cause duplicate
domains.
4/ Fix up the driver announcement to indicate the source of the
parameters.
5/ Fix up the sas addresses to be unique per controller (in the fallback case)
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/init.c')
-rw-r--r-- | drivers/scsi/isci/init.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c index ef0c49a0c0a0..51a7bce20dae 100644 --- a/drivers/scsi/isci/init.c +++ b/drivers/scsi/isci/init.c | |||
@@ -466,6 +466,7 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic | |||
466 | struct isci_host *isci_host; | 466 | struct isci_host *isci_host; |
467 | const struct firmware *fw = NULL; | 467 | const struct firmware *fw = NULL; |
468 | struct isci_orom *orom; | 468 | struct isci_orom *orom; |
469 | char *source = "(platform)"; | ||
469 | 470 | ||
470 | check_si_rev(pdev); | 471 | check_si_rev(pdev); |
471 | 472 | ||
@@ -480,6 +481,7 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic | |||
480 | orom = isci_request_oprom(pdev); | 481 | orom = isci_request_oprom(pdev); |
481 | 482 | ||
482 | if (!orom) { | 483 | if (!orom) { |
484 | source = "(firmware)"; | ||
483 | orom = isci_request_firmware(pdev, fw); | 485 | orom = isci_request_firmware(pdev, fw); |
484 | if (!orom) { | 486 | if (!orom) { |
485 | /* TODO convert this to WARN_TAINT_ONCE once the | 487 | /* TODO convert this to WARN_TAINT_ONCE once the |
@@ -496,9 +498,9 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic | |||
496 | 498 | ||
497 | if (orom) | 499 | if (orom) |
498 | dev_info(&pdev->dev, | 500 | dev_info(&pdev->dev, |
499 | "OEM SAS parameters (version: %u.%u) loaded\n", | 501 | "OEM SAS parameters (version: %u.%u) loaded %s\n", |
500 | (orom->hdr.version & 0xf0) >> 4, | 502 | (orom->hdr.version & 0xf0) >> 4, |
501 | (orom->hdr.version & 0xf)); | 503 | (orom->hdr.version & 0xf), source); |
502 | 504 | ||
503 | pci_info->orom = orom; | 505 | pci_info->orom = orom; |
504 | 506 | ||