From: Simon Horman <horms@verge.net.au> To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 03/15] ARM: shmobile: Add support OF of INTC for r8a7740 Date: Wed, 07 Nov 2012 08:50:32 +0000 [thread overview] Message-ID: <1352278244-26702-4-git-send-email-horms@verge.net.au> (raw) In-Reply-To: <1352278244-26702-1-git-send-email-horms@verge.net.au> From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> This CPU has three interrupt controllers (INTCA, INTCS and INTCA IRQ pins). This supports these. Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> Signed-off-by: Simon Horman <horms@verge.net.au> --- v2 [Simon Horman] * Use #ifdef instead of #if defined * Use CONFIG_OF in place of CONFIG_OF_SH_INTC * Allow OF and non OF code to be compiled in the same binary and provide r8a7740_init_irq_of() as a way to initialise INTC using DT while r8a7740_init_irq() still initialises INTC using the previous code paths. This is because we would like to be able to use a single configuration to compile a kernel for multiple boards and not all r8a7740 boards have DT support yet. v1 [Nobuhiro Iwamatsu] --- arch/arm/mach-shmobile/include/mach/common.h | 1 + arch/arm/mach-shmobile/intc-r8a7740.c | 136 +++++++++++++++++++++++++- 2 files changed, 132 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index d47e215..8402b5d 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h @@ -59,6 +59,7 @@ extern struct clk sh73a0_extal2_clk; extern struct clk sh73a0_extcki_clk; extern struct clk sh73a0_extalr_clk; +extern void r8a7740_init_irq_of(void); extern void r8a7740_init_irq(void); extern void r8a7740_map_io(void); extern void r8a7740_add_early_devices(void); diff --git a/arch/arm/mach-shmobile/intc-r8a7740.c b/arch/arm/mach-shmobile/intc-r8a7740.c index 9a69a31..878fdc6 100644 --- a/arch/arm/mach-shmobile/intc-r8a7740.c +++ b/arch/arm/mach-shmobile/intc-r8a7740.c @@ -1,8 +1,9 @@ /* * R8A7740 processor support * - * Copyright (C) 2011 Renesas Solutions Corp. + * Copyright (C) 2011, 2012 Renesas Solutions Corp. * Copyright (C) 2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> + * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu@renesas.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,6 +30,105 @@ #include <asm/mach-types.h> #include <asm/mach/arch.h> +#ifdef CONFIG_OF + +static struct intc_desc intca_desc __initdata; +static struct resource intca_resources[2] __initdata; +static struct intc_desc intcs_desc __initdata; +static struct resource intcs_resources[2] __initdata; +static struct intc_desc intca_irq_pins_desc __initdata; +static struct resource intca_pins_resources[1] __initdata; +static unsigned short intevtsa_vect; + +static int r8a7740_intca_of_init(struct device_node *np, + struct device_node *parent) +{ + int ret; + + if (WARN_ON(!np)) + return -ENODEV; + + ret = of_sh_intc_get_meminfo(np, + intca_resources, ARRAY_SIZE(intcs_resources)); + if (ret) + goto error; + + intca_desc.resource = intca_resources; + intca_desc.num_resources = ARRAY_SIZE(intca_resources); + + ret = of_sh_intc_get_intc(np, &intca_desc); + if (ret) + goto error; + + intca_desc.name = "r8a7740-intca"; +error: + return ret; +} + +static int r8a7740_intcs_of_init(struct device_node *np, + struct device_node *parent) +{ + int ret; + + if (WARN_ON(!np)) + return -ENODEV; + + ret = of_sh_intc_get_meminfo(np, + intcs_resources, ARRAY_SIZE(intcs_resources)); + if (ret) + goto error; + + intcs_desc.resource = intcs_resources; + intcs_desc.num_resources = ARRAY_SIZE(intcs_resources); + + ret = of_sh_intc_get_intc(np, &intcs_desc); + if (ret) + goto error; + + of_sh_intc_get_intevtsa_vect(np, &intevtsa_vect); + + intcs_desc.name = "r8a7740-intcs"; + +error: + return ret; +} + +static int r8a7740_intca_pins_of_init(struct device_node *np, + struct device_node *parent) +{ + int ret; + + if (WARN_ON(!np)) + return -ENODEV; + + ret = of_sh_intc_get_meminfo(np, intca_pins_resources, + ARRAY_SIZE(intca_pins_resources)); + if (ret) + goto error; + + intca_irq_pins_desc.resource = intca_pins_resources; + intca_irq_pins_desc.num_resources = ARRAY_SIZE(intca_pins_resources); + + ret = of_sh_intc_get_intc_pins(np, &intca_irq_pins_desc); + if (ret) + goto error; + + intca_irq_pins_desc.name = "r8a7740-intca-irq-pins"; + +error: + return ret; +} + +static const struct of_device_id irq_of_match[] __initconst = { + { .compatible = "renesas,sh_intcs", .data = r8a7740_intcs_of_init }, + { .compatible = "renesas,sh_intca_irq_pins", + .data = r8a7740_intca_pins_of_init }, + { .compatible = "renesas,sh_intca", .data = r8a7740_intca_of_init }, + { /*sentinel*/ } +}; + +#endif /* CONFIG_OF */ + /* * INTCA */ @@ -623,15 +723,41 @@ static void intcs_demux(unsigned int irq, struct irq_desc *desc) generic_handle_irq(intcs_evt2irq(evtcodeas)); } -void __init r8a7740_init_irq(void) +static void __init r8a7740_init_irq__(bool of) { - void __iomem *intevtsa = ioremap_nocache(0xffd20100, PAGE_SIZE); + void __iomem *intevtsa; + +#ifdef CONFIG_OF + if (of) + of_irq_init(irq_of_match); +#endif register_intc_controller(&intca_desc); register_intc_controller(&intca_irq_pins_desc); register_intc_controller(&intcs_desc); /* demux using INTEVTSA */ - irq_set_handler_data(evt2irq(0xf80), (void *)intevtsa); - irq_set_chained_handler(evt2irq(0xf80), intcs_demux); + intevtsa = ioremap_nocache(intcs_resources[0].start + 0x100, PAGE_SIZE); +#ifdef CONFIG_OF + if (of) { + irq_set_handler_data(evt2irq(intevtsa_vect), (void *)intevtsa); + irq_set_chained_handler(evt2irq(intevtsa_vect), intcs_demux); + } else +#endif + { + irq_set_handler_data(evt2irq(0xf80), (void *)intevtsa); + irq_set_chained_handler(evt2irq(0xf80), intcs_demux); + } +} + +#ifdef CONFIG_OF +void __init r8a7740_init_irq_of(void) +{ + r8a7740_init_irq__(true); +} +#endif + +void __init r8a7740_init_irq(void) +{ + r8a7740_init_irq__(false); } -- 1.7.10.4
WARNING: multiple messages have this Message-ID (diff)
From: horms@verge.net.au (Simon Horman) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 03/15] ARM: shmobile: Add support OF of INTC for r8a7740 Date: Wed, 7 Nov 2012 17:50:32 +0900 [thread overview] Message-ID: <1352278244-26702-4-git-send-email-horms@verge.net.au> (raw) In-Reply-To: <1352278244-26702-1-git-send-email-horms@verge.net.au> From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> This CPU has three interrupt controllers (INTCA, INTCS and INTCA IRQ pins). This supports these. Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> Signed-off-by: Simon Horman <horms@verge.net.au> --- v2 [Simon Horman] * Use #ifdef instead of #if defined * Use CONFIG_OF in place of CONFIG_OF_SH_INTC * Allow OF and non OF code to be compiled in the same binary and provide r8a7740_init_irq_of() as a way to initialise INTC using DT while r8a7740_init_irq() still initialises INTC using the previous code paths. This is because we would like to be able to use a single configuration to compile a kernel for multiple boards and not all r8a7740 boards have DT support yet. v1 [Nobuhiro Iwamatsu] --- arch/arm/mach-shmobile/include/mach/common.h | 1 + arch/arm/mach-shmobile/intc-r8a7740.c | 136 +++++++++++++++++++++++++- 2 files changed, 132 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index d47e215..8402b5d 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h @@ -59,6 +59,7 @@ extern struct clk sh73a0_extal2_clk; extern struct clk sh73a0_extcki_clk; extern struct clk sh73a0_extalr_clk; +extern void r8a7740_init_irq_of(void); extern void r8a7740_init_irq(void); extern void r8a7740_map_io(void); extern void r8a7740_add_early_devices(void); diff --git a/arch/arm/mach-shmobile/intc-r8a7740.c b/arch/arm/mach-shmobile/intc-r8a7740.c index 9a69a31..878fdc6 100644 --- a/arch/arm/mach-shmobile/intc-r8a7740.c +++ b/arch/arm/mach-shmobile/intc-r8a7740.c @@ -1,8 +1,9 @@ /* * R8A7740 processor support * - * Copyright (C) 2011 Renesas Solutions Corp. + * Copyright (C) 2011, 2012 Renesas Solutions Corp. * Copyright (C) 2011 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> + * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu@renesas.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,6 +30,105 @@ #include <asm/mach-types.h> #include <asm/mach/arch.h> +#ifdef CONFIG_OF + +static struct intc_desc intca_desc __initdata; +static struct resource intca_resources[2] __initdata; +static struct intc_desc intcs_desc __initdata; +static struct resource intcs_resources[2] __initdata; +static struct intc_desc intca_irq_pins_desc __initdata; +static struct resource intca_pins_resources[1] __initdata; +static unsigned short intevtsa_vect; + +static int r8a7740_intca_of_init(struct device_node *np, + struct device_node *parent) +{ + int ret; + + if (WARN_ON(!np)) + return -ENODEV; + + ret = of_sh_intc_get_meminfo(np, + intca_resources, ARRAY_SIZE(intcs_resources)); + if (ret) + goto error; + + intca_desc.resource = intca_resources; + intca_desc.num_resources = ARRAY_SIZE(intca_resources); + + ret = of_sh_intc_get_intc(np, &intca_desc); + if (ret) + goto error; + + intca_desc.name = "r8a7740-intca"; +error: + return ret; +} + +static int r8a7740_intcs_of_init(struct device_node *np, + struct device_node *parent) +{ + int ret; + + if (WARN_ON(!np)) + return -ENODEV; + + ret = of_sh_intc_get_meminfo(np, + intcs_resources, ARRAY_SIZE(intcs_resources)); + if (ret) + goto error; + + intcs_desc.resource = intcs_resources; + intcs_desc.num_resources = ARRAY_SIZE(intcs_resources); + + ret = of_sh_intc_get_intc(np, &intcs_desc); + if (ret) + goto error; + + of_sh_intc_get_intevtsa_vect(np, &intevtsa_vect); + + intcs_desc.name = "r8a7740-intcs"; + +error: + return ret; +} + +static int r8a7740_intca_pins_of_init(struct device_node *np, + struct device_node *parent) +{ + int ret; + + if (WARN_ON(!np)) + return -ENODEV; + + ret = of_sh_intc_get_meminfo(np, intca_pins_resources, + ARRAY_SIZE(intca_pins_resources)); + if (ret) + goto error; + + intca_irq_pins_desc.resource = intca_pins_resources; + intca_irq_pins_desc.num_resources = ARRAY_SIZE(intca_pins_resources); + + ret = of_sh_intc_get_intc_pins(np, &intca_irq_pins_desc); + if (ret) + goto error; + + intca_irq_pins_desc.name = "r8a7740-intca-irq-pins"; + +error: + return ret; +} + +static const struct of_device_id irq_of_match[] __initconst = { + { .compatible = "renesas,sh_intcs", .data = r8a7740_intcs_of_init }, + { .compatible = "renesas,sh_intca_irq_pins", + .data = r8a7740_intca_pins_of_init }, + { .compatible = "renesas,sh_intca", .data = r8a7740_intca_of_init }, + { /*sentinel*/ } +}; + +#endif /* CONFIG_OF */ + /* * INTCA */ @@ -623,15 +723,41 @@ static void intcs_demux(unsigned int irq, struct irq_desc *desc) generic_handle_irq(intcs_evt2irq(evtcodeas)); } -void __init r8a7740_init_irq(void) +static void __init r8a7740_init_irq__(bool of) { - void __iomem *intevtsa = ioremap_nocache(0xffd20100, PAGE_SIZE); + void __iomem *intevtsa; + +#ifdef CONFIG_OF + if (of) + of_irq_init(irq_of_match); +#endif register_intc_controller(&intca_desc); register_intc_controller(&intca_irq_pins_desc); register_intc_controller(&intcs_desc); /* demux using INTEVTSA */ - irq_set_handler_data(evt2irq(0xf80), (void *)intevtsa); - irq_set_chained_handler(evt2irq(0xf80), intcs_demux); + intevtsa = ioremap_nocache(intcs_resources[0].start + 0x100, PAGE_SIZE); +#ifdef CONFIG_OF + if (of) { + irq_set_handler_data(evt2irq(intevtsa_vect), (void *)intevtsa); + irq_set_chained_handler(evt2irq(intevtsa_vect), intcs_demux); + } else +#endif + { + irq_set_handler_data(evt2irq(0xf80), (void *)intevtsa); + irq_set_chained_handler(evt2irq(0xf80), intcs_demux); + } +} + +#ifdef CONFIG_OF +void __init r8a7740_init_irq_of(void) +{ + r8a7740_init_irq__(true); +} +#endif + +void __init r8a7740_init_irq(void) +{ + r8a7740_init_irq__(false); } -- 1.7.10.4
next prev parent reply other threads:[~2012-11-07 8:50 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-11-07 8:50 [RFC 00/15] SH/ARM shmobile DT initialisation of INTC and GIC Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 01/15] ARM: shmobile: Add support OF for INTC of shmobile Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 02/15] SH: intc: Add support OF of IRQ Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` Simon Horman [this message] 2012-11-07 8:50 ` [PATCH 03/15] ARM: shmobile: Add support OF of INTC for r8a7740 Simon Horman 2012-11-07 8:50 ` [PATCH 04/15] ARM: shmobile: Add support OF of INTC for sh73a0 Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 05/15] ARM: shmobile: Add support OF of INTC for sh7372 Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 06/15] ARM: shmobile: Add DT table of INTC for sh73a0 Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 10:54 ` Tetsuyuki Kobayashi 2012-11-07 10:54 ` Tetsuyuki Kobayashi 2012-11-08 0:48 ` Simon Horman 2012-11-08 0:48 ` Simon Horman 2012-11-08 0:55 ` Nobuhiro Iwamatsu 2012-11-08 0:55 ` Nobuhiro Iwamatsu 2012-11-07 8:50 ` [PATCH 07/15] ARM: shmobile: Add DT table of INTC for sh7372 Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 08/15] ARM: shmobile: Add DT table of INTC for r8a7740 Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 09/15] ARM: shmobile: Include DTSI of r8a7740 to armadillo800eva Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 10/15] ARM: shmobile: Include DTSI of sh73a0 to kzm9g board Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 11/15] ARM: shmobile: kzm9g: Use DT initialisation of INTC Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 12/15] ARM: shmobile: r8a7740: " Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 13/15] ARM: shmobile: sh7372: " Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 14/15] ARM: shmobile: Add DT table of GIC for sh73a0 Simon Horman 2012-11-07 8:50 ` Simon Horman 2012-11-07 8:50 ` [PATCH 15/15] ARM: shmobile: sh73a0: Use DT for GIC Simon Horman 2012-11-07 8:50 ` Simon Horman
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=1352278244-26702-4-git-send-email-horms@verge.net.au \ --to=horms@verge.net.au \ --cc=linux-arm-kernel@lists.infradead.org \ /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.