host.c (4e4dca3de9658f364d34924e072f2b64e5c3d267) | host.c (dc00c8b6940aa10ab1ce6a4d10b1bfe7b848781b) |
---|---|
1/* 2 * This file is provided under a dual BSD/GPLv2 license. When using or 3 * redistributing this file, you may do so under either license. 4 * 5 * GPL LICENSE SUMMARY 6 * 7 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8 * --- 1872 unchanged lines hidden (view full) --- 1881#define AFE_REGISTER_WRITE_DELAY 10 1882 1883/* Initialize the AFE for this phy index. We need to read the AFE setup from 1884 * the OEM parameters 1885 */ 1886static void sci_controller_afe_initialization(struct isci_host *ihost) 1887{ 1888 const struct sci_oem_params *oem = &ihost->oem_parameters; | 1/* 2 * This file is provided under a dual BSD/GPLv2 license. When using or 3 * redistributing this file, you may do so under either license. 4 * 5 * GPL LICENSE SUMMARY 6 * 7 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8 * --- 1872 unchanged lines hidden (view full) --- 1881#define AFE_REGISTER_WRITE_DELAY 10 1882 1883/* Initialize the AFE for this phy index. We need to read the AFE setup from 1884 * the OEM parameters 1885 */ 1886static void sci_controller_afe_initialization(struct isci_host *ihost) 1887{ 1888 const struct sci_oem_params *oem = &ihost->oem_parameters; |
1889 struct pci_dev *pdev = ihost->pdev; |
|
1889 u32 afe_status; 1890 u32 phy_id; 1891 1892 /* Clear DFX Status registers */ 1893 writel(0x0081000f, &ihost->scu_registers->afe.afe_dfx_master_control0); 1894 udelay(AFE_REGISTER_WRITE_DELAY); 1895 | 1890 u32 afe_status; 1891 u32 phy_id; 1892 1893 /* Clear DFX Status registers */ 1894 writel(0x0081000f, &ihost->scu_registers->afe.afe_dfx_master_control0); 1895 udelay(AFE_REGISTER_WRITE_DELAY); 1896 |
1896 if (is_b0()) { | 1897 if (is_b0(pdev)) { |
1897 /* PM Rx Equalization Save, PM SPhy Rx Acknowledgement 1898 * Timer, PM Stagger Timer */ 1899 writel(0x0007BFFF, &ihost->scu_registers->afe.afe_pmsn_master_control2); 1900 udelay(AFE_REGISTER_WRITE_DELAY); 1901 } 1902 1903 /* Configure bias currents to normal */ | 1898 /* PM Rx Equalization Save, PM SPhy Rx Acknowledgement 1899 * Timer, PM Stagger Timer */ 1900 writel(0x0007BFFF, &ihost->scu_registers->afe.afe_pmsn_master_control2); 1901 udelay(AFE_REGISTER_WRITE_DELAY); 1902 } 1903 1904 /* Configure bias currents to normal */ |
1904 if (is_a0()) 1905 writel(0x00005500, &ihost->scu_registers->afe.afe_bias_control); 1906 else if (is_a2()) | 1905 if (is_a2(pdev)) |
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); 1910 1911 udelay(AFE_REGISTER_WRITE_DELAY); 1912 1913 /* Enable PLL */ | 1908 writel(0x00005F00, &ihost->scu_registers->afe.afe_bias_control); 1909 1910 udelay(AFE_REGISTER_WRITE_DELAY); 1911 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); 1916 else 1917 writel(0x80040908, &ihost->scu_registers->afe.afe_pll_control0); 1918 1919 udelay(AFE_REGISTER_WRITE_DELAY); 1920 1921 /* Wait for the PLL to lock */ 1922 do { 1923 afe_status = readl(&ihost->scu_registers->afe.afe_common_block_status); 1924 udelay(AFE_REGISTER_WRITE_DELAY); 1925 } while ((afe_status & 0x00001000) == 0); 1926 | 1914 writel(0x80040A08, &ihost->scu_registers->afe.afe_pll_control0); 1915 else 1916 writel(0x80040908, &ihost->scu_registers->afe.afe_pll_control0); 1917 1918 udelay(AFE_REGISTER_WRITE_DELAY); 1919 1920 /* Wait for the PLL to lock */ 1921 do { 1922 afe_status = readl(&ihost->scu_registers->afe.afe_common_block_status); 1923 udelay(AFE_REGISTER_WRITE_DELAY); 1924 } while ((afe_status & 0x00001000) == 0); 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) */ 1929 writel(0x7bcc96ad, &ihost->scu_registers->afe.afe_pmsn_master_control0); 1930 udelay(AFE_REGISTER_WRITE_DELAY); 1931 } 1932 1933 for (phy_id = 0; phy_id < SCI_MAX_PHYS; phy_id++) { 1934 const struct sci_phy_oem_params *oem_phy = &oem->phys[phy_id]; 1935 | 1927 /* Shorten SAS SNW lock time (RxLock timer value from 76 us to 50 us) */ 1928 writel(0x7bcc96ad, &ihost->scu_registers->afe.afe_pmsn_master_control0); 1929 udelay(AFE_REGISTER_WRITE_DELAY); 1930 } 1931 1932 for (phy_id = 0; phy_id < SCI_MAX_PHYS; phy_id++) { 1933 const struct sci_phy_oem_params *oem_phy = &oem->phys[phy_id]; 1934 |
1936 if (is_b0()) { | 1935 if (is_b0(pdev)) { |
1937 /* Configure transmitter SSC parameters */ 1938 writel(0x00030000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); 1939 udelay(AFE_REGISTER_WRITE_DELAY); | 1936 /* Configure transmitter SSC parameters */ 1937 writel(0x00030000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); 1938 udelay(AFE_REGISTER_WRITE_DELAY); |
1940 } else if (is_c0()) { | 1939 } else if (is_c0(pdev)) { |
1941 /* Configure transmitter SSC parameters */ 1942 writel(0x0003000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); 1943 udelay(AFE_REGISTER_WRITE_DELAY); 1944 1945 /* 1946 * All defaults, except the Receive Word Alignament/Comma Detect 1947 * Enable....(0xe800) */ 1948 writel(0x00004500, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_xcvr_control0); --- 7 unchanged lines hidden (view full) --- 1956 1957 writel(0x0050100F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_xcvr_control1); 1958 udelay(AFE_REGISTER_WRITE_DELAY); 1959 } 1960 1961 /* 1962 * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) 1963 * & increase TX int & ext bias 20%....(0xe85c) */ | 1940 /* Configure transmitter SSC parameters */ 1941 writel(0x0003000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_ssc_control); 1942 udelay(AFE_REGISTER_WRITE_DELAY); 1943 1944 /* 1945 * All defaults, except the Receive Word Alignament/Comma Detect 1946 * Enable....(0xe800) */ 1947 writel(0x00004500, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_xcvr_control0); --- 7 unchanged lines hidden (view full) --- 1955 1956 writel(0x0050100F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_xcvr_control1); 1957 udelay(AFE_REGISTER_WRITE_DELAY); 1958 } 1959 1960 /* 1961 * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) 1962 * & increase TX int & ext bias 20%....(0xe85c) */ |
1964 if (is_a0()) 1965 writel(0x000003D4, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1966 else if (is_a2()) | 1963 if (is_a2(pdev)) |
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) */ 1970 writel(0x000003D7, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1971 udelay(AFE_REGISTER_WRITE_DELAY); 1972 1973 /* 1974 * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) 1975 * & increase TX int & ext bias 20%....(0xe85c) */ 1976 writel(0x000003D4, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1977 } else { 1978 writel(0x000001E7, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1979 udelay(AFE_REGISTER_WRITE_DELAY); 1980 1981 /* 1982 * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) 1983 * & increase TX int & ext bias 20%....(0xe85c) */ 1984 writel(0x000001E4, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1985 } 1986 udelay(AFE_REGISTER_WRITE_DELAY); 1987 | 1966 /* Power down TX and RX (PWRDNTX and PWRDNRX) */ 1967 writel(0x000003D7, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1968 udelay(AFE_REGISTER_WRITE_DELAY); 1969 1970 /* 1971 * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) 1972 * & increase TX int & ext bias 20%....(0xe85c) */ 1973 writel(0x000003D4, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1974 } else { 1975 writel(0x000001E7, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1976 udelay(AFE_REGISTER_WRITE_DELAY); 1977 1978 /* 1979 * Power up TX and RX out from power down (PWRDNTX and PWRDNRX) 1980 * & increase TX int & ext bias 20%....(0xe85c) */ 1981 writel(0x000001E4, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_channel_control); 1982 } 1983 udelay(AFE_REGISTER_WRITE_DELAY); 1984 |
1988 if (is_a0() || is_a2()) { | 1985 if (is_a2(pdev)) { |
1989 /* Enable TX equalization (0xe824) */ 1990 writel(0x00040000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_control); 1991 udelay(AFE_REGISTER_WRITE_DELAY); 1992 } 1993 1994 /* 1995 * RDPI=0x0(RX Power On), RXOOBDETPDNC=0x0, TPD=0x0(TX Power On), 1996 * RDD=0x0(RX Detect Enabled) ....(0xe800) */ 1997 writel(0x00004100, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_xcvr_control0); 1998 udelay(AFE_REGISTER_WRITE_DELAY); 1999 2000 /* Leave DFE/FFE on */ | 1986 /* Enable TX equalization (0xe824) */ 1987 writel(0x00040000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_control); 1988 udelay(AFE_REGISTER_WRITE_DELAY); 1989 } 1990 1991 /* 1992 * RDPI=0x0(RX Power On), RXOOBDETPDNC=0x0, TPD=0x0(TX Power On), 1993 * RDD=0x0(RX Detect Enabled) ....(0xe800) */ 1994 writel(0x00004100, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_xcvr_control0); 1995 udelay(AFE_REGISTER_WRITE_DELAY); 1996 1997 /* Leave DFE/FFE on */ |
2001 if (is_a0()) 2002 writel(0x3F09983F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control0); 2003 else if (is_a2()) | 1998 if (is_a2(pdev)) |
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); 2007 udelay(AFE_REGISTER_WRITE_DELAY); 2008 /* Enable TX equalization (0xe824) */ 2009 writel(0x00040000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_control); 2010 } else { 2011 writel(0x0140DF0F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control1); 2012 udelay(AFE_REGISTER_WRITE_DELAY); 2013 --- 743 unchanged lines hidden --- | 2001 writel(0x3F11103F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control0); 2002 udelay(AFE_REGISTER_WRITE_DELAY); 2003 /* Enable TX equalization (0xe824) */ 2004 writel(0x00040000, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_tx_control); 2005 } else { 2006 writel(0x0140DF0F, &ihost->scu_registers->afe.scu_afe_xcvr[phy_id].afe_rx_ssc_control1); 2007 udelay(AFE_REGISTER_WRITE_DELAY); 2008 --- 743 unchanged lines hidden --- |