qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 4/9] arm: add dummy gic security registers


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH 4/9] arm: add dummy gic security registers
Date: Tue, 20 Dec 2011 21:27:13 +0000

On 20 December 2011 21:06, Mark Langsdorf <address@hidden> wrote:
> On 12/20/2011 01:58 PM, Peter Maydell wrote:
>> On 20 December 2011 19:11, Mark Langsdorf<address@hidden>  wrote:
>>> From: Rob Herring<address@hidden>
>>>
>>> Signed-off-by: Rob Herring<address@hidden>
>>> Signed-off-by: Mark Langsdorf<address@hidden>
>>> ---
>>>   hw/arm_gic.c |   10 ++++++++--
>>>   1 files changed, 8 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/hw/arm_gic.c b/hw/arm_gic.c
>>> index 9b52119..5974c2f 100644
>>> --- a/hw/arm_gic.c
>>> +++ b/hw/arm_gic.c
>>> @@ -274,7 +274,7 @@ static uint32_t gic_dist_readb(void *opaque,
>>> target_phys_addr_t offset)
>>>
>>>      cpu = gic_get_current_cpu();
>>>      cm = 1<<  cpu;
>>> -    if (offset<  0x100) {
>>> +    if (offset<  0x80) {
>>>   #ifndef NVIC
>>>          if (offset == 0)
>>>              return s->enabled;
>>> @@ -284,6 +284,9 @@ static uint32_t gic_dist_readb(void *opaque,
>>> target_phys_addr_t offset)
>>>              return 0;
>>>   #endif
>>>          goto bad_reg;
>>> +    } else if (offset<  0x100) {
>>> +        /* Interrupt Security */
>>> +        return 0;
>>
>> This won't actually break anything, but really the handling of 0x80..0xff
>> would be inside the first if() clause, because of the way we piggyback
>> the v7M NVIC off these functions. (We should clean that up, really).
>> Anyway, the v7M NVIC doesn't own 0x0..0xff, which is what the first
>> if () clause is marking off. Ditto in the write function.
>>
>> It would also be nice to have the comment explicitly say that these
>> registers are defined to RAZ/WI in GIC implementations that don't
>> implement the security extensions.
>>
> I'm not sure what changes you want made here. I can resubmit with
> the comment. But I don't know how qemu piggybacks the v7M NVIC so I
> don't understand what you want done.

I just mean that you want something like

    if (offset < 0x100) {
#ifndef NVIC
        if (offset == 0)
            return s->enabled;
        if (offset == 4)
            return ((GIC_NIRQ / 32) - 1) | ((NUM_CPU(s) - 1) << 5);
        if (offset < 0x08)
            return 0;
        if (offset >= 0x80 && offset < 0x100) {
            /* Interrupt security, RAZ/WI */
            return 0;
        }
#endif
        goto bad_reg;
    } else if (offset < 0x200) {

to keep this GIC-only register inside the not-NVIC ifdef.

(I really want to clean this up but I can't do that until we can
properly have memory regions which don't start at a page boundary
and which pass the right offset through.)

-- PMM



reply via email to

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