blob: d0ef04efaa27f7b3a9948cd8c03aa452081b0d51 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
# Mask ROM Linker Parameters
#
# See `sw/device/lib/testing/test_framework/ottf.ld` for additional info
# about these parameters.
rom_linkfile = files(['mask_rom.ld'])
rom_link_args = [
'-Wl,-L,@0@'.format(meson.source_root()),
'-Wl,-T,@0@/@1@'.format(meson.source_root(), rom_linkfile[0]),
] + embedded_target_extra_link_args
rom_link_deps = [rom_linkfile]
# Signature verification.
sw_silicon_creator_mask_rom_sigverify = declare_dependency(
link_with: static_library(
'sw_silicon_creator_mask_rom_sigverify',
sources: [
'sigverify_keys.c',
hw_ip_otp_ctrl_reg_h,
],
dependencies: [
sw_silicon_creator_lib_sigverify,
sw_silicon_creator_lib_driver_otp,
sw_silicon_creator_lib_driver_rnd,
sw_lib_bitfield,
],
),
)
# Mask ROM boot policy.
sw_silicon_creator_mask_rom_boot_policy = declare_dependency(
link_with: static_library(
'sw_silicon_creator_mask_rom_boot_policy',
sources: [
'boot_policy.c',
],
dependencies: [
sw_silicon_creator_lib_manifest,
sw_silicon_creator_lib_boot_data,
sw_silicon_creator_lib_shutdown,
sw_lib_hardened,
],
),
)
# Mask ROM ePMP library
sw_silicon_creator_mask_rom_epmp = declare_dependency(
link_with: static_library(
'sw_silicon_creator_mask_rom_epmp',
sources: [
'mask_rom_epmp.S',
'mask_rom_epmp.c',
],
dependencies: [
sw_silicon_creator_lib_epmp,
],
)
)
# Mask ROM ePMP test library.
mask_rom_epmp_test_lib = declare_dependency(
sources: [
hw_ip_aon_timer_reg_h,
hw_ip_ast_reg_h,
hw_ip_csrng_reg_h,
hw_ip_edn_reg_h,
hw_ip_entropy_src_reg_h,
hw_ip_otp_ctrl_reg_h,
hw_ip_pwrmgr_reg_h,
hw_ip_sensor_ctrl_reg_h,
hw_ip_sram_ctrl_reg_h,
'mask_rom_start.S',
],
link_args: rom_link_args,
dependencies: [
freestanding_headers,
sw_silicon_creator_lib_base_sec_mmio,
sw_silicon_creator_lib_driver_flash_ctrl,
sw_silicon_creator_lib_driver_uart,
sw_silicon_creator_lib_epmp_test_unlock,
sw_silicon_creator_lib_fake_deps,
sw_silicon_creator_lib_irq_asm,
sw_silicon_creator_mask_rom_epmp,
sw_lib_crt,
sw_lib_pinmux,
sw_lib_runtime_print,
sw_lib_testing_test_status,
],
link_with: static_library(
'mask_rom_epmp_test_lib',
sources: [
hw_ip_sram_ctrl_reg_h,
hw_ip_flash_ctrl_reg_h,
'mask_rom_epmp_test.c',
],
link_depends: [rom_linkfile],
)
)
# Mask ROM ePMP test images
foreach device_name, device_lib : sw_lib_arch_core_devices
mask_rom_epmp_test_elf = executable(
'mask_rom_epmp_test_' + device_name,
name_suffix: 'elf',
link_depends: rom_link_deps,
link_args: [
'-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
],
dependencies: [
device_lib,
mask_rom_epmp_test_lib,
],
)
target_name = 'mask_rom_epmp_test_@0@_' + device_name
mask_rom_epmp_test_dis = custom_target(
target_name.format('dis'),
input: mask_rom_epmp_test_elf,
kwargs: elf_to_dis_custom_target_args,
)
mask_rom_epmp_test_bin = custom_target(
target_name.format('bin'),
input: mask_rom_epmp_test_elf,
kwargs: elf_to_bin_custom_target_args,
)
mask_rom_epmp_test_vmem32 = custom_target(
target_name.format('vmem32'),
input: mask_rom_epmp_test_bin,
kwargs: bin_to_vmem32_custom_target_args,
)
mask_rom_epmp_test_vmem64 = custom_target(
target_name.format('vmem64'),
input: mask_rom_epmp_test_bin,
kwargs: bin_to_vmem64_custom_target_args,
)
mask_rom_epmp_test_scrambled = custom_target(
target_name.format('scrambled'),
command: scramble_image_command,
depend_files: scramble_image_depend_files,
input: mask_rom_epmp_test_elf,
output: scramble_image_outputs,
build_by_default: true,
)
custom_target(
target_name.format('export'),
command: export_target_command,
depend_files: [export_target_depend_files,],
input: [
mask_rom_epmp_test_elf,
mask_rom_epmp_test_dis,
mask_rom_epmp_test_bin,
mask_rom_epmp_test_vmem32,
mask_rom_epmp_test_vmem64,
mask_rom_epmp_test_scrambled,
],
output: target_name.format('export'),
build_always_stale: true,
build_by_default: true,
)
endforeach
# TODO(lowrisc/opentitan#1513): Switch to EEPROM SPI device bootstrap protocol.
# Primitive Bootstrap
primitive_bootstrap_lib = declare_dependency(
link_with: static_library (
'primitive_bootstrap_lib',
sources: [
'primitive_bootstrap.c'
],
dependencies: [
sw_lib_flash_ctrl,
sw_lib_dif_gpio,
sw_lib_dif_spi_device,
sw_silicon_creator_lib_driver_hmac,
],
),
)
# MaskROM library.
mask_rom_lib = declare_dependency(
sources: [
hw_ip_aon_timer_reg_h,
hw_ip_ast_reg_h,
hw_ip_csrng_reg_h,
hw_ip_edn_reg_h,
hw_ip_entropy_src_reg_h,
hw_ip_otp_ctrl_reg_h,
hw_ip_pwrmgr_reg_h,
hw_ip_sensor_ctrl_reg_h,
hw_ip_sram_ctrl_reg_h,
'mask_rom_start.S',
],
link_args: rom_link_args,
dependencies: [
freestanding_headers,
primitive_bootstrap_lib,
sw_silicon_creator_lib_driver_hmac,
sw_silicon_creator_lib_driver_flash_ctrl,
sw_silicon_creator_lib_driver_keymgr,
sw_silicon_creator_lib_driver_lifecycle,
sw_silicon_creator_lib_driver_pinmux,
sw_silicon_creator_lib_driver_retention_sram,
sw_silicon_creator_lib_driver_rnd,
sw_silicon_creator_lib_driver_rstmgr,
sw_silicon_creator_lib_driver_uart,
sw_silicon_creator_lib_fake_deps,
sw_silicon_creator_lib_irq_asm,
sw_silicon_creator_lib_log,
sw_silicon_creator_lib_manifest,
sw_silicon_creator_lib_shutdown,
sw_silicon_creator_mask_rom_epmp,
sw_silicon_creator_mask_rom_sigverify,
sw_silicon_creator_mask_rom_boot_policy,
sw_lib_crt,
],
link_with: static_library(
'mask_rom_lib',
sources: [
'mask_rom.c',
],
link_depends: [rom_linkfile],
)
)
# Production MaskROM images
foreach device_name, device_lib : sw_lib_arch_core_devices
mask_rom_elf = executable(
'mask_rom_' + device_name,
name_suffix: 'elf',
link_depends: rom_link_deps,
link_args: [
'-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
],
dependencies: [
device_lib,
mask_rom_lib,
],
)
target_name = 'mask_rom_@0@_' + device_name
mask_rom_dis = custom_target(
target_name.format('dis'),
input: mask_rom_elf,
kwargs: elf_to_dis_custom_target_args,
)
mask_rom_bin = custom_target(
target_name.format('bin'),
input: mask_rom_elf,
kwargs: elf_to_bin_custom_target_args,
)
mask_rom_vmem32 = custom_target(
target_name.format('vmem32'),
input: mask_rom_bin,
kwargs: bin_to_vmem32_custom_target_args,
)
mask_rom_vmem64 = custom_target(
target_name.format('vmem64'),
input: mask_rom_bin,
kwargs: bin_to_vmem64_custom_target_args,
)
mask_rom_scrambled = custom_target(
target_name.format('scrambled'),
command: scramble_image_command,
depend_files: scramble_image_depend_files,
input: mask_rom_elf,
output: scramble_image_outputs,
build_by_default: true,
)
custom_target(
target_name.format('export'),
command: export_target_command,
depend_files: [export_target_depend_files,],
input: [
mask_rom_elf,
mask_rom_dis,
mask_rom_bin,
mask_rom_vmem32,
mask_rom_vmem64,
mask_rom_scrambled,
],
output: target_name.format('export'),
build_always_stale: true,
build_by_default: true,
)
endforeach
test('sw_silicon_creator_mask_rom_boot_policy_unittest', executable(
'sw_silicon_creator_mask_rom_boot_policy_unittest',
sources: [
'boot_policy_unittest.cc',
'boot_policy.c',
],
dependencies: [
sw_vendor_gtest,
sw_lib_testing_hardened,
],
native: true,
c_args: ['-DOT_OFF_TARGET_TEST'],
cpp_args: ['-DOT_OFF_TARGET_TEST'],
),
suite: 'mask_rom',
)
test('sw_silicon_creator_mask_rom_sigverify_keys_unittest', executable(
'sw_silicon_creator_mask_rom_sigverify_keys_unittest',
sources: [
'sigverify_keys.c',
'sigverify_keys_unittest.cc',
hw_ip_otp_ctrl_reg_h,
] + sw_silicon_creator_lib_sigverify_sources_for_boot_stage_tests,
dependencies: [
sw_vendor_gtest,
sw_lib_testing_bitfield,
sw_lib_testing_hardened,
sw_lib_testing_memory,
],
native: true,
c_args: ['-DOT_OFF_TARGET_TEST'],
cpp_args: ['-DOT_OFF_TARGET_TEST'],
),
suite: 'mask_rom',
)