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