Skip to content

Commit e90d71d

Browse files
herraa1glikely
authored andcommitted
powerpc: gamecube: platform support
Add platform support for the Nintendo GameCube video game console. Signed-off-by: Albert Herranz <[email protected]> Signed-off-by: Grant Likely <[email protected]>
1 parent 028ee97 commit e90d71d

File tree

3 files changed

+127
-0
lines changed

3 files changed

+127
-0
lines changed

arch/powerpc/platforms/embedded6xx/Kconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,11 @@ config USBGECKO_UDBG
107107

108108
If in doubt, say N here.
109109

110+
config GAMECUBE
111+
bool "Nintendo-GameCube"
112+
depends on EMBEDDED6xx
113+
select GAMECUBE_COMMON
114+
help
115+
Select GAMECUBE if configuring for the Nintendo GameCube.
116+
More information at: <http://gc-linux.sourceforge.net/>
117+

arch/powerpc/platforms/embedded6xx/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o
99
obj-$(CONFIG_PPC_C2K) += c2k.o
1010
obj-$(CONFIG_USBGECKO_UDBG) += usbgecko_udbg.o
1111
obj-$(CONFIG_GAMECUBE_COMMON) += flipper-pic.o
12+
obj-$(CONFIG_GAMECUBE) += gamecube.o
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/*
2+
* arch/powerpc/platforms/embedded6xx/gamecube.c
3+
*
4+
* Nintendo GameCube board-specific support
5+
* Copyright (C) 2004-2009 The GameCube Linux Team
6+
* Copyright (C) 2007,2008,2009 Albert Herranz
7+
*
8+
* This program is free software; you can redistribute it and/or
9+
* modify it under the terms of the GNU General Public License
10+
* as published by the Free Software Foundation; either version 2
11+
* of the License, or (at your option) any later version.
12+
*
13+
*/
14+
15+
#include <linux/kernel.h>
16+
#include <linux/init.h>
17+
#include <linux/irq.h>
18+
#include <linux/kexec.h>
19+
#include <linux/seq_file.h>
20+
#include <linux/of_platform.h>
21+
22+
#include <asm/io.h>
23+
#include <asm/machdep.h>
24+
#include <asm/prom.h>
25+
#include <asm/time.h>
26+
#include <asm/udbg.h>
27+
28+
#include "flipper-pic.h"
29+
#include "usbgecko_udbg.h"
30+
31+
32+
static void gamecube_spin(void)
33+
{
34+
/* spin until power button pressed */
35+
for (;;)
36+
cpu_relax();
37+
}
38+
39+
static void gamecube_restart(char *cmd)
40+
{
41+
local_irq_disable();
42+
flipper_platform_reset();
43+
gamecube_spin();
44+
}
45+
46+
static void gamecube_power_off(void)
47+
{
48+
local_irq_disable();
49+
gamecube_spin();
50+
}
51+
52+
static void gamecube_halt(void)
53+
{
54+
gamecube_restart(NULL);
55+
}
56+
57+
static void __init gamecube_init_early(void)
58+
{
59+
ug_udbg_init();
60+
}
61+
62+
static int __init gamecube_probe(void)
63+
{
64+
unsigned long dt_root;
65+
66+
dt_root = of_get_flat_dt_root();
67+
if (!of_flat_dt_is_compatible(dt_root, "nintendo,gamecube"))
68+
return 0;
69+
70+
return 1;
71+
}
72+
73+
static void gamecube_shutdown(void)
74+
{
75+
flipper_quiesce();
76+
}
77+
78+
#ifdef CONFIG_KEXEC
79+
static int gamecube_kexec_prepare(struct kimage *image)
80+
{
81+
return 0;
82+
}
83+
#endif /* CONFIG_KEXEC */
84+
85+
86+
define_machine(gamecube) {
87+
.name = "gamecube",
88+
.probe = gamecube_probe,
89+
.init_early = gamecube_init_early,
90+
.restart = gamecube_restart,
91+
.power_off = gamecube_power_off,
92+
.halt = gamecube_halt,
93+
.init_IRQ = flipper_pic_probe,
94+
.get_irq = flipper_pic_get_irq,
95+
.calibrate_decr = generic_calibrate_decr,
96+
.progress = udbg_progress,
97+
.machine_shutdown = gamecube_shutdown,
98+
#ifdef CONFIG_KEXEC
99+
.machine_kexec_prepare = gamecube_kexec_prepare,
100+
#endif
101+
};
102+
103+
104+
static struct of_device_id gamecube_of_bus[] = {
105+
{ .compatible = "nintendo,flipper", },
106+
{ },
107+
};
108+
109+
static int __init gamecube_device_probe(void)
110+
{
111+
if (!machine_is(gamecube))
112+
return 0;
113+
114+
of_platform_bus_probe(NULL, gamecube_of_bus, NULL);
115+
return 0;
116+
}
117+
device_initcall(gamecube_device_probe);
118+

0 commit comments

Comments
 (0)