]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
riscv: cpufeature: call match_isa_ext() for single-letter extensions
authorAndy Chiu <andy.chiu@sifive.com>
Thu, 9 May 2024 16:26:53 +0000 (00:26 +0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Thu, 30 May 2024 21:33:06 +0000 (14:33 -0700)
Single-letter extensions may also imply multiple subextensions. For
example, Vector extension implies zve64d, and zve64d implies zve64f.

Extension parsing for "riscv,isa-extensions" has the ability to resolve
the dependency by calling match_isa_ext(). This patch makes deprecated
parser call the same function for single letter extensions.

Signed-off-by: Andy Chiu <andy.chiu@sifive.com>
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Link: https://lore.kernel.org/r/20240510-zve-detection-v5-3-0711bdd26c12@sifive.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/kernel/cpufeature.c

index ccba08548004001b11e9faea77fe7d78d19b6031..a6287b73a8468a0768525feeac57a9d18bb63192 100644 (file)
@@ -468,16 +468,15 @@ static void __init riscv_parse_isa_string(unsigned long *this_hwcap, struct risc
 
                if (unlikely(ext_err))
                        continue;
+
+               for (int i = 0; i < riscv_isa_ext_count; i++)
+                       match_isa_ext(&riscv_isa_ext[i], ext, ext_end, isainfo);
+
                if (!ext_long) {
                        int nr = tolower(*ext) - 'a';
 
-                       if (riscv_isa_extension_check(nr)) {
+                       if (riscv_isa_extension_check(nr))
                                *this_hwcap |= isa2hwcap[nr];
-                               set_bit(nr, isainfo->isa);
-                       }
-               } else {
-                       for (int i = 0; i < riscv_isa_ext_count; i++)
-                               match_isa_ext(&riscv_isa_ext[i], ext, ext_end, isainfo);
                }
        }
 }