^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * linux/arch/arm/mach-mmp/common.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Code common to PXA168 processor lines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <asm/page.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <asm/mach/map.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <asm/system_misc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include "addr-map.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/soc/mmp/cputype.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include "common.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define MMP_CHIPID CIU_REG(0x00)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) unsigned int mmp_chip_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) EXPORT_SYMBOL(mmp_chip_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) static struct map_desc standard_io_desc[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) .pfn = __phys_to_pfn(APB_PHYS_BASE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) .virtual = (unsigned long)APB_VIRT_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) .length = APB_PHYS_SIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) .type = MT_DEVICE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) .pfn = __phys_to_pfn(AXI_PHYS_BASE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) .virtual = (unsigned long)AXI_VIRT_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) .length = AXI_PHYS_SIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) .type = MT_DEVICE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) static struct map_desc mmp2_io_desc[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) .pfn = __phys_to_pfn(PGU_PHYS_BASE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) .virtual = (unsigned long)PGU_VIRT_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) .length = PGU_PHYS_SIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) .type = MT_DEVICE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) void __init mmp_map_io(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /* this is early, initialize mmp_chip_id here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) mmp_chip_id = __raw_readl(MMP_CHIPID);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) void __init mmp2_map_io(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) mmp_map_io();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) iotable_init(mmp2_io_desc, ARRAY_SIZE(mmp2_io_desc));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) void mmp_restart(enum reboot_mode mode, const char *cmd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) soft_restart(0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) }