@@ -76,6 +76,15 @@ bool __riscv_isa_extension_available(const unsigned long *isa_bitmap, unsigned i
7676}
7777EXPORT_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+
7988static 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+
139170static 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