[PATCH 1/2] riscv: alternatives: add 3-config alternative set

Ben Dooks ben.dooks at codethink.co.uk
Wed Mar 8 01:34:08 PST 2023


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 at 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 at 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




More information about the linux-riscv mailing list