> -----Original Message-----
> From: linux-arm-kernel-boun...@lists.infradead.org [mailto:linux-arm-
> kernel-boun...@lists.infradead.org] On Behalf Of Kukjin Kim
> Sent: Tuesday, October 23, 2012 10:59 PM
> To: 'Chanho Park'; ben-li...@fluff.org; linux-arm-ker...@lists.infradead.org;
> linux-samsung-soc@vger.kernel.org
> Cc: sachin.ka...@linaro.org; will.dea...@arm.com;
> kyungmin.p...@samsung.com; li...@arm.linux.org.uk;
> thomas.abra...@linaro.org
> Subject: RE: [PATCH v4 2/5] ARM: EXYNOS: Correct combined IRQs for
> exynos4
> 
> Chanho Park wrote:
> >
> > This patch corrects combined IRQs for exynos4 series platform. The
> > exynos4412
> > has four extra combined irq group and the exynos4212 has two more
> > combined irqs than exynos4210. Each irq is mapped to IRQ_SPI(xx).
> > Unfortunately, extra 4 combined IRQs isn't sequential. So, we need to
> > map the irqs manually.
> >
> > Signed-off-by: Chanho Park <chanho61.p...@samsung.com>
> > Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com>
> > ---
> >  arch/arm/mach-exynos/common.c            |   42
> +++++++++++++++++++++++++----
> > -
> >  arch/arm/mach-exynos/include/mach/irqs.h |    4 ++-
> >  2 files changed, 39 insertions(+), 7 deletions(-)
> >
> > diff --git a/arch/arm/mach-exynos/common.c
> > b/arch/arm/mach-exynos/common.c index 709245e..fdd582a 100644
> > --- a/arch/arm/mach-exynos/common.c
> > +++ b/arch/arm/mach-exynos/common.c
> > @@ -560,23 +560,50 @@ static struct irq_domain_ops
> > combiner_irq_domain_ops = {
> >     .map    = combiner_irq_domain_map,
> >  };
> >
> > +static unsigned int combiner_extra_irq(int group)
> 
> This is only for exynos4212 and exynos4412 so how about to use
> exynos4x12_combiner_extra_irq()?

I agree with you. I'll change it in next patchset.

> 
> > +{
> > +   switch (group) {
> > +   case 16:
> > +           return IRQ_SPI(107);
> > +   case 17:
> > +           return IRQ_SPI(108);
> > +   case 18:
> > +           return IRQ_SPI(48);
> > +   case 19:
> > +           return IRQ_SPI(42);
> > +   default:
> > +           return 0;
> > +   }
> > +}
> > +
> > +static unsigned int max_combiner_nr(void) {
> > +   if (soc_is_exynos5250())
> > +           return EXYNOS5_MAX_COMBINER_NR;
> > +   else if (soc_is_exynos4412())
> > +           return EXYNOS4_MAX_COMBINER_NR;
> 
> EXYNOS4412_MAX_COMBINER_NR is more clear?

EXYNOS4_MAX_COMBINER_NR is defined for MAX_COMBINER_NR which determines maximum 
combined irq number.
In this situation, EXYNOS4_MAX_COMBINER_NR is more clear than EXYNOS4412_xx.
How about this? I think it's more clearer in all cases.

-#define EXYNOS4_MAX_COMBINER_NR                16
+#define EXYNOS4210_MAX_COMBINER_NR             16
+#define EXYNOS4212_MAX_COMBINER_NR             18
+#define EXYNOS4412_MAX_COMBINER_NR             20
+#define EXYNOS4_MAX_COMBINER_NR                EXYNOS4412_MAX_COMBINER_NR

> 
> > +   else if (soc_is_exynos4212())
> > +           return EXYNOS4212_MAX_COMBINER_NR;
> > +   else
> > +           return EXYNOS4210_MAX_COMBINER_NR;
> > +}
> > +
> >  static void __init combiner_init(void __iomem *combiner_base,
> >                              struct device_node *np)
> >  {
> >     int i, irq, irq_base;
> >     unsigned int max_nr, nr_irq;
> >
> > +   max_nr = max_combiner_nr();
> > +
> >     if (np) {
> >             if (of_property_read_u32(np, "samsung,combiner-nr",
> &max_nr))
> > {
> >                     pr_warning("%s: number of combiners not specified,
> "
> 
> Hmm...the message should be changed, because it is just defined by
> checking SoC with this changes not property of device tree...So how about
> just using
> pr_info() with proper message?

I agree with you. I'll fix it.

> 
> >                             "setting default as %d.\n",
> > -                           __func__, EXYNOS4_MAX_COMBINER_NR);
> > -                   max_nr = EXYNOS4_MAX_COMBINER_NR;
> > +                           __func__, max_nr);
> >             }
> > -   } else {
> > -           max_nr = soc_is_exynos5250() ?
> EXYNOS5_MAX_COMBINER_NR :
> > -
>       EXYNOS4_MAX_COMBINER_NR;
> >     }
> > +
> >     nr_irq = max_nr * MAX_IRQ_IN_COMBINER;
> >
> >     irq_base = irq_alloc_descs(COMBINER_IRQ(0, 0), 1, nr_irq, 0); @@
> > -593,7 +620,10 @@ static void __init combiner_init(void __iomem
> > *combiner_base,
> >     }
> >
> >     for (i = 0; i < max_nr; i++) {
> > -           irq = IRQ_SPI(i);
> > +           if (i < EXYNOS4210_MAX_COMBINER_NR ||
> soc_is_exynos5250())
> > +                   irq = IRQ_SPI(i);
> > +           else
> > +                   irq = combiner_extra_irq(i);
> >  #ifdef CONFIG_OF
> >             if (np)
> >                     irq = irq_of_parse_and_map(np, i); diff --git
> > a/arch/arm/mach-exynos/include/mach/irqs.h b/arch/arm/mach-
> > exynos/include/mach/irqs.h index 35bced6..3a83546 100644
> > --- a/arch/arm/mach-exynos/include/mach/irqs.h
> > +++ b/arch/arm/mach-exynos/include/mach/irqs.h
> > @@ -165,7 +165,9 @@
> >  #define EXYNOS4_IRQ_FIMD0_VSYNC            COMBINER_IRQ(11, 1)
> >  #define EXYNOS4_IRQ_FIMD0_SYSTEM   COMBINER_IRQ(11, 2)
> >
> > -#define EXYNOS4_MAX_COMBINER_NR            16
> > +#define EXYNOS4210_MAX_COMBINER_NR 16
> > +#define EXYNOS4212_MAX_COMBINER_NR 18
> > +#define EXYNOS4_MAX_COMBINER_NR            20
> 
> EXYNOS4412_MAX_COMBINER_NR ?
> 
> >
> >  #define EXYNOS4_IRQ_GPIO1_NR_GROUPS        16
> >  #define EXYNOS4_IRQ_GPIO2_NR_GROUPS        9
> > --
> > 1.7.9.5
> 
> 
> 
> Thanks.
> 
> Best regards,
> Kgene.
> --
> Kukjin Kim <kgene....@samsung.com>, Senior Engineer, SW Solution
> Development Team, Samsung Electronics Co., Ltd.
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-ker...@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to