58#include "trustzone_init.h"
62#ifdef RA8_TRUSTZONE_ENABLE
69typedef enum : uintptr_t {
70 k_ra8_sau_ctrl_addr = 0xE000EDD0UL,
71 k_ra8_sau_type_addr = 0xE000EDD4UL,
72 k_ra8_sau_rnr_addr = 0xE000EDD8UL,
73 k_ra8_sau_rbar_addr = 0xE000EDDCUL,
74 k_ra8_sau_rlar_addr = 0xE000EDE0UL,
82typedef enum : uint32_t {
83 k_ra8_sau_ctrl_enable = 1UL << 0,
84 k_ra8_sau_ctrl_allns = 1UL << 1,
85} ra8_tz_sau_ctrl_bit_t;
91typedef enum : uint32_t {
92 k_ra8_sau_rlar_enable = 1UL << 0,
93 k_ra8_sau_rlar_nsc = 1UL << 1,
94} ra8_tz_sau_rlar_bit_t;
104typedef enum : uint32_t {
105 k_ra8_tz_ns_mram_base = 0x02080000UL,
106 k_ra8_tz_ns_mram_limit = 0x020FFFE0UL,
107 k_ra8_tz_ns_sram_base = 0x22100000UL,
108 k_ra8_tz_ns_sram_limit = 0x221FFFE0UL,
109 k_ra8_tz_ns_sdram_base = 0x6A000000UL,
110 k_ra8_tz_ns_sdram_limit = 0x6BFFFFE0UL,
111 k_ra8_tz_nsc_veneer_base = 0x10000000UL,
112 k_ra8_tz_nsc_veneer_lim = 0x100FFFE0UL,
122 __asm__
volatile(
"dsb 0xF" :::
"memory");
127 __asm__
volatile(
"isb 0xF" :::
"memory");
132 *(
volatile uint32_t*)addr = value;
137 return *(
volatile uint32_t*)addr;
152 uint32_t rlar = limit | (uint32_t)k_ra8_sau_rlar_enable;
154 rlar |= (uint32_t)k_ra8_sau_rlar_nsc;
168#ifdef RA8_TRUSTZONE_ENABLE
173 if ((sau_type & 0xFFU) < 4U) {
182 (uint32_t)k_ra8_tz_ns_mram_base,
183 (uint32_t)k_ra8_tz_ns_mram_limit,
188 (uint32_t)k_ra8_tz_ns_sram_base,
189 (uint32_t)k_ra8_tz_ns_sram_limit,
194 (uint32_t)k_ra8_tz_ns_sdram_base,
195 (uint32_t)k_ra8_tz_ns_sdram_limit,
201 (uint32_t)k_ra8_tz_nsc_veneer_base,
202 (uint32_t)k_ra8_tz_nsc_veneer_lim,
@ k_ra8_sfsr_addr
SecureFault Status Register.
void ra8_trustzone_init(void)
Programme + enable the SAU per the partition.
static void internal_dsb(void)
Emit a Data Synchronisation Barrier (no-op on host).
static void internal_write32(uintptr_t addr, uint32_t value)
Write a 32-bit MMIO register (or capture on host).
static uint32_t internal_read32(uintptr_t addr)
Read a 32-bit MMIO register (or canned host value).
static void internal_sau_set_region(uint8_t region, uint32_t base, uint32_t limit, bool is_nsc)
Programme one SAU region via RNR/RBAR/RLAR.
static void internal_isb(void)
Emit an Instruction Synchronisation Barrier (no-op on host).