5 #include "sw/device/silicon_creator/lib/epmp_state.h"
18 extern void epmp_state_configure_tor(uint32_t entry,
epmp_region_t region,
20 extern void epmp_state_configure_na4(uint32_t entry,
epmp_region_t region,
22 extern void epmp_state_configure_napot(uint32_t entry,
epmp_region_t region,
25 rom_error_t epmp_state_check(
void) {
28 #define CHECK_CSR(reg, value) \
31 CSR_READ(reg, &csr); \
32 checks += csr == (value); \
36 CHECK_CSR(CSR_REG_PMPADDR0, s->
pmpaddr[0]);
37 CHECK_CSR(CSR_REG_PMPADDR1, s->
pmpaddr[1]);
38 CHECK_CSR(CSR_REG_PMPADDR2, s->
pmpaddr[2]);
39 CHECK_CSR(CSR_REG_PMPADDR3, s->
pmpaddr[3]);
40 CHECK_CSR(CSR_REG_PMPADDR4, s->
pmpaddr[4]);
41 CHECK_CSR(CSR_REG_PMPADDR5, s->
pmpaddr[5]);
42 CHECK_CSR(CSR_REG_PMPADDR6, s->
pmpaddr[6]);
43 CHECK_CSR(CSR_REG_PMPADDR7, s->
pmpaddr[7]);
44 CHECK_CSR(CSR_REG_PMPADDR8, s->
pmpaddr[8]);
45 CHECK_CSR(CSR_REG_PMPADDR9, s->
pmpaddr[9]);
46 CHECK_CSR(CSR_REG_PMPADDR10, s->
pmpaddr[10]);
47 CHECK_CSR(CSR_REG_PMPADDR11, s->
pmpaddr[11]);
48 CHECK_CSR(CSR_REG_PMPADDR12, s->
pmpaddr[12]);
49 CHECK_CSR(CSR_REG_PMPADDR13, s->
pmpaddr[13]);
50 CHECK_CSR(CSR_REG_PMPADDR14, s->
pmpaddr[14]);
51 CHECK_CSR(CSR_REG_PMPADDR15, s->
pmpaddr[15]);
54 CHECK_CSR(CSR_REG_PMPCFG0, s->
pmpcfg[0]);
55 CHECK_CSR(CSR_REG_PMPCFG1, s->
pmpcfg[1]);
56 CHECK_CSR(CSR_REG_PMPCFG2, s->
pmpcfg[2]);
57 CHECK_CSR(CSR_REG_PMPCFG3, s->
pmpcfg[3]);
61 CHECK_CSR(CSR_REG_MSECCFG, s->
mseccfg);
62 CHECK_CSR(CSR_REG_MSECCFGH, 0);
66 enum { kTotalChecks = 22 };
68 rom_error_t error = kErrorOk ^ kTotalChecks;
69 if (launder32(checks) == kTotalChecks) {
75 return kErrorEpmpBadCheck;