blob: ffdcb4bf7583bfef000a706e1e149dc4c8b6e054 [file] [log] [blame]
Sam Elliott240a2082020-07-27 21:34:34 +01001# Copyright lowRISC contributors.
2# Licensed under the Apache License, Version 2.0, see LICENSE for details.
3# SPDX-License-Identifier: Apache-2.0
4
5# Mask ROM Linker Parameters
6#
7# See sw/device/exts/common/flash_link.ld for additional info about these
8# parameters.
Michael Mundayb4d81542021-06-04 11:49:54 +01009
Sam Elliott240a2082020-07-27 21:34:34 +010010rom_linkfile = files(['mask_rom.ld'])
11rom_link_args = [
12 '-Wl,-L,@0@'.format(meson.source_root()),
13 '-Wl,-T,@0@/@1@'.format(meson.source_root(), rom_linkfile[0]),
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -040014] + embedded_target_extra_link_args
Sam Elliott240a2082020-07-27 21:34:34 +010015rom_link_deps = [rom_linkfile]
16
Alphan Ulusoya628be12021-05-14 16:24:02 -040017# Signature verification.
18sw_silicon_creator_mask_rom_sigverify = declare_dependency(
19 link_with: static_library(
20 'sw_silicon_creator_mask_rom_sigverify',
21 sources: [
Alphan Ulusoyb344ed72021-06-14 12:38:22 -040022 'sigverify_keys.c',
Alphan Ulusoy75cbf582021-06-18 14:59:41 -040023 hw_ip_otp_ctrl_reg_h,
Alphan Ulusoya628be12021-05-14 16:24:02 -040024 ],
25 dependencies: [
Alphan Ulusoy23da61a2021-06-15 09:40:48 -040026 sw_silicon_creator_lib_sigverify,
Alphan Ulusoy75cbf582021-06-18 14:59:41 -040027 sw_silicon_creator_lib_driver_otp,
28 sw_lib_bitfield,
Alphan Ulusoya628be12021-05-14 16:24:02 -040029 ],
30 ),
31)
32
Alphan Ulusoydf7475b2021-10-19 14:48:11 -040033# Mask ROM boot policy.
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -040034sw_silicon_creator_mask_rom_boot_policy = declare_dependency(
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040035 link_with: static_library(
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -040036 'sw_silicon_creator_mask_rom_boot_policy',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040037 sources: [
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -040038 'boot_policy.c',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040039 ],
Miguel Osorio488b1492021-10-21 10:22:53 -070040 dependencies: [
41 sw_silicon_creator_lib_manifest,
Alphan Ulusoya8347d02021-12-01 16:29:34 -050042 sw_silicon_creator_lib_boot_data,
Miguel Osorio488b1492021-10-21 10:22:53 -070043 ],
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040044 ),
45)
46
Michael Mundayb4d81542021-06-04 11:49:54 +010047# Mask ROM ePMP library
48sw_silicon_creator_mask_rom_epmp = declare_dependency(
49 link_with: static_library(
50 'sw_silicon_creator_mask_rom_epmp',
51 sources: [
52 'mask_rom_epmp.S',
53 'mask_rom_epmp.c',
54 ],
55 dependencies: [
56 sw_silicon_creator_lib_epmp,
57 ],
58 )
59)
60
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010061# Mask ROM ePMP test library.
62mask_rom_epmp_test_lib = declare_dependency(
63 sources: [
Michael Munday5f158272021-07-29 23:57:32 +010064 hw_ip_aon_timer_reg_h,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010065 hw_ip_entropy_src_reg_h,
66 hw_ip_csrng_reg_h,
67 hw_ip_edn_reg_h,
Michael Munday31bafb82021-07-02 15:46:11 +010068 hw_ip_sram_ctrl_reg_h,
Michael Munday5f158272021-07-29 23:57:32 +010069 hw_ip_pwrmgr_reg_h,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010070 'mask_rom_start.S',
71 ],
72 link_args: rom_link_args,
73 dependencies: [
74 freestanding_headers,
Michael Munday4ca50c32021-09-01 23:27:12 +010075 sw_silicon_creator_lib_base_sec_mmio,
Timothy Chen1e22a4b2021-09-29 15:35:01 -070076 sw_silicon_creator_lib_driver_flash_ctrl,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010077 sw_silicon_creator_lib_driver_uart,
78 sw_silicon_creator_lib_epmp_test_unlock,
79 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +010080 sw_silicon_creator_lib_irq_asm,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010081 sw_silicon_creator_mask_rom_epmp,
82 sw_lib_crt,
83 sw_lib_pinmux,
84 sw_lib_runtime_print,
85 sw_lib_testing_test_status,
86 ],
87 link_with: static_library(
88 'mask_rom_epmp_test_lib',
89 sources: [
90 hw_ip_sram_ctrl_reg_h,
91 'mask_rom_epmp_test.c',
92 ],
93 link_depends: [rom_linkfile],
94 )
95)
96
97# Mask ROM ePMP test images
98foreach device_name, device_lib : sw_lib_arch_core_devices
99 mask_rom_epmp_test_elf = executable(
100 'mask_rom_epmp_test_' + device_name,
101 name_suffix: 'elf',
102 link_depends: rom_link_deps,
103 link_args: [
104 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
105 ],
106 dependencies: [
107 device_lib,
108 mask_rom_epmp_test_lib,
109 ],
110 )
111
112 target_name = 'mask_rom_epmp_test_@0@_' + device_name
113
114 mask_rom_epmp_test_dis = custom_target(
115 target_name.format('dis'),
116 input: mask_rom_epmp_test_elf,
117 kwargs: elf_to_dis_custom_target_args,
118 )
119
120 mask_rom_epmp_test_bin = custom_target(
121 target_name.format('bin'),
122 input: mask_rom_epmp_test_elf,
123 kwargs: elf_to_bin_custom_target_args,
124 )
125
126 mask_rom_epmp_test_vmem32 = custom_target(
127 target_name.format('vmem32'),
128 input: mask_rom_epmp_test_bin,
129 kwargs: bin_to_vmem32_custom_target_args,
130 )
131
132 mask_rom_epmp_test_vmem64 = custom_target(
133 target_name.format('vmem64'),
134 input: mask_rom_epmp_test_bin,
135 kwargs: bin_to_vmem64_custom_target_args,
136 )
137
138 mask_rom_epmp_test_scrambled = custom_target(
139 target_name.format('scrambled'),
140 command: scramble_image_command,
141 depend_files: scramble_image_depend_files,
142 input: mask_rom_epmp_test_elf,
143 output: scramble_image_outputs,
144 build_by_default: true,
145 )
146
147 custom_target(
148 target_name.format('export'),
149 command: export_target_command,
150 depend_files: [export_target_depend_files,],
151 input: [
152 mask_rom_epmp_test_elf,
153 mask_rom_epmp_test_dis,
154 mask_rom_epmp_test_bin,
155 mask_rom_epmp_test_vmem32,
156 mask_rom_epmp_test_vmem64,
157 mask_rom_epmp_test_scrambled,
158 ],
159 output: target_name.format('export'),
160 build_always_stale: true,
161 build_by_default: true,
162 )
163endforeach
164
Miguel Osorio5c5e3272021-10-05 18:20:35 -0700165# TODO(lowrisc/opentitan#1513): Switch to EEPROM SPI device bootstrap protocol.
166# Primitive Bootstrap
167primitive_bootstrap_lib = declare_dependency(
168 link_with: static_library (
169 'primitive_bootstrap_lib',
170 sources: [
171 'primitive_bootstrap.c'
172 ],
173 dependencies: [
174 sw_lib_flash_ctrl,
175 sw_lib_dif_gpio,
176 sw_lib_dif_spi_device,
177 sw_silicon_creator_lib_driver_hmac,
178 ],
179 ),
180)
181
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000182# MaskROM library.
183mask_rom_lib = declare_dependency(
184 sources: [
Michael Munday5f158272021-07-29 23:57:32 +0100185 hw_ip_aon_timer_reg_h,
Miguel Osorio61121392021-05-18 17:27:04 -0700186 hw_ip_entropy_src_reg_h,
187 hw_ip_csrng_reg_h,
188 hw_ip_edn_reg_h,
Michael Munday31bafb82021-07-02 15:46:11 +0100189 hw_ip_sram_ctrl_reg_h,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000190 'mask_rom_start.S',
191 ],
192 link_args: rom_link_args,
193 dependencies: [
194 freestanding_headers,
Miguel Osorio5c5e3272021-10-05 18:20:35 -0700195 primitive_bootstrap_lib,
Miguel Osorio925320e2021-04-08 09:05:06 -0700196 sw_silicon_creator_lib_driver_hmac,
Timothy Chen1e22a4b2021-09-29 15:35:01 -0700197 sw_silicon_creator_lib_driver_flash_ctrl,
Miguel Osorio61121392021-05-18 17:27:04 -0700198 sw_silicon_creator_lib_driver_keymgr,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700199 sw_silicon_creator_lib_driver_lifecycle,
Michael Munday78d9cda2021-06-10 16:07:04 +0100200 sw_silicon_creator_lib_driver_pinmux,
Michael Mundayb1188ef2021-08-26 22:51:46 +0100201 sw_silicon_creator_lib_driver_retention_sram,
202 sw_silicon_creator_lib_driver_rstmgr,
Chris Frantz620a1a72021-04-06 16:40:30 -0700203 sw_silicon_creator_lib_driver_uart,
204 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +0100205 sw_silicon_creator_lib_irq_asm,
Michael Munday435f5cd2021-10-13 21:45:54 +0100206 sw_silicon_creator_lib_log,
Alphan Ulusoyf2e575e2021-05-22 23:48:40 -0400207 sw_silicon_creator_lib_manifest,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700208 sw_silicon_creator_lib_shutdown,
Michael Mundayb4d81542021-06-04 11:49:54 +0100209 sw_silicon_creator_mask_rom_epmp,
Alphan Ulusoya628be12021-05-14 16:24:02 -0400210 sw_silicon_creator_mask_rom_sigverify,
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400211 sw_silicon_creator_mask_rom_boot_policy,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000212 sw_lib_crt,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000213 ],
214 link_with: static_library(
215 'mask_rom_lib',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700216 sources: [
Michael Mundayb4d81542021-06-04 11:49:54 +0100217 'mask_rom.c',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700218 ],
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000219 link_depends: [rom_linkfile],
220 )
221)
222
223# Production MaskROM images
Sam Elliott240a2082020-07-27 21:34:34 +0100224foreach device_name, device_lib : sw_lib_arch_core_devices
225 mask_rom_elf = executable(
226 'mask_rom_' + device_name,
Sam Elliott240a2082020-07-27 21:34:34 +0100227 name_suffix: 'elf',
Sam Elliott240a2082020-07-27 21:34:34 +0100228 link_depends: rom_link_deps,
Chris Frantz4fa3b312021-04-09 11:41:27 -0700229 link_args: [
230 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
231 ],
Sam Elliott240a2082020-07-27 21:34:34 +0100232 dependencies: [
Silvestrs Timofejevsa3e018b2021-03-18 16:56:38 +0000233 device_lib,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000234 mask_rom_lib,
Sam Elliott240a2082020-07-27 21:34:34 +0100235 ],
236 )
237
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400238 target_name = 'mask_rom_@0@_' + device_name
239
240 mask_rom_dis = custom_target(
241 target_name.format('dis'),
Sam Elliott240a2082020-07-27 21:34:34 +0100242 input: mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400243 kwargs: elf_to_dis_custom_target_args,
244 )
245
246 mask_rom_bin = custom_target(
247 target_name.format('bin'),
248 input: mask_rom_elf,
249 kwargs: elf_to_bin_custom_target_args,
250 )
251
252 mask_rom_vmem32 = custom_target(
253 target_name.format('vmem32'),
254 input: mask_rom_bin,
255 kwargs: bin_to_vmem32_custom_target_args,
256 )
257
258 mask_rom_vmem64 = custom_target(
259 target_name.format('vmem64'),
260 input: mask_rom_bin,
261 kwargs: bin_to_vmem64_custom_target_args,
Sam Elliott240a2082020-07-27 21:34:34 +0100262 )
263
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000264 mask_rom_scrambled = custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400265 target_name.format('scrambled'),
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000266 command: scramble_image_command,
267 depend_files: scramble_image_depend_files,
268 input: mask_rom_elf,
269 output: scramble_image_outputs,
270 build_by_default: true,
271 )
272
Sam Elliott240a2082020-07-27 21:34:34 +0100273 custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400274 target_name.format('export'),
Philipp Wagner525891d2020-10-30 19:01:04 +0000275 command: export_target_command,
Sam Elliott08f926f2020-11-20 13:09:14 +0000276 depend_files: [export_target_depend_files,],
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000277 input: [
278 mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400279 mask_rom_dis,
280 mask_rom_bin,
281 mask_rom_vmem32,
282 mask_rom_vmem64,
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000283 mask_rom_scrambled,
284 ],
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400285 output: target_name.format('export'),
Sam Elliott240a2082020-07-27 21:34:34 +0100286 build_always_stale: true,
287 build_by_default: true,
288 )
289endforeach
Alphan Ulusoy6e9a3c42021-04-14 18:17:46 -0400290
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400291test('sw_silicon_creator_mask_rom_boot_policy_unittest', executable(
292 'sw_silicon_creator_mask_rom_boot_policy_unittest',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400293 sources: [
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400294 'boot_policy_unittest.cc',
295 'boot_policy.c',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400296 ],
297 dependencies: [
298 sw_vendor_gtest,
299 ],
300 native: true,
301 c_args: ['-DOT_OFF_TARGET_TEST'],
302 cpp_args: ['-DOT_OFF_TARGET_TEST'],
303 ),
304 suite: 'mask_rom',
305)
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400306
307test('sw_silicon_creator_mask_rom_sigverify_keys_unittest', executable(
308 'sw_silicon_creator_mask_rom_sigverify_keys_unittest',
309 sources: [
310 'sigverify_keys.c',
311 'sigverify_keys_unittest.cc',
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400312 hw_ip_otp_ctrl_reg_h,
Alphan Ulusoy23da61a2021-06-15 09:40:48 -0400313 ] + sw_silicon_creator_lib_sigverify_sources_for_boot_stage_tests,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400314 dependencies: [
315 sw_vendor_gtest,
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400316 sw_lib_testing_bitfield,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400317 ],
318 native: true,
Alphan Ulusoy548b1332021-08-08 01:07:52 -0400319 c_args: ['-DOT_OFF_TARGET_TEST'],
320 cpp_args: ['-DOT_OFF_TARGET_TEST'],
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400321 ),
322 suite: 'mask_rom',
323)