Software APIs
ibex.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 "sw/device/lib/base/ibex.h"
6 
7 #include "dt/dt_rv_core_ibex.h"
10 #include "sw/device/lib/base/csr.h"
11 #include "sw/device/lib/base/status.h"
13 
14 #include "rv_core_ibex_regs.h"
15 
16 static_assert(kDtRvCoreIbexCount == 1,
17  "this code requires exactly one rv_core_ibex");
18 const dt_rv_core_ibex_t kRvCoreIbexDt = kDtRvCoreIbexFirst;
19 
20 static inline uint32_t rv_core_ibex_base(void) {
21  return dt_rv_core_ibex_primary_reg_block(kRvCoreIbexDt);
22 }
23 
24 void ibex_wait_rnd_valid(void) {
25  while (true) {
26  uint32_t reg = ibex_rnd_status_read();
27  if (bitfield_bit32_read(reg, RV_CORE_IBEX_RND_STATUS_RND_DATA_VALID_BIT)) {
28  return;
29  }
30  }
31 }
32 
33 uint32_t ibex_rnd_status_read(void) {
34  return abs_mmio_read32(rv_core_ibex_base() +
35  RV_CORE_IBEX_RND_STATUS_REG_OFFSET);
36 }
37 
38 uint32_t ibex_rnd_data_read(void) {
39  ibex_wait_rnd_valid();
40  return abs_mmio_read32(rv_core_ibex_base() +
41  RV_CORE_IBEX_RND_DATA_REG_OFFSET);
42 }