| .. | .. |
|---|
| 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 | |
|---|