Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm/mach-gemini/board-dt.c
26292 views
1
// SPDX-License-Identifier: GPL-2.0
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>
11
#include <asm/system_misc.h>
12
#include <asm/proc-fns.h>
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
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
raw_local_irq_enable();
46
cpu_do_idle();
47
raw_local_irq_disable();
48
}
49
50
static void __init gemini_init_machine(void)
51
{
52
arm_pm_idle = gemini_idle;
53
}
54
55
static const char *gemini_board_compat[] = {
56
"cortina,gemini",
57
NULL,
58
};
59
60
DT_MACHINE_START(GEMINI_DT, "Gemini (Device Tree)")
61
.map_io = gemini_map_io,
62
.init_machine = gemini_init_machine,
63
.dt_compat = gemini_board_compat,
64
MACHINE_END
65
66