blob: 74e179362b2b54a54c7e30405941ccff090e7646 [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:const.bzl", "CONST", "hex")
load("//rules:manifest.bzl", "manifest")
load("//rules:opentitan.bzl", "OPENTITAN_CPU", "opentitan_flash_binary")
load("//rules:linker.bzl", "ld_library")
load("//rules:cross_platform.bzl", "dual_cc_library", "dual_inputs")
load("//rules:opentitan_test.bzl", "cw310_params", "opentitan_functest")
package(default_visibility = ["//visibility:public"])
cc_library(
name = "rom_ext_epmp",
srcs = ["rom_ext_epmp.c"],
hdrs = ["rom_ext_epmp.h"],
deps = [
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
"//sw/device/lib/base:bitfield",
"//sw/device/lib/base:csr",
"//sw/device/silicon_creator/lib:epmp_state",
],
)
dual_cc_library(
name = "rom_ext_boot_policy_ptrs",
srcs = dual_inputs(
host = ["mock_rom_ext_boot_policy_ptrs.cc"],
),
hdrs = dual_inputs(
host = ["mock_rom_ext_boot_policy_ptrs.h"],
shared = ["rom_ext_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/base:chip",
"//sw/device/lib/base:macros",
"//sw/device/silicon_creator/lib:manifest",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
],
),
)
cc_library(
name = "rom_ext_boot_policy",
srcs = ["rom_ext_boot_policy.c"],
hdrs = ["rom_ext_boot_policy.h"],
deps = [
":rom_ext_boot_policy_ptrs",
"//hw/top_earlgrey/sw/autogen:top_earlgrey",
"//sw/device/lib/base:bitfield",
"//sw/device/lib/base:csr",
"//sw/device/silicon_creator/lib:error",
"//sw/device/silicon_creator/lib:manifest",
],
)
cc_test(
name = "rom_ext_boot_policy_unittest",
srcs = ["rom_ext_boot_policy_unittest.cc"],
deps = [
":rom_ext_boot_policy",
"//sw/device/silicon_creator/testing:rom_test",
"@googletest//:gtest_main",
],
)
ld_library(
name = "ld_common",
includes = ["rom_ext_common.ld"],
deps = [
"//sw/device:info_sections",
"//sw/device/silicon_creator/lib/base:static_critical_sections",
],
)
ld_library(
name = "ld_slot_a",
script = "rom_ext_slot_a.ld",
deps = [
":ld_common",
"//hw/top_earlgrey/sw/autogen:top_earlgrey_memory",
],
)
ld_library(
name = "ld_slot_b",
script = "rom_ext_slot_b.ld",
deps = [
":ld_common",
"//hw/top_earlgrey/sw/autogen:top_earlgrey_memory",
],
)
ld_library(
name = "ld_slot_virtual",
script = "rom_ext_slot_virtual.ld",
deps = [
":ld_common",
"//hw/top_earlgrey/sw/autogen:top_earlgrey_memory",
],
)
cc_library(
name = "sigverify_keys",
srcs = ["sigverify_keys.c"],
hdrs = ["sigverify_keys.h"],
deps = [
"//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: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",
],
)
cc_library(
name = "rom_ext",
srcs = [
"rom_ext.c",
"rom_ext_start.S",
],
hdrs = ["rom_ext.h"],
target_compatible_with = [OPENTITAN_CPU],
deps = [
":rom_ext_boot_policy",
":rom_ext_epmp",
":sigverify_keys",
"//sw/device/lib/arch:device",
"//sw/device/lib/base:csr",
"//sw/device/lib/base:macros",
"//sw/device/lib/base:stdasm",
"//sw/device/lib/runtime:hart",
"//sw/device/silicon_creator/lib:manifest",
"//sw/device/silicon_creator/lib:manifest_def",
"//sw/device/silicon_creator/lib:rom_print",
"//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:flash_ctrl",
"//sw/device/silicon_creator/lib/drivers:hmac",
"//sw/device/silicon_creator/lib/drivers:ibex",
"//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:uart",
"//sw/device/silicon_creator/lib/sigverify",
"//sw/device/silicon_creator/rom_ext/keys/fake",
],
)
manifest({
"name": "manifest_standard",
"address_translation": hex(CONST.FALSE),
"identifier": hex(CONST.ROM_EXT),
"visibility": ["//visibility:public"],
})
manifest({
"name": "manifest_virtual",
"address_translation": hex(CONST.TRUE),
"identifier": hex(CONST.ROM_EXT),
})
opentitan_flash_binary(
name = "rom_ext_slot_a",
manifest = ":manifest_standard",
signed = True,
deps = [
":ld_slot_a",
":rom_ext",
"//sw/device/lib/crt",
"//sw/device/silicon_creator/lib:manifest_def",
],
)
opentitan_flash_binary(
name = "rom_ext_slot_b",
manifest = ":manifest_standard",
signed = True,
deps = [
":ld_slot_b",
":rom_ext",
"//sw/device/lib/crt",
"//sw/device/silicon_creator/lib:manifest_def",
],
)
opentitan_flash_binary(
name = "rom_ext_slot_virtual",
manifest = ":manifest_virtual",
signed = True,
deps = [
":ld_slot_virtual",
":rom_ext",
"//sw/device/lib/crt",
"//sw/device/silicon_creator/lib:manifest_def",
],
)
manifest({
"name": "manifest_bad_address_translation",
"address_translation": "0",
"identifier": hex(CONST.ROM_EXT),
})
opentitan_flash_binary(
name = "rom_ext_slot_a_bad_address_translation",
manifest = ":manifest_bad_address_translation",
signed = True,
deps = [
":ld_slot_a",
":rom_ext",
"//sw/device/lib/crt",
"//sw/device/silicon_creator/lib:manifest_def",
],
)