From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> To: linux-kernel@vger.kernel.org Cc: sodaville@linutronix.de, x86@kernel.org, devicetree-discuss@lists.ozlabs.org, Sebastian Andrzej Siewior <bigeasy@linutronix.de> Subject: [PATCH TIP 04/14] x86/dtb: add irq domain abstraction Date: Mon, 24 Jan 2011 09:58:52 +0530 [thread overview] Message-ID: <1295843342-1122-5-git-send-email-bigeasy@linutronix.de> (raw) In-Reply-To: <1295843342-1122-1-git-send-email-bigeasy@linutronix.de> The here introduced irq_domain abstraction represents a generic irq controller. It is a subset of powerpc's irq_host which is going to be renamed to irq_domain and then become generic. This implementation will be removed once it is generic. The xlate callback is resposible to parse irq informations like irq type and number and returns the hardware irq number which is reported by the hardware as active. Cc: devicetree-discuss@lists.ozlabs.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Tested-by: Dirk Brandewie <dirk.brandewie@gmail.com> --- arch/x86/include/asm/irq_controller.h | 12 ++++++++ arch/x86/include/asm/prom.h | 2 + arch/x86/kernel/prom.c | 47 ++++++++++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 1 deletions(-) create mode 100644 arch/x86/include/asm/irq_controller.h diff --git a/arch/x86/include/asm/irq_controller.h b/arch/x86/include/asm/irq_controller.h new file mode 100644 index 0000000..423bbbd --- /dev/null +++ b/arch/x86/include/asm/irq_controller.h @@ -0,0 +1,12 @@ +#ifndef __IRQ_CONTROLLER__ +#define __IRQ_CONTROLLER__ + +struct irq_domain { + int (*xlate)(struct irq_domain *h, const u32 *intspec, u32 intsize, + u32 *out_hwirq, u32 *out_type); + void *priv; + struct device_node *controller; + struct list_head l; +}; + +#endif diff --git a/arch/x86/include/asm/prom.h b/arch/x86/include/asm/prom.h index b227ba7..ed7bb62 100644 --- a/arch/x86/include/asm/prom.h +++ b/arch/x86/include/asm/prom.h @@ -19,9 +19,11 @@ #include <asm/irq.h> #include <asm/atomic.h> #include <asm/setup.h> +#include <asm/irq_controller.h> #ifdef CONFIG_OF extern void add_dtb(u64 data); +void add_interrupt_host(struct irq_domain *ih); #else static inline void add_dtb(u64 data) { } #endif diff --git a/arch/x86/kernel/prom.c b/arch/x86/kernel/prom.c index 4969ffa..95f9551 100644 --- a/arch/x86/kernel/prom.c +++ b/arch/x86/kernel/prom.c @@ -3,18 +3,63 @@ */ #include <linux/bootmem.h> #include <linux/io.h> +#include <linux/interrupt.h> #include <linux/list.h> #include <linux/of.h> #include <linux/of_platform.h> #include <linux/slab.h> +#include <asm/irq_controller.h> + char __initdata cmd_line[COMMAND_LINE_SIZE]; +static LIST_HEAD(irq_domains); +static DEFINE_RAW_SPINLOCK(big_irq_lock); + +void add_interrupt_host(struct irq_domain *ih) +{ + unsigned long flags; + + raw_spin_lock_irqsave(&big_irq_lock, flags); + list_add(&ih->l, &irq_domains); + raw_spin_unlock_irqrestore(&big_irq_lock, flags); +} + +static struct irq_domain *get_ih_from_node(struct device_node *controller) +{ + struct irq_domain *ih, *found = NULL; + unsigned long flags; + + raw_spin_lock_irqsave(&big_irq_lock, flags); + list_for_each_entry(ih, &irq_domains, l) { + if (ih->controller == controller) { + found = ih; + break; + } + } + raw_spin_unlock_irqrestore(&big_irq_lock, flags); + return found; +} unsigned int irq_create_of_mapping(struct device_node *controller, const u32 *intspec, unsigned int intsize) { - return intspec[0]; + struct irq_domain *ih; + u32 virq; + u32 type; + int ret; + ih = get_ih_from_node(controller); + if (!ih) + return 0; + ret = ih->xlate(ih, intspec, intsize, &virq, &type); + if (ret) + return ret; + if (type == IRQ_TYPE_NONE) + return virq; + /* set the mask if it is different from current */ + if (type == (irq_to_desc(virq)->status & IRQF_TRIGGER_MASK)) + set_irq_type(virq, type); + return virq; } EXPORT_SYMBOL_GPL(irq_create_of_mapping); -- 1.7.3.2
WARNING: multiple messages have this Message-ID (diff)
From: Sebastian Andrzej Siewior <bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org> To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: sodaville-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, Sebastian Andrzej Siewior <bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org> Subject: [PATCH TIP 04/14] x86/dtb: add irq domain abstraction Date: Mon, 24 Jan 2011 09:58:52 +0530 [thread overview] Message-ID: <1295843342-1122-5-git-send-email-bigeasy@linutronix.de> (raw) In-Reply-To: <1295843342-1122-1-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org> The here introduced irq_domain abstraction represents a generic irq controller. It is a subset of powerpc's irq_host which is going to be renamed to irq_domain and then become generic. This implementation will be removed once it is generic. The xlate callback is resposible to parse irq informations like irq type and number and returns the hardware irq number which is reported by the hardware as active. Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org> Tested-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- arch/x86/include/asm/irq_controller.h | 12 ++++++++ arch/x86/include/asm/prom.h | 2 + arch/x86/kernel/prom.c | 47 ++++++++++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 1 deletions(-) create mode 100644 arch/x86/include/asm/irq_controller.h diff --git a/arch/x86/include/asm/irq_controller.h b/arch/x86/include/asm/irq_controller.h new file mode 100644 index 0000000..423bbbd --- /dev/null +++ b/arch/x86/include/asm/irq_controller.h @@ -0,0 +1,12 @@ +#ifndef __IRQ_CONTROLLER__ +#define __IRQ_CONTROLLER__ + +struct irq_domain { + int (*xlate)(struct irq_domain *h, const u32 *intspec, u32 intsize, + u32 *out_hwirq, u32 *out_type); + void *priv; + struct device_node *controller; + struct list_head l; +}; + +#endif diff --git a/arch/x86/include/asm/prom.h b/arch/x86/include/asm/prom.h index b227ba7..ed7bb62 100644 --- a/arch/x86/include/asm/prom.h +++ b/arch/x86/include/asm/prom.h @@ -19,9 +19,11 @@ #include <asm/irq.h> #include <asm/atomic.h> #include <asm/setup.h> +#include <asm/irq_controller.h> #ifdef CONFIG_OF extern void add_dtb(u64 data); +void add_interrupt_host(struct irq_domain *ih); #else static inline void add_dtb(u64 data) { } #endif diff --git a/arch/x86/kernel/prom.c b/arch/x86/kernel/prom.c index 4969ffa..95f9551 100644 --- a/arch/x86/kernel/prom.c +++ b/arch/x86/kernel/prom.c @@ -3,18 +3,63 @@ */ #include <linux/bootmem.h> #include <linux/io.h> +#include <linux/interrupt.h> #include <linux/list.h> #include <linux/of.h> #include <linux/of_platform.h> #include <linux/slab.h> +#include <asm/irq_controller.h> + char __initdata cmd_line[COMMAND_LINE_SIZE]; +static LIST_HEAD(irq_domains); +static DEFINE_RAW_SPINLOCK(big_irq_lock); + +void add_interrupt_host(struct irq_domain *ih) +{ + unsigned long flags; + + raw_spin_lock_irqsave(&big_irq_lock, flags); + list_add(&ih->l, &irq_domains); + raw_spin_unlock_irqrestore(&big_irq_lock, flags); +} + +static struct irq_domain *get_ih_from_node(struct device_node *controller) +{ + struct irq_domain *ih, *found = NULL; + unsigned long flags; + + raw_spin_lock_irqsave(&big_irq_lock, flags); + list_for_each_entry(ih, &irq_domains, l) { + if (ih->controller == controller) { + found = ih; + break; + } + } + raw_spin_unlock_irqrestore(&big_irq_lock, flags); + return found; +} unsigned int irq_create_of_mapping(struct device_node *controller, const u32 *intspec, unsigned int intsize) { - return intspec[0]; + struct irq_domain *ih; + u32 virq; + u32 type; + int ret; + ih = get_ih_from_node(controller); + if (!ih) + return 0; + ret = ih->xlate(ih, intspec, intsize, &virq, &type); + if (ret) + return ret; + if (type == IRQ_TYPE_NONE) + return virq; + /* set the mask if it is different from current */ + if (type == (irq_to_desc(virq)->status & IRQF_TRIGGER_MASK)) + set_irq_type(virq, type); + return virq; } EXPORT_SYMBOL_GPL(irq_create_of_mapping); -- 1.7.3.2
next prev parent reply other threads:[~2011-01-24 4:29 UTC|newest] Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-01-24 4:28 Device tree on x86, part v3 Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-01-24 4:28 ` [PATCH TIP 01/14] x86/e820: remove conditional early mapping in parse_e820_ext Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-02-03 20:57 ` Grant Likely 2011-01-24 4:28 ` [PATCH TIP 02/14] x86: Add device tree support Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-01-24 4:34 ` Sebastian Andrzej Siewior 2011-01-24 4:34 ` Sebastian Andrzej Siewior 2011-02-16 21:27 ` Grant Likely 2011-02-16 21:27 ` Grant Likely 2011-02-17 11:05 ` [sodaville] " Sebastian Andrzej Siewior 2011-02-17 11:05 ` Sebastian Andrzej Siewior 2011-02-16 21:26 ` Grant Likely 2011-02-17 11:03 ` Sebastian Andrzej Siewior 2011-02-17 11:03 ` Sebastian Andrzej Siewior 2011-02-16 21:31 ` Grant Likely 2011-02-16 21:31 ` Grant Likely 2011-02-17 11:31 ` [sodaville] " Sebastian Andrzej Siewior 2011-02-17 11:31 ` Sebastian Andrzej Siewior 2011-02-17 17:02 ` Grant Likely 2011-01-24 4:28 ` [PATCH TIP 03/14] x86/dtb: Add a device tree for CE4100 Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-01-27 5:00 ` David Gibson 2011-01-27 5:00 ` David Gibson 2011-01-27 9:11 ` Sebastian Andrzej Siewior 2011-01-27 9:11 ` Sebastian Andrzej Siewior 2011-02-03 20:59 ` Grant Likely 2011-02-03 21:32 ` Mitch Bradley 2011-02-03 21:32 ` Mitch Bradley 2011-02-04 9:40 ` Sebastian Andrzej Siewior 2011-02-04 9:40 ` Sebastian Andrzej Siewior 2011-02-02 18:58 ` [PATCH TIP v2 " Sebastian Andrzej Siewior 2011-02-02 18:58 ` Sebastian Andrzej Siewior 2011-02-03 21:07 ` Grant Likely 2011-02-03 21:07 ` Grant Likely 2011-02-04 10:06 ` Sebastian Andrzej Siewior 2011-02-04 10:06 ` Sebastian Andrzej Siewior 2011-02-16 21:44 ` Grant Likely 2011-02-16 21:44 ` Grant Likely 2011-02-22 11:21 ` [sodaville] " Sebastian Andrzej Siewior 2011-02-22 11:21 ` Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior [this message] 2011-01-24 4:28 ` [PATCH TIP 04/14] x86/dtb: add irq domain abstraction Sebastian Andrzej Siewior 2011-01-24 4:28 ` [PATCH TIP 05/14] x86/dtb: add early parsing of APIC and IO APIC Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-02-16 21:47 ` Grant Likely 2011-02-16 21:47 ` Grant Likely 2011-01-24 4:28 ` [PATCH TIP 06/14] x86/dtb: add support hpet Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-01-24 4:28 ` [PATCH OF 07/14] of: move of_irq_map_pci() into generic code Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-02-10 13:57 ` Michal Simek 2011-02-16 21:53 ` Grant Likely 2011-02-16 21:53 ` Grant Likely 2011-02-17 7:49 ` Michal Simek 2011-02-17 7:49 ` Michal Simek 2011-02-17 7:49 ` Michal Simek 2011-01-24 4:28 ` [PATCH TIP 08/14] x86/dtb: add support for PCI devices backed by dtb nodes Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-02-16 21:59 ` Grant Likely 2011-02-16 21:59 ` Grant Likely 2011-02-22 11:21 ` [sodaville] " Sebastian Andrzej Siewior 2011-02-22 11:21 ` Sebastian Andrzej Siewior 2011-01-24 4:28 ` [PATCH TIP 09/14] x86/dtb: Add generic bus probe Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-02-04 10:21 ` [PATCH v2 " Sebastian Andrzej Siewior 2011-02-04 10:21 ` Sebastian Andrzej Siewior 2011-02-16 22:04 ` Grant Likely 2011-02-16 22:04 ` Grant Likely 2011-01-24 4:28 ` [PATCH TIP 10/14] x86/ioapic: Add OF bindings for IO-APIC Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-02-16 22:04 ` Grant Likely 2011-01-24 4:28 ` [PATCH TIP 11/14] x86/ce4100: use OF for ioapic Sebastian Andrzej Siewior 2011-01-24 4:28 ` Sebastian Andrzej Siewior 2011-01-24 4:29 ` [PATCH OF 12/14] x86/rtc: don't register rtc if we the DT blob Sebastian Andrzej Siewior 2011-01-24 4:29 ` Sebastian Andrzej Siewior 2011-02-16 22:08 ` Grant Likely 2011-02-16 22:08 ` Grant Likely 2011-02-16 22:09 ` Grant Likely 2011-02-16 22:09 ` Grant Likely 2011-02-17 13:13 ` [sodaville] " Sebastian Andrzej Siewior 2011-02-17 13:13 ` Sebastian Andrzej Siewior 2011-01-24 4:29 ` [PATCH OF 13/14] rtc/cmos: add OF bindings Sebastian Andrzej Siewior 2011-01-24 4:29 ` Sebastian Andrzej Siewior 2011-01-24 4:38 ` Sebastian Andrzej Siewior 2011-01-24 4:38 ` Sebastian Andrzej Siewior 2011-02-16 22:11 ` Grant Likely 2011-02-16 22:11 ` Grant Likely 2011-02-17 13:26 ` [sodaville] " Sebastian Andrzej Siewior 2011-02-17 13:26 ` Sebastian Andrzej Siewior 2011-02-17 16:46 ` Grant Likely 2011-01-24 4:29 ` [PATCH TIP 14/14] x86/pci: remove warning Sebastian Andrzej Siewior 2011-01-24 4:29 ` Sebastian Andrzej Siewior
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=1295843342-1122-5-git-send-email-bigeasy@linutronix.de \ --to=bigeasy@linutronix.de \ --cc=devicetree-discuss@lists.ozlabs.org \ --cc=linux-kernel@vger.kernel.org \ --cc=sodaville@linutronix.de \ --cc=x86@kernel.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.