Message ID | 20100830000614.0d571f10@debxo |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
> -----Original Message----- > From: Andres Salomon [mailto:dilinger@queued.net] > Sent: Sunday, August 29, 2010 9:06 PM > To: devicetree-discuss@lists.ozlabs.org > Cc: sparclinux@vger.kernel.org; x86@kernel.org; tglx@linutronix.de; mingo@redhat.com; hpa@zytor.com; > cjb@laptop.org; Mitch Bradley; pgf@laptop.org; linux-kernel@vger.kernel.org; davem@davemloft.net; > grant.likely@secretlab.ca; Stephen Neuendorffer > Subject: [PATCH 8/9] x86: of: irq additions to make drivers/of/* build on x86 > > > This functionality overlaps with patches previously submitted > by Stephen Neuendorffer. I don't care whose eventually get applied, > so long as drivers/of/* becomes buildable on x86. > > Signed-off-by: Andres Salomon <dilinger@queued.net> Agreed.. Signed-off-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com> > --- > arch/x86/include/asm/irq.h | 5 +++++ > arch/x86/kernel/irq.c | 8 ++++++++ > include/linux/of_irq.h | 1 + > 3 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h > index 5458380..0a656b9 100644 > --- a/arch/x86/include/asm/irq.h > +++ b/arch/x86/include/asm/irq.h > @@ -10,6 +10,11 @@ > #include <asm/apicdef.h> > #include <asm/irq_vectors.h> > > +#define NO_IRQ 0 > + > +/* Even though we don't support this, supply it to appease OF */ > +static inline void irq_dispose_mapping(unsigned int virq) { } > + > static inline int irq_canonicalize(int irq) > { > return ((irq == 2) ? 9 : irq); > diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c > index 91fd0c7..d53f639 100644 > --- a/arch/x86/kernel/irq.c > +++ b/arch/x86/kernel/irq.c > @@ -7,6 +7,7 @@ > #include <linux/seq_file.h> > #include <linux/smp.h> > #include <linux/ftrace.h> > +#include <linux/of.h> > > #include <asm/apic.h> > #include <asm/io_apic.h> > @@ -275,6 +276,13 @@ void smp_x86_platform_ipi(struct pt_regs *regs) > > EXPORT_SYMBOL_GPL(vector_used_by_percpu_irq); > > +unsigned int irq_create_of_mapping(struct device_node *controller, > + const u32 *intspec, unsigned int intsize) > +{ > + return intspec[0] + 1; > +} > +EXPORT_SYMBOL_GPL(irq_create_of_mapping); > + > #ifdef CONFIG_HOTPLUG_CPU > /* A cpu has been removed from cpu_online_mask. Reset irq affinities. */ > void fixup_irqs(void) > diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h > index 5929781..05ad27b 100644 > --- a/include/linux/of_irq.h > +++ b/include/linux/of_irq.h > @@ -5,6 +5,7 @@ > struct of_irq; > #include <linux/types.h> > #include <linux/errno.h> > +#include <linux/irq.h> > #include <linux/ioport.h> > #include <linux/of.h> > > -- > 1.5.6.5 > This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Aug 30, 2010 at 9:58 AM, Stephen Neuendorffer <stephen.neuendorffer@xilinx.com> wrote: > > >> -----Original Message----- >> From: Andres Salomon [mailto:dilinger@queued.net] >> Sent: Sunday, August 29, 2010 9:06 PM >> To: devicetree-discuss@lists.ozlabs.org >> Cc: sparclinux@vger.kernel.org; x86@kernel.org; tglx@linutronix.de; > mingo@redhat.com; hpa@zytor.com; >> cjb@laptop.org; Mitch Bradley; pgf@laptop.org; > linux-kernel@vger.kernel.org; davem@davemloft.net; >> grant.likely@secretlab.ca; Stephen Neuendorffer >> Subject: [PATCH 8/9] x86: of: irq additions to make drivers/of/* build > on x86 >> >> >> This functionality overlaps with patches previously submitted >> by Stephen Neuendorffer. I don't care whose eventually get applied, >> so long as drivers/of/* becomes buildable on x86. >> >> Signed-off-by: Andres Salomon <dilinger@queued.net> > > Agreed.. > Signed-off-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com> Okay, I've thought about this problem some more, and I think I've decided how I want it solved. Nack on this particular patch because it adds NO_IRQ to arch/x86/kernel/irq.c (it has been nacked before). Instead, I'd like the of irq code to be reworked a bit to make this nicer and isolate the NO_IRQ definition only to the OF irq .c file (when the arch doesn't explicitly define it). Right now, there are two files in drivers/of referencing NO_IRQ; drivers/of/platform.c and drivers/of/irq.c. platform.c only references in the context of figuring out how many irqs there are and populating a resource table. I'd like to remove that code from platform.c and add a pair of helper functions to irq.c. Then the top of irq.c could conditionally #define NO_IRQ 0 and thereby prevent the definition leaking out to the rest of the kernel. Eventually I'll get around to doing this myself, but it would be helpful to me if either you or Stephen could craft and test a patch. Perhaps something like: int of_irq_count(device_node *np) { /* Count and return the number of IRQs. */ } int of_irq_to_resource_table(device_node *np, struct resource *res, int max) { for (i = 0; i < max; i++; res++) if (of_irq_to_resource(np, i, res) == NO_IRQ) break; return i; } >> --- >> @@ -275,6 +276,13 @@ void smp_x86_platform_ipi(struct pt_regs *regs) >> >> EXPORT_SYMBOL_GPL(vector_used_by_percpu_irq); >> >> +unsigned int irq_create_of_mapping(struct device_node *controller, >> + const u32 *intspec, unsigned int intsize) >> +{ >> + return intspec[0] + 1; >> +} >> +EXPORT_SYMBOL_GPL(irq_create_of_mapping); >> + This simplistic implementation is of course non-ideal, but it works as a stop-gap measure until I've got the irq infrastructure more mature. g. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h index 5458380..0a656b9 100644 --- a/arch/x86/include/asm/irq.h +++ b/arch/x86/include/asm/irq.h @@ -10,6 +10,11 @@ #include <asm/apicdef.h> #include <asm/irq_vectors.h> +#define NO_IRQ 0 + +/* Even though we don't support this, supply it to appease OF */ +static inline void irq_dispose_mapping(unsigned int virq) { } + static inline int irq_canonicalize(int irq) { return ((irq == 2) ? 9 : irq); diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 91fd0c7..d53f639 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -7,6 +7,7 @@ #include <linux/seq_file.h> #include <linux/smp.h> #include <linux/ftrace.h> +#include <linux/of.h> #include <asm/apic.h> #include <asm/io_apic.h> @@ -275,6 +276,13 @@ void smp_x86_platform_ipi(struct pt_regs *regs) EXPORT_SYMBOL_GPL(vector_used_by_percpu_irq); +unsigned int irq_create_of_mapping(struct device_node *controller, + const u32 *intspec, unsigned int intsize) +{ + return intspec[0] + 1; +} +EXPORT_SYMBOL_GPL(irq_create_of_mapping); + #ifdef CONFIG_HOTPLUG_CPU /* A cpu has been removed from cpu_online_mask. Reset irq affinities. */ void fixup_irqs(void) diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index 5929781..05ad27b 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h @@ -5,6 +5,7 @@ struct of_irq; #include <linux/types.h> #include <linux/errno.h> +#include <linux/irq.h> #include <linux/ioport.h> #include <linux/of.h>
This functionality overlaps with patches previously submitted by Stephen Neuendorffer. I don't care whose eventually get applied, so long as drivers/of/* becomes buildable on x86. Signed-off-by: Andres Salomon <dilinger@queued.net> --- arch/x86/include/asm/irq.h | 5 +++++ arch/x86/kernel/irq.c | 8 ++++++++ include/linux/of_irq.h | 1 + 3 files changed, 14 insertions(+), 0 deletions(-)