]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
riscv: alternatives: Rename errata_id to patch_id
authorAndrew Jones <ajones@ventanamicro.com>
Fri, 24 Feb 2023 15:45:59 +0000 (16:45 +0100)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 15 Mar 2023 03:51:23 +0000 (20:51 -0700)
Alternatives are used for both errata and cpufeatures. Use a more
generic name, 'patch_id', as in "ID of code patching site", to
avoid confusion when alternatives are used for cpufeatures.

Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Heiko Stuebner <heiko.stuebner@vrull.eu>
Link: https://lore.kernel.org/r/20230224154601.88163-5-ajones@ventanamicro.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/Kconfig
arch/riscv/errata/sifive/errata.c
arch/riscv/errata/thead/errata.c
arch/riscv/include/asm/alternative-macros.h
arch/riscv/include/asm/alternative.h
arch/riscv/kernel/cpufeature.c

index ab78f677f1878025972ab0cb890e5d17fa98585d..69797e6eed6f8ed425e764b9a55cd5ef112f9aaa 100644 (file)
@@ -378,9 +378,9 @@ config RISCV_ALTERNATIVE
        depends on !XIP_KERNEL
        help
          This Kconfig allows the kernel to automatically patch the
-         errata required by the execution platform at run time. The
-         code patching overhead is minimal, as it's only done once
-         at boot and once on each module load.
+         erratum or cpufeature required by the execution platform at run
+         time. The code patching overhead is minimal, as it's only done
+         once at boot and once on each module load.
 
 config RISCV_ALTERNATIVE_EARLY
        bool
