[bazel] add slot management to `opentitan_functest` macro
This adds support to the `opentitan_functest` macro to specify which
stage and slot an `opentitan_flash_binary` gets built for, defaulting to
the `silicon_creator` stage, slot A.
This partially addresses #10712.
This functionality will soon be expanded address building more complex
test cases with multiple stages / slots filled, to address #13511.
Signed-off-by: Timothy Trippel <ttrippel@google.com>
diff --git a/rules/opentitan_test.bzl b/rules/opentitan_test.bzl
index ebb5ae4..caf6c4e 100644
--- a/rules/opentitan_test.bzl
+++ b/rules/opentitan_test.bzl
@@ -17,6 +17,14 @@
ROM_BOOT_FAILURE_MSG,
)
+# This constant holds a dictionary of slot-specific linker script dependencies
+# that determine how an `opentitan_flash_binary` is built.
+_FLASH_SLOTS = {
+ "silicon_creator_a": ["@//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_a"],
+ "silicon_creator_b": ["@//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_b"],
+ "silicon_creator_virtual": ["@//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_virtual"],
+}
+
_BASE_PARAMS = {
"args": [], # Passed to test runner as arguments.
"data": [],
@@ -239,6 +247,7 @@
test_in_rom = False,
ot_flash_binary = None,
signed = False,
+ slot = "silicon_creator_a",
test_harness = "@//sw/host/opentitantool",
key = "test_key_0",
dv = None,
@@ -266,6 +275,7 @@
flash image for the test rather than building one
from srcs/deps.
@param signed: Whether to sign the test image. Unsigned by default.
+ @param slot: What slot to build the image for.
@param test_harness: The binary on the host side that runs the test.
@param key: Which signed test image (by key) to use.
@param dv: DV test parameters.
@@ -301,6 +311,10 @@
# Generate SW artifacts for the tests.
if not ot_flash_binary:
+ # Set the linker script for the specified slot.
+ if slot not in _FLASH_SLOTS:
+ fail("Invalid slot: {}. Valid slots are: silicon_creator_{a,b,virtual}".format(slot))
+ deps += _FLASH_SLOTS[slot]
ot_flash_binary = name + "_prog"
opentitan_flash_binary(
name = ot_flash_binary,
diff --git a/sw/device/examples/hello_usbdev/BUILD b/sw/device/examples/hello_usbdev/BUILD
index 558f636..6b4cf35 100644
--- a/sw/device/examples/hello_usbdev/BUILD
+++ b/sw/device/examples/hello_usbdev/BUILD
@@ -18,7 +18,6 @@
deps = [
":hello_usbdev_lib",
"//sw/device/lib/base:mmio",
- "//sw/device/lib/testing/test_framework:test_framework_manifest_def",
],
)
@@ -41,7 +40,8 @@
"//sw/device/lib/testing:usb_testutils",
"//sw/device/lib/testing:usb_testutils_simpleserial",
"//sw/device/lib/testing/test_framework:check",
- "//sw/device/lib/testing/test_framework:ottf_start_silicon_creator_slot_a",
+ "//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_a",
+ "//sw/device/lib/testing/test_framework:ottf_start",
"//sw/device/lib/testing/test_framework:ottf_test_config",
],
)
diff --git a/sw/device/examples/hello_world/BUILD b/sw/device/examples/hello_world/BUILD
index c1c81ec..ea9cec6 100644
--- a/sw/device/examples/hello_world/BUILD
+++ b/sw/device/examples/hello_world/BUILD
@@ -20,7 +20,6 @@
deps = [
":hello_world_lib",
"//sw/device/lib/base:mmio",
- "//sw/device/lib/testing/test_framework:test_framework_manifest_def",
],
)
@@ -41,7 +40,8 @@
"//sw/device/lib/runtime:print",
"//sw/device/lib/testing:pinmux_testutils",
"//sw/device/lib/testing/test_framework:check",
- "//sw/device/lib/testing/test_framework:ottf_start_silicon_creator_slot_a",
+ "//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_a",
+ "//sw/device/lib/testing/test_framework:ottf_start",
"//sw/device/lib/testing/test_framework:ottf_test_config",
],
)
diff --git a/sw/device/lib/testing/test_framework/BUILD b/sw/device/lib/testing/test_framework/BUILD
index eb0eb63..597a5f5 100644
--- a/sw/device/lib/testing/test_framework/BUILD
+++ b/sw/device/lib/testing/test_framework/BUILD
@@ -139,6 +139,7 @@
],
target_compatible_with = [OPENTITAN_CPU],
deps = [
+ ":test_framework_manifest_def",
"//sw/device/lib/base:csr",
"//sw/device/lib/base:macros",
"//sw/device/lib/crt",
@@ -151,36 +152,6 @@
)
cc_library(
- name = "ottf_start_silicon_creator_slot_a",
- target_compatible_with = [OPENTITAN_CPU],
- deps = [
- ":ottf_ld_silicon_creator_slot_a",
- ":ottf_start",
- ":test_framework_manifest_def",
- ],
-)
-
-cc_library(
- name = "ottf_start_silicon_creator_slot_b",
- target_compatible_with = [OPENTITAN_CPU],
- deps = [
- ":ottf_ld_silicon_creator_slot_b",
- ":ottf_start",
- ":test_framework_manifest_def",
- ],
-)
-
-cc_library(
- name = "ottf_start_silicon_creator_slot_virtual",
- target_compatible_with = [OPENTITAN_CPU],
- deps = [
- ":ottf_ld_silicon_creator_slot_virtual",
- ":ottf_start",
- ":test_framework_manifest_def",
- ],
-)
-
-cc_library(
name = "ottf_test_config",
hdrs = [
"ottf_test_config.h",
@@ -196,7 +167,7 @@
":check",
":coverage",
":freertos_port",
- ":ottf_start_silicon_creator_slot_a",
+ ":ottf_start",
":ottf_test_config",
":status",
"//sw/device/lib/arch:device",
diff --git a/sw/device/lib/testing/test_framework/ottf_common.ld b/sw/device/lib/testing/test_framework/ottf_common.ld
index 34c6e14..25cb647 100644
--- a/sw/device/lib/testing/test_framework/ottf_common.ld
+++ b/sw/device/lib/testing/test_framework/ottf_common.ld
@@ -152,6 +152,10 @@
KEEP(*(__llvm_covfun))
KEEP(*(__llvm_covmap))
KEEP(*(__llvm_prf_names))
+
+ /* TODO(#14636): extract_sw_logs_db requires .rodata section. */
+ . = ALIGN(4);
+ _rodata_end = .;
} > ottf_flash
/**
diff --git a/sw/device/sca/BUILD b/sw/device/sca/BUILD
index 0a9f81e..ec2b4fd 100644
--- a/sw/device/sca/BUILD
+++ b/sw/device/sca/BUILD
@@ -14,10 +14,8 @@
"//sw/device/lib/base:memory",
"//sw/device/lib/dif:aes",
"//sw/device/lib/runtime:log",
+ "//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_a",
"//sw/device/lib/testing/test_framework:ottf_main",
- "//sw/device/lib/testing/test_framework:ottf_start",
- "//sw/device/lib/testing/test_framework:ottf_start_silicon_creator_slot_a",
- "//sw/device/lib/testing/test_framework:ottf_test_config",
"//sw/device/sca/lib:prng",
"//sw/device/sca/lib:sca",
"//sw/device/sca/lib:simple_serial",
@@ -32,10 +30,8 @@
"//sw/device/lib/base:memory",
"//sw/device/lib/dif:kmac",
"//sw/device/lib/runtime:log",
+ "//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_a",
"//sw/device/lib/testing/test_framework:ottf_main",
- "//sw/device/lib/testing/test_framework:ottf_start",
- "//sw/device/lib/testing/test_framework:ottf_start_silicon_creator_slot_a",
- "//sw/device/lib/testing/test_framework:ottf_test_config",
"//sw/device/sca/lib:prng",
"//sw/device/sca/lib:sca",
"//sw/device/sca/lib:simple_serial",
@@ -54,9 +50,8 @@
"//sw/device/lib/runtime:log",
"//sw/device/lib/runtime:otbn",
"//sw/device/lib/testing:entropy_testutils",
+ "//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_a",
"//sw/device/lib/testing/test_framework:ottf_main",
- "//sw/device/lib/testing/test_framework:ottf_start",
- "//sw/device/lib/testing/test_framework:ottf_test_config",
"//sw/device/sca/lib:prng",
"//sw/device/sca/lib:sca",
"//sw/device/sca/lib:simple_serial",
@@ -76,9 +71,8 @@
"//sw/device/lib/runtime:log",
"//sw/device/lib/runtime:otbn",
"//sw/device/lib/testing:entropy_testutils",
+ "//sw/device/lib/testing/test_framework:ottf_ld_silicon_creator_slot_a",
"//sw/device/lib/testing/test_framework:ottf_main",
- "//sw/device/lib/testing/test_framework:ottf_start",
- "//sw/device/lib/testing/test_framework:ottf_test_config",
"//sw/device/sca/lib:prng",
"//sw/device/sca/lib:sca",
"//sw/device/sca/lib:simple_serial",
diff --git a/sw/device/sca/lib/BUILD b/sw/device/sca/lib/BUILD
index f5e193c..67cd0c2 100644
--- a/sw/device/sca/lib/BUILD
+++ b/sw/device/sca/lib/BUILD
@@ -56,6 +56,6 @@
"//sw/device/lib/runtime:irq",
"//sw/device/lib/runtime:print",
"//sw/device/lib/testing:pinmux_testutils",
- "//sw/device/lib/testing/test_framework:ottf_start_silicon_creator_slot_a",
+ "//sw/device/lib/testing/test_framework:ottf_start",
],
)
diff --git a/sw/device/silicon_creator/rom/e2e/BUILD b/sw/device/silicon_creator/rom/e2e/BUILD
index f5607d6..12d47f0 100644
--- a/sw/device/silicon_creator/rom/e2e/BUILD
+++ b/sw/device/silicon_creator/rom/e2e/BUILD
@@ -41,7 +41,6 @@
"//sw/device/silicon_creator/lib:manifest_def",
"//sw/device/silicon_creator/lib/base:static_critical_boot_measurements",
"//sw/device/silicon_creator/lib/base:static_critical_sec_mmio",
- "//sw/device/silicon_creator/rom_ext:ld_slot_a",
],
)
diff --git a/sw/device/silicon_creator/rom/e2e/rom_e2e_shutdown_exception_c_test.c b/sw/device/silicon_creator/rom/e2e/rom_e2e_shutdown_exception_c_test.c
index 8847926..7ad6637 100644
--- a/sw/device/silicon_creator/rom/e2e/rom_e2e_shutdown_exception_c_test.c
+++ b/sw/device/silicon_creator/rom/e2e/rom_e2e_shutdown_exception_c_test.c
@@ -16,6 +16,6 @@
// - `.text`, only 2 instructions to trigger an instruction access fault, and
// - `.static_critical`, required by the linker script.
-void _rom_ext_start_boot(void) {
+void _ottf_start(void) {
((void (*)(void))TOP_EARLGREY_SRAM_CTRL_MAIN_RAM_BASE_ADDR)();
}
diff --git a/sw/device/silicon_creator/rom_ext/rom_ext_common.ld b/sw/device/silicon_creator/rom_ext/rom_ext_common.ld
index 54aa312..d83d0a9 100644
--- a/sw/device/silicon_creator/rom_ext/rom_ext_common.ld
+++ b/sw/device/silicon_creator/rom_ext/rom_ext_common.ld
@@ -118,9 +118,6 @@
*(.srodata.*)
*(.rodata)
*(.rodata.*)
- /* TODO(#14636): extract_sw_logs_db requires .rodata section. */
- . = ALIGN(4);
- _rodata_end = .;
} > rom_ext_flash
/**
diff --git a/sw/device/tests/BUILD b/sw/device/tests/BUILD
index f8e7f3a..9d62379 100644
--- a/sw/device/tests/BUILD
+++ b/sw/device/tests/BUILD
@@ -480,10 +480,9 @@
"//sw/device/lib/runtime:log",
"//sw/device/lib/runtime:print",
"//sw/device/lib/testing/test_framework:check",
- "//sw/device/lib/testing/test_framework:ottf_start_silicon_creator_slot_a",
+ "//sw/device/lib/testing/test_framework:ottf_start",
"//sw/device/lib/testing/test_framework:ottf_test_config",
"//sw/device/lib/testing/test_framework:status",
- "//sw/device/silicon_creator/lib:manifest_def",
],
)