From: Jamie Iles <jamie-wmLquQDDieKakBO8gow8eQ@public.gmane.org>
To: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH 1/3] vic: add device tree bindings
Date: Mon, 25 Jul 2011 23:31:51 +0100 [thread overview]
Message-ID: <20110725223151.GB3001@gallagher> (raw)
In-Reply-To: <20110725200434.GB26735-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
Hi Grant,
On Mon, Jul 25, 2011 at 02:04:34PM -0600, Grant Likely wrote:
> On Mon, Jul 25, 2011 at 05:09:58PM +0100, Jamie Iles wrote:
[...]
> > arch/arm/common/vic.c | 35 +++++++++++++++++++++++++
> > arch/arm/include/asm/hardware/vic.h | 5 +++
> > 3 files changed, 61 insertions(+), 0 deletions(-)
> > create mode 100644 Documentation/devicetree/bindings/arm/vic.txt
> >
> > diff --git a/Documentation/devicetree/bindings/arm/vic.txt b/Documentation/devicetree/bindings/arm/vic.txt
> > new file mode 100644
> > index 0000000..be5abc9
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/arm/vic.txt
> > @@ -0,0 +1,21 @@
> > +ARM Vectored Interrupt Controller
> > +
> > +Some ARM cores may contain a vectored interrupt controller (VIC). This
> > +controller is represented in the device tree with:
> > +
> > +Required properties:
> > + - #interrupt-cells : <1> (32 interrupt sources supported)
>
> Does the vic have any configuration for level/edge or polarity?
No, there's no configuration of this type.
> > + - compatible : "arm,pl190-vic", "arm,pl192-vic", "arm-vic"
>
> drop "arm-vic". Compatible values should always be specific to an
> implementation, preferably to a specific version of hardware, although
> I'm also okay with an IP core name if the version if the core is
> provided.
OK, fair point. Versatile currently uses arm-vic but I'm not sure what
part it actually is as I don't have access to that platform.
> > + - reg : Offset and length of the register set for this device
> > + - interrupt-controller
> > + - irq-start : The first interrupt number that the VIC services
>
> Drop irq-start, it should not be needed. The interrupt controller
> should allocate its own range of irq numbers when it is set up.
So the reason I have this is in our system (and I believe others too
including some samsung parts), the vic's aren't cascaded so I'm not sure
how the entry macros would resolve the outputs from each vic correctly.
Perhaps I'm missing something here though.
> > +
> > +Example ARM VIC node:
> > +
> > +vic0@60000 {
> > + compatible = "arm,pl192-vic";
> > + interrupt-controller;
> > + reg = <0x60000 0x1000>;
> > + irq-start = <32>;
> > + #interrupt-cells = <1>;
> > +};
> > diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c
> > index 7aa4262..5838b9f 100644
> > --- a/arch/arm/common/vic.c
> > +++ b/arch/arm/common/vic.c
> > @@ -25,6 +25,9 @@
> > #include <linux/syscore_ops.h>
> > #include <linux/device.h>
> > #include <linux/amba/bus.h>
> > +#include <linux/of.h>
> > +#include <linux/of_address.h>
> > +#include <linux/of_irq.h>
> >
> > #include <asm/mach/irq.h>
> > #include <asm/hardware/vic.h>
> > @@ -377,3 +380,35 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
> >
> > vic_pm_register(base, irq_start, resume_sources);
> > }
> > +
> > +#ifdef CONFIG_OF
> > +static const struct of_device_id arm_vic_ids[] __initconst = {
> > + { .compatible = "arm,pl190-vic" },
> > + { .compatible = "arm,pl192-vic" },
> > + { .compatible = "arm,vic" },
> > + {},
> > +};
> > +
> > +void __init vic_of_init(void)
> > +{
> > + struct device_node *np;
> > +
> > + for_each_matching_node(np, arm_vic_ids) {
> > + void __iomem *iobase;
> > + u32 base_irq;
> > +
> > + iobase = of_iomap(np, 0);
> > +
> > + if (!iobase)
> > + panic("Unable to map VIC");
>
> If you WARN here instead, then there is a much greater chance of
> actually getting output to the user.
OK, I'll change this.
> > +
> > + if (of_property_read_u32(np, "irq-start", &base_irq))
> > + panic("No irq-start property defined");
> > +
> > + of_node_put(np);
> > +
> > + vic_init(iobase, base_irq, ~0, 0);
> > + irq_domain_add_simple(np, base_irq);
>
> irq_domain_add_simple() is a stop-gap shortcut for interrupt
> controllers that don't use irq_domain directly. I'm okay with doing
> this in the short term, but I imagine it will want to change in the
> near future to take advantage of hw->linux irq translation provided by
> irq_domain when it matures.
I have to admit to taking this from other controllers without fully
understanding it. Is there any documentation on how this should be done
correctly in the longer term?
> > + }
>
> I think that rather than writing a interrupt-controller-specific
> parse route like this one, it would be much better to have a generic
> helper that finds and sorts all the interrupt controllers before
> calling a setup callback for each one.
Hmm, not sure I follow this. I can see that many controllers would have
some common properties so there will be some common code - are you
suggesting having something do all the parsing then callbacks for each
controller type that takes some kind of template or am I way off the
mark?
Thanks,
Jamie
next prev parent reply other threads:[~2011-07-25 22:31 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-25 16:09 [PATCH 0/3] Add device tree based initialisation for VIC Jamie Iles
[not found] ` <1311610200-12408-1-git-send-email-jamie-wmLquQDDieKakBO8gow8eQ@public.gmane.org>
2011-07-25 16:09 ` [PATCH 1/3] vic: add device tree bindings Jamie Iles
[not found] ` <1311610200-12408-2-git-send-email-jamie-wmLquQDDieKakBO8gow8eQ@public.gmane.org>
2011-07-25 20:04 ` Grant Likely
[not found] ` <20110725200434.GB26735-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2011-07-25 22:31 ` Jamie Iles [this message]
2011-07-31 4:11 ` Grant Likely
[not found] ` <20110731041107.GN24334-e0URQFbLeQY2iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2011-07-31 15:27 ` Jamie Iles
2011-07-25 16:09 ` [PATCH 2/3] versatile dt: set the irq-start property for the vic Jamie Iles
2011-07-25 16:10 ` [PATCH 3/3] versatile: convert to common VIC DT probing Jamie Iles
2011-07-25 19:54 ` [PATCH 0/3] Add device tree based initialisation for VIC Grant Likely
2011-07-25 22:20 ` Jamie Iles
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=20110725223151.GB3001@gallagher \
--to=jamie-wmlquqddiekakbo8gow8eq@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-lFZ/pmaqli7XmaaqVzeoHQ@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).