ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_mpu.h
Go to the documentation of this file.
1
18
19#pragma once
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#include <stddef.h>
26#include <stdint.h>
27
28#include "ra8_err.h"
29
46
58
75
82typedef enum : uint32_t {
85
95typedef enum : uint8_t {
98
113typedef enum : uint32_t {
114 k_ra8_mpu_boot_mair0 = 0x000444FFUL,
115 k_ra8_mpu_boot_mair1 = 0x00000000UL,
117
139
150typedef struct {
152 uint8_t region_count;
153 uint32_t mair0;
154 uint32_t mair1;
156 bool hfnmiena;
158
186[[nodiscard]] ra8_err_t ra8_mpu_configure(const ra8_mpu_cfg_t* cfg);
187
200[[nodiscard]] ra8_err_t ra8_mpu_enable(void);
201
214[[nodiscard]] ra8_err_t ra8_mpu_disable(void);
215
236[[nodiscard]] ra8_err_t ra8_mpu_set_region(uint8_t region, const ra8_mpu_region_t* region_cfg);
237
279[[nodiscard]] ra8_err_t ra8_mpu_apply_boot_map(void);
280
305const ra8_mpu_region_t* ra8_mpu_boot_map(uint8_t* out_count);
306
327[[nodiscard]] bool ra8_mpu_is_enabled(void);
328
329#ifdef __cplusplus
330}
331#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
const ra8_mpu_region_t * ra8_mpu_boot_map(uint8_t *out_count)
Return the canonical boot memory-attribute map region table.
Definition ra8_mpu.c:408
ra8_mpu_perm_t
Per-world (priv / unpriv) access permission for an MPU region.
Definition ra8_mpu.h:41
@ k_ra8_mpu_perm_none
No access at this privilege level.
Definition ra8_mpu.h:42
@ k_ra8_mpu_perm_rw
Read-write at this privilege level.
Definition ra8_mpu.h:44
@ k_ra8_mpu_perm_ro
Read-only at this privilege level.
Definition ra8_mpu.h:43
ra8_mpu_boot_layout_t
Fixed geometry of the canonical boot memory-attribute map.
Definition ra8_mpu.h:95
@ k_ra8_mpu_boot_region_count
Regions in the canonical boot map.
Definition ra8_mpu.h:96
ra8_err_t ra8_mpu_apply_boot_map(void)
Install the canonical 5-region boot memory-attribute map and enable the MPU.
Definition ra8_mpu.c:417
ra8_err_t ra8_mpu_configure(const ra8_mpu_cfg_t *cfg)
Program every MPU region from a static configuration.
Definition ra8_mpu.c:206
ra8_mpu_size_limits_t
Architectural size limits for an MPU region.
Definition ra8_mpu.h:82
@ k_ra8_mpu_min_region_size
Minimum power-of-two size in bytes.
Definition ra8_mpu.h:83
ra8_mpu_attr_idx_t
Index into MAIR0/MAIR1 for the region's memory-attribute set.
Definition ra8_mpu.h:65
@ k_ra8_mpu_attr_idx_5
MAIR1 byte 1.
Definition ra8_mpu.h:71
@ k_ra8_mpu_attr_idx_6
MAIR1 byte 2.
Definition ra8_mpu.h:72
@ k_ra8_mpu_attr_idx_1
MAIR0 byte 1.
Definition ra8_mpu.h:67
@ k_ra8_mpu_attr_idx_3
MAIR0 byte 3.
Definition ra8_mpu.h:69
@ k_ra8_mpu_attr_idx_0
MAIR0 byte 0.
Definition ra8_mpu.h:66
@ k_ra8_mpu_attr_idx_2
MAIR0 byte 2.
Definition ra8_mpu.h:68
@ k_ra8_mpu_attr_idx_4
MAIR1 byte 0.
Definition ra8_mpu.h:70
@ k_ra8_mpu_attr_idx_7
MAIR1 byte 3.
Definition ra8_mpu.h:73
ra8_err_t ra8_mpu_enable(void)
Set MPU_CTRL.ENABLE.
Definition ra8_mpu.c:243
ra8_err_t ra8_mpu_disable(void)
Clear MPU_CTRL.ENABLE.
Definition ra8_mpu.c:251
ra8_err_t ra8_mpu_set_region(uint8_t region, const ra8_mpu_region_t *region_cfg)
Program a single region without disabling the MPU.
Definition ra8_mpu.c:259
ra8_mpu_boot_mair_t
MAIR0/MAIR1 attribute-indirection words for the canonical boot map.
Definition ra8_mpu.h:113
@ k_ra8_mpu_boot_mair0
Boot MAIR0: WB/WA, non-cacheable, Device.
Definition ra8_mpu.h:114
@ k_ra8_mpu_boot_mair1
Boot MAIR1: unused (no AttrIdx >= 4).
Definition ra8_mpu.h:115
bool ra8_mpu_is_enabled(void)
Report whether the core MPU is currently enabled.
Definition ra8_mpu.c:450
ra8_mpu_share_t
Shareability domain for an MPU region (Armv8-M SH[1:0]).
Definition ra8_mpu.h:53
@ k_ra8_mpu_share_non
Non-shareable.
Definition ra8_mpu.h:54
@ k_ra8_mpu_share_inner
Inner shareable.
Definition ra8_mpu.h:56
@ k_ra8_mpu_share_outer
Outer shareable.
Definition ra8_mpu.h:55
Whole-MPU static configuration block.
Definition ra8_mpu.h:150
uint8_t region_count
Entries in regions.
Definition ra8_mpu.h:152
bool privdefena
MPU_CTRL.PRIVDEFENA = 1.
Definition ra8_mpu.h:155
uint32_t mair1
Verbatim MPU_MAIR1 value.
Definition ra8_mpu.h:154
bool hfnmiena
MPU_CTRL.HFNMIENA = 1.
Definition ra8_mpu.h:156
uint32_t mair0
Verbatim MPU_MAIR0 value.
Definition ra8_mpu.h:153
const ra8_mpu_region_t * regions
Region descriptor array.
Definition ra8_mpu.h:151
Static descriptor for one Armv8-M MPU region.
Definition ra8_mpu.h:130
ra8_mpu_perm_t priv
Privileged-mode permission.
Definition ra8_mpu.h:133
bool executable
If true, instruction fetch allowed.
Definition ra8_mpu.h:135
uintptr_t base
Region base address.
Definition ra8_mpu.h:131
uint32_t size
Region size in bytes (power of two).
Definition ra8_mpu.h:132
ra8_mpu_attr_idx_t attr_idx
MAIR slot index.
Definition ra8_mpu.h:137
ra8_mpu_perm_t unpriv
Unprivileged-mode permission.
Definition ra8_mpu.h:134
ra8_mpu_share_t shareable
SH[1:0] field.
Definition ra8_mpu.h:136