[entropy_src/rtl] Removed LFSR mode, added recov_alert bits
The configuration enable fields now do not support LFSR mode.
Also, all enable fields are checked for valid values (5 or A).
Signed-off-by: Mark Branstad <mark.branstad@wdc.com>
diff --git a/sw/device/lib/dif/dif_entropy_src.c b/sw/device/lib/dif/dif_entropy_src.c
index 4acca4e..3f94380 100644
--- a/sw/device/lib/dif/dif_entropy_src.c
+++ b/sw/device/lib/dif/dif_entropy_src.c
@@ -37,11 +37,6 @@
reg = bitfield_field32_write(reg, ENTROPY_SRC_CONF_RNG_BIT_SEL_FIELD,
rng_bit_sel);
- // Configure lfsr
- uint32_t lfsr_sel = config->mode == kDifEntropySrcModeLfsr ? 0xa : 0x5;
- reg =
- bitfield_field32_write(reg, ENTROPY_SRC_CONF_LFSR_ENABLE_FIELD, lfsr_sel);
-
// Enable configuration
uint32_t enable_val = config->mode != kDifEntropySrcModeDisabled ? 0xa : 0x5;
reg = bitfield_field32_write(reg, ENTROPY_SRC_CONF_ENABLE_FIELD, enable_val);
@@ -63,16 +58,6 @@
return kDifBadArg;
}
- if (config.lfsr_seed > ENTROPY_SRC_SEED_LFSR_SEED_MASK) {
- return kDifBadArg;
- }
-
- uint32_t seed = config.mode == kDifEntropySrcModeLfsr ? config.lfsr_seed : 0;
- mmio_region_write32(entropy_src->base_addr, ENTROPY_SRC_SEED_REG_OFFSET,
- seed);
-
- mmio_region_write32(entropy_src->base_addr, ENTROPY_SRC_RATE_REG_OFFSET,
- (uint32_t)config.sample_rate);
// Conditioning bypass is hardcoded to enabled. Bypass is not intended as
// a regular mode of operation.
@@ -88,7 +73,7 @@
// TODO: Add support for FIFO mode.
mmio_region_write32(entropy_src->base_addr,
- ENTROPY_SRC_FW_OV_CONTROL_REG_OFFSET, 0);
+ ENTROPY_SRC_FW_OV_CONTROL_REG_OFFSET, 0x55);
set_config_register(entropy_src, &config);
return kDifOk;
diff --git a/sw/device/lib/dif/dif_entropy_src.h b/sw/device/lib/dif/dif_entropy_src.h
index 517eaca..edf140c 100644
--- a/sw/device/lib/dif/dif_entropy_src.h
+++ b/sw/device/lib/dif/dif_entropy_src.h
@@ -101,16 +101,6 @@
*/
kDifEntropySrcModePtrng = 1,
- /**
- * The Linear Feedback Shift Register (LFSR) mode.
- *
- * This mode is digital, and as such is only pseudo-random and intended
- * for test purposes only.
- *
- * In this mode, the `dif_entropy_src_config.lfsr_seed` value is used to
- * initialize the internal state of the LFSR.
- */
- kDifEntropySrcModeLfsr = 2,
} dif_entropy_src_mode_t;
/**
@@ -241,17 +231,6 @@
* Configuration parameters for health tests.
*/
dif_entropy_src_test_config_t test_config;
-
- /**
- * The rate at which the entropy bits are generated, in clock cycles.
- */
- uint16_t sample_rate;
-
- /**
- * Seed used to load into the LFSR initial state. The maximum allowable value
- * is 15. See `dif_entropy_src_mode.kDifEntropySrcModeLfsr` for more details.
- */
- uint16_t lfsr_seed;
} dif_entropy_src_config_t;
/**
diff --git a/sw/device/lib/dif/dif_entropy_src_unittest.cc b/sw/device/lib/dif/dif_entropy_src_unittest.cc
index d474973..ac56336 100644
--- a/sw/device/lib/dif/dif_entropy_src_unittest.cc
+++ b/sw/device/lib/dif/dif_entropy_src_unittest.cc
@@ -33,15 +33,13 @@
class ConfigTest : public DifEntropySrcTest {
protected:
dif_entropy_src_config_t config_ = {
- .mode = kDifEntropySrcModeLfsr,
+ .mode = kDifEntropySrcModePtrng,
.tests = {0},
.reset_health_test_registers = false,
.single_bit_mode = kDifEntropySrcSingleBitModeDisabled,
.route_to_firmware = false,
- .fips_mode = false,
+ .fips_mode = false,1
.test_config = {0},
- .sample_rate = 64,
- .lfsr_seed = 4,
};
};
@@ -49,10 +47,6 @@
EXPECT_EQ(dif_entropy_src_configure(nullptr, {}), kDifBadArg);
}
-TEST_F(ConfigTest, LfsrSeedBadArg) {
- config_.lfsr_seed = 16;
- EXPECT_EQ(dif_entropy_src_configure(&entropy_src_, config_), kDifBadArg);
-}
struct ConfigParams {
dif_entropy_src_mode_t mode;
@@ -76,8 +70,6 @@
config_.route_to_firmware = test_param.route_to_firmware;
config_.reset_health_test_registers = test_param.reset_health_test_registers;
- EXPECT_WRITE32(ENTROPY_SRC_SEED_REG_OFFSET, test_param.expected_seed);
- EXPECT_WRITE32(ENTROPY_SRC_RATE_REG_OFFSET, 64);
EXPECT_WRITE32(ENTROPY_SRC_ENTROPY_CONTROL_REG_OFFSET,
{
{ENTROPY_SRC_ENTROPY_CONTROL_ES_ROUTE_OFFSET,
@@ -91,8 +83,6 @@
uint32_t rng_bit_enable = test_param.expected_rng_bit_en ? 0xa : 0x5;
// Current dif does not set these fields
- uint32_t lfsr_enable =
- test_param.expected_mode == kDifEntropySrcModeLfsr ? 0xa : 0x5;
// uint32_t route_to_fw = test_param.route_to_firmware ? 0xa : 0x5;
uint32_t enable =
@@ -106,7 +96,6 @@
{ENTROPY_SRC_CONF_HEALTH_TEST_CLR_OFFSET, reset_ht},
{ENTROPY_SRC_CONF_BOOT_BYPASS_DISABLE_OFFSET, 0x5},
// Current dif doesn ot set these fields
- {ENTROPY_SRC_CONF_LFSR_ENABLE_OFFSET, lfsr_enable},
//{ENTROPY_SRC_CONF_ENTROPY_DATA_REG_ENABLE_OFFSET, route_to_fw},
{ENTROPY_SRC_CONF_ENABLE_OFFSET, enable},
});
@@ -124,25 +113,25 @@
ConfigParams{kDifEntropySrcModePtrng,
kDifEntropySrcSingleBitModeDisabled, false, false, 1,
false, 0, 0},
- ConfigParams{kDifEntropySrcModeLfsr,
+ ConfigParams{kDifEntropySrcModePtrng,
kDifEntropySrcSingleBitModeDisabled, false, false, 2,
false, 0, 4},
// Test route_to_firmware
- ConfigParams{kDifEntropySrcModeLfsr,
+ ConfigParams{kDifEntropySrcModePtrng,
kDifEntropySrcSingleBitModeDisabled, true, false, 2, false,
0, 4},
// Test reset_health_test_registers
- ConfigParams{kDifEntropySrcModeLfsr,
+ ConfigParams{kDifEntropySrcModePtrng,
kDifEntropySrcSingleBitModeDisabled, true, true, 2, false,
0, 4},
// Test single_bit_mode
- ConfigParams{kDifEntropySrcModeLfsr, kDifEntropySrcSingleBitMode0, true,
+ ConfigParams{kDifEntropySrcModePtrng, kDifEntropySrcSingleBitMode0, true,
true, 2, true, 0, 4},
- ConfigParams{kDifEntropySrcModeLfsr, kDifEntropySrcSingleBitMode1, true,
+ ConfigParams{kDifEntropySrcModePtrng, kDifEntropySrcSingleBitMode1, true,
true, 2, true, 1, 4},
- ConfigParams{kDifEntropySrcModeLfsr, kDifEntropySrcSingleBitMode2, true,
+ ConfigParams{kDifEntropySrcModePtrng, kDifEntropySrcSingleBitMode2, true,
true, 2, true, 2, 4},
- ConfigParams{kDifEntropySrcModeLfsr, kDifEntropySrcSingleBitMode3, true,
+ ConfigParams{kDifEntropySrcModePtrng, kDifEntropySrcSingleBitMode3, true,
true, 2, true, 3, 4}));
class ReadTest : public DifEntropySrcTest {};