xref: /linux/arch/arm/mach-hisi/hisilicon.c (revision d2912cb15bdda8ba4a5dd73396ad62641af2f520)
1*d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2a9434e96SKevin Hilman /*
3389ee0c2SHaojian Zhuang  * (Hisilicon's SoC based) flattened device tree enabled machine
42c7268c7SHaojian Zhuang  *
52c7268c7SHaojian Zhuang  * Copyright (c) 2012-2013 Hisilicon Ltd.
62c7268c7SHaojian Zhuang  * Copyright (c) 2012-2013 Linaro Ltd.
72c7268c7SHaojian Zhuang  *
82c7268c7SHaojian Zhuang  * Author: Haojian Zhuang <haojian.zhuang@linaro.org>
92c7268c7SHaojian Zhuang */
102c7268c7SHaojian Zhuang 
112c7268c7SHaojian Zhuang #include <linux/clocksource.h>
122c7268c7SHaojian Zhuang #include <linux/irqchip.h>
13a9434e96SKevin Hilman 
142c7268c7SHaojian Zhuang #include <asm/mach/arch.h>
152c7268c7SHaojian Zhuang #include <asm/mach/map.h>
162c7268c7SHaojian Zhuang 
17a9434e96SKevin Hilman #define HI3620_SYSCTRL_PHYS_BASE		0xfc802000
18a9434e96SKevin Hilman #define HI3620_SYSCTRL_VIRT_BASE		0xfe802000
19a9434e96SKevin Hilman 
202c7268c7SHaojian Zhuang /*
212c7268c7SHaojian Zhuang  * This table is only for optimization. Since ioremap() could always share
222c7268c7SHaojian Zhuang  * the same mapping if it's defined as static IO mapping.
232c7268c7SHaojian Zhuang  *
242c7268c7SHaojian Zhuang  * Without this table, system could also work. The cost is some virtual address
252c7268c7SHaojian Zhuang  * spaces wasted since ioremap() may be called multi times for the same
262c7268c7SHaojian Zhuang  * IO space.
272c7268c7SHaojian Zhuang  */
282c7268c7SHaojian Zhuang static struct map_desc hi3620_io_desc[] __initdata = {
292c7268c7SHaojian Zhuang 	{
30a9434e96SKevin Hilman 		/* sysctrl */
31a9434e96SKevin Hilman 		.pfn		= __phys_to_pfn(HI3620_SYSCTRL_PHYS_BASE),
32a9434e96SKevin Hilman 		.virtual	= HI3620_SYSCTRL_VIRT_BASE,
332c7268c7SHaojian Zhuang 		.length		= 0x1000,
342c7268c7SHaojian Zhuang 		.type		= MT_DEVICE,
352c7268c7SHaojian Zhuang 	},
362c7268c7SHaojian Zhuang };
372c7268c7SHaojian Zhuang 
382c7268c7SHaojian Zhuang static void __init hi3620_map_io(void)
392c7268c7SHaojian Zhuang {
402c7268c7SHaojian Zhuang 	debug_ll_io_init();
412c7268c7SHaojian Zhuang 	iotable_init(hi3620_io_desc, ARRAY_SIZE(hi3620_io_desc));
422c7268c7SHaojian Zhuang }
432c7268c7SHaojian Zhuang 
44543c5040SUwe Kleine-König static const char *const hi3xxx_compat[] __initconst = {
452c7268c7SHaojian Zhuang 	"hisilicon,hi3620-hi4511",
462c7268c7SHaojian Zhuang 	NULL,
472c7268c7SHaojian Zhuang };
482c7268c7SHaojian Zhuang 
492c7268c7SHaojian Zhuang DT_MACHINE_START(HI3620, "Hisilicon Hi3620 (Flattened Device Tree)")
502c7268c7SHaojian Zhuang 	.map_io		= hi3620_map_io,
512c7268c7SHaojian Zhuang 	.dt_compat	= hi3xxx_compat,
522c7268c7SHaojian Zhuang MACHINE_END
53