RTEMS 6.1-rc1
|
This group provides support functions to manage an Arm PMSAv8-32 (Protected Memory System Architecture) based Memory Protection Unit (MPU). More...
Files | |
file | aarch32-psma-init-default.c |
This source file contains the implementation of _AArch32_PMSA_Initialize_default(). | |
file | aarch32-psma-init.c |
This source file contains the implementation of _AArch32_PMSA_Initialize(). | |
file | aarch32-pmsa.h |
This header file provides the API to manage an Arm PMSAv8-32 based Memory Protection Unit (MPU). | |
Data Structures | |
struct | AArch32_PMSA_Section |
The section definition is used to initialize the Memory Protection Unit (MPU). More... | |
struct | AArch32_PMSA_Region |
The region definition is used to configure the Memory Protection Unit (MPU). More... | |
Macros | |
#define | AARCH32_PMSA_MIN_REGION_ALIGN 64 |
#define | AARCH32_PMSA_ATTR_EN 0x1U |
#define | AARCH32_PMSA_ATTR_IDX_SHIFT 1 |
#define | AARCH32_PMSA_ATTR_IDX_MASK 0xeU |
#define | AARCH32_PMSA_ATTR_IDX(_idx) ( ( _idx ) << AARCH32_PMSA_ATTR_IDX_SHIFT ) |
#define | AARCH32_PMSA_ATTR_XN 0x40U |
#define | AARCH32_PMSA_ATTR_AP_SHIFT 7 |
#define | AARCH32_PMSA_ATTR_AP_MASK 0x18U |
#define | AARCH32_PMSA_ATTR_AP(_ap) ( ( _ap ) << AARCH32_PMSA_ATTR_AP_SHIFT ) |
#define | AARCH32_PMSA_ATTR_AP_EL1_RW_EL0_NO 0x0U |
#define | AARCH32_PMSA_ATTR_AP_EL1_RW_EL0_RW 0x1U |
#define | AARCH32_PMSA_ATTR_AP_EL1_RO_EL0_NO 0x2U |
#define | AARCH32_PMSA_ATTR_AP_EL1_RO_EL0_RO 0x3U |
#define | AARCH32_PMSA_ATTR_SH_SHIFT 9 |
#define | AARCH32_PMSA_ATTR_SH_MASK 0x600U |
#define | AARCH32_PMSA_ATTR_SH(_sh) ( ( _sh ) << AARCH32_PMSA_ATTR_SH_SHIFT ) |
#define | AARCH32_PMSA_ATTR_SH_NO 0x0U |
#define | AARCH32_PMSA_ATTR_SH_RES 0x1U |
#define | AARCH32_PMSA_ATTR_SH_OUTER 0x2U |
#define | AARCH32_PMSA_ATTR_SH_INNER 0x3U |
#define | AARCH32_PMSA_MEM_DEVICE_NG_NR_NE 0x00U |
#define | AARCH32_PMSA_MEM_DEVICE_NG_NR_E 0x04U |
#define | AARCH32_PMSA_MEM_DEVICE_NG_R_E 0x08U |
#define | AARCH32_PMSA_MEM_DEVICE_G_R_E 0x0cU |
#define | AARCH32_PMSA_MEM_OUTER_WTT 0x00U |
#define | AARCH32_PMSA_MEM_OUTER_NC 0x40U |
#define | AARCH32_PMSA_MEM_OUTER_WBT 0x40U |
#define | AARCH32_PMSA_MEM_OUTER_WTNT 0x80U |
#define | AARCH32_PMSA_MEM_OUTER_WBNT 0xc0U |
#define | AARCH32_PMSA_MEM_OUTER_RA 0x20U |
#define | AARCH32_PMSA_MEM_OUTER_WA 0x10U |
#define | AARCH32_PMSA_MEM_INNER_WTT 0x00U |
#define | AARCH32_PMSA_MEM_INNER_NC 0x04U |
#define | AARCH32_PMSA_MEM_INNER_WBT 0x04U |
#define | AARCH32_PMSA_MEM_INNER_WTNT 0x08U |
#define | AARCH32_PMSA_MEM_INNER_WBNT 0x0cU |
#define | AARCH32_PMSA_MEM_INNER_RA 0x02U |
#define | AARCH32_PMSA_MEM_INNER_WA 0x01U |
#define | AARCH32_PMSA_MEM_ATTR(_ma0, _ma1, _ma2, _ma3) ( ( _ma0 ) | ( ( _ma1 ) << 8 ) | ( ( _ma2 ) << 16 ) | ( ( _ma3 ) << 24 ) ) |
#define | AARCH32_PMSA_MEM_ATTR_DEFAULT_CACHED |
#define | AARCH32_PMSA_MEM_ATTR_DEFAULT_UNCACHED |
#define | AARCH32_PMSA_MEM_ATTR_DEFAULT_DEVICE AARCH32_PMSA_MEM_DEVICE_NG_NR_NE |
#define | AARCH32_PMSA_CODE_CACHED |
#define | AARCH32_PMSA_CODE_UNCACHED |
#define | AARCH32_PMSA_DATA_READ_ONLY_CACHED |
#define | AARCH32_PMSA_DATA_READ_ONLY_UNCACHED |
#define | AARCH32_PMSA_DATA_READ_WRITE_CACHED |
#define | AARCH32_PMSA_DATA_READ_WRITE_UNCACHED |
#define | AARCH32_PMSA_DATA_READ_WRITE_SHARED |
#define | AARCH32_PMSA_DEVICE |
#define | AARCH32_PMSA_DATA_READ_WRITE_DEFAULT AARCH32_PMSA_DATA_READ_WRITE_CACHED |
#define | AARCH32_PMSA_DEFAULT_SECTIONS |
The default section definitions shall be used by the BSP to define _AArch32_PMSA_Sections. More... | |
Functions | |
void | _AArch32_PMSA_Initialize (uint32_t memory_attributes_0, uint32_t memory_attributes_1, const AArch32_PMSA_Section *sections, size_t section_count) |
Initializes the Memory Protection Unit (MPU). More... | |
size_t | _AArch32_PMSA_Map_sections_to_regions (const AArch32_PMSA_Section *sections, size_t section_count, AArch32_PMSA_Region *regions, size_t region_max) |
Maps the section definitions to region definitions. More... | |
void | _AArch32_PMSA_Initialize_default (void) |
Initializes the Memory Protection Unit (MPU) using the section definitions with default memory attributes. More... | |
Variables | |
const AArch32_PMSA_Section | _AArch32_PMSA_Sections [] |
This array provides section definitions to initialize the memory protection unit (MPU). More... | |
const size_t | _AArch32_PMSA_Section_count |
This constant provides the count of elements in _AArch32_PMSA_Sections. | |
This group provides support functions to manage an Arm PMSAv8-32 (Protected Memory System Architecture) based Memory Protection Unit (MPU).
#define AARCH32_PMSA_CODE_CACHED |
#define AARCH32_PMSA_CODE_UNCACHED |
#define AARCH32_PMSA_DATA_READ_ONLY_CACHED |
#define AARCH32_PMSA_DATA_READ_ONLY_UNCACHED |
#define AARCH32_PMSA_DATA_READ_WRITE_CACHED |
#define AARCH32_PMSA_DATA_READ_WRITE_SHARED |
#define AARCH32_PMSA_DATA_READ_WRITE_UNCACHED |
#define AARCH32_PMSA_DEFAULT_SECTIONS |
The default section definitions shall be used by the BSP to define _AArch32_PMSA_Sections.
In addition to the default section definitions, the BSP should provide section definitions for the memory-mapped devices and other memory areas.
#define AARCH32_PMSA_DEVICE |
#define AARCH32_PMSA_MEM_ATTR_DEFAULT_CACHED |
#define AARCH32_PMSA_MEM_ATTR_DEFAULT_UNCACHED |
void _AArch32_PMSA_Initialize | ( | uint32_t | memory_attributes_0, |
uint32_t | memory_attributes_1, | ||
const AArch32_PMSA_Section * | sections, | ||
size_t | section_count | ||
) |
Initializes the Memory Protection Unit (MPU).
The section definitions are used to define the regions of the MPU. Sections are merged if possible to reduce the count of used regions. If too many regions are used, then the MPU is not enabled. Overlapping section definitions result in undefined system behaviour.
The function shall be called while the MPU is disabled.
memory_attributes_0 | are the memory attributes for MAIR0. |
memory_attributes_1 | are the memory attributes for MAIR1. |
sections | is the array with section definitions. |
section_count | is the count of section definitions. |
void _AArch32_PMSA_Initialize_default | ( | void | ) |
Initializes the Memory Protection Unit (MPU) using the section definitions with default memory attributes.
Calls _AArch32_PMSA_Initialize() using _AArch32_PMSA_Sections and _AArch32_PMSA_Section_count and the default memory attributes.
size_t _AArch32_PMSA_Map_sections_to_regions | ( | const AArch32_PMSA_Section * | sections, |
size_t | section_count, | ||
AArch32_PMSA_Region * | regions, | ||
size_t | region_max | ||
) |
Maps the section definitions to region definitions.
The section definitions are used to define the regions of the MPU. Sections are merged if possible to reduce the count of used regions. If too many regions are used, then zero is returned. Overlapping section definitions result in undefined system behaviour.
sections | is the array with section definitions to map to regions. |
section_count | is the count of section definitions. |
regions | is the array with usable region definitions. |
region_max | is the count of usable region definitions. |
|
extern |
This array provides section definitions to initialize the memory protection unit (MPU).
The BSP shall provide the section definitions with the help of AARCH32_PMSA_DEFAULT_SECTIONS. The section count is provided by _AArch32_PMSA_Section_count.