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