5 #include "sw/device/lib/dif/dif_csrng_shared.h"
7 #include "sw/device/lib/base/multibits.h"
9 #include "csrng_regs.h"
21 uint32_t csrng_cmd_header_build(
23 uint32_t cmd_len, uint32_t generate_len) {
27 reg, kAppCmdFieldFlag0,
30 : kMultiBitBool4False));
36 csrng_app_cmd_type_t cmd_type,
38 ptrdiff_t cmd_reg_offset;
39 ptrdiff_t sts_reg_offset;
40 uint32_t rdy_bit_offset;
41 uint32_t reg_rdy_bit_offset;
46 case kCsrngAppCmdTypeCsrng:
47 cmd_reg_offset = CSRNG_CMD_REQ_REG_OFFSET;
48 sts_reg_offset = CSRNG_SW_CMD_STS_REG_OFFSET;
49 rdy_bit_offset = CSRNG_SW_CMD_STS_CMD_RDY_BIT;
50 reg_rdy_bit_offset = CSRNG_SW_CMD_STS_CMD_RDY_BIT;
52 case kCsrngAppCmdTypeEdnSw:
53 cmd_reg_offset = EDN_SW_CMD_REQ_REG_OFFSET;
54 sts_reg_offset = EDN_SW_CMD_STS_REG_OFFSET;
55 rdy_bit_offset = EDN_SW_CMD_STS_CMD_RDY_BIT;
56 reg_rdy_bit_offset = EDN_SW_CMD_STS_CMD_REG_RDY_BIT;
58 case kCsrngAppCmdTypeEdnGen:
59 cmd_reg_offset = EDN_GENERATE_CMD_REG_OFFSET;
61 case kCsrngAppCmdTypeEdnRes:
62 cmd_reg_offset = EDN_RESEED_CMD_REG_OFFSET;
77 if (cmd_len & ~kAppCmdFieldCmdLen.
mask) {
85 kMaxGenerateSizeIn128BitBlocks = 0x800,
91 if ((cmd_type == kCsrngAppCmdTypeCsrng) ||
92 (cmd_type == kCsrngAppCmdTypeEdnSw)) {
95 reg = mmio_region_read32(base_addr, sts_reg_offset);
100 mmio_region_write32(base_addr, cmd_reg_offset,
103 for (
size_t i = 0; i < cmd_len; ++i) {
107 if (cmd_type == kCsrngAppCmdTypeCsrng ||
108 cmd_type == kCsrngAppCmdTypeEdnSw) {
110 reg = mmio_region_read32(base_addr, sts_reg_offset);
114 mmio_region_write32(base_addr, cmd_reg_offset,