* [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
* 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 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
* [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
* 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 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
* [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
* 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 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
* [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 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 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
* 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
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