1 /* 2 * (C) Copyright 2017 3 * Vikas Manocha, ST Micoelectronics, vikas.manocha@st.com. 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8 enum region_number { 9 REGION_0 = 0, 10 REGION_1, 11 REGION_2, 12 REGION_3, 13 REGION_4, 14 REGION_5, 15 REGION_6, 16 REGION_7, 17 }; 18 19 enum ap { 20 NO_ACCESS = 0, 21 PRIV_RW_USR_NO, 22 PRIV_RW_USR_RO, 23 PRIV_RW_USR_RW, 24 UNPREDICTABLE, 25 PRIV_RO_USR_NO, 26 PRIV_RO_USR_RO, 27 }; 28 29 enum mr_attr { 30 STRONG_ORDER = 0, 31 SHARED_WRITE_BUFFERED, 32 O_I_WT_NO_WR_ALLOC, 33 O_I_WB_NO_WR_ALLOC, 34 O_I_NON_CACHEABLE, 35 O_I_WB_RD_WR_ALLOC, 36 DEVICE_NON_SHARED, 37 }; 38 enum size { 39 REGION_8MB = 22, 40 REGION_16MB, 41 REGION_32MB, 42 REGION_64MB, 43 REGION_128MB, 44 REGION_256MB, 45 REGION_512MB, 46 REGION_1GB, 47 REGION_2GB, 48 REGION_4GB, 49 }; 50 51 enum xn { 52 XN_DIS = 0, 53 XN_EN, 54 }; 55 56 struct mpu_region_config { 57 uint32_t start_addr; 58 enum region_number region_no; 59 enum xn xn; 60 enum ap ap; 61 enum mr_attr mr_attr; 62 enum size reg_size; 63 }; 64 65 void disable_mpu(void); 66 void enable_mpu(void); 67 void mpu_config(struct mpu_region_config *reg_config); 68