18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * linux/arch/arm/mach-mmp/common.c 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Code common to PXA168 processor lines 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/init.h> 98c2ecf20Sopenharmony_ci#include <linux/kernel.h> 108c2ecf20Sopenharmony_ci#include <linux/module.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <asm/page.h> 138c2ecf20Sopenharmony_ci#include <asm/mach/map.h> 148c2ecf20Sopenharmony_ci#include <asm/system_misc.h> 158c2ecf20Sopenharmony_ci#include "addr-map.h" 168c2ecf20Sopenharmony_ci#include <linux/soc/mmp/cputype.h> 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#include "common.h" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define MMP_CHIPID CIU_REG(0x00) 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ciunsigned int mmp_chip_id; 238c2ecf20Sopenharmony_ciEXPORT_SYMBOL(mmp_chip_id); 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistatic struct map_desc standard_io_desc[] __initdata = { 268c2ecf20Sopenharmony_ci { 278c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(APB_PHYS_BASE), 288c2ecf20Sopenharmony_ci .virtual = (unsigned long)APB_VIRT_BASE, 298c2ecf20Sopenharmony_ci .length = APB_PHYS_SIZE, 308c2ecf20Sopenharmony_ci .type = MT_DEVICE, 318c2ecf20Sopenharmony_ci }, { 328c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(AXI_PHYS_BASE), 338c2ecf20Sopenharmony_ci .virtual = (unsigned long)AXI_VIRT_BASE, 348c2ecf20Sopenharmony_ci .length = AXI_PHYS_SIZE, 358c2ecf20Sopenharmony_ci .type = MT_DEVICE, 368c2ecf20Sopenharmony_ci }, 378c2ecf20Sopenharmony_ci}; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistatic struct map_desc mmp2_io_desc[] __initdata = { 408c2ecf20Sopenharmony_ci { 418c2ecf20Sopenharmony_ci .pfn = __phys_to_pfn(PGU_PHYS_BASE), 428c2ecf20Sopenharmony_ci .virtual = (unsigned long)PGU_VIRT_BASE, 438c2ecf20Sopenharmony_ci .length = PGU_PHYS_SIZE, 448c2ecf20Sopenharmony_ci .type = MT_DEVICE, 458c2ecf20Sopenharmony_ci }, 468c2ecf20Sopenharmony_ci}; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_civoid __init mmp_map_io(void) 498c2ecf20Sopenharmony_ci{ 508c2ecf20Sopenharmony_ci iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc)); 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci /* this is early, initialize mmp_chip_id here */ 538c2ecf20Sopenharmony_ci mmp_chip_id = __raw_readl(MMP_CHIPID); 548c2ecf20Sopenharmony_ci} 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_civoid __init mmp2_map_io(void) 578c2ecf20Sopenharmony_ci{ 588c2ecf20Sopenharmony_ci mmp_map_io(); 598c2ecf20Sopenharmony_ci iotable_init(mmp2_io_desc, ARRAY_SIZE(mmp2_io_desc)); 608c2ecf20Sopenharmony_ci} 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_civoid mmp_restart(enum reboot_mode mode, const char *cmd) 638c2ecf20Sopenharmony_ci{ 648c2ecf20Sopenharmony_ci soft_restart(0); 658c2ecf20Sopenharmony_ci} 66