This patch series fix the support of dw-edma HDMA NATIVE IP.
I can only test it in remote HDMA IP setup with single dma transfer, but
with these fixes it works properly.
Few fixes has also been added for eDMA version. Similarly to HDMA I have
tested only eDMA in remote setup.
Changes in v2:
- Update comments and fix typos.
- Removed patches that tackle hypothetical bug and then were not pertinent.
- Add the similar HDMA race condition in remote setup fix to eDMA IP driver.
Changes in v3:
- Fix comment style.
- Split a patch in two to differ bug fix and simple harmless typo.
Changes in v4:
- Update patch git commit message.
- Link to v3: https://lore.kernel.org/r/[email protected]
Changes in v5:
- No change
- Rebase to mainline 6.7-rc1
- Link to v4: https://lore.kernel.org/r/[email protected]
Changes in v6:
- Fix several commit messages and comments.
- Link to v5: https://lore.kernel.org/r/[email protected]
Signed-off-by: Kory Maincent <[email protected]>
---
Kory Maincent (6):
dmaengine: dw-edma: Fix the ch_count hdma callback
dmaengine: dw-edma: Fix wrong interrupt bit set for HDMA
dmaengine: dw-edma: HDMA_V0_REMOTEL_STOP_INT_EN typo fix
dmaengine: dw-edma: Add HDMA remote interrupt configuration
dmaengine: dw-edma: HDMA: Add sync read before starting the DMA transfer in remote setup
dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup
drivers/dma/dw-edma/dw-edma-v0-core.c | 17 +++++++++++++++
drivers/dma/dw-edma/dw-hdma-v0-core.c | 39 +++++++++++++++++++++++------------
drivers/dma/dw-edma/dw-hdma-v0-regs.h | 2 +-
3 files changed, 44 insertions(+), 14 deletions(-)
---
base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86
change-id: 20231011-b4-feature_hdma_mainline-b6c57f8e3b5d
Best regards,
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
The Linked list element and pointer are not stored in the same memory as
the eDMA controller register. If the doorbell register is toggled before
the full write of the linked list a race condition error will occur.
In remote setup we can only use a readl to the memory to assure the full
write has occurred.
Fixes: 7e4b8a4fbe2c ("dmaengine: Add Synopsys eDMA IP version 0 support")
Reviewed-by: Serge Semin <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Signed-off-by: Kory Maincent <[email protected]>
---
Changes in v2:
- New patch
Changes in v4:
- Update git commit message.
Changes in v6:
- Fix comment typos.
---
drivers/dma/dw-edma/dw-edma-v0-core.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw-edma-v0-core.c
index b38786f0ad79..b75fdaffad9a 100644
--- a/drivers/dma/dw-edma/dw-edma-v0-core.c
+++ b/drivers/dma/dw-edma/dw-edma-v0-core.c
@@ -346,6 +346,20 @@ static void dw_edma_v0_core_write_chunk(struct dw_edma_chunk *chunk)
dw_edma_v0_write_ll_link(chunk, i, control, chunk->ll_region.paddr);
}
+static void dw_edma_v0_sync_ll_data(struct dw_edma_chunk *chunk)
+{
+ /*
+ * In case of remote eDMA engine setup, the DW PCIe RP/EP internal
+ * configuration registers and application memory are normally accessed
+ * over different buses. Ensure LL-data reaches the memory before the
+ * doorbell register is toggled by issuing the dummy-read from the remote
+ * LL memory in a hope that the MRd TLP will return only after the
+ * last MWr TLP is completed
+ */
+ if (!(chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL))
+ readl(chunk->ll_region.vaddr.io);
+}
+
static void dw_edma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
{
struct dw_edma_chan *chan = chunk->chan;
@@ -412,6 +426,9 @@ static void dw_edma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
SET_CH_32(dw, chan->dir, chan->id, llp.msb,
upper_32_bits(chunk->ll_region.paddr));
}
+
+ dw_edma_v0_sync_ll_data(chunk);
+
/* Doorbell */
SET_RW_32(dw, chan->dir, doorbell,
FIELD_PREP(EDMA_V0_DOORBELL_CH_MASK, chan->id));
--
2.25.1
Instead of setting HDMA_V0_LOCAL_ABORT_INT_EN bit, HDMA_V0_LOCAL_STOP_INT_EN
bit got set twice, due to which the abort interrupt is not getting generated for
HDMA. Fix it by setting the correct interrupt enable bit.
Fixes: e74c39573d35 ("dmaengine: dw-edma: Add support for native HDMA")
Reviewed-by: Serge Semin <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Signed-off-by: Kory Maincent <[email protected]>
---
Changes in v3:
- Split the patch in two to differ bug fix and simple harmless typo.
Changes in v6:
- Update commit message
---
drivers/dma/dw-edma/dw-hdma-v0-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw-hdma-v0-core.c
index 1f4cb7db5475..108f9127aaaa 100644
--- a/drivers/dma/dw-edma/dw-hdma-v0-core.c
+++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c
@@ -236,7 +236,7 @@ static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
/* Interrupt enable&unmask - done, abort */
tmp = GET_CH_32(dw, chan->dir, chan->id, int_setup) |
HDMA_V0_STOP_INT_MASK | HDMA_V0_ABORT_INT_MASK |
- HDMA_V0_LOCAL_STOP_INT_EN | HDMA_V0_LOCAL_STOP_INT_EN;
+ HDMA_V0_LOCAL_STOP_INT_EN | HDMA_V0_LOCAL_ABORT_INT_EN;
SET_CH_32(dw, chan->dir, chan->id, int_setup, tmp);
/* Channel control */
SET_CH_32(dw, chan->dir, chan->id, control1, HDMA_V0_LINKLIST_EN);
--
2.25.1
The Linked list element and pointer are not stored in the same memory as
the HDMA controller register. If the doorbell register is toggled before
the full write of the linked list a race condition error will occur.
In remote setup we can only use a readl to the memory to assure the full
write has occurred.
Fixes: e74c39573d35 ("dmaengine: dw-edma: Add support for native HDMA")
Reviewed-by: Serge Semin <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Signed-off-by: Kory Maincent <[email protected]>
---
Changes in v2:
- Move the sync read in a function.
- Add commments
Changes in v4:
- Update git commit message.
Changes in v6:
- Fix comment typos.
---
drivers/dma/dw-edma/dw-hdma-v0-core.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw-hdma-v0-core.c
index 04b0bcb6ded9..10e8f0715114 100644
--- a/drivers/dma/dw-edma/dw-hdma-v0-core.c
+++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c
@@ -222,6 +222,20 @@ static void dw_hdma_v0_core_write_chunk(struct dw_edma_chunk *chunk)
dw_hdma_v0_write_ll_link(chunk, i, control, chunk->ll_region.paddr);
}
+static void dw_hdma_v0_sync_ll_data(struct dw_edma_chunk *chunk)
+{
+ /*
+ * In case of remote HDMA engine setup, the DW PCIe RP/EP internal
+ * configuration registers and application memory are normally accessed
+ * over different buses. Ensure LL-data reaches the memory before the
+ * doorbell register is toggled by issuing the dummy-read from the remote
+ * LL memory in a hope that the MRd TLP will return only after the
+ * last MWr TLP is completed
+ */
+ if (!(chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL))
+ readl(chunk->ll_region.vaddr.io);
+}
+
static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
{
struct dw_edma_chan *chan = chunk->chan;
@@ -252,6 +266,9 @@ static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
/* Set consumer cycle */
SET_CH_32(dw, chan->dir, chan->id, cycle_sync,
HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT);
+
+ dw_hdma_v0_sync_ll_data(chunk);
+
/* Doorbell */
SET_CH_32(dw, chan->dir, chan->id, doorbell, HDMA_V0_DOORBELL_START);
}
--
2.25.1
On Fri, Nov 17, 2023 at 11:03:48AM +0100, Kory Maincent wrote:
> This patch series fix the support of dw-edma HDMA NATIVE IP.
> I can only test it in remote HDMA IP setup with single dma transfer, but
> with these fixes it works properly.
>
> Few fixes has also been added for eDMA version. Similarly to HDMA I have
> tested only eDMA in remote setup.
>
Just out of curiosity, can you share how you are setting EDMA_MF_HDMA_NATIVE?
- Mani
> Changes in v2:
> - Update comments and fix typos.
> - Removed patches that tackle hypothetical bug and then were not pertinent.
> - Add the similar HDMA race condition in remote setup fix to eDMA IP driver.
>
> Changes in v3:
> - Fix comment style.
> - Split a patch in two to differ bug fix and simple harmless typo.
>
> Changes in v4:
> - Update patch git commit message.
> - Link to v3: https://lore.kernel.org/r/[email protected]
>
> Changes in v5:
> - No change
> - Rebase to mainline 6.7-rc1
> - Link to v4: https://lore.kernel.org/r/[email protected]
>
> Changes in v6:
> - Fix several commit messages and comments.
> - Link to v5: https://lore.kernel.org/r/[email protected]
>
> Signed-off-by: Kory Maincent <[email protected]>
> ---
> Kory Maincent (6):
> dmaengine: dw-edma: Fix the ch_count hdma callback
> dmaengine: dw-edma: Fix wrong interrupt bit set for HDMA
> dmaengine: dw-edma: HDMA_V0_REMOTEL_STOP_INT_EN typo fix
> dmaengine: dw-edma: Add HDMA remote interrupt configuration
> dmaengine: dw-edma: HDMA: Add sync read before starting the DMA transfer in remote setup
> dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup
>
> drivers/dma/dw-edma/dw-edma-v0-core.c | 17 +++++++++++++++
> drivers/dma/dw-edma/dw-hdma-v0-core.c | 39 +++++++++++++++++++++++------------
> drivers/dma/dw-edma/dw-hdma-v0-regs.h | 2 +-
> 3 files changed, 44 insertions(+), 14 deletions(-)
> ---
> base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86
> change-id: 20231011-b4-feature_hdma_mainline-b6c57f8e3b5d
>
> Best regards,
> --
> Köry Maincent, Bootlin
> Embedded Linux and kernel engineering
> https://bootlin.com
>
--
மணிவண்ணன் சதாசிவம்
Hi Mani
On Tue, Nov 21, 2023 at 11:56:29AM +0530, Manivannan Sadhasivam wrote:
> On Fri, Nov 17, 2023 at 11:03:48AM +0100, Kory Maincent wrote:
> > This patch series fix the support of dw-edma HDMA NATIVE IP.
> > I can only test it in remote HDMA IP setup with single dma transfer, but
> > with these fixes it works properly.
> >
> > Few fixes has also been added for eDMA version. Similarly to HDMA I have
> > tested only eDMA in remote setup.
> >
>
> Just out of curiosity, can you share how you are setting EDMA_MF_HDMA_NATIVE?
This topic has already been concerned on v1 (in another context
though):
https://lore.kernel.org/dmaengine/20230621151948.36125997@kmaincent-XPS-13-7390/
Here is the repo with the out-of-tree driver Kory said he was using
together with the kernel's version of the DW eDMA/hDMA driver:
https://github.com/Brainchip-Inc/akida_dw_edma
-Serge(y)
>
> - Mani
>
> > Changes in v2:
> > - Update comments and fix typos.
> > - Removed patches that tackle hypothetical bug and then were not pertinent.
> > - Add the similar HDMA race condition in remote setup fix to eDMA IP driver.
> >
> > Changes in v3:
> > - Fix comment style.
> > - Split a patch in two to differ bug fix and simple harmless typo.
> >
> > Changes in v4:
> > - Update patch git commit message.
> > - Link to v3: https://lore.kernel.org/r/[email protected]
> >
> > Changes in v5:
> > - No change
> > - Rebase to mainline 6.7-rc1
> > - Link to v4: https://lore.kernel.org/r/[email protected]
> >
> > Changes in v6:
> > - Fix several commit messages and comments.
> > - Link to v5: https://lore.kernel.org/r/[email protected]
> >
> > Signed-off-by: Kory Maincent <[email protected]>
> > ---
> > Kory Maincent (6):
> > dmaengine: dw-edma: Fix the ch_count hdma callback
> > dmaengine: dw-edma: Fix wrong interrupt bit set for HDMA
> > dmaengine: dw-edma: HDMA_V0_REMOTEL_STOP_INT_EN typo fix
> > dmaengine: dw-edma: Add HDMA remote interrupt configuration
> > dmaengine: dw-edma: HDMA: Add sync read before starting the DMA transfer in remote setup
> > dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup
> >
> > drivers/dma/dw-edma/dw-edma-v0-core.c | 17 +++++++++++++++
> > drivers/dma/dw-edma/dw-hdma-v0-core.c | 39 +++++++++++++++++++++++------------
> > drivers/dma/dw-edma/dw-hdma-v0-regs.h | 2 +-
> > 3 files changed, 44 insertions(+), 14 deletions(-)
> > ---
> > base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86
> > change-id: 20231011-b4-feature_hdma_mainline-b6c57f8e3b5d
> >
> > Best regards,
> > --
> > Köry Maincent, Bootlin
> > Embedded Linux and kernel engineering
> > https://bootlin.com
> >
>
> --
> மணிவண்ணன் சதாசிவம்
On Tue, Nov 21, 2023 at 01:55:22PM +0300, Serge Semin wrote:
> Hi Mani
>
> On Tue, Nov 21, 2023 at 11:56:29AM +0530, Manivannan Sadhasivam wrote:
> > On Fri, Nov 17, 2023 at 11:03:48AM +0100, Kory Maincent wrote:
> > > This patch series fix the support of dw-edma HDMA NATIVE IP.
> > > I can only test it in remote HDMA IP setup with single dma transfer, but
> > > with these fixes it works properly.
> > >
> > > Few fixes has also been added for eDMA version. Similarly to HDMA I have
> > > tested only eDMA in remote setup.
> > >
> >
> > Just out of curiosity, can you share how you are setting EDMA_MF_HDMA_NATIVE?
>
> This topic has already been concerned on v1 (in another context
> though):
> https://lore.kernel.org/dmaengine/20230621151948.36125997@kmaincent-XPS-13-7390/
>
> Here is the repo with the out-of-tree driver Kory said he was using
> together with the kernel's version of the DW eDMA/hDMA driver:
> https://github.com/Brainchip-Inc/akida_dw_edma
>
Thanks Sergey, I missed it! But looks like we are not focusing on the HDMA
integration in designware-ep.c. Have you/anyone thought about it? Was it
discussed previously that I missed?
HDMA is used in one of the recent Qcom SoCs (SA8775) that Qcom folks are
bringing up and I'd like to have a common solution like we have for eDMA.
- Mani
> -Serge(y)
>
> >
> > - Mani
> >
> > > Changes in v2:
> > > - Update comments and fix typos.
> > > - Removed patches that tackle hypothetical bug and then were not pertinent.
> > > - Add the similar HDMA race condition in remote setup fix to eDMA IP driver.
> > >
> > > Changes in v3:
> > > - Fix comment style.
> > > - Split a patch in two to differ bug fix and simple harmless typo.
> > >
> > > Changes in v4:
> > > - Update patch git commit message.
> > > - Link to v3: https://lore.kernel.org/r/[email protected]
> > >
> > > Changes in v5:
> > > - No change
> > > - Rebase to mainline 6.7-rc1
> > > - Link to v4: https://lore.kernel.org/r/[email protected]
> > >
> > > Changes in v6:
> > > - Fix several commit messages and comments.
> > > - Link to v5: https://lore.kernel.org/r/[email protected]
> > >
> > > Signed-off-by: Kory Maincent <[email protected]>
> > > ---
> > > Kory Maincent (6):
> > > dmaengine: dw-edma: Fix the ch_count hdma callback
> > > dmaengine: dw-edma: Fix wrong interrupt bit set for HDMA
> > > dmaengine: dw-edma: HDMA_V0_REMOTEL_STOP_INT_EN typo fix
> > > dmaengine: dw-edma: Add HDMA remote interrupt configuration
> > > dmaengine: dw-edma: HDMA: Add sync read before starting the DMA transfer in remote setup
> > > dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup
> > >
> > > drivers/dma/dw-edma/dw-edma-v0-core.c | 17 +++++++++++++++
> > > drivers/dma/dw-edma/dw-hdma-v0-core.c | 39 +++++++++++++++++++++++------------
> > > drivers/dma/dw-edma/dw-hdma-v0-regs.h | 2 +-
> > > 3 files changed, 44 insertions(+), 14 deletions(-)
> > > ---
> > > base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86
> > > change-id: 20231011-b4-feature_hdma_mainline-b6c57f8e3b5d
> > >
> > > Best regards,
> > > --
> > > Köry Maincent, Bootlin
> > > Embedded Linux and kernel engineering
> > > https://bootlin.com
> > >
> >
> > --
> > மணிவண்ணன் சதாசிவம்
--
மணிவண்ணன் சதாசிவம்
On Tue, Nov 21, 2023 at 05:38:28PM +0530, Manivannan Sadhasivam wrote:
> On Tue, Nov 21, 2023 at 01:55:22PM +0300, Serge Semin wrote:
> > Hi Mani
> >
> > On Tue, Nov 21, 2023 at 11:56:29AM +0530, Manivannan Sadhasivam wrote:
> > > On Fri, Nov 17, 2023 at 11:03:48AM +0100, Kory Maincent wrote:
> > > > This patch series fix the support of dw-edma HDMA NATIVE IP.
> > > > I can only test it in remote HDMA IP setup with single dma transfer, but
> > > > with these fixes it works properly.
> > > >
> > > > Few fixes has also been added for eDMA version. Similarly to HDMA I have
> > > > tested only eDMA in remote setup.
> > > >
> > >
> > > Just out of curiosity, can you share how you are setting EDMA_MF_HDMA_NATIVE?
> >
> > This topic has already been concerned on v1 (in another context
> > though):
> > https://lore.kernel.org/dmaengine/20230621151948.36125997@kmaincent-XPS-13-7390/
> >
> > Here is the repo with the out-of-tree driver Kory said he was using
> > together with the kernel's version of the DW eDMA/hDMA driver:
> > https://github.com/Brainchip-Inc/akida_dw_edma
> >
>
> Thanks Sergey, I missed it! But looks like we are not focusing on the HDMA
> integration in designware-ep.c. Have you/anyone thought about it? Was it
> discussed previously that I missed?
No. We haven't discussed that in the framework of this patchset.
>
> HDMA is used in one of the recent Qcom SoCs (SA8775) that Qcom folks are
> bringing up and I'd like to have a common solution like we have for eDMA.
AFAICS it won't be that easy to do for HDMA. Unlike eDMA, HDMA doesn't
have a handy global config registers to determine the number of R/W
channels. Kory also said that auto-detecting them by dummy-writing to
all the CH_EN registers didn't work either because all, even
unavailable, channels CSRs were writable. This part was discussed
earlier:
https://lore.kernel.org/lkml/20230607144014.6356a197@kmaincent-XPS-13-7390/
So if you don't come up with some more clever solution, then alas the
number of R/W channels will need to be specified by the platform
code/driver.
Regarding how to auto-detect HDMA. I can't be absolutely sure whether
it will work but if we assume that:
1. HDMA reg-space is always unrolled (mapped over a separate reg-space),
2. Lowest 16 bits of base+0x8 are RO in EDMA (DMA_CTRL_OFF) and RW in HDMA
(prefetch CSR),
then we can implement a procedure like this:
1. If iATU/xDMA reg-space is specified and it's writable at the
xDMA-base+0x8 then it's HDMA controller and amount of channels is
supposed to be pre-initialized by the low-level platform driver,
otherwise it's eDMA and the read value can be used to determine the
number of channels.
2. If iATU/xDMA reg-space isn't specified then the viewport-based eDMA
auto-detection procedure will be executed.
For all of that you'll need to fix the
dw_pcie_edma_find_chip()/dw_pcie_edma_detect() method somehow.
Alternatively, to keep things simple you can convert the
dw_pcie_edma_find_chip()/dw_pcie_edma_detect() methods to just relying
on the HDMA settings being fully specified by the low-level drivers.
-Serge(y)
>
> - Mani
>
> > -Serge(y)
> >
> > >
> > > - Mani
> > >
> > > > Changes in v2:
> > > > - Update comments and fix typos.
> > > > - Removed patches that tackle hypothetical bug and then were not pertinent.
> > > > - Add the similar HDMA race condition in remote setup fix to eDMA IP driver.
> > > >
> > > > Changes in v3:
> > > > - Fix comment style.
> > > > - Split a patch in two to differ bug fix and simple harmless typo.
> > > >
> > > > Changes in v4:
> > > > - Update patch git commit message.
> > > > - Link to v3: https://lore.kernel.org/r/[email protected]
> > > >
> > > > Changes in v5:
> > > > - No change
> > > > - Rebase to mainline 6.7-rc1
> > > > - Link to v4: https://lore.kernel.org/r/[email protected]
> > > >
> > > > Changes in v6:
> > > > - Fix several commit messages and comments.
> > > > - Link to v5: https://lore.kernel.org/r/[email protected]
> > > >
> > > > Signed-off-by: Kory Maincent <[email protected]>
> > > > ---
> > > > Kory Maincent (6):
> > > > dmaengine: dw-edma: Fix the ch_count hdma callback
> > > > dmaengine: dw-edma: Fix wrong interrupt bit set for HDMA
> > > > dmaengine: dw-edma: HDMA_V0_REMOTEL_STOP_INT_EN typo fix
> > > > dmaengine: dw-edma: Add HDMA remote interrupt configuration
> > > > dmaengine: dw-edma: HDMA: Add sync read before starting the DMA transfer in remote setup
> > > > dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup
> > > >
> > > > drivers/dma/dw-edma/dw-edma-v0-core.c | 17 +++++++++++++++
> > > > drivers/dma/dw-edma/dw-hdma-v0-core.c | 39 +++++++++++++++++++++++------------
> > > > drivers/dma/dw-edma/dw-hdma-v0-regs.h | 2 +-
> > > > 3 files changed, 44 insertions(+), 14 deletions(-)
> > > > ---
> > > > base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86
> > > > change-id: 20231011-b4-feature_hdma_mainline-b6c57f8e3b5d
> > > >
> > > > Best regards,
> > > > --
> > > > Köry Maincent, Bootlin
> > > > Embedded Linux and kernel engineering
> > > > https://bootlin.com
> > > >
> > >
> > > --
> > > மணிவண்ணன் சதாசிவம்
>
> --
> மணிவண்ணன் சதாசிவம்
On Tue, Nov 21, 2023 at 06:36:19PM +0300, Serge Semin wrote:
> On Tue, Nov 21, 2023 at 05:38:28PM +0530, Manivannan Sadhasivam wrote:
> > On Tue, Nov 21, 2023 at 01:55:22PM +0300, Serge Semin wrote:
> > > Hi Mani
> > >
> > > On Tue, Nov 21, 2023 at 11:56:29AM +0530, Manivannan Sadhasivam wrote:
> > > > On Fri, Nov 17, 2023 at 11:03:48AM +0100, Kory Maincent wrote:
> > > > > This patch series fix the support of dw-edma HDMA NATIVE IP.
> > > > > I can only test it in remote HDMA IP setup with single dma transfer, but
> > > > > with these fixes it works properly.
> > > > >
> > > > > Few fixes has also been added for eDMA version. Similarly to HDMA I have
> > > > > tested only eDMA in remote setup.
> > > > >
> > > >
> > > > Just out of curiosity, can you share how you are setting EDMA_MF_HDMA_NATIVE?
> > >
> > > This topic has already been concerned on v1 (in another context
> > > though):
> > > https://lore.kernel.org/dmaengine/20230621151948.36125997@kmaincent-XPS-13-7390/
> > >
> > > Here is the repo with the out-of-tree driver Kory said he was using
> > > together with the kernel's version of the DW eDMA/hDMA driver:
> > > https://github.com/Brainchip-Inc/akida_dw_edma
> > >
> >
>
> > Thanks Sergey, I missed it! But looks like we are not focusing on the HDMA
> > integration in designware-ep.c. Have you/anyone thought about it? Was it
> > discussed previously that I missed?
>
> No. We haven't discussed that in the framework of this patchset.
>
> >
> > HDMA is used in one of the recent Qcom SoCs (SA8775) that Qcom folks are
> > bringing up and I'd like to have a common solution like we have for eDMA.
>
> AFAICS it won't be that easy to do for HDMA. Unlike eDMA, HDMA doesn't
> have a handy global config registers to determine the number of R/W
> channels. Kory also said that auto-detecting them by dummy-writing to
> all the CH_EN registers didn't work either because all, even
> unavailable, channels CSRs were writable. This part was discussed
> earlier:
> https://lore.kernel.org/lkml/20230607144014.6356a197@kmaincent-XPS-13-7390/
> So if you don't come up with some more clever solution, then alas the
> number of R/W channels will need to be specified by the platform
> code/driver.
>
> Regarding how to auto-detect HDMA. I can't be absolutely sure whether
> it will work but if we assume that:
> 1. HDMA reg-space is always unrolled (mapped over a separate reg-space),
> 2. Lowest 16 bits of base+0x8 are RO in EDMA (DMA_CTRL_OFF) and RW in HDMA
> (prefetch CSR),
> then we can implement a procedure like this:
>
> 1. If iATU/xDMA reg-space is specified and it's writable at the
> xDMA-base+0x8 then it's HDMA controller and amount of channels is
> supposed to be pre-initialized by the low-level platform driver,
> otherwise it's eDMA and the read value can be used to determine the
> number of channels.
> 2. If iATU/xDMA reg-space isn't specified then the viewport-based eDMA
> auto-detection procedure will be executed.
>
> For all of that you'll need to fix the
> dw_pcie_edma_find_chip()/dw_pcie_edma_detect() method somehow.
>
> Alternatively, to keep things simple you can convert the
> dw_pcie_edma_find_chip()/dw_pcie_edma_detect() methods to just relying
> on the HDMA settings being fully specified by the low-level drivers.
>
This looks like the best possible solution at the moment. Thanks for the
insight!
I will post the patches together with the HDMA enablement ones.
- Mani
> -Serge(y)
>
> >
> > - Mani
> >
> > > -Serge(y)
> > >
> > > >
> > > > - Mani
> > > >
> > > > > Changes in v2:
> > > > > - Update comments and fix typos.
> > > > > - Removed patches that tackle hypothetical bug and then were not pertinent.
> > > > > - Add the similar HDMA race condition in remote setup fix to eDMA IP driver.
> > > > >
> > > > > Changes in v3:
> > > > > - Fix comment style.
> > > > > - Split a patch in two to differ bug fix and simple harmless typo.
> > > > >
> > > > > Changes in v4:
> > > > > - Update patch git commit message.
> > > > > - Link to v3: https://lore.kernel.org/r/[email protected]
> > > > >
> > > > > Changes in v5:
> > > > > - No change
> > > > > - Rebase to mainline 6.7-rc1
> > > > > - Link to v4: https://lore.kernel.org/r/[email protected]
> > > > >
> > > > > Changes in v6:
> > > > > - Fix several commit messages and comments.
> > > > > - Link to v5: https://lore.kernel.org/r/[email protected]
> > > > >
> > > > > Signed-off-by: Kory Maincent <[email protected]>
> > > > > ---
> > > > > Kory Maincent (6):
> > > > > dmaengine: dw-edma: Fix the ch_count hdma callback
> > > > > dmaengine: dw-edma: Fix wrong interrupt bit set for HDMA
> > > > > dmaengine: dw-edma: HDMA_V0_REMOTEL_STOP_INT_EN typo fix
> > > > > dmaengine: dw-edma: Add HDMA remote interrupt configuration
> > > > > dmaengine: dw-edma: HDMA: Add sync read before starting the DMA transfer in remote setup
> > > > > dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup
> > > > >
> > > > > drivers/dma/dw-edma/dw-edma-v0-core.c | 17 +++++++++++++++
> > > > > drivers/dma/dw-edma/dw-hdma-v0-core.c | 39 +++++++++++++++++++++++------------
> > > > > drivers/dma/dw-edma/dw-hdma-v0-regs.h | 2 +-
> > > > > 3 files changed, 44 insertions(+), 14 deletions(-)
> > > > > ---
> > > > > base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86
> > > > > change-id: 20231011-b4-feature_hdma_mainline-b6c57f8e3b5d
> > > > >
> > > > > Best regards,
> > > > > --
> > > > > Köry Maincent, Bootlin
> > > > > Embedded Linux and kernel engineering
> > > > > https://bootlin.com
> > > > >
> > > >
> > > > --
> > > > மணிவண்ணன் சதாசிவம்
> >
> > --
> > மணிவண்ணன் சதாசிவம்
--
மணிவண்ணன் சதாசிவம்
On Wed, 22 Nov 2023 22:42:42 +0530
Manivannan Sadhasivam <[email protected]> wrote:
> > For all of that you'll need to fix the
> > dw_pcie_edma_find_chip()/dw_pcie_edma_detect() method somehow.
> >
> > Alternatively, to keep things simple you can convert the
> > dw_pcie_edma_find_chip()/dw_pcie_edma_detect() methods to just relying
> > on the HDMA settings being fully specified by the low-level drivers.
> >
>
> This looks like the best possible solution at the moment. Thanks for the
> insight!
>
> I will post the patches together with the HDMA enablement ones.
Hello Manivannan,
What is the status of this series?
Do you want to wait for designware-ep.c to be HDMA compatible before merging
the fixes? Do you expect us to do something? We can't work on the
designware-ep.c driver as we do not have such hardware.
Shouldn't fixes be merged as soon as possible?
Regards,
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
On Fri, Jan 12, 2024 at 11:16:37AM +0100, Köry Maincent wrote:
> On Wed, 22 Nov 2023 22:42:42 +0530
> Manivannan Sadhasivam <[email protected]> wrote:
>
> > > For all of that you'll need to fix the
> > > dw_pcie_edma_find_chip()/dw_pcie_edma_detect() method somehow.
> > >
> > > Alternatively, to keep things simple you can convert the
> > > dw_pcie_edma_find_chip()/dw_pcie_edma_detect() methods to just relying
> > > on the HDMA settings being fully specified by the low-level drivers.
> > >
> >
> > This looks like the best possible solution at the moment. Thanks for the
> > insight!
> >
> > I will post the patches together with the HDMA enablement ones.
>
> Hello Manivannan,
>
> What is the status of this series?
> Do you want to wait for designware-ep.c to be HDMA compatible before merging
> the fixes? Do you expect us to do something? We can't work on the
> designware-ep.c driver as we do not have such hardware.
> Shouldn't fixes be merged as soon as possible?
>
I've reviewed all the patches, but I do not merge them. It is upto the dmaengine
maintainer (Vinod) to merge the patches. Anyway, we are in v6.8 merge window, so
you can rebase on top of v6.8-rc1 once released and post the patches.
- Mani
> Regards,
> --
> Köry Maincent, Bootlin
> Embedded Linux and kernel engineering
> https://bootlin.com
--
மணிவண்ணன் சதாசிவம்
On Sat, 20 Jan 2024 20:43:40 +0530
Manivannan Sadhasivam <[email protected]> wrote:
> On Fri, Jan 12, 2024 at 11:16:37AM +0100, Köry Maincent wrote:
> > On Wed, 22 Nov 2023 22:42:42 +0530
> > Manivannan Sadhasivam <[email protected]> wrote:
> >
> > > > For all of that you'll need to fix the
> > > > dw_pcie_edma_find_chip()/dw_pcie_edma_detect() method somehow.
> > > >
> > > > Alternatively, to keep things simple you can convert the
> > > > dw_pcie_edma_find_chip()/dw_pcie_edma_detect() methods to just relying
> > > > on the HDMA settings being fully specified by the low-level drivers.
> > > >
> > >
> > > This looks like the best possible solution at the moment. Thanks for the
> > > insight!
> > >
> > > I will post the patches together with the HDMA enablement ones.
> >
> > Hello Manivannan,
> >
> > What is the status of this series?
> > Do you want to wait for designware-ep.c to be HDMA compatible before merging
> > the fixes? Do you expect us to do something? We can't work on the
> > designware-ep.c driver as we do not have such hardware.
> > Shouldn't fixes be merged as soon as possible?
> >
>
> I've reviewed all the patches, but I do not merge them. It is upto the
> dmaengine maintainer (Vinod) to merge the patches. Anyway, we are in v6.8
> merge window, so you can rebase on top of v6.8-rc1 once released and post the
> patches.
Ok, thanks! I will do this then!
Regards,
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com