> -----Original Message----- > From: Tony Lindgren [mailto:tony@xxxxxxxxxxx] > Sent: Wednesday, September 29, 2010 3:57 AM > To: Ghorai, Sukumar > Cc: linux-omap@xxxxxxxxxxxxxxx; linux-mtd@xxxxxxxxxxxxxxxxxxx; linux-arm- > kernel@xxxxxxxxxxxxxxxxxxx > Subject: Re: [PATCH v5 1/5] omap gpmc: enable irq mode in gpmc > > * Sukumar Ghorai <s-ghorai@xxxxxx> [100927 06:30]: > > add support the irq mode in GPMC. > > gpmc_init() function move after omap_init_irq() as it has dependecy on > irq. > > > --- a/arch/arm/mach-omap2/board-2430sdp.c > > +++ b/arch/arm/mach-omap2/board-2430sdp.c > > @@ -144,6 +144,7 @@ static void __init omap_2430sdp_init_irq(void) > > omap_board_config_size = ARRAY_SIZE(sdp2430_config); > > omap2_init_common_hw(NULL, NULL); > > omap_init_irq(); > > + gpmc_init(); > > omap_gpio_init(); > > } > > > > diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach- > omap2/board-3430sdp.c > > index 67b95b5..549cd62 100644 > > --- a/arch/arm/mach-omap2/board-3430sdp.c > > +++ b/arch/arm/mach-omap2/board-3430sdp.c > > @@ -328,6 +328,7 @@ static void __init omap_3430sdp_init_irq(void) > > omap3_pm_init_cpuidle(omap3_cpuidle_params_table); > > omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL); > > omap_init_irq(); > > + gpmc_init(); > > omap_gpio_init(); > > } > ... > > You can avoid adding gpmc_init() by making it a subsys_initcall(). > Just make sure you return early from it with if (!cpu_class_is_omap2()). [Ghorai] will do > > > --- a/arch/arm/mach-omap2/gpmc.c > > +++ b/arch/arm/mach-omap2/gpmc.c > > @@ -713,6 +721,31 @@ void __init gpmc_init(void) > > l |= (0x02 << 3) | (1 << 0); > > gpmc_write_reg(GPMC_SYSCONFIG, l); > > gpmc_mem_init(); > > + > > + /* initalize the irq_chained */ > > + irq = OMAP_GPMC_IRQ_BASE; > > + for (cs = 0; cs < GPMC_CS_NUM; cs++) { > > + set_irq_handler(irq, handle_simple_irq); > > + set_irq_flags(irq, IRQF_VALID); > > + irq++; > > + } > > + > > + if (request_irq(20, gpmc_handle_irq, IRQF_SHARED, "gpmc", > gpmc_base)) > > + printk(KERN_ERR "gpmc: irq-%d could not claim: err %d\n", > > + INT_34XX_GPMC_IRQ, irq); > > +} > > Hmm, this does not look right.. Shouldn't you call > set_irq_chained_handler() > somewhere too? [Ghorai] its not use, as multi-lebel irq is not there. >Also, are you sure the interrupt is 20 for all of mach- > omap2? > It should be added to the irqs.h files. [Ghorai] it's added in irqs.h, and will remove the hard coded value. Last minute mistake. > > > +static irqreturn_t gpmc_handle_irq(int irq, void *dev) > > +{ > > + u8 cs; > > + > > + if (irq != INT_34XX_GPMC_IRQ) > > + return IRQ_HANDLED; > > + /* check cs to invoke the irq */ > > + cs = ((gpmc_read_reg(GPMC_PREFETCH_CONFIG1)) >> CS_NUM_SHIFT) & 0x7; > > + generic_handle_irq(OMAP_GPMC_IRQ_BASE+cs); > > + > > + return IRQ_HANDLED; > > } > > Doesn't doing OMAP_GPMC_IRQ_BASE + cs overlap with some other irq? [Ghorai] will check the boundary condition too - if(OMAP_GPMC_IRQ_BASE + cs <= OMAP_GPMC_IRQ_END) And will re-submit. > > Regards, > > Tony -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html