qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH target-arm v1 2/9] arm: helper: Factor out CP re


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH target-arm v1 2/9] arm: helper: Factor out CP regs common to [pv]msa
Date: Thu, 4 Jun 2015 22:33:26 +0100

On 4 June 2015 at 18:54, Peter Crosthwaite <address@hidden> wrote:
> On Mon, Jun 1, 2015 at 11:48 AM, Peter Maydell <address@hidden> wrote:
>>>
>>> -static const ARMCPRegInfo vmsa_cp_reginfo[] = {
>>> +static const ARMCPRegInfo vmsa_pmsa_cp_reginfo[] = {
>>>      { .name = "DFSR", .cp = 15, .crn = 5, .crm = 0, .opc1 = 0, .opc2 = 0,
>>>        .access = PL1_RW, .type = ARM_CP_ALIAS,
>>>        .bank_fieldoffsets = { offsetoflow32(CPUARMState, cp15.dfsr_s),
>>> @@ -1856,6 +1856,14 @@ static const ARMCPRegInfo vmsa_cp_reginfo[] = {
>>>        .access = PL1_RW, .resetvalue = 0,
>>>        .bank_fieldoffsets = { offsetoflow32(CPUARMState, cp15.ifsr_s),
>>>                               offsetoflow32(CPUARMState, cp15.ifsr_ns) } },
>>> +    { .name = "DFAR", .cp = 15, .opc1 = 0, .crn = 6, .crm = 0, .opc2 = 0,
>>> +      .access = PL1_RW, .resetvalue = 0,
>>> +      .bank_fieldoffsets = { offsetof(CPUARMState, cp15.dfar_s),
>>> +                             offsetof(CPUARMState, cp15.dfar_ns) } },
>>
>> Can you move the FAR_EL1 reginfo as well, please? They should stay
>> together because they're the 32 and 64 bit versions of the same
>> register.
>>
>
> Done.
>
>> (Aside: probably there's a missing ALIAS mark.)
>>
>
> I'm not sure of the full impact of this change. Who should be the
> aliaser and aliasee? I have left it out for the moment.

The rule is that coprocessor state should be transmitted once, which
means that if we have two reginfo structs referring to (parts of)
the same underlying data, we mark one as ALIAS so it's not transferred.
The approach we've taken is that the 64-bit version is the "master"
and the 32-bit version is the alias. (Even a 32-bit CPU will have
the 64-bit regdefs, they just aren't guest visible so they end up
just acting as the means for migrating the cpreg state.)

Looking more closely, though, the FARs have a complicated setup where
the secure banked versions are aliased to FAR_EL2, which might not
exist in some configs. That's a bit weird and is probably why they're
not marked ALIAS. I think transferring the state twice should be pretty
harmless, so leave it as it is for now. I may get back to looking at
whether this is the best thing (or more likely may not...)

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]