diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-07-01 14:41:21 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 07:04:52 -0400 |
commit | dc00c8b6940aa10ab1ce6a4d10b1bfe7b848781b (patch) | |
tree | 2f62620a348a5f6635413db4f5a0725c248a222b /drivers/scsi/isci/host.c | |
parent | 4e4dca3de9658f364d34924e072f2b64e5c3d267 (diff) |
isci: cleanup silicon revision detection
Perform checking per-pci device (even though all systems will only have
1 pci device in this generation), and delete support for silicon that
does not report a proper revision (i.e. A0).
Reported-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/host.c')
-rw-r--r-- | drivers/scsi/isci/host.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c index b554ea271ba6..26072f1e9852 100644 --- a/drivers/scsi/isci/host.c +++ b/drivers/scsi/isci/host.c | |||
@@ -1886,6 +1886,7 @@ void sci_controller_power_control_queue_remove(struct isci_host *ihost, | |||
1886 | static void sci_controller_afe_initialization(struct isci_host *ihost) | 1886 | static void sci_controller_afe_initialization(struct isci_host *ihost) |
1887 | { | 1887 | { |
1888 | const struct sci_oem_params *oem = &ihost->oem_parameters; | 1888 | const struct sci_oem_params *oem = &ihost->oem_parameters; |
1889 | struct pci_dev *pdev = ihost->pdev; | ||
1889 | u32 afe_status; | 1890 | u32 afe_status; |
1890 | u32 phy_id; | 1891 | u32 phy_id; |
1891 | 1892 | ||
@@ -1893,7 +1894,7 @@ static void sci_controller_afe_initialization(struct isci_host *ihost) | |||
1893 | writel(0x0081000f, &ihost->scu_registers->afe.afe_dfx_master_control0); | 1894 | writel(0x0081000f, &ihost->scu_registers->afe.afe_dfx_master_control0); |
1894 | udelay(AFE_REGISTER_WRITE_DELAY); | 1895 | udelay(AFE_REGISTER_WRITE_DELAY); |
1895 | 1896 | ||
1896 | if (is_b0()) { | 1897 | if (is_b0(pdev)) { |
1897 | /* PM Rx Equalization Save, PM SPhy Rx Acknowledgement | 1898 | /* PM Rx Equalization Save, PM SPhy Rx Acknowledgement |
1898 | * Timer, PM Stagger Timer */ | 1899 | * Timer, PM Stagger Timer */ |
1899 | writel(0x0007BFFF, &ihost->scu_registers->afe.afe_pmsn_master_control2); | 1900 | writel(0x0007BFFF, &ihost->scu_registers->afe.afe_pmsn_master_control2); |
@@ -1901,17 +1902,15 @@ static void sci_controller_afe_initialization(struct isci_host *ihost) | |||
1901 | } | 1902 | } |
1902 | 1903 | ||
1903 | /* Configure bias currents to normal */ | 1904 | /* Configure bias currents to normal */ |
1904 | if (is_a0()) | 1905 | if (is_a2(pdev)) |
1905 | writel(0x00005500, &ihost->scu_registers->afe.afe_bias_control); | ||
1906 | else if (is_a2()) | ||
1907 | writel(0x00005A00, &ihost->scu_registers->afe.afe_bias_control); | 1906 | writel(0x00005A00, &ihost->scu_registers->afe.afe_bias_control); |
1908 | else if (is_b0() || is_c0()) | 1907 | else if (is_b0(pdev) || is_c0(pdev)) |
1909 | writel(0x00005F00, &ihost->scu_registers->afe.afe_bias_control); | 1908 | writel(0x00005F00, &ihost->scu_registers->afe.afe_bias_control); |
1910 | 1909 | ||
1911 | udelay(AFE_REGISTER_WRITE_DELAY); | 1910 | udelay(AFE_REGISTER_WRITE_DELAY); |
1912 | 1911 | ||
1913 | /* Enable PLL */ | 1912 | /* Enable PLL */ |
1914 | if (is_b0() || is_c0()) | 1913 | if (is_b0(pdev) || is_c0(pdev)) |
1915 | writel(0x80040A08, &ihost->scu_registers->afe.afe_pll_control0); | 1914 | writel(0x80040A08, &ihost->scu_registers->afe.afe_pll_control0); |
1916 | else | 1915 | else |
1917 | writel(0x80040908, &ihost->scu_registers->afe.afe_pll_control0); | 1916 | writel(0x80040908, &ihost->scu_registers->afe.afe_pll_control0); |
@@ -1924,7 +1923,7 @@ static void sci_controller_afe_initialization(struct isci_host *ihost) | |||
1924 | udelay(AFE_REGISTER_WRITE_DELAY); | 1923 | udelay(AFE_REGISTER_WRITE_DELAY); |
1925 | } while ((afe_status & 0x00001000) == 0); | 1924 | } while ((afe_status & 0x00001000) == 0); |
1926 | 1925 | ||
1927 | if (is_a0() || is_a2()) { | 1926 | if (is_a2(pdev)) { |
1928 | /* Shorten SAS SNW lock time (RxLock timer value from 76 us to 50 us) */ | 1927 | /* Shorten SAS SNW lock time (RxLock timer value from 76 us to 50 us) */ |
1929 | writel(0x7bcc96ad, &ihost->scu_registers->afe.afe_pmsn_master_control0); | 1928 | writel(0x7bcc96ad, &ihost->scu_registers->afe.afe_pmsn_master_control0); |
1930 | udelay(AFE_REGISTER_WRITE_DELAY); | 1929 | udelay(AFE_REGISTER_WRITE_DELAY); |
@@ -1933,11 +1932,11 @@ static void sci_controller_afe_initialization(struct isci_host *ihost) | |||
1933 | for (phy_id = 0; phy_id < SCI_MAX_PHYS; phy_id++) { | 1932 | for (phy_id = 0; phy_id < SCI_MAX_PHYS; phy_id++) { |
1934 | const struct sci_phy_oem_params *oem_phy = &oem->phys[phy_id]; | 1933 | const struct sci_phy_oem_params *oem_phy = &oem->phys[phy_id]; |
1935 | 1934 | ||
1936 | if (is_b0()) { | 1935 | if (is_b0(pdev)) { |
1937 | /* Configure transmitter SSC parameters */ | 1936 | /* Configure transmitter SSC parameters */ |
1938 | writel(0x00030000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); | 1937 | writel(0x00030000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); |
1939 | udelay(AFE_REGISTER_WRITE_DELAY); | 1938 | udelay(AFE_REGISTER_WRITE_DELAY); |
1940 | } else if (is_c0()) { | 1939 | } else if (is_c0(pdev)) { |
1941 | /* Configure transmitter SSC parameters */ | 1940 | /* Configure transmitter SSC parameters */ |
1942 | writel(0x0003000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); | 1941 | writel(0x0003000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); |
1943 | udelay(AFE_REGISTER_WRITE_DELAY); | 1942 | udelay(AFE_REGISTER_WRITE_DELAY); |
@@ -1961,11 +1960,9 @@ static void sci_controller_afe_initialization(struct isci_host *ihost) | |||
1961 | /* | 1960 | /* |
1962 | * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) | 1961 | * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) |
1963 | * & increase TX int & ext bias 20%....(0xe85c) */ | 1962 | * & increase TX int & ext bias 20%....(0xe85c) */ |
1964 | if (is_a0()) | 1963 | if (is_a2(pdev)) |
1965 | writel(0x000003D4, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); | ||
1966 | else if (is_a2()) | ||
1967 | writel(0x000003F0, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); | 1964 | writel(0x000003F0, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); |
1968 | else if (is_b0()) { | 1965 | else if (is_b0(pdev)) { |
1969 | /* Power down TX and RX (PWRDNTX and PWRDNRX) */ | 1966 | /* Power down TX and RX (PWRDNTX and PWRDNRX) */ |
1970 | writel(0x000003D7, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); | 1967 | writel(0x000003D7, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); |
1971 | udelay(AFE_REGISTER_WRITE_DELAY); | 1968 | udelay(AFE_REGISTER_WRITE_DELAY); |
@@ -1985,7 +1982,7 @@ static void sci_controller_afe_initialization(struct isci_host *ihost) | |||
1985 | } | 1982 | } |
1986 | udelay(AFE_REGISTER_WRITE_DELAY); | 1983 | udelay(AFE_REGISTER_WRITE_DELAY); |
1987 | 1984 | ||
1988 | if (is_a0() || is_a2()) { | 1985 | if (is_a2(pdev)) { |
1989 | /* Enable TX equalization (0xe824) */ | 1986 | /* Enable TX equalization (0xe824) */ |
1990 | writel(0x00040000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_control); | 1987 | writel(0x00040000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_control); |
1991 | udelay(AFE_REGISTER_WRITE_DELAY); | 1988 | udelay(AFE_REGISTER_WRITE_DELAY); |
@@ -1998,11 +1995,9 @@ static void sci_controller_afe_initialization(struct isci_host *ihost) | |||
1998 | udelay(AFE_REGISTER_WRITE_DELAY); | 1995 | udelay(AFE_REGISTER_WRITE_DELAY); |
1999 | 1996 | ||
2000 | /* Leave DFE/FFE on */ | 1997 | /* Leave DFE/FFE on */ |
2001 | if (is_a0()) | 1998 | if (is_a2(pdev)) |
2002 | writel(0x3F09983F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control0); | ||
2003 | else if (is_a2()) | ||
2004 | writel(0x3F11103F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control0); | 1999 | writel(0x3F11103F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control0); |
2005 | else if (is_b0()) { | 2000 | else if (is_b0(pdev)) { |
2006 | writel(0x3F11103F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control0); | 2001 | writel(0x3F11103F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control0); |
2007 | udelay(AFE_REGISTER_WRITE_DELAY); | 2002 | udelay(AFE_REGISTER_WRITE_DELAY); |
2008 | /* Enable TX equalization (0xe824) */ | 2003 | /* Enable TX equalization (0xe824) */ |