1*3b52634fSMaxime Ripard /* 2*3b52634fSMaxime Ripard * Device Tree support for Allwinner A1X SoCs 3*3b52634fSMaxime Ripard * 4*3b52634fSMaxime Ripard * Copyright (C) 2012 Maxime Ripard 5*3b52634fSMaxime Ripard * 6*3b52634fSMaxime Ripard * Maxime Ripard <maxime.ripard@free-electrons.com> 7*3b52634fSMaxime Ripard * 8*3b52634fSMaxime Ripard * This file is licensed under the terms of the GNU General Public 9*3b52634fSMaxime Ripard * License version 2. This program is licensed "as is" without any 10*3b52634fSMaxime Ripard * warranty of any kind, whether express or implied. 11*3b52634fSMaxime Ripard */ 12*3b52634fSMaxime Ripard 13*3b52634fSMaxime Ripard #include <linux/kernel.h> 14*3b52634fSMaxime Ripard #include <linux/init.h> 15*3b52634fSMaxime Ripard #include <linux/of_irq.h> 16*3b52634fSMaxime Ripard #include <linux/of_platform.h> 17*3b52634fSMaxime Ripard #include <linux/io.h> 18*3b52634fSMaxime Ripard #include <linux/sunxi_timer.h> 19*3b52634fSMaxime Ripard 20*3b52634fSMaxime Ripard #include <linux/irqchip/sunxi.h> 21*3b52634fSMaxime Ripard 22*3b52634fSMaxime Ripard #include <asm/hardware/vic.h> 23*3b52634fSMaxime Ripard 24*3b52634fSMaxime Ripard #include <asm/mach/arch.h> 25*3b52634fSMaxime Ripard #include <asm/mach/map.h> 26*3b52634fSMaxime Ripard 27*3b52634fSMaxime Ripard #include "sunxi.h" 28*3b52634fSMaxime Ripard 29*3b52634fSMaxime Ripard static struct map_desc sunxi_io_desc[] __initdata = { 30*3b52634fSMaxime Ripard { 31*3b52634fSMaxime Ripard .virtual = (unsigned long) SUNXI_REGS_VIRT_BASE, 32*3b52634fSMaxime Ripard .pfn = __phys_to_pfn(SUNXI_REGS_PHYS_BASE), 33*3b52634fSMaxime Ripard .length = SUNXI_REGS_SIZE, 34*3b52634fSMaxime Ripard .type = MT_DEVICE, 35*3b52634fSMaxime Ripard }, 36*3b52634fSMaxime Ripard }; 37*3b52634fSMaxime Ripard 38*3b52634fSMaxime Ripard void __init sunxi_map_io(void) 39*3b52634fSMaxime Ripard { 40*3b52634fSMaxime Ripard iotable_init(sunxi_io_desc, ARRAY_SIZE(sunxi_io_desc)); 41*3b52634fSMaxime Ripard } 42*3b52634fSMaxime Ripard 43*3b52634fSMaxime Ripard static void __init sunxi_dt_init(void) 44*3b52634fSMaxime Ripard { 45*3b52634fSMaxime Ripard of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 46*3b52634fSMaxime Ripard } 47*3b52634fSMaxime Ripard 48*3b52634fSMaxime Ripard static const char * const sunxi_board_dt_compat[] = { 49*3b52634fSMaxime Ripard "allwinner,sun5i", 50*3b52634fSMaxime Ripard NULL, 51*3b52634fSMaxime Ripard }; 52*3b52634fSMaxime Ripard 53*3b52634fSMaxime Ripard DT_MACHINE_START(SUNXI_DT, "Allwinner A1X (Device Tree)") 54*3b52634fSMaxime Ripard .init_machine = sunxi_dt_init, 55*3b52634fSMaxime Ripard .map_io = sunxi_map_io, 56*3b52634fSMaxime Ripard .init_irq = sunxi_init_irq, 57*3b52634fSMaxime Ripard .handle_irq = sunxi_handle_irq, 58*3b52634fSMaxime Ripard .timer = &sunxi_timer, 59*3b52634fSMaxime Ripard .dt_compat = sunxi_board_dt_compat, 60*3b52634fSMaxime Ripard MACHINE_END 61