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