162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * (HiSilicon's SoC based) flattened device tree enabled machine
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2012-2013 HiSilicon Ltd.
662306a36Sopenharmony_ci * Copyright (c) 2012-2013 Linaro Ltd.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Author: Haojian Zhuang <haojian.zhuang@linaro.org>
962306a36Sopenharmony_ci*/
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/clocksource.h>
1262306a36Sopenharmony_ci#include <linux/irqchip.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <asm/mach/arch.h>
1562306a36Sopenharmony_ci#include <asm/mach/map.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define HI3620_SYSCTRL_PHYS_BASE		0xfc802000
1862306a36Sopenharmony_ci#define HI3620_SYSCTRL_VIRT_BASE		0xfe802000
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci/*
2162306a36Sopenharmony_ci * This table is only for optimization. Since ioremap() could always share
2262306a36Sopenharmony_ci * the same mapping if it's defined as static IO mapping.
2362306a36Sopenharmony_ci *
2462306a36Sopenharmony_ci * Without this table, system could also work. The cost is some virtual address
2562306a36Sopenharmony_ci * spaces wasted since ioremap() may be called multi times for the same
2662306a36Sopenharmony_ci * IO space.
2762306a36Sopenharmony_ci */
2862306a36Sopenharmony_cistatic struct map_desc hi3620_io_desc[] __initdata = {
2962306a36Sopenharmony_ci	{
3062306a36Sopenharmony_ci		/* sysctrl */
3162306a36Sopenharmony_ci		.pfn		= __phys_to_pfn(HI3620_SYSCTRL_PHYS_BASE),
3262306a36Sopenharmony_ci		.virtual	= HI3620_SYSCTRL_VIRT_BASE,
3362306a36Sopenharmony_ci		.length		= 0x1000,
3462306a36Sopenharmony_ci		.type		= MT_DEVICE,
3562306a36Sopenharmony_ci	},
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistatic void __init hi3620_map_io(void)
3962306a36Sopenharmony_ci{
4062306a36Sopenharmony_ci	debug_ll_io_init();
4162306a36Sopenharmony_ci	iotable_init(hi3620_io_desc, ARRAY_SIZE(hi3620_io_desc));
4262306a36Sopenharmony_ci}
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_cistatic const char *const hi3xxx_compat[] __initconst = {
4562306a36Sopenharmony_ci	"hisilicon,hi3620-hi4511",
4662306a36Sopenharmony_ci	NULL,
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciDT_MACHINE_START(HI3620, "Hisilicon Hi3620 (Flattened Device Tree)")
5062306a36Sopenharmony_ci	.map_io		= hi3620_map_io,
5162306a36Sopenharmony_ci	.dt_compat	= hi3xxx_compat,
5262306a36Sopenharmony_ciMACHINE_END
53