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);