[PATCH 3/8] ARM: imx5: adopt generic_chip irq_domain support for tzic

Shawn Guo shawn.guo at linaro.org
Mon Feb 13 08:51:07 EST 2012


On Sat, Feb 11, 2012 at 09:31:29PM -0600, Rob Herring wrote:
> Shawn,
> 
> On 02/11/2012 11:14 AM, Shawn Guo wrote:
> > It adopts generic_chip irq_domain support for tzic, so that the
> > irq_domain initialization for tzic in imx5 DT platform code can be
> > removed.
> > 
> 
> As I found in my attempt to re-factor this and we discussed, the init
> flow is all wrong for mx5.
> 
But if we put this from point of supporting DT and non-DT with less
code churning, I would not way it's "wrong", or I would say I made
it "wrong" on purpose.

> The mach .init_irq function should call of_irq_init. mx5 is initializing
> tzic and then calling of_irq_init in the platform init calls which is
> wrong. Ultimately the compatible list should probably include avic,
> tzic, gic and any other secondary controllers you have. The of_irq_init
> callbacks need to do ioremap and initialize the controller.

Yes, this is absolutely right for DT only support.  But we are
supporting both DT and non-DT in a single image with the desire of
less code churning.

> You're
> basically removing the use of of_irq_init here.
> 
The of_irq_init was added for hacking irqdomain initialization on imx5
at the first place.  Now the hack is replaced by generic-chip irqdomain
support, so the of_irq_init goes away here.  And I agree that we need
it for separating DT from non-DT support, but that belongs to another
series, and this series is just cleaning up irqdomain support.

> Some more comments below.
> 
> > Signed-off-by: Shawn Guo <shawn.guo at linaro.org>
> > ---
> >  arch/arm/boot/dts/imx51.dtsi            |    6 +++++
> >  arch/arm/boot/dts/imx53.dtsi            |    6 +++++
> >  arch/arm/mach-mx5/clock-mx51-mx53.c     |    4 +-
> >  arch/arm/mach-mx5/imx51-dt.c            |    8 -------
> >  arch/arm/mach-mx5/imx53-dt.c            |    8 -------
> >  arch/arm/plat-mxc/include/mach/common.h |    2 +
> >  arch/arm/plat-mxc/tzic.c                |   32 ++++++++++++++++--------------
> >  7 files changed, 33 insertions(+), 33 deletions(-)
> > 
> > diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi
> > index 6663986..a5fda43 100644
> > --- a/arch/arm/boot/dts/imx51.dtsi
> > +++ b/arch/arm/boot/dts/imx51.dtsi
> > @@ -171,6 +171,12 @@
> >  				status = "disabled";
> >  			};
> >  
> > +			gpt at 73fa0000 {
> > +				compatible = "fsl,imx51-gpt", "fsl,gpt";
> > +				reg = <0x73fa0000 0x4000>;
> > +				interrupts = <39>;
> > +			};
> > +
> >  			uart1: uart at 73fbc000 {
> >  				compatible = "fsl,imx51-uart", "fsl,imx21-uart";
> >  				reg = <0x73fbc000 0x4000>;
> > diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi
> > index 5dd91b9..05e6412 100644
> > --- a/arch/arm/boot/dts/imx53.dtsi
> > +++ b/arch/arm/boot/dts/imx53.dtsi
> > @@ -173,6 +173,12 @@
> >  				status = "disabled";
> >  			};
> >  
> > +			gpt at 53fa0000 {
> > +				compatible = "fsl,imx53-gpt", "fsl,gpt";
> > +				reg = <0x53fa0000 0x4000>;
> > +				interrupts = <39>;
> > +			};
> > +
> >  			uart1: uart at 53fbc000 {
> >  				compatible = "fsl,imx53-uart", "fsl,imx21-uart";
> >  				reg = <0x53fbc000 0x4000>;
> > diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c
> > index 4cb2769..c558cb1 100644
> > --- a/arch/arm/mach-mx5/clock-mx51-mx53.c
> > +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c
> > @@ -1593,7 +1593,7 @@ int __init mx51_clocks_init(unsigned long ckil, unsigned long osc,
> >  
> >  	/* System timer */
> >  	mxc_timer_init(&gpt_clk, MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR),
> > -		MX51_INT_GPT);
> > +		       tzic_irq_create_mapping(MX51_INT_GPT));
> 
> In the DT case, you should be calling irq_of_parse_and_map to setup the
> timer irq.
> 
> I really think you need to separate DT and non-DT init functions. You
> need to ultimately be getting both the base address and the irq from the
> dts. This applies to both timer and irq controllers.

Yes, I agree with you I need to do those at some point when we fully
support DT and get ready to remove the non-DT support completely.  But
we are not there yet.  Can I cook another series to do that when we
get there, so that we make this series stay clean and focusing?

> If you make the
> init code better separated, then you won't have the problems with legacy
> vs. linear domains.
> 
I do not have any problem here, since both DT and non-DT are using
linear domain.  Isn't this something encouraged to do?

-- 
Regards,
Shawn



More information about the linux-arm-kernel mailing list