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