Re: [PATCH 10/12] dmaengine: dw-edma-pcie: Factor descriptor block addresses

From: Frank Li

Date: Thu May 21 2026 - 13:07:20 EST


On Thu, May 21, 2026 at 03:31:13PM +0900, Koichiro Den wrote:
> Add an optional physical address override to struct dw_edma_block and
> use a helper to compute descriptor block addresses.
>
> No functional change intended. Existing EDDA and MDB block descriptors
> leave the override unset, so the helper still returns the same
> pci_bus_address() plus block offset value.
>
> Signed-off-by: Koichiro Den <den@xxxxxxxxxxxxx>
> ---

Reviewed-by: Frank Li <Frank.Li@xxxxxxx>

> drivers/dma/dw-edma/dw-edma-pcie.c | 34 +++++++++++++++++++-----------
> 1 file changed, 22 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/dma/dw-edma/dw-edma-pcie.c b/drivers/dma/dw-edma/dw-edma-pcie.c
> index 6b375a58c550..2a95fb9d5fc3 100644
> --- a/drivers/dma/dw-edma/dw-edma-pcie.c
> +++ b/drivers/dma/dw-edma/dw-edma-pcie.c
> @@ -54,6 +54,8 @@
> struct dw_edma_block {
> enum pci_barno bar;
> off_t off;
> + u64 paddr;
> + bool paddr_valid;
> size_t sz;
> };
>
> @@ -365,6 +367,18 @@ static u64 dw_edma_get_phys_addr(struct pci_dev *pdev,
> return pci_bus_address(pdev, bar);
> }
>
> +static u64 dw_edma_get_block_addr(struct pci_dev *pdev,
> + const struct dw_edma_pcie_match_data *match,
> + struct dw_edma_pcie_data *pdata,
> + const struct dw_edma_block *block)
> +{
> + if (block->paddr_valid)
> + return block->paddr;
> +
> + return dw_edma_get_phys_addr(pdev, match, pdata, block->bar) +
> + block->off;
> +}
> +
> static int dw_edma_pcie_probe(struct pci_dev *pdev,
> const struct pci_device_id *pid)
> {
> @@ -465,9 +479,8 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
> return -ENOMEM;
>
> ll_region->vaddr.io += ll_block->off;
> - ll_region->paddr = dw_edma_get_phys_addr(pdev, match,
> - dma_data, ll_block->bar);
> - ll_region->paddr += ll_block->off;
> + ll_region->paddr = dw_edma_get_block_addr(pdev, match, dma_data,
> + ll_block);
> ll_region->sz = ll_block->sz;
>
> dt_region->vaddr.io = pcim_iomap_table(pdev)[dt_block->bar];
> @@ -475,9 +488,8 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
> return -ENOMEM;
>
> dt_region->vaddr.io += dt_block->off;
> - dt_region->paddr = dw_edma_get_phys_addr(pdev, match,
> - dma_data, dt_block->bar);
> - dt_region->paddr += dt_block->off;
> + dt_region->paddr = dw_edma_get_block_addr(pdev, match, dma_data,
> + dt_block);
> dt_region->sz = dt_block->sz;
> }
>
> @@ -492,9 +504,8 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
> return -ENOMEM;
>
> ll_region->vaddr.io += ll_block->off;
> - ll_region->paddr = dw_edma_get_phys_addr(pdev, match,
> - dma_data, ll_block->bar);
> - ll_region->paddr += ll_block->off;
> + ll_region->paddr = dw_edma_get_block_addr(pdev, match, dma_data,
> + ll_block);
> ll_region->sz = ll_block->sz;
>
> dt_region->vaddr.io = pcim_iomap_table(pdev)[dt_block->bar];
> @@ -502,9 +513,8 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
> return -ENOMEM;
>
> dt_region->vaddr.io += dt_block->off;
> - dt_region->paddr = dw_edma_get_phys_addr(pdev, match,
> - dma_data, dt_block->bar);
> - dt_region->paddr += dt_block->off;
> + dt_region->paddr = dw_edma_get_block_addr(pdev, match, dma_data,
> + dt_block);
> dt_region->sz = dt_block->sz;
> }
>
> --
> 2.51.0
>