[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 2/2] ARM: arm_cpu_reset: make possible to use high
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [RFC 2/2] ARM: arm_cpu_reset: make possible to use high vectors for reset_exc |
Date: |
Sat, 7 Dec 2013 21:03:56 +0000 |
On 7 December 2013 20:49, Antony Pavlov <address@hidden> wrote:
> On Sat, 7 Dec 2013 11:08:40 +1000
> Peter Crosthwaite <address@hidden> wrote:
>
>> On Sat, Dec 7, 2013 at 10:55 AM, Antony Pavlov <address@hidden> wrote:
>> > Signed-off-by: Antony Pavlov <address@hidden>
>> > ---
>> > target-arm/cpu.c | 4 ++++
>> > 1 file changed, 4 insertions(+)
>> >
>> > diff --git a/target-arm/cpu.c b/target-arm/cpu.c
>> > index f838499..6f548c7 100644
>> > --- a/target-arm/cpu.c
>> > +++ b/target-arm/cpu.c
>> > @@ -126,6 +126,10 @@ static void arm_cpu_reset(CPUState *s)
>> > env->cp15.c1_sys = c1_sys | (1 << 13);
>> > }
>> >
>> > + if (!IS_M(env) && env->cp15.c1_sys & (1 << 13)) {
>> > + env->regs[15] = 0xFFFF0000;
>>
>> Dont see the need for the second if. This should only be reachable if
>> reset_hivecs == true. Can you just put this line after the above
>> "env->cp15.c1_sys = c1_sys | (1 << 13);" ?
>
> Here we have a small problem.
> On the one hand we have 'reset_hivecs' property, on the other hand we have
> c1_sys[13].
>
> What we have to do if during reset c1_sys[13] == 1 and 'reset_hivecs' is not
> set?
See my other mail: on reset you should not care about the value
of reset_hivecs. At realize (ie in arm_cpu_realizefn(), at the top
(so it takes effect before that function calls
register_cp_regs_for_features()) you should do:
if (cpu->reset_hivecs) {
cpu->reset_sctlr |= (1 << 13);
}
This will mean that c1_sys (the SCTLR) will always reset with
the hivecs bit set, which is what we want.
Then the only thing you need to do at reset is:
if (env->cp15.c1_sys & (1 << 13)) {
/* hivecs setting also affects the CPU reset address */
env->regs[15] = 0xffff0000;
}
(as Peter says we can rely on this never being true for M profile
so no specific check for that is required).
thanks
-- PMM
- Re: [Qemu-devel] [RFC v5 2/5] hw/arm/digic: prepare DIGIC-based boards support, (continued)
- Re: [Qemu-devel] [RFC 1/2] ARM: cpu: add "hivecs" property (high vectors on reset), Peter Maydell, 2013/12/06
- [Qemu-devel] [RFC 2/2] ARM: arm_cpu_reset: make possible to use high vectors for reset_exc, Antony Pavlov, 2013/12/06
- Re: [Qemu-devel] [RFC 2/2] ARM: arm_cpu_reset: make possible to use high vectors for reset_exc, Peter Crosthwaite, 2013/12/06
- Re: [Qemu-devel] [RFC 2/2] ARM: arm_cpu_reset: make possible to use high vectors for reset_exc, Antony Pavlov, 2013/12/07
- Re: [Qemu-devel] [RFC 2/2] ARM: arm_cpu_reset: make possible to use high vectors for reset_exc,
Peter Maydell <=