From: Bartosz Golaszewski <brgl@bgdev.pl> To: Sekhar Nori <nsekhar@ti.com>, Kevin Hilman <khilman@kernel.org>, Thomas Gleixner <tglx@linutronix.de>, Jason Cooper <jason@lakedaemon.net>, Marc Zyngier <marc.zyngier@arm.com>, David Lechner <david@lechnology.com> Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 03/37] ARM: davinci: aintc: use irq domain Date: Tue, 12 Feb 2019 11:38:01 +0100 Message-ID: <20190212103835.7768-4-brgl@bgdev.pl> (raw) In-Reply-To: <20190212103835.7768-1-brgl@bgdev.pl> From: Bartosz Golaszewski <bgolaszewski@baylibre.com> We need to create an irq domain if we want to select SPARSE_IRQ. The cp-intc driver already supports it, but aintc doesn't. Use the helpers provided by the generic irq chip abstraction. Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> --- arch/arm/mach-davinci/irq.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-davinci/irq.c b/arch/arm/mach-davinci/irq.c index 952dc126c390..efba6dbdfd62 100644 --- a/arch/arm/mach-davinci/irq.c +++ b/arch/arm/mach-davinci/irq.c @@ -23,6 +23,7 @@ #include <linux/interrupt.h> #include <linux/irq.h> #include <linux/io.h> +#include <linux/irqdomain.h> #include <mach/hardware.h> #include <mach/cputype.h> @@ -40,23 +41,23 @@ #define IRQ_INTPRI0_REG_OFFSET 0x0030 #define IRQ_INTPRI7_REG_OFFSET 0x004C +static struct irq_domain *davinci_irq_domain; + static inline void davinci_irq_writel(unsigned long value, int offset) { __raw_writel(value, davinci_intc_base + offset); } static __init void -davinci_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num) +davinci_irq_setup_gc(void __iomem *base, + unsigned int irq_start, unsigned int num) { struct irq_chip_generic *gc; struct irq_chip_type *ct; - gc = irq_alloc_generic_chip("AINTC", 1, irq_start, base, handle_edge_irq); - if (!gc) { - pr_err("%s: irq_alloc_generic_chip for IRQ %u failed\n", - __func__, irq_start); - return; - } + gc = irq_get_domain_generic_chip(davinci_irq_domain, irq_start); + gc->reg_base = base; + gc->irq_base = irq_start; ct = gc->chip_types; ct->chip.irq_ack = irq_gc_ack_set_bit; @@ -74,6 +75,7 @@ void __init davinci_irq_init(void) { unsigned i, j; const u8 *davinci_def_priorities = davinci_soc_info.intc_irq_prios; + int ret, irq_base; davinci_intc_type = DAVINCI_INTC_TYPE_AINTC; davinci_intc_base = ioremap(davinci_soc_info.intc_base, SZ_4K); @@ -110,8 +112,25 @@ void __init davinci_irq_init(void) davinci_irq_writel(pri, i); } + irq_base = irq_alloc_descs(-1, 0, davinci_soc_info.intc_irq_num, 0); + if (WARN_ON(irq_base < 0)) + return; + + davinci_irq_domain = irq_domain_add_legacy(NULL, + davinci_soc_info.intc_irq_num, + irq_base, 0, &irq_domain_simple_ops, + NULL); + if (WARN_ON(!davinci_irq_domain)) + return; + + ret = irq_alloc_domain_generic_chips(davinci_irq_domain, 32, 1, + "AINTC", handle_edge_irq, + IRQ_NOREQUEST | IRQ_NOPROBE, 0, 0); + if (WARN_ON(ret)) + return; + for (i = 0, j = 0; i < davinci_soc_info.intc_irq_num; i += 32, j += 0x04) - davinci_alloc_gc(davinci_intc_base + j, i, 32); + davinci_irq_setup_gc(davinci_intc_base + j, irq_base + i, 32); irq_set_handler(IRQ_TINT1_TINT34, handle_level_irq); } -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply index Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-12 10:37 [PATCH v3 00/37] ARM: davinci: modernize the irq support Bartosz Golaszewski 2019-02-12 10:37 ` [PATCH v3 01/37] input: davinci_keyscan: remove unnecessary includes Bartosz Golaszewski 2019-02-14 14:09 ` Sekhar Nori 2019-02-12 10:38 ` [PATCH v3 02/37] ARM: davinci: remove intc_host_map from davinci_soc_info struct Bartosz Golaszewski 2019-02-12 10:38 ` Bartosz Golaszewski [this message] 2019-02-12 10:38 ` [PATCH v3 04/37] ARM: davinci: select GENERIC_IRQ_MULTI_HANDLER Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 05/37] ARM: davinci: remove davinci_intc_type Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 06/37] ARM: davinci: pull davinci_intc_base into the respective intc drivers Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 07/37] ARM: davinci: wrap HW interrupt numbers with a macro Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 08/37] ARM: davinci: select SPARSE_IRQ Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 09/37] ARM: davinci: make irqs.h a local header Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 10/37] ARM: davinci: aintc: drop GPL license boilerplate Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 11/37] ARM: davinci: aintc: wrap davinci_irq_init() with a helper Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 12/37] ARM: davinci: aintc: use a common prefix for symbols in the driver Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 13/37] ARM: davinci: aintc: drop the 00 prefix from register offsets Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 14/37] ARM: davinci: aintc: use readl/writel_relaxed() Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 15/37] irqchip: davinci-aintc: add a new config structure Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 16/37] ARM: davinci: aintc: use the new irqchip config structure in dm* SoCs Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 17/37] ARM: davinci: aintc: use the new config structure Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 18/37] ARM: davinci: aintc: unify error handling Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 19/37] ARM: davinci: aintc: request memory region before remapping it Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 20/37] ARM: davinci: aintc: move timer-specific irq_set_handler() out of irq.c Bartosz Golaszewski 2019-02-14 10:57 ` Marc Zyngier 2019-02-14 12:44 ` Sekhar Nori 2019-02-14 12:56 ` Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 21/37] ARM: davinci: aintc: remove unnecessary includes Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 22/37] irqchip: davinci-aintc: move the driver to drivers/irqchip Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 23/37] ARM: davinci: cp-intc: remove cp_intc.h Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 24/37] ARM: davinci: cp-intc: add a wrapper around cp_intc_init() Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 25/37] irqchip: davinci-cp-intc: add a new config structure Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 26/37] ARM: davinci: cp-intc: add the new config structures for da8xx SoCs Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 27/37] ARM: davinci: cp-intc: use a common prefix for all symbols Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 28/37] ARM: davinci: cp-intc: convert all hex numbers to lowercase Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 29/37] ARM: davinci: cp-intc: use the new-style config structure Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 30/37] ARM: davinci: cp-intc: request the memory region before remapping it Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 31/37] ARM: davinci: cp-intc: improve coding style Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 32/37] ARM: davinci: cp-intc: unify error handling Bartosz Golaszewski 2019-02-14 11:11 ` Marc Zyngier 2019-02-12 10:38 ` [PATCH v3 33/37] ARM: davinci: cp-intc: use readl/writel_relaxed() Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 34/37] ARM: davinci: cp-intc: drop GPL license boilerplate Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 35/37] ARM: davinci: cp-intc: remove redundant comments Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 36/37] irqchip: davinci-cp-intc: move the driver to drivers/irqchip Bartosz Golaszewski 2019-02-12 10:38 ` [PATCH v3 37/37] ARM: davinci: remove intc related fields from davinci_soc_info Bartosz Golaszewski
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=20190212103835.7768-4-brgl@bgdev.pl \ --to=brgl@bgdev.pl \ --cc=bgolaszewski@baylibre.com \ --cc=david@lechnology.com \ --cc=jason@lakedaemon.net \ --cc=khilman@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=marc.zyngier@arm.com \ --cc=nsekhar@ti.com \ --cc=tglx@linutronix.de \ /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: link
Linux-ARM-Kernel Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-arm-kernel/0 linux-arm-kernel/git/0.git git clone --mirror https://lore.kernel.org/linux-arm-kernel/1 linux-arm-kernel/git/1.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-arm-kernel linux-arm-kernel/ https://lore.kernel.org/linux-arm-kernel \ linux-arm-kernel@lists.infradead.org public-inbox-index linux-arm-kernel Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.infradead.lists.linux-arm-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git