| # 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", | 
 |     ], | 
 | ) |