linux/drivers/pci/controller
Damien Le Moal d093cc19f7 PCI: rockchip-ep: Fix address translation unit programming
commit 64f093c4d9 upstream.

The Rockchip PCIe endpoint controller handles PCIe transfers addresses
by masking the lower bits of the programmed PCI address and using the
same number of lower bits masked from the CPU address space used for the
mapping. For a PCI mapping of <size> bytes starting from <pci_addr>,
the number of bits masked is the number of address bits changing in the
address range [pci_addr..pci_addr + size - 1].

However, rockchip_pcie_prog_ep_ob_atu() calculates num_pass_bits only
using the size of the mapping, resulting in an incorrect number of mask
bits depending on the value of the PCI address to map.

Fix this by introducing the helper function
rockchip_pcie_ep_ob_atu_num_bits() to correctly calculate the number of
mask bits to use to program the address translation unit. The number of
mask bits is calculated depending on both the PCI address and size of
the mapping, and clamped between 8 and 20 using the macros
ROCKCHIP_PCIE_AT_MIN_NUM_BITS and ROCKCHIP_PCIE_AT_MAX_NUM_BITS. As
defined in the Rockchip RK3399 TRM V1.3 Part2, Sections 17.5.5.1.1 and
17.6.8.2.1, this clamping is necessary because:

  1) The lower 8 bits of the PCI address to be mapped by the outbound
     region are ignored. So a minimum of 8 address bits are needed and
     imply that the PCI address must be aligned to 256.

  2) The outbound memory regions are 1MB in size. So while we can specify
     up to 63-bits for the PCI address (num_bits filed uses bits 0 to 5 of
     the outbound address region 0 register), we must limit the number of
     valid address bits to 20 to match the memory window maximum size (1
     << 20 = 1MB).

Fixes: cf590b0783 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
Link: https://lore.kernel.org/r/20241017015849.190271-2-dlemoal@kernel.org
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2024-12-09 10:41:09 +01:00
..
cadence PCI: j721e: Deassert PERST# after a delay of PCIE_T_PVPERL_MS milliseconds 2024-12-05 14:02:23 +01:00
dwc PCI: dwc: ep: Fix advertised resizable BAR size regression 2024-12-09 10:41:08 +01:00
mobiveil PCI: mobiveil: Silence 'set affinity failed' warning 2024-07-29 12:46:35 -05:00
plda PCI: plda: Silence 'set affinity failed' warning 2024-07-29 12:46:35 -05:00
Kconfig PCI: mediatek-gen3: Add Airoha EN7581 support 2024-09-03 13:37:41 +00:00
Makefile PCI: microchip: Move pcie-microchip-host.c to PLDA directory 2024-05-28 11:15:28 -05:00
pci-aardvark.c Merge branch 'pci/controller/affinity' 2024-09-19 14:25:28 -05:00
pci-ftpci100.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pci-host-common.c Merge branch 'pci/misc' 2024-07-19 10:10:33 -05:00
pci-host-generic.c PCI: controller: Add missing MODULE_DESCRIPTION() macros 2024-07-08 08:36:14 +00: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: hv: Return zero, not garbage, when reading PCI_INTERRUPT_PIN 2024-07-03 21:11:14 +00:00
pci-ixp4xx.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pci-loongson.c PCI: loongson: Enable MSI in LS7A Root Complex 2024-07-19 10:07:01 -05:00
pci-mvebu.c PCI: mvebu: Use FIELD_PREP() with Link Width 2023-10-10 15:00:52 -05:00
pci-rcar-gen2.c PCI: rcar-gen2: Use devm_platform_get_and_ioremap_resource() 2023-07-13 18:12:35 +00:00
pci-tegra.c PCI: tegra: Silence 'set affinity failed' warning 2024-07-29 12:46:35 -05:00
pci-thunder-ecam.c PCI: thunder: Drop error data fabrication when config read fails 2021-11-18 13:39:32 -06:00
pci-thunder-pem.c PCI: thunder: Drop error data fabrication when config read fails 2021-11-18 13:39:32 -06:00
pci-v3-semi.c Merge branch 'pci/misc' 2023-08-29 11:03:57 -05:00
pci-versatile.c PCI: Remove MODULE_LICENSE so boolean drivers don't look like modules 2023-02-17 08:47:58 -06:00
pci-xgene-msi.c PCI: xgene-msi: Use devm_platform_get_and_ioremap_resource() 2023-07-13 18:12:36 +00:00
pci-xgene.c PCI: Rename CRS Completion Status to RRS 2024-09-10 19:52:30 -05:00
pcie-altera-msi.c PCI: altera-msi: Silence 'set affinity failed' warning 2024-07-29 12:46:35 -05:00
pcie-altera.c PCI: altera: Replace TLP_REQ_ID() with macro PCI_DEVID() 2024-09-06 06:32:23 +00:00
pcie-apple.c PCI: controller: Add missing MODULE_DESCRIPTION() macros 2024-07-08 08:36:14 +00:00
pcie-brcmstb.c Merge branch 'pci/controller/brcmstb' 2024-09-19 14:25:29 -05:00
pcie-hisi-error.c PCI: hisi-error: Convert to platform remove callback returning void 2023-06-24 14:12:13 +00:00
pcie-iproc-bcma.c PCI: Add defines for normal and subtractive PCI bridges 2022-02-17 15:29:35 -06:00
pcie-iproc-msi.c PCI: iproc: Use of_property_read_bool() for boolean properties 2023-07-13 18:09:24 +00:00
pcie-iproc-platform.c PCI: iproc: Fix -Wvoid-pointer-to-enum-cast warning 2024-01-06 08:06:50 +00:00
pcie-iproc.c PCI: Rename CRS Completion Status to RRS 2024-09-10 19:52:30 -05:00
pcie-iproc.h PCI: iproc: Convert to platform remove callback returning void 2023-06-24 14:12:36 +00:00
pcie-mediatek-gen3.c Merge branch 'pci/controller/mediatek-gen3' 2024-09-19 14:25:32 -05:00
pcie-mediatek.c Merge branch 'pci/controller/mediatek' 2024-09-19 14:25:31 -05:00
pcie-mt7621.c PCI: controller: Add missing MODULE_DESCRIPTION() macros 2024-07-08 08:36:14 +00:00
pcie-rcar-ep.c PCI: endpoint: Remove "core_init_notifier" flag 2024-04-10 17:52:42 +00:00
pcie-rcar-host.c PCI: rcar-host: Silence 'set affinity failed' warning 2024-07-29 12:46:35 -05: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: Avoid defines prefixed with CONFIG 2023-03-10 13:34:27 +01:00
pcie-rockchip-ep.c PCI: rockchip-ep: Fix address translation unit programming 2024-12-09 10:41:09 +01:00
pcie-rockchip-host.c PCI: rockchip-host: Wait 100ms after reset before starting configuration 2024-07-09 18:28:31 -05:00
pcie-rockchip.c PCI: rockchip: Use GPIOD_OUT_LOW flag while requesting ep_gpio 2024-07-09 18:28:33 -05:00
pcie-rockchip.h PCI: rockchip-ep: Fix address translation unit programming 2024-12-09 10:41:09 +01:00
pcie-xilinx-common.h PCI: xilinx-xdma: Add Xilinx XDMA Root Port driver 2023-10-26 15:02:02 +00:00
pcie-xilinx-cpm.c PCI: xilinx-cpm: Move IRQ definitions to a common header 2023-10-26 14:10:42 +00:00
pcie-xilinx-dma-pl.c Merge branch 'pci/controller/xilinx' 2024-09-19 14:25:33 -05:00
pcie-xilinx-nwl.c Merge branch 'pci/controller/xilinx' 2024-09-19 14:25:33 -05:00
pcie-xilinx.c PCI: xilinx: Silence 'set affinity failed' warning 2024-08-06 12:52:17 -05:00
vmd.c Merge branch 'pci/controller/vmd' 2024-09-19 14:25:33 -05:00