1*adbd1ad1SMateusz Krawczuk /* 2*adbd1ad1SMateusz Krawczuk * Samsung's S5PC110/S5PV210 flattened device tree enabled machine. 3*adbd1ad1SMateusz Krawczuk * 4*adbd1ad1SMateusz Krawczuk * Copyright (c) 2013-2014 Samsung Electronics Co., Ltd. 5*adbd1ad1SMateusz Krawczuk * Mateusz Krawczuk <m.krawczuk@partner.samsung.com> 6*adbd1ad1SMateusz Krawczuk * Tomasz Figa <t.figa@samsung.com> 7*adbd1ad1SMateusz Krawczuk * 8*adbd1ad1SMateusz Krawczuk * This program is free software; you can redistribute it and/or modify 9*adbd1ad1SMateusz Krawczuk * it under the terms of the GNU General Public License version 2 as 10*adbd1ad1SMateusz Krawczuk * published by the Free Software Foundation. 11*adbd1ad1SMateusz Krawczuk */ 12*adbd1ad1SMateusz Krawczuk 13*adbd1ad1SMateusz Krawczuk #include <linux/of_fdt.h> 14*adbd1ad1SMateusz Krawczuk #include <linux/of_platform.h> 15*adbd1ad1SMateusz Krawczuk 16*adbd1ad1SMateusz Krawczuk #include <asm/mach/arch.h> 17*adbd1ad1SMateusz Krawczuk #include <asm/mach/map.h> 18*adbd1ad1SMateusz Krawczuk #include <asm/system_misc.h> 19*adbd1ad1SMateusz Krawczuk 20*adbd1ad1SMateusz Krawczuk #include <plat/map-base.h> 21*adbd1ad1SMateusz Krawczuk #include <mach/regs-clock.h> 22*adbd1ad1SMateusz Krawczuk 23*adbd1ad1SMateusz Krawczuk static int __init s5pv210_fdt_map_sys(unsigned long node, const char *uname, 24*adbd1ad1SMateusz Krawczuk int depth, void *data) 25*adbd1ad1SMateusz Krawczuk { 26*adbd1ad1SMateusz Krawczuk struct map_desc iodesc; 27*adbd1ad1SMateusz Krawczuk const __be32 *reg; 28*adbd1ad1SMateusz Krawczuk int len; 29*adbd1ad1SMateusz Krawczuk 30*adbd1ad1SMateusz Krawczuk if (!of_flat_dt_is_compatible(node, "samsung,s5pv210-clock")) 31*adbd1ad1SMateusz Krawczuk return 0; 32*adbd1ad1SMateusz Krawczuk 33*adbd1ad1SMateusz Krawczuk reg = of_get_flat_dt_prop(node, "reg", &len); 34*adbd1ad1SMateusz Krawczuk if (reg == NULL || len != (sizeof(unsigned long) * 2)) 35*adbd1ad1SMateusz Krawczuk return 0; 36*adbd1ad1SMateusz Krawczuk 37*adbd1ad1SMateusz Krawczuk iodesc.pfn = __phys_to_pfn(be32_to_cpu(reg[0])); 38*adbd1ad1SMateusz Krawczuk iodesc.length = be32_to_cpu(reg[1]) - 1; 39*adbd1ad1SMateusz Krawczuk iodesc.virtual = (unsigned long)S3C_VA_SYS; 40*adbd1ad1SMateusz Krawczuk iodesc.type = MT_DEVICE; 41*adbd1ad1SMateusz Krawczuk iotable_init(&iodesc, 1); 42*adbd1ad1SMateusz Krawczuk 43*adbd1ad1SMateusz Krawczuk return 1; 44*adbd1ad1SMateusz Krawczuk } 45*adbd1ad1SMateusz Krawczuk 46*adbd1ad1SMateusz Krawczuk static void __init s5pv210_dt_map_io(void) 47*adbd1ad1SMateusz Krawczuk { 48*adbd1ad1SMateusz Krawczuk debug_ll_io_init(); 49*adbd1ad1SMateusz Krawczuk 50*adbd1ad1SMateusz Krawczuk of_scan_flat_dt(s5pv210_fdt_map_sys, NULL); 51*adbd1ad1SMateusz Krawczuk } 52*adbd1ad1SMateusz Krawczuk 53*adbd1ad1SMateusz Krawczuk static void s5pv210_dt_restart(enum reboot_mode mode, const char *cmd) 54*adbd1ad1SMateusz Krawczuk { 55*adbd1ad1SMateusz Krawczuk __raw_writel(0x1, S5P_SWRESET); 56*adbd1ad1SMateusz Krawczuk } 57*adbd1ad1SMateusz Krawczuk 58*adbd1ad1SMateusz Krawczuk static char const *s5pv210_dt_compat[] __initconst = { 59*adbd1ad1SMateusz Krawczuk "samsung,s5pc110", 60*adbd1ad1SMateusz Krawczuk "samsung,s5pv210", 61*adbd1ad1SMateusz Krawczuk NULL 62*adbd1ad1SMateusz Krawczuk }; 63*adbd1ad1SMateusz Krawczuk 64*adbd1ad1SMateusz Krawczuk DT_MACHINE_START(S5PV210_DT, "Samsung S5PC110/S5PV210-based board") 65*adbd1ad1SMateusz Krawczuk .dt_compat = s5pv210_dt_compat, 66*adbd1ad1SMateusz Krawczuk .map_io = s5pv210_dt_map_io, 67*adbd1ad1SMateusz Krawczuk .restart = s5pv210_dt_restart, 68*adbd1ad1SMateusz Krawczuk MACHINE_END 69