]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
riscv: Add xmipsexectl instructions
authorAleksa Paunovic <aleksa.paunovic@htecgroup.com>
Thu, 24 Jul 2025 15:23:27 +0000 (17:23 +0200)
committerPaul Walmsley <pjw@kernel.org>
Fri, 19 Sep 2025 16:33:56 +0000 (10:33 -0600)
Add xmipsexectl instruction opcodes. This includes the MIPS.PAUSE,
MIPS.EHB, and MIPS.IHB instructions.

Signed-off-by: Aleksa Paunovic <aleksa.paunovic@htecgroup.com>
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Link: https://lore.kernel.org/r/20250724-p8700-pause-v5-3-a6cbbe1c3412@htecgroup.com
Signed-off-by: Paul Walmsley <pjw@kernel.org>
arch/riscv/include/asm/vendor_extensions/mips.h

index 133e55985d827ce7d6057004b590bdcbbdb1ec8c..ea8ca747d691df2e9ee7e5360f800fbdccfe3945 100644 (file)
@@ -15,4 +15,23 @@ struct riscv_isa_vendor_ext_data_list;
 extern struct riscv_isa_vendor_ext_data_list riscv_isa_vendor_ext_list_mips;
 #endif
 
+/* Extension specific instructions */
+
+/*
+ * All of the xmipsexectl extension instructions are
+ * ‘hint’ encodings of the SLLI instruction,
+ * with rd = 0, rs1 = 0 and imm = 1 for IHB, imm = 3 for EHB,
+ * and imm = 5 for PAUSE.
+ * MIPS.PAUSE is an alternative opcode which is implemented to have the
+ * same behavior as PAUSE on some MIPS RISCV cores.
+ * MIPS.EHB clears all execution hazards before allowing
+ * any subsequent instructions to execute.
+ * MIPS.IHB clears all instruction hazards before
+ * allowing any subsequent instructions to fetch.
+ */
+
+#define MIPS_PAUSE     ".4byte 0x00501013\n\t"
+#define MIPS_EHB       ".4byte 0x00301013\n\t"
+#define MIPS_IHB       ".4byte 0x00101013\n\t"
+
 #endif // _ASM_RISCV_VENDOR_EXTENSIONS_MIPS_H