5 #include "sw/device/silicon_creator/rom_ext/imm_section/imm_section_epmp.h"
9 #include "sw/device/silicon_creator/lib/drivers/epmp.h"
10 #include "sw/device/silicon_creator/lib/drivers/lifecycle.h"
11 #include "sw/device/silicon_creator/lib/epmp_state.h"
12 #include "sw/device/silicon_creator/lib/error.h"
13 #include "sw/device/silicon_creator/lib/manifest.h"
18 extern char _rom_ext_immutable_start[];
19 extern char _rom_ext_immutable_end[];
20 extern char _text_end[];
21 extern char _stack_start[];
38 static const epmp_region_t kStackGuard = {.start = (uintptr_t)_stack_start,
39 .end = (uintptr_t)_stack_start + 4};
42 .start = (uintptr_t)_rom_ext_immutable_start,
43 .end = (uintptr_t)_text_end,
46 rom_error_t imm_section_epmp_reconfigure(
void) {
52 epmp_set_napot(14, kMmioRegion, kEpmpPermLockedReadWrite);
56 epmp_set_napot(11, kStackGuard, kEpmpPermLockedNoAccess);
64 epmp_set_napot(12, kRvDmRegion, kEpmpPermLockedReadWriteExecute);
69 epmp_set_napot(13, kFlashRegion, kEpmpPermLockedReadOnly);
72 uint32_t virtual_napot;
73 CSR_READ(CSR_REG_PMPADDR6, &virtual_napot);
76 epmp_set_napot(10, epmp_decode_napot(virtual_napot),
77 kEpmpPermLockedReadOnly);
85 epmp_set_tor(6, kImmTextRegion, kEpmpPermLockedReadExecute);
95 HARDENED_RETURN_IF_ERROR(epmp_state_check());
106 mutable_code_region.start = (uintptr_t)_rom_ext_immutable_end;
108 epmp_set_tor(8, mutable_code_region, kEpmpPermLockedReadExecute);
110 HARDENED_RETURN_IF_ERROR(epmp_state_check());