From: Frank Li <Frank.Li@nxp.com> To: gustavo.pimentel@synopsys.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, linux-imx@nxp.com, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, fancer.lancer@gmail.com, lznuaa@gmail.com Cc: vkoul@kernel.org, lorenzo.pieralisi@arm.com, robh@kernel.org, kw@linux.com, bhelgaas@google.com, shawnguo@kernel.org, manivannan.sadhasivam@linaro.org Subject: [PATCH v5 5/9] dmaengine: dw-edma: Fix programming the source & dest addresses for ep Date: Thu, 10 Mar 2022 13:24:53 -0600 [thread overview] Message-ID: <20220310192457.3090-6-Frank.Li@nxp.com> (raw) In-Reply-To: <20220310192457.3090-1-Frank.Li@nxp.com> From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> When eDMA is controlled by the Endpoint (EP), the current logic incorrectly programs the source and destination addresses for read and write. Since the Root complex and Endpoint uses the opposite channels for read/write, fix the issue by finding out the read operation first and program the eDMA accordingly. Cc: stable@vger.kernel.org Fixes: bd96f1b2f43a ("dmaengine: dw-edma: support local dma device transfer semantics") Fixes: e63d79d1ffcd ("dmaengine: Add Synopsys eDMA IP core driver") Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Signed-off-by: Frank Li <Frank.Li@nxp.com> --- drivers/dma/dw-edma/dw-edma-core.c | 32 +++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c index 3e4850cfa0b72..924f220007362 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -334,6 +334,7 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer) struct dw_edma_chunk *chunk; struct dw_edma_burst *burst; struct dw_edma_desc *desc; + bool read = false; u32 cnt = 0; int i; @@ -424,7 +425,36 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer) chunk->ll_region.sz += burst->sz; desc->alloc_sz += burst->sz; - if (chan->dir == EDMA_DIR_WRITE) { + /**************************************************************** + * + * Root Complex Endpoint + * +-----------------------+ +----------------------+ + * | | TX CH | | + * | | | | + * | DEV_TO_MEM <-------------+ MEM_TO_DEV | + * | | | | + * | | | | + * | MEM_TO_DEV +-------------> DEV_TO_MEM | + * | | | | + * | | RX CH | | + * +-----------------------+ +----------------------+ + * + * If eDMA is controlled by the Root complex, TX channel + * (EDMA_DIR_WRITE) is used for memory read (DEV_TO_MEM) and RX + * channel (EDMA_DIR_READ) is used for memory write (MEM_TO_DEV). + * + * If eDMA is controlled by the endpoint, RX channel + * (EDMA_DIR_READ) is used for memory read (DEV_TO_MEM) and TX + * channel (EDMA_DIR_WRITE) is used for memory write (MEM_TO_DEV). + * + ****************************************************************/ + + if ((dir == DMA_DEV_TO_MEM && chan->dir == EDMA_DIR_READ) || + (dir == DMA_DEV_TO_MEM && chan->dir == EDMA_DIR_WRITE)) + read = true; + + /* Program the source and destination addresses for DMA read/write */ + if (read) { burst->sar = src_addr; if (xfer->type == EDMA_XFER_CYCLIC) { burst->dar = xfer->xfer.cyclic.paddr; -- 2.24.0.rc1
next prev parent reply other threads:[~2022-03-10 19:25 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-03-10 19:24 [PATCH v5 0/9] Enable designware PCI EP EDMA locally Frank Li 2022-03-10 19:24 ` [PATCH v5 1/9] dmaengine: dw-edma: Detach the private data and chip info structures Frank Li 2022-03-10 19:24 ` [PATCH v5 2/9] dmaengine: dw-edma: remove unused field irq in struct dw_edma_chip Frank Li 2022-03-10 19:24 ` [PATCH v5 3/9] dmaengine: dw-edma: change rg_region to reg_base " Frank Li 2022-03-10 19:24 ` [PATCH v5 4/9] dmaengine: dw-edma: rename wr(rd)_ch_cnt to ll_wr(rd)_cnt " Frank Li 2022-03-10 19:24 ` Frank Li [this message] 2022-03-10 19:24 ` [PATCH v5 6/9] dmaengine: dw-edma: Don't rely on the deprecated "direction" member Frank Li 2022-03-10 19:24 ` [PATCH v5 7/9] dmaengine: dw-edma: Add support for chip specific flags Frank Li 2022-03-10 19:24 ` [PATCH v5 8/9] dmaengine: dw-edma: Add DW_EDMA_CHIP_32BIT_DBI " Frank Li 2022-03-10 19:24 ` [PATCH v5 9/9] PCI: endpoint: functions/pci-epf-test: Support PCI controller DMA Frank Li 2022-03-10 19:45 ` [PATCH v5 0/9] Enable designware PCI EP EDMA locally Serge Semin 2022-03-10 19:58 ` Zhi Li 2022-03-10 20:00 ` Serge Semin 2022-03-11 22:58 ` Bjorn Helgaas
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220310192457.3090-6-Frank.Li@nxp.com \ --to=frank.li@nxp.com \ --cc=bhelgaas@google.com \ --cc=dmaengine@vger.kernel.org \ --cc=fancer.lancer@gmail.com \ --cc=gustavo.pimentel@synopsys.com \ --cc=hongxing.zhu@nxp.com \ --cc=kw@linux.com \ --cc=l.stach@pengutronix.de \ --cc=linux-imx@nxp.com \ --cc=linux-pci@vger.kernel.org \ --cc=lorenzo.pieralisi@arm.com \ --cc=lznuaa@gmail.com \ --cc=manivannan.sadhasivam@linaro.org \ --cc=robh@kernel.org \ --cc=shawnguo@kernel.org \ --cc=vkoul@kernel.org \ --subject='Re: [PATCH v5 5/9] dmaengine: dw-edma: Fix programming the source & dest addresses for ep' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).