All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <marc.zyngier@arm.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>,
	Mark Rutland <mark.rutland@arm.com>
Cc: Simon Horman <horms+renesas@verge.net.au>,
	Magnus Damm <magnus.damm@gmail.com>,
	Dirk Behme <dirk.behme@de.bosch.com>,
	linux-renesas-soc@vger.kernel.org,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>
Subject: Re: ARM GIC DT binding reg block mismatch? (Re: [PATCH v11 1/8] arm64: renesas: r8a7795: Add Renesas R8A7795 SoC support)
Date: Mon, 15 Feb 2016 08:45:56 +0000	[thread overview]
Message-ID: <56C19044.6050604@arm.com> (raw)
In-Reply-To: <CAMuHMdU-q++XEgthKG=XOgnaq7TY899EsgMFHuWu4Skr5woLZg@mail.gmail.com>

On 15/02/16 08:16, Geert Uytterhoeven wrote:
> Cc Marz Zyngier
> Cc Dirk Behme
> Cc devicetree
> Cc linux-renesas-soc
> Drop linux-sh
> 
> On Wed, Dec 9, 2015 at 9:23 AM, Geert Uytterhoeven <geert@linux-m68k.org> wrote:
>> On Tue, Nov 3, 2015 at 3:28 PM, Mark Rutland <mark.rutland@arm.com> wrote:
>>> On Wed, Oct 21, 2015 at 03:34:39PM +0200, Geert Uytterhoeven wrote:
>>>> On Thu, Oct 15, 2015 at 12:58 PM, Mark Rutland <mark.rutland@arm.com> wrote:
>>>>>>> +           gic: interrupt-controller@0xf1010000 {
>>>>>> +                     compatible = "arm,gic-400";
>>>>>> +                     #interrupt-cells = <3>;
>>>>>> +                     #address-cells = <0>;
>>>>>> +                     interrupt-controller;
>>>>>> +                     reg = <0x0 0xf1010000 0 0x1000>,
>>>>>> +                           <0x0 0xf1020000 0 0x2000>;
>>>>>> +                     interrupts = <GIC_PPI 9
>>>>>> +                                     (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
>>>>>> +             };
>>>>>
>>>>> No GICH and GICV?
>>>>
>>>> These seem to be defined in the "arm,gic-v3" DT bindings only, while this is
>>>> an "arm,gic-400" (GICD_IIDR 0x0200043b)?
>>>
>>> See the "GIC virtualization extensions (VGIC)" section in
>>> Documentation/devicetree/bindings/arm/gic.txt
>>
>> DDI0471B_gic400_r0p1_trm.pdf says:
>>
>>     Address range GIC-400 functional block
>>     A. 0x0000 - 0x0FFF Reserved
>>     B. 0x1000 - 0x1FFF Distributor
>>     C. 0x2000 - 0x3FFF CPU interfaces
>>     D. 0x4000 - 0x4FFF Virtual interface control block, for the processor that
>>                        is performing the access
>>     E. 0x5000 - 0x5FFF Virtual interface control block, for the processor
>>                        selected by address bits [11:9]
>>     F. 0x6000 - 0x7FFF Virtual CPU interfaces
>>
>> The DT binding document says:
>>   1. The  first region is the GIC distributor register base and size.
>>   2. The 2nd region is the GIC cpu interface register base and size.
>>   3. The first additional region is the GIC virtual interface control register
>>      base and size.
>>   4. The 2nd additional region is the GIC virtual cpu interface register base
>>      and size.
>>
>> Matching with the example:
>>
>>         interrupt-controller@2c001000 {
>>                 compatible = "arm,cortex-a15-gic";
>>                 #interrupt-cells = <3>;
>>                 interrupt-controller;
>>                 reg = <0x2c001000 0x1000>,
>>                       <0x2c002000 0x1000>,
>>                       <0x2c004000 0x2000>,
>>                       <0x2c006000 0x2000>;
>>                 interrupts = <1 9 0xf04>;
>>         };
>>
>> This means:
>>   - reg entry 1. covers address range B,
>>   - reg entry 2. covers address range C,
>>   - reg entry 3. covers address ranges D _and_ E,
>>   - reg entry 4. covers address range F.
>>
>> On R-Car Gen3, the base addresses are:
>>
>>     Distributor             : 0xF101_0000
>>     CPU interfaces          : 0xF102_0000
>>     Virtual interfaces      : 0xF104_0000
>>     Virtual interfaces      : 0xF105_0000
>>     Virtual CPU interfaces  : 0xF106_0000
>>
>> Note the additional multiplication factor of 16 in the offsets relative to
>> the base address 0xf1000000 (e.g. 0x50000 instead of 0x5000).
>>
>> As address ranges D and E are merged in a single reg entry, how is the GIC
>> driver supposed to know about this multiplication factor?

The answer is very simple, the GIC driver doesn't give a damn about the
second part of the GICH region, because it is absolutely unusable for
any realistic use-case. Only the banked version of GICH is of any
relevance (the first 512 bytes, in essence).

Aligning the GIC regions on 64kB boundaries is documented in the SBSA
specification, independently of the GIC400 documentation.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...

WARNING: multiple messages have this Message-ID (diff)
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: ARM GIC DT binding reg block mismatch? (Re: [PATCH v11 1/8] arm64: renesas: r8a7795: Add Renesas R8A7795 SoC support)
Date: Mon, 15 Feb 2016 08:45:56 +0000	[thread overview]
Message-ID: <56C19044.6050604@arm.com> (raw)
In-Reply-To: <CAMuHMdU-q++XEgthKG=XOgnaq7TY899EsgMFHuWu4Skr5woLZg@mail.gmail.com>

On 15/02/16 08:16, Geert Uytterhoeven wrote:
> Cc Marz Zyngier
> Cc Dirk Behme
> Cc devicetree
> Cc linux-renesas-soc
> Drop linux-sh
> 
> On Wed, Dec 9, 2015 at 9:23 AM, Geert Uytterhoeven <geert@linux-m68k.org> wrote:
>> On Tue, Nov 3, 2015 at 3:28 PM, Mark Rutland <mark.rutland@arm.com> wrote:
>>> On Wed, Oct 21, 2015 at 03:34:39PM +0200, Geert Uytterhoeven wrote:
>>>> On Thu, Oct 15, 2015 at 12:58 PM, Mark Rutland <mark.rutland@arm.com> wrote:
>>>>>>> +           gic: interrupt-controller at 0xf1010000 {
>>>>>> +                     compatible = "arm,gic-400";
>>>>>> +                     #interrupt-cells = <3>;
>>>>>> +                     #address-cells = <0>;
>>>>>> +                     interrupt-controller;
>>>>>> +                     reg = <0x0 0xf1010000 0 0x1000>,
>>>>>> +                           <0x0 0xf1020000 0 0x2000>;
>>>>>> +                     interrupts = <GIC_PPI 9
>>>>>> +                                     (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
>>>>>> +             };
>>>>>
>>>>> No GICH and GICV?
>>>>
>>>> These seem to be defined in the "arm,gic-v3" DT bindings only, while this is
>>>> an "arm,gic-400" (GICD_IIDR 0x0200043b)?
>>>
>>> See the "GIC virtualization extensions (VGIC)" section in
>>> Documentation/devicetree/bindings/arm/gic.txt
>>
>> DDI0471B_gic400_r0p1_trm.pdf says:
>>
>>     Address range GIC-400 functional block
>>     A. 0x0000 - 0x0FFF Reserved
>>     B. 0x1000 - 0x1FFF Distributor
>>     C. 0x2000 - 0x3FFF CPU interfaces
>>     D. 0x4000 - 0x4FFF Virtual interface control block, for the processor that
>>                        is performing the access
>>     E. 0x5000 - 0x5FFF Virtual interface control block, for the processor
>>                        selected by address bits [11:9]
>>     F. 0x6000 - 0x7FFF Virtual CPU interfaces
>>
>> The DT binding document says:
>>   1. The  first region is the GIC distributor register base and size.
>>   2. The 2nd region is the GIC cpu interface register base and size.
>>   3. The first additional region is the GIC virtual interface control register
>>      base and size.
>>   4. The 2nd additional region is the GIC virtual cpu interface register base
>>      and size.
>>
>> Matching with the example:
>>
>>         interrupt-controller at 2c001000 {
>>                 compatible = "arm,cortex-a15-gic";
>>                 #interrupt-cells = <3>;
>>                 interrupt-controller;
>>                 reg = <0x2c001000 0x1000>,
>>                       <0x2c002000 0x1000>,
>>                       <0x2c004000 0x2000>,
>>                       <0x2c006000 0x2000>;
>>                 interrupts = <1 9 0xf04>;
>>         };
>>
>> This means:
>>   - reg entry 1. covers address range B,
>>   - reg entry 2. covers address range C,
>>   - reg entry 3. covers address ranges D _and_ E,
>>   - reg entry 4. covers address range F.
>>
>> On R-Car Gen3, the base addresses are:
>>
>>     Distributor             : 0xF101_0000
>>     CPU interfaces          : 0xF102_0000
>>     Virtual interfaces      : 0xF104_0000
>>     Virtual interfaces      : 0xF105_0000
>>     Virtual CPU interfaces  : 0xF106_0000
>>
>> Note the additional multiplication factor of 16 in the offsets relative to
>> the base address 0xf1000000 (e.g. 0x50000 instead of 0x5000).
>>
>> As address ranges D and E are merged in a single reg entry, how is the GIC
>> driver supposed to know about this multiplication factor?

The answer is very simple, the GIC driver doesn't give a damn about the
second part of the GICH region, because it is absolutely unusable for
any realistic use-case. Only the banked version of GICH is of any
relevance (the first 512 bytes, in essence).

Aligning the GIC regions on 64kB boundaries is documented in the SBSA
specification, independently of the GIC400 documentation.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...

WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>
To: Geert Uytterhoeven
	<geert-Td1EMuHUCqxL1ZNQvxDV9g@public.gmane.org>,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
Cc: Simon Horman
	<horms+renesas-/R6kz+dDXgpPR4JQBCEnsQ@public.gmane.org>,
	Magnus Damm <magnus.damm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Dirk Behme <dirk.behme-V5te9oGctAVWk0Htik3J/w@public.gmane.org>,
	linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: ARM GIC DT binding reg block mismatch? (Re: [PATCH v11 1/8] arm64: renesas: r8a7795: Add Renesas R8A7795 SoC support)
Date: Mon, 15 Feb 2016 08:45:56 +0000	[thread overview]
Message-ID: <56C19044.6050604@arm.com> (raw)
In-Reply-To: <CAMuHMdU-q++XEgthKG=XOgnaq7TY899EsgMFHuWu4Skr5woLZg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On 15/02/16 08:16, Geert Uytterhoeven wrote:
> Cc Marz Zyngier
> Cc Dirk Behme
> Cc devicetree
> Cc linux-renesas-soc
> Drop linux-sh
> 
> On Wed, Dec 9, 2015 at 9:23 AM, Geert Uytterhoeven <geert-Td1EMuHUCqxL1ZNQvxDV9g@public.gmane.org> wrote:
>> On Tue, Nov 3, 2015 at 3:28 PM, Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> wrote:
>>> On Wed, Oct 21, 2015 at 03:34:39PM +0200, Geert Uytterhoeven wrote:
>>>> On Thu, Oct 15, 2015 at 12:58 PM, Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> wrote:
>>>>>>> +           gic: interrupt-controller@0xf1010000 {
>>>>>> +                     compatible = "arm,gic-400";
>>>>>> +                     #interrupt-cells = <3>;
>>>>>> +                     #address-cells = <0>;
>>>>>> +                     interrupt-controller;
>>>>>> +                     reg = <0x0 0xf1010000 0 0x1000>,
>>>>>> +                           <0x0 0xf1020000 0 0x2000>;
>>>>>> +                     interrupts = <GIC_PPI 9
>>>>>> +                                     (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
>>>>>> +             };
>>>>>
>>>>> No GICH and GICV?
>>>>
>>>> These seem to be defined in the "arm,gic-v3" DT bindings only, while this is
>>>> an "arm,gic-400" (GICD_IIDR 0x0200043b)?
>>>
>>> See the "GIC virtualization extensions (VGIC)" section in
>>> Documentation/devicetree/bindings/arm/gic.txt
>>
>> DDI0471B_gic400_r0p1_trm.pdf says:
>>
>>     Address range GIC-400 functional block
>>     A. 0x0000 - 0x0FFF Reserved
>>     B. 0x1000 - 0x1FFF Distributor
>>     C. 0x2000 - 0x3FFF CPU interfaces
>>     D. 0x4000 - 0x4FFF Virtual interface control block, for the processor that
>>                        is performing the access
>>     E. 0x5000 - 0x5FFF Virtual interface control block, for the processor
>>                        selected by address bits [11:9]
>>     F. 0x6000 - 0x7FFF Virtual CPU interfaces
>>
>> The DT binding document says:
>>   1. The  first region is the GIC distributor register base and size.
>>   2. The 2nd region is the GIC cpu interface register base and size.
>>   3. The first additional region is the GIC virtual interface control register
>>      base and size.
>>   4. The 2nd additional region is the GIC virtual cpu interface register base
>>      and size.
>>
>> Matching with the example:
>>
>>         interrupt-controller@2c001000 {
>>                 compatible = "arm,cortex-a15-gic";
>>                 #interrupt-cells = <3>;
>>                 interrupt-controller;
>>                 reg = <0x2c001000 0x1000>,
>>                       <0x2c002000 0x1000>,
>>                       <0x2c004000 0x2000>,
>>                       <0x2c006000 0x2000>;
>>                 interrupts = <1 9 0xf04>;
>>         };
>>
>> This means:
>>   - reg entry 1. covers address range B,
>>   - reg entry 2. covers address range C,
>>   - reg entry 3. covers address ranges D _and_ E,
>>   - reg entry 4. covers address range F.
>>
>> On R-Car Gen3, the base addresses are:
>>
>>     Distributor             : 0xF101_0000
>>     CPU interfaces          : 0xF102_0000
>>     Virtual interfaces      : 0xF104_0000
>>     Virtual interfaces      : 0xF105_0000
>>     Virtual CPU interfaces  : 0xF106_0000
>>
>> Note the additional multiplication factor of 16 in the offsets relative to
>> the base address 0xf1000000 (e.g. 0x50000 instead of 0x5000).
>>
>> As address ranges D and E are merged in a single reg entry, how is the GIC
>> driver supposed to know about this multiplication factor?

The answer is very simple, the GIC driver doesn't give a damn about the
second part of the GICH region, because it is absolutely unusable for
any realistic use-case. Only the banked version of GICH is of any
relevance (the first 512 bytes, in essence).

Aligning the GIC regions on 64kB boundaries is documented in the SBSA
specification, independently of the GIC400 documentation.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2016-02-15  8:45 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-15  8:16 ARM GIC DT binding reg block mismatch? (Re: [PATCH v11 1/8] arm64: renesas: r8a7795: Add Renesas R8A7795 SoC support) Geert Uytterhoeven
2016-02-15  8:16 ` Geert Uytterhoeven
2016-02-15  8:45 ` Marc Zyngier [this message]
2016-02-15  8:45   ` Marc Zyngier
2016-02-15  8:45   ` Marc Zyngier
2016-02-15 10:35   ` Geert Uytterhoeven
2016-02-15 10:35     ` Geert Uytterhoeven
2016-02-15 10:55     ` Marc Zyngier
2016-02-15 10:55       ` Marc Zyngier
2016-02-15 10:55       ` Marc Zyngier
2016-02-15 18:53       ` Dirk Behme
2016-02-15 18:53         ` Dirk Behme
2016-02-15 18:57         ` Marc Zyngier
2016-02-15 18:57           ` Marc Zyngier
2016-02-15 18:57           ` Marc Zyngier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56C19044.6050604@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dirk.behme@de.bosch.com \
    --cc=geert@linux-m68k.org \
    --cc=horms+renesas@verge.net.au \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=magnus.damm@gmail.com \
    --cc=mark.rutland@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.