Skip to content

Commit e186c28

Browse files
inochisaAlexandre Ghiti
authored andcommitted
riscv: add ISA extension parsing for bfloat16 ISA extension
Add parsing for Zfbmin, Zvfbfmin, Zvfbfwma ISA extension which were ratified in 4dc23d62 ("Added Chapter title to BF16") of the riscv-isa-manual. Signed-off-by: Inochi Amaoto <[email protected]> Reviewed-by: Clément Léger <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexandre Ghiti <[email protected]>
1 parent 35bc188 commit e186c28

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

arch/riscv/include/asm/hwcap.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@
100100
#define RISCV_ISA_EXT_ZICCRSE 91
101101
#define RISCV_ISA_EXT_SVADE 92
102102
#define RISCV_ISA_EXT_SVADU 93
103+
#define RISCV_ISA_EXT_ZFBFMIN 94
104+
#define RISCV_ISA_EXT_ZVFBFMIN 95
105+
#define RISCV_ISA_EXT_ZVFBFWMA 96
103106

104107
#define RISCV_ISA_EXT_XLINUXENVCFG 127
105108

arch/riscv/kernel/cpufeature.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,15 @@ bool __riscv_isa_extension_available(const unsigned long *isa_bitmap, unsigned i
7676
}
7777
EXPORT_SYMBOL_GPL(__riscv_isa_extension_available);
7878

79+
static int riscv_ext_f_depends(const struct riscv_isa_ext_data *data,
80+
const unsigned long *isa_bitmap)
81+
{
82+
if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_f))
83+
return 0;
84+
85+
return -EPROBE_DEFER;
86+
}
87+
7988
static int riscv_ext_zicbom_validate(const struct riscv_isa_ext_data *data,
8089
const unsigned long *isa_bitmap)
8190
{
@@ -136,6 +145,28 @@ static int riscv_ext_zcf_validate(const struct riscv_isa_ext_data *data,
136145
return -EPROBE_DEFER;
137146
}
138147

148+
static int riscv_vector_f_validate(const struct riscv_isa_ext_data *data,
149+
const unsigned long *isa_bitmap)
150+
{
151+
if (!IS_ENABLED(CONFIG_RISCV_ISA_V))
152+
return -EINVAL;
153+
154+
if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZVE32F))
155+
return 0;
156+
157+
return -EPROBE_DEFER;
158+
}
159+
160+
static int riscv_ext_zvfbfwma_validate(const struct riscv_isa_ext_data *data,
161+
const unsigned long *isa_bitmap)
162+
{
163+
if (__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZFBFMIN) &&
164+
__riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_ZVFBFMIN))
165+
return 0;
166+
167+
return -EPROBE_DEFER;
168+
}
169+
139170
static int riscv_ext_svadu_validate(const struct riscv_isa_ext_data *data,
140171
const unsigned long *isa_bitmap)
141172
{
@@ -341,6 +372,7 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
341372
__RISCV_ISA_EXT_DATA(zacas, RISCV_ISA_EXT_ZACAS),
342373
__RISCV_ISA_EXT_DATA(zawrs, RISCV_ISA_EXT_ZAWRS),
343374
__RISCV_ISA_EXT_DATA(zfa, RISCV_ISA_EXT_ZFA),
375+
__RISCV_ISA_EXT_DATA_VALIDATE(zfbfmin, RISCV_ISA_EXT_ZFBFMIN, riscv_ext_f_depends),
344376
__RISCV_ISA_EXT_DATA(zfh, RISCV_ISA_EXT_ZFH),
345377
__RISCV_ISA_EXT_DATA(zfhmin, RISCV_ISA_EXT_ZFHMIN),
346378
__RISCV_ISA_EXT_DATA(zca, RISCV_ISA_EXT_ZCA),
@@ -373,6 +405,9 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
373405
__RISCV_ISA_EXT_SUPERSET(zve64d, RISCV_ISA_EXT_ZVE64D, riscv_zve64d_exts),
374406
__RISCV_ISA_EXT_SUPERSET(zve64f, RISCV_ISA_EXT_ZVE64F, riscv_zve64f_exts),
375407
__RISCV_ISA_EXT_SUPERSET(zve64x, RISCV_ISA_EXT_ZVE64X, riscv_zve64x_exts),
408+
__RISCV_ISA_EXT_DATA_VALIDATE(zvfbfmin, RISCV_ISA_EXT_ZVFBFMIN, riscv_vector_f_validate),
409+
__RISCV_ISA_EXT_DATA_VALIDATE(zvfbfwma, RISCV_ISA_EXT_ZVFBFWMA,
410+
riscv_ext_zvfbfwma_validate),
376411
__RISCV_ISA_EXT_DATA(zvfh, RISCV_ISA_EXT_ZVFH),
377412
__RISCV_ISA_EXT_DATA(zvfhmin, RISCV_ISA_EXT_ZVFHMIN),
378413
__RISCV_ISA_EXT_DATA(zvkb, RISCV_ISA_EXT_ZVKB),

0 commit comments

Comments
 (0)