[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 45/53] target/nios2: convert to use format_tlb callback
From: |
Daniel P . Berrangé |
Subject: |
[PATCH v2 45/53] target/nios2: convert to use format_tlb callback |
Date: |
Tue, 14 Sep 2021 15:20:34 +0100 |
Change the "info tlb" implementation to use the format_tlb callback.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
target/nios2/cpu.c | 3 +++
target/nios2/cpu.h | 2 +-
target/nios2/mmu.c | 37 +++++++++++++++++++------------------
target/nios2/monitor.c | 12 ++++++++++--
4 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/target/nios2/cpu.c b/target/nios2/cpu.c
index cbf15fb1c9..60162ee692 100644
--- a/target/nios2/cpu.c
+++ b/target/nios2/cpu.c
@@ -242,6 +242,9 @@ static void nios2_cpu_class_init(ObjectClass *oc, void
*data)
cc->class_by_name = nios2_cpu_class_by_name;
cc->has_work = nios2_cpu_has_work;
cc->format_state = nios2_cpu_format_state;
+#ifndef CONFIG_USER_ONLY
+ cc->format_tlb = nios2_cpu_format_tlb;
+#endif
cc->set_pc = nios2_cpu_set_pc;
cc->disas_set_info = nios2_cpu_disas_set_info;
#ifndef CONFIG_USER_ONLY
diff --git a/target/nios2/cpu.h b/target/nios2/cpu.h
index 3b16cd1f3c..1167872bd9 100644
--- a/target/nios2/cpu.h
+++ b/target/nios2/cpu.h
@@ -194,8 +194,8 @@ struct Nios2CPU {
void nios2_tcg_init(void);
void nios2_cpu_do_interrupt(CPUState *cs);
int cpu_nios2_signal_handler(int host_signum, void *pinfo, void *puc);
-void dump_mmu(CPUNios2State *env);
void nios2_cpu_format_state(CPUState *cpu, GString *buf, int flags);
+void nios2_cpu_format_tlb(CPUState *cpu, GString *buf);
hwaddr nios2_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
void nios2_cpu_do_unaligned_access(CPUState *cpu, vaddr addr,
MMUAccessType access_type,
diff --git a/target/nios2/mmu.c b/target/nios2/mmu.c
index 2545c06761..1c7d3b34c3 100644
--- a/target/nios2/mmu.c
+++ b/target/nios2/mmu.c
@@ -252,29 +252,30 @@ void mmu_init(CPUNios2State *env)
mmu->tlb = g_new0(Nios2TLBEntry, cpu->tlb_num_entries);
}
-void dump_mmu(CPUNios2State *env)
+void nios2_cpu_format_tlb(CPUState *cpu, GString *buf)
{
- Nios2CPU *cpu = env_archcpu(env);
+ CPUNios2State *env = cpu->env_ptr;
+ Nios2CPU *ncpu = env_archcpu(env);
int i;
- qemu_printf("MMU: ways %d, entries %d, pid bits %d\n",
- cpu->tlb_num_ways, cpu->tlb_num_entries,
- cpu->pid_num_bits);
+ g_string_append_printf(buf, "MMU: ways %d, entries %d, pid bits %d\n",
+ ncpu->tlb_num_ways, ncpu->tlb_num_entries,
+ ncpu->pid_num_bits);
- for (i = 0; i < cpu->tlb_num_entries; i++) {
+ for (i = 0; i < ncpu->tlb_num_entries; i++) {
Nios2TLBEntry *entry = &env->mmu.tlb[i];
- qemu_printf("TLB[%d] = %08X %08X %c VPN %05X "
- "PID %02X %c PFN %05X %c%c%c%c\n",
- i, entry->tag, entry->data,
- (entry->tag & (1 << 10)) ? 'V' : '-',
- entry->tag >> 12,
- entry->tag & ((1 << cpu->pid_num_bits) - 1),
- (entry->tag & (1 << 11)) ? 'G' : '-',
- entry->data & CR_TLBACC_PFN_MASK,
- (entry->data & CR_TLBACC_C) ? 'C' : '-',
- (entry->data & CR_TLBACC_R) ? 'R' : '-',
- (entry->data & CR_TLBACC_W) ? 'W' : '-',
- (entry->data & CR_TLBACC_X) ? 'X' : '-');
+ g_string_append_printf(buf, "TLB[%d] = %08X %08X %c VPN %05X "
+ "PID %02X %c PFN %05X %c%c%c%c\n",
+ i, entry->tag, entry->data,
+ (entry->tag & (1 << 10)) ? 'V' : '-',
+ entry->tag >> 12,
+ entry->tag & ((1 << ncpu->pid_num_bits) - 1),
+ (entry->tag & (1 << 11)) ? 'G' : '-',
+ entry->data & CR_TLBACC_PFN_MASK,
+ (entry->data & CR_TLBACC_C) ? 'C' : '-',
+ (entry->data & CR_TLBACC_R) ? 'R' : '-',
+ (entry->data & CR_TLBACC_W) ? 'W' : '-',
+ (entry->data & CR_TLBACC_X) ? 'X' : '-');
}
}
diff --git a/target/nios2/monitor.c b/target/nios2/monitor.c
index 0152dec3fa..99d35e8ef1 100644
--- a/target/nios2/monitor.c
+++ b/target/nios2/monitor.c
@@ -29,7 +29,15 @@
void hmp_info_tlb(Monitor *mon, const QDict *qdict)
{
- CPUArchState *env1 = mon_get_cpu_env(mon);
+ g_autoptr(GString) buf = g_string_new("");
+ CPUState *cpu = mon_get_cpu(mon);
- dump_mmu(env1);
+ if (!cpu) {
+ monitor_printf(mon, "No CPU available\n");
+ return;
+ }
+
+ cpu_format_tlb(cpu, buf);
+
+ monitor_printf(mon, "%s", buf->str);
}
--
2.31.1
- [PATCH v2 40/53] hw/core: drop "dump_state" callback from CPU targets, (continued)
[PATCH v2 43/53] target/i386: convert to use format_tlb callback, Daniel P . Berrangé, 2021/09/14
[PATCH v2 44/53] target/m68k: convert to use format_tlb callback, Daniel P . Berrangé, 2021/09/14
[PATCH v2 45/53] target/nios2: convert to use format_tlb callback,
Daniel P . Berrangé <=
[PATCH v2 46/53] target/ppc: convert to use format_tlb callback, Daniel P . Berrangé, 2021/09/14
[PATCH v2 47/53] target/sh4: convert to use format_tlb callback, Daniel P . Berrangé, 2021/09/14
[PATCH v2 48/53] target/sparc: convert to use format_tlb callback, Daniel P . Berrangé, 2021/09/14
[PATCH v2 49/53] target/xtensa: convert to use format_tlb callback, Daniel P . Berrangé, 2021/09/14
[PATCH v2 50/53] monitor: merge duplicate "info tlb" handlers, Daniel P . Berrangé, 2021/09/14
[PATCH v2 51/53] qapi: introduce x-query-tlb QMP command, Daniel P . Berrangé, 2021/09/14