[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for-2.0 03/13] target-ppc: Reset SPRs on CPU reset
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PULL for-2.0 03/13] target-ppc: Reset SPRs on CPU reset |
Date: |
Thu, 20 Mar 2014 02:48:45 +0100 |
From: Alexey Kardashevskiy <address@hidden>
This resets SPR values to defaults on CPU reset. This should help
with little-endian guests reboot issues.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
Reviewed-by: Greg Kurz <address@hidden>
Signed-off-by: Andreas Färber <address@hidden>
---
target-ppc/cpu.h | 1 +
target-ppc/translate_init.c | 12 +++++++++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
index 91b7ae5..8c181e7 100644
--- a/target-ppc/cpu.h
+++ b/target-ppc/cpu.h
@@ -334,6 +334,7 @@ struct ppc_spr_t {
void (*hea_write)(void *opaque, int spr_num, int gpr_num);
#endif
const char *name;
+ target_ulong default_value;
#ifdef CONFIG_KVM
/* We (ab)use the fact that all the SPRs will have ids for the
* ONE_REG interface will have KVM_REG_PPC to use 0 as meaning,
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 6084f40..954dee3 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -631,7 +631,7 @@ static inline void _spr_register(CPUPPCState *env, int num,
#if defined(CONFIG_KVM)
spr->one_reg_id = one_reg_id,
#endif
- env->spr[num] = initial_value;
+ env->spr[num] = spr->default_value = initial_value;
}
/* Generic PowerPC SPRs */
@@ -8381,6 +8381,7 @@ static void ppc_cpu_reset(CPUState *s)
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
CPUPPCState *env = &cpu->env;
target_ulong msr;
+ int i;
pcc->parent_reset(s);
@@ -8434,6 +8435,15 @@ static void ppc_cpu_reset(CPUState *s)
env->dtl_size = 0;
#endif /* TARGET_PPC64 */
+ for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) {
+ ppc_spr_t *spr = &env->spr_cb[i];
+
+ if (!spr->name) {
+ continue;
+ }
+ env->spr[i] = spr->default_value;
+ }
+
/* Flush all TLBs */
tlb_flush(s, 1);
}
--
1.8.4.5
- [Qemu-devel] [PULL for-2.0-rc1 00/13] PowerPC patch queue 2014-03-20 #2, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 03/13] target-ppc: Reset SPRs on CPU reset,
Andreas Färber <=
- [Qemu-devel] [PULL for-2.0 06/13] target-ppc: Introduce powerisa-207-server flag, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 07/13] spapr_hcall: Fix little-endian resource handling in H_SET_MODE, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 09/13] qdev: Introduce FWPathProvider interface, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 04/13] target-ppc: Fix overallocation of opcode tables, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 10/13] spapr_llan: Add to boot device list, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 08/13] vl.c: Extend get_boot_devices_list() to ignore suffixes, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 01/13] target-ppc: Add missing 'static' and 'const' attributes, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 05/13] target-ppc: Force CPU threads count to be a power of 2, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 02/13] spapr_hcall: Fix h_enter to loop correctly, Andreas Färber, 2014/03/19
- [Qemu-devel] [PULL for-2.0 11/13] spapr_vio: Fix firmware names, Andreas Färber, 2014/03/19