@samitouri / QOSamiQemu / commits / f7e9a5ab26

target/hexagon: extend hexagon_cpu_mmu_index() for sysemu

Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>

Brian Cain committed Jun 22, 2026 at 15:28 UTC f7e9a5ab262c91b2bf2c50564b243b0e9dba2a95
2 files changed +32
target/hexagon/cpu.c
+24
@@ -447,6 +447,30 @@ static void hexagon_cpu_realize(DeviceState *dev, Error **errp)
447
448 static int hexagon_cpu_mmu_index(CPUState *cs, bool ifetch)
449 {
450 +#ifndef CONFIG_USER_ONLY
451 + CPUHexagonState *env = cpu_env(cs);
452 + HexagonCPU *cpu = HEXAGON_CPU(cs);
453 + int cpu_mode;
454 +
455 + BQL_LOCK_GUARD();
456 + if (cpu->globalregs) {
457 + uint32_t syscfg =
458 + hexagon_globalreg_read(cpu->globalregs, HEX_SREG_SYSCFG,
459 + env->threadId);
460 + uint8_t mmuen = GET_SYSCFG_FIELD(SYSCFG_MMUEN, syscfg);
461 + if (!mmuen) {
462 + return MMU_KERNEL_IDX;
463 + }
464 + }
465 +
466 + cpu_mode = get_cpu_mode(env);
467 + if (cpu_mode == HEX_CPU_MODE_MONITOR) {
468 + return MMU_KERNEL_IDX;
469 + } else if (cpu_mode == HEX_CPU_MODE_GUEST) {
470 + return MMU_GUEST_IDX;
471 + }
472 +#endif
473 +
474 return MMU_USER_IDX;
475 }
476
target/hexagon/cpu_helper.h
+8
@@ -8,6 +8,14 @@
8 #define HEXAGON_CPU_HELPER_H
9
10 uint32_t hexagon_get_pmu_counter(CPUHexagonState *cur_env, int index);
11 +void hexagon_modify_ssr(CPUHexagonState *env, uint32_t new, uint32_t old);
12 +int get_cpu_mode(CPUHexagonState *env);
13 +int get_exe_mode(CPUHexagonState *env);
14 +void clear_wait_mode(CPUHexagonState *env);
15 +void hexagon_ssr_set_cause(CPUHexagonState *env, uint32_t cause);
16 +void hexagon_start_threads(CPUHexagonState *env, uint32_t mask);
17 +void hexagon_stop_thread(CPUHexagonState *env);
18 +void hexagon_resume_threads(CPUHexagonState *env, uint32_t mask);
19 uint64_t hexagon_get_sys_pcycle_count(CPUHexagonState *env);
20 uint32_t hexagon_get_sys_pcycle_count_high(CPUHexagonState *env);
21 uint32_t hexagon_get_sys_pcycle_count_low(CPUHexagonState *env);