Re: [PATCH 1/8] pm80xx: configure PHY settings based on subsystem vendor ID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-by: Jack Wang <jinpu.wang@xxxxxxxxxxxxxxxx>

Thanks
Jack

2015-10-30 15:53 GMT+01:00 Benjamin Rood <benjaminjrood@xxxxxxxxx>:
> Previuosly, all PMC Sierra 80xx controllers are assumed to be a
> motherboard controller, except if the subsystem vendor ID was equal to
> PCI_VENDOR_ID_ADAPTEC.  The driver then attempts to load PHY settings
> from NVRAM.  While this may be correct behavior for most controllers, it
> does not work with Adaptec and ATTO controllers since they do not store
> PHY settings in NVRAM and choose to use either custom PHY settings or chip
> defaults.  Loading random values from NVRAM may cause the controllers to
> malfunction in this edge case.
>
> Signed-off-by: Benjamin Rood <brood@xxxxxxxxxxxx>
> ---
>  drivers/scsi/pm8001/pm8001_init.c | 26 ++++++++++++++++++++------
>  1 file changed, 20 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
> index 5c0356f..8c094fd 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -720,6 +720,23 @@ static int pm8001_get_phy_settings_info(struct pm8001_hba_info *pm8001_ha)
>         return 0;
>  }
>
> +/**
> + * pm8001_configure_phy_settings : Configures PHY settings based on vendor ID.
> + * @pm8001_ha : our hba.
> + */
> +static int pm8001_configure_phy_settings(struct pm8001_hba_info *pm8001_ha)
> +{
> +       switch (pm8001_ha->pdev->subsystem_vendor) {
> +       case PCI_VENDOR_ID_ATTO:
> +       case PCI_VENDOR_ID_ADAPTEC2:
> +       case 0:
> +               return 0;
> +
> +       default:
> +               return pm8001_get_phy_settings_info(pm8001_ha);
> +       }
> +}
> +
>  #ifdef PM8001_USE_MSIX
>  /**
>   * pm8001_setup_msix - enable MSI-X interrupt
> @@ -902,12 +919,9 @@ static int pm8001_pci_probe(struct pci_dev *pdev,
>
>         pm8001_init_sas_add(pm8001_ha);
>         /* phy setting support for motherboard controller */
> -       if (pdev->subsystem_vendor != PCI_VENDOR_ID_ADAPTEC2 &&
> -               pdev->subsystem_vendor != 0) {
> -               rc = pm8001_get_phy_settings_info(pm8001_ha);
> -               if (rc)
> -                       goto err_out_shost;
> -       }
> +       if (pm8001_configure_phy_settings(pm8001_ha))
> +               goto err_out_shost;
> +
>         pm8001_post_sas_ha_init(shost, chip);
>         rc = sas_register_ha(SHOST_TO_SAS_HA(shost));
>         if (rc)
> --
> 2.4.3
>
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux