Software APIs
epmp_init_test.c
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #include <stdbool.h>
6 #include <stdint.h>
7 
11 #include "sw/device/lib/testing/lc_ctrl_testutils.h"
12 #include "sw/device/lib/testing/test_framework/check.h"
14 #include "sw/device/lib/testing/test_framework/status.h"
15 #include "sw/device/silicon_creator/lib/epmp_defs.h"
16 
18 
19 OTTF_DEFINE_TEST_CONFIG();
20 
21 bool test_main(void) {
22  static_assert(EXPECT_DEBUG == 0 || EXPECT_DEBUG == 1,
23  "EXPECT_DEBUG must be `0` or `1`.");
24 
25  dif_lc_ctrl_t lc_ctrl;
26  mmio_region_t lc_reg =
28  CHECK_DIF_OK(dif_lc_ctrl_init(lc_reg, &lc_ctrl));
29  bool debug_enabled = false;
30  CHECK_STATUS_OK(
31  lc_ctrl_testutils_debug_func_enabled(&lc_ctrl, &debug_enabled));
32  LOG_INFO("debug_enabled: %d", debug_enabled);
33 
34  if (debug_enabled != EXPECT_DEBUG) {
35  LOG_ERROR("Expected debug_enabled=%d", EXPECT_DEBUG);
36  return false;
37  }
38 
39  uint32_t pmpaddr13;
40  CSR_READ(CSR_REG_PMPADDR13, &pmpaddr13);
41  uint32_t pmpcfg3;
42  CSR_READ(CSR_REG_PMPCFG3, &pmpcfg3);
43  uint8_t pmp13cfg = (pmpcfg3 >> 8) & 0xff;
44  LOG_INFO("pmpaddr13=0x%08x, pmpcfg3=0x%08x, pmp13cfg=0x%02x", pmpaddr13,
45  pmpcfg3, pmp13cfg);
46 
47  const uint32_t kPmpEncodedDebugRomRange =
50  if (pmpaddr13 != kPmpEncodedDebugRomRange) {
51  LOG_ERROR("Expected pmpaddr13=0x%08x", kPmpEncodedDebugRomRange);
52  return false;
53  }
54 
55  const uint8_t kExpectedPmp13cfg =
56  debug_enabled
57  ? EPMP_CFG_L | EPMP_CFG_A_NAPOT | EPMP_CFG_X | EPMP_CFG_W | EPMP_CFG_R
58  : EPMP_CFG_L | EPMP_CFG_A_NAPOT;
59  if (pmp13cfg != kExpectedPmp13cfg) {
60  LOG_ERROR("Expected pmp13cfg=0x%02x", kExpectedPmp13cfg);
61  return false;
62  }
63 
64  return true;
65 }