* [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
@ 2025-01-16 17:29 Sergey Matyukevich
2025-01-17 7:52 ` Christoph Hellwig
2025-02-17 12:23 ` Alexandre Ghiti
0 siblings, 2 replies; 8+ messages in thread
From: Sergey Matyukevich @ 2025-01-16 17:29 UTC (permalink / raw)
To: linux-riscv, linux-kernel, Palmer Dabbelt
Cc: Paul Walmsley, Albert Ou, Alexandre Ghiti, Conor Dooley,
Robin Murphy, Lad Prabhakar, Geert Uytterhoeven,
Christoph Hellwig, Sergey Matyukevich
Select DMA_DIRECT_REMAP for the RISC-V extensions that allow to set
page-based memory types in PTEs according to the requested DMA
attributes. This is the purpose of Svpbmt or XTheadMae extensions.
Zicbom or XTheadCmo serve a different purpose, providing instructions
to flush/invalidate cache blocks.
Fixes: 381cae169853 ("riscv: only select DMA_DIRECT_REMAP from RISCV_ISA_ZICBOM and ERRATA_THEAD_PBMT")
Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
---
arch/riscv/Kconfig | 2 +-
arch/riscv/Kconfig.errata | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index d4a7ca0388c0..a5dabb744009 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -603,6 +603,7 @@ config RISCV_ISA_SVPBMT
depends on 64BIT && MMU
depends on RISCV_ALTERNATIVE
default y
+ select DMA_DIRECT_REMAP
help
Adds support to dynamically detect the presence of the Svpbmt
ISA-extension (Supervisor-mode: page-based memory types) and
@@ -787,7 +788,6 @@ config RISCV_ISA_ZICBOM
depends on RISCV_ALTERNATIVE
default y
select RISCV_DMA_NONCOHERENT
- select DMA_DIRECT_REMAP
help
Adds support to dynamically detect the presence of the ZICBOM
extension (Cache Block Management Operations) and enable its
diff --git a/arch/riscv/Kconfig.errata b/arch/riscv/Kconfig.errata
index 2acc7d876e1f..3bcae5bd3231 100644
--- a/arch/riscv/Kconfig.errata
+++ b/arch/riscv/Kconfig.errata
@@ -86,6 +86,7 @@ config ERRATA_THEAD_MAE
bool "Apply T-Head's memory attribute extension (XTheadMae) errata"
depends on ERRATA_THEAD && 64BIT && MMU
select RISCV_ALTERNATIVE_EARLY
+ select DMA_DIRECT_REMAP
default y
help
This will apply the memory attribute extension errata to handle the
@@ -96,7 +97,6 @@ config ERRATA_THEAD_MAE
config ERRATA_THEAD_CMO
bool "Apply T-Head cache management errata"
depends on ERRATA_THEAD && MMU
- select DMA_DIRECT_REMAP
select RISCV_DMA_NONCOHERENT
select RISCV_NONSTANDARD_CACHE_OPS
default y
--
2.48.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
2025-01-16 17:29 [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE Sergey Matyukevich
@ 2025-01-17 7:52 ` Christoph Hellwig
2025-01-17 8:38 ` Sergey Matyukevich
2025-02-17 12:23 ` Alexandre Ghiti
1 sibling, 1 reply; 8+ messages in thread
From: Christoph Hellwig @ 2025-01-17 7:52 UTC (permalink / raw)
To: Sergey Matyukevich
Cc: linux-riscv, linux-kernel, Palmer Dabbelt, Paul Walmsley,
Albert Ou, Alexandre Ghiti, Conor Dooley, Robin Murphy,
Lad Prabhakar, Geert Uytterhoeven, Christoph Hellwig
On Thu, Jan 16, 2025 at 08:29:35PM +0300, Sergey Matyukevich wrote:
> Select DMA_DIRECT_REMAP for the RISC-V extensions that allow to set
> page-based memory types in PTEs according to the requested DMA
> attributes. This is the purpose of Svpbmt or XTheadMae extensions.
> Zicbom or XTheadCmo serve a different purpose, providing instructions
> to flush/invalidate cache blocks.
Please explain what this is supposed to solve, because the above
explanation dosn't make any sense. DMA_DIRECT_REMAP is one
of the implementations supporting dma coherent allocatiosn for
non-coherent devices. So selecting it from something that
just keyes off support for an extension, but not the dma
implementation is wrong.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
2025-01-17 7:52 ` Christoph Hellwig
@ 2025-01-17 8:38 ` Sergey Matyukevich
2025-01-17 9:58 ` Christoph Hellwig
0 siblings, 1 reply; 8+ messages in thread
From: Sergey Matyukevich @ 2025-01-17 8:38 UTC (permalink / raw)
To: Christoph Hellwig
Cc: linux-riscv, linux-kernel, Palmer Dabbelt, Paul Walmsley,
Albert Ou, Alexandre Ghiti, Conor Dooley, Robin Murphy,
Lad Prabhakar, Geert Uytterhoeven
On Fri, Jan 17, 2025 at 08:52:38AM +0100, Christoph Hellwig wrote:
> On Thu, Jan 16, 2025 at 08:29:35PM +0300, Sergey Matyukevich wrote:
> > Select DMA_DIRECT_REMAP for the RISC-V extensions that allow to set
> > page-based memory types in PTEs according to the requested DMA
> > attributes. This is the purpose of Svpbmt or XTheadMae extensions.
> > Zicbom or XTheadCmo serve a different purpose, providing instructions
> > to flush/invalidate cache blocks.
>
> Please explain what this is supposed to solve, because the above
> explanation dosn't make any sense. DMA_DIRECT_REMAP is one
> of the implementations supporting dma coherent allocatiosn for
> non-coherent devices. So selecting it from something that
> just keyes off support for an extension, but not the dma
> implementation is wrong.
Now DMA_DIRECT_REMAP is selected either by Zicbom (standard) or XTheadCmo
(vendor) RISC-V extensions. However neither of them can help to implement
DMA_DIRECT_REMAP on RISC-V. So selection of DMA_DIRECT_REMAP has been
moved in Kconfigs to Svpbmt and XTheadMae extensions.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
2025-01-17 8:38 ` Sergey Matyukevich
@ 2025-01-17 9:58 ` Christoph Hellwig
2025-01-17 11:01 ` Sergey Matyukevich
0 siblings, 1 reply; 8+ messages in thread
From: Christoph Hellwig @ 2025-01-17 9:58 UTC (permalink / raw)
To: Sergey Matyukevich
Cc: Christoph Hellwig, linux-riscv, linux-kernel, Palmer Dabbelt,
Paul Walmsley, Albert Ou, Alexandre Ghiti, Conor Dooley,
Robin Murphy, Lad Prabhakar, Geert Uytterhoeven
On Fri, Jan 17, 2025 at 11:38:47AM +0300, Sergey Matyukevich wrote:
> > Please explain what this is supposed to solve, because the above
> > explanation dosn't make any sense. DMA_DIRECT_REMAP is one
> > of the implementations supporting dma coherent allocatiosn for
> > non-coherent devices. So selecting it from something that
> > just keyes off support for an extension, but not the dma
> > implementation is wrong.
>
> Now DMA_DIRECT_REMAP is selected either by Zicbom (standard) or XTheadCmo
> (vendor) RISC-V extensions.
Because they need DMA_DIRECT_REMAP to implement DMA coherent.
> However neither of them can help to implement
> DMA_DIRECT_REMAP on RISC-V. So selection of DMA_DIRECT_REMAP has been
> moved in Kconfigs to Svpbmt and XTheadMae extensions.
But Svpbmt does not imply that you even need DMA_DIRECT_REMAP.
Are you tying to solve a problem here? If so can you explain it?
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
2025-01-17 9:58 ` Christoph Hellwig
@ 2025-01-17 11:01 ` Sergey Matyukevich
0 siblings, 0 replies; 8+ messages in thread
From: Sergey Matyukevich @ 2025-01-17 11:01 UTC (permalink / raw)
To: Christoph Hellwig
Cc: linux-riscv, linux-kernel, Palmer Dabbelt, Paul Walmsley,
Albert Ou, Alexandre Ghiti, Conor Dooley, Robin Murphy,
Lad Prabhakar, Geert Uytterhoeven
Hi Christoph,
On Fri, Jan 17, 2025 at 10:58:32AM +0100, Christoph Hellwig wrote:
> On Fri, Jan 17, 2025 at 11:38:47AM +0300, Sergey Matyukevich wrote:
> > > Please explain what this is supposed to solve, because the above
> > > explanation dosn't make any sense. DMA_DIRECT_REMAP is one
> > > of the implementations supporting dma coherent allocatiosn for
> > > non-coherent devices. So selecting it from something that
> > > just keyes off support for an extension, but not the dma
> > > implementation is wrong.
> >
> > Now DMA_DIRECT_REMAP is selected either by Zicbom (standard) or XTheadCmo
> > (vendor) RISC-V extensions.
>
> Because they need DMA_DIRECT_REMAP to implement DMA coherent.
>
> > However neither of them can help to implement
> > DMA_DIRECT_REMAP on RISC-V. So selection of DMA_DIRECT_REMAP has been
> > moved in Kconfigs to Svpbmt and XTheadMae extensions.
>
> But Svpbmt does not imply that you even need DMA_DIRECT_REMAP.
>
> Are you tying to solve a problem here? If so can you explain it?
Sure. In brief, this about the choice between DMA_GLOBAL_POOL and
DMA_DIRECT_REMAP. We can use either of them to work with non-coherent
devices. But on RISC-V those two options require different extensions.
If we select DMA_GLOBAL_POOL, then we need only cache operations. So on
RISC-V it is enough to have Zicbom (standard) or XTheadCmo (vendor) or
any other vendor specific cache ops implemented using RISCV_ALTERNATIVE
or RISCV_NONSTANDARD_CACHE_OPS.
Using DMA_DIRECT_REMAP requires not only cache management operations,
but also a way to modify page attributes, e.g. to mark it non-cacheable.
So on RISC-V in addition to CMO extensions we also need extensions for
page-based memory types such as Svpbmt (standard) or XTheadMae (vendor).
Current RISC-V Kconfig files enable DMA_DIRECT_REMAP for Zicbom and
XTheadCmo. According to the above comments, this is not good:
- it is wrong since Zicbom alone is not enough for DMA_DIRECT_REMAP
- it prevents using DMA_GLOBAL_POOL for platforms without support for
page-based memory attributes
My suggestion was to move DMA_DIRECT_REMAP to the Kconfig entries for
Svpbmt and XTheadMae. In this case platforms without Svpbmt support
can disable it in kernel config and switch to DMA_GLOBAL_POOL instead.
IIUC one of your concerns was selecting DMA_DIRECT_REMAP under config
option not related to DMA implementations. Does it make sense to add
additional layer similar to RISCV_DMA_NONCOHERENT ?
Regards,
Sergey
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
2025-01-16 17:29 [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE Sergey Matyukevich
2025-01-17 7:52 ` Christoph Hellwig
@ 2025-02-17 12:23 ` Alexandre Ghiti
2025-02-20 9:48 ` Sergey Matyukevich
1 sibling, 1 reply; 8+ messages in thread
From: Alexandre Ghiti @ 2025-02-17 12:23 UTC (permalink / raw)
To: Sergey Matyukevich, linux-riscv, linux-kernel, Palmer Dabbelt,
Heiko Stuebner
Cc: Paul Walmsley, Albert Ou, Alexandre Ghiti, Conor Dooley,
Robin Murphy, Lad Prabhakar, Geert Uytterhoeven,
Christoph Hellwig
Hi Sergey,
On 16/01/2025 18:29, Sergey Matyukevich wrote:
> Select DMA_DIRECT_REMAP for the RISC-V extensions that allow to set
> page-based memory types in PTEs according to the requested DMA
> attributes. This is the purpose of Svpbmt or XTheadMae extensions.
> Zicbom or XTheadCmo serve a different purpose, providing instructions
> to flush/invalidate cache blocks.
>
> Fixes: 381cae169853 ("riscv: only select DMA_DIRECT_REMAP from RISCV_ISA_ZICBOM and ERRATA_THEAD_PBMT")
>
> Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
> ---
> arch/riscv/Kconfig | 2 +-
> arch/riscv/Kconfig.errata | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index d4a7ca0388c0..a5dabb744009 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -603,6 +603,7 @@ config RISCV_ISA_SVPBMT
> depends on 64BIT && MMU
> depends on RISCV_ALTERNATIVE
> default y
> + select DMA_DIRECT_REMAP
From what I read, DMA_DIRECT_MAP relies on the ability to map pages
uncached (pgprot_dmacoherent() here
https://elixir.bootlin.com/linux/v6.13.2/source/kernel/dma/pool.c#L104).
But CONFIG_RISCV_ISA_SVPBMT does not guarantee that the underlying
platform supports svpbmt so to me it is wrong to select DMA_DIRECT_MAP,
we would need some runtime check instead.
> help
> Adds support to dynamically detect the presence of the Svpbmt
> ISA-extension (Supervisor-mode: page-based memory types) and
> @@ -787,7 +788,6 @@ config RISCV_ISA_ZICBOM
> depends on RISCV_ALTERNATIVE
> default y
> select RISCV_DMA_NONCOHERENT
And in the same way, we should not enable RISCV_DMA_NONCOHERENT since
CONFIG_RISCV_ISA_ZICBOM does guarantee the presence of zicbom. Because
then in mm/dma-noncoherent.c, the cache flush operations are nops.
Or am I missing something?
Thanks,
Alex
> - select DMA_DIRECT_REMAP
> help
> Adds support to dynamically detect the presence of the ZICBOM
> extension (Cache Block Management Operations) and enable its
> diff --git a/arch/riscv/Kconfig.errata b/arch/riscv/Kconfig.errata
> index 2acc7d876e1f..3bcae5bd3231 100644
> --- a/arch/riscv/Kconfig.errata
> +++ b/arch/riscv/Kconfig.errata
> @@ -86,6 +86,7 @@ config ERRATA_THEAD_MAE
> bool "Apply T-Head's memory attribute extension (XTheadMae) errata"
> depends on ERRATA_THEAD && 64BIT && MMU
> select RISCV_ALTERNATIVE_EARLY
> + select DMA_DIRECT_REMAP
> default y
> help
> This will apply the memory attribute extension errata to handle the
> @@ -96,7 +97,6 @@ config ERRATA_THEAD_MAE
> config ERRATA_THEAD_CMO
> bool "Apply T-Head cache management errata"
> depends on ERRATA_THEAD && MMU
> - select DMA_DIRECT_REMAP
> select RISCV_DMA_NONCOHERENT
> select RISCV_NONSTANDARD_CACHE_OPS
> default y
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
2025-02-17 12:23 ` Alexandre Ghiti
@ 2025-02-20 9:48 ` Sergey Matyukevich
2025-02-26 13:58 ` Alexandre Ghiti
0 siblings, 1 reply; 8+ messages in thread
From: Sergey Matyukevich @ 2025-02-20 9:48 UTC (permalink / raw)
To: Alexandre Ghiti
Cc: linux-riscv, linux-kernel, Palmer Dabbelt, Heiko Stuebner,
Paul Walmsley, Albert Ou, Alexandre Ghiti, Conor Dooley,
Robin Murphy, Lad Prabhakar, Geert Uytterhoeven,
Christoph Hellwig
Hi Alexandre,
On Mon, Feb 17, 2025 at 01:23:28PM +0100, Alexandre Ghiti wrote:
> Hi Sergey,
>
> On 16/01/2025 18:29, Sergey Matyukevich wrote:
> > Select DMA_DIRECT_REMAP for the RISC-V extensions that allow to set
> > page-based memory types in PTEs according to the requested DMA
> > attributes. This is the purpose of Svpbmt or XTheadMae extensions.
> > Zicbom or XTheadCmo serve a different purpose, providing instructions
> > to flush/invalidate cache blocks.
> >
> > Fixes: 381cae169853 ("riscv: only select DMA_DIRECT_REMAP from RISCV_ISA_ZICBOM and ERRATA_THEAD_PBMT")
> >
> > Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
> > ---
> > arch/riscv/Kconfig | 2 +-
> > arch/riscv/Kconfig.errata | 2 +-
> > 2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> > index d4a7ca0388c0..a5dabb744009 100644
> > --- a/arch/riscv/Kconfig
> > +++ b/arch/riscv/Kconfig
> > @@ -603,6 +603,7 @@ config RISCV_ISA_SVPBMT
> > depends on 64BIT && MMU
> > depends on RISCV_ALTERNATIVE
> > default y
> > + select DMA_DIRECT_REMAP
>
>
> From what I read, DMA_DIRECT_MAP relies on the ability to map pages uncached
> (pgprot_dmacoherent() here
> https://elixir.bootlin.com/linux/v6.13.2/source/kernel/dma/pool.c#L104). But
> CONFIG_RISCV_ISA_SVPBMT does not guarantee that the underlying platform
> supports svpbmt so to me it is wrong to select DMA_DIRECT_MAP, we would need
> some runtime check instead.
IIUC this function highlights coherent dma allocation options and their
requirements even more clearly:
- https://elixir.bootlin.com/linux/v6.13.2/source/kernel/dma/direct.c#L222
> > help
> > Adds support to dynamically detect the presence of the Svpbmt
> > ISA-extension (Supervisor-mode: page-based memory types) and
> > @@ -787,7 +788,6 @@ config RISCV_ISA_ZICBOM
> > depends on RISCV_ALTERNATIVE
> > default y
> > select RISCV_DMA_NONCOHERENT
>
>
> And in the same way, we should not enable RISCV_DMA_NONCOHERENT since
> CONFIG_RISCV_ISA_ZICBOM does guarantee the presence of zicbom. Because then
> in mm/dma-noncoherent.c, the cache flush operations are nops.
>
> Or am I missing something?
This is my understanding as well. In fact this patch is almost useless.
It would only allow to enable DMA_GLOBAL_POOL for platforms that support
Zicbom, but do not support Svpbmt.
The actual problem is that the RISC-V kernel image cannot have both
DMA_DIRECT_REMAP and DMA_GLOBAL_POOL since they are now mutually
exclusive in kernel/dma/Kconfig. This limitation is not convenient for
RISC-V, where kernels can be built with support for multiple extensions
and errata. But on boot only appropriate subset of them is enabled based
on the chip's VENDOR_ID and selected dtb.
Currently a portable RISC-V kernel is suitable only for platforms with
support for both Zicbom and Svpbmt or their vendor-specific alternatives.
So it doesn't really matter where DMA_DIRECT_REMAP is selected. Platforms
without Svpbmt need to build their own non-portable kernels anyway,
enabling support for DMA_GLOBAL_POOL. For instance, Starfive and Andes
in arch/riscv/Kconfig.errata and drivers/soc/renesas/Kconfig respectively.
Maybe one possible option would be to revert commit da323d464070
("dma-direct: add dependencies to CONFIG_DMA_GLOBAL_POOL") and add runtime
checks in dma_direct_alloc for dma_alloc_from_global_coherent.
In that case RISC-V kernels could be built with support for both
DMA_GLOBAL_POOL and DMA_DIRECT_REMAP. Global pool code path could be
enabled only for platforms that explicitly specify it in their dtbs.
Regards,
Sergey
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE
2025-02-20 9:48 ` Sergey Matyukevich
@ 2025-02-26 13:58 ` Alexandre Ghiti
0 siblings, 0 replies; 8+ messages in thread
From: Alexandre Ghiti @ 2025-02-26 13:58 UTC (permalink / raw)
To: Sergey Matyukevich
Cc: linux-riscv, linux-kernel, Palmer Dabbelt, Heiko Stuebner,
Paul Walmsley, Albert Ou, Alexandre Ghiti, Conor Dooley,
Robin Murphy, Lad Prabhakar, Geert Uytterhoeven,
Christoph Hellwig, Marek Szyprowski
+cc Marek
On 20/02/2025 10:48, Sergey Matyukevich wrote:
> Hi Alexandre,
>
> On Mon, Feb 17, 2025 at 01:23:28PM +0100, Alexandre Ghiti wrote:
>> Hi Sergey,
>>
>> On 16/01/2025 18:29, Sergey Matyukevich wrote:
>>> Select DMA_DIRECT_REMAP for the RISC-V extensions that allow to set
>>> page-based memory types in PTEs according to the requested DMA
>>> attributes. This is the purpose of Svpbmt or XTheadMae extensions.
>>> Zicbom or XTheadCmo serve a different purpose, providing instructions
>>> to flush/invalidate cache blocks.
>>>
>>> Fixes: 381cae169853 ("riscv: only select DMA_DIRECT_REMAP from RISCV_ISA_ZICBOM and ERRATA_THEAD_PBMT")
>>>
>>> Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
>>> ---
>>> arch/riscv/Kconfig | 2 +-
>>> arch/riscv/Kconfig.errata | 2 +-
>>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
>>> index d4a7ca0388c0..a5dabb744009 100644
>>> --- a/arch/riscv/Kconfig
>>> +++ b/arch/riscv/Kconfig
>>> @@ -603,6 +603,7 @@ config RISCV_ISA_SVPBMT
>>> depends on 64BIT && MMU
>>> depends on RISCV_ALTERNATIVE
>>> default y
>>> + select DMA_DIRECT_REMAP
>>
>> From what I read, DMA_DIRECT_MAP relies on the ability to map pages uncached
>> (pgprot_dmacoherent() here
>> https://elixir.bootlin.com/linux/v6.13.2/source/kernel/dma/pool.c#L104). But
>> CONFIG_RISCV_ISA_SVPBMT does not guarantee that the underlying platform
>> supports svpbmt so to me it is wrong to select DMA_DIRECT_MAP, we would need
>> some runtime check instead.
> IIUC this function highlights coherent dma allocation options and their
> requirements even more clearly:
> - https://elixir.bootlin.com/linux/v6.13.2/source/kernel/dma/direct.c#L222
>
>>> help
>>> Adds support to dynamically detect the presence of the Svpbmt
>>> ISA-extension (Supervisor-mode: page-based memory types) and
>>> @@ -787,7 +788,6 @@ config RISCV_ISA_ZICBOM
>>> depends on RISCV_ALTERNATIVE
>>> default y
>>> select RISCV_DMA_NONCOHERENT
>>
>> And in the same way, we should not enable RISCV_DMA_NONCOHERENT since
>> CONFIG_RISCV_ISA_ZICBOM does guarantee the presence of zicbom. Because then
>> in mm/dma-noncoherent.c, the cache flush operations are nops.
>>
>> Or am I missing something?
> This is my understanding as well. In fact this patch is almost useless.
> It would only allow to enable DMA_GLOBAL_POOL for platforms that support
> Zicbom, but do not support Svpbmt.
>
> The actual problem is that the RISC-V kernel image cannot have both
> DMA_DIRECT_REMAP and DMA_GLOBAL_POOL since they are now mutually
> exclusive in kernel/dma/Kconfig. This limitation is not convenient for
> RISC-V, where kernels can be built with support for multiple extensions
> and errata. But on boot only appropriate subset of them is enabled based
> on the chip's VENDOR_ID and selected dtb.
>
> Currently a portable RISC-V kernel is suitable only for platforms with
> support for both Zicbom and Svpbmt or their vendor-specific alternatives.
> So it doesn't really matter where DMA_DIRECT_REMAP is selected. Platforms
> without Svpbmt need to build their own non-portable kernels anyway,
> enabling support for DMA_GLOBAL_POOL. For instance, Starfive and Andes
> in arch/riscv/Kconfig.errata and drivers/soc/renesas/Kconfig respectively.
>
> Maybe one possible option would be to revert commit da323d464070
> ("dma-direct: add dependencies to CONFIG_DMA_GLOBAL_POOL") and add runtime
> checks in dma_direct_alloc for dma_alloc_from_global_coherent.
And dma_common_contiguous_remap(). Others? I guess the best would be to
have a patch to propose, unless Christoph or Marek answer with ideas.
Can you prepare something Sergey?
Thanks,
Alex
>
> In that case RISC-V kernels could be built with support for both
> DMA_GLOBAL_POOL and DMA_DIRECT_REMAP. Global pool code path could be
> enabled only for platforms that explicitly specify it in their dtbs.
>
> Regards,
> Sergey
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-02-26 13:58 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-16 17:29 [PATCH] riscv: select DMA_DIRECT_REMAP by RISCV_ISA_SVPBMT and ERRATA_THEAD_MAE Sergey Matyukevich
2025-01-17 7:52 ` Christoph Hellwig
2025-01-17 8:38 ` Sergey Matyukevich
2025-01-17 9:58 ` Christoph Hellwig
2025-01-17 11:01 ` Sergey Matyukevich
2025-02-17 12:23 ` Alexandre Ghiti
2025-02-20 9:48 ` Sergey Matyukevich
2025-02-26 13:58 ` Alexandre Ghiti
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox