1*f25ea7e3Skenny liang /* 2*f25ea7e3Skenny liang * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. 3*f25ea7e3Skenny liang * 4*f25ea7e3Skenny liang * SPDX-License-Identifier: BSD-3-Clause 5*f25ea7e3Skenny liang */ 6*f25ea7e3Skenny liang 7*f25ea7e3Skenny liang #ifndef __EMI_MPU_H 8*f25ea7e3Skenny liang #define __EMI_MPU_H 9*f25ea7e3Skenny liang 10*f25ea7e3Skenny liang #include <platform_def.h> 11*f25ea7e3Skenny liang 12*f25ea7e3Skenny liang #define EMI_MPUP (EMI_BASE + 0x01D8) 13*f25ea7e3Skenny liang #define EMI_MPUQ (EMI_BASE + 0x01E0) 14*f25ea7e3Skenny liang #define EMI_MPUR (EMI_BASE + 0x01E8) 15*f25ea7e3Skenny liang #define EMI_MPUS (EMI_BASE + 0x01F0) 16*f25ea7e3Skenny liang #define EMI_MPUT (EMI_BASE + 0x01F8) 17*f25ea7e3Skenny liang #define EMI_MPUY (EMI_BASE + 0x0220) 18*f25ea7e3Skenny liang #define EMI_MPU_CTRL (EMI_MPU_BASE + 0x0000) 19*f25ea7e3Skenny liang #define EMI_MPUD0_ST (EMI_BASE + 0x0160) 20*f25ea7e3Skenny liang #define EMI_MPUD1_ST (EMI_BASE + 0x0164) 21*f25ea7e3Skenny liang #define EMI_MPUD2_ST (EMI_BASE + 0x0168) 22*f25ea7e3Skenny liang #define EMI_MPUD3_ST (EMI_BASE + 0x016C) 23*f25ea7e3Skenny liang #define EMI_MPUD0_ST2 (EMI_BASE + 0x0200) 24*f25ea7e3Skenny liang #define EMI_MPUD1_ST2 (EMI_BASE + 0x0204) 25*f25ea7e3Skenny liang #define EMI_MPUD2_ST2 (EMI_BASE + 0x0208) 26*f25ea7e3Skenny liang #define EMI_MPUD3_ST2 (EMI_BASE + 0x020C) 27*f25ea7e3Skenny liang 28*f25ea7e3Skenny liang #define EMI_PHY_OFFSET (0x40000000UL) 29*f25ea7e3Skenny liang #define EIGHT_DOMAIN 30*f25ea7e3Skenny liang 31*f25ea7e3Skenny liang #define NO_PROTECTION (0) 32*f25ea7e3Skenny liang #define SEC_RW (1) 33*f25ea7e3Skenny liang #define SEC_RW_NSEC_R (2) 34*f25ea7e3Skenny liang #define SEC_RW_NSEC_W (3) 35*f25ea7e3Skenny liang #define SEC_R_NSEC_R (4) 36*f25ea7e3Skenny liang #define FORBIDDEN (5) 37*f25ea7e3Skenny liang #define SEC_R_NSEC_RW (6) 38*f25ea7e3Skenny liang 39*f25ea7e3Skenny liang #define SECURE_OS_MPU_REGION_ID (0) 40*f25ea7e3Skenny liang #define ATF_MPU_REGION_ID (1) 41*f25ea7e3Skenny liang 42*f25ea7e3Skenny liang #ifdef EIGHT_DOMAIN 43*f25ea7e3Skenny liang #define SET_ACCESS_PERMISSON(d7, d6, d5, d4, d3, d2, d1, d0) \ 44*f25ea7e3Skenny liang (((d7) << 21) | ((d6) << 18) | ((d5) << 15) | ((d4) << 12) \ 45*f25ea7e3Skenny liang | ((d3) << 9) | ((d2) << 6) | ((d1) << 3) | (d0)) 46*f25ea7e3Skenny liang #else 47*f25ea7e3Skenny liang #define SET_ACCESS_PERMISSON(d3, d2, d1, d0) \ 48*f25ea7e3Skenny liang (((d3) << 9) | ((d2) << 6) | ((d1) << 3) | (d0)) 49*f25ea7e3Skenny liang #endif 50*f25ea7e3Skenny liang 51*f25ea7e3Skenny liang //#define EMI_MPU_BASE (0x1020E000U) 52*f25ea7e3Skenny liang 53*f25ea7e3Skenny liang #define EMI_MPU_SA0 (EMI_MPU_BASE + 0x100) 54*f25ea7e3Skenny liang #define EMI_MPU_SA1 (EMI_MPU_BASE + 0x104) 55*f25ea7e3Skenny liang #define EMI_MPU_SA2 (EMI_MPU_BASE + 0x108) 56*f25ea7e3Skenny liang #define EMI_MPU_SA3 (EMI_MPU_BASE + 0x10C) 57*f25ea7e3Skenny liang #define EMI_MPU_SA4 (EMI_MPU_BASE + 0x110) 58*f25ea7e3Skenny liang #define EMI_MPU_SA5 (EMI_MPU_BASE + 0x114) 59*f25ea7e3Skenny liang #define EMI_MPU_SA6 (EMI_MPU_BASE + 0x118) 60*f25ea7e3Skenny liang #define EMI_MPU_SA7 (EMI_MPU_BASE + 0x11C) 61*f25ea7e3Skenny liang 62*f25ea7e3Skenny liang #define EMI_MPU_EA0 (EMI_MPU_BASE + 0x200) 63*f25ea7e3Skenny liang #define EMI_MPU_EA1 (EMI_MPU_BASE + 0x204) 64*f25ea7e3Skenny liang #define EMI_MPU_EA2 (EMI_MPU_BASE + 0x208) 65*f25ea7e3Skenny liang #define EMI_MPU_EA3 (EMI_MPU_BASE + 0x20C) 66*f25ea7e3Skenny liang #define EMI_MPU_EA4 (EMI_MPU_BASE + 0x210) 67*f25ea7e3Skenny liang #define EMI_MPU_EA5 (EMI_MPU_BASE + 0x214) 68*f25ea7e3Skenny liang #define EMI_MPU_EA6 (EMI_MPU_BASE + 0x218) 69*f25ea7e3Skenny liang #define EMI_MPU_EA7 (EMI_MPU_BASE + 0x21C) 70*f25ea7e3Skenny liang 71*f25ea7e3Skenny liang #define EMI_MPU_APC0 (EMI_MPU_BASE + 0x300) 72*f25ea7e3Skenny liang #define EMI_MPU_APC1 (EMI_MPU_BASE + 0x304) 73*f25ea7e3Skenny liang #define EMI_MPU_APC2 (EMI_MPU_BASE + 0x308) 74*f25ea7e3Skenny liang #define EMI_MPU_APC3 (EMI_MPU_BASE + 0x30C) 75*f25ea7e3Skenny liang #define EMI_MPU_APC4 (EMI_MPU_BASE + 0x310) 76*f25ea7e3Skenny liang #define EMI_MPU_APC5 (EMI_MPU_BASE + 0x314) 77*f25ea7e3Skenny liang #define EMI_MPU_APC6 (EMI_MPU_BASE + 0x318) 78*f25ea7e3Skenny liang #define EMI_MPU_APC7 (EMI_MPU_BASE + 0x31C) 79*f25ea7e3Skenny liang 80*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D0 (EMI_MPU_BASE + 0x800) 81*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D1 (EMI_MPU_BASE + 0x804) 82*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D2 (EMI_MPU_BASE + 0x808) 83*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D3 (EMI_MPU_BASE + 0x80C) 84*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D4 (EMI_MPU_BASE + 0x810) 85*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D5 (EMI_MPU_BASE + 0x814) 86*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D6 (EMI_MPU_BASE + 0x818) 87*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D7 (EMI_MPU_BASE + 0x81C) 88*f25ea7e3Skenny liang 89*f25ea7e3Skenny liang #define EMI_MPU_MASK_D0 (EMI_MPU_BASE + 0x900) 90*f25ea7e3Skenny liang #define EMI_MPU_MASK_D1 (EMI_MPU_BASE + 0x904) 91*f25ea7e3Skenny liang #define EMI_MPU_MASK_D2 (EMI_MPU_BASE + 0x908) 92*f25ea7e3Skenny liang #define EMI_MPU_MASK_D3 (EMI_MPU_BASE + 0x90C) 93*f25ea7e3Skenny liang #define EMI_MPU_MASK_D4 (EMI_MPU_BASE + 0x910) 94*f25ea7e3Skenny liang #define EMI_MPU_MASK_D5 (EMI_MPU_BASE + 0x914) 95*f25ea7e3Skenny liang #define EMI_MPU_MASK_D6 (EMI_MPU_BASE + 0x918) 96*f25ea7e3Skenny liang #define EMI_MPU_MASK_D7 (EMI_MPU_BASE + 0x91C) 97*f25ea7e3Skenny liang 98*f25ea7e3Skenny liang int emi_mpu_set_region_protection( 99*f25ea7e3Skenny liang unsigned long start, unsigned long end, 100*f25ea7e3Skenny liang int region, 101*f25ea7e3Skenny liang unsigned int access_permission); 102*f25ea7e3Skenny liang 103*f25ea7e3Skenny liang void dump_emi_mpu_regions(void); 104*f25ea7e3Skenny liang void emi_mpu_init(void); 105*f25ea7e3Skenny liang 106*f25ea7e3Skenny liang #endif /* __EMI_MPU_H */ 107