From: Chanho Park <chanho61.park@samsung.com> To: kgene.kim@samsung.com, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Cc: sachin.kamat@linaro.org, linux@arm.linux.org.uk, will.deacon@arm.com, Chanho Park <chanho61.park@samsung.com>, Kyungmin Park <kyungmin.park@samsung.com> Subject: [PATCHv2 2/3] ARM: EXYNOS: Correct combined IRQs for exynos4412 Date: Fri, 27 Jul 2012 17:08:28 +0900 [thread overview] Message-ID: <1343376509-5881-3-git-send-email-chanho61.park@samsung.com> (raw) In-Reply-To: <1343376509-5881-1-git-send-email-chanho61.park@samsung.com> This patch corrects combined IRQs for exynos4412 platform. The exynos4412 has four extra combined irq group. Each irq is mapped to IRQ_SPI(xx). Unfortunately, extra combined IRQs isn't sequential. So, we need to map the irq manually. Signed-off-by: Chanho Park <chanho61.park@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- arch/arm/mach-exynos/common.c | 42 +++++++++++++++++++++++++----- arch/arm/mach-exynos/include/mach/irqs.h | 3 ++- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index f194bbc..499791a 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -560,6 +560,32 @@ static struct irq_domain_ops combiner_irq_domain_ops = { .map = combiner_irq_domain_map, }; +static inline unsigned int get_combiner_max_nr(void) +{ + if (soc_is_exynos5250()) + return EXYNOS5_MAX_COMBINER_NR; + else if (soc_is_exynos4412()) + return EXYNOS4_MAX_COMBINER_NR; + else + return EXYNOS42XX_MAX_COMBINER_NR; +} + +static unsigned int get_combiner_extra_irq(int group) +{ + 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 void __init combiner_init(void __iomem *combiner_base, struct device_node *np) { @@ -570,13 +596,12 @@ static void __init combiner_init(void __iomem *combiner_base, if (of_property_read_u32(np, "samsung,combiner-nr", &max_nr)) { pr_warning("%s: number of combiners not specified, " "setting default as %d.\n", - __func__, EXYNOS4_MAX_COMBINER_NR); - max_nr = EXYNOS4_MAX_COMBINER_NR; + __func__, get_combiner_max_nr()); + max_nr = get_combiner_max_nr(); } - } else { - max_nr = soc_is_exynos5250() ? EXYNOS5_MAX_COMBINER_NR : - EXYNOS4_MAX_COMBINER_NR; - } + } else + max_nr = get_combiner_max_nr(); + nr_irq = max_nr * MAX_IRQ_IN_COMBINER; irq_base = irq_alloc_descs(COMBINER_IRQ(0, 0), 1, nr_irq, 0); @@ -593,7 +618,10 @@ static void __init combiner_init(void __iomem *combiner_base, } for (i = 0; i < max_nr; i++) { - irq = IRQ_SPI(i); + if (soc_is_exynos4412() && i >= 16) + irq = get_combiner_extra_irq(i); + else + irq = IRQ_SPI(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..12b4f48 100644 --- a/arch/arm/mach-exynos/include/mach/irqs.h +++ b/arch/arm/mach-exynos/include/mach/irqs.h @@ -165,7 +165,8 @@ #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 EXYNOS42XX_MAX_COMBINER_NR 16 +#define EXYNOS4_MAX_COMBINER_NR 20 #define EXYNOS4_IRQ_GPIO1_NR_GROUPS 16 #define EXYNOS4_IRQ_GPIO2_NR_GROUPS 9 -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: chanho61.park@samsung.com (Chanho Park) To: linux-arm-kernel@lists.infradead.org Subject: [PATCHv2 2/3] ARM: EXYNOS: Correct combined IRQs for exynos4412 Date: Fri, 27 Jul 2012 17:08:28 +0900 [thread overview] Message-ID: <1343376509-5881-3-git-send-email-chanho61.park@samsung.com> (raw) In-Reply-To: <1343376509-5881-1-git-send-email-chanho61.park@samsung.com> This patch corrects combined IRQs for exynos4412 platform. The exynos4412 has four extra combined irq group. Each irq is mapped to IRQ_SPI(xx). Unfortunately, extra combined IRQs isn't sequential. So, we need to map the irq manually. Signed-off-by: Chanho Park <chanho61.park@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- arch/arm/mach-exynos/common.c | 42 +++++++++++++++++++++++++----- arch/arm/mach-exynos/include/mach/irqs.h | 3 ++- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index f194bbc..499791a 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -560,6 +560,32 @@ static struct irq_domain_ops combiner_irq_domain_ops = { .map = combiner_irq_domain_map, }; +static inline unsigned int get_combiner_max_nr(void) +{ + if (soc_is_exynos5250()) + return EXYNOS5_MAX_COMBINER_NR; + else if (soc_is_exynos4412()) + return EXYNOS4_MAX_COMBINER_NR; + else + return EXYNOS42XX_MAX_COMBINER_NR; +} + +static unsigned int get_combiner_extra_irq(int group) +{ + 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 void __init combiner_init(void __iomem *combiner_base, struct device_node *np) { @@ -570,13 +596,12 @@ static void __init combiner_init(void __iomem *combiner_base, if (of_property_read_u32(np, "samsung,combiner-nr", &max_nr)) { pr_warning("%s: number of combiners not specified, " "setting default as %d.\n", - __func__, EXYNOS4_MAX_COMBINER_NR); - max_nr = EXYNOS4_MAX_COMBINER_NR; + __func__, get_combiner_max_nr()); + max_nr = get_combiner_max_nr(); } - } else { - max_nr = soc_is_exynos5250() ? EXYNOS5_MAX_COMBINER_NR : - EXYNOS4_MAX_COMBINER_NR; - } + } else + max_nr = get_combiner_max_nr(); + nr_irq = max_nr * MAX_IRQ_IN_COMBINER; irq_base = irq_alloc_descs(COMBINER_IRQ(0, 0), 1, nr_irq, 0); @@ -593,7 +618,10 @@ static void __init combiner_init(void __iomem *combiner_base, } for (i = 0; i < max_nr; i++) { - irq = IRQ_SPI(i); + if (soc_is_exynos4412() && i >= 16) + irq = get_combiner_extra_irq(i); + else + irq = IRQ_SPI(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..12b4f48 100644 --- a/arch/arm/mach-exynos/include/mach/irqs.h +++ b/arch/arm/mach-exynos/include/mach/irqs.h @@ -165,7 +165,8 @@ #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 EXYNOS42XX_MAX_COMBINER_NR 16 +#define EXYNOS4_MAX_COMBINER_NR 20 #define EXYNOS4_IRQ_GPIO1_NR_GROUPS 16 #define EXYNOS4_IRQ_GPIO2_NR_GROUPS 9 -- 1.7.9.5
next prev parent reply other threads:[~2012-07-27 8:08 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-07-27 8:08 [PATCHv2 0/3] Add support to enable ARM PMU for EXYNOS4/5 Chanho Park 2012-07-27 8:08 ` Chanho Park 2012-07-27 8:08 ` [PATCHv2 1/3] ARM: EXYNOS: Add set_irq_affinity function for combiner_irq Chanho Park 2012-07-27 8:08 ` Chanho Park 2012-07-27 8:08 ` Chanho Park [this message] 2012-07-27 8:08 ` [PATCHv2 2/3] ARM: EXYNOS: Correct combined IRQs for exynos4412 Chanho Park 2012-07-27 8:08 ` [PATCHv2 3/3] ARM: EXYNOS: Enable PMUs for exynos4/5 Chanho Park 2012-07-27 8:08 ` Chanho Park 2012-07-27 9:02 ` Will Deacon 2012-07-27 9:02 ` Will Deacon 2012-07-28 4:26 ` Chanho Park 2012-07-28 4:26 ` Chanho Park 2012-07-28 14:41 ` Will Deacon 2012-07-28 14:41 ` Will Deacon
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1343376509-5881-3-git-send-email-chanho61.park@samsung.com \ --to=chanho61.park@samsung.com \ --cc=kgene.kim@samsung.com \ --cc=kyungmin.park@samsung.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=linux@arm.linux.org.uk \ --cc=sachin.kamat@linaro.org \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.