Commit | Line | Data |
---|---|---|
b2441318 | 1 | // SPDX-License-Identifier: GPL-2.0 |
41d9830c LW |
2 | /* |
3 | * Gemini Device Tree boot support | |
4 | */ | |
5 | #include <linux/kernel.h> | |
6 | #include <linux/init.h> | |
7 | #include <linux/io.h> | |
8 | ||
9 | #include <asm/mach/arch.h> | |
10 | #include <asm/mach/map.h> | |
6dbb708a LW |
11 | #include <asm/system_misc.h> |
12 | #include <asm/proc-fns.h> | |
41d9830c LW |
13 | |
14 | #ifdef CONFIG_DEBUG_GEMINI | |
15 | /* This is needed for LL-debug/earlyprintk/debug-macro.S */ | |
16 | static struct map_desc gemini_io_desc[] __initdata = { | |
17 | { | |
18 | .virtual = CONFIG_DEBUG_UART_VIRT, | |
19 | .pfn = __phys_to_pfn(CONFIG_DEBUG_UART_PHYS), | |
20 | .length = SZ_4K, | |
21 | .type = MT_DEVICE, | |
22 | }, | |
23 | }; | |
24 | ||
25 | static void __init gemini_map_io(void) | |
26 | { | |
27 | iotable_init(gemini_io_desc, ARRAY_SIZE(gemini_io_desc)); | |
28 | } | |
29 | #else | |
30 | #define gemini_map_io NULL | |
31 | #endif | |
32 | ||
6dbb708a LW |
33 | static void gemini_idle(void) |
34 | { | |
35 | /* | |
36 | * Because of broken hardware we have to enable interrupts or the CPU | |
37 | * will never wakeup... Acctualy it is not very good to enable | |
38 | * interrupts first since scheduler can miss a tick, but there is | |
39 | * no other way around this. Platforms that needs it for power saving | |
40 | * should enable it in init code, since by default it is | |
41 | * disabled. | |
42 | */ | |
43 | ||
44 | /* FIXME: Enabling interrupts here is racy! */ | |
45 | local_irq_enable(); | |
46 | cpu_do_idle(); | |
47 | } | |
48 | ||
49 | static void __init gemini_init_machine(void) | |
50 | { | |
51 | arm_pm_idle = gemini_idle; | |
52 | } | |
53 | ||
41d9830c LW |
54 | static const char *gemini_board_compat[] = { |
55 | "cortina,gemini", | |
56 | NULL, | |
57 | }; | |
58 | ||
59 | DT_MACHINE_START(GEMINI_DT, "Gemini (Device Tree)") | |
60 | .map_io = gemini_map_io, | |
6dbb708a | 61 | .init_machine = gemini_init_machine, |
41d9830c LW |
62 | .dt_compat = gemini_board_compat, |
63 | MACHINE_END |