xref: /openbmc/linux/arch/arm/mach-hisi/hisilicon.c (revision c1ce9d80)
1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2389ee0c2SHaojian Zhuang /*
3*c1ce9d80SHao Fang  * (HiSilicon's SoC based) flattened device tree enabled machine
4389ee0c2SHaojian Zhuang  *
5*c1ce9d80SHao Fang  * Copyright (c) 2012-2013 HiSilicon Ltd.
6389ee0c2SHaojian Zhuang  * Copyright (c) 2012-2013 Linaro Ltd.
7389ee0c2SHaojian Zhuang  *
8389ee0c2SHaojian Zhuang  * Author: Haojian Zhuang <haojian.zhuang@linaro.org>
9389ee0c2SHaojian Zhuang */
10389ee0c2SHaojian Zhuang 
11389ee0c2SHaojian Zhuang #include <linux/clocksource.h>
12389ee0c2SHaojian Zhuang #include <linux/irqchip.h>
13389ee0c2SHaojian Zhuang 
14389ee0c2SHaojian Zhuang #include <asm/mach/arch.h>
15389ee0c2SHaojian Zhuang #include <asm/mach/map.h>
16389ee0c2SHaojian Zhuang 
17389ee0c2SHaojian Zhuang #define HI3620_SYSCTRL_PHYS_BASE		0xfc802000
18389ee0c2SHaojian Zhuang #define HI3620_SYSCTRL_VIRT_BASE		0xfe802000
19389ee0c2SHaojian Zhuang 
20389ee0c2SHaojian Zhuang /*
21389ee0c2SHaojian Zhuang  * This table is only for optimization. Since ioremap() could always share
22389ee0c2SHaojian Zhuang  * the same mapping if it's defined as static IO mapping.
23389ee0c2SHaojian Zhuang  *
24389ee0c2SHaojian Zhuang  * Without this table, system could also work. The cost is some virtual address
25389ee0c2SHaojian Zhuang  * spaces wasted since ioremap() may be called multi times for the same
26389ee0c2SHaojian Zhuang  * IO space.
27389ee0c2SHaojian Zhuang  */
28389ee0c2SHaojian Zhuang static struct map_desc hi3620_io_desc[] __initdata = {
29389ee0c2SHaojian Zhuang 	{
30389ee0c2SHaojian Zhuang 		/* sysctrl */
31389ee0c2SHaojian Zhuang 		.pfn		= __phys_to_pfn(HI3620_SYSCTRL_PHYS_BASE),
32389ee0c2SHaojian Zhuang 		.virtual	= HI3620_SYSCTRL_VIRT_BASE,
33389ee0c2SHaojian Zhuang 		.length		= 0x1000,
34389ee0c2SHaojian Zhuang 		.type		= MT_DEVICE,
35389ee0c2SHaojian Zhuang 	},
36389ee0c2SHaojian Zhuang };
37389ee0c2SHaojian Zhuang 
hi3620_map_io(void)38389ee0c2SHaojian Zhuang static void __init hi3620_map_io(void)
39389ee0c2SHaojian Zhuang {
40389ee0c2SHaojian Zhuang 	debug_ll_io_init();
41389ee0c2SHaojian Zhuang 	iotable_init(hi3620_io_desc, ARRAY_SIZE(hi3620_io_desc));
42389ee0c2SHaojian Zhuang }
43389ee0c2SHaojian Zhuang 
44543c5040SUwe Kleine-König static const char *const hi3xxx_compat[] __initconst = {
45389ee0c2SHaojian Zhuang 	"hisilicon,hi3620-hi4511",
46389ee0c2SHaojian Zhuang 	NULL,
47389ee0c2SHaojian Zhuang };
48389ee0c2SHaojian Zhuang 
49389ee0c2SHaojian Zhuang DT_MACHINE_START(HI3620, "Hisilicon Hi3620 (Flattened Device Tree)")
50389ee0c2SHaojian Zhuang 	.map_io		= hi3620_map_io,
51389ee0c2SHaojian Zhuang 	.dt_compat	= hi3xxx_compat,
52389ee0c2SHaojian Zhuang MACHINE_END
53