From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: Re: [PATCH 1/9] ARM: Kirkwood: Add interrupt controller support for DT boards Date: Mon, 11 Jun 2012 07:49:17 -0500 Message-ID: <4FD5E94D.1010700@gmail.com> References: <1339324322-29388-2-git-send-email-andrew@lunn.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1339324322-29388-2-git-send-email-andrew-g2DYL2Zd6BY@public.gmane.org> Sender: linux-i2c-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Andrew Lunn Cc: jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org, linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, machael-QKn5cuLxLXY@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: devicetree@vger.kernel.org On 06/10/2012 05:31 AM, Andrew Lunn wrote: > Signed-off-by: Andrew Lunn > --- > .../devicetree/bindings/arm/mrvl/intc.txt | 20 ++++++++++++++++++ > arch/arm/boot/dts/kirkwood.dtsi | 9 ++++++++ > arch/arm/mach-kirkwood/board-dt.c | 22 +++++++++++++++++++- > 3 files changed, 50 insertions(+), 1 deletion(-) > > diff --git a/Documentation/devicetree/bindings/arm/mrvl/intc.txt b/Documentation/devicetree/bindings/arm/mrvl/intc.txt > index 80b9a94..612536e 100644 > --- a/Documentation/devicetree/bindings/arm/mrvl/intc.txt > +++ b/Documentation/devicetree/bindings/arm/mrvl/intc.txt > @@ -38,3 +38,23 @@ Example: > reg-names = "mux status", "mux mask"; > mrvl,intc-nr-irqs = <2>; > }; > + > +* Marvell Orion Interrupt controller > + > +Required properties > +- compatible : Should be "marvell,orion-intc" > +- #interrupt-cells: Specifies the number of cells needed to encode an > + interrupt source. Supported value is <1> > +- interrupt-controller : So that its clear its an interrupt controller. > +Optional properties > +- reg : Not used yet, but will contain the interrupt mask address > + > +Example: > + > + intc: interrupt-controller { > + compatible = "marvell,orion-intc", "marvell,intc"; > + interrupt-controller; > + #interrupt-cells = <1>; > + reg = <0xfed20204 0x04>, > + <0xfed20214 0x04>; > + }; > diff --git a/arch/arm/boot/dts/kirkwood.dtsi b/arch/arm/boot/dts/kirkwood.dtsi > index 926528b..8eab7c4 100644 > --- a/arch/arm/boot/dts/kirkwood.dtsi > +++ b/arch/arm/boot/dts/kirkwood.dtsi > @@ -2,6 +2,15 @@ > > / { > compatible = "mrvl,kirkwood"; > + interrupt-parent = <&intc>; > + > + intc: interrupt-controller { > + compatible = "marvell,orion-intc", "marvell,intc"; > + interrupt-controller; > + #interrupt-cells = <1>; > + reg = <0xfed20204 0x04>, > + <0xfed20214 0x04>; > + }; > > ocp@f1000000 { > compatible = "simple-bus"; > diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c > index edc3f8a..fa51586 100644 > --- a/arch/arm/mach-kirkwood/board-dt.c > +++ b/arch/arm/mach-kirkwood/board-dt.c > @@ -14,6 +14,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -80,11 +81,30 @@ static const char *kirkwood_dt_board_compat[] = { > NULL > }; > > +static int __init kirkwood_add_irq_domain(struct device_node *np, > + struct device_node *interrupt_parent) > +{ > + kirkwood_init_irq(); > + irq_domain_add_legacy(np, 64, 0, 0, &irq_domain_simple_ops, NULL); The irqdomain should really be integrated into the interrupt controller itself rather than bolted on top and doesn't need to be DT only. In the process, use irq_data.hwirq rather than fixed Linux virq to hwirq conversion. Once all interrupts are bound using DT, a linear domain should be used. But that may take some time. Rob > + return 0; > +}rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org > + > +static const struct of_device_id kirkwood_irq_match[] = { > + { .compatible = "marvell,orion-intc", > + .data = kirkwood_add_irq_domain, }, > + {}, > +}; > + > +static void __init kirkwood_dt_init_irq(void) > +{ > + of_irq_init(kirkwood_irq_match); > +} > + > DT_MACHINE_START(KIRKWOOD_DT, "Marvell Kirkwood (Flattened Device Tree)") > /* Maintainer: Jason Cooper */ > .map_io = kirkwood_map_io, > .init_early = kirkwood_init_early, > - .init_irq = kirkwood_init_irq, > + .init_irq = kirkwood_dt_init_irq, > .timer = &kirkwood_timer, > .init_machine = kirkwood_dt_init, > .restart = kirkwood_restart,