.. | .. |
---|
26 | 26 | void __iomem *app_base; |
---|
27 | 27 | struct phy *phy; |
---|
28 | 28 | struct clk *clk; |
---|
29 | | - bool is_gen1; |
---|
30 | 29 | }; |
---|
31 | 30 | |
---|
32 | 31 | struct pcie_app_reg { |
---|
.. | .. |
---|
65 | 64 | /* CR6 */ |
---|
66 | 65 | #define MSI_CTRL_INT (1 << 26) |
---|
67 | 66 | |
---|
68 | | -#define EXP_CAP_ID_OFFSET 0x70 |
---|
69 | | - |
---|
70 | 67 | #define to_spear13xx_pcie(x) dev_get_drvdata((x)->dev) |
---|
71 | 68 | |
---|
72 | 69 | static int spear13xx_pcie_establish_link(struct spear13xx_pcie *spear13xx_pcie) |
---|
.. | .. |
---|
75 | 72 | struct pcie_port *pp = &pci->pp; |
---|
76 | 73 | struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; |
---|
77 | 74 | u32 val; |
---|
78 | | - u32 exp_cap_off = EXP_CAP_ID_OFFSET; |
---|
| 75 | + u32 exp_cap_off = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); |
---|
79 | 76 | |
---|
80 | 77 | if (dw_pcie_link_up(pci)) { |
---|
81 | 78 | dev_err(pci->dev, "link already up\n"); |
---|
.. | .. |
---|
89 | 86 | * default value in capability register is 512 bytes. So force |
---|
90 | 87 | * it to 128 here. |
---|
91 | 88 | */ |
---|
92 | | - dw_pcie_read(pci->dbi_base + exp_cap_off + PCI_EXP_DEVCTL, 2, &val); |
---|
| 89 | + val = dw_pcie_readw_dbi(pci, exp_cap_off + PCI_EXP_DEVCTL); |
---|
93 | 90 | val &= ~PCI_EXP_DEVCTL_READRQ; |
---|
94 | | - dw_pcie_write(pci->dbi_base + exp_cap_off + PCI_EXP_DEVCTL, 2, val); |
---|
| 91 | + dw_pcie_writew_dbi(pci, exp_cap_off + PCI_EXP_DEVCTL, val); |
---|
95 | 92 | |
---|
96 | | - dw_pcie_write(pci->dbi_base + PCI_VENDOR_ID, 2, 0x104A); |
---|
97 | | - dw_pcie_write(pci->dbi_base + PCI_DEVICE_ID, 2, 0xCD80); |
---|
98 | | - |
---|
99 | | - /* |
---|
100 | | - * if is_gen1 is set then handle it, so that some buggy card |
---|
101 | | - * also works |
---|
102 | | - */ |
---|
103 | | - if (spear13xx_pcie->is_gen1) { |
---|
104 | | - dw_pcie_read(pci->dbi_base + exp_cap_off + PCI_EXP_LNKCAP, |
---|
105 | | - 4, &val); |
---|
106 | | - if ((val & PCI_EXP_LNKCAP_SLS) != PCI_EXP_LNKCAP_SLS_2_5GB) { |
---|
107 | | - val &= ~((u32)PCI_EXP_LNKCAP_SLS); |
---|
108 | | - val |= PCI_EXP_LNKCAP_SLS_2_5GB; |
---|
109 | | - dw_pcie_write(pci->dbi_base + exp_cap_off + |
---|
110 | | - PCI_EXP_LNKCAP, 4, val); |
---|
111 | | - } |
---|
112 | | - |
---|
113 | | - dw_pcie_read(pci->dbi_base + exp_cap_off + PCI_EXP_LNKCTL2, |
---|
114 | | - 2, &val); |
---|
115 | | - if ((val & PCI_EXP_LNKCAP_SLS) != PCI_EXP_LNKCAP_SLS_2_5GB) { |
---|
116 | | - val &= ~((u32)PCI_EXP_LNKCAP_SLS); |
---|
117 | | - val |= PCI_EXP_LNKCAP_SLS_2_5GB; |
---|
118 | | - dw_pcie_write(pci->dbi_base + exp_cap_off + |
---|
119 | | - PCI_EXP_LNKCTL2, 2, val); |
---|
120 | | - } |
---|
121 | | - } |
---|
| 93 | + dw_pcie_writew_dbi(pci, PCI_VENDOR_ID, 0x104A); |
---|
| 94 | + dw_pcie_writew_dbi(pci, PCI_DEVICE_ID, 0xCD80); |
---|
122 | 95 | |
---|
123 | 96 | /* enable ltssm */ |
---|
124 | 97 | writel(DEVICE_TYPE_RC | (1 << MISCTRL_EN_ID) |
---|
.. | .. |
---|
198 | 171 | int ret; |
---|
199 | 172 | |
---|
200 | 173 | pp->irq = platform_get_irq(pdev, 0); |
---|
201 | | - if (pp->irq < 0) { |
---|
202 | | - dev_err(dev, "failed to get irq\n"); |
---|
| 174 | + if (pp->irq < 0) |
---|
203 | 175 | return pp->irq; |
---|
204 | | - } |
---|
| 176 | + |
---|
205 | 177 | ret = devm_request_irq(dev, pp->irq, spear13xx_pcie_irq_handler, |
---|
206 | 178 | IRQF_SHARED | IRQF_NO_THREAD, |
---|
207 | 179 | "spear1340-pcie", spear13xx_pcie); |
---|
.. | .. |
---|
273 | 245 | dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi"); |
---|
274 | 246 | pci->dbi_base = devm_pci_remap_cfg_resource(dev, dbi_base); |
---|
275 | 247 | if (IS_ERR(pci->dbi_base)) { |
---|
276 | | - dev_err(dev, "couldn't remap dbi base %p\n", dbi_base); |
---|
277 | 248 | ret = PTR_ERR(pci->dbi_base); |
---|
278 | 249 | goto fail_clk; |
---|
279 | 250 | } |
---|
280 | 251 | spear13xx_pcie->app_base = pci->dbi_base + 0x2000; |
---|
281 | 252 | |
---|
282 | 253 | if (of_property_read_bool(np, "st,pcie-is-gen1")) |
---|
283 | | - spear13xx_pcie->is_gen1 = true; |
---|
| 254 | + pci->link_gen = 1; |
---|
284 | 255 | |
---|
285 | 256 | platform_set_drvdata(pdev, spear13xx_pcie); |
---|
286 | 257 | |
---|