devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: "devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org"
	<devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org>,
	"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>
Subject: Re: [PATCH 5/5] ARM: gic: add OF based initialization
Date: Mon, 19 Sep 2011 16:53:39 -0500	[thread overview]
Message-ID: <4E77B9E3.40004@gmail.com> (raw)
In-Reply-To: <CACxGe6v9nd5f5x-eu9hUyAqdS1+p3h6ixyutECYLdNo3ewDH0w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On 09/19/2011 04:14 PM, Grant Likely wrote:
> On Mon, Sep 19, 2011 at 7:48 AM, Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>> On 09/19/2011 07:09 AM, Cousson, Benoit wrote:
>>> On 9/18/2011 11:23 PM, Rob Herring wrote:
>>>> I was headed down the path of implementing the 2nd option above,
>>>> but had a dilemma. What would be the numbering base for PPIs in
>>>> this case? Should it be 0 in the DT as proposed for SPIs or does it
>>>> stay at 16?
>>>
>>> Both SGI and PPI are internal to the CortexA9 MP core, and referring
>>> to the CortexA9 MP core TRM [1], you can see that the PPI# -> ID#
>>> mapping is already documented: - Private timer, PPI(2) Each Cortex-A9
>>> processor has its own private timers that can generate interrupts,
>>> using ID29. - Watchdog timers, PPI(3) Each Cortex-A9 processor has
>>> its own watchdog timers that can generate interrupts, using ID30.
>>>
>>> So in that case, it can makes sense to use the ID. But it is
>>> interesting to note that the PPI is identified with a 0 based index
>>> number.
>>>
>> It's even worse than I thought: we could use 13 (ID16 == PPI0), 29 or 2
>> for the timer interrupt. The first would match 0 based SPI convention.
>> The last 2 would both match the documentation. We could never use 2 as
>> this will for sure be different and the GIC code will have no way to
>> know how to do the translation to ID. The only sane choice is using the
>> ID as you say.
>>
>> But you can't have it both ways. It does not make sense to use the ID
>> for some interrupts and a different scheme for others.
> 
> Hmmm, it seems to me that some orthogonal issues are getting
> conflated.  Specifically, the binding vs. what the GIC driver using
> internally.  For my own understanding, let me see if I can summarize
> and clarify the problem.
> 
> Each GIC IRQ is represented in 5 different ways:
> 1) the hardware documentation (PPI[0-15] or SPI[988] input pin)
> 2) The DT binding to represent the connection.
> 3) The Interrupt ID as specified by the GIC architecture reference[1]
> (SGI:[0-15], PPI:[16-31], SPI:[32-1019], special:[1020-1023])
> 4) The internal HWIRQ representation used by the GIC driver
> 5) The Linux VIRQ number that #4 maps to.
> 
> [1] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0048b/BCGBFHCH.html
> 
> Some thoughts:
> - Generally the DT binding (#2) should reflect the HW view of the
> system (#1) since that is the number most likely to be represented in
> hardware manuals.  The interrupt ID is an internal detail of the GIC,
> and isn't really exposed in the block diagram of the hardware.
> - Presumably it is preferable for the GIC to directly use the
> Interrupt ID (#3) as the HWIRQ number (#4) because it is the most
> efficient from an interrupt handling perspective, and indeed this is
> currently what the GIC driver does.
> - Translation between the DT binding (#2) and the Interrupt ID / HWIRQ
> (#3/#4) is trivial, and easily managed by the GIC's irq_domain.
> - Though not necessarily as trivial, the mapping between Linux VIRQ
> and HWIRQ is not fixed, and when migrating to DT it should be assumed
> to be assigned at runtime.  Perhaps not so important for a core IRQ
> controller like the GIC (as opposed to an i2c irq expander), but
> assuming an fixed offset still should be avoided.  We may still force
> a SPI0->VIRQ32 on the root GIC as an optimization, but it is not
> necessary and the driver still needs to support remapping for a
> secondary GIC.

The irq base is dynamic in my series, but is typically still GIC ID =
VIRQ for a primary GIC for now. A platform can adjust this with
irq_alloc_descs if necessary (but recommended not to of course).

> 
> So, for the GIC DT binding, I'm inclined to agree with Benoit that the
> binding should reflect the hardware connections, not the values used
> by software for decoding IRQs.  Also, I see absolutely no need to use
> separate nodes for each GIC interrupt space.  The DT interrupt
> specifier number space can more than handle the features of the GIC in
> a clear and concise manor.  So, here's my counter proposal for a GIC
> bindings (using Rob's text as the starting point):
> 
> ----
> 
> * ARM Generic Interrupt Controller
> 
> ARM SMP cores are often associated with a GIC, providing per processor
> interrupts (PPI), shared processor interrupts (SPI) and software
> generated interrupts (SGI).
> 
> Primary GIC is attached directly to the CPU and typically has PPIs and SGIs.
> Secondary GICs are cascaded into the upward interrupt controller and do not
> have PPIs or SGIs.
> 
> Main node required properties:
> 
> - compatible : should be one of:
>        "arm,cortex-a9-gic"
>        "arm,arm11mp-gic"
> - interrupt-controller : Identifies the node as an interrupt controller
> - #interrupt-cells : Specifies the number of cells needed to encode an
>   interrupt source.  The type shall be a <u32> and the value shall be 3.
> 
>   The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
> interrupts.
>   The 2nd cell contains the interrupt number for the interrupt type.
> SPI interrupts are in the range [0-987].  PPI interrupts are in the
> range [0-15].
>   The 3rd cell is the flags, encoded as follows:
>         bits[3:0] trigger type and level flags.
>                     1 = low-to-high edge triggered
>                     2 = high-to-low edge triggered
>                     4 = active high level-sensitive
>                     8 = active low level-sensitive
>         bits[15:8] PPI interrupt cpu mask.  Each bit corresponds to
> each of the 8 possible cpus attached to the GIC.  A bit set to '1'
> indicated the interrupt is wired to that CPU.  Only valid for PPI
> interrupts.
> 
How about a cpu mask of 0 means SPI and non-zero means PPI? Then we can
drop the first cell.

> (Alternately, if there is no need for a CPU mask because PPI
> interrupts will never be wired to more than one CPU, then it would be
> better to encode the CPU number into the second cell with the SPI
> number).
You meant PPI number, right?                                    ^^^

The common case at least on the A9 is a PPI is routed to all cores. QC
is different though. This was discussed previously. Basically, anything
is possible here, so the mask is needed for sure.

Overall I'm fine with this and just happy to have some conclusion. I
will send out an updated series if there are no further comments.

Rob

> 
> - reg : Specifies base physical address(s) and size of the GIC registers. The
>   first 2 values are the GIC distributor register base and size. The 2nd 2
>   values are the GIC cpu interface register base and size.
> 
> Optional
> - interrupts   : Interrupt source of the parent interrupt controller. Only
>   present on secondary GICs.
> 
> Example:
>        intc: interrupt-controller@fff11000 {
>                compatible = "arm,cortex-a9-gic";
>                #interrupt-cells = <3>;
>                #address-cells = <1>;
>                interrupt-controller;
>                reg = <0xfff11000 0x1000>,
>                      <0xfff10100 0x100>;
>        };

  parent reply	other threads:[~2011-09-19 21:53 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-14 16:31 [PATCH 0/5] GIC OF bindings Rob Herring
2011-09-14 16:31 ` [PATCH 2/5] irq: fix existing domain check in irq_domain_add Rob Herring
     [not found]   ` <1316017900-19918-3-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-14 16:44     ` Thomas Gleixner
2011-09-17 23:24       ` Grant Likely
     [not found] ` <1316017900-19918-1-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-14 16:31   ` [PATCH 1/5] irq: add declaration of irq_domain_simple_ops to irqdomain.h Rob Herring
2011-09-14 16:31   ` [PATCH 3/5] of/irq: introduce of_irq_init Rob Herring
     [not found]     ` <1316017900-19918-4-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-15 10:41       ` Arnd Bergmann
2011-09-17 23:53       ` Grant Likely
     [not found]         ` <20110917235328.GA3523-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2011-09-18  1:37           ` Rob Herring
     [not found]             ` <4E754B56.1010404-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-18  6:02               ` Grant Likely
2011-09-14 16:31   ` [PATCH 5/5] ARM: gic: add OF based initialization Rob Herring
2011-09-14 17:46     ` Marc Zyngier
     [not found]       ` <4E70E88E.4090503-5wv7dgnIgG8@public.gmane.org>
2011-09-14 17:57         ` Rob Herring
2011-09-14 18:34           ` Marc Zyngier
     [not found]             ` <4E70F3C9.2010202-5wv7dgnIgG8@public.gmane.org>
2011-09-14 18:51               ` Rob Herring
     [not found]                 ` <4E70F7BE.6020909-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-18  0:13                   ` Grant Likely
2011-09-15  7:55     ` Thomas Abraham
     [not found]       ` <CAJuYYwSFu2HC+u2NY41+yw9tEyy85RKa4Dpm3SL+jbwS_OOA0A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-09-15 10:07         ` Cousson, Benoit
     [not found]           ` <4E71CE5D.9030900-l0cyMroinI0@public.gmane.org>
2011-09-15 10:29             ` Russell King - ARM Linux
     [not found]               ` <20110915102915.GJ6267-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2011-09-15 12:28                 ` Cousson, Benoit
     [not found]                   ` <4E71EF56.3050503-l0cyMroinI0@public.gmane.org>
2011-09-15 12:51                     ` Russell King - ARM Linux
     [not found]                       ` <20110915125107.GK6267-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2011-09-15 13:03                         ` Cousson, Benoit
2011-09-15 13:11             ` Rob Herring
     [not found]               ` <4E71F978.6020402-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-15 13:52                 ` Cousson, Benoit
2011-09-15 16:43                   ` Rob Herring
2011-09-18 21:23                     ` Rob Herring
     [not found]                       ` <4E76615C.3000005-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-19 12:09                         ` Cousson, Benoit
     [not found]                           ` <4E77310A.3000106-l0cyMroinI0@public.gmane.org>
2011-09-19 13:48                             ` Rob Herring
     [not found]                               ` <4E774847.3020104-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-19 14:32                                 ` Cousson, Benoit
2011-09-19 21:14                               ` Grant Likely
     [not found]                                 ` <CACxGe6v9nd5f5x-eu9hUyAqdS1+p3h6ixyutECYLdNo3ewDH0w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-09-19 21:53                                   ` Rob Herring [this message]
     [not found]                                     ` <4E77B9E3.40004-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-20  0:22                                       ` Grant Likely
2011-09-20  4:18                                       ` Grant Likely
2011-09-20 15:23                                       ` Cousson, Benoit
2011-09-19 16:00                             ` Russell King - ARM Linux
2011-09-19 20:49                         ` Grant Likely
     [not found]                     ` <4E722B2D.4050307-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-19  9:47                       ` Cousson, Benoit
     [not found]                         ` <4E770FA6.2070305-l0cyMroinI0@public.gmane.org>
2011-09-19 13:33                           ` Russell King - ARM Linux
     [not found]                             ` <20110919133301.GR16381-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2011-09-19 17:44                               ` Grant Likely
2011-09-18  6:15             ` Grant Likely
     [not found]               ` <20110918061526.GE3523-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2011-09-19  8:47                 ` Cousson, Benoit
2011-09-16 16:09           ` Dave Martin
     [not found]             ` <20110916160939.GA2100-5wv7dgnIgG8@public.gmane.org>
2011-09-18  6:21               ` Grant Likely
2011-09-19 12:07                 ` Dave Martin
2011-09-19 13:08                   ` Cousson, Benoit
2011-09-15 12:54         ` Rob Herring
     [not found]           ` <4E71F593.2040903-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-16  9:34             ` Thomas Abraham
     [not found]               ` <CAJuYYwQ=tSh8k5ZOi2kx6KbMsQ4eVAvgE=T4kdckRSLjdj3dMQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-09-18  6:10                 ` Grant Likely
     [not found]                   ` <20110918061024.GD3523-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2011-09-19 12:59                     ` Thomas Abraham
     [not found]     ` <1316017900-19918-6-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-15 10:43       ` Arnd Bergmann
2011-09-18  6:30       ` Grant Likely
2011-09-14 16:31 ` [PATCH 4/5] ARM: gic: allow irq_start to be 0 Rob Herring
     [not found]   ` <1316017900-19918-5-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-09-18  6:24     ` Grant Likely
2011-09-18 12:03     ` Russell King - ARM Linux
2011-09-15  8:50 ` [PATCH 0/5] GIC OF bindings Jamie Iles
2011-09-15 13:53 ` Shawn Guo

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=4E77B9E3.40004@gmail.com \
    --to=robherring2-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
    --cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).