diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-03 19:44:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-03 19:44:21 -0500 |
commit | e27fd02d92817845471a196b3020c5694cbe5ff3 (patch) | |
tree | 785051a432a6ee7dcaed6a8c793de8d8318d1377 /drivers | |
parent | f47e2db43d6865358f35a7e2c7aa035321a6537a (diff) | |
parent | 2a7275a3d867b228216886aae35e1f64291180b1 (diff) |
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
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/pci/dwc/pci-exynos.c | 1 | ||||
-rw-r--r-- | drivers/pci/dwc/pci-imx6.c | 1 | ||||
-rw-r--r-- | drivers/pci/dwc/pci-keystone.c | 2 | ||||
-rw-r--r-- | drivers/pci/dwc/pci-layerscape.c | 2 | ||||
-rw-r--r-- | drivers/pci/dwc/pcie-armada8k.c | 2 | ||||
-rw-r--r-- | drivers/pci/dwc/pcie-artpec6.c | 2 | ||||
-rw-r--r-- | drivers/pci/dwc/pcie-designware-plat.c | 2 | ||||
-rw-r--r-- | drivers/pci/dwc/pcie-hisi.c | 2 | ||||
-rw-r--r-- | drivers/pci/dwc/pcie-qcom.c | 2 | ||||
-rw-r--r-- | drivers/pci/dwc/pcie-spear13xx.c | 2 | ||||
-rw-r--r-- | drivers/pci/host/pcie-altera.c | 10 |
11 files changed, 25 insertions, 3 deletions
diff --git a/drivers/pci/dwc/pci-exynos.c b/drivers/pci/dwc/pci-exynos.c index 001c91a945aa..993b650ef275 100644 --- a/drivers/pci/dwc/pci-exynos.c +++ b/drivers/pci/dwc/pci-exynos.c | |||
@@ -668,6 +668,7 @@ static int __init exynos_pcie_probe(struct platform_device *pdev) | |||
668 | pci->dev = dev; | 668 | pci->dev = dev; |
669 | pci->ops = &dw_pcie_ops; | 669 | pci->ops = &dw_pcie_ops; |
670 | 670 | ||
671 | ep->pci = pci; | ||
671 | ep->ops = (const struct exynos_pcie_ops *) | 672 | ep->ops = (const struct exynos_pcie_ops *) |
672 | of_device_get_match_data(dev); | 673 | of_device_get_match_data(dev); |
673 | 674 | ||
diff --git a/drivers/pci/dwc/pci-imx6.c b/drivers/pci/dwc/pci-imx6.c index 3ab6761db9e8..801e46cd266d 100644 --- a/drivers/pci/dwc/pci-imx6.c +++ b/drivers/pci/dwc/pci-imx6.c | |||
@@ -605,6 +605,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) | |||
605 | pci->dev = dev; | 605 | pci->dev = dev; |
606 | pci->ops = &dw_pcie_ops; | 606 | pci->ops = &dw_pcie_ops; |
607 | 607 | ||
608 | imx6_pcie->pci = pci; | ||
608 | imx6_pcie->variant = | 609 | imx6_pcie->variant = |
609 | (enum imx6_pcie_variants)of_device_get_match_data(dev); | 610 | (enum imx6_pcie_variants)of_device_get_match_data(dev); |
610 | 611 | ||
diff --git a/drivers/pci/dwc/pci-keystone.c b/drivers/pci/dwc/pci-keystone.c index 8dc66409182d..fcc9723bad6e 100644 --- a/drivers/pci/dwc/pci-keystone.c +++ b/drivers/pci/dwc/pci-keystone.c | |||
@@ -401,6 +401,8 @@ static int __init ks_pcie_probe(struct platform_device *pdev) | |||
401 | pci->dev = dev; | 401 | pci->dev = dev; |
402 | pci->ops = &dw_pcie_ops; | 402 | pci->ops = &dw_pcie_ops; |
403 | 403 | ||
404 | ks_pcie->pci = pci; | ||
405 | |||
404 | /* initialize SerDes Phy if present */ | 406 | /* initialize SerDes Phy if present */ |
405 | phy = devm_phy_get(dev, "pcie-phy"); | 407 | phy = devm_phy_get(dev, "pcie-phy"); |
406 | if (PTR_ERR_OR_ZERO(phy) == -EPROBE_DEFER) | 408 | if (PTR_ERR_OR_ZERO(phy) == -EPROBE_DEFER) |
diff --git a/drivers/pci/dwc/pci-layerscape.c b/drivers/pci/dwc/pci-layerscape.c index 175c09e3a932..c32e392a0ae6 100644 --- a/drivers/pci/dwc/pci-layerscape.c +++ b/drivers/pci/dwc/pci-layerscape.c | |||
@@ -280,6 +280,8 @@ static int __init ls_pcie_probe(struct platform_device *pdev) | |||
280 | pci->dev = dev; | 280 | pci->dev = dev; |
281 | pci->ops = pcie->drvdata->dw_pcie_ops; | 281 | pci->ops = pcie->drvdata->dw_pcie_ops; |
282 | 282 | ||
283 | pcie->pci = pci; | ||
284 | |||
283 | dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs"); | 285 | dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs"); |
284 | pci->dbi_base = devm_ioremap_resource(dev, dbi_base); | 286 | pci->dbi_base = devm_ioremap_resource(dev, dbi_base); |
285 | if (IS_ERR(pci->dbi_base)) | 287 | if (IS_ERR(pci->dbi_base)) |
diff --git a/drivers/pci/dwc/pcie-armada8k.c b/drivers/pci/dwc/pcie-armada8k.c index 66bac6fbfa9f..f110e3b24a26 100644 --- a/drivers/pci/dwc/pcie-armada8k.c +++ b/drivers/pci/dwc/pcie-armada8k.c | |||
@@ -220,6 +220,8 @@ static int armada8k_pcie_probe(struct platform_device *pdev) | |||
220 | pci->dev = dev; | 220 | pci->dev = dev; |
221 | pci->ops = &dw_pcie_ops; | 221 | pci->ops = &dw_pcie_ops; |
222 | 222 | ||
223 | pcie->pci = pci; | ||
224 | |||
223 | pcie->clk = devm_clk_get(dev, NULL); | 225 | pcie->clk = devm_clk_get(dev, NULL); |
224 | if (IS_ERR(pcie->clk)) | 226 | if (IS_ERR(pcie->clk)) |
225 | return PTR_ERR(pcie->clk); | 227 | return PTR_ERR(pcie->clk); |
diff --git a/drivers/pci/dwc/pcie-artpec6.c b/drivers/pci/dwc/pcie-artpec6.c index 59ecc9e66436..fcd3ef845883 100644 --- a/drivers/pci/dwc/pcie-artpec6.c +++ b/drivers/pci/dwc/pcie-artpec6.c | |||
@@ -253,6 +253,8 @@ static int artpec6_pcie_probe(struct platform_device *pdev) | |||
253 | 253 | ||
254 | pci->dev = dev; | 254 | pci->dev = dev; |
255 | 255 | ||
256 | artpec6_pcie->pci = pci; | ||
257 | |||
256 | dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi"); | 258 | dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi"); |
257 | pci->dbi_base = devm_ioremap_resource(dev, dbi_base); | 259 | pci->dbi_base = devm_ioremap_resource(dev, dbi_base); |
258 | if (IS_ERR(pci->dbi_base)) | 260 | if (IS_ERR(pci->dbi_base)) |
diff --git a/drivers/pci/dwc/pcie-designware-plat.c b/drivers/pci/dwc/pcie-designware-plat.c index 65250f63515c..b6c832ba39dd 100644 --- a/drivers/pci/dwc/pcie-designware-plat.c +++ b/drivers/pci/dwc/pcie-designware-plat.c | |||
@@ -104,6 +104,8 @@ static int dw_plat_pcie_probe(struct platform_device *pdev) | |||
104 | 104 | ||
105 | pci->dev = dev; | 105 | pci->dev = dev; |
106 | 106 | ||
107 | dw_plat_pcie->pci = pci; | ||
108 | |||
107 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 109 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
108 | pci->dbi_base = devm_ioremap_resource(dev, res); | 110 | pci->dbi_base = devm_ioremap_resource(dev, res); |
109 | if (IS_ERR(pci->dbi_base)) | 111 | if (IS_ERR(pci->dbi_base)) |
diff --git a/drivers/pci/dwc/pcie-hisi.c b/drivers/pci/dwc/pcie-hisi.c index e3e4fedd9f68..fd66a3199db7 100644 --- a/drivers/pci/dwc/pcie-hisi.c +++ b/drivers/pci/dwc/pcie-hisi.c | |||
@@ -284,6 +284,8 @@ static int hisi_pcie_probe(struct platform_device *pdev) | |||
284 | 284 | ||
285 | driver = dev->driver; | 285 | driver = dev->driver; |
286 | 286 | ||
287 | hisi_pcie->pci = pci; | ||
288 | |||
287 | hisi_pcie->soc_ops = of_device_get_match_data(dev); | 289 | hisi_pcie->soc_ops = of_device_get_match_data(dev); |
288 | 290 | ||
289 | hisi_pcie->subctrl = | 291 | hisi_pcie->subctrl = |
diff --git a/drivers/pci/dwc/pcie-qcom.c b/drivers/pci/dwc/pcie-qcom.c index e36abe0d9d6f..67eb7f5926dd 100644 --- a/drivers/pci/dwc/pcie-qcom.c +++ b/drivers/pci/dwc/pcie-qcom.c | |||
@@ -686,6 +686,8 @@ static int qcom_pcie_probe(struct platform_device *pdev) | |||
686 | pci->ops = &dw_pcie_ops; | 686 | pci->ops = &dw_pcie_ops; |
687 | pp = &pci->pp; | 687 | pp = &pci->pp; |
688 | 688 | ||
689 | pcie->pci = pci; | ||
690 | |||
689 | pcie->ops = (struct qcom_pcie_ops *)of_device_get_match_data(dev); | 691 | pcie->ops = (struct qcom_pcie_ops *)of_device_get_match_data(dev); |
690 | 692 | ||
691 | pcie->reset = devm_gpiod_get_optional(dev, "perst", GPIOD_OUT_LOW); | 693 | pcie->reset = devm_gpiod_get_optional(dev, "perst", GPIOD_OUT_LOW); |
diff --git a/drivers/pci/dwc/pcie-spear13xx.c b/drivers/pci/dwc/pcie-spear13xx.c index 348f9c5e0433..eaa4ea8e2ea4 100644 --- a/drivers/pci/dwc/pcie-spear13xx.c +++ b/drivers/pci/dwc/pcie-spear13xx.c | |||
@@ -247,6 +247,8 @@ static int spear13xx_pcie_probe(struct platform_device *pdev) | |||
247 | pci->dev = dev; | 247 | pci->dev = dev; |
248 | pci->ops = &dw_pcie_ops; | 248 | pci->ops = &dw_pcie_ops; |
249 | 249 | ||
250 | spear13xx_pcie->pci = pci; | ||
251 | |||
250 | spear13xx_pcie->phy = devm_phy_get(dev, "pcie-phy"); | 252 | spear13xx_pcie->phy = devm_phy_get(dev, "pcie-phy"); |
251 | if (IS_ERR(spear13xx_pcie->phy)) { | 253 | if (IS_ERR(spear13xx_pcie->phy)) { |
252 | ret = PTR_ERR(spear13xx_pcie->phy); | 254 | ret = PTR_ERR(spear13xx_pcie->phy); |
diff --git a/drivers/pci/host/pcie-altera.c b/drivers/pci/host/pcie-altera.c index 5043b5f00ed8..75ec5cea26f6 100644 --- a/drivers/pci/host/pcie-altera.c +++ b/drivers/pci/host/pcie-altera.c | |||
@@ -57,10 +57,14 @@ | |||
57 | #define TLP_WRITE_TAG 0x10 | 57 | #define TLP_WRITE_TAG 0x10 |
58 | #define RP_DEVFN 0 | 58 | #define RP_DEVFN 0 |
59 | #define TLP_REQ_ID(bus, devfn) (((bus) << 8) | (devfn)) | 59 | #define TLP_REQ_ID(bus, devfn) (((bus) << 8) | (devfn)) |
60 | #define TLP_CFG_DW0(pcie, bus) \ | 60 | #define TLP_CFGRD_DW0(pcie, bus) \ |
61 | ((((bus == pcie->root_bus_nr) ? TLP_FMTTYPE_CFGRD0 \ | 61 | ((((bus == pcie->root_bus_nr) ? TLP_FMTTYPE_CFGRD0 \ |
62 | : TLP_FMTTYPE_CFGRD1) << 24) | \ | 62 | : TLP_FMTTYPE_CFGRD1) << 24) | \ |
63 | TLP_PAYLOAD_SIZE) | 63 | 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) | ||
64 | #define TLP_CFG_DW1(pcie, tag, be) \ | 68 | #define TLP_CFG_DW1(pcie, tag, be) \ |
65 | (((TLP_REQ_ID(pcie->root_bus_nr, RP_DEVFN)) << 16) | (tag << 8) | (be)) | 69 | (((TLP_REQ_ID(pcie->root_bus_nr, RP_DEVFN)) << 16) | (tag << 8) | (be)) |
66 | #define TLP_CFG_DW2(bus, devfn, offset) \ | 70 | #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, | |||
222 | { | 226 | { |
223 | u32 headers[TLP_HDR_SIZE]; | 227 | u32 headers[TLP_HDR_SIZE]; |
224 | 228 | ||
225 | headers[0] = TLP_CFG_DW0(pcie, bus); | 229 | headers[0] = TLP_CFGRD_DW0(pcie, bus); |
226 | headers[1] = TLP_CFG_DW1(pcie, TLP_READ_TAG, byte_en); | 230 | headers[1] = TLP_CFG_DW1(pcie, TLP_READ_TAG, byte_en); |
227 | headers[2] = TLP_CFG_DW2(bus, devfn, where); | 231 | headers[2] = TLP_CFG_DW2(bus, devfn, where); |
228 | 232 | ||
@@ -237,7 +241,7 @@ static int tlp_cfg_dword_write(struct altera_pcie *pcie, u8 bus, u32 devfn, | |||
237 | u32 headers[TLP_HDR_SIZE]; | 241 | u32 headers[TLP_HDR_SIZE]; |
238 | int ret; | 242 | int ret; |
239 | 243 | ||
240 | headers[0] = TLP_CFG_DW0(pcie, bus); | 244 | headers[0] = TLP_CFGWR_DW0(pcie, bus); |
241 | headers[1] = TLP_CFG_DW1(pcie, TLP_WRITE_TAG, byte_en); | 245 | headers[1] = TLP_CFG_DW1(pcie, TLP_WRITE_TAG, byte_en); |
242 | headers[2] = TLP_CFG_DW2(bus, devfn, where); | 246 | headers[2] = TLP_CFG_DW2(bus, devfn, where); |
243 | 247 | ||