]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
riscv: add ISA extension parsing for Zilsd and Zclsd
authorPincheng Wang <pincheng.plct@isrc.iscas.ac.cn>
Tue, 26 Aug 2025 16:29:36 +0000 (00:29 +0800)
committerPaul Walmsley <pjw@kernel.org>
Fri, 19 Dec 2025 07:18:34 +0000 (00:18 -0700)
Add parsing for Zilsd and Zclsd ISA extensions which were ratified in
commit f88abf1 ("Integrating load/store pair for RV32 with the
main manual") of the riscv-isa-manual.

Signed-off-by: Pincheng Wang <pincheng.plct@isrc.iscas.ac.cn>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Link: https://patch.msgid.link/20250826162939.1494021-3-pincheng.plct@isrc.iscas.ac.cn
[pjw@kernel.org: cleaned up checkpatch issues, whitespace; updated to apply]
Signed-off-by: Paul Walmsley <pjw@kernel.org>
arch/riscv/include/asm/hwcap.h
arch/riscv/kernel/cpufeature.c

index dfe57b215e6c9afeaeb132f46563c566fab2e301..4369a23385413ed8020d30a288f8bb45f69304b8 100644 (file)
 #define RISCV_ISA_EXT_ZICBOP           99
 #define RISCV_ISA_EXT_SVRSW60T59B      100
 #define RISCV_ISA_EXT_ZALASR           101
+#define RISCV_ISA_EXT_ZILSD            102
+#define RISCV_ISA_EXT_ZCLSD            103
 
 #define RISCV_ISA_EXT_XLINUXENVCFG     127
 
index b057362f8fb5f92d9a608b223666831d769a805c..c05b11596c19078fb41d0c83986b87183f147526 100644 (file)
@@ -242,6 +242,28 @@ static int riscv_ext_zcf_validate(const struct riscv_isa_ext_data *data,
        return -EPROBE_DEFER;
 }
 
+static int riscv_ext_zilsd_validate(const struct riscv_isa_ext_data *data,
+                                   const unsigned long *isa_bitmap)
+{
+       if (IS_ENABLED(CONFIG_64BIT))
+               return -EINVAL;
+
+       return 0;
+}
+
+static int riscv_ext_zclsd_validate(const struct riscv_isa_ext_data *data,
+                                   const unsigned long *isa_bitmap)
+{
+       if (IS_ENABLED(CONFIG_64BIT))
+               return -EINVAL;
+
+       if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZILSD) &&
+           __riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZCA))
+               return 0;
+
+       return -EPROBE_DEFER;
+}
+
 static int riscv_vector_f_validate(const struct riscv_isa_ext_data *data,
                                   const unsigned long *isa_bitmap)
 {
@@ -484,6 +506,8 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
        __RISCV_ISA_EXT_DATA_VALIDATE(zcd, RISCV_ISA_EXT_ZCD, riscv_ext_zcd_validate),
        __RISCV_ISA_EXT_DATA_VALIDATE(zcf, RISCV_ISA_EXT_ZCF, riscv_ext_zcf_validate),
        __RISCV_ISA_EXT_DATA_VALIDATE(zcmop, RISCV_ISA_EXT_ZCMOP, riscv_ext_zca_depends),
+       __RISCV_ISA_EXT_DATA_VALIDATE(zclsd, RISCV_ISA_EXT_ZCLSD, riscv_ext_zclsd_validate),
+       __RISCV_ISA_EXT_DATA_VALIDATE(zilsd, RISCV_ISA_EXT_ZILSD, riscv_ext_zilsd_validate),
        __RISCV_ISA_EXT_DATA(zba, RISCV_ISA_EXT_ZBA),
        __RISCV_ISA_EXT_DATA(zbb, RISCV_ISA_EXT_ZBB),
        __RISCV_ISA_EXT_DATA(zbc, RISCV_ISA_EXT_ZBC),