4#include "sw/device/lib/testing/entropy_src_testutils.h"
6#include "sw/device/lib/base/crc32.h"
9#include "sw/device/lib/testing/test_framework/check.h"
11#include "hw/top/entropy_src_regs.h"
13#define MODULE_ID MAKE_MODULE_ID('e', 'n', 's')
15status_t entropy_src_testutils_fw_override_enable(
17 bool route_to_firmware,
bool bypass_conditioner) {
19 .entropy_insert_enable =
true,
20 .buffer_threshold = buffer_threshold,
22 TRY(dif_entropy_src_fw_override_configure(entropy_src, fw_override_config,
29 .route_to_firmware = route_to_firmware,
30 .bypass_conditioner = bypass_conditioner,
32 .health_test_threshold_scope =
false,
33 .health_test_window_size = 0x0200,
40status_t entropy_src_testutils_wait_for_state(
45 TRY(dif_entropy_src_get_main_fsm_state(entropy_src, &cur_state));
46 }
while (cur_state != state);
50status_t entropy_src_testutils_drain_observe_fifo(
55 const size_t kDrainCount = 32;
61 TRY(dif_entropy_src_observe_fifo_nonblocking_read(entropy_src, NULL, &len));
62 }
while (len == kDrainCount);
67status_t entropy_src_testutils_disable_health_tests(
74 for (
size_t i = 0; i <
ARRAYSIZE(kHealthTest); i++) {
75 TRY(dif_entropy_src_health_test_configure(
78 .high_threshold = 0xffff,
79 .low_threshold = 0}));
91 mmio_region_read32(entropy_src->
base_addr,
92 ENTROPY_SRC_REPCNT_THRESHOLD_REG_OFFSET));
94 mmio_region_read32(entropy_src->
base_addr,
95 ENTROPY_SRC_REPCNTS_THRESHOLD_REG_OFFSET));
97 mmio_region_read32(entropy_src->
base_addr,
98 ENTROPY_SRC_ADAPTP_HI_THRESHOLD_REG_OFFSET));
100 mmio_region_read32(entropy_src->
base_addr,
101 ENTROPY_SRC_ADAPTP_LO_THRESHOLD_REG_OFFSET));
103 mmio_region_read32(entropy_src->
base_addr,
104 ENTROPY_SRC_BUCKET_THRESHOLD_REG_OFFSET));
106 mmio_region_read32(entropy_src->
base_addr,
107 ENTROPY_SRC_MARKOV_HI_THRESHOLD_REG_OFFSET));
109 mmio_region_read32(entropy_src->
base_addr,
110 ENTROPY_SRC_MARKOV_LO_THRESHOLD_REG_OFFSET));
112 mmio_region_read32(entropy_src->
base_addr,
113 ENTROPY_SRC_EXTHT_HI_THRESHOLD_REG_OFFSET));
115 mmio_region_read32(entropy_src->
base_addr,
116 ENTROPY_SRC_EXTHT_LO_THRESHOLD_REG_OFFSET));
119 crc32_add32(&ctx, mmio_region_read32(entropy_src->
base_addr,
120 ENTROPY_SRC_ALERT_THRESHOLD_REG_OFFSET));
122 return crc32_finish(&ctx);