xref: /linux/arch/arm/mach-sunxi/sunxi.c (revision 3b52634f0b7adaaf2b29569025287b938b7c71a6)
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