2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00
linux/drivers/pci/controller/dwc
Niklas Cassel 1f5a69f1b3
PCI: dw-rockchip: Hide broken ATS capability for RK3588 running in EP mode
When running the RK3588 in Endpoint mode, with an Intel host with IOMMU
enabled, the host side prints:

  DMAR: VT-d detected Invalidation Time-out Error: SID 0

When running the RK3588 in Endpoint mode, with an AMD host with IOMMU
enabled, the host side prints:

  iommu ivhd0: AMD-Vi: Event logged [IOTLB_INV_TIMEOUT device=63:00.0 address=0x42b5b01a0]

Rockchip has confirmed that the ATS support for RK3588 only works when
running the PCIe controller in Root Complex (RC) mode, see:

  https://lore.kernel.org/linux-pci/93cdce39-1ae6-4939-a3fc-db10be7564e5@rock-chips.com

Usually, to handle these issues, we add a quirk for the PCI vendor and
device ID in drivers/pci/quirks.c with quirk_no_ats(). That is because
we cannot usually modify the capabilities on the EP side. In this case,
we can modify the capabilities on the EP side.

Thus, hide the broken ATS capability on RK3588 when running in EP mode.

That way, we don't need any quirk on the host side, and we see no errors
on the host side, and we can run pci_endpoint_test successfully, with
the IOMMU enabled on the host side.

Acked-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Niklas Cassel <cassel@kernel.org>
[kwilczynski: commit log, tidy up code comments and error message]
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/20250310094826.842681-6-cassel@kernel.org
2025-03-14 16:13:19 +00:00
..
Kconfig PCI: dwc: Add debugfs based Silicon Debug support for DWC 2025-03-06 08:55:47 +00:00
Makefile PCI: dwc: Add debugfs based Silicon Debug support for DWC 2025-03-06 08:55:47 +00:00
pci-dra7xx.c PCI: dra7xx: Use syscon_regmap_lookup_by_phandle_args 2025-01-16 14:38:53 -06:00
pci-exynos.c PCI: exynos: Switch to devm_clk_bulk_get_all_enabled() 2024-12-23 12:53:52 -08:00
pci-imx6.c Merge branch 'pci/controller/imx6' 2025-01-23 13:05:03 -06:00
pci-keystone.c Merge branch 'pci/controller/keystone' 2024-11-25 13:40:58 -06:00
pci-layerscape-ep.c PCI: layerscape-ep: Use the generic dw_pcie_ep_linkdown() API to handle Link Down event 2024-07-09 18:21:11 -05:00
pci-layerscape.c PCI: layerscape: Use syscon_regmap_lookup_by_phandle_args 2025-01-16 14:38:36 -06:00
pci-meson.c PCI: dwc: Remove unused of_gpio.h inclusion 2024-05-28 11:15:08 -05:00
pcie-al.c PCI: al: Check IORESOURCE_BUS existence during probe 2024-05-28 11:14:24 -05:00
pcie-armada8k.c PCI: dwc: Drop host prefix from struct dw_pcie_host_ops members 2024-01-06 07:51:08 +00:00
pcie-artpec6.c PCI: artpec6: Implement dw_pcie_ep operation get_features 2024-12-18 21:51:47 +00:00
pcie-bt1.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-designware-debugfs.c PCI: dwc: Add debugfs property to provide LTSSM status of the PCIe link 2025-03-06 08:55:54 +00:00
pcie-designware-ep.c PCI: dwc: ep: Add dw_pcie_ep_hide_ext_capability() 2025-03-14 16:13:19 +00:00
pcie-designware-host.c PCI: dwc: Add debugfs based Silicon Debug support for DWC 2025-03-06 08:55:47 +00:00
pcie-designware-plat.c PCI: dwc: ep: Remove dw_pcie_ep_init_notify() wrapper 2024-07-09 18:20:21 -05:00
pcie-designware.c PCI: dwc: Add debugfs based Silicon Debug support for DWC 2025-03-06 08:55:47 +00:00
pcie-designware.h PCI: dwc: ep: Add dw_pcie_ep_hide_ext_capability() 2025-03-14 16:13:19 +00:00
pcie-dw-rockchip.c PCI: dw-rockchip: Hide broken ATS capability for RK3588 running in EP mode 2025-03-14 16:13:19 +00:00
pcie-fu740.c PCI: dwc: Drop host prefix from struct dw_pcie_host_ops members 2024-01-06 07:51:08 +00:00
pcie-hisi.c PCI: hisi: Avoid invalid address space conversions 2022-01-03 15:05:28 -06:00
pcie-histb.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-intel-gw.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-keembay.c PCI: dwc: ep: Remove dw_pcie_ep_init_notify() wrapper 2024-07-09 18:20:21 -05:00
pcie-kirin.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-qcom-common.c PCI: qcom: Add RX lane margining settings for 16.0 GT/s 2024-09-13 14:44:59 +00:00
pcie-qcom-common.h PCI: qcom: Add RX lane margining settings for 16.0 GT/s 2024-09-13 14:44:59 +00:00
pcie-qcom-ep.c Merge branch 'pci/controller/qcom' 2024-11-25 13:40:59 -06:00
pcie-qcom.c PCI: qcom: Update ICC and OPP values after Link Up event 2025-01-18 11:35:18 -06:00
pcie-rcar-gen4.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-spear13xx.c PCI: dwc: Rename 'dw_pcie::link_gen' to 'dw_pcie::max_link_speed' 2024-09-13 14:44:43 +00:00
pcie-tegra194-acpi.c PCI: dwc: Simplify in/outbound iATU setup methods 2022-08-01 15:15:09 -05:00
pcie-tegra194.c Merge branch 'pci/controller/tegra194' 2024-11-25 13:41:00 -06:00
pcie-uniphier-ep.c PCI: dwc: ep: Remove dw_pcie_ep_init_notify() wrapper 2024-07-09 18:20:21 -05:00
pcie-uniphier.c Merge branch 'pci/irq-clean-up' 2024-01-15 12:10:40 -06:00
pcie-visconti.c PCI: dwc: Drop host prefix from struct dw_pcie_host_ops members 2024-01-06 07:51:08 +00:00