blob: 804588ed92520a9bfe0d42b58ddc8c86c8f0a450 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
load("//rules:opentitan.bzl", "OPENTITAN_CPU", "opentitan_rom_binary")
load("//rules:exclude_files.bzl", "exclude_files")
load("//rules:linker.bzl", "ld_library")
load(
"//rules:opentitan_test.bzl",
"manual_test",
"opentitan_functest",
)
load("//rules:cross_platform.bzl", "dual_cc_library", "dual_inputs")
load("@rules_pkg//pkg:mappings.bzl", "pkg_files")
package(default_visibility = ["//visibility:public"])
dual_cc_library(
name = "boot_policy_ptrs",
srcs = dual_inputs(
host = ["mock_boot_policy_ptrs.cc"],
shared = ["boot_policy_ptrs.c"],
),
hdrs = dual_inputs(
host = ["mock_boot_policy_ptrs.h"],
shared = ["boot_policy_ptrs.h"],
),
deps = dual_inputs(
host = [
"//sw/device/lib/base:global_mock",
"//sw/device/silicon_creator/testing:rom_test",
"@googletest//:gtest",
],
shared = [
"//sw/device/silicon_creator/lib:manifest",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
],
),
)
cc_library(
name = "boot_policy",
srcs = ["boot_policy.c"],
hdrs = ["boot_policy.h"],
deps = [
":boot_policy_ptrs",
"//sw/device/lib/base:hardened",
"//sw/device/silicon_creator/lib:boot_data",
"//sw/device/silicon_creator/lib:error",
"//sw/device/silicon_creator/lib:manifest",
"//sw/device/silicon_creator/lib:shutdown",
"//sw/device/silicon_creator/lib/base:chip",
],
)
cc_test(
name = "boot_policy_unittest",
srcs = ["boot_policy_unittest.cc"],
deps = [
":boot_policy",
"//sw/device/silicon_creator/testing:rom_test",
"@googletest//:gtest_main",
],
)
ld_library(
name = "linker_script",
script = "rom.ld",
deps = [
"//hw/top_earlgrey/sw/autogen:top_earlgrey_memory",
"//sw/device:info_sections",
"//sw/device/silicon_creator/lib/base:static_critical_sections",
],
)
cc_library(
name = "rom_start",
srcs = [
"rom_start.S",
],
target_compatible_with = [OPENTITAN_CPU],
deps = [
":rom_common",
":rom_epmp",
"//hw/ip/aon_timer/data:aon_timer_regs",
"//hw/ip/csrng/data:csrng_regs",
"//hw/ip/edn/data:edn_regs",
"//hw/ip/entropy_src/data:entropy_src_regs",
"//hw/ip/gpio/data:gpio_regs",
"//hw/ip/lc_ctrl/data:lc_ctrl_regs",
"//hw/ip/otp_ctrl/data:otp_ctrl_regs",
"//hw/ip/rv_core_ibex/data:rv_core_ibex_regs",
"//hw/ip/sram_ctrl/data:sram_ctrl_regs",
"//hw/top_earlgrey/ip/ast/data:ast_regs",
"//hw/top_earlgrey/ip/clkmgr/data/autogen:clkmgr_regs",
"//hw/top_earlgrey/ip/pinmux/data/autogen:pinmux_regs",
"//hw/top_earlgrey/ip/pwrmgr/data/autogen:pwrmgr_regs",
"//hw/top_earlgrey/ip/sensor_ctrl/data:sensor_ctrl_regs",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
"//sw/device/lib/base:hardened",
"//sw/device/lib/base:multibits",
"//sw/device/silicon_creator/lib/base:chip",
],
alwayslink = True,
)
cc_library(
name = "rom_common",
srcs = [
"rom.c",
"rom.h",
],
deps = [
":boot_policy",
":bootstrap",
":rom_epmp",
":sigverify_keys",
"//hw/ip/aon_timer/data:aon_timer_regs",
"//sw/device/lib/arch:device",
"//sw/device/lib/base:bitfield",
"//sw/device/lib/base:csr",
"//sw/device/lib/base:macros",
"//sw/device/lib/base:memory",
"//sw/device/lib/base:stdasm",
"//sw/device/lib/crt",
"//sw/device/lib/runtime:hart",
"//sw/device/silicon_creator/lib:cfi",
"//sw/device/silicon_creator/lib:epmp_state",
"//sw/device/silicon_creator/lib:error",
"//sw/device/silicon_creator/lib:irq_asm",
"//sw/device/silicon_creator/lib:manifest",
"//sw/device/silicon_creator/lib:shutdown",
"//sw/device/silicon_creator/lib/base:chip",
"//sw/device/silicon_creator/lib/base:sec_mmio",
"//sw/device/silicon_creator/lib/base:static_critical_boot_measurements",
"//sw/device/silicon_creator/lib/base:static_critical_epmp_state",
"//sw/device/silicon_creator/lib/base:static_critical_sec_mmio",
"//sw/device/silicon_creator/lib/drivers:alert",
"//sw/device/silicon_creator/lib/drivers:ast",
"//sw/device/silicon_creator/lib/drivers:flash_ctrl",
"//sw/device/silicon_creator/lib/drivers:ibex",
"//sw/device/silicon_creator/lib/drivers:keymgr",
"//sw/device/silicon_creator/lib/drivers:lifecycle",
"//sw/device/silicon_creator/lib/drivers:otp",
"//sw/device/silicon_creator/lib/drivers:pinmux",
"//sw/device/silicon_creator/lib/drivers:retention_sram",
"//sw/device/silicon_creator/lib/drivers:rnd",
"//sw/device/silicon_creator/lib/drivers:rstmgr",
"//sw/device/silicon_creator/lib/drivers:uart",
"//sw/device/silicon_creator/lib/drivers:watchdog",
"//sw/device/silicon_creator/lib/sigverify",
],
)
opentitan_rom_binary(
name = "rom_with_fake_keys",
testonly = True,
deps = [
":linker_script",
":rom_common",
":rom_start",
"//sw/device/silicon_creator/rom/keys/fake",
],
)
cc_library(
name = "rom_epmp",
srcs = [
"rom_epmp.c",
"rom_epmp_init.S",
],
hdrs = ["rom_epmp.h"],
target_compatible_with = [OPENTITAN_CPU],
deps = [
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
"//sw/device/lib/base:bitfield",
"//sw/device/lib/base:csr",
"//sw/device/lib/base:memory",
"//sw/device/silicon_creator/lib:epmp_state",
"//sw/device/silicon_creator/lib/drivers:lifecycle",
],
)
opentitan_functest(
name = "rom_epmp_test",
srcs = [
"rom_epmp_test.c",
],
linkopts = [
"-Wl,--defsym=rom_test=1",
],
# This test doesn't use the OTTF.
targets = ["verilator"], # Can only run in verilator right now.
# This test is designed to run and complete entirely in the ROM boot stage.
# Setting the `test_in_rom` flag makes the `opentitan_functest` rule aware
# of this, and instructs it to load the test image into ROM (rather than
# loading the default test ROM, or any other ROM that may be specified via
# Verilator or CW310 params).
test_in_rom = True,
deps = [
":linker_script",
":rom_epmp",
":rom_start",
"//hw/top_earlgrey/ip/flash_ctrl/data/autogen:flash_ctrl_regs",
"//sw/device/lib/arch:device",
"//sw/device/lib/base:abs_mmio",
"//sw/device/lib/base:bitfield",
"//sw/device/lib/base:csr",
"//sw/device/lib/base:macros",
"//sw/device/lib/crt",
"//sw/device/lib/dif:pinmux",
"//sw/device/lib/dif:sram_ctrl",
"//sw/device/lib/runtime:hart",
"//sw/device/lib/runtime:ibex",
"//sw/device/lib/runtime:log",
"//sw/device/lib/runtime:print",
"//sw/device/lib/testing:pinmux_testutils",
"//sw/device/lib/testing/test_framework:check",
"//sw/device/lib/testing/test_framework:status",
"//sw/device/silicon_creator/lib:epmp_state",
"//sw/device/silicon_creator/lib:epmp_test_unlock",
"//sw/device/silicon_creator/lib:irq_asm",
"//sw/device/silicon_creator/lib/base:chip",
"//sw/device/silicon_creator/lib/base:sec_mmio",
"//sw/device/silicon_creator/lib/base:static_critical_boot_measurements",
"//sw/device/silicon_creator/lib/base:static_critical_epmp_state",
"//sw/device/silicon_creator/lib/base:static_critical_sec_mmio",
"//sw/device/silicon_creator/lib/drivers:flash_ctrl",
"//sw/device/silicon_creator/lib/drivers:uart",
],
)
filegroup(
name = "english_breakfast_test_rom_bootstrap_srcs",
srcs = [
"bootstrap.c",
"bootstrap.h",
],
)
cc_library(
name = "bootstrap",
srcs = ["bootstrap.c"],
hdrs = ["bootstrap.h"],
deps = [
"//hw/ip/gpio/data:gpio_regs",
"//hw/ip/otp_ctrl/data:otp_ctrl_regs",
"//hw/top_earlgrey/ip/flash_ctrl/data/autogen:flash_ctrl_regs",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
"//sw/device/lib/base:abs_mmio",
"//sw/device/lib/base:bitfield",
"//sw/device/lib/base:hardened",
"//sw/device/silicon_creator/lib:error",
"//sw/device/silicon_creator/lib/base:chip",
"//sw/device/silicon_creator/lib/drivers:flash_ctrl",
"//sw/device/silicon_creator/lib/drivers:otp",
"//sw/device/silicon_creator/lib/drivers:rstmgr",
"//sw/device/silicon_creator/lib/drivers:spi_device",
],
)
cc_test(
name = "bootstrap_unittest",
srcs = ["bootstrap_unittest.cc"],
deps = [
":bootstrap",
"//hw/ip/gpio/data:gpio_regs",
"//hw/ip/otp_ctrl/data:otp_ctrl_regs",
"//hw/top_earlgrey/ip/flash_ctrl/data/autogen:flash_ctrl_regs",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
"@googletest//:gtest_main",
],
)
cc_library(
name = "sigverify_keys",
srcs = ["sigverify_keys.c"],
hdrs = ["sigverify_keys.h"],
deps = [
"//hw/ip/otp_ctrl/data:otp_ctrl_regs",
"//sw/device/lib/base:bitfield",
"//sw/device/lib/base:hardened",
"//sw/device/lib/base:macros",
"//sw/device/silicon_creator/lib:error",
"//sw/device/silicon_creator/lib/drivers:lifecycle",
"//sw/device/silicon_creator/lib/drivers:otp",
"//sw/device/silicon_creator/lib/drivers:rnd",
"//sw/device/silicon_creator/lib/sigverify:rsa_key",
"//sw/device/silicon_creator/lib/sigverify:sigverify_without_mock_mod_exp_ibex",
],
)
cc_test(
name = "sigverify_keys_unittest",
srcs = ["sigverify_keys_unittest.cc"],
deps = [
":sigverify_keys",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
"//sw/device/silicon_creator/testing:rom_test",
"@googletest//:gtest_main",
],
)
exclude_files(
name = "pre_package",
testonly = True,
srcs = [":rom_with_fake_keys"],
exclude_suffix = [
".ll",
".i",
".s",
],
)
pkg_files(
name = "package",
testonly = True,
srcs = [":pre_package"],
prefix = "earlgrey/rom",
)
manual_test(
name = "manual_test",
tags = [
"manual",
"no-cache",
],
testplan = "//sw/device/silicon_creator/rom/data:rom_manual_testplan.hjson",
)