1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * (HiSilicon's SoC based) flattened device tree enabled machine |
4 | * |
5 | * Copyright (c) 2012-2013 HiSilicon Ltd. |
6 | * Copyright (c) 2012-2013 Linaro Ltd. |
7 | * |
8 | * Author: Haojian Zhuang <haojian.zhuang@linaro.org> |
9 | */ |
10 | |
11 | #include <linux/clocksource.h> |
12 | #include <linux/irqchip.h> |
13 | |
14 | #include <asm/mach/arch.h> |
15 | #include <asm/mach/map.h> |
16 | |
17 | #define HI3620_SYSCTRL_PHYS_BASE 0xfc802000 |
18 | #define HI3620_SYSCTRL_VIRT_BASE 0xfe802000 |
19 | |
20 | /* |
21 | * This table is only for optimization. Since ioremap() could always share |
22 | * the same mapping if it's defined as static IO mapping. |
23 | * |
24 | * Without this table, system could also work. The cost is some virtual address |
25 | * spaces wasted since ioremap() may be called multi times for the same |
26 | * IO space. |
27 | */ |
28 | static struct map_desc hi3620_io_desc[] __initdata = { |
29 | { |
30 | /* sysctrl */ |
31 | .pfn = __phys_to_pfn(HI3620_SYSCTRL_PHYS_BASE), |
32 | .virtual = HI3620_SYSCTRL_VIRT_BASE, |
33 | .length = 0x1000, |
34 | .type = MT_DEVICE, |
35 | }, |
36 | }; |
37 | |
38 | static void __init hi3620_map_io(void) |
39 | { |
40 | debug_ll_io_init(); |
41 | iotable_init(hi3620_io_desc, ARRAY_SIZE(hi3620_io_desc)); |
42 | } |
43 | |
44 | static const char *const hi3xxx_compat[] __initconst = { |
45 | "hisilicon,hi3620-hi4511" , |
46 | NULL, |
47 | }; |
48 | |
49 | DT_MACHINE_START(HI3620, "Hisilicon Hi3620 (Flattened Device Tree)" ) |
50 | .map_io = hi3620_map_io, |
51 | .dt_compat = hi3xxx_compat, |
52 | MACHINE_END |
53 | |