@samitouri / QOSamiQemu / commits / 48dda4700f

target/riscv/cpu.c: remove riscv_cpu_enable_named_feat()

Deprecate riscv_cpu_enable_named_feat() by creating implied rules for 'sha' and 'ssstateen'. 'zic64' is always true given that our default block size is set to 64. With this change we homogeneize extension handling when enabling profiles. Signed-off-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260512032926.1978818-7-daniel.barboza@oss.qualcomm.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Daniel Henrique Barboza committed May 12, 2026 at 00:29 UTC 48dda4700faf13356b97200791e0b7ac04476c7a
2 files changed +23 -42
target/riscv/cpu.c
+23 -2
@@ -2599,6 +2599,17 @@ static RISCVCPUImpliedExtsRule ZVKSG_IMPLIED = {
2599 },
2600 };
2601
2602 +static RISCVCPUImpliedExtsRule SHA_IMPLIED = {
2603 + .ext = CPU_CFG_OFFSET(ext_sha),
2604 + .implied_misa_exts = RVH,
2605 + .implied_multi_exts = {
2606 + CPU_CFG_OFFSET(ext_smstateen),
2607 + CPU_CFG_OFFSET(ext_ssstateen),
2608 +
2609 + RISCV_IMPLIED_EXTS_RULE_END
2610 + },
2611 +};
2612 +
2613 static RISCVCPUImpliedExtsRule SSCFG_IMPLIED = {
2614 .ext = CPU_CFG_OFFSET(ext_ssccfg),
2615 .implied_multi_exts = {
@@ -2647,6 +2658,15 @@ static RISCVCPUImpliedExtsRule SSCTR_IMPLIED = {
2658 },
2659 };
2660
2661 +static RISCVCPUImpliedExtsRule SSSTATEEN_IMPLIED = {
2662 + .ext = CPU_CFG_OFFSET(ext_ssstateen),
2663 + .implied_multi_exts = {
2664 + CPU_CFG_OFFSET(ext_smstateen),
2665 +
2666 + RISCV_IMPLIED_EXTS_RULE_END
2667 + },
2668 +};
2669 +
2670 static RISCVCPUImpliedExtsRule ZVFBFA_IMPLIED = {
2671 .ext = CPU_CFG_OFFSET(ext_zvfbfa),
2672 .implied_multi_exts = {
@@ -2673,8 +2693,9 @@ RISCVCPUImpliedExtsRule *riscv_multi_ext_implied_rules[] = {
2693 &ZVFBFA_IMPLIED, &ZVFBFMIN_IMPLIED, &ZVFBFWMA_IMPLIED,
2694 &ZVFH_IMPLIED, &ZVFHMIN_IMPLIED, &ZVKN_IMPLIED,
2695 &ZVKNC_IMPLIED, &ZVKNG_IMPLIED, &ZVKNHB_IMPLIED,
2676 - &ZVKS_IMPLIED, &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SSCFG_IMPLIED,
2677 - &SUPM_IMPLIED, &SSPM_IMPLIED, &SMCTR_IMPLIED, &SSCTR_IMPLIED,
2696 + &ZVKS_IMPLIED, &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SHA_IMPLIED,
2697 + &SSCFG_IMPLIED, &SUPM_IMPLIED, &SSPM_IMPLIED, &SMCTR_IMPLIED,
2698 + &SSCTR_IMPLIED, &SSSTATEEN_IMPLIED,
2699 NULL
2700 };
2701
target/riscv/tcg/tcg-cpu.c
-40
@@ -322,42 +322,6 @@ static const char *cpu_cfg_ext_get_name(uint32_t ext_offset)
322 g_assert_not_reached();
323 }
324
325 -static bool cpu_cfg_offset_is_named_feat(uint32_t ext_offset)
326 -{
327 - const RISCVCPUMultiExtConfig *feat;
328 -
329 - for (feat = riscv_cpu_named_features; feat->name != NULL; feat++) {
330 - if (feat->offset == ext_offset) {
331 - return true;
332 - }
333 - }
334 -
335 - return false;
336 -}
337 -
338 -static void riscv_cpu_enable_named_feat(RISCVCPU *cpu, uint32_t feat_offset)
339 -{
340 - /*
341 - * All other named features are already enabled
342 - * in riscv_tcg_cpu_instance_init().
343 - */
344 - switch (feat_offset) {
345 - case CPU_CFG_OFFSET(ext_zic64b):
346 - cpu->cfg.cbom_blocksize = 64;
347 - cpu->cfg.cbop_blocksize = 64;
348 - cpu->cfg.cboz_blocksize = 64;
349 - break;
350 - case CPU_CFG_OFFSET(ext_sha):
351 - if (!cpu_misa_ext_is_user_set(RVH)) {
352 - riscv_cpu_write_misa_bit(cpu, RVH, true);
353 - }
354 - /* fallthrough */
355 - case CPU_CFG_OFFSET(ext_ssstateen):
356 - cpu->cfg.ext_smstateen = true;
357 - break;
358 - }
359 -}
360 -
325 static void cpu_bump_multi_ext_priv_ver(CPURISCVState *env,
326 uint32_t ext_offset)
327 {
@@ -1327,10 +1291,6 @@ static void riscv_cpu_set_profile(RISCVCPU *cpu,
1291 ext_offset = profile->ext_offsets[i];
1292
1293 if (profile->enabled) {
1330 - if (cpu_cfg_offset_is_named_feat(ext_offset)) {
1331 - riscv_cpu_enable_named_feat(cpu, ext_offset);
1332 - }
1333 -
1294 cpu_bump_multi_ext_priv_ver(&cpu->env, ext_offset);
1295 }
1296