diff options
Diffstat (limited to 'arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c')
-rw-r--r-- | arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c b/arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c new file mode 100644 index 000000000000..7eb9a10fc1af --- /dev/null +++ b/arch/arm/mach-s3c64xx/mach-s3c64xx-dt.c | |||
@@ -0,0 +1,85 @@ | |||
1 | /* | ||
2 | * Samsung's S3C64XX flattened device tree enabled machine | ||
3 | * | ||
4 | * Copyright (c) 2013 Tomasz Figa <tomasz.figa@gmail.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #include <linux/clk-provider.h> | ||
12 | #include <linux/irqchip.h> | ||
13 | #include <linux/of_platform.h> | ||
14 | |||
15 | #include <asm/mach/arch.h> | ||
16 | #include <asm/mach/map.h> | ||
17 | #include <asm/system_misc.h> | ||
18 | |||
19 | #include <plat/cpu.h> | ||
20 | #include <plat/watchdog-reset.h> | ||
21 | |||
22 | #include <mach/map.h> | ||
23 | |||
24 | #include "common.h" | ||
25 | |||
26 | /* | ||
27 | * IO mapping for shared system controller IP. | ||
28 | * | ||
29 | * FIXME: Make remaining drivers use dynamic mapping. | ||
30 | */ | ||
31 | static struct map_desc s3c64xx_dt_iodesc[] __initdata = { | ||
32 | { | ||
33 | .virtual = (unsigned long)S3C_VA_SYS, | ||
34 | .pfn = __phys_to_pfn(S3C64XX_PA_SYSCON), | ||
35 | .length = SZ_4K, | ||
36 | .type = MT_DEVICE, | ||
37 | }, | ||
38 | }; | ||
39 | |||
40 | static void __init s3c64xx_dt_map_io(void) | ||
41 | { | ||
42 | debug_ll_io_init(); | ||
43 | iotable_init(s3c64xx_dt_iodesc, ARRAY_SIZE(s3c64xx_dt_iodesc)); | ||
44 | |||
45 | s3c64xx_init_cpu(); | ||
46 | |||
47 | if (!soc_is_s3c64xx()) | ||
48 | panic("SoC is not S3C64xx!"); | ||
49 | } | ||
50 | |||
51 | static void __init s3c64xx_dt_init_irq(void) | ||
52 | { | ||
53 | of_clk_init(NULL); | ||
54 | samsung_wdt_reset_of_init(); | ||
55 | irqchip_init(); | ||
56 | }; | ||
57 | |||
58 | static void __init s3c64xx_dt_init_machine(void) | ||
59 | { | ||
60 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
61 | } | ||
62 | |||
63 | static void s3c64xx_dt_restart(enum reboot_mode mode, const char *cmd) | ||
64 | { | ||
65 | if (mode != REBOOT_SOFT) | ||
66 | samsung_wdt_reset(); | ||
67 | |||
68 | /* if all else fails, or mode was for soft, jump to 0 */ | ||
69 | soft_restart(0); | ||
70 | } | ||
71 | |||
72 | static char const *s3c64xx_dt_compat[] __initdata = { | ||
73 | "samsung,s3c6400", | ||
74 | "samsung,s3c6410", | ||
75 | NULL | ||
76 | }; | ||
77 | |||
78 | DT_MACHINE_START(S3C6400_DT, "Samsung S3C64xx (Flattened Device Tree)") | ||
79 | /* Maintainer: Tomasz Figa <tomasz.figa@gmail.com> */ | ||
80 | .dt_compat = s3c64xx_dt_compat, | ||
81 | .map_io = s3c64xx_dt_map_io, | ||
82 | .init_irq = s3c64xx_dt_init_irq, | ||
83 | .init_machine = s3c64xx_dt_init_machine, | ||
84 | .restart = s3c64xx_dt_restart, | ||
85 | MACHINE_END | ||