* ZICBOM and SVPBMT in same system
@ 2023-03-07 20:58 Ben Dooks
2023-03-07 20:58 ` [PATCH 1/2] riscv: alternatives: add 3-config alternative set Ben Dooks
2023-03-07 20:58 ` [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom Ben Dooks
0 siblings, 2 replies; 10+ messages in thread
From: Ben Dooks @ 2023-03-07 20:58 UTC (permalink / raw)
To: linux-riscv; +Cc: palmer, aou, heiko.stuebner, conor.dooley, ajones
It is possible to have a system with both of these in the risc,isa
string and if so they do not work well with the dma memory allocator.
Fix this up by adding a new pgprog_dmacoherent which returns either
non-cached if SVPBMT only, or cached iff there is ZICBOM and thus
cache management operations.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2] riscv: alternatives: add 3-config alternative set
2023-03-07 20:58 ZICBOM and SVPBMT in same system Ben Dooks
@ 2023-03-07 20:58 ` Ben Dooks
2023-03-07 21:31 ` Conor Dooley
2023-03-07 20:58 ` [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom Ben Dooks
1 sibling, 1 reply; 10+ messages in thread
From: Ben Dooks @ 2023-03-07 20:58 UTC (permalink / raw)
To: linux-riscv; +Cc: palmer, aou, heiko.stuebner, conor.dooley, ajones, Ben Dooks
Add a 3-config alternative macro set for cases where there are
three different choices for a given erratum. This will be used
when we come to patch the issues with SVPBMT and ZICBOM.
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
arch/riscv/include/asm/alternative-macros.h | 38 +++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/arch/riscv/include/asm/alternative-macros.h b/arch/riscv/include/asm/alternative-macros.h
index 51c6867e02f3..8c74b00d707c 100644
--- a/arch/riscv/include/asm/alternative-macros.h
+++ b/arch/riscv/include/asm/alternative-macros.h
@@ -50,8 +50,18 @@
ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
.endm
+.macro ALTERNATIVE_CFG_3 old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
+ new_c_2, vendor_id_2, errata_id_2, enable_2, \
+ new_c_3, vendor_id_3, errata_id_3, enable_3
+ ALTERNATIVE_CFG "\old_c", "\new_c_1", \vendor_id_1, \errata_id_1, \enable_1
+ ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
+ ALT_NEW_CONTENT \vendor_id_3, \errata_id_3, \enable_3, \new_c_3
+.endm
+
+
#define __ALTERNATIVE_CFG(...) ALTERNATIVE_CFG __VA_ARGS__
#define __ALTERNATIVE_CFG_2(...) ALTERNATIVE_CFG_2 __VA_ARGS__
+#define __ALTERNATIVE_CFG_3(...) ALTERNATIVE_CFG_3 __VA_ARGS__
#else /* !__ASSEMBLY__ */
@@ -98,6 +108,13 @@
__ALTERNATIVE_CFG(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1) \
ALT_NEW_CONTENT(vendor_id_2, errata_id_2, enable_2, new_c_2)
+#define __ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
+ new_c_2, vendor_id_2, errata_id_2, enable_2, \
+ new_c_3, vendor_id_3, errata_id_3, enable_3) \
+ __ALTERNATIVE_CFG(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1) \
+ ALT_NEW_CONTENT(vendor_id_2, errata_id_2, enable_2, new_c_2) \
+ ALT_NEW_CONTENT(vendor_id_3, errata_id_3, enable_3, new_c_3)
+
#endif /* __ASSEMBLY__ */
#define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
@@ -108,6 +125,13 @@
__ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, IS_ENABLED(CONFIG_k_1), \
new_c_2, vendor_id_2, errata_id_2, IS_ENABLED(CONFIG_k_2))
+#define _ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
+ new_c_2, vendor_id_2, errata_id_2, CONFIG_k_2, \
+ new_c_3, vendor_id_3, errata_id_3, CONFIG_k_3) \
+ __ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, IS_ENABLED(CONFIG_k_1), \
+ new_c_2, vendor_id_2, errata_id_2, IS_ENABLED(CONFIG_k_2), \
+ new_c_3, vendor_id_3, errata_id_3, IS_ENABLED(CONFIG_k_3))
+
#else /* CONFIG_RISCV_ALTERNATIVE */
#ifdef __ASSEMBLY__
@@ -121,6 +145,9 @@
#define _ALTERNATIVE_CFG_2(old_c, ...) \
ALTERNATIVE_CFG old_c
+#define _ALTERNATIVE_CFG_3(old_c, ...) \
+ ALTERNATIVE_CFG old_c
+
#else /* !__ASSEMBLY__ */
#define __ALTERNATIVE_CFG(old_c) \
@@ -132,6 +159,9 @@
#define _ALTERNATIVE_CFG_2(old_c, ...) \
__ALTERNATIVE_CFG(old_c)
+#define _ALTERNATIVE_CFG_3(old_c, ...) \
+ __ALTERNATIVE_CFG(old_c)
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_RISCV_ALTERNATIVE */
@@ -163,4 +193,12 @@
_ALTERNATIVE_CFG_2(old_content, new_content_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
new_content_2, vendor_id_2, errata_id_2, CONFIG_k_2)
+#define ALTERNATIVE_3(old_content, new_content_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
+ new_content_2, vendor_id_2, errata_id_2, CONFIG_k_2, \
+ new_content_3, vendor_id_3, errata_id_3, CONFIG_k_3) \
+ _ALTERNATIVE_CFG_3(old_content, new_content_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
+ new_content_2, vendor_id_2, errata_id_2, CONFIG_k_2, \
+ new_content_3, vendor_id_3, errata_id_3, CONFIG_k_3)
+
+
#endif
--
2.39.2
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom
2023-03-07 20:58 ZICBOM and SVPBMT in same system Ben Dooks
2023-03-07 20:58 ` [PATCH 1/2] riscv: alternatives: add 3-config alternative set Ben Dooks
@ 2023-03-07 20:58 ` Ben Dooks
2023-03-08 9:35 ` Ben Dooks
1 sibling, 1 reply; 10+ messages in thread
From: Ben Dooks @ 2023-03-07 20:58 UTC (permalink / raw)
To: linux-riscv; +Cc: palmer, aou, heiko.stuebner, conor.dooley, ajones, Ben Dooks
If the system uses both ZICBOM and SVPBMT then currently SVPBMT will be
used for DMA allocated memory even though ZICBOM gives us the cache ops
to use cached memory and clean/flush them as needed by the DMA code.
Fix this by adding pgprot_dmacoherent() which is used by the allocator
code to map the dma memory, thus allowing the return of suitably mapped
memory for any use of dma_alloc_attrs() code. This s uses the added
riscv_page_dmacoherent() which will work out the correct page flags to
return using ALT_SVPBMT_ZICBOM() to runtime patch the right result.
Note, we can't just disable SVPBMT as it will be neede for things like
ioremap() which don't have assoicated cache management operations.
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
arch/riscv/include/asm/errata_list.h | 16 ++++++++++++++++
arch/riscv/include/asm/pgtable-64.h | 10 ++++++++++
2 files changed, 26 insertions(+)
diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
index fb1a810f3d8c..49ed2e7984a7 100644
--- a/arch/riscv/include/asm/errata_list.h
+++ b/arch/riscv/include/asm/errata_list.h
@@ -62,6 +62,22 @@ asm(ALTERNATIVE_2("li %0, 0\t\nnop", \
"I"(ALT_SVPBMT_SHIFT), \
"I"(ALT_THEAD_PBMT_SHIFT))
+#define ALT_SVPBMT_ZICBOM(_val, prot) \
+asm(ALTERNATIVE_3("li %0, 0\t\nnop", \
+ "li %0, %1\t\nslli %0,%0,%3", 0, \
+ RISCV_ISA_EXT_SVPBMT, CONFIG_RISCV_ISA_SVPBMT, \
+ "li %0, 0\t\nnop", 0, \
+ RISCV_ISA_EXT_ZICBOM, CONFIG_RISCV_ISA_ZICBOM, \
+ "li %0, %2\t\nslli %0,%0,%4", THEAD_VENDOR_ID, \
+ ERRATA_THEAD_PBMT, CONFIG_ERRATA_THEAD_PBMT) \
+ : "=r"(_val) \
+ : "I"(prot##_SVPBMT >> ALT_SVPBMT_SHIFT), \
+ "I"(prot##_THEAD >> ALT_THEAD_PBMT_SHIFT), \
+ "I"(ALT_SVPBMT_SHIFT), \
+ "I"(ALT_THEAD_PBMT_SHIFT))
+
+
+
#ifdef CONFIG_ERRATA_THEAD_PBMT
/*
* IO/NOCACHE memory types are handled together with svpbmt,
diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h
index 42a042c0e13e..e0d2e5fda5a4 100644
--- a/arch/riscv/include/asm/pgtable-64.h
+++ b/arch/riscv/include/asm/pgtable-64.h
@@ -126,10 +126,20 @@ static inline u64 riscv_page_io(void)
return val;
}
+static inline u64 riscv_page_dmacoherent(void)
+{
+ u64 val;
+
+ ALT_SVPBMT_ZICBOM(val, _PAGE_IO);
+ return val;
+}
+
#define _PAGE_NOCACHE riscv_page_nocache()
#define _PAGE_IO riscv_page_io()
#define _PAGE_MTMASK riscv_page_mtmask()
+#define pgprot_dmacoherent(__prot) __pgprot(pgprot_val(__prot) | riscv_page_dmacoherent())
+
/* Set of bits to preserve across pte_modify() */
#define _PAGE_CHG_MASK (~(unsigned long)(_PAGE_PRESENT | _PAGE_READ | \
_PAGE_WRITE | _PAGE_EXEC | \
--
2.39.2
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] riscv: alternatives: add 3-config alternative set
2023-03-07 20:58 ` [PATCH 1/2] riscv: alternatives: add 3-config alternative set Ben Dooks
@ 2023-03-07 21:31 ` Conor Dooley
2023-03-08 9:34 ` Ben Dooks
0 siblings, 1 reply; 10+ messages in thread
From: Conor Dooley @ 2023-03-07 21:31 UTC (permalink / raw)
To: Ben Dooks; +Cc: linux-riscv, palmer, aou, heiko.stuebner, conor.dooley, ajones
[-- Attachment #1.1: Type: text/plain, Size: 3656 bytes --]
Hey Ben,
On Tue, Mar 07, 2023 at 08:58:33PM +0000, Ben Dooks wrote:
> Add a 3-config alternative macro set for cases where there are
> three different choices for a given erratum. This will be used
> when we come to patch the issues with SVPBMT and ZICBOM.
>
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> ---
> arch/riscv/include/asm/alternative-macros.h | 38 +++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/arch/riscv/include/asm/alternative-macros.h b/arch/riscv/include/asm/alternative-macros.h
> index 51c6867e02f3..8c74b00d707c 100644
> --- a/arch/riscv/include/asm/alternative-macros.h
> +++ b/arch/riscv/include/asm/alternative-macros.h
> @@ -50,8 +50,18 @@
> ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
> .endm
>
> +.macro ALTERNATIVE_CFG_3 old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
> + new_c_2, vendor_id_2, errata_id_2, enable_2, \
> + new_c_3, vendor_id_3, errata_id_3, enable_3
> + ALTERNATIVE_CFG "\old_c", "\new_c_1", \vendor_id_1, \errata_id_1, \enable_1
> + ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
> + ALT_NEW_CONTENT \vendor_id_3, \errata_id_3, \enable_3, \new_c_3
A matter of opinion maybe, but there was a previous ALTERNATIVE_CFG_3
posting that was implemented using ALTERNATIVE_CFG_2 that, to me, is
easier to grok:
https://lore.kernel.org/linux-riscv/20221212115505.36770-2-prabhakar.mahadev-lad.rj@bp.renesas.com/
It's certainly an easier pattern to replicate for the inevitable
ALTERNATIVE_CFG_4,5,6,7 etc.
I'm not super bothered either way, but worth considering I think.
Cheers,
Conor.
> +.endm
> +
> +
btw, here & further down in the patch there's some instances of double
newlines that automation is gonna whinge about.
> #define __ALTERNATIVE_CFG(...) ALTERNATIVE_CFG __VA_ARGS__
> #define __ALTERNATIVE_CFG_2(...) ALTERNATIVE_CFG_2 __VA_ARGS__
> +#define __ALTERNATIVE_CFG_3(...) ALTERNATIVE_CFG_3 __VA_ARGS__
>
> #else /* !__ASSEMBLY__ */
>
> @@ -98,6 +108,13 @@
> __ALTERNATIVE_CFG(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1) \
> ALT_NEW_CONTENT(vendor_id_2, errata_id_2, enable_2, new_c_2)
>
> +#define __ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
> + new_c_2, vendor_id_2, errata_id_2, enable_2, \
> + new_c_3, vendor_id_3, errata_id_3, enable_3) \
> + __ALTERNATIVE_CFG(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1) \
> + ALT_NEW_CONTENT(vendor_id_2, errata_id_2, enable_2, new_c_2) \
> + ALT_NEW_CONTENT(vendor_id_3, errata_id_3, enable_3, new_c_3)
> +
> #endif /* __ASSEMBLY__ */
>
> #define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
> @@ -108,6 +125,13 @@
> __ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, IS_ENABLED(CONFIG_k_1), \
> new_c_2, vendor_id_2, errata_id_2, IS_ENABLED(CONFIG_k_2))
>
^ there's also trailing whitespace here that git am complains about.
> +#define _ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
> + new_c_2, vendor_id_2, errata_id_2, CONFIG_k_2, \
> + new_c_3, vendor_id_3, errata_id_3, CONFIG_k_3) \
> + __ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, IS_ENABLED(CONFIG_k_1), \
> + new_c_2, vendor_id_2, errata_id_2, IS_ENABLED(CONFIG_k_2), \
> + new_c_3, vendor_id_3, errata_id_3, IS_ENABLED(CONFIG_k_3))
> +
> #else /* CONFIG_RISCV_ALTERNATIVE */
> #ifdef __ASSEMBLY__
>
> @@ -121,6 +145,9 @@
> #define _ALTERNATIVE_CFG_2(old_c, ...) \
> ALTERNATIVE_CFG old_c
>
^ and here too.
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
[-- Attachment #2: Type: text/plain, Size: 161 bytes --]
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] riscv: alternatives: add 3-config alternative set
2023-03-07 21:31 ` Conor Dooley
@ 2023-03-08 9:34 ` Ben Dooks
0 siblings, 0 replies; 10+ messages in thread
From: Ben Dooks @ 2023-03-08 9:34 UTC (permalink / raw)
To: Conor Dooley
Cc: linux-riscv, palmer, aou, heiko.stuebner, conor.dooley, ajones
On 07/03/2023 21:31, Conor Dooley wrote:
> Hey Ben,
>
> On Tue, Mar 07, 2023 at 08:58:33PM +0000, Ben Dooks wrote:
>> Add a 3-config alternative macro set for cases where there are
>> three different choices for a given erratum. This will be used
>> when we come to patch the issues with SVPBMT and ZICBOM.
>>
>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
>> ---
>> arch/riscv/include/asm/alternative-macros.h | 38 +++++++++++++++++++++
>> 1 file changed, 38 insertions(+)
>>
>> diff --git a/arch/riscv/include/asm/alternative-macros.h b/arch/riscv/include/asm/alternative-macros.h
>> index 51c6867e02f3..8c74b00d707c 100644
>> --- a/arch/riscv/include/asm/alternative-macros.h
>> +++ b/arch/riscv/include/asm/alternative-macros.h
>> @@ -50,8 +50,18 @@
>> ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
>> .endm
>>
>> +.macro ALTERNATIVE_CFG_3 old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
>> + new_c_2, vendor_id_2, errata_id_2, enable_2, \
>> + new_c_3, vendor_id_3, errata_id_3, enable_3
>> + ALTERNATIVE_CFG "\old_c", "\new_c_1", \vendor_id_1, \errata_id_1, \enable_1
>> + ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
>> + ALT_NEW_CONTENT \vendor_id_3, \errata_id_3, \enable_3, \new_c_3
>
> A matter of opinion maybe, but there was a previous ALTERNATIVE_CFG_3
> posting that was implemented using ALTERNATIVE_CFG_2 that, to me, is
> easier to grok:
> https://lore.kernel.org/linux-riscv/20221212115505.36770-2-prabhakar.mahadev-lad.rj@bp.renesas.com/
> It's certainly an easier pattern to replicate for the inevitable
> ALTERNATIVE_CFG_4,5,6,7 etc.
>
> I'm not super bothered either way, but worth considering I think.
>
> Cheers,
> Conor.
I'll have a look, whatever way we need to have this support before
we can add the fixes for zibom fixes in.
>> +.endm
>> +
>> +
>
> btw, here & further down in the patch there's some instances of double
> newlines that automation is gonna whinge about.
>
>> #define __ALTERNATIVE_CFG(...) ALTERNATIVE_CFG __VA_ARGS__
>> #define __ALTERNATIVE_CFG_2(...) ALTERNATIVE_CFG_2 __VA_ARGS__
>> +#define __ALTERNATIVE_CFG_3(...) ALTERNATIVE_CFG_3 __VA_ARGS__
>>
>> #else /* !__ASSEMBLY__ */
>>
>> @@ -98,6 +108,13 @@
>> __ALTERNATIVE_CFG(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1) \
>> ALT_NEW_CONTENT(vendor_id_2, errata_id_2, enable_2, new_c_2)
>>
>> +#define __ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
>> + new_c_2, vendor_id_2, errata_id_2, enable_2, \
>> + new_c_3, vendor_id_3, errata_id_3, enable_3) \
>> + __ALTERNATIVE_CFG(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1) \
>> + ALT_NEW_CONTENT(vendor_id_2, errata_id_2, enable_2, new_c_2) \
>> + ALT_NEW_CONTENT(vendor_id_3, errata_id_3, enable_3, new_c_3)
>> +
>> #endif /* __ASSEMBLY__ */
>>
>> #define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
>> @@ -108,6 +125,13 @@
>> __ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, IS_ENABLED(CONFIG_k_1), \
>> new_c_2, vendor_id_2, errata_id_2, IS_ENABLED(CONFIG_k_2))
>>
> ^ there's also trailing whitespace here that git am complains about.
>
>> +#define _ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
>> + new_c_2, vendor_id_2, errata_id_2, CONFIG_k_2, \
>> + new_c_3, vendor_id_3, errata_id_3, CONFIG_k_3) \
>> + __ALTERNATIVE_CFG_3(old_c, new_c_1, vendor_id_1, errata_id_1, IS_ENABLED(CONFIG_k_1), \
>> + new_c_2, vendor_id_2, errata_id_2, IS_ENABLED(CONFIG_k_2), \
>> + new_c_3, vendor_id_3, errata_id_3, IS_ENABLED(CONFIG_k_3))
>> +
>> #else /* CONFIG_RISCV_ALTERNATIVE */
>> #ifdef __ASSEMBLY__
>>
>> @@ -121,6 +145,9 @@
>> #define _ALTERNATIVE_CFG_2(old_c, ...) \
>> ALTERNATIVE_CFG old_c
>>
> ^ and here too.
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
--
Ben Dooks http://www.codethink.co.uk/
Senior Engineer Codethink - Providing Genius
https://www.codethink.co.uk/privacy.html
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom
2023-03-07 20:58 ` [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom Ben Dooks
@ 2023-03-08 9:35 ` Ben Dooks
2023-03-08 10:13 ` Conor Dooley
2023-03-08 13:19 ` heiko
0 siblings, 2 replies; 10+ messages in thread
From: Ben Dooks @ 2023-03-08 9:35 UTC (permalink / raw)
To: linux-riscv; +Cc: palmer, aou, heiko.stuebner, conor.dooley, ajones
On 07/03/2023 20:58, Ben Dooks wrote:
> If the system uses both ZICBOM and SVPBMT then currently SVPBMT will be
> used for DMA allocated memory even though ZICBOM gives us the cache ops
> to use cached memory and clean/flush them as needed by the DMA code.
>
> Fix this by adding pgprot_dmacoherent() which is used by the allocator
> code to map the dma memory, thus allowing the return of suitably mapped
> memory for any use of dma_alloc_attrs() code. This s uses the added
> riscv_page_dmacoherent() which will work out the correct page flags to
> return using ALT_SVPBMT_ZICBOM() to runtime patch the right result.
>
> Note, we can't just disable SVPBMT as it will be neede for things like
> ioremap() which don't have assoicated cache management operations.
>
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> ---
> arch/riscv/include/asm/errata_list.h | 16 ++++++++++++++++
> arch/riscv/include/asm/pgtable-64.h | 10 ++++++++++
> 2 files changed, 26 insertions(+)
>
> diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
> index fb1a810f3d8c..49ed2e7984a7 100644
> --- a/arch/riscv/include/asm/errata_list.h
> +++ b/arch/riscv/include/asm/errata_list.h
> @@ -62,6 +62,22 @@ asm(ALTERNATIVE_2("li %0, 0\t\nnop", \
> "I"(ALT_SVPBMT_SHIFT), \
> "I"(ALT_THEAD_PBMT_SHIFT))
>
> +#define ALT_SVPBMT_ZICBOM(_val, prot) \
> +asm(ALTERNATIVE_3("li %0, 0\t\nnop", \
> + "li %0, %1\t\nslli %0,%0,%3", 0, \
> + RISCV_ISA_EXT_SVPBMT, CONFIG_RISCV_ISA_SVPBMT, \
> + "li %0, 0\t\nnop", 0, \
> + RISCV_ISA_EXT_ZICBOM, CONFIG_RISCV_ISA_ZICBOM, \
so, I tink this needs to be selected on CONFIG_RISCV_DMA_NONCOHERENT
as just having ZICBOM in the ISA isn't enough to actually use it, you'll
need the dma-noncoherent.o being built to do the cache management.
> + "li %0, %2\t\nslli %0,%0,%4", THEAD_VENDOR_ID, \
> + ERRATA_THEAD_PBMT, CONFIG_ERRATA_THEAD_PBMT) \
> + : "=r"(_val) \
> + : "I"(prot##_SVPBMT >> ALT_SVPBMT_SHIFT), \
> + "I"(prot##_THEAD >> ALT_THEAD_PBMT_SHIFT), \
> + "I"(ALT_SVPBMT_SHIFT), \
> + "I"(ALT_THEAD_PBMT_SHIFT))
> +
> +
> +
> #ifdef CONFIG_ERRATA_THEAD_PBMT
> /*
> * IO/NOCACHE memory types are handled together with svpbmt,
> diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h
> index 42a042c0e13e..e0d2e5fda5a4 100644
> --- a/arch/riscv/include/asm/pgtable-64.h
> +++ b/arch/riscv/include/asm/pgtable-64.h
> @@ -126,10 +126,20 @@ static inline u64 riscv_page_io(void)
> return val;
> }
>
> +static inline u64 riscv_page_dmacoherent(void)
> +{
> + u64 val;
> +
> + ALT_SVPBMT_ZICBOM(val, _PAGE_IO);
> + return val;
> +}
> +
> #define _PAGE_NOCACHE riscv_page_nocache()
> #define _PAGE_IO riscv_page_io()
> #define _PAGE_MTMASK riscv_page_mtmask()
>
> +#define pgprot_dmacoherent(__prot) __pgprot(pgprot_val(__prot) | riscv_page_dmacoherent())
> +
> /* Set of bits to preserve across pte_modify() */
> #define _PAGE_CHG_MASK (~(unsigned long)(_PAGE_PRESENT | _PAGE_READ | \
> _PAGE_WRITE | _PAGE_EXEC | \
--
Ben Dooks http://www.codethink.co.uk/
Senior Engineer Codethink - Providing Genius
https://www.codethink.co.uk/privacy.html
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom
2023-03-08 9:35 ` Ben Dooks
@ 2023-03-08 10:13 ` Conor Dooley
2023-03-08 13:19 ` heiko
1 sibling, 0 replies; 10+ messages in thread
From: Conor Dooley @ 2023-03-08 10:13 UTC (permalink / raw)
To: Ben Dooks; +Cc: linux-riscv, palmer, aou, heiko.stuebner, conor.dooley, ajones
[-- Attachment #1.1: Type: text/plain, Size: 4184 bytes --]
On Wed, Mar 08, 2023 at 09:35:14AM +0000, Ben Dooks wrote:
> On 07/03/2023 20:58, Ben Dooks wrote:
> > If the system uses both ZICBOM and SVPBMT then currently SVPBMT will be
> > used for DMA allocated memory even though ZICBOM gives us the cache ops
> > to use cached memory and clean/flush them as needed by the DMA code.
> >
> > Fix this by adding pgprot_dmacoherent() which is used by the allocator
> > code to map the dma memory, thus allowing the return of suitably mapped
> > memory for any use of dma_alloc_attrs() code. This s uses the added
> > riscv_page_dmacoherent() which will work out the correct page flags to
> > return using ALT_SVPBMT_ZICBOM() to runtime patch the right result.
> >
> > Note, we can't just disable SVPBMT as it will be neede for things like
> > ioremap() which don't have assoicated cache management operations.
> >
> > Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> > ---
> > arch/riscv/include/asm/errata_list.h | 16 ++++++++++++++++
> > arch/riscv/include/asm/pgtable-64.h | 10 ++++++++++
> > 2 files changed, 26 insertions(+)
> >
> > diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
> > index fb1a810f3d8c..49ed2e7984a7 100644
> > --- a/arch/riscv/include/asm/errata_list.h
> > +++ b/arch/riscv/include/asm/errata_list.h
> > @@ -62,6 +62,22 @@ asm(ALTERNATIVE_2("li %0, 0\t\nnop", \
> > "I"(ALT_SVPBMT_SHIFT), \
> > "I"(ALT_THEAD_PBMT_SHIFT))
> > +#define ALT_SVPBMT_ZICBOM(_val, prot) \
> > +asm(ALTERNATIVE_3("li %0, 0\t\nnop", \
> > + "li %0, %1\t\nslli %0,%0,%3", 0, \
> > + RISCV_ISA_EXT_SVPBMT, CONFIG_RISCV_ISA_SVPBMT, \
> > + "li %0, 0\t\nnop", 0, \
> > + RISCV_ISA_EXT_ZICBOM, CONFIG_RISCV_ISA_ZICBOM, \
>
> so, I tink this needs to be selected on CONFIG_RISCV_DMA_NONCOHERENT
> as just having ZICBOM in the ISA isn't enough to actually use it, you'll
> need the dma-noncoherent.o being built to do the cache management.
I think we are okay here w/ ZICBOM, as it selects RISCV_DMA_NONCOHERENT:
config RISCV_ISA_ZICBOM
bool "Zicbom extension support for non-coherent DMA operation"
depends on !XIP_KERNEL && MMU
default y
select RISCV_ALTERNATIVE
select RISCV_DMA_NONCOHERENT
In fact, I think that RISCV_DMA_NONCOHERENT would not be correct here,
as the THEAD CMO erratum selects RISCV_DMA_NONCOHERENT, so its presence
doesn't mean that the kernel supports Zicbom.
> > + "li %0, %2\t\nslli %0,%0,%4", THEAD_VENDOR_ID, \
> > + ERRATA_THEAD_PBMT, CONFIG_ERRATA_THEAD_PBMT) \
> > + : "=r"(_val) \
> > + : "I"(prot##_SVPBMT >> ALT_SVPBMT_SHIFT), \
> > + "I"(prot##_THEAD >> ALT_THEAD_PBMT_SHIFT), \
> > + "I"(ALT_SVPBMT_SHIFT), \
> > + "I"(ALT_THEAD_PBMT_SHIFT))
> > +
> > +
> > +
> > #ifdef CONFIG_ERRATA_THEAD_PBMT
> > /*
> > * IO/NOCACHE memory types are handled together with svpbmt,
> > diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h
> > index 42a042c0e13e..e0d2e5fda5a4 100644
> > --- a/arch/riscv/include/asm/pgtable-64.h
> > +++ b/arch/riscv/include/asm/pgtable-64.h
> > @@ -126,10 +126,20 @@ static inline u64 riscv_page_io(void)
> > return val;
> > }
> > +static inline u64 riscv_page_dmacoherent(void)
> > +{
> > + u64 val;
> > +
> > + ALT_SVPBMT_ZICBOM(val, _PAGE_IO);
> > + return val;
> > +}
> > +
> > #define _PAGE_NOCACHE riscv_page_nocache()
> > #define _PAGE_IO riscv_page_io()
> > #define _PAGE_MTMASK riscv_page_mtmask()
> > +#define pgprot_dmacoherent(__prot) __pgprot(pgprot_val(__prot) | riscv_page_dmacoherent())
> > +
> > /* Set of bits to preserve across pte_modify() */
> > #define _PAGE_CHG_MASK (~(unsigned long)(_PAGE_PRESENT | _PAGE_READ | \
> > _PAGE_WRITE | _PAGE_EXEC | \
>
> --
> Ben Dooks http://www.codethink.co.uk/
> Senior Engineer Codethink - Providing Genius
>
> https://www.codethink.co.uk/privacy.html
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
[-- Attachment #2: Type: text/plain, Size: 161 bytes --]
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom
2023-03-08 9:35 ` Ben Dooks
2023-03-08 10:13 ` Conor Dooley
@ 2023-03-08 13:19 ` heiko
2023-03-08 14:48 ` Ben Dooks
1 sibling, 1 reply; 10+ messages in thread
From: heiko @ 2023-03-08 13:19 UTC (permalink / raw)
To: linux-riscv; +Cc: palmer, aou, conor.dooley, ajones, Ben Dooks
Am Mittwoch, 8. März 2023, 10:35:14 CET schrieb Ben Dooks:
> On 07/03/2023 20:58, Ben Dooks wrote:
> > If the system uses both ZICBOM and SVPBMT then currently SVPBMT will be
> > used for DMA allocated memory even though ZICBOM gives us the cache ops
> > to use cached memory and clean/flush them as needed by the DMA code.
> >
> > Fix this by adding pgprot_dmacoherent() which is used by the allocator
> > code to map the dma memory, thus allowing the return of suitably mapped
> > memory for any use of dma_alloc_attrs() code. This s uses the added
> > riscv_page_dmacoherent() which will work out the correct page flags to
> > return using ALT_SVPBMT_ZICBOM() to runtime patch the right result.
> >
> > Note, we can't just disable SVPBMT as it will be neede for things like
> > ioremap() which don't have assoicated cache management operations.
> >
> > Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> > ---
> > arch/riscv/include/asm/errata_list.h | 16 ++++++++++++++++
> > arch/riscv/include/asm/pgtable-64.h | 10 ++++++++++
> > 2 files changed, 26 insertions(+)
> >
> > diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
> > index fb1a810f3d8c..49ed2e7984a7 100644
> > --- a/arch/riscv/include/asm/errata_list.h
> > +++ b/arch/riscv/include/asm/errata_list.h
> > @@ -62,6 +62,22 @@ asm(ALTERNATIVE_2("li %0, 0\t\nnop", \
> > "I"(ALT_SVPBMT_SHIFT), \
> > "I"(ALT_THEAD_PBMT_SHIFT))
> >
> > +#define ALT_SVPBMT_ZICBOM(_val, prot) \
> > +asm(ALTERNATIVE_3("li %0, 0\t\nnop", \
> > + "li %0, %1\t\nslli %0,%0,%3", 0, \
> > + RISCV_ISA_EXT_SVPBMT, CONFIG_RISCV_ISA_SVPBMT, \
> > + "li %0, 0\t\nnop", 0, \
> > + RISCV_ISA_EXT_ZICBOM, CONFIG_RISCV_ISA_ZICBOM, \
>
> so, I tink this needs to be selected on CONFIG_RISCV_DMA_NONCOHERENT
> as just having ZICBOM in the ISA isn't enough to actually use it, you'll
> need the dma-noncoherent.o being built to do the cache management.
CONFIG_RISCV_ISA_ZICBOM does a
select RISCV_DMA_NONCOHERENT
same as CONFIG_ERRATA_THEAD_CMO
So dma-noncoherent gets build if you enable at least one of them.
What am I missing?
> > + "li %0, %2\t\nslli %0,%0,%4", THEAD_VENDOR_ID, \
> > + ERRATA_THEAD_PBMT, CONFIG_ERRATA_THEAD_PBMT) \
> > + : "=r"(_val) \
> > + : "I"(prot##_SVPBMT >> ALT_SVPBMT_SHIFT), \
> > + "I"(prot##_THEAD >> ALT_THEAD_PBMT_SHIFT), \
> > + "I"(ALT_SVPBMT_SHIFT), \
> > + "I"(ALT_THEAD_PBMT_SHIFT))
> > +
> > +
> > +
> > #ifdef CONFIG_ERRATA_THEAD_PBMT
> > /*
> > * IO/NOCACHE memory types are handled together with svpbmt,
> > diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h
> > index 42a042c0e13e..e0d2e5fda5a4 100644
> > --- a/arch/riscv/include/asm/pgtable-64.h
> > +++ b/arch/riscv/include/asm/pgtable-64.h
> > @@ -126,10 +126,20 @@ static inline u64 riscv_page_io(void)
> > return val;
> > }
> >
> > +static inline u64 riscv_page_dmacoherent(void)
> > +{
> > + u64 val;
> > +
> > + ALT_SVPBMT_ZICBOM(val, _PAGE_IO);
> > + return val;
> > +}
> > +
> > #define _PAGE_NOCACHE riscv_page_nocache()
> > #define _PAGE_IO riscv_page_io()
> > #define _PAGE_MTMASK riscv_page_mtmask()
> >
> > +#define pgprot_dmacoherent(__prot) __pgprot(pgprot_val(__prot) | riscv_page_dmacoherent())
> > +
> > /* Set of bits to preserve across pte_modify() */
> > #define _PAGE_CHG_MASK (~(unsigned long)(_PAGE_PRESENT | _PAGE_READ | \
> > _PAGE_WRITE | _PAGE_EXEC | \
>
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom
2023-03-08 13:19 ` heiko
@ 2023-03-08 14:48 ` Ben Dooks
2023-03-24 17:30 ` Ben Dooks
0 siblings, 1 reply; 10+ messages in thread
From: Ben Dooks @ 2023-03-08 14:48 UTC (permalink / raw)
To: heiko, linux-riscv; +Cc: palmer, aou, conor.dooley, ajones
On 08/03/2023 13:19, heiko@sntech.de wrote:
> Am Mittwoch, 8. März 2023, 10:35:14 CET schrieb Ben Dooks:
>> On 07/03/2023 20:58, Ben Dooks wrote:
>>> If the system uses both ZICBOM and SVPBMT then currently SVPBMT will be
>>> used for DMA allocated memory even though ZICBOM gives us the cache ops
>>> to use cached memory and clean/flush them as needed by the DMA code.
>>>
>>> Fix this by adding pgprot_dmacoherent() which is used by the allocator
>>> code to map the dma memory, thus allowing the return of suitably mapped
>>> memory for any use of dma_alloc_attrs() code. This s uses the added
>>> riscv_page_dmacoherent() which will work out the correct page flags to
>>> return using ALT_SVPBMT_ZICBOM() to runtime patch the right result.
>>>
>>> Note, we can't just disable SVPBMT as it will be neede for things like
>>> ioremap() which don't have assoicated cache management operations.
>>>
>>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
>>> ---
>>> arch/riscv/include/asm/errata_list.h | 16 ++++++++++++++++
>>> arch/riscv/include/asm/pgtable-64.h | 10 ++++++++++
>>> 2 files changed, 26 insertions(+)
>>>
>>> diff --git a/arch/riscv/include/asm/errata_list.h b/arch/riscv/include/asm/errata_list.h
>>> index fb1a810f3d8c..49ed2e7984a7 100644
>>> --- a/arch/riscv/include/asm/errata_list.h
>>> +++ b/arch/riscv/include/asm/errata_list.h
>>> @@ -62,6 +62,22 @@ asm(ALTERNATIVE_2("li %0, 0\t\nnop", \
>>> "I"(ALT_SVPBMT_SHIFT), \
>>> "I"(ALT_THEAD_PBMT_SHIFT))
>>>
>>> +#define ALT_SVPBMT_ZICBOM(_val, prot) \
>>> +asm(ALTERNATIVE_3("li %0, 0\t\nnop", \
>>> + "li %0, %1\t\nslli %0,%0,%3", 0, \
>>> + RISCV_ISA_EXT_SVPBMT, CONFIG_RISCV_ISA_SVPBMT, \
>>> + "li %0, 0\t\nnop", 0, \
>>> + RISCV_ISA_EXT_ZICBOM, CONFIG_RISCV_ISA_ZICBOM, \
>>
>> so, I tink this needs to be selected on CONFIG_RISCV_DMA_NONCOHERENT
>> as just having ZICBOM in the ISA isn't enough to actually use it, you'll
>> need the dma-noncoherent.o being built to do the cache management.
>
> CONFIG_RISCV_ISA_ZICBOM does a
> select RISCV_DMA_NONCOHERENT
> same as CONFIG_ERRATA_THEAD_CMO
>
> So dma-noncoherent gets build if you enable at least one of them.
> What am I missing?
Ah, I think (and Connor also pointed out) that currently the config
is selceted from either user of the dma-noncoherent.c code. I think
thereore we can probably keep this as is.
--
Ben Dooks http://www.codethink.co.uk/
Senior Engineer Codethink - Providing Genius
https://www.codethink.co.uk/privacy.html
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom
2023-03-08 14:48 ` Ben Dooks
@ 2023-03-24 17:30 ` Ben Dooks
0 siblings, 0 replies; 10+ messages in thread
From: Ben Dooks @ 2023-03-24 17:30 UTC (permalink / raw)
To: heiko, linux-riscv; +Cc: palmer, aou, conor.dooley, ajones
On 08/03/2023 14:48, Ben Dooks wrote:
> On 08/03/2023 13:19, heiko@sntech.de wrote:
>> Am Mittwoch, 8. März 2023, 10:35:14 CET schrieb Ben Dooks:
>>> On 07/03/2023 20:58, Ben Dooks wrote:
>>>> If the system uses both ZICBOM and SVPBMT then currently SVPBMT will be
>>>> used for DMA allocated memory even though ZICBOM gives us the cache ops
>>>> to use cached memory and clean/flush them as needed by the DMA code.
>>>>
>>>> Fix this by adding pgprot_dmacoherent() which is used by the allocator
>>>> code to map the dma memory, thus allowing the return of suitably mapped
>>>> memory for any use of dma_alloc_attrs() code. This s uses the added
>>>> riscv_page_dmacoherent() which will work out the correct page flags to
>>>> return using ALT_SVPBMT_ZICBOM() to runtime patch the right result.
>>>>
>>>> Note, we can't just disable SVPBMT as it will be neede for things like
>>>> ioremap() which don't have assoicated cache management operations.
>>>>
>>>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
>>>> ---
>>>> arch/riscv/include/asm/errata_list.h | 16 ++++++++++++++++
>>>> arch/riscv/include/asm/pgtable-64.h | 10 ++++++++++
>>>> 2 files changed, 26 insertions(+)
>>>>
>>>> diff --git a/arch/riscv/include/asm/errata_list.h
>>>> b/arch/riscv/include/asm/errata_list.h
>>>> index fb1a810f3d8c..49ed2e7984a7 100644
>>>> --- a/arch/riscv/include/asm/errata_list.h
>>>> +++ b/arch/riscv/include/asm/errata_list.h
>>>> @@ -62,6 +62,22 @@ asm(ALTERNATIVE_2("li %0,
>>>> 0\t\nnop", \
>>>> "I"(ALT_SVPBMT_SHIFT), \
>>>> "I"(ALT_THEAD_PBMT_SHIFT))
>>>> +#define ALT_SVPBMT_ZICBOM(_val, prot) \
>>>> +asm(ALTERNATIVE_3("li %0, 0\t\nnop", \
>>>> + "li %0, %1\t\nslli %0,%0,%3", 0, \
>>>> + RISCV_ISA_EXT_SVPBMT, CONFIG_RISCV_ISA_SVPBMT, \
>>>> + "li %0, 0\t\nnop", 0, \
>>>> + RISCV_ISA_EXT_ZICBOM, CONFIG_RISCV_ISA_ZICBOM, \
>>>
>>> so, I tink this needs to be selected on CONFIG_RISCV_DMA_NONCOHERENT
>>> as just having ZICBOM in the ISA isn't enough to actually use it, you'll
>>> need the dma-noncoherent.o being built to do the cache management.
>>
>> CONFIG_RISCV_ISA_ZICBOM does a
>> select RISCV_DMA_NONCOHERENT
>> same as CONFIG_ERRATA_THEAD_CMO
>>
>> So dma-noncoherent gets build if you enable at least one of them.
>> What am I missing?
>
> Ah, I think (and Connor also pointed out) that currently the config
> is selceted from either user of the dma-noncoherent.c code. I think
> thereore we can probably keep this as is
After a discussion with Arnd it looks like I was using the DMA api
wrong and was after dma_alloc_noncoherent or similar.
These patches can be dropped
--
Ben Dooks http://www.codethink.co.uk/
Senior Engineer Codethink - Providing Genius
https://www.codethink.co.uk/privacy.html
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-03-24 17:30 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-07 20:58 ZICBOM and SVPBMT in same system Ben Dooks
2023-03-07 20:58 ` [PATCH 1/2] riscv: alternatives: add 3-config alternative set Ben Dooks
2023-03-07 21:31 ` Conor Dooley
2023-03-08 9:34 ` Ben Dooks
2023-03-07 20:58 ` [PATCH 2/2] riscv: mm: add pgprot_dmacoherent for zicbom Ben Dooks
2023-03-08 9:35 ` Ben Dooks
2023-03-08 10:13 ` Conor Dooley
2023-03-08 13:19 ` heiko
2023-03-08 14:48 ` Ben Dooks
2023-03-24 17:30 ` Ben Dooks
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.