Subject: Re: [PATCH 1/2] [POWERPC] rtc_cmos_setup: assign interrupts only if there is i8259 PIC

From: Anton Vorontsov <[email-masked]>
Date: Tue, 3 Jun 2008 16:21:22 +0400

On Tue, May 06, 2008 at 10:06:02AM +0200, Gabriel Paubert wrote:
> On Mon, May 05, 2008 at 10:55:38PM +0400, Anton Vorontsov wrote:
> > Sometimes (particularly on MPC8610HPCD) we want IRQ-less CMOS RTC for
> > the boards without (or disabled) i8259 PICs.
> > 
> > We lookup the device tree for "chrp,iic" compatible devices, and if not
> > found we do not assign RTC IRQ.
> 
> I suspect this will break on machines which have an RTC and the
> interrupt line is not connected. 

This code is already broken this way. Yes, I only fixed it half-way, and
there is no easy way to fix it further, since rtc nodes do no specify
interrupts = <>, even if they do use them.

It means that if we'll start honour interrupts = <>, this will break
existing firmwares.

> These are PreP machines like MVME2[467]xxx (I have a bunch of them,
> stilll running 2.2 kernels but on a private network). 
> Interrupt 8 is connected, but not to the RTC...
> 
> I have no problems with the patch going in for now, it will have
> to be revisited whenever (if ever) support for these machines is added
> to the kernel (what is really needed to support these machines is a
> residual data->device tree converter).
> 
> 	Gabriel
> 
> 
> 
> > 
> > Signed-off-by: Anton Vorontsov <[email-masked]>
> > ---
> >  arch/powerpc/sysdev/rtc_cmos_setup.c |   21 +++++++++++++++------
> >  1 files changed, 15 insertions(+), 6 deletions(-)
> > 
> > diff --git a/arch/powerpc/sysdev/rtc_cmos_setup.c b/arch/powerpc/sysdev/rtc_cmos_setup.c
> > index c09ddc0..e5d0bcb 100644
> > --- a/arch/powerpc/sysdev/rtc_cmos_setup.c
> > +++ b/arch/powerpc/sysdev/rtc_cmos_setup.c
> > @@ -21,6 +21,7 @@ static int  __init add_rtc(void)
> >  	struct device_node *np;
> >  	struct platform_device *pd;
> >  	struct resource res[2];
> > +	unsigned int num_res = 1;
> >  	int ret;
> >  
> >  	memset(&res, 0, sizeof(res));
> > @@ -41,14 +42,22 @@ static int  __init add_rtc(void)
> >  	if (res[0].start != RTC_PORT(0))
> >  		return -EINVAL;
> >  
> > -	/* Use a fixed interrupt value of 8 since on PPC if we are using this
> > -	 * its off an i8259 which we ensure has interrupt numbers 0..15. */
> > -	res[1].start = 8;
> > -	res[1].end = 8;
> > -	res[1].flags = IORESOURCE_IRQ;
> > +	np = of_find_compatible_node(NULL, NULL, "chrp,iic");
> > +	if (np) {
> > +		of_node_put(np);
> > +		/*
> > +		 * Use a fixed interrupt value of 8 since on PPC if we are
> > +		 * using this its off an i8259 which we ensure has interrupt
> > +		 * numbers 0..15.
> > +		 */
> > +		res[1].start = 8;
> > +		res[1].end = 8;
> > +		res[1].flags = IORESOURCE_IRQ;
> > +		num_res++;
> > +	}
> >  
> >  	pd = platform_device_register_simple("rtc_cmos", -1,
> > -					     &res[0], 2);
> > +					     &res[0], num_res);
> >  
> >  	if (IS_ERR(pd))
> >  		return PTR_ERR(pd);
> > -- 
> > 1.5.5.1
> > 
> > _______________________________________________
> > Linuxppc-dev mailing list
> > [email-masked]
> > https://ozlabs.org/mailman/listinfo/linuxppc-dev

-- 
Anton Vorontsov
email: [email-masked]
irc://irc.freenode.net/bd2