index 69dfb38e4f068fb075092239d37cc42159c19774..7fa7b8b6a8119c98a816652878d1af85407e0ab3 100644 (file)
@@ -101,12 +101,12 @@ void __init_or_module sifive_errata_patch_func(struct alt_entry *begin,
        for (alt = begin; alt < end; alt++) {
                if (alt->vendor_id != SIFIVE_VENDOR_ID)
                        continue;
-               if (alt->errata_id >= ERRATA_SIFIVE_NUMBER) {
-                       WARN(1, "This errata id:%d is not in kernel errata list", alt->errata_id);
+               if (alt->patch_id >= ERRATA_SIFIVE_NUMBER) {
+                       WARN(1, "This errata id:%d is not in kernel errata list", alt->patch_id);
                        continue;
                }
 
-               tmp = (1U << alt->errata_id);
+               tmp = (1U << alt->patch_id);
                if (cpu_req_errata & tmp) {
                        mutex_lock(&text_mutex);
                        patch_text_nosync(ALT_OLD_PTR(alt), ALT_ALT_PTR(alt),
index 3b96a06d3c54461b4e5ad22046fb945d5e5cd106..7e8d50ebb71aba70d15bbb69b0fe740d8eec9656 100644 (file)
@@ -93,10 +93,10 @@ void __init_or_module thead_errata_patch_func(struct alt_entry *begin, struct al
        for (alt = begin; alt < end; alt++) {
                if (alt->vendor_id != THEAD_VENDOR_ID)
                        continue;
-               if (alt->errata_id >= ERRATA_THEAD_NUMBER)
+               if (alt->patch_id >= ERRATA_THEAD_NUMBER)
                        continue;
 
-               tmp = (1U << alt->errata_id);
+               tmp = (1U << alt->patch_id);
                if (cpu_req_errata & tmp) {
                        oldptr = ALT_OLD_PTR(alt);
                        altptr = ALT_ALT_PTR(alt);
index 51c6867e02f3b31a76832d4ea32025c7730af57f..993a44a8fdacfbcf4a08ccc0f833b21f93925d49 100644 (file)
@@ -6,18 +6,18 @@
 
 #ifdef __ASSEMBLY__
 
-.macro ALT_ENTRY oldptr newptr vendor_id errata_id new_len
+.macro ALT_ENTRY oldptr newptr vendor_id patch_id new_len
        .4byte \oldptr - .
        .4byte \newptr - .
        .2byte \vendor_id
        .2byte \new_len
-       .4byte \errata_id
+       .4byte \patch_id
 .endm
 
-.macro ALT_NEW_CONTENT vendor_id, errata_id, enable = 1, new_c : vararg
+.macro ALT_NEW_CONTENT vendor_id, patch_id, enable = 1, new_c : vararg
        .if \enable
        .pushsection .alternative, "a"
-       ALT_ENTRY 886b, 888f, \vendor_id, \errata_id, 889f - 888f
+       ALT_ENTRY 886b, 888f, \vendor_id, \patch_id, 889f - 888f
        .popsection
        .subsection 1
 888 :
@@ -33,7 +33,7 @@
        .endif
 .endm
 
-.macro ALTERNATIVE_CFG old_c, new_c, vendor_id, errata_id, enable
+.macro ALTERNATIVE_CFG old_c, new_c, vendor_id, patch_id, enable
 886 :
        .option push
        .option norvc
        \old_c
        .option pop
 887 :
-       ALT_NEW_CONTENT \vendor_id, \errata_id, \enable, \new_c
+       ALT_NEW_CONTENT \vendor_id, \patch_id, \enable, \new_c
 .endm
 
-.macro ALTERNATIVE_CFG_2 old_c, new_c_1, vendor_id_1, errata_id_1, enable_1,   \
-                               new_c_2, vendor_id_2, errata_id_2, enable_2
-       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
+.macro ALTERNATIVE_CFG_2 old_c, new_c_1, vendor_id_1, patch_id_1, enable_1,    \
+                               new_c_2, vendor_id_2, patch_id_2, enable_2
+       ALTERNATIVE_CFG "\old_c", "\new_c_1", \vendor_id_1, \patch_id_1, \enable_1
+       ALT_NEW_CONTENT \vendor_id_2, \patch_id_2, \enable_2, \new_c_2
 .endm
 
 #define __ALTERNATIVE_CFG(...)         ALTERNATIVE_CFG __VA_ARGS__
 #include <asm/asm.h>
 #include <linux/stringify.h>
 
-#define ALT_ENTRY(oldptr, newptr, vendor_id, errata_id, newlen)                \
+#define ALT_ENTRY(oldptr, newptr, vendor_id, patch_id, newlen)         \
        ".4byte ((" oldptr ") - .) \n"                                  \
        ".4byte ((" newptr ") - .) \n"                                  \
        ".2byte " vendor_id "\n"                                        \
        ".2byte " newlen "\n"                                           \
-       ".4byte " errata_id "\n"
+       ".4byte " patch_id "\n"
 
-#define ALT_NEW_CONTENT(vendor_id, errata_id, enable, new_c)           \
+#define ALT_NEW_CONTENT(vendor_id, patch_id, enable, new_c)            \
        ".if " __stringify(enable) " == 1\n"                            \
        ".pushsection .alternative, \"a\"\n"                            \
-       ALT_ENTRY("886b", "888f", __stringify(vendor_id), __stringify(errata_id), "889f - 888f") \
+       ALT_ENTRY("886b", "888f", __stringify(vendor_id), __stringify(patch_id), "889f - 888f") \
        ".popsection\n"                                                 \
        ".subsection 1\n"                                               \
        "888 :\n"                                                       \
@@ -83,7 +83,7 @@
        ".previous\n"                                                   \
        ".endif\n"
 
-#define __ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, enable)  \
+#define __ALTERNATIVE_CFG(old_c, new_c, vendor_id, patch_id, enable)   \
        "886 :\n"                                                       \
        ".option push\n"                                                \
        ".option norvc\n"                                               \
        old_c "\n"                                                      \
        ".option pop\n"                                                 \
        "887 :\n"                                                       \
-       ALT_NEW_CONTENT(vendor_id, errata_id, enable, new_c)
+       ALT_NEW_CONTENT(vendor_id, patch_id, enable, new_c)
 
-#define __ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, enable_1,        \
-                                  new_c_2, vendor_id_2, errata_id_2, enable_2) \
-       __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_2(old_c, new_c_1, vendor_id_1, patch_id_1, enable_1, \
+                                  new_c_2, vendor_id_2, patch_id_2, enable_2)  \
+       __ALTERNATIVE_CFG(old_c, new_c_1, vendor_id_1, patch_id_1, enable_1)    \
+       ALT_NEW_CONTENT(vendor_id_2, patch_id_2, enable_2, new_c_2)
 
 #endif /* __ASSEMBLY__ */
 
-#define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
-       __ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, IS_ENABLED(CONFIG_k))
+#define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, patch_id, CONFIG_k)  \
+       __ALTERNATIVE_CFG(old_c, new_c, vendor_id, patch_id, IS_ENABLED(CONFIG_k))
 
-#define _ALTERNATIVE_CFG_2(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)                \
-       __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_2(old_c, new_c_1, vendor_id_1, patch_id_1, CONFIG_k_1,                \
+                                 new_c_2, vendor_id_2, patch_id_2, CONFIG_k_2)         \
+       __ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, patch_id_1, IS_ENABLED(CONFIG_k_1),    \
+                                  new_c_2, vendor_id_2, patch_id_2, IS_ENABLED(CONFIG_k_2))
 
 #else /* CONFIG_RISCV_ALTERNATIVE */
 #ifdef __ASSEMBLY__
 
 /*
  * Usage:
- *   ALTERNATIVE(old_content, new_content, vendor_id, errata_id, CONFIG_k)
+ *   ALTERNATIVE(old_content, new_content, vendor_id, patch_id, CONFIG_k)
  * in the assembly code. Otherwise,
- *   asm(ALTERNATIVE(old_content, new_content, vendor_id, errata_id, CONFIG_k));
+ *   asm(ALTERNATIVE(old_content, new_content, vendor_id, patch_id, CONFIG_k));
  *
  * old_content: The old content which is probably replaced with new content.
  * new_content: The new content.
  * vendor_id: The CPU vendor ID.
- * errata_id: The errata ID.
- * CONFIG_k: The Kconfig of this errata. When Kconfig is disabled, the old
+ * patch_id: The patch ID (erratum ID or cpufeature ID).
+ * CONFIG_k: The Kconfig of this patch ID. When Kconfig is disabled, the old
  *          content will alwyas be executed.
  */
-#define ALTERNATIVE(old_content, new_content, vendor_id, errata_id, CONFIG_k) \
-       _ALTERNATIVE_CFG(old_content, new_content, vendor_id, errata_id, CONFIG_k)
+#define ALTERNATIVE(old_content, new_content, vendor_id, patch_id, CONFIG_k) \
+       _ALTERNATIVE_CFG(old_content, new_content, vendor_id, patch_id, CONFIG_k)
 
 /*
  * A vendor wants to replace an old_content, but another vendor has used
  * on the following sample code and then replace ALTERNATIVE() with
  * ALTERNATIVE_2() to append its customized content.
  */
-#define ALTERNATIVE_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)         \
-       _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_2(old_content, new_content_1, vendor_id_1, patch_id_1, CONFIG_k_1,         \
+                                  new_content_2, vendor_id_2, patch_id_2, CONFIG_k_2)          \
+       _ALTERNATIVE_CFG_2(old_content, new_content_1, vendor_id_1, patch_id_1, CONFIG_k_1,     \
+                                       new_content_2, vendor_id_2, patch_id_2, CONFIG_k_2)
 
 #endif
index 3beef400a9714da74a82d90232f9d956fed701ce..c8dea9e9431099682a1ec4cc688cf87cb74cf11c 100644 (file)
@@ -36,9 +36,9 @@ void riscv_alternative_fix_offsets(void *alt_ptr, unsigned int len,
 struct alt_entry {
        s32 old_offset;         /* offset relative to original instruction or data  */
        s32 alt_offset;         /* offset relative to replacement instruction or data */
-       u16 vendor_id;          /* cpu vendor id */
+       u16 vendor_id;          /* CPU vendor ID */
        u16 alt_len;            /* The replacement size */
-       u32 errata_id;          /* The errata id */
+       u32 patch_id;           /* The patch ID (erratum ID or cpufeature ID) */
 };
 
 void sifive_errata_patch_func(struct alt_entry *begin, struct alt_entry *end,
index 59d58ee0f68d6db2fa8799a96f849edd99d793e7..059db20b28ca28f333db05723e4262e546d13ea2 100644 (file)
@@ -282,13 +282,13 @@ void __init_or_module riscv_cpufeature_patch_func(struct alt_entry *begin,
        for (alt = begin; alt < end; alt++) {
                if (alt->vendor_id != 0)
                        continue;
-               if (alt->errata_id >= RISCV_ISA_EXT_MAX) {
+               if (alt->patch_id >= RISCV_ISA_EXT_MAX) {
                        WARN(1, "This extension id:%d is not in ISA extension list",
-                               alt->errata_id);
+                               alt->patch_id);
                        continue;
                }
 
-               if (!__riscv_isa_extension_available(NULL, alt->errata_id))
+               if (!__riscv_isa_extension_available(NULL, alt->patch_id))
                        continue;
 
                oldptr = ALT_OLD_PTR(alt);