1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright (C) 2019 4 * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com> 5 */ 6 7#include <common.h> 8#include <init.h> 9#include <asm/io.h> 10#include <asm/armv7_mpu.h> 11#include <asm/mach-imx/sys_proto.h> 12#include <linux/bitops.h> 13 14int arch_cpu_init(void) 15{ 16 int i; 17 18 struct mpu_region_config imxrt_region_config[] = { 19 { 0x00000000, REGION_0, XN_DIS, PRIV_RW_USR_RW, 20 STRONG_ORDER, REGION_4GB }, 21 { PHYS_SDRAM, REGION_1, XN_DIS, PRIV_RW_USR_RW, 22 O_I_WB_RD_WR_ALLOC, (ffs(PHYS_SDRAM_SIZE) - 2) }, 23 { DMAMEM_BASE, 24 REGION_2, XN_DIS, PRIV_RW_USR_RW, 25 STRONG_ORDER, (ffs(DMAMEM_SZ_ALL) - 2) }, 26 }; 27 28 /* 29 * Configure the memory protection unit (MPU) to allow full access to 30 * the whole 4GB address space. 31 */ 32 disable_mpu(); 33 for (i = 0; i < ARRAY_SIZE(imxrt_region_config); i++) 34 mpu_config(&imxrt_region_config[i]); 35 enable_mpu(); 36 37 return 0; 38} 39 40u32 get_cpu_rev(void) 41{ 42#if defined(CONFIG_IMXRT1020) 43 return MXC_CPU_IMXRT1020 << 12; 44#elif defined(CONFIG_IMXRT1050) 45 return MXC_CPU_IMXRT1050 << 12; 46#elif defined(CONFIG_IMXRT1170) 47 return MXC_CPU_IMXRT1170 << 12; 48#else 49#error This IMXRT SoC is not supported 50#endif 51} 52