[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] target/hppa: Add CPU reset method
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH 1/2] target/hppa: Add CPU reset method |
Date: |
Mon, 30 Dec 2024 15:57:31 +0100 |
User-agent: |
Mozilla Thunderbird |
On 30/12/24 00:41, deller@kernel.org wrote:
From: Helge Deller <deller@gmx.de>
Add the CPU reset method, which resets all CPU registers and the TLB to
zero. Then the CPU will switch to 32-bit mode (PSW_W bit is not set) and
start execution at address 0xf0000004.
Although we currently want to zero out all values in the CPUHPPAState
struct, add the end_reset_fields marker in case the state structs gets
extended with other variables later on which should not be reset.
Signed-off-by: Helge Deller <deller@gmx.de>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
V4:
- Drop initialization of exception_index in hppa_cpu_initfn()
V3:
- Call reset function from hppa_machine_reset() instead
V2:
- Add end_reset_fields marker
- call reset function in hppa_cpu_initfn()
---
hw/hppa/machine.c | 6 +++---
target/hppa/cpu.c | 26 ++++++++++++++++++++++++--
target/hppa/cpu.h | 5 +++++
3 files changed, 32 insertions(+), 5 deletions(-)
+static void hppa_cpu_reset_hold(Object *obj, ResetType type)
+{
+ HPPACPU *cpu = HPPA_CPU(obj);
+ HPPACPUClass *scc = HPPA_CPU_GET_CLASS(cpu);
+ CPUHPPAState *env = &cpu->env;
+ CPUState *cs = CPU(cpu);
+
+ if (scc->parent_phases.hold) {
+ scc->parent_phases.hold(obj, type);
This ends calling cpu_common_reset_hold() ...
+ }
+
+ memset(env, 0, offsetof(CPUHPPAState, end_reset_fields));
+ cpu_set_pc(cs, 0xf0000004);
+ cpu_hppa_put_psw(env, hppa_is_pa20(env) ? PSW_W : 0);
+ cpu_hppa_loaded_fr0(env);
+
+ cs->exception_index = -1;
+ cs->halted = 0;
... which already sets these values. Why is that required?
+}