On Mon, Dec 9, 2024 at 8:36 PM Mark Brown broonie@kernel.org wrote:
On Mon, Dec 09, 2024 at 06:52:37PM +0800, Weizhao Ouyang wrote:
When using svcr_in to check ZA and Streaming Mode, we should make sure that the value in x2 is correct, otherwise it may trigger an Illegal instruction if FEAT_SVE and !FEAT_SME.
// Set SVCR if we're doing SME
cbz x1, 1f adrp x2, svcr_in ldr x2, [x2, :lo12:svcr_in]
cbz x1, 1f msr S3_3_C4_C2_2, x2
This is against an older verison of the code so wouldn't apply now. It's not also checking the value of SVCR, this is checking the SME flag passed in via x1. You can see that the SVCR value is loaded into x2 but the check is against x1.
Hi Mark,
This patch aims to fix the second check (SVCR_ZA_SHIFT) instead of the first one (the x1 SME flag you're referring to):
// Load ZA and ZT0 if enabled - uses x12 as scratch due to SME LDR tbz x2, #SVCR_ZA_SHIFT, 1f mov w12, #0 ldr x2, =za_in 2: _ldr_za 12, 2
If SME disabled, x2 will not have an expected value.
BR, Weizhao