Re: [RFC PATCH 11/19] powerpc: gamecube/wii: flipper interrupt controller support
From: Albert Herranz <hidden>
Date: 2009-11-23 19:59:17
Grant Likely wrote:
On Sun, Nov 22, 2009 at 3:01 PM, Albert Herranz [off-list ref] wrote:quoted
Add support for the interrupt controller included in the "Flipper" chipset of the Nintendo GameCube video game console. The same interrupt controller is also present in the "Hollywood" chipset of the Nintendo Wii. Signed-off-by: Albert Herranz <redacted> --- arch/powerpc/platforms/embedded6xx/Kconfig | 6 + arch/powerpc/platforms/embedded6xx/Makefile | 1 + arch/powerpc/platforms/embedded6xx/flipper-pic.c | 247 ++++++++++++++++++++++ arch/powerpc/platforms/embedded6xx/flipper-pic.h | 25 +++ 4 files changed, 279 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/platforms/embedded6xx/flipper-pic.c create mode 100644 arch/powerpc/platforms/embedded6xx/flipper-pic.hdiff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig index bfd88be..29a98c6 100644 --- a/arch/powerpc/platforms/embedded6xx/Kconfig +++ b/arch/powerpc/platforms/embedded6xx/Kconfig@@ -94,6 +94,7 @@ config MPC10X_STORE_GATHERING config GAMECUBE_COMMON bool select NOT_COHERENT_CACHE + select FLIPPER_PIC config USBGECKO_UDBG bool "USB Gecko udbg console for the Nintendo GameCube/Wii"@@ -108,3 +109,8 @@ config USBGECKO_UDBG If in doubt, say N here. +config FLIPPER_PIC + bool + depends on GAMECUBE_COMMON + default yYou'll always want this driver when GAMECUBE common is set. Don't add another Kconfig entry.
Ok.
quoted
+diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile index 0ab7492..35258fd 100644 --- a/arch/powerpc/platforms/embedded6xx/Makefile +++ b/arch/powerpc/platforms/embedded6xx/Makefile@@ -8,3 +8,4 @@ obj-$(CONFIG_PPC_HOLLY) += holly.o obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o obj-$(CONFIG_PPC_C2K) += c2k.o obj-$(CONFIG_USBGECKO_UDBG) += usbgecko_udbg.o +obj-$(CONFIG_FLIPPER_PIC) += flipper-pic.oquoted
+unsigned int flipper_pic_get_irq(void) +{ + void __iomem *io_base = flipper_irq_host->host_data; + int irq; + u32 irq_status; + + irq_status = in_be32(io_base + FLIPPER_ICR) & + in_be32(io_base + FLIPPER_IMR); + if (irq_status == 0) + return -1; /* no more IRQs pending */NO_IRQ_IGNORE
I'll fix that. Thanks. I did it in the other interrupt controller but forgot about this.
quoted
+ + __asm__ __volatile__("cntlzw %0,%1" : "=r"(irq) : "r"(irq_status)); + return irq_linear_revmap(flipper_irq_host, 31 - irq); +} +
Thanks. Cheers, Albert