Add lifecycle controller OT peripheral tests
- Generation of a supporting OTP image is done at test time
- Added otp_ctrl_img_smoketest.hjson for OTP image generation
Change-Id: Ifadba36b1c9b84bff0faf06a97ef4513c2fd75af
diff --git a/opentitan_peripherals_test.robot b/opentitan_peripherals_test.robot
index f52e22d..ba37edc 100644
--- a/opentitan_peripherals_test.robot
+++ b/opentitan_peripherals_test.robot
@@ -7,7 +7,8 @@
*** Variables ***
${UART} sysbus.uart0
-${ROOTDIR} @${CURDIR}/../..
+${SHODAN_DIR} ${CURDIR}/../..
+${ROOTDIR} @${SHODAN_DIR}
${AES_BIN} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/tests/aes_smoketest_fpga_nexysvideo.elf
${UART_BIN} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/tests/uart_smoketest_fpga_nexysvideo.elf
${HMAC_BIN} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/tests/hmac_smoketest_fpga_nexysvideo.elf
@@ -21,6 +22,12 @@
${RESET_BIN} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/tests/rstmgr_smoketest_fpga_nexysvideo.elf
${SW_RESET_BIN} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/tests/rstmgr_sw_req_test_fpga_nexysvideo.elf
${HELLO_WORLD_BIN} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/examples/hello_world/hello_world_fpga_nexysvideo.elf
+${OTP_VMEM} ${SHODAN_DIR}/out/tmp/otp_img_smoketest.vmem
+${LC_TRANSITION} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/tests/lc_ctrl_transition_test_fpga_nexysvideo.elf
+${LC_OTP_CFG} ${ROOTDIR}/out/opentitan/sw/build-out/sw/device/tests/lc_ctrl_otp_hw_cfg_test_fpga_nexysvideo.elf
+
+${OTP_IMG_SCRIPT} ${SHODAN_DIR}/hw/opentitan-upstream/util/design/gen-otp-img.py
+${OTP_IMG_CFG} ${SHODAN_DIR}/sim/tests/otp_ctrl_img_smoketest.hjson
${LEDS}= SEPARATOR=
... """ ${\n}
@@ -52,6 +59,9 @@
Execute Command machine LoadPlatformDescriptionFromString ${LEDS}
Execute Command sysbus LoadELF ${BOOT_ROM_BIN}
Execute Command sysbus LoadELF ${HELLO_WORLD_BIN}
+ Run Process mkdir -p ${SHODAN_DIR}/out/tmp
+ Run Process python3 ${OTP_IMG_SCRIPT} --img-cfg ${OTP_IMG_CFG} --out ${OTP_VMEM}
+ Execute Command sysbus.otp_ctrl LoadVMem @${OTP_VMEM}
Execute Command sysbus.cpu0 PC 0x00008084
Create Terminal Tester ${UART}
@@ -173,6 +183,12 @@
Should Pass Software Reset Test
Run Smoketest ${SW_RESET_BIN}
+Should Pass Life Cycle Transition Test
+ Run Smoketest ${LC_TRANSITION}
+
+Should Pass Life Cycle Otp Config Test
+ Run Smoketest ${LC_OTP_CFG}
+
Should Pass AES Smoketest With Scrambled Boot ROM Vmem
Run Smoketest With Scrambled Boot ROM Vmem ${AES_BIN}
diff --git a/otp_ctrl_img_smoketest.hjson b/otp_ctrl_img_smoketest.hjson
new file mode 100644
index 0000000..60c44ec
--- /dev/null
+++ b/otp_ctrl_img_smoketest.hjson
@@ -0,0 +1,129 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Use the gen-otp-img.py script to convert this configuration into
+// a hex file for preloading the OTP in FPGA synthesis or simulation.
+//
+
+{
+ // Seed to be used for generation of partition randomized values.
+ // Can be overridden on the command line with the --seed switch.
+ seed: 01931961561863975174
+
+ // The partition and item names must correspond with the OTP memory map.
+ partitions: [
+ {
+ name: "CREATOR_SW_CFG",
+ items: [
+ {
+ name: "CREATOR_SW_CFG_DIGEST",
+ value: "0x0",
+ },
+ {
+ name: "CREATOR_SW_CFG_USE_SW_RSA_VERIFY",
+ // Use software mod_exp implementation for signature
+ // verification. See the definition of `hardened_bool_t` in
+ // sw/device/lib/base/hardened.h.
+ value: "0x739",
+ },
+ {
+ name: "CREATOR_SW_CFG_KEY_IS_VALID",
+ // Mark the first two keys as valid and remaining as
+ // invalid since we have currently only two keys. See the
+ // definition of `hardened_byte_bool_t` in
+ // sw/device/lib/base/hardened.h.
+ value: "0x4b4b4b4b4b4ba5a5",
+ }
+ ],
+ }
+ {
+ name: "OWNER_SW_CFG",
+ items: [
+ {
+ name: "OWNER_SW_CFG_DIGEST",
+ value: "0x0",
+ }
+ ],
+ }
+ {
+ name: "HW_CFG",
+ // If set to true, this computes the HW digest value
+ // and locks the partition.
+ lock: "True",
+ items: [
+ {
+ name: "DEVICE_ID",
+ value: "0xBF5EA92044DAC540CFD1A00105568DFA97D9C35EA0407D71320B5E0434DB637F",
+ },
+ {
+ name: "EN_CSRNG_SW_APP_READ",
+ value: "0xA5",
+ },
+ {
+ name: "EN_ENTROPY_SRC_FW_READ",
+ value: "0xA5",
+ },
+ ],
+ }
+ {
+ name: "SECRET0",
+ lock: "True",
+ items: [
+ {
+ name: "TEST_UNLOCK_TOKEN",
+ value: "0x79DEF38F41A9B895F6BDF341BEADA9B6",
+ }
+ {
+ name: "TEST_EXIT_TOKEN",
+ value: "0x000102030405060708090A0B0C0D0E0F",
+ }
+ ],
+ }
+ {
+ name: "SECRET1",
+ lock: "True",
+ items: [
+ {
+ name: "FLASH_ADDR_KEY_SEED",
+ value: "<random>",
+ }
+ {
+ name: "FLASH_DATA_KEY_SEED",
+ value: "<random>",
+ }
+ {
+ name: "SRAM_DATA_KEY_SEED",
+ value: "<random>",
+ }
+ ],
+ }
+ {
+ name: "SECRET2",
+ lock: "False",
+ items: [
+ {
+ name: "RMA_TOKEN",
+ value: "0x4D89B62D287CB957C2500042306DFD57",
+ }
+ {
+ name: "CREATOR_ROOT_KEY_SHARE0",
+ value: "<random>",
+ }
+ {
+ name: "CREATOR_ROOT_KEY_SHARE1",
+ value: "<random>",
+ }
+ ],
+ }
+ {
+ name: "LIFE_CYCLE",
+ // Can be one of the following strings:
+ // RAW, TEST_UNLOCKED0-3, TEST_LOCKED0-2, DEV, PROD, PROD_END, RMA, SCRAP
+ state: "TEST_UNLOCKED2",
+ // Can range from 0 to 16.
+ // Note that a value of 0 is only permissible in RAW state.
+ count: "7"
+ }
+ ]
+}