Software APIs
rnd.h
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#ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_DRIVERS_RND_H_
6#define OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_DRIVERS_RND_H_
7
9#include "sw/device/silicon_creator/lib/drivers/lifecycle.h"
10#include "sw/device/silicon_creator/lib/error.h"
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16/**
17 * Compare the CRC32 of the configuration registers with the value in OTP.
18 *
19 * This function does not check the CRC32 in TEST_UNLOCKED* life cycle states to
20 * allow a test program to configure the entropy src before transitioning to
21 * other life cycle states.
22 *
23 * @param lc_state Life cycle state of the device.
24 * @return result of the operation.
25 */
27rom_error_t rnd_health_config_check(lifecycle_state_t lc_state);
28
29/**
30 * Returns a random word from the RISC-V Ibex core wrapper.
31 *
32 * Requires the CREATOR_SW_CFG_RNG_EN OTP value set to `kHardenedBoolTrue`
33 * in order to enable the use of entropy, otherwise it only returns the current
34 * value of the MCYCLE CSR register.
35 *
36 * @returns MCYCLE CSR + entropy value.
37 */
39uint32_t rnd_uint32(void);
40
41#ifdef __cplusplus
42}
43#endif
44
45#endif // OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_DRIVERS_RND_H_