1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/pci/controller
Marek Vasut a115b1bd3a PCI: rcar: Add L1 link state fix into data abort hook
When the link is in L1, hardware should return it to L0
automatically whenever a transaction targets a component on the
other end of the link (PCIe r5.0, sec 5.2).

The R-Car PCIe controller doesn't handle this transition correctly.
If the link is not in L0, an MMIO transaction targeting a downstream
device fails, and the controller reports an ARM imprecise external
abort.

Work around this by hooking the abort handler so the driver can
detect this situation and help the hardware complete the link state
transition.

When the R-Car controller receives a PM_ENTER_L1 DLLP from the
downstream component, it sets PMEL1RX bit in PMSR register, but then
the controller enters some sort of in-between state.  A subsequent
MMIO transaction will fail, resulting in the external abort.  The
abort handler detects this condition and completes the link state
transition by setting the L1IATN bit in PMCTLR and waiting for the
link state transition to complete.

Link: https://lore.kernel.org/r/20210815181650.132579-1-marek.vasut@gmail.com
Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Wolfram Sang <wsa@the-dreams.de>
Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Cc: linux-renesas-soc@vger.kernel.org
2021-08-16 14:51:30 +01:00
..
cadence PCI: Fix kernel-doc formatting 2021-07-06 10:37:46 -05:00
dwc pci-v5.14-changes 2021-07-08 12:06:20 -07:00
mobiveil PCI: mobiveil: Remove unused readl and writel functions 2021-06-03 17:13:55 +01:00
Kconfig PCI: ixp4xx: Add a new driver for IXP4xx 2021-06-17 11:42:48 +02:00
Makefile PCI: ixp4xx: Add a new driver for IXP4xx 2021-06-17 11:42:48 +02:00
pci-aardvark.c pci-v5.14-changes 2021-07-08 12:06:20 -07:00
pci-ftpci100.c PCI: ftpci100: Rename macro name collision 2021-06-03 17:27:23 +01:00
pci-host-common.c PCI/MSI: Make pci_host_common_probe() declare its reliance on MSI domains 2021-04-20 14:11:22 +01:00
pci-host-generic.c PCI: Unify ECAM constants in native PCI Express drivers 2020-12-10 14:55:49 -06:00
pci-hyperv-intf.c PCI: hv: Add a Hyper-V PCI interface driver for software backchannel interface 2019-08-22 00:25:12 -07:00
pci-hyperv.c pci-v5.14-changes 2021-07-08 12:06:20 -07:00
pci-ixp4xx.c PCI: ixp4xx: Add a new driver for IXP4xx 2021-06-17 11:42:48 +02:00
pci-loongson.c PCI: loongson: Simplify loongson_pci_probe() return expression 2020-10-02 12:56:31 +01:00
pci-mvebu.c PCI: mvebu: Fix duplicate resource requests 2020-11-04 13:55:30 -06:00
pci-rcar-gen2.c PCI: rcar-gen2: Use fallthrough pseudo-keyword 2020-09-07 15:17:20 +01:00
pci-tegra.c PCI: tegra: Add missing MODULE_DEVICE_TABLE 2021-06-24 17:43:12 -05:00
pci-thunder-ecam.c PCI: thunder: Fix compile testing 2021-03-11 15:07:46 -06:00
pci-thunder-pem.c PCI: thunder: Fix compile testing 2021-03-11 15:07:46 -06:00
pci-v3-semi.c PCI: v3-semi: Remove unneeded break 2020-10-20 10:59:55 -05:00
pci-versatile.c PCI: Set bridge map_irq and swizzle_irq to default functions 2020-08-04 16:36:30 +01:00
pci-xgene-msi.c PCI: xgene-msi: Fix race in installing chained irq handler 2021-01-18 15:48:06 +00:00
pci-xgene.c Merge branch 'pci/kernel-doc' 2021-07-06 10:56:29 -05:00
pcie-altera-msi.c PCI: altera-msi: Remove redundant dev_err call in altera_msi_probe() 2021-04-14 17:45:11 +01:00
pcie-altera.c Merge branch 'pci/irq-error' 2020-08-05 18:24:22 -05:00
pcie-brcmstb.c Merge branch 'pci/brcmstb' 2021-05-04 10:43:31 -05:00
pcie-hisi-error.c PCI: hip: Add handling of HiSilicon HIP PCIe controller errors 2020-09-16 10:30:42 +01:00
pcie-iproc-bcma.c PCI: iproc: Use module_bcma_driver to simplify the code 2020-10-02 12:45:26 +01:00
pcie-iproc-msi.c Merge branch 'remotes/lorenzo/pci/iproc' 2021-07-06 10:56:30 -05:00
pcie-iproc-platform.c PCI: iproc: Fix using plain integer as NULL pointer in iproc_pcie_pltfm_probe 2020-10-09 13:37:57 +01:00
pcie-iproc.c PCI: Fix kernel-doc formatting 2021-07-06 10:37:46 -05:00
pcie-iproc.h PCI: Fix kernel-doc formatting 2021-07-06 10:37:46 -05:00
pcie-mediatek-gen3.c PCI: mediatek-gen3: Add missing MODULE_DEVICE_TABLE 2021-06-22 11:16:53 +01:00
pcie-mediatek.c PCI: mediatek: Remove redundant error printing in mtk_pcie_subsys_powerup() 2021-06-03 17:45:52 +01:00
pcie-microchip-host.c PCI: microchip: Make the struct event_descs static 2021-06-03 17:11:45 +01:00
pcie-rcar-ep.c PCI: rcar: Fix runtime PM imbalance in rcar_pcie_ep_probe() 2021-08-05 14:08:57 +01:00
pcie-rcar-host.c PCI: rcar: Add L1 link state fix into data abort hook 2021-08-16 14:51:30 +01:00
pcie-rcar.c PCI: rcar: Fix calculating mask for PCIEPAMR register 2020-05-11 11:29:48 +01:00
pcie-rcar.h PCI: rcar: Add L1 link state fix into data abort hook 2021-08-16 14:51:30 +01:00
pcie-rockchip-ep.c PCI: Fix kerneldoc warnings 2020-08-05 18:23:14 -05:00
pcie-rockchip-host.c PCI: rockchip: Register IRQ handlers after device and data are ready 2021-07-01 08:46:52 -05:00
pcie-rockchip.c PCI: rockchip: Make 'ep-gpios' DT property optional 2021-02-23 14:23:50 -06:00
pcie-rockchip.h PCI: Unify ECAM constants in native PCI Express drivers 2020-12-10 14:55:49 -06:00
pcie-xilinx-cpm.c PCI: xilinx-cpm: Fix reference count leak on error path 2021-01-25 17:27:41 +00:00
pcie-xilinx-nwl.c PCI: xilinx-nwl: Enable coherent PCIe DMA traffic using CCI 2021-04-07 16:59:23 +01:00
pcie-xilinx.c PCI: xilinx: Convert to MSI domains 2021-04-20 14:11:21 +01:00
vmd.c PCI: vmd: Disable MSI-X remapping when possible 2021-03-22 14:08:20 +00:00