[RFC PATCH 11/19] powerpc: gamecube/wii: flipper interrupt controller support

Grant Likely grant.likely at secretlab.ca
Mon Nov 23 10:28:58 EST 2009


On Sun, Nov 22, 2009 at 3:01 PM, Albert Herranz <albert_herranz at yahoo.es> wrote:
> 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 <albert_herranz at yahoo.es>
> ---
>  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.h
>
> diff --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 y

You'll always want this driver when GAMECUBE common is set.  Don't add
another Kconfig entry.

> +
> 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.o

> +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

> +
> +       __asm__ __volatile__("cntlzw %0,%1" : "=r"(irq) : "r"(irq_status));
> +       return irq_linear_revmap(flipper_irq_host, 31 - irq);
> +}
> +

-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.


More information about the Linuxppc-dev mailing list