blob: 83f823cf03f90033202ed7cb772b63b988673e4a [file] [log] [blame]
/*
* Copyright (c) 2017 Synopsys.
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef _ARC_MPU_H_
#define _ARC_MPU_H_
#define AUX_MPU_RDP_UE 0x008 /* allow user execution */
#define AUX_MPU_RDP_UW 0x010 /* allow user write */
#define AUX_MPU_RDP_UR 0x020 /* allow user read */
#define AUX_MPU_RDP_KE 0x040 /* only allow kernel execution */
#define AUX_MPU_RDP_KW 0x080 /* only allow kernel write */
#define AUX_MPU_RDP_KR 0x100 /* only allow kernel read */
#define AUX_MPU_RDP_S 0x8000 /* secure */
#define AUX_MPU_RDP_N 0x0000 /* normal */
/* Some helper defines for common regions */
#define REGION_RAM_ATTR \
(AUX_MPU_RDP_UW | AUX_MPU_RDP_UR | \
AUX_MPU_RDP_KW | AUX_MPU_RDP_KR)
#define REGION_FLASH_ATTR \
(AUX_MPU_RDP_UE | AUX_MPU_RDP_UR | \
AUX_MPU_RDP_KE | AUX_MPU_RDP_KR)
#define REGION_IO_ATTR \
(AUX_MPU_RDP_UW | AUX_MPU_RDP_UR | \
AUX_MPU_RDP_KW | AUX_MPU_RDP_KR)
#define REGION_ALL_ATTR \
(AUX_MPU_RDP_UW | AUX_MPU_RDP_UR | \
AUX_MPU_RDP_KW | AUX_MPU_RDP_KR | \
AUX_MPU_RDP_KE | AUX_MPU_RDP_UE)
#define REGION_32B 0x200
#define REGION_64B 0x201
#define REGION_128B 0x202
#define REGION_256B 0x203
#define REGION_512B 0x400
#define REGION_1K 0x401
#define REGION_2K 0x402
#define REGION_4K 0x403
#define REGION_8K 0x600
#define REGION_16K 0x601
#define REGION_32K 0x602
#define REGION_64K 0x603
#define REGION_128K 0x800
#define REGION_256K 0x801
#define REGION_512K 0x802
#define REGION_1M 0x803
#define REGION_2M 0xA00
#define REGION_4M 0xA01
#define REGION_8M 0xA02
#define REGION_16M 0xA03
#define REGION_32M 0xC00
#define REGION_64M 0xC01
#define REGION_128M 0xC02
#define REGION_256M 0xC03
#define REGION_512M 0xE00
#define REGION_1G 0xE01
#define REGION_2G 0xE02
#define REGION_4G 0xE03
/* Region definition data structure */
struct arc_mpu_region {
/* Region Name */
const char *name;
/* Region Base Address */
u32_t base;
u32_t size;
/* Region Attributes */
u32_t attr;
};
#define MPU_REGION_ENTRY(_name, _base, _size, _attr) \
{\
.name = _name, \
.base = _base, \
.size = _size, \
.attr = _attr, \
}
/* MPU configuration data structure */
struct arc_mpu_config {
/* Number of regions */
u32_t num_regions;
/* Regions */
struct arc_mpu_region *mpu_regions;
};
/* Reference to the MPU configuration */
extern struct arc_mpu_config mpu_config;
#endif /* _ARC_CORE_MPU_H_ */