Message ID | 1258927311-4340-13-git-send-email-albert_herranz@yahoo.es (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
On Sun, Nov 22, 2009 at 3:01 PM, Albert Herranz <albert_herranz@yahoo.es> wrote: > Add platform support for the Nintendo GameCube video game console. > > Signed-off-by: Albert Herranz <albert_herranz@yahoo.es> > --- > +static void gamecube_show_cpuinfo(struct seq_file *m) > +{ > + seq_printf(m, "vendor\t\t: IBM\n"); > + seq_printf(m, "machine\t\t: Nintendo GameCube\n"); > +} show_cpuinfo hooks have been dropped on most platforms now. > +static void gamecube_shutdown(void) > +{ > + /* currently not used */ > +} Then don't add the hook. Just drop it. Same for other empty functions in this file. If it is safe to drop them, then please do. Otherwise: Acked-by: Grant Likely <grant.likely@secretlab.ca> > +define_machine(gamecube) { > + .name = "gamecube", > + .probe = gamecube_probe, > + .setup_arch = gamecube_setup_arch, > + .init_early = gamecube_init_early, > + .show_cpuinfo = gamecube_show_cpuinfo, > + .restart = gamecube_restart, > + .power_off = gamecube_power_off, > + .halt = gamecube_halt, > + .init_IRQ = flipper_pic_probe, > + .get_irq = flipper_pic_get_irq, > + .calibrate_decr = generic_calibrate_decr, > + .progress = udbg_progress, > + .machine_shutdown = gamecube_shutdown, > +#ifdef CONFIG_KEXEC > + .machine_kexec_prepare = gamecube_kexec_prepare, > + .machine_kexec = default_machine_kexec, > +#endif > +}; > + > diff --git a/arch/powerpc/platforms/embedded6xx/gamecube_dev.c b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c > new file mode 100644 > index 0000000..13e1f73 > --- /dev/null > +++ b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c > @@ -0,0 +1,34 @@ > +/* > + * arch/powerpc/platforms/embedded6xx/gamecube_dev.c > + * > + * Nintendo GameCube platform device setup. > + * Copyright (C) 2008-2009 The GameCube Linux Team > + * Copyright (C) 2008,2009 Albert Herranz > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version 2 > + * of the License, or (at your option) any later version. > + * > + */ > + > +#include <linux/kernel.h> > +#include <linux/init.h> > +#include <linux/of_platform.h> > + > +#include <asm/machdep.h> > + > +static struct of_device_id gamecube_of_bus[] = { > + { .compatible = "nintendo,flipper", }, > + { }, > +}; > + > +static int __init gamecube_device_probe(void) > +{ > + if (!machine_is(gamecube)) > + return 0; > + > + of_platform_bus_probe(NULL, gamecube_of_bus, NULL); > + return 0; > +} > +device_initcall(gamecube_device_probe); > -- > 1.6.3.3 > > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev >
Grant Likely wrote: > On Sun, Nov 22, 2009 at 3:01 PM, Albert Herranz <albert_herranz@yahoo.es> wrote: >> Add platform support for the Nintendo GameCube video game console. >> >> Signed-off-by: Albert Herranz <albert_herranz@yahoo.es> >> --- >> +static void gamecube_show_cpuinfo(struct seq_file *m) >> +{ >> + seq_printf(m, "vendor\t\t: IBM\n"); >> + seq_printf(m, "machine\t\t: Nintendo GameCube\n"); >> +} > > show_cpuinfo hooks have been dropped on most platforms now. > I'll drop'em all. Thanks. >> +static void gamecube_shutdown(void) >> +{ >> + /* currently not used */ >> +} > > Then don't add the hook. Just drop it. Same for other empty > functions in this file. If it is safe to drop them, then please do. > > Otherwise: Acked-by: Grant Likely <grant.likely@secretlab.ca> > I actually forgot to add a flipper_quiesce() call there. That one will be used. But I'll review the other cases. Thanks. >> +define_machine(gamecube) { >> + .name = "gamecube", >> + .probe = gamecube_probe, >> + .setup_arch = gamecube_setup_arch, >> + .init_early = gamecube_init_early, >> + .show_cpuinfo = gamecube_show_cpuinfo, >> + .restart = gamecube_restart, >> + .power_off = gamecube_power_off, >> + .halt = gamecube_halt, >> + .init_IRQ = flipper_pic_probe, >> + .get_irq = flipper_pic_get_irq, >> + .calibrate_decr = generic_calibrate_decr, >> + .progress = udbg_progress, >> + .machine_shutdown = gamecube_shutdown, >> +#ifdef CONFIG_KEXEC >> + .machine_kexec_prepare = gamecube_kexec_prepare, >> + .machine_kexec = default_machine_kexec, >> +#endif >> +}; >> + >> diff --git a/arch/powerpc/platforms/embedded6xx/gamecube_dev.c b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c >> new file mode 100644 >> index 0000000..13e1f73 >> --- /dev/null >> +++ b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c >> @@ -0,0 +1,34 @@ >> +/* >> + * arch/powerpc/platforms/embedded6xx/gamecube_dev.c >> + * >> + * Nintendo GameCube platform device setup. >> + * Copyright (C) 2008-2009 The GameCube Linux Team >> + * Copyright (C) 2008,2009 Albert Herranz >> + * >> + * This program is free software; you can redistribute it and/or >> + * modify it under the terms of the GNU General Public License >> + * as published by the Free Software Foundation; either version 2 >> + * of the License, or (at your option) any later version. >> + * >> + */ >> + >> +#include <linux/kernel.h> >> +#include <linux/init.h> >> +#include <linux/of_platform.h> >> + >> +#include <asm/machdep.h> >> + >> +static struct of_device_id gamecube_of_bus[] = { >> + { .compatible = "nintendo,flipper", }, >> + { }, >> +}; >> + >> +static int __init gamecube_device_probe(void) >> +{ >> + if (!machine_is(gamecube)) >> + return 0; >> + >> + of_platform_bus_probe(NULL, gamecube_of_bus, NULL); >> + return 0; >> +} >> +device_initcall(gamecube_device_probe); Cheers, Albert
> +static struct of_device_id gamecube_of_bus[] = { > + { .compatible = "nintendo,flipper", }, > + { }, > +}; > + > +static int __init gamecube_device_probe(void) > +{ > + if (!machine_is(gamecube)) > + return 0; > + > + of_platform_bus_probe(NULL, gamecube_of_bus, NULL); > + return 0; > +} You really do not need a platform bus as far as I can see? Segher
Segher Boessenkool wrote: >> +static struct of_device_id gamecube_of_bus[] = { >> + { .compatible = "nintendo,flipper", }, >> + { }, >> +}; >> + >> +static int __init gamecube_device_probe(void) >> +{ >> + if (!machine_is(gamecube)) >> + return 0; >> + >> + of_platform_bus_probe(NULL, gamecube_of_bus, NULL); >> + return 0; >> +} > > You really do not need a platform bus as far as I can see? > We need it as it currently doesn't match with the default bus ids. const struct of_device_id of_default_bus_ids[] = { { .type = "soc", }, { .compatible = "soc", }, { .type = "plb5", }, { .type = "plb4", }, { .type = "opb", }, { .type = "simple", }, {}, }; Should I introduce a .type property matching any of those above in the soc node, and get rid of the explicit bus probe? Thanks, Albert
> We need it as it currently doesn't match with the default bus ids. > Should I introduce a .type property matching any of those above in > the soc node, and get rid of the explicit bus probe? You don't need any fake bus as far as I can see, just probe the devices you want. Segher
Segher Boessenkool wrote: >> We need it as it currently doesn't match with the default bus ids. > >> Should I introduce a .type property matching any of those above in the >> soc node, and get rid of the explicit bus probe? > > You don't need any fake bus as far as I can see, just probe the devices > you want. > But it's way easier to let the bus probe do it for us. I don't see the win here. > > Segher > > Thanks, Albert
>>> We need it as it currently doesn't match with the default bus ids. >> >>> Should I introduce a .type property matching any of those above >>> in the >>> soc node, and get rid of the explicit bus probe? >> >> You don't need any fake bus as far as I can see, just probe the >> devices >> you want. > > But it's way easier to let the bus probe do it for us. I don't see > the win here. As long as this doesn't leak into the device tree in any way, I don't care. How's that? :-) Segher
On Fri, 2009-11-27 at 01:09 +0100, Segher Boessenkool wrote: > >>> We need it as it currently doesn't match with the default bus ids. > >> > >>> Should I introduce a .type property matching any of those above > >>> in the > >>> soc node, and get rid of the explicit bus probe? > >> > >> You don't need any fake bus as far as I can see, just probe the > >> devices > >> you want. > > > > But it's way easier to let the bus probe do it for us. I don't see > > the win here. > > As long as this doesn't leak into the device tree in any way, I don't > care. How's that? :-) I still like having the node that encloses all the devices. Not sure why, but I like it :-) Cheers, Ben.
On Fri, Nov 27, 2009 at 2:35 PM, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote: > On Fri, 2009-11-27 at 01:09 +0100, Segher Boessenkool wrote: >> >>> We need it as it currently doesn't match with the default bus ids. >> >> >> >>> Should I introduce a .type property matching any of those above >> >>> in the >> >>> soc node, and get rid of the explicit bus probe? >> >> >> >> You don't need any fake bus as far as I can see, just probe the >> >> devices >> >> you want. >> > >> > But it's way easier to let the bus probe do it for us. I don't see >> > the win here. >> >> As long as this doesn't leak into the device tree in any way, I don't >> care. How's that? :-) > > I still like having the node that encloses all the devices. Not sure > why, but I like it :-) I do to. It documents that all these things are enclosed in a single package and provides grouping device nodes with nodes describing shared registers and the like. g.
On Fri, Nov 27, 2009 at 8:56 PM, Grant Likely <grant.likely@secretlab.ca> wrote: > On Fri, Nov 27, 2009 at 2:35 PM, Benjamin Herrenschmidt > <benh@kernel.crashing.org> wrote: >> On Fri, 2009-11-27 at 01:09 +0100, Segher Boessenkool wrote: >>> >>> We need it as it currently doesn't match with the default bus ids. >>> >> >>> >>> Should I introduce a .type property matching any of those above >>> >>> in the >>> >>> soc node, and get rid of the explicit bus probe? >>> >> >>> >> You don't need any fake bus as far as I can see, just probe the >>> >> devices >>> >> you want. >>> > >>> > But it's way easier to let the bus probe do it for us. I don't see >>> > the win here. >>> >>> As long as this doesn't leak into the device tree in any way, I don't >>> care. How's that? :-) >> >> I still like having the node that encloses all the devices. Not sure >> why, but I like it :-) > > I do to. It documents that all these things are enclosed in a single > package and provides grouping device nodes with nodes describing > shared registers and the like. And for the same reason I keep all my socks in the same drawer. :-) g.
diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig index 29a98c6..efb2ea1 100644 --- a/arch/powerpc/platforms/embedded6xx/Kconfig +++ b/arch/powerpc/platforms/embedded6xx/Kconfig @@ -114,3 +114,11 @@ config FLIPPER_PIC depends on GAMECUBE_COMMON default y +config GAMECUBE + bool "Nintendo-GameCube" + depends on EMBEDDED6xx + select GAMECUBE_COMMON + help + Select GAMECUBE if configuring for the Nintendo GameCube. + More information at: <http://gc-linux.sourceforge.net/> + diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile index 35258fd..b0324ed 100644 --- a/arch/powerpc/platforms/embedded6xx/Makefile +++ b/arch/powerpc/platforms/embedded6xx/Makefile @@ -9,3 +9,4 @@ 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 +obj-$(CONFIG_GAMECUBE) += gamecube.o gamecube_dev.o diff --git a/arch/powerpc/platforms/embedded6xx/gamecube.c b/arch/powerpc/platforms/embedded6xx/gamecube.c new file mode 100644 index 0000000..8045a23 --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/gamecube.c @@ -0,0 +1,112 @@ +/* + * arch/powerpc/platforms/embedded6xx/gamecube.c + * + * Nintendo GameCube board-specific support + * Copyright (C) 2004-2009 The GameCube Linux Team + * Copyright (C) 2007,2008,2009 Albert Herranz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/irq.h> +#include <linux/kexec.h> +#include <linux/seq_file.h> + +#include <asm/io.h> +#include <asm/machdep.h> +#include <asm/prom.h> +#include <asm/time.h> +#include <asm/udbg.h> + +#include "flipper-pic.h" +#include "usbgecko_udbg.h" + + +static void gamecube_restart(char *cmd) +{ + local_irq_disable(); + flipper_platform_reset(); + /* spin until power button pressed */ + for (;;) + cpu_relax(); +} + +static void gamecube_power_off(void) +{ + local_irq_disable(); + /* spin until power button pressed */ + for (;;) + cpu_relax(); +} + +static void gamecube_halt(void) +{ + gamecube_restart(NULL); +} + +static void gamecube_show_cpuinfo(struct seq_file *m) +{ + seq_printf(m, "vendor\t\t: IBM\n"); + seq_printf(m, "machine\t\t: Nintendo GameCube\n"); +} + +static void gamecube_setup_arch(void) +{ + /* currently not used */ +} + +static void __init gamecube_init_early(void) +{ + ug_udbg_init(); +} + +static int __init gamecube_probe(void) +{ + unsigned long dt_root; + + dt_root = of_get_flat_dt_root(); + if (!of_flat_dt_is_compatible(dt_root, "nintendo,gamecube")) + return 0; + + return 1; +} + +static void gamecube_shutdown(void) +{ + /* currently not used */ +} + +#ifdef CONFIG_KEXEC +static int gamecube_kexec_prepare(struct kimage *image) +{ + return 0; +} +#endif /* CONFIG_KEXEC */ + + +define_machine(gamecube) { + .name = "gamecube", + .probe = gamecube_probe, + .setup_arch = gamecube_setup_arch, + .init_early = gamecube_init_early, + .show_cpuinfo = gamecube_show_cpuinfo, + .restart = gamecube_restart, + .power_off = gamecube_power_off, + .halt = gamecube_halt, + .init_IRQ = flipper_pic_probe, + .get_irq = flipper_pic_get_irq, + .calibrate_decr = generic_calibrate_decr, + .progress = udbg_progress, + .machine_shutdown = gamecube_shutdown, +#ifdef CONFIG_KEXEC + .machine_kexec_prepare = gamecube_kexec_prepare, + .machine_kexec = default_machine_kexec, +#endif +}; + diff --git a/arch/powerpc/platforms/embedded6xx/gamecube_dev.c b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c new file mode 100644 index 0000000..13e1f73 --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/gamecube_dev.c @@ -0,0 +1,34 @@ +/* + * arch/powerpc/platforms/embedded6xx/gamecube_dev.c + * + * Nintendo GameCube platform device setup. + * Copyright (C) 2008-2009 The GameCube Linux Team + * Copyright (C) 2008,2009 Albert Herranz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/of_platform.h> + +#include <asm/machdep.h> + +static struct of_device_id gamecube_of_bus[] = { + { .compatible = "nintendo,flipper", }, + { }, +}; + +static int __init gamecube_device_probe(void) +{ + if (!machine_is(gamecube)) + return 0; + + of_platform_bus_probe(NULL, gamecube_of_bus, NULL); + return 0; +} +device_initcall(gamecube_device_probe);
Add platform support for the Nintendo GameCube video game console. Signed-off-by: Albert Herranz <albert_herranz@yahoo.es> --- arch/powerpc/platforms/embedded6xx/Kconfig | 8 ++ arch/powerpc/platforms/embedded6xx/Makefile | 1 + arch/powerpc/platforms/embedded6xx/gamecube.c | 112 +++++++++++++++++++++ arch/powerpc/platforms/embedded6xx/gamecube_dev.c | 34 ++++++ 4 files changed, 155 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/platforms/embedded6xx/gamecube.c create mode 100644 arch/powerpc/platforms/embedded6xx/gamecube_dev.c