Re: [PATCH v9 2/7] PCI: dwc: Rename cpu_addr to parent_bus_addr for ATU configuration
From: Frank Li <Frank.li@nxp.com>
Date: 2025-02-13 16:03:04
Also in:
imx, linux-devicetree, linux-pci, lkml
On Thu, Jan 30, 2025 at 11:02:06AM -0500, Frank Li wrote:
On Wed, Jan 29, 2025 at 05:23:50PM -0600, Bjorn Helgaas wrote:quoted
On Tue, Jan 28, 2025 at 05:07:35PM -0500, Frank Li wrote:quoted
Rename `cpu_addr` to `parent_bus_addr` in the DesignWare ATU configuration. The ATU translates parent bus addresses to PCI addresses, which are often the same as CPU addresses but can differ in systems where the bus fabric translates addresses before passing them to the PCIe controller. This renaming clarifies the purpose and avoids confusion.Based on dw_pcie_ep_inbound_atu() below, I guess the ATU can also translate PCI addresses from incoming DMA to parent bus addresses?Yes, but root complex don't use it. Only EP use it. because most PCI root complex system doesn't transfer incoming address, which generally use iommu to do that. Linux already allow a simple map by use dt's dma-ranges and dma API already handle it. previous 'cpu_addr' is actually 'dma_bus_addr'.quoted
It's worth noting here that this patch only renames the member, and IIUC, parent_bus_addr still incorrectly contains CPU physical addresses.Anyway, call 'cpu_addr' for dw_pcie_ep_inbound_atu is wrong. Only one place call dw_pcie_ep_inbound_atu(), that's dw_pcie_ep_set_bar(), which use epf_bar->phys_addr, I think name 'phys_addr' is okay because most case it is refer to dma address space.
Bjoin: Do you any concern/comments about my reply? how to move forward? keep old cpu_addr or rename to parent_bus_addr, or futher work need be done. Frank
Frankquoted
quoted
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c@@ -128,7 +128,7 @@ static int dw_pcie_ep_write_header(struct pci_epc *epc, u8 func_no, u8 vfunc_no, } static int dw_pcie_ep_inbound_atu(struct dw_pcie_ep *ep, u8 func_no, int type, - dma_addr_t cpu_addr, enum pci_barno bar, + dma_addr_t parent_bus_addr, enum pci_barno bar, size_t size)