Skip to content

Commit e27fd02

Browse files
committed
Merge tag 'pci-v4.11-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI fixes from Bjorn Helgaas: - fix NULL pointer dereferences in many DesignWare-based drivers due to refactoring error - fix Altera config write breakage due to my refactoring error * tag 'pci-v4.11-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: PCI: altera: Fix TLP_CFG_DW0 for TLP write PCI: dwc: Fix crashes seen due to missing assignments
2 parents f47e2db + 2a7275a commit e27fd02

File tree

11 files changed

+25
-3
lines changed

11 files changed

+25
-3
lines changed

drivers/pci/dwc/pci-exynos.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,7 @@ static int __init exynos_pcie_probe(struct platform_device *pdev)
668668
pci->dev = dev;
669669
pci->ops = &dw_pcie_ops;
670670

671+
ep->pci = pci;
671672
ep->ops = (const struct exynos_pcie_ops *)
672673
of_device_get_match_data(dev);
673674

drivers/pci/dwc/pci-imx6.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
605605
pci->dev = dev;
606606
pci->ops = &dw_pcie_ops;
607607

608+
imx6_pcie->pci = pci;
608609
imx6_pcie->variant =
609610
(enum imx6_pcie_variants)of_device_get_match_data(dev);
610611

drivers/pci/dwc/pci-keystone.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,8 @@ static int __init ks_pcie_probe(struct platform_device *pdev)
401401
pci->dev = dev;
402402
pci->ops = &dw_pcie_ops;
403403

404+
ks_pcie->pci = pci;
405+
404406
/* initialize SerDes Phy if present */
405407
phy = devm_phy_get(dev, "pcie-phy");
406408
if (PTR_ERR_OR_ZERO(phy) == -EPROBE_DEFER)

drivers/pci/dwc/pci-layerscape.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,8 @@ static int __init ls_pcie_probe(struct platform_device *pdev)
280280
pci->dev = dev;
281281
pci->ops = pcie->drvdata->dw_pcie_ops;
282282

283+
pcie->pci = pci;
284+
283285
dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs");
284286
pci->dbi_base = devm_ioremap_resource(dev, dbi_base);
285287
if (IS_ERR(pci->dbi_base))

drivers/pci/dwc/pcie-armada8k.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,8 @@ static int armada8k_pcie_probe(struct platform_device *pdev)
220220
pci->dev = dev;
221221
pci->ops = &dw_pcie_ops;
222222

223+
pcie->pci = pci;
224+
223225
pcie->clk = devm_clk_get(dev, NULL);
224226
if (IS_ERR(pcie->clk))
225227
return PTR_ERR(pcie->clk);

drivers/pci/dwc/pcie-artpec6.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ static int artpec6_pcie_probe(struct platform_device *pdev)
253253

254254
pci->dev = dev;
255255

256+
artpec6_pcie->pci = pci;
257+
256258
dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
257259
pci->dbi_base = devm_ioremap_resource(dev, dbi_base);
258260
if (IS_ERR(pci->dbi_base))

drivers/pci/dwc/pcie-designware-plat.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ static int dw_plat_pcie_probe(struct platform_device *pdev)
104104

105105
pci->dev = dev;
106106

107+
dw_plat_pcie->pci = pci;
108+
107109
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
108110
pci->dbi_base = devm_ioremap_resource(dev, res);
109111
if (IS_ERR(pci->dbi_base))

drivers/pci/dwc/pcie-hisi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,8 @@ static int hisi_pcie_probe(struct platform_device *pdev)
284284

285285
driver = dev->driver;
286286

287+
hisi_pcie->pci = pci;
288+
287289
hisi_pcie->soc_ops = of_device_get_match_data(dev);
288290

289291
hisi_pcie->subctrl =

drivers/pci/dwc/pcie-qcom.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,8 @@ static int qcom_pcie_probe(struct platform_device *pdev)
686686
pci->ops = &dw_pcie_ops;
687687
pp = &pci->pp;
688688

689+
pcie->pci = pci;
690+
689691
pcie->ops = (struct qcom_pcie_ops *)of_device_get_match_data(dev);
690692

691693
pcie->reset = devm_gpiod_get_optional(dev, "perst", GPIOD_OUT_LOW);

drivers/pci/dwc/pcie-spear13xx.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,8 @@ static int spear13xx_pcie_probe(struct platform_device *pdev)
247247
pci->dev = dev;
248248
pci->ops = &dw_pcie_ops;
249249

250+
spear13xx_pcie->pci = pci;
251+
250252
spear13xx_pcie->phy = devm_phy_get(dev, "pcie-phy");
251253
if (IS_ERR(spear13xx_pcie->phy)) {
252254
ret = PTR_ERR(spear13xx_pcie->phy);

drivers/pci/host/pcie-altera.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,14 @@
5757
#define TLP_WRITE_TAG 0x10
5858
#define RP_DEVFN 0
5959
#define TLP_REQ_ID(bus, devfn) (((bus) << 8) | (devfn))
60-
#define TLP_CFG_DW0(pcie, bus) \
60+
#define TLP_CFGRD_DW0(pcie, bus) \
6161
((((bus == pcie->root_bus_nr) ? TLP_FMTTYPE_CFGRD0 \
6262
: TLP_FMTTYPE_CFGRD1) << 24) | \
6363
TLP_PAYLOAD_SIZE)
64+
#define TLP_CFGWR_DW0(pcie, bus) \
65+
((((bus == pcie->root_bus_nr) ? TLP_FMTTYPE_CFGWR0 \
66+
: TLP_FMTTYPE_CFGWR1) << 24) | \
67+
TLP_PAYLOAD_SIZE)
6468
#define TLP_CFG_DW1(pcie, tag, be) \
6569
(((TLP_REQ_ID(pcie->root_bus_nr, RP_DEVFN)) << 16) | (tag << 8) | (be))
6670
#define TLP_CFG_DW2(bus, devfn, offset) \
@@ -222,7 +226,7 @@ static int tlp_cfg_dword_read(struct altera_pcie *pcie, u8 bus, u32 devfn,
222226
{
223227
u32 headers[TLP_HDR_SIZE];
224228

225-
headers[0] = TLP_CFG_DW0(pcie, bus);
229+
headers[0] = TLP_CFGRD_DW0(pcie, bus);
226230
headers[1] = TLP_CFG_DW1(pcie, TLP_READ_TAG, byte_en);
227231
headers[2] = TLP_CFG_DW2(bus, devfn, where);
228232

@@ -237,7 +241,7 @@ static int tlp_cfg_dword_write(struct altera_pcie *pcie, u8 bus, u32 devfn,
237241
u32 headers[TLP_HDR_SIZE];
238242
int ret;
239243

240-
headers[0] = TLP_CFG_DW0(pcie, bus);
244+
headers[0] = TLP_CFGWR_DW0(pcie, bus);
241245
headers[1] = TLP_CFG_DW1(pcie, TLP_WRITE_TAG, byte_en);
242246
headers[2] = TLP_CFG_DW2(bus, devfn, where);
243247

0 commit comments

Comments
 (0)