Message ID | 20230307205834.1426289-2-ben.dooks@codethink.co.uk (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | [1/2] riscv: alternatives: add 3-config alternative set | expand |
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.
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
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
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(+)