17f627f03SMagnus Damm /* 27f627f03SMagnus Damm * Emma Mobile EV2 processor support 37f627f03SMagnus Damm * 47f627f03SMagnus Damm * Copyright (C) 2012 Magnus Damm 57f627f03SMagnus Damm * 67f627f03SMagnus Damm * This program is free software; you can redistribute it and/or modify 77f627f03SMagnus Damm * it under the terms of the GNU General Public License as published by 87f627f03SMagnus Damm * the Free Software Foundation; version 2 of the License. 97f627f03SMagnus Damm * 107f627f03SMagnus Damm * This program is distributed in the hope that it will be useful, 117f627f03SMagnus Damm * but WITHOUT ANY WARRANTY; without even the implied warranty of 127f627f03SMagnus Damm * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 137f627f03SMagnus Damm * GNU General Public License for more details. 147f627f03SMagnus Damm * 157f627f03SMagnus Damm * You should have received a copy of the GNU General Public License 167f627f03SMagnus Damm * along with this program; if not, write to the Free Software 177f627f03SMagnus Damm * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 187f627f03SMagnus Damm */ 19a3153e6cSMagnus Damm #include <linux/clk-provider.h> 207f627f03SMagnus Damm #include <linux/kernel.h> 217f627f03SMagnus Damm #include <linux/init.h> 223d5de271SMagnus Damm #include <linux/of_platform.h> 237f627f03SMagnus Damm #include <mach/common.h> 247f627f03SMagnus Damm #include <mach/emev2.h> 257f627f03SMagnus Damm #include <asm/mach-types.h> 267f627f03SMagnus Damm #include <asm/mach/arch.h> 277f627f03SMagnus Damm #include <asm/mach/map.h> 287f627f03SMagnus Damm 29bd5a875dSMagnus Damm static struct map_desc emev2_io_desc[] __initdata = { 30bd5a875dSMagnus Damm #ifdef CONFIG_SMP 31bd5a875dSMagnus Damm /* 2M mapping for SCU + L2 controller */ 32bd5a875dSMagnus Damm { 33bd5a875dSMagnus Damm .virtual = 0xf0000000, 34bd5a875dSMagnus Damm .pfn = __phys_to_pfn(0x1e000000), 35bd5a875dSMagnus Damm .length = SZ_2M, 36bd5a875dSMagnus Damm .type = MT_DEVICE 37bd5a875dSMagnus Damm }, 38bd5a875dSMagnus Damm #endif 39bd5a875dSMagnus Damm }; 40bd5a875dSMagnus Damm 41bd5a875dSMagnus Damm void __init emev2_map_io(void) 42bd5a875dSMagnus Damm { 43bd5a875dSMagnus Damm iotable_init(emev2_io_desc, ARRAY_SIZE(emev2_io_desc)); 44bd5a875dSMagnus Damm } 45bd5a875dSMagnus Damm 464146fa88SMagnus Damm void __init emev2_init_delay(void) 477f627f03SMagnus Damm { 487f627f03SMagnus Damm shmobile_setup_delay(533, 1, 3); /* Cortex-A9 @ 533MHz */ 493d5de271SMagnus Damm } 503d5de271SMagnus Damm 51a3153e6cSMagnus Damm static void __init emev2_add_standard_devices_dt(void) 52a3153e6cSMagnus Damm { 53a3153e6cSMagnus Damm #ifdef CONFIG_COMMON_CLK 54a3153e6cSMagnus Damm of_clk_init(NULL); 55a3153e6cSMagnus Damm #else 56a3153e6cSMagnus Damm emev2_clock_init(); 57a3153e6cSMagnus Damm #endif 58a3153e6cSMagnus Damm of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 59a3153e6cSMagnus Damm } 60a3153e6cSMagnus Damm 61d24d1780SSimon Horman static const char *emev2_boards_compat_dt[] __initconst = { 623d5de271SMagnus Damm "renesas,emev2", 633d5de271SMagnus Damm NULL, 643d5de271SMagnus Damm }; 653d5de271SMagnus Damm 663d5de271SMagnus Damm DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") 67a62580e5SMarc Zyngier .smp = smp_ops(emev2_smp_ops), 680ea2b538SMagnus Damm .map_io = emev2_map_io, 693d5de271SMagnus Damm .init_early = emev2_init_delay, 70a3153e6cSMagnus Damm .init_machine = emev2_add_standard_devices_dt, 713f348e1cSMagnus Damm .init_late = shmobile_init_late, 723d5de271SMagnus Damm .dt_compat = emev2_boards_compat_dt, 733d5de271SMagnus Damm MACHINE_END 74