hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/pci/controller/dwc/pcie-spear13xx.c
....@@ -26,7 +26,6 @@
2626 void __iomem *app_base;
2727 struct phy *phy;
2828 struct clk *clk;
29
- bool is_gen1;
3029 };
3130
3231 struct pcie_app_reg {
....@@ -65,8 +64,6 @@
6564 /* CR6 */
6665 #define MSI_CTRL_INT (1 << 26)
6766
68
-#define EXP_CAP_ID_OFFSET 0x70
69
-
7067 #define to_spear13xx_pcie(x) dev_get_drvdata((x)->dev)
7168
7269 static int spear13xx_pcie_establish_link(struct spear13xx_pcie *spear13xx_pcie)
....@@ -75,7 +72,7 @@
7572 struct pcie_port *pp = &pci->pp;
7673 struct pcie_app_reg *app_reg = spear13xx_pcie->app_base;
7774 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);
7976
8077 if (dw_pcie_link_up(pci)) {
8178 dev_err(pci->dev, "link already up\n");
....@@ -89,36 +86,12 @@
8986 * default value in capability register is 512 bytes. So force
9087 * it to 128 here.
9188 */
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);
9390 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);
9592
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);
12295
12396 /* enable ltssm */
12497 writel(DEVICE_TYPE_RC | (1 << MISCTRL_EN_ID)
....@@ -198,10 +171,9 @@
198171 int ret;
199172
200173 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)
203175 return pp->irq;
204
- }
176
+
205177 ret = devm_request_irq(dev, pp->irq, spear13xx_pcie_irq_handler,
206178 IRQF_SHARED | IRQF_NO_THREAD,
207179 "spear1340-pcie", spear13xx_pcie);
....@@ -273,14 +245,13 @@
273245 dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
274246 pci->dbi_base = devm_pci_remap_cfg_resource(dev, dbi_base);
275247 if (IS_ERR(pci->dbi_base)) {
276
- dev_err(dev, "couldn't remap dbi base %p\n", dbi_base);
277248 ret = PTR_ERR(pci->dbi_base);
278249 goto fail_clk;
279250 }
280251 spear13xx_pcie->app_base = pci->dbi_base + 0x2000;
281252
282253 if (of_property_read_bool(np, "st,pcie-is-gen1"))
283
- spear13xx_pcie->is_gen1 = true;
254
+ pci->link_gen = 1;
284255
285256 platform_set_drvdata(pdev, spear13xx_pcie);
286257