* [RFC v1 0/5] Add some validation for vector, vector crypto and fp stuff
@ 2024-10-02 16:10 Conor Dooley
2024-10-02 16:10 ` [RFC v1 1/5] RISC-V: add vector crypto extension validation checks Conor Dooley
` (4 more replies)
0 siblings, 5 replies; 16+ messages in thread
From: Conor Dooley @ 2024-10-02 16:10 UTC (permalink / raw)
To: linux-riscv
Cc: conor, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
From: Conor Dooley <conor.dooley@microchip.com>
Yo,
Kinda RFC as I want to see what people think of this.
This series is partly leveraging Clement's work adding a validate
callback in the extension detection code so that things like checking
for whether a vector crypto extension is usable can be done like:
has_extension(<vector crypto>)
rather than
has_vector() && has_extension(<vector crypto>)
which Eric pointed out was a poor design some months ago.
The rest of this is adding some requirements to the bindings that
prevent combinations of extensions disallowed by the ISA. I might have
gotten them wrong, but I have cited the bits in the documentation I used
for reference - so double checking shouldn't be /too/ difficult.
Cheers,
Conor.
CC: Conor Dooley <conor@kernel.org>
CC: Rob Herring <robh@kernel.org>
CC: Krzysztof Kozlowski <krzk+dt@kernel.org>
CC: Paul Walmsley <paul.walmsley@sifive.com>
CC: Palmer Dabbelt <palmer@dabbelt.com>
CC: "Clément Léger" <cleger@rivosinc.com>
CC: Andy Chiu <andybnac@gmail.com>
CC: linux-riscv@lists.infradead.org
CC: devicetree@vger.kernel.org
CC: linux-kernel@vger.kernel.org
Conor Dooley (5):
RISC-V: add vector crypto extension validation checks
RISC-V: add f & d extension validation checks
dt-bindings: riscv: d requires f
dt-bindings: riscv: add vector sub-extension dependencies
dt-bindings: riscv: document vector crypto requirements
.../devicetree/bindings/riscv/extensions.yaml | 84 ++++++++++
arch/riscv/include/asm/cpufeature.h | 3 +
arch/riscv/kernel/cpufeature.c | 147 ++++++++++++------
3 files changed, 185 insertions(+), 49 deletions(-)
--
2.45.2
^ permalink raw reply [flat|nested] 16+ messages in thread
* [RFC v1 1/5] RISC-V: add vector crypto extension validation checks
2024-10-02 16:10 [RFC v1 0/5] Add some validation for vector, vector crypto and fp stuff Conor Dooley
@ 2024-10-02 16:10 ` Conor Dooley
2024-10-02 16:10 ` [RFC v1 2/5] RISC-V: add f & d " Conor Dooley
` (3 subsequent siblings)
4 siblings, 0 replies; 16+ messages in thread
From: Conor Dooley @ 2024-10-02 16:10 UTC (permalink / raw)
To: linux-riscv
Cc: conor, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
From: Conor Dooley <conor.dooley@microchip.com>
Using Clement's new validation callbacks, support checking that
dependencies have been satisfied for the vector crpyto extensions.
Currently riscv_isa_extension_available(<vector crypto>) will return
true on systems that support the extensions but vector itself has been
disabled by the kernel, adding validation callbacks will prevent such a
scenario from occuring and make the behaviour of the extension detection
functions more consistent with user expectations - it's not expected to
have to check for vector AND the specific crypto extension.
The 1.0.0 Vector crypto spec states:
The Zvknhb and Zvbc Vector Crypto Extensions --and accordingly
the composite extensions Zvkn and Zvks-- require a Zve64x base,
or application ("V") base Vector Extension. All of the other
Vector Crypto Extensions can be built on any embedded (Zve*) or
application ("V") base Vector Extension.
and this could be used as the basis for checking that the correct base
for individual crypto extensions, but that's not really the kernel's job
in my opinion and it is sufficient to leave that sort of precision to
the dt-bindings. The kernel only needs to make sure that vector, in some
form, is available.
Since vector will now be disabled proactively, there's no need to clear
the bit in elf_hwcap in riscv_fill_hwcap() any longer.
Link: https://github.com/riscv/riscv-crypto/releases/tag/v1.0.0
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
arch/riscv/include/asm/cpufeature.h | 3 +
arch/riscv/kernel/cpufeature.c | 111 ++++++++++++++++++----------
2 files changed, 76 insertions(+), 38 deletions(-)
diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/cpufeature.h
index 45f9c1171a486..1de408c3deee7 100644
--- a/arch/riscv/include/asm/cpufeature.h
+++ b/arch/riscv/include/asm/cpufeature.h
@@ -51,6 +51,9 @@ void riscv_user_isa_enable(void);
#define __RISCV_ISA_EXT_BUNDLE(_name, _bundled_exts) \
_RISCV_ISA_EXT_DATA(_name, RISCV_ISA_EXT_INVALID, _bundled_exts, \
ARRAY_SIZE(_bundled_exts), NULL)
+#define __RISCV_ISA_EXT_BUNDLE_VALIDATE(_name, _bundled_exts, _validate) \
+ _RISCV_ISA_EXT_DATA(_name, RISCV_ISA_EXT_INVALID, _bundled_exts, \
+ ARRAY_SIZE(_bundled_exts), _validate)
/* Used to declare extensions that are a superset of other extensions (Zvbb for instance) */
#define __RISCV_ISA_EXT_SUPERSET(_name, _id, _sub_exts) \
diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
index 8f20607adb406..84a2ad2581cb0 100644
--- a/arch/riscv/kernel/cpufeature.c
+++ b/arch/riscv/kernel/cpufeature.c
@@ -101,6 +101,53 @@ static int riscv_ext_zicboz_validate(const struct riscv_isa_ext_data *data,
return 0;
}
+static int riscv_ext_vector_x_validate(const struct riscv_isa_ext_data *data,
+ const unsigned long *isa_bitmap)
+{
+ if (!IS_ENABLED(CONFIG_RISCV_ISA_V))
+ return -EINVAL;
+
+ return 0;
+}
+
+static int riscv_ext_vector_float_validate(const struct riscv_isa_ext_data *data,
+ const unsigned long *isa_bitmap)
+{
+ if (!IS_ENABLED(CONFIG_RISCV_ISA_V))
+ return -EINVAL;
+
+ if (IS_ENABLED(CONFIG_FPU))
+ return -EINVAL;
+
+ /*
+ * The kernel doesn't support systems that don't implement both of
+ * F and D, so if any of the vector extensions that do floating point
+ * are to be usable, both floating point extensions need to be usable.
+ */
+ if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_d))
+ return -EINVAL;
+
+ return 0;
+}
+
+static int riscv_ext_vector_crypto_validate(const struct riscv_isa_ext_data *data,
+ const unsigned long *isa_bitmap)
+{
+ if (!IS_ENABLED(CONFIG_RISCV_ISA_V))
+ return -EINVAL;
+
+ /*
+ * It isn't the kernel's job to check that the binding is correct, so
+ * it should be enough to check that any of the vector extensions are
+ * enabled, which in-turn means that vector is usable in this kernel
+ */
+ //TODO check that enough resolve rounds exist to make this work
+ if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZVE32X))
+ return -EINVAL;
+
+ return 0;
+}
+
static int riscv_ext_zca_depends(const struct riscv_isa_ext_data *data,
const unsigned long *isa_bitmap)
{
@@ -308,12 +355,10 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
__RISCV_ISA_EXT_DATA(d, RISCV_ISA_EXT_d),
__RISCV_ISA_EXT_DATA(q, RISCV_ISA_EXT_q),
__RISCV_ISA_EXT_SUPERSET(c, RISCV_ISA_EXT_c, riscv_c_exts),
- __RISCV_ISA_EXT_SUPERSET(v, RISCV_ISA_EXT_v, riscv_v_exts),
+ __RISCV_ISA_EXT_SUPERSET_VALIDATE(v, RISCV_ISA_EXT_v, riscv_v_exts, riscv_ext_vector_float_validate),
__RISCV_ISA_EXT_DATA(h, RISCV_ISA_EXT_h),
- __RISCV_ISA_EXT_SUPERSET_VALIDATE(zicbom, RISCV_ISA_EXT_ZICBOM, riscv_xlinuxenvcfg_exts,
- riscv_ext_zicbom_validate),
- __RISCV_ISA_EXT_SUPERSET_VALIDATE(zicboz, RISCV_ISA_EXT_ZICBOZ, riscv_xlinuxenvcfg_exts,
- riscv_ext_zicboz_validate),
+ __RISCV_ISA_EXT_SUPERSET_VALIDATE(zicbom, RISCV_ISA_EXT_ZICBOM, riscv_xlinuxenvcfg_exts, riscv_ext_zicbom_validate),
+ __RISCV_ISA_EXT_SUPERSET_VALIDATE(zicboz, RISCV_ISA_EXT_ZICBOZ, riscv_xlinuxenvcfg_exts, riscv_ext_zicboz_validate),
__RISCV_ISA_EXT_DATA(zicntr, RISCV_ISA_EXT_ZICNTR),
__RISCV_ISA_EXT_DATA(zicond, RISCV_ISA_EXT_ZICOND),
__RISCV_ISA_EXT_DATA(zicsr, RISCV_ISA_EXT_ZICSR),
@@ -339,40 +384,40 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
__RISCV_ISA_EXT_DATA(zbkc, RISCV_ISA_EXT_ZBKC),
__RISCV_ISA_EXT_DATA(zbkx, RISCV_ISA_EXT_ZBKX),
__RISCV_ISA_EXT_DATA(zbs, RISCV_ISA_EXT_ZBS),
- __RISCV_ISA_EXT_BUNDLE(zk, riscv_zk_bundled_exts),
- __RISCV_ISA_EXT_BUNDLE(zkn, riscv_zkn_bundled_exts),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zk, riscv_zk_bundled_exts, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zkn, riscv_zkn_bundled_exts, riscv_ext_vector_crypto_validate),
__RISCV_ISA_EXT_DATA(zknd, RISCV_ISA_EXT_ZKND),
__RISCV_ISA_EXT_DATA(zkne, RISCV_ISA_EXT_ZKNE),
__RISCV_ISA_EXT_DATA(zknh, RISCV_ISA_EXT_ZKNH),
__RISCV_ISA_EXT_DATA(zkr, RISCV_ISA_EXT_ZKR),
- __RISCV_ISA_EXT_BUNDLE(zks, riscv_zks_bundled_exts),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zks, riscv_zks_bundled_exts, riscv_ext_vector_crypto_validate),
__RISCV_ISA_EXT_DATA(zkt, RISCV_ISA_EXT_ZKT),
__RISCV_ISA_EXT_DATA(zksed, RISCV_ISA_EXT_ZKSED),
__RISCV_ISA_EXT_DATA(zksh, RISCV_ISA_EXT_ZKSH),
__RISCV_ISA_EXT_DATA(ztso, RISCV_ISA_EXT_ZTSO),
__RISCV_ISA_EXT_SUPERSET(zvbb, RISCV_ISA_EXT_ZVBB, riscv_zvbb_exts),
- __RISCV_ISA_EXT_DATA(zvbc, RISCV_ISA_EXT_ZVBC),
- __RISCV_ISA_EXT_SUPERSET(zve32f, RISCV_ISA_EXT_ZVE32F, riscv_zve32f_exts),
- __RISCV_ISA_EXT_DATA(zve32x, RISCV_ISA_EXT_ZVE32X),
- __RISCV_ISA_EXT_SUPERSET(zve64d, RISCV_ISA_EXT_ZVE64D, riscv_zve64d_exts),
- __RISCV_ISA_EXT_SUPERSET(zve64f, RISCV_ISA_EXT_ZVE64F, riscv_zve64f_exts),
- __RISCV_ISA_EXT_SUPERSET(zve64x, RISCV_ISA_EXT_ZVE64X, riscv_zve64x_exts),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvbc, RISCV_ISA_EXT_ZVBC, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_SUPERSET_VALIDATE(zve32f, RISCV_ISA_EXT_ZVE32F, riscv_zve32f_exts, riscv_ext_vector_float_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zve32x, RISCV_ISA_EXT_ZVE32X, riscv_ext_vector_x_validate),
+ __RISCV_ISA_EXT_SUPERSET_VALIDATE(zve64d, RISCV_ISA_EXT_ZVE64D, riscv_zve64d_exts, riscv_ext_vector_float_validate),
+ __RISCV_ISA_EXT_SUPERSET_VALIDATE(zve64f, RISCV_ISA_EXT_ZVE64F, riscv_zve64f_exts, riscv_ext_vector_float_validate),
+ __RISCV_ISA_EXT_SUPERSET_VALIDATE(zve64x, RISCV_ISA_EXT_ZVE64X, riscv_zve64x_exts, riscv_ext_vector_x_validate),
__RISCV_ISA_EXT_DATA(zvfh, RISCV_ISA_EXT_ZVFH),
__RISCV_ISA_EXT_DATA(zvfhmin, RISCV_ISA_EXT_ZVFHMIN),
- __RISCV_ISA_EXT_DATA(zvkb, RISCV_ISA_EXT_ZVKB),
- __RISCV_ISA_EXT_DATA(zvkg, RISCV_ISA_EXT_ZVKG),
- __RISCV_ISA_EXT_BUNDLE(zvkn, riscv_zvkn_bundled_exts),
- __RISCV_ISA_EXT_BUNDLE(zvknc, riscv_zvknc_bundled_exts),
- __RISCV_ISA_EXT_DATA(zvkned, RISCV_ISA_EXT_ZVKNED),
- __RISCV_ISA_EXT_BUNDLE(zvkng, riscv_zvkng_bundled_exts),
- __RISCV_ISA_EXT_DATA(zvknha, RISCV_ISA_EXT_ZVKNHA),
- __RISCV_ISA_EXT_DATA(zvknhb, RISCV_ISA_EXT_ZVKNHB),
- __RISCV_ISA_EXT_BUNDLE(zvks, riscv_zvks_bundled_exts),
- __RISCV_ISA_EXT_BUNDLE(zvksc, riscv_zvksc_bundled_exts),
- __RISCV_ISA_EXT_DATA(zvksed, RISCV_ISA_EXT_ZVKSED),
- __RISCV_ISA_EXT_DATA(zvksh, RISCV_ISA_EXT_ZVKSH),
- __RISCV_ISA_EXT_BUNDLE(zvksg, riscv_zvksg_bundled_exts),
- __RISCV_ISA_EXT_DATA(zvkt, RISCV_ISA_EXT_ZVKT),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvkb, RISCV_ISA_EXT_ZVKB, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvkg, RISCV_ISA_EXT_ZVKG, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zvkn, riscv_zvkn_bundled_exts, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zvknc, riscv_zvknc_bundled_exts, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvkned, RISCV_ISA_EXT_ZVKNED, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zvkng, riscv_zvkng_bundled_exts, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvknha, RISCV_ISA_EXT_ZVKNHA, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvknhb, RISCV_ISA_EXT_ZVKNHB, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zvks, riscv_zvks_bundled_exts, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zvksc, riscv_zvksc_bundled_exts, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvksed, RISCV_ISA_EXT_ZVKSED, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvksh, RISCV_ISA_EXT_ZVKSH, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_BUNDLE_VALIDATE(zvksg, riscv_zvksg_bundled_exts, riscv_ext_vector_crypto_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(zvkt, RISCV_ISA_EXT_ZVKT, riscv_ext_vector_crypto_validate),
__RISCV_ISA_EXT_DATA(smaia, RISCV_ISA_EXT_SMAIA),
__RISCV_ISA_EXT_DATA(smstateen, RISCV_ISA_EXT_SMSTATEEN),
__RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA),
@@ -883,16 +928,6 @@ void __init riscv_fill_hwcap(void)
riscv_v_setup_vsize();
}
- if (elf_hwcap & COMPAT_HWCAP_ISA_V) {
- /*
- * ISA string in device tree might have 'v' flag, but
- * CONFIG_RISCV_ISA_V is disabled in kernel.
- * Clear V flag in elf_hwcap if CONFIG_RISCV_ISA_V is disabled.
- */
- if (!IS_ENABLED(CONFIG_RISCV_ISA_V))
- elf_hwcap &= ~COMPAT_HWCAP_ISA_V;
- }
-
memset(print_str, 0, sizeof(print_str));
for (i = 0, j = 0; i < NUM_ALPHA_EXTS; i++)
if (riscv_isa[0] & BIT_MASK(i))
--
2.45.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC v1 2/5] RISC-V: add f & d extension validation checks
2024-10-02 16:10 [RFC v1 0/5] Add some validation for vector, vector crypto and fp stuff Conor Dooley
2024-10-02 16:10 ` [RFC v1 1/5] RISC-V: add vector crypto extension validation checks Conor Dooley
@ 2024-10-02 16:10 ` Conor Dooley
2024-10-03 7:49 ` Clément Léger
2024-10-02 16:10 ` [RFC v1 3/5] dt-bindings: riscv: d requires f Conor Dooley
` (2 subsequent siblings)
4 siblings, 1 reply; 16+ messages in thread
From: Conor Dooley @ 2024-10-02 16:10 UTC (permalink / raw)
To: linux-riscv
Cc: conor, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
From: Conor Dooley <conor.dooley@microchip.com>
Using Clement's new validation callbacks, support checking that
dependencies have been satisfied for the floating point extensions.
The check for "d" might be slightly confusingly shorter than that of "f",
despite "d" depending on "f". This is because the requirement that a
hart supporting double precision must also support single precision,
should be validated by dt-bindings etc, not the kernel but lack of
support for single precision only is a limitation of the kernel.
Since vector will now be disabled proactively, there's no need to clear
the bit in elf_hwcap in riscv_fill_hwcap() any longer.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
arch/riscv/kernel/cpufeature.c | 36 +++++++++++++++++++++++-----------
1 file changed, 25 insertions(+), 11 deletions(-)
diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
index 84a2ad2581cb0..b8a22ee76c2ef 100644
--- a/arch/riscv/kernel/cpufeature.c
+++ b/arch/riscv/kernel/cpufeature.c
@@ -101,6 +101,29 @@ static int riscv_ext_zicboz_validate(const struct riscv_isa_ext_data *data,
return 0;
}
+static int riscv_ext_f_validate(const struct riscv_isa_ext_data *data,
+ const unsigned long *isa_bitmap)
+{
+ if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_d)) {
+ pr_warn_once("This kernel does not support systems with F but not D\n");
+ return -EINVAL;
+ }
+
+ if (IS_ENABLED(CONFIG_FPU))
+ return -EINVAL;
+
+ return 0;
+}
+
+static int riscv_ext_d_validate(const struct riscv_isa_ext_data *data,
+ const unsigned long *isa_bitmap)
+{
+ if (IS_ENABLED(CONFIG_FPU))
+ return -EINVAL;
+
+ return 0;
+}
+
static int riscv_ext_vector_x_validate(const struct riscv_isa_ext_data *data,
const unsigned long *isa_bitmap)
{
@@ -351,8 +374,8 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
__RISCV_ISA_EXT_DATA(i, RISCV_ISA_EXT_i),
__RISCV_ISA_EXT_DATA(m, RISCV_ISA_EXT_m),
__RISCV_ISA_EXT_DATA(a, RISCV_ISA_EXT_a),
- __RISCV_ISA_EXT_DATA(f, RISCV_ISA_EXT_f),
- __RISCV_ISA_EXT_DATA(d, RISCV_ISA_EXT_d),
+ __RISCV_ISA_EXT_DATA_VALIDATE(f, RISCV_ISA_EXT_f, riscv_ext_f_validate),
+ __RISCV_ISA_EXT_DATA_VALIDATE(d, RISCV_ISA_EXT_d, riscv_ext_d_validate),
__RISCV_ISA_EXT_DATA(q, RISCV_ISA_EXT_q),
__RISCV_ISA_EXT_SUPERSET(c, RISCV_ISA_EXT_c, riscv_c_exts),
__RISCV_ISA_EXT_SUPERSET_VALIDATE(v, RISCV_ISA_EXT_v, riscv_v_exts, riscv_ext_vector_float_validate),
@@ -912,15 +935,6 @@ void __init riscv_fill_hwcap(void)
}
}
- /*
- * We don't support systems with F but without D, so mask those out
- * here.
- */
- if ((elf_hwcap & COMPAT_HWCAP_ISA_F) && !(elf_hwcap & COMPAT_HWCAP_ISA_D)) {
- pr_info("This kernel does not support systems with F but not D\n");
- elf_hwcap &= ~COMPAT_HWCAP_ISA_F;
- }
-
if (__riscv_isa_extension_available(NULL, RISCV_ISA_EXT_ZVE32X)) {
/*
* This cannot fail when called on the boot hart
--
2.45.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC v1 3/5] dt-bindings: riscv: d requires f
2024-10-02 16:10 [RFC v1 0/5] Add some validation for vector, vector crypto and fp stuff Conor Dooley
2024-10-02 16:10 ` [RFC v1 1/5] RISC-V: add vector crypto extension validation checks Conor Dooley
2024-10-02 16:10 ` [RFC v1 2/5] RISC-V: add f & d " Conor Dooley
@ 2024-10-02 16:10 ` Conor Dooley
2024-10-03 7:46 ` Clément Léger
2024-10-03 9:50 ` Krzysztof Kozlowski
2024-10-02 16:10 ` [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies Conor Dooley
2024-10-02 16:10 ` [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements Conor Dooley
4 siblings, 2 replies; 16+ messages in thread
From: Conor Dooley @ 2024-10-02 16:10 UTC (permalink / raw)
To: linux-riscv
Cc: conor, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
From: Conor Dooley <conor.dooley@microchip.com>
Per the specifications, the d extension for double-precision floating
point operations depends on the f extension for single-precious floating
point. Add that requirement to the bindings. This differs from the
Linux implementation, where single-precious only is not supported.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
index a06dbc6b49289..779f5cfab806e 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -564,6 +564,12 @@ properties:
https://www.andestech.com/wp-content/uploads/AX45MP-1C-Rev.-5.0.0-Datasheet.pdf
allOf:
+ - if:
+ contains:
+ const: d
+ then:
+ contains:
+ const: f
# Zcb depends on Zca
- if:
contains:
--
2.45.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies
2024-10-02 16:10 [RFC v1 0/5] Add some validation for vector, vector crypto and fp stuff Conor Dooley
` (2 preceding siblings ...)
2024-10-02 16:10 ` [RFC v1 3/5] dt-bindings: riscv: d requires f Conor Dooley
@ 2024-10-02 16:10 ` Conor Dooley
2024-10-03 7:52 ` Clément Léger
2024-10-03 9:52 ` Krzysztof Kozlowski
2024-10-02 16:10 ` [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements Conor Dooley
4 siblings, 2 replies; 16+ messages in thread
From: Conor Dooley @ 2024-10-02 16:10 UTC (permalink / raw)
To: linux-riscv
Cc: conor, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
From: Conor Dooley <conor.dooley@microchip.com>
Section 33.18.2. Zve*: Vector Extensions for Embedded Processors
in [1] says:
| The Zve32f and Zve64x extensions depend on the Zve32x extension. The Zve64f extension depends
| on the Zve32f and Zve64x extensions. The Zve64d extension depends on the Zve64f extension
| The Zve32x extension depends on the Zicsr extension. The Zve32f and Zve64f extensions depend
| upon the F extension
| The Zve64d extension depends upon the D extension
Apply these rules to the bindings to help prevent invalid combinations.
Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
.../devicetree/bindings/riscv/extensions.yaml | 46 +++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
index 779f5cfab806e..abf2579171c5b 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -605,6 +605,52 @@ properties:
contains:
const: zca
+ - if:
+ contains:
+ const: zve32x
+ then:
+ contains:
+ const: zicsr
+
+ - if:
+ contains:
+ const: zve32f
+ then:
+ allOf:
+ - contains:
+ const: f
+ - contains:
+ const: zve32x
+
+ - if:
+ contains:
+ const: zve64x
+ then:
+ contains:
+ const: zve32x
+
+ - if:
+ contains:
+ const: zve64f
+ then:
+ allOf:
+ - contains:
+ const: f
+ - contains:
+ const: zve32f
+ - contains:
+ const: zve64x
+
+ - if:
+ contains:
+ const: zve64d
+ then:
+ allOf:
+ - contains:
+ const: d
+ - contains:
+ const: zve64f
+
allOf:
# Zcf extension does not exist on rv64
- if:
--
2.45.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements
2024-10-02 16:10 [RFC v1 0/5] Add some validation for vector, vector crypto and fp stuff Conor Dooley
` (3 preceding siblings ...)
2024-10-02 16:10 ` [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies Conor Dooley
@ 2024-10-02 16:10 ` Conor Dooley
2024-10-03 7:59 ` Clément Léger
2024-10-03 9:52 ` Krzysztof Kozlowski
4 siblings, 2 replies; 16+ messages in thread
From: Conor Dooley @ 2024-10-02 16:10 UTC (permalink / raw)
To: linux-riscv
Cc: conor, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
From: Conor Dooley <conor.dooley@microchip.com>
Section 35.2. Extensions Overview of [1] says:
| The Zvknhb and Zvbc Vector Crypto Extensions --and accordingly the composite extensions Zvkn and
| Zvks-- (sic) require a Zve64x base, or application ("V") base Vector Extension.
| All of the other Vector Crypto Extensions can be built on any embedded (Zve*) or application ("V") base
| Vector Extension
Apply these rules in the binding, so that invalid combinations can be
avoided.
Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
.../devicetree/bindings/riscv/extensions.yaml | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
index abf2579171c5b..02b822bbf341d 100644
--- a/Documentation/devicetree/bindings/riscv/extensions.yaml
+++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
@@ -651,6 +651,38 @@ properties:
- contains:
const: zve64f
+ - if:
+ contains:
+ anyOf:
+ - const: zvbc
+ - const: zvkn
+ - const: zvknhb
+ - const: zvks
+ then:
+ contains:
+ anyOf:
+ - const: v
+ - const: zve64x
+
+ - if:
+ contains:
+ anyOf:
+ - const: zvbb
+ - const: zvkb
+ - const: zvkg
+ - const: zvkned
+ - const: zvknha
+ - const: zvksed
+ - const: zvksh
+ - const: zvknc
+ - const: zvkng
+ - const: zvkt
+ then:
+ contains:
+ anyOf:
+ - const: v
+ - const: zve32x
+
allOf:
# Zcf extension does not exist on rv64
- if:
--
2.45.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [RFC v1 3/5] dt-bindings: riscv: d requires f
2024-10-02 16:10 ` [RFC v1 3/5] dt-bindings: riscv: d requires f Conor Dooley
@ 2024-10-03 7:46 ` Clément Léger
2024-10-03 9:50 ` Krzysztof Kozlowski
1 sibling, 0 replies; 16+ messages in thread
From: Clément Léger @ 2024-10-03 7:46 UTC (permalink / raw)
To: Conor Dooley, linux-riscv
Cc: Conor Dooley, Rob Herring, Krzysztof Kozlowski, Paul Walmsley,
Palmer Dabbelt, Andy Chiu, devicetree, linux-kernel
On 02/10/2024 18:10, Conor Dooley wrote:
> From: Conor Dooley <conor.dooley@microchip.com>
>
> Per the specifications, the d extension for double-precision floating
> point operations depends on the f extension for single-precious floating
> point. Add that requirement to the bindings. This differs from the
> Linux implementation, where single-precious only is not supported.
Hey Conor,
While floating point is precious to have, I don't think single-precious
is the expected word here :).
>
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> index a06dbc6b49289..779f5cfab806e 100644
> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> @@ -564,6 +564,12 @@ properties:
> https://www.andestech.com/wp-content/uploads/AX45MP-1C-Rev.-5.0.0-Datasheet.pdf
>
> allOf:
> + - if:
> + contains:
> + const: d
> + then:
> + contains:
> + const: f
> # Zcb depends on Zca
> - if:
> contains:
Otherwise, looks good to me.
Reviewed-by: Clément Léger <cleger@rivosinc.com>
Clément
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 2/5] RISC-V: add f & d extension validation checks
2024-10-02 16:10 ` [RFC v1 2/5] RISC-V: add f & d " Conor Dooley
@ 2024-10-03 7:49 ` Clément Léger
2024-10-03 10:57 ` Conor Dooley
0 siblings, 1 reply; 16+ messages in thread
From: Clément Léger @ 2024-10-03 7:49 UTC (permalink / raw)
To: Conor Dooley, linux-riscv
Cc: Conor Dooley, Rob Herring, Krzysztof Kozlowski, Paul Walmsley,
Palmer Dabbelt, Andy Chiu, devicetree, linux-kernel
On 02/10/2024 18:10, Conor Dooley wrote:
> From: Conor Dooley <conor.dooley@microchip.com>
>
> Using Clement's new validation callbacks, support checking that
> dependencies have been satisfied for the floating point extensions.
>
> The check for "d" might be slightly confusingly shorter than that of "f",
> despite "d" depending on "f". This is because the requirement that a
> hart supporting double precision must also support single precision,
> should be validated by dt-bindings etc, not the kernel but lack of
> support for single precision only is a limitation of the kernel.
>
> Since vector will now be disabled proactively, there's no need to clear
> the bit in elf_hwcap in riscv_fill_hwcap() any longer.
>
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> arch/riscv/kernel/cpufeature.c | 36 +++++++++++++++++++++++-----------
> 1 file changed, 25 insertions(+), 11 deletions(-)
>
> diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> index 84a2ad2581cb0..b8a22ee76c2ef 100644
> --- a/arch/riscv/kernel/cpufeature.c
> +++ b/arch/riscv/kernel/cpufeature.c
> @@ -101,6 +101,29 @@ static int riscv_ext_zicboz_validate(const struct riscv_isa_ext_data *data,
> return 0;
> }
>
> +static int riscv_ext_f_validate(const struct riscv_isa_ext_data *data,
> + const unsigned long *isa_bitmap)
> +{
> + if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_d)) {
> + pr_warn_once("This kernel does not support systems with F but not D\n");
> + return -EINVAL;
> + }
> +
> + if (IS_ENABLED(CONFIG_FPU))
> + return -EINVAL;
Hey Conor,
Shouldn't this be !IS_ENABLED(CONFIG_FPU)) ? I mean, if the f extension
is enabled but not CONFIG_FPU, then disable it.
Clément
> +
> + return 0;
> +}
> +
> +static int riscv_ext_d_validate(const struct riscv_isa_ext_data *data,
> + const unsigned long *isa_bitmap)
> +{
> + if (IS_ENABLED(CONFIG_FPU))
> + return -EINVAL;
> +
> + return 0;
> +}
> +
> static int riscv_ext_vector_x_validate(const struct riscv_isa_ext_data *data,
> const unsigned long *isa_bitmap)
> {
> @@ -351,8 +374,8 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
> __RISCV_ISA_EXT_DATA(i, RISCV_ISA_EXT_i),
> __RISCV_ISA_EXT_DATA(m, RISCV_ISA_EXT_m),
> __RISCV_ISA_EXT_DATA(a, RISCV_ISA_EXT_a),
> - __RISCV_ISA_EXT_DATA(f, RISCV_ISA_EXT_f),
> - __RISCV_ISA_EXT_DATA(d, RISCV_ISA_EXT_d),
> + __RISCV_ISA_EXT_DATA_VALIDATE(f, RISCV_ISA_EXT_f, riscv_ext_f_validate),
> + __RISCV_ISA_EXT_DATA_VALIDATE(d, RISCV_ISA_EXT_d, riscv_ext_d_validate),
> __RISCV_ISA_EXT_DATA(q, RISCV_ISA_EXT_q),
> __RISCV_ISA_EXT_SUPERSET(c, RISCV_ISA_EXT_c, riscv_c_exts),
> __RISCV_ISA_EXT_SUPERSET_VALIDATE(v, RISCV_ISA_EXT_v, riscv_v_exts, riscv_ext_vector_float_validate),
> @@ -912,15 +935,6 @@ void __init riscv_fill_hwcap(void)
> }
> }
>
> - /*
> - * We don't support systems with F but without D, so mask those out
> - * here.
> - */
> - if ((elf_hwcap & COMPAT_HWCAP_ISA_F) && !(elf_hwcap & COMPAT_HWCAP_ISA_D)) {
> - pr_info("This kernel does not support systems with F but not D\n");
> - elf_hwcap &= ~COMPAT_HWCAP_ISA_F;
> - }
> -
> if (__riscv_isa_extension_available(NULL, RISCV_ISA_EXT_ZVE32X)) {
> /*
> * This cannot fail when called on the boot hart
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies
2024-10-02 16:10 ` [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies Conor Dooley
@ 2024-10-03 7:52 ` Clément Léger
2024-10-03 9:52 ` Krzysztof Kozlowski
1 sibling, 0 replies; 16+ messages in thread
From: Clément Léger @ 2024-10-03 7:52 UTC (permalink / raw)
To: Conor Dooley, linux-riscv
Cc: Conor Dooley, Rob Herring, Krzysztof Kozlowski, Paul Walmsley,
Palmer Dabbelt, Andy Chiu, devicetree, linux-kernel
On 02/10/2024 18:10, Conor Dooley wrote:
> From: Conor Dooley <conor.dooley@microchip.com>
>
> Section 33.18.2. Zve*: Vector Extensions for Embedded Processors
> in [1] says:
> | The Zve32f and Zve64x extensions depend on the Zve32x extension. The Zve64f extension depends
> | on the Zve32f and Zve64x extensions. The Zve64d extension depends on the Zve64f extension
>
> | The Zve32x extension depends on the Zicsr extension. The Zve32f and Zve64f extensions depend
> | upon the F extension
>
> | The Zve64d extension depends upon the D extension
>
> Apply these rules to the bindings to help prevent invalid combinations.
>
> Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> .../devicetree/bindings/riscv/extensions.yaml | 46 +++++++++++++++++++
> 1 file changed, 46 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> index 779f5cfab806e..abf2579171c5b 100644
> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> @@ -605,6 +605,52 @@ properties:
> contains:
> const: zca
>
> + - if:
> + contains:
> + const: zve32x
> + then:
> + contains:
> + const: zicsr
> +
> + - if:
> + contains:
> + const: zve32f
> + then:
> + allOf:
> + - contains:
> + const: f
> + - contains:
> + const: zve32x
> +
> + - if:
> + contains:
> + const: zve64x
> + then:
> + contains:
> + const: zve32x
> +
> + - if:
> + contains:
> + const: zve64f
> + then:
> + allOf:
> + - contains:
> + const: f
> + - contains:
> + const: zve32f
> + - contains:
> + const: zve64x
> +
> + - if:
> + contains:
> + const: zve64d
> + then:
> + allOf:
> + - contains:
> + const: d
> + - contains:
> + const: zve64f
> +
> allOf:
> # Zcf extension does not exist on rv64
> - if:
Looks good to me.
Reviewed-by: Clément léger <cleger@rivosinc.com>
Thanks,
Clément
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements
2024-10-02 16:10 ` [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements Conor Dooley
@ 2024-10-03 7:59 ` Clément Léger
2024-10-03 11:05 ` Conor Dooley
2024-10-03 9:52 ` Krzysztof Kozlowski
1 sibling, 1 reply; 16+ messages in thread
From: Clément Léger @ 2024-10-03 7:59 UTC (permalink / raw)
To: Conor Dooley, linux-riscv
Cc: Conor Dooley, Rob Herring, Krzysztof Kozlowski, Paul Walmsley,
Palmer Dabbelt, Andy Chiu, devicetree, linux-kernel
On 02/10/2024 18:10, Conor Dooley wrote:
> From: Conor Dooley <conor.dooley@microchip.com>
>
> Section 35.2. Extensions Overview of [1] says:
> | The Zvknhb and Zvbc Vector Crypto Extensions --and accordingly the composite extensions Zvkn and
> | Zvks-- (sic) require a Zve64x base, or application ("V") base Vector Extension.
> | All of the other Vector Crypto Extensions can be built on any embedded (Zve*) or application ("V") base
> | Vector Extension
>
> Apply these rules in the binding, so that invalid combinations can be
> avoided.
>
> Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> .../devicetree/bindings/riscv/extensions.yaml | 32 +++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> index abf2579171c5b..02b822bbf341d 100644
> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> @@ -651,6 +651,38 @@ properties:
> - contains:
> const: zve64f
>
> + - if:
> + contains:
> + anyOf:
> + - const: zvbc
> + - const: zvkn
> + - const: zvknhb
> + - const: zvks
Hey Conor,
Shouldn't zvksed and zvksh be part odf this list ? My understanding of
the spec might be wrong but "Zvks--" seems like a poor-man's wildcard
for Zvks* extensions ?
Thanks,
Clément
> + then:
> + contains:
> + anyOf:
> + - const: v
> + - const: zve64x
> +
> + - if:
> + contains:
> + anyOf:
> + - const: zvbb
> + - const: zvkb
> + - const: zvkg
> + - const: zvkned
> + - const: zvknha
> + - const: zvksed
> + - const: zvksh
> + - const: zvknc
> + - const: zvkng
> + - const: zvkt
> + then:
> + contains:
> + anyOf:
> + - const: v
> + - const: zve32x
> +
> allOf:
> # Zcf extension does not exist on rv64
> - if:
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 3/5] dt-bindings: riscv: d requires f
2024-10-02 16:10 ` [RFC v1 3/5] dt-bindings: riscv: d requires f Conor Dooley
2024-10-03 7:46 ` Clément Léger
@ 2024-10-03 9:50 ` Krzysztof Kozlowski
1 sibling, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2024-10-03 9:50 UTC (permalink / raw)
To: Conor Dooley
Cc: linux-riscv, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
On Wed, Oct 02, 2024 at 05:10:56PM +0100, Conor Dooley wrote:
> From: Conor Dooley <conor.dooley@microchip.com>
>
> Per the specifications, the d extension for double-precision floating
> point operations depends on the f extension for single-precious floating
> point. Add that requirement to the bindings. This differs from the
> Linux implementation, where single-precious only is not supported.
>
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> Documentation/devicetree/bindings/riscv/extensions.yaml | 6 ++++++
> 1 file changed, 6 insertions(+)
FWIW
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies
2024-10-02 16:10 ` [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies Conor Dooley
2024-10-03 7:52 ` Clément Léger
@ 2024-10-03 9:52 ` Krzysztof Kozlowski
1 sibling, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2024-10-03 9:52 UTC (permalink / raw)
To: Conor Dooley
Cc: linux-riscv, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
On Wed, Oct 02, 2024 at 05:10:57PM +0100, Conor Dooley wrote:
> From: Conor Dooley <conor.dooley@microchip.com>
>
> Section 33.18.2. Zve*: Vector Extensions for Embedded Processors
> in [1] says:
> | The Zve32f and Zve64x extensions depend on the Zve32x extension. The Zve64f extension depends
> | on the Zve32f and Zve64x extensions. The Zve64d extension depends on the Zve64f extension
>
> | The Zve32x extension depends on the Zicsr extension. The Zve32f and Zve64f extensions depend
> | upon the F extension
>
> | The Zve64d extension depends upon the D extension
>
> Apply these rules to the bindings to help prevent invalid combinations.
>
> Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> .../devicetree/bindings/riscv/extensions.yaml | 46 +++++++++++++++++++
> 1 file changed, 46 insertions(+)
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements
2024-10-02 16:10 ` [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements Conor Dooley
2024-10-03 7:59 ` Clément Léger
@ 2024-10-03 9:52 ` Krzysztof Kozlowski
1 sibling, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2024-10-03 9:52 UTC (permalink / raw)
To: Conor Dooley
Cc: linux-riscv, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Clément Léger, Andy Chiu,
devicetree, linux-kernel
On Wed, Oct 02, 2024 at 05:10:58PM +0100, Conor Dooley wrote:
> From: Conor Dooley <conor.dooley@microchip.com>
>
> Section 35.2. Extensions Overview of [1] says:
> | The Zvknhb and Zvbc Vector Crypto Extensions --and accordingly the composite extensions Zvkn and
> | Zvks-- (sic) require a Zve64x base, or application ("V") base Vector Extension.
> | All of the other Vector Crypto Extensions can be built on any embedded (Zve*) or application ("V") base
> | Vector Extension
>
> Apply these rules in the binding, so that invalid combinations can be
> avoided.
>
> Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> .../devicetree/bindings/riscv/extensions.yaml | 32 +++++++++++++++++++
> 1 file changed, 32 insertions(+)
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 2/5] RISC-V: add f & d extension validation checks
2024-10-03 7:49 ` Clément Léger
@ 2024-10-03 10:57 ` Conor Dooley
0 siblings, 0 replies; 16+ messages in thread
From: Conor Dooley @ 2024-10-03 10:57 UTC (permalink / raw)
To: Clément Léger
Cc: linux-riscv, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Andy Chiu, devicetree,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1968 bytes --]
On Thu, Oct 03, 2024 at 09:49:51AM +0200, Clément Léger wrote:
>
>
> On 02/10/2024 18:10, Conor Dooley wrote:
> > From: Conor Dooley <conor.dooley@microchip.com>
> >
> > Using Clement's new validation callbacks, support checking that
> > dependencies have been satisfied for the floating point extensions.
> >
> > The check for "d" might be slightly confusingly shorter than that of "f",
> > despite "d" depending on "f". This is because the requirement that a
> > hart supporting double precision must also support single precision,
> > should be validated by dt-bindings etc, not the kernel but lack of
> > support for single precision only is a limitation of the kernel.
> >
> > Since vector will now be disabled proactively, there's no need to clear
> > the bit in elf_hwcap in riscv_fill_hwcap() any longer.
> >
> > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > ---
> > arch/riscv/kernel/cpufeature.c | 36 +++++++++++++++++++++++-----------
> > 1 file changed, 25 insertions(+), 11 deletions(-)
> >
> > diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> > index 84a2ad2581cb0..b8a22ee76c2ef 100644
> > --- a/arch/riscv/kernel/cpufeature.c
> > +++ b/arch/riscv/kernel/cpufeature.c
> > @@ -101,6 +101,29 @@ static int riscv_ext_zicboz_validate(const struct riscv_isa_ext_data *data,
> > return 0;
> > }
> >
> > +static int riscv_ext_f_validate(const struct riscv_isa_ext_data *data,
> > + const unsigned long *isa_bitmap)
> > +{
> > + if (!__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_d)) {
> > + pr_warn_once("This kernel does not support systems with F but not D\n");
> > + return -EINVAL;
> > + }
> > +
> > + if (IS_ENABLED(CONFIG_FPU))
> > + return -EINVAL;
>
> Shouldn't this be !IS_ENABLED(CONFIG_FPU)) ? I mean, if the f extension
> is enabled but not CONFIG_FPU, then disable it.
Of course. I wonder how my userspace didn't blow up.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements
2024-10-03 7:59 ` Clément Léger
@ 2024-10-03 11:05 ` Conor Dooley
2024-10-03 11:36 ` Clément Léger
0 siblings, 1 reply; 16+ messages in thread
From: Conor Dooley @ 2024-10-03 11:05 UTC (permalink / raw)
To: Clément Léger
Cc: linux-riscv, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Andy Chiu, devicetree,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1919 bytes --]
On Thu, Oct 03, 2024 at 09:59:38AM +0200, Clément Léger wrote:
>
>
> On 02/10/2024 18:10, Conor Dooley wrote:
> > From: Conor Dooley <conor.dooley@microchip.com>
> >
> > Section 35.2. Extensions Overview of [1] says:
> > | The Zvknhb and Zvbc Vector Crypto Extensions --and accordingly the composite extensions Zvkn and
> > | Zvks-- (sic) require a Zve64x base, or application ("V") base Vector Extension.
> > | All of the other Vector Crypto Extensions can be built on any embedded (Zve*) or application ("V") base
> > | Vector Extension
> >
> > Apply these rules in the binding, so that invalid combinations can be
> > avoided.
> >
> > Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
> > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > ---
> > .../devicetree/bindings/riscv/extensions.yaml | 32 +++++++++++++++++++
> > 1 file changed, 32 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > index abf2579171c5b..02b822bbf341d 100644
> > --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
> > +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
> > @@ -651,6 +651,38 @@ properties:
> > - contains:
> > const: zve64f
> >
> > + - if:
> > + contains:
> > + anyOf:
> > + - const: zvbc
> > + - const: zvkn
> > + - const: zvknhb
> > + - const: zvks
>
> Shouldn't zvksed and zvksh be part odf this list ? My understanding of
> the spec might be wrong but "Zvks--" seems like a poor-man's wildcard
> for Zvks* extensions ?
I don't think so, there's a corresponding -- on the first line of the
quote. I think it is some really odd styling that should be replaced by
commas.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements
2024-10-03 11:05 ` Conor Dooley
@ 2024-10-03 11:36 ` Clément Léger
0 siblings, 0 replies; 16+ messages in thread
From: Clément Léger @ 2024-10-03 11:36 UTC (permalink / raw)
To: Conor Dooley
Cc: linux-riscv, Conor Dooley, Rob Herring, Krzysztof Kozlowski,
Paul Walmsley, Palmer Dabbelt, Andy Chiu, devicetree,
linux-kernel
On 03/10/2024 13:05, Conor Dooley wrote:
> On Thu, Oct 03, 2024 at 09:59:38AM +0200, Clément Léger wrote:
>>
>>
>> On 02/10/2024 18:10, Conor Dooley wrote:
>>> From: Conor Dooley <conor.dooley@microchip.com>
>>>
>>> Section 35.2. Extensions Overview of [1] says:
>>> | The Zvknhb and Zvbc Vector Crypto Extensions --and accordingly the composite extensions Zvkn and
>>> | Zvks-- (sic) require a Zve64x base, or application ("V") base Vector Extension.
>>> | All of the other Vector Crypto Extensions can be built on any embedded (Zve*) or application ("V") base
>>> | Vector Extension
>>>
>>> Apply these rules in the binding, so that invalid combinations can be
>>> avoided.
>>>
>>> Link: https://github.com/riscv/riscv-isa-manual/releases/tag/riscv-isa-release-698e64a-2024-09-09 [1]
>>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>>> ---
>>> .../devicetree/bindings/riscv/extensions.yaml | 32 +++++++++++++++++++
>>> 1 file changed, 32 insertions(+)
>>>
>>> diff --git a/Documentation/devicetree/bindings/riscv/extensions.yaml b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>> index abf2579171c5b..02b822bbf341d 100644
>>> --- a/Documentation/devicetree/bindings/riscv/extensions.yaml
>>> +++ b/Documentation/devicetree/bindings/riscv/extensions.yaml
>>> @@ -651,6 +651,38 @@ properties:
>>> - contains:
>>> const: zve64f
>>>
>>> + - if:
>>> + contains:
>>> + anyOf:
>>> + - const: zvbc
>>> + - const: zvkn
>>> + - const: zvknhb
>>> + - const: zvks
>>
>> Shouldn't zvksed and zvksh be part odf this list ? My understanding of
>> the spec might be wrong but "Zvks--" seems like a poor-man's wildcard
>> for Zvks* extensions ?
>
> I don't think so, there's a corresponding -- on the first line of the
> quote. I think it is some really odd styling that should be replaced by
> commas.
>
Oh yes, my bad.
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2024-10-03 11:36 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-02 16:10 [RFC v1 0/5] Add some validation for vector, vector crypto and fp stuff Conor Dooley
2024-10-02 16:10 ` [RFC v1 1/5] RISC-V: add vector crypto extension validation checks Conor Dooley
2024-10-02 16:10 ` [RFC v1 2/5] RISC-V: add f & d " Conor Dooley
2024-10-03 7:49 ` Clément Léger
2024-10-03 10:57 ` Conor Dooley
2024-10-02 16:10 ` [RFC v1 3/5] dt-bindings: riscv: d requires f Conor Dooley
2024-10-03 7:46 ` Clément Léger
2024-10-03 9:50 ` Krzysztof Kozlowski
2024-10-02 16:10 ` [RFC v1 4/5] dt-bindings: riscv: add vector sub-extension dependencies Conor Dooley
2024-10-03 7:52 ` Clément Léger
2024-10-03 9:52 ` Krzysztof Kozlowski
2024-10-02 16:10 ` [RFC v1 5/5] dt-bindings: riscv: document vector crypto requirements Conor Dooley
2024-10-03 7:59 ` Clément Léger
2024-10-03 11:05 ` Conor Dooley
2024-10-03 11:36 ` Clément Léger
2024-10-03 9:52 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox