[PATCH v2 3/9] PCI: dw-rockchip: Describe RK3588 BAR4 DMA ctrl window
Frank Li
Frank.li at nxp.com
Wed Feb 25 12:23:59 PST 2026
On Wed, Feb 25, 2026 at 06:03:26PM +0100, Niklas Cassel wrote:
> From: Koichiro Den <den at valinux.co.jp>
>
> On RK3588 PCIe3_4L in EP mode, the integrated DMA controller registers
> are permanently mapped to BAR4 and must not be repurposed by EPF
> drivers.
>
> When the remote peer needs to access these registers, it must use the
> fixed BAR4 window instead of creating another inbound mapping in a
> different BAR. Mixing the fixed window with an additional mapping can
> lead to incorrect behavior.
>
> Advertise the DMA controller MMIO window as a reserved BAR subregion so
> EPF drivers can reuse it safely.
>
> Reviewed-by: Manikanta Maddireddy <mmaddireddy at nvidia.com>
> Signed-off-by: Koichiro Den <den at valinux.co.jp>
> Signed-off-by: Niklas Cassel <cassel at kernel.org>
> ---
Reviewed-by: Frank Li <Frank.Li at nxp.com>
> drivers/pci/controller/dwc/pcie-dw-rockchip.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> index 5b17da63151d..ecc28093c589 100644
> --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
> @@ -403,6 +403,15 @@ static const struct pci_epc_features rockchip_pcie_epc_features_rk3568 = {
> .bar[BAR_5] = { .type = BAR_RESIZABLE, },
> };
>
> +static const struct pci_epc_bar_rsvd_region rk3588_bar4_rsvd[] = {
> + {
> + /* DMA_CAP (BAR4: DMA Port Logic Structure) */
> + .type = PCI_EPC_BAR_RSVD_DMA_CTRL_MMIO,
> + .offset = 0x0,
> + .size = 0x2000,
> + },
> +};
> +
> /*
> * BAR4 on rk3588 exposes the ATU Port Logic Structure to the host regardless of
> * iATU settings for BAR4. This means that BAR4 cannot be used by an EPF driver,
> @@ -420,7 +429,11 @@ static const struct pci_epc_features rockchip_pcie_epc_features_rk3588 = {
> .bar[BAR_1] = { .type = BAR_RESIZABLE, },
> .bar[BAR_2] = { .type = BAR_RESIZABLE, },
> .bar[BAR_3] = { .type = BAR_RESIZABLE, },
> - .bar[BAR_4] = { .type = BAR_RESERVED, },
> + .bar[BAR_4] = {
> + .type = BAR_RESERVED,
> + .nr_rsvd_regions = ARRAY_SIZE(rk3588_bar4_rsvd),
> + .rsvd_regions = rk3588_bar4_rsvd,
> + },
> .bar[BAR_5] = { .type = BAR_RESIZABLE, },
> };
>
> --
> 2.53.0
>
More information about the Linux-rockchip
mailing list