diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2016-08-01 13:25:37 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2016-08-01 13:25:37 -0400 |
commit | ea1f4e9d1daf87c08ec399669300ee5d1fb68e89 (patch) | |
tree | c4eeb0293b9933b588b4672c1fcc1d770b88ae24 | |
parent | 79dd99346166bcbf3b082f6e234db788da1db3c9 (diff) | |
parent | f814430c3ec89177f5d530484c4df95c268aedfb (diff) |
Merge branch 'pci/host-tegra' into next
* pci/host-tegra:
PCI: tegra: Program PADS_REFCLK_CFG* registers with per-SoC values
PCI: tegra: Program PADS_REFCLK_CFG* always, not just on legacy SoCs
PCI: tegra: Stop setting pcibios_min_mem
PCI: tegra: Use generic pci_remap_iospace() rather than ARM32-specific one
PCI: tegra: Use lower-case hex consistently for register definitions
Conflicts:
drivers/pci/host/pci-tegra.c
Drop stray pci_ioremap_io() per Thierry Reding <treding@nvidia.com>;
removal tested by Jon Hunter <jonathanh@nvidia.com>.
-rw-r--r-- | drivers/pci/host/pci-tegra.c | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c index 584777e0ad79..6de0757b11e4 100644 --- a/drivers/pci/host/pci-tegra.c +++ b/drivers/pci/host/pci-tegra.c | |||
@@ -185,26 +185,26 @@ | |||
185 | 185 | ||
186 | #define AFI_PEXBIAS_CTRL_0 0x168 | 186 | #define AFI_PEXBIAS_CTRL_0 0x168 |
187 | 187 | ||
188 | #define RP_VEND_XP 0x00000F00 | 188 | #define RP_VEND_XP 0x00000f00 |
189 | #define RP_VEND_XP_DL_UP (1 << 30) | 189 | #define RP_VEND_XP_DL_UP (1 << 30) |
190 | 190 | ||
191 | #define RP_PRIV_MISC 0x00000FE0 | 191 | #define RP_PRIV_MISC 0x00000fe0 |
192 | #define RP_PRIV_MISC_PRSNT_MAP_EP_PRSNT (0xE << 0) | 192 | #define RP_PRIV_MISC_PRSNT_MAP_EP_PRSNT (0xe << 0) |
193 | #define RP_PRIV_MISC_PRSNT_MAP_EP_ABSNT (0xF << 0) | 193 | #define RP_PRIV_MISC_PRSNT_MAP_EP_ABSNT (0xf << 0) |
194 | 194 | ||
195 | #define RP_LINK_CONTROL_STATUS 0x00000090 | 195 | #define RP_LINK_CONTROL_STATUS 0x00000090 |
196 | #define RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE 0x20000000 | 196 | #define RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE 0x20000000 |
197 | #define RP_LINK_CONTROL_STATUS_LINKSTAT_MASK 0x3fff0000 | 197 | #define RP_LINK_CONTROL_STATUS_LINKSTAT_MASK 0x3fff0000 |
198 | 198 | ||
199 | #define PADS_CTL_SEL 0x0000009C | 199 | #define PADS_CTL_SEL 0x0000009c |
200 | 200 | ||
201 | #define PADS_CTL 0x000000A0 | 201 | #define PADS_CTL 0x000000a0 |
202 | #define PADS_CTL_IDDQ_1L (1 << 0) | 202 | #define PADS_CTL_IDDQ_1L (1 << 0) |
203 | #define PADS_CTL_TX_DATA_EN_1L (1 << 6) | 203 | #define PADS_CTL_TX_DATA_EN_1L (1 << 6) |
204 | #define PADS_CTL_RX_DATA_EN_1L (1 << 10) | 204 | #define PADS_CTL_RX_DATA_EN_1L (1 << 10) |
205 | 205 | ||
206 | #define PADS_PLL_CTL_TEGRA20 0x000000B8 | 206 | #define PADS_PLL_CTL_TEGRA20 0x000000b8 |
207 | #define PADS_PLL_CTL_TEGRA30 0x000000B4 | 207 | #define PADS_PLL_CTL_TEGRA30 0x000000b4 |
208 | #define PADS_PLL_CTL_RST_B4SM (1 << 1) | 208 | #define PADS_PLL_CTL_RST_B4SM (1 << 1) |
209 | #define PADS_PLL_CTL_LOCKDET (1 << 8) | 209 | #define PADS_PLL_CTL_LOCKDET (1 << 8) |
210 | #define PADS_PLL_CTL_REFCLK_MASK (0x3 << 16) | 210 | #define PADS_PLL_CTL_REFCLK_MASK (0x3 << 16) |
@@ -216,9 +216,9 @@ | |||
216 | #define PADS_PLL_CTL_TXCLKREF_DIV5 (1 << 20) | 216 | #define PADS_PLL_CTL_TXCLKREF_DIV5 (1 << 20) |
217 | #define PADS_PLL_CTL_TXCLKREF_BUF_EN (1 << 22) | 217 | #define PADS_PLL_CTL_TXCLKREF_BUF_EN (1 << 22) |
218 | 218 | ||
219 | #define PADS_REFCLK_CFG0 0x000000C8 | 219 | #define PADS_REFCLK_CFG0 0x000000c8 |
220 | #define PADS_REFCLK_CFG1 0x000000CC | 220 | #define PADS_REFCLK_CFG1 0x000000cc |
221 | #define PADS_REFCLK_BIAS 0x000000D0 | 221 | #define PADS_REFCLK_BIAS 0x000000d0 |
222 | 222 | ||
223 | /* | 223 | /* |
224 | * Fields in PADS_REFCLK_CFG*. Those registers form an array of 16-bit | 224 | * Fields in PADS_REFCLK_CFG*. Those registers form an array of 16-bit |
@@ -230,15 +230,6 @@ | |||
230 | #define PADS_REFCLK_CFG_PREDI_SHIFT 8 /* 11:8 */ | 230 | #define PADS_REFCLK_CFG_PREDI_SHIFT 8 /* 11:8 */ |
231 | #define PADS_REFCLK_CFG_DRVI_SHIFT 12 /* 15:12 */ | 231 | #define PADS_REFCLK_CFG_DRVI_SHIFT 12 /* 15:12 */ |
232 | 232 | ||
233 | /* Default value provided by HW engineering is 0xfa5c */ | ||
234 | #define PADS_REFCLK_CFG_VALUE \ | ||
235 | ( \ | ||
236 | (0x17 << PADS_REFCLK_CFG_TERM_SHIFT) | \ | ||
237 | (0 << PADS_REFCLK_CFG_E_TERM_SHIFT) | \ | ||
238 | (0xa << PADS_REFCLK_CFG_PREDI_SHIFT) | \ | ||
239 | (0xf << PADS_REFCLK_CFG_DRVI_SHIFT) \ | ||
240 | ) | ||
241 | |||
242 | struct tegra_msi { | 233 | struct tegra_msi { |
243 | struct msi_controller chip; | 234 | struct msi_controller chip; |
244 | DECLARE_BITMAP(used, INT_PCI_MSI_NR); | 235 | DECLARE_BITMAP(used, INT_PCI_MSI_NR); |
@@ -254,6 +245,8 @@ struct tegra_pcie_soc_data { | |||
254 | unsigned int msi_base_shift; | 245 | unsigned int msi_base_shift; |
255 | u32 pads_pll_ctl; | 246 | u32 pads_pll_ctl; |
256 | u32 tx_ref_sel; | 247 | u32 tx_ref_sel; |
248 | u32 pads_refclk_cfg0; | ||
249 | u32 pads_refclk_cfg1; | ||
257 | bool has_pex_clkreq_en; | 250 | bool has_pex_clkreq_en; |
258 | bool has_pex_bias_ctrl; | 251 | bool has_pex_bias_ctrl; |
259 | bool has_intr_prsnt_sense; | 252 | bool has_intr_prsnt_sense; |
@@ -628,8 +621,6 @@ static int tegra_pcie_setup(int nr, struct pci_sys_data *sys) | |||
628 | if (err < 0) | 621 | if (err < 0) |
629 | return err; | 622 | return err; |
630 | 623 | ||
631 | pci_ioremap_io(pcie->pio.start, pcie->io.start); | ||
632 | |||
633 | pci_add_resource_offset(&sys->resources, &pcie->pio, sys->io_offset); | 624 | pci_add_resource_offset(&sys->resources, &pcie->pio, sys->io_offset); |
634 | pci_add_resource_offset(&sys->resources, &pcie->mem, sys->mem_offset); | 625 | pci_add_resource_offset(&sys->resources, &pcie->mem, sys->mem_offset); |
635 | pci_add_resource_offset(&sys->resources, &pcie->prefetch, | 626 | pci_add_resource_offset(&sys->resources, &pcie->prefetch, |
@@ -640,6 +631,7 @@ static int tegra_pcie_setup(int nr, struct pci_sys_data *sys) | |||
640 | if (err < 0) | 631 | if (err < 0) |
641 | return err; | 632 | return err; |
642 | 633 | ||
634 | pci_remap_iospace(&pcie->pio, pcie->io.start); | ||
643 | return 1; | 635 | return 1; |
644 | } | 636 | } |
645 | 637 | ||
@@ -831,12 +823,6 @@ static int tegra_pcie_phy_enable(struct tegra_pcie *pcie) | |||
831 | value |= PADS_PLL_CTL_RST_B4SM; | 823 | value |= PADS_PLL_CTL_RST_B4SM; |
832 | pads_writel(pcie, value, soc->pads_pll_ctl); | 824 | pads_writel(pcie, value, soc->pads_pll_ctl); |
833 | 825 | ||
834 | /* Configure the reference clock driver */ | ||
835 | value = PADS_REFCLK_CFG_VALUE | (PADS_REFCLK_CFG_VALUE << 16); | ||
836 | pads_writel(pcie, value, PADS_REFCLK_CFG0); | ||
837 | if (soc->num_ports > 2) | ||
838 | pads_writel(pcie, PADS_REFCLK_CFG_VALUE, PADS_REFCLK_CFG1); | ||
839 | |||
840 | /* wait for the PLL to lock */ | 826 | /* wait for the PLL to lock */ |
841 | err = tegra_pcie_pll_wait(pcie, 500); | 827 | err = tegra_pcie_pll_wait(pcie, 500); |
842 | if (err < 0) { | 828 | if (err < 0) { |
@@ -920,6 +906,7 @@ static int tegra_pcie_port_phy_power_off(struct tegra_pcie_port *port) | |||
920 | 906 | ||
921 | static int tegra_pcie_phy_power_on(struct tegra_pcie *pcie) | 907 | static int tegra_pcie_phy_power_on(struct tegra_pcie *pcie) |
922 | { | 908 | { |
909 | const struct tegra_pcie_soc_data *soc = pcie->soc_data; | ||
923 | struct tegra_pcie_port *port; | 910 | struct tegra_pcie_port *port; |
924 | int err; | 911 | int err; |
925 | 912 | ||
@@ -945,6 +932,12 @@ static int tegra_pcie_phy_power_on(struct tegra_pcie *pcie) | |||
945 | } | 932 | } |
946 | } | 933 | } |
947 | 934 | ||
935 | /* Configure the reference clock driver */ | ||
936 | pads_writel(pcie, soc->pads_refclk_cfg0, PADS_REFCLK_CFG0); | ||
937 | |||
938 | if (soc->num_ports > 2) | ||
939 | pads_writel(pcie, soc->pads_refclk_cfg1, PADS_REFCLK_CFG1); | ||
940 | |||
948 | return 0; | 941 | return 0; |
949 | } | 942 | } |
950 | 943 | ||
@@ -2055,6 +2048,7 @@ static const struct tegra_pcie_soc_data tegra20_pcie_data = { | |||
2055 | .msi_base_shift = 0, | 2048 | .msi_base_shift = 0, |
2056 | .pads_pll_ctl = PADS_PLL_CTL_TEGRA20, | 2049 | .pads_pll_ctl = PADS_PLL_CTL_TEGRA20, |
2057 | .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_DIV10, | 2050 | .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_DIV10, |
2051 | .pads_refclk_cfg0 = 0xfa5cfa5c, | ||
2058 | .has_pex_clkreq_en = false, | 2052 | .has_pex_clkreq_en = false, |
2059 | .has_pex_bias_ctrl = false, | 2053 | .has_pex_bias_ctrl = false, |
2060 | .has_intr_prsnt_sense = false, | 2054 | .has_intr_prsnt_sense = false, |
@@ -2067,6 +2061,8 @@ static const struct tegra_pcie_soc_data tegra30_pcie_data = { | |||
2067 | .msi_base_shift = 8, | 2061 | .msi_base_shift = 8, |
2068 | .pads_pll_ctl = PADS_PLL_CTL_TEGRA30, | 2062 | .pads_pll_ctl = PADS_PLL_CTL_TEGRA30, |
2069 | .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN, | 2063 | .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN, |
2064 | .pads_refclk_cfg0 = 0xfa5cfa5c, | ||
2065 | .pads_refclk_cfg1 = 0xfa5cfa5c, | ||
2070 | .has_pex_clkreq_en = true, | 2066 | .has_pex_clkreq_en = true, |
2071 | .has_pex_bias_ctrl = true, | 2067 | .has_pex_bias_ctrl = true, |
2072 | .has_intr_prsnt_sense = true, | 2068 | .has_intr_prsnt_sense = true, |
@@ -2079,6 +2075,7 @@ static const struct tegra_pcie_soc_data tegra124_pcie_data = { | |||
2079 | .msi_base_shift = 8, | 2075 | .msi_base_shift = 8, |
2080 | .pads_pll_ctl = PADS_PLL_CTL_TEGRA30, | 2076 | .pads_pll_ctl = PADS_PLL_CTL_TEGRA30, |
2081 | .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN, | 2077 | .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN, |
2078 | .pads_refclk_cfg0 = 0x44ac44ac, | ||
2082 | .has_pex_clkreq_en = true, | 2079 | .has_pex_clkreq_en = true, |
2083 | .has_pex_bias_ctrl = true, | 2080 | .has_pex_bias_ctrl = true, |
2084 | .has_intr_prsnt_sense = true, | 2081 | .has_intr_prsnt_sense = true, |
@@ -2225,8 +2222,6 @@ static int tegra_pcie_probe(struct platform_device *pdev) | |||
2225 | if (err < 0) | 2222 | if (err < 0) |
2226 | return err; | 2223 | return err; |
2227 | 2224 | ||
2228 | pcibios_min_mem = 0; | ||
2229 | |||
2230 | err = tegra_pcie_get_resources(pcie); | 2225 | err = tegra_pcie_get_resources(pcie); |
2231 | if (err < 0) { | 2226 | if (err < 0) { |
2232 | dev_err(&pdev->dev, "failed to request resources: %d\n", err); | 2227 | dev_err(&pdev->dev, "failed to request resources: %d\n", err); |