[rom, rnd] Add unittests
Signed-off-by: Douglas Reis <doreis@lowrisc.org>
diff --git a/sw/device/silicon_creator/lib/drivers/BUILD b/sw/device/silicon_creator/lib/drivers/BUILD
index 42691ac..b6e938a 100644
--- a/sw/device/silicon_creator/lib/drivers/BUILD
+++ b/sw/device/silicon_creator/lib/drivers/BUILD
@@ -430,12 +430,12 @@
deps = dual_inputs(
device = [
":otp",
+ "//sw/device/lib/base:csr",
+ "//sw/device/lib/base:abs_mmio",
+ "//sw/device/lib/base:hardened",
"//hw/ip/otp_ctrl/data:otp_ctrl_regs",
"//hw/ip/rv_core_ibex/data:rv_core_ibex_regs",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
- "//sw/device/lib/base:abs_mmio",
- "//sw/device/lib/base:csr",
- "//sw/device/lib/base:hardened",
],
host = [
"//sw/device/lib/base/testing:global_mock",
@@ -449,6 +449,23 @@
),
)
+cc_test(
+ name = "rnd_unittest",
+ srcs = ["rnd_unittest.cc"],
+ deps = [
+ dual_cc_device_library_of(":rnd"),
+ ":otp",
+ "//hw/ip/otp_ctrl/data:otp_ctrl_regs",
+ "//hw/ip/rv_core_ibex/data:rv_core_ibex_regs",
+ "//hw/top_earlgrey/sw/autogen:top_earlgrey",
+ "//sw/device/lib/base:abs_mmio",
+ "//sw/device/lib/base:csr",
+ "//sw/device/silicon_creator/lib/base:sec_mmio",
+ "//sw/device/silicon_creator/testing:mask_rom_test",
+ "@googletest//:gtest_main",
+ ],
+)
+
opentitan_functest(
name = "rnd_functest",
srcs = ["rnd_functest.c"],
diff --git a/sw/device/silicon_creator/lib/drivers/rnd_unittest.cc b/sw/device/silicon_creator/lib/drivers/rnd_unittest.cc
new file mode 100644
index 0000000..0505439
--- /dev/null
+++ b/sw/device/silicon_creator/lib/drivers/rnd_unittest.cc
@@ -0,0 +1,56 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+#include "sw/device/silicon_creator/lib/drivers/rnd.h"
+
+#include "gtest/gtest.h"
+#include "sw/device/lib/base/csr.h"
+#include "sw/device/lib/base/testing/mock_abs_mmio.h"
+#include "sw/device/silicon_creator/lib/base/mock_csr.h"
+#include "sw/device/silicon_creator/lib/base/mock_sec_mmio.h"
+#include "sw/device/silicon_creator/lib/drivers/mock_otp.h"
+#include "sw/device/silicon_creator/testing/mask_rom_test.h"
+
+#include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
+#include "otp_ctrl_regs.h"
+#include "rv_core_ibex_regs.h"
+
+namespace rnd_unittest {
+namespace {
+using ::testing::Return;
+
+class RndTest : public mask_rom_test::MaskRomTest {
+ protected:
+ uint32_t base_ = TOP_EARLGREY_RV_CORE_IBEX_CFG_BASE_ADDR;
+
+ mask_rom_test::MockAbsMmio mmio_;
+ mask_rom_test::MockSecMmio sec_mmio_;
+ mask_rom_test::MockOtp otp_;
+ mock_csr::MockCsr csr_;
+};
+
+TEST_F(RndTest, GetUint32Disabled) {
+ EXPECT_CALL(otp_, read32(OTP_CTRL_PARAM_CREATOR_SW_CFG_RNG_EN_OFFSET))
+ .WillOnce(Return(kHardenedBoolTrue));
+
+ EXPECT_ABS_READ32(base_ + RV_CORE_IBEX_RND_STATUS_REG_OFFSET,
+ {{RV_CORE_IBEX_RND_STATUS_RND_DATA_VALID_BIT, false}});
+ EXPECT_ABS_READ32(base_ + RV_CORE_IBEX_RND_STATUS_REG_OFFSET,
+ {{RV_CORE_IBEX_RND_STATUS_RND_DATA_VALID_BIT, true}});
+ EXPECT_CSR_READ(CSR_REG_MCYCLE, 67894);
+ EXPECT_ABS_READ32(base_ + RV_CORE_IBEX_RND_DATA_REG_OFFSET, 12345);
+ EXPECT_EQ(rnd_uint32(), 67894 + 12345);
+}
+
+TEST_F(RndTest, GetUint32Enabled) {
+ EXPECT_CALL(otp_, read32(OTP_CTRL_PARAM_CREATOR_SW_CFG_RNG_EN_OFFSET))
+ .WillOnce(Return(kHardenedBoolFalse));
+
+ EXPECT_CSR_READ(CSR_REG_MCYCLE, 978465);
+ EXPECT_ABS_READ32(base_ + RV_CORE_IBEX_RND_DATA_REG_OFFSET, 193475837);
+ EXPECT_EQ(rnd_uint32(), 978465 + 193475837);
+}
+
+} // namespace
+} // namespace rnd_unittest