Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/platforms/embedded6xx/gamecube.c
26489 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* arch/powerpc/platforms/embedded6xx/gamecube.c
4
*
5
* Nintendo GameCube board-specific support
6
* Copyright (C) 2004-2009 The GameCube Linux Team
7
* Copyright (C) 2007,2008,2009 Albert Herranz
8
*/
9
10
#include <linux/kernel.h>
11
#include <linux/init.h>
12
#include <linux/irq.h>
13
#include <linux/kexec.h>
14
#include <linux/seq_file.h>
15
#include <linux/of_platform.h>
16
17
#include <asm/io.h>
18
#include <asm/machdep.h>
19
#include <asm/time.h>
20
#include <asm/udbg.h>
21
22
#include "flipper-pic.h"
23
#include "usbgecko_udbg.h"
24
25
26
static void __noreturn gamecube_spin(void)
27
{
28
/* spin until power button pressed */
29
for (;;)
30
cpu_relax();
31
}
32
33
static void __noreturn gamecube_restart(char *cmd)
34
{
35
local_irq_disable();
36
flipper_platform_reset();
37
gamecube_spin();
38
}
39
40
static void gamecube_power_off(void)
41
{
42
local_irq_disable();
43
gamecube_spin();
44
}
45
46
static void __noreturn gamecube_halt(void)
47
{
48
gamecube_restart(NULL);
49
}
50
51
static int __init gamecube_probe(void)
52
{
53
pm_power_off = gamecube_power_off;
54
55
ug_udbg_init();
56
57
return 1;
58
}
59
60
static void gamecube_shutdown(void)
61
{
62
flipper_quiesce();
63
}
64
65
define_machine(gamecube) {
66
.name = "gamecube",
67
.compatible = "nintendo,gamecube",
68
.probe = gamecube_probe,
69
.restart = gamecube_restart,
70
.halt = gamecube_halt,
71
.init_IRQ = flipper_pic_probe,
72
.get_irq = flipper_pic_get_irq,
73
.progress = udbg_progress,
74
.machine_shutdown = gamecube_shutdown,
75
};
76
77
78
static const struct of_device_id gamecube_of_bus[] = {
79
{ .compatible = "nintendo,flipper", },
80
{ },
81
};
82
83
static int __init gamecube_device_probe(void)
84
{
85
of_platform_bus_probe(NULL, gamecube_of_bus, NULL);
86
return 0;
87
}
88
machine_device_initcall(gamecube, gamecube_device_probe);
89
90
91