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 <asm/mach-types.h> 247f627f03SMagnus Damm #include <asm/mach/arch.h> 257f627f03SMagnus Damm #include <asm/mach/map.h> 26fd44aa5eSMagnus Damm #include "common.h" 277f627f03SMagnus Damm 28bd5a875dSMagnus Damm static struct map_desc emev2_io_desc[] __initdata = { 29bd5a875dSMagnus Damm #ifdef CONFIG_SMP 30bd5a875dSMagnus Damm /* 2M mapping for SCU + L2 controller */ 31bd5a875dSMagnus Damm { 32bd5a875dSMagnus Damm .virtual = 0xf0000000, 33bd5a875dSMagnus Damm .pfn = __phys_to_pfn(0x1e000000), 34bd5a875dSMagnus Damm .length = SZ_2M, 35bd5a875dSMagnus Damm .type = MT_DEVICE 36bd5a875dSMagnus Damm }, 37bd5a875dSMagnus Damm #endif 38bd5a875dSMagnus Damm }; 39bd5a875dSMagnus Damm 40505891ecSMagnus Damm static void __init emev2_map_io(void) 41bd5a875dSMagnus Damm { 42bd5a875dSMagnus Damm iotable_init(emev2_io_desc, ARRAY_SIZE(emev2_io_desc)); 43bd5a875dSMagnus Damm } 44bd5a875dSMagnus Damm 45505891ecSMagnus Damm static void __init emev2_init_delay(void) 467f627f03SMagnus Damm { 477f627f03SMagnus Damm shmobile_setup_delay(533, 1, 3); /* Cortex-A9 @ 533MHz */ 483d5de271SMagnus Damm } 493d5de271SMagnus Damm 50a3153e6cSMagnus Damm static void __init emev2_add_standard_devices_dt(void) 51a3153e6cSMagnus Damm { 52a3153e6cSMagnus Damm of_clk_init(NULL); 53a3153e6cSMagnus Damm of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 54a3153e6cSMagnus Damm } 55a3153e6cSMagnus Damm 56d24d1780SSimon Horman static const char *emev2_boards_compat_dt[] __initconst = { 573d5de271SMagnus Damm "renesas,emev2", 583d5de271SMagnus Damm NULL, 593d5de271SMagnus Damm }; 603d5de271SMagnus Damm 61505891ecSMagnus Damm extern struct smp_operations emev2_smp_ops; 62505891ecSMagnus Damm 633d5de271SMagnus Damm DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") 64a62580e5SMarc Zyngier .smp = smp_ops(emev2_smp_ops), 650ea2b538SMagnus Damm .map_io = emev2_map_io, 663d5de271SMagnus Damm .init_early = emev2_init_delay, 67a3153e6cSMagnus Damm .init_machine = emev2_add_standard_devices_dt, 683f348e1cSMagnus Damm .init_late = shmobile_init_late, 693d5de271SMagnus Damm .dt_compat = emev2_boards_compat_dt, 703d5de271SMagnus Damm MACHINE_END 71