test_pmp.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "ctest.h"
  4. #include "nuclei_sdk_soc.h"
  5. #define PMPADDR(x) _AC(CSR_PMPADDR, x)
  6. #define PMPCFG(x) _AC(CSR_PMPCFG, x)
  7. #if defined(__PMP_PRESENT) && (__PMP_PRESENT == 1)
  8. static uint32_t memory_pmp1[4];
  9. CTEST(pmp, pmpreg)
  10. {
  11. CTEST_LOG("PMPCFG0 : 0x%lx", __get_PMPCFGx(0));
  12. CTEST_LOG("PMP0CFG - PMP3CFG: 0x%x 0x%x 0x%x 0x%x", \
  13. (uint32_t)__get_PMPxCFG(0), (uint32_t)__get_PMPxCFG(1),
  14. (uint32_t)__get_PMPxCFG(2), (uint32_t)__get_PMPxCFG(3));
  15. for (int i = 0; i < __PMP_ENTRY_NUM; i ++) {
  16. CTEST_LOG("%d PMPADDRx PMPxCFG 0x%x 0x%x", i, (uint32_t)__get_PMPADDRx(i), (uint32_t)__get_PMPxCFG(i));
  17. }
  18. ASSERT_EQUAL(__get_PMPADDRx(0), __RV_CSR_READ(PMPADDR(0)));
  19. ASSERT_EQUAL(__get_PMPADDRx(4), __RV_CSR_READ(PMPADDR(4)));
  20. #if __RISCV_XLEN == 32
  21. for (int i = 0; i < __PMP_ENTRY_NUM / 4; i ++) {
  22. CTEST_LOG("%d PMPCFGx 0x%lx", i, __get_PMPCFGx(i));
  23. }
  24. #elif __RISCV_XLEN == 64
  25. for (int i = 0; i < __PMP_ENTRY_NUM / 8; i ++) {
  26. CTEST_LOG("%d PMPCFGx 0x%lx", i, __get_PMPCFGx(i * 2));
  27. }
  28. #endif
  29. __set_PMPADDRx(0, (rv_csr_t)(&memory_pmp1[0]) >> 2);
  30. __set_PMPxCFG(0, PMP_A_NA4 | PMP_R | PMP_W);
  31. CTEST_LOG("PMPADDR0 PMP0CFG 0x%x 0x%x", (uint32_t)__get_PMPADDRx(0), (uint32_t)__get_PMPxCFG(0));
  32. __set_PMPADDRx(1, (rv_csr_t)(&memory_pmp1[4]) >> 2);
  33. __set_PMPxCFG(1, PMP_A_NA4 | PMP_R | PMP_W);
  34. CTEST_LOG("PMPADDR1 PMP1CFG 0x%x 0x%x", (uint32_t)__get_PMPADDRx(1), (uint32_t)__get_PMPxCFG(1));
  35. }
  36. CTEST(pmp, pmpset)
  37. {
  38. }
  39. #endif