@@ -76,6 +76,15 @@ bool __riscv_isa_extension_available(const unsigned long *isa_bitmap, unsigned i
76
76
}
77
77
EXPORT_SYMBOL_GPL (__riscv_isa_extension_available );
78
78
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
+
79
88
static int riscv_ext_zicbom_validate (const struct riscv_isa_ext_data * data ,
80
89
const unsigned long * isa_bitmap )
81
90
{
@@ -136,6 +145,28 @@ static int riscv_ext_zcf_validate(const struct riscv_isa_ext_data *data,
136
145
return - EPROBE_DEFER ;
137
146
}
138
147
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
+
139
170
static int riscv_ext_svadu_validate (const struct riscv_isa_ext_data * data ,
140
171
const unsigned long * isa_bitmap )
141
172
{
@@ -341,6 +372,7 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
341
372
__RISCV_ISA_EXT_DATA (zacas , RISCV_ISA_EXT_ZACAS ),
342
373
__RISCV_ISA_EXT_DATA (zawrs , RISCV_ISA_EXT_ZAWRS ),
343
374
__RISCV_ISA_EXT_DATA (zfa , RISCV_ISA_EXT_ZFA ),
375
+ __RISCV_ISA_EXT_DATA_VALIDATE (zfbfmin , RISCV_ISA_EXT_ZFBFMIN , riscv_ext_f_depends ),
344
376
__RISCV_ISA_EXT_DATA (zfh , RISCV_ISA_EXT_ZFH ),
345
377
__RISCV_ISA_EXT_DATA (zfhmin , RISCV_ISA_EXT_ZFHMIN ),
346
378
__RISCV_ISA_EXT_DATA (zca , RISCV_ISA_EXT_ZCA ),
@@ -373,6 +405,9 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = {
373
405
__RISCV_ISA_EXT_SUPERSET (zve64d , RISCV_ISA_EXT_ZVE64D , riscv_zve64d_exts ),
374
406
__RISCV_ISA_EXT_SUPERSET (zve64f , RISCV_ISA_EXT_ZVE64F , riscv_zve64f_exts ),
375
407
__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 ),
376
411
__RISCV_ISA_EXT_DATA (zvfh , RISCV_ISA_EXT_ZVFH ),
377
412
__RISCV_ISA_EXT_DATA (zvfhmin , RISCV_ISA_EXT_ZVFHMIN ),
378
413
__RISCV_ISA_EXT_DATA (zvkb , RISCV_ISA_EXT_ZVKB ),
0 commit comments