blob: d0ef04efaa27f7b3a9948cd8c03aa452081b0d51 [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#
Timothy Trippel563312c2022-02-02 15:10:28 -08007# See `sw/device/lib/testing/test_framework/ottf.ld` for additional info
Timothy Trippel578e7762021-12-16 14:27:47 -08008# about these 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,
Alphan Ulusoy25808df2022-02-07 11:00:48 -050028 sw_silicon_creator_lib_driver_rnd,
Alphan Ulusoy75cbf582021-06-18 14:59:41 -040029 sw_lib_bitfield,
Alphan Ulusoya628be12021-05-14 16:24:02 -040030 ],
31 ),
32)
33
Alphan Ulusoydf7475b2021-10-19 14:48:11 -040034# Mask ROM boot policy.
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -040035sw_silicon_creator_mask_rom_boot_policy = declare_dependency(
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040036 link_with: static_library(
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -040037 'sw_silicon_creator_mask_rom_boot_policy',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040038 sources: [
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -040039 'boot_policy.c',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040040 ],
Miguel Osorio488b1492021-10-21 10:22:53 -070041 dependencies: [
42 sw_silicon_creator_lib_manifest,
Alphan Ulusoya8347d02021-12-01 16:29:34 -050043 sw_silicon_creator_lib_boot_data,
Alphan Ulusoyaba8a652022-01-11 15:07:12 -050044 sw_silicon_creator_lib_shutdown,
45 sw_lib_hardened,
Miguel Osorio488b1492021-10-21 10:22:53 -070046 ],
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -040047 ),
48)
49
Michael Mundayb4d81542021-06-04 11:49:54 +010050# Mask ROM ePMP library
51sw_silicon_creator_mask_rom_epmp = declare_dependency(
52 link_with: static_library(
53 'sw_silicon_creator_mask_rom_epmp',
54 sources: [
55 'mask_rom_epmp.S',
56 'mask_rom_epmp.c',
57 ],
58 dependencies: [
59 sw_silicon_creator_lib_epmp,
60 ],
61 )
62)
63
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010064# Mask ROM ePMP test library.
65mask_rom_epmp_test_lib = declare_dependency(
66 sources: [
Michael Munday5f158272021-07-29 23:57:32 +010067 hw_ip_aon_timer_reg_h,
Michael Munday11ea58d2021-12-07 10:40:38 +000068 hw_ip_ast_reg_h,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010069 hw_ip_csrng_reg_h,
70 hw_ip_edn_reg_h,
Michael Munday11ea58d2021-12-07 10:40:38 +000071 hw_ip_entropy_src_reg_h,
72 hw_ip_otp_ctrl_reg_h,
Michael Mundayca1abd12022-01-20 12:47:33 +000073 hw_ip_pwrmgr_reg_h,
Michael Munday11ea58d2021-12-07 10:40:38 +000074 hw_ip_sensor_ctrl_reg_h,
Michael Munday31bafb82021-07-02 15:46:11 +010075 hw_ip_sram_ctrl_reg_h,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010076 'mask_rom_start.S',
77 ],
78 link_args: rom_link_args,
79 dependencies: [
80 freestanding_headers,
Michael Munday4ca50c32021-09-01 23:27:12 +010081 sw_silicon_creator_lib_base_sec_mmio,
Timothy Chen1e22a4b2021-09-29 15:35:01 -070082 sw_silicon_creator_lib_driver_flash_ctrl,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010083 sw_silicon_creator_lib_driver_uart,
84 sw_silicon_creator_lib_epmp_test_unlock,
85 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +010086 sw_silicon_creator_lib_irq_asm,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010087 sw_silicon_creator_mask_rom_epmp,
88 sw_lib_crt,
89 sw_lib_pinmux,
90 sw_lib_runtime_print,
91 sw_lib_testing_test_status,
92 ],
93 link_with: static_library(
94 'mask_rom_epmp_test_lib',
95 sources: [
96 hw_ip_sram_ctrl_reg_h,
Alphan Ulusoye8aadda2022-01-23 11:22:30 -050097 hw_ip_flash_ctrl_reg_h,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010098 'mask_rom_epmp_test.c',
99 ],
100 link_depends: [rom_linkfile],
101 )
102)
103
104# Mask ROM ePMP test images
105foreach device_name, device_lib : sw_lib_arch_core_devices
106 mask_rom_epmp_test_elf = executable(
107 'mask_rom_epmp_test_' + device_name,
108 name_suffix: 'elf',
109 link_depends: rom_link_deps,
110 link_args: [
111 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
112 ],
113 dependencies: [
114 device_lib,
115 mask_rom_epmp_test_lib,
116 ],
117 )
118
119 target_name = 'mask_rom_epmp_test_@0@_' + device_name
120
121 mask_rom_epmp_test_dis = custom_target(
122 target_name.format('dis'),
123 input: mask_rom_epmp_test_elf,
124 kwargs: elf_to_dis_custom_target_args,
125 )
126
127 mask_rom_epmp_test_bin = custom_target(
128 target_name.format('bin'),
129 input: mask_rom_epmp_test_elf,
130 kwargs: elf_to_bin_custom_target_args,
131 )
132
133 mask_rom_epmp_test_vmem32 = custom_target(
134 target_name.format('vmem32'),
135 input: mask_rom_epmp_test_bin,
136 kwargs: bin_to_vmem32_custom_target_args,
137 )
138
139 mask_rom_epmp_test_vmem64 = custom_target(
140 target_name.format('vmem64'),
141 input: mask_rom_epmp_test_bin,
142 kwargs: bin_to_vmem64_custom_target_args,
143 )
144
145 mask_rom_epmp_test_scrambled = custom_target(
146 target_name.format('scrambled'),
147 command: scramble_image_command,
148 depend_files: scramble_image_depend_files,
149 input: mask_rom_epmp_test_elf,
150 output: scramble_image_outputs,
151 build_by_default: true,
152 )
153
154 custom_target(
155 target_name.format('export'),
156 command: export_target_command,
157 depend_files: [export_target_depend_files,],
158 input: [
159 mask_rom_epmp_test_elf,
160 mask_rom_epmp_test_dis,
161 mask_rom_epmp_test_bin,
162 mask_rom_epmp_test_vmem32,
163 mask_rom_epmp_test_vmem64,
164 mask_rom_epmp_test_scrambled,
165 ],
166 output: target_name.format('export'),
167 build_always_stale: true,
168 build_by_default: true,
169 )
170endforeach
171
Miguel Osorio5c5e3272021-10-05 18:20:35 -0700172# TODO(lowrisc/opentitan#1513): Switch to EEPROM SPI device bootstrap protocol.
173# Primitive Bootstrap
174primitive_bootstrap_lib = declare_dependency(
175 link_with: static_library (
176 'primitive_bootstrap_lib',
177 sources: [
178 'primitive_bootstrap.c'
179 ],
180 dependencies: [
181 sw_lib_flash_ctrl,
182 sw_lib_dif_gpio,
183 sw_lib_dif_spi_device,
184 sw_silicon_creator_lib_driver_hmac,
185 ],
186 ),
187)
188
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000189# MaskROM library.
190mask_rom_lib = declare_dependency(
191 sources: [
Michael Munday5f158272021-07-29 23:57:32 +0100192 hw_ip_aon_timer_reg_h,
Michael Munday11ea58d2021-12-07 10:40:38 +0000193 hw_ip_ast_reg_h,
Miguel Osorio61121392021-05-18 17:27:04 -0700194 hw_ip_csrng_reg_h,
195 hw_ip_edn_reg_h,
Michael Munday11ea58d2021-12-07 10:40:38 +0000196 hw_ip_entropy_src_reg_h,
197 hw_ip_otp_ctrl_reg_h,
Michael Mundayca1abd12022-01-20 12:47:33 +0000198 hw_ip_pwrmgr_reg_h,
Michael Munday11ea58d2021-12-07 10:40:38 +0000199 hw_ip_sensor_ctrl_reg_h,
Michael Munday31bafb82021-07-02 15:46:11 +0100200 hw_ip_sram_ctrl_reg_h,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000201 'mask_rom_start.S',
202 ],
203 link_args: rom_link_args,
204 dependencies: [
205 freestanding_headers,
Miguel Osorio5c5e3272021-10-05 18:20:35 -0700206 primitive_bootstrap_lib,
Miguel Osorio925320e2021-04-08 09:05:06 -0700207 sw_silicon_creator_lib_driver_hmac,
Timothy Chen1e22a4b2021-09-29 15:35:01 -0700208 sw_silicon_creator_lib_driver_flash_ctrl,
Miguel Osorio61121392021-05-18 17:27:04 -0700209 sw_silicon_creator_lib_driver_keymgr,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700210 sw_silicon_creator_lib_driver_lifecycle,
Michael Munday78d9cda2021-06-10 16:07:04 +0100211 sw_silicon_creator_lib_driver_pinmux,
Michael Mundayb1188ef2021-08-26 22:51:46 +0100212 sw_silicon_creator_lib_driver_retention_sram,
Miguel Osorioa4172092022-01-18 10:07:43 -0800213 sw_silicon_creator_lib_driver_rnd,
Michael Mundayb1188ef2021-08-26 22:51:46 +0100214 sw_silicon_creator_lib_driver_rstmgr,
Chris Frantz620a1a72021-04-06 16:40:30 -0700215 sw_silicon_creator_lib_driver_uart,
216 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +0100217 sw_silicon_creator_lib_irq_asm,
Michael Munday435f5cd2021-10-13 21:45:54 +0100218 sw_silicon_creator_lib_log,
Alphan Ulusoyf2e575e2021-05-22 23:48:40 -0400219 sw_silicon_creator_lib_manifest,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700220 sw_silicon_creator_lib_shutdown,
Michael Mundayb4d81542021-06-04 11:49:54 +0100221 sw_silicon_creator_mask_rom_epmp,
Alphan Ulusoya628be12021-05-14 16:24:02 -0400222 sw_silicon_creator_mask_rom_sigverify,
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400223 sw_silicon_creator_mask_rom_boot_policy,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000224 sw_lib_crt,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000225 ],
226 link_with: static_library(
227 'mask_rom_lib',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700228 sources: [
Michael Mundayb4d81542021-06-04 11:49:54 +0100229 'mask_rom.c',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700230 ],
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000231 link_depends: [rom_linkfile],
232 )
233)
234
235# Production MaskROM images
Sam Elliott240a2082020-07-27 21:34:34 +0100236foreach device_name, device_lib : sw_lib_arch_core_devices
237 mask_rom_elf = executable(
238 'mask_rom_' + device_name,
Sam Elliott240a2082020-07-27 21:34:34 +0100239 name_suffix: 'elf',
Sam Elliott240a2082020-07-27 21:34:34 +0100240 link_depends: rom_link_deps,
Chris Frantz4fa3b312021-04-09 11:41:27 -0700241 link_args: [
242 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
243 ],
Sam Elliott240a2082020-07-27 21:34:34 +0100244 dependencies: [
Silvestrs Timofejevsa3e018b2021-03-18 16:56:38 +0000245 device_lib,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000246 mask_rom_lib,
Sam Elliott240a2082020-07-27 21:34:34 +0100247 ],
248 )
249
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400250 target_name = 'mask_rom_@0@_' + device_name
251
252 mask_rom_dis = custom_target(
253 target_name.format('dis'),
Sam Elliott240a2082020-07-27 21:34:34 +0100254 input: mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400255 kwargs: elf_to_dis_custom_target_args,
256 )
257
258 mask_rom_bin = custom_target(
259 target_name.format('bin'),
260 input: mask_rom_elf,
261 kwargs: elf_to_bin_custom_target_args,
262 )
263
264 mask_rom_vmem32 = custom_target(
265 target_name.format('vmem32'),
266 input: mask_rom_bin,
267 kwargs: bin_to_vmem32_custom_target_args,
268 )
269
270 mask_rom_vmem64 = custom_target(
271 target_name.format('vmem64'),
272 input: mask_rom_bin,
273 kwargs: bin_to_vmem64_custom_target_args,
Sam Elliott240a2082020-07-27 21:34:34 +0100274 )
275
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000276 mask_rom_scrambled = custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400277 target_name.format('scrambled'),
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000278 command: scramble_image_command,
279 depend_files: scramble_image_depend_files,
280 input: mask_rom_elf,
281 output: scramble_image_outputs,
282 build_by_default: true,
283 )
284
Sam Elliott240a2082020-07-27 21:34:34 +0100285 custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400286 target_name.format('export'),
Philipp Wagner525891d2020-10-30 19:01:04 +0000287 command: export_target_command,
Sam Elliott08f926f2020-11-20 13:09:14 +0000288 depend_files: [export_target_depend_files,],
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000289 input: [
290 mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400291 mask_rom_dis,
292 mask_rom_bin,
293 mask_rom_vmem32,
294 mask_rom_vmem64,
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000295 mask_rom_scrambled,
296 ],
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400297 output: target_name.format('export'),
Sam Elliott240a2082020-07-27 21:34:34 +0100298 build_always_stale: true,
299 build_by_default: true,
300 )
301endforeach
Alphan Ulusoy6e9a3c42021-04-14 18:17:46 -0400302
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400303test('sw_silicon_creator_mask_rom_boot_policy_unittest', executable(
304 'sw_silicon_creator_mask_rom_boot_policy_unittest',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400305 sources: [
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400306 'boot_policy_unittest.cc',
307 'boot_policy.c',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400308 ],
309 dependencies: [
310 sw_vendor_gtest,
Alphan Ulusoyaba8a652022-01-11 15:07:12 -0500311 sw_lib_testing_hardened,
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400312 ],
313 native: true,
314 c_args: ['-DOT_OFF_TARGET_TEST'],
315 cpp_args: ['-DOT_OFF_TARGET_TEST'],
316 ),
317 suite: 'mask_rom',
318)
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400319
320test('sw_silicon_creator_mask_rom_sigverify_keys_unittest', executable(
321 'sw_silicon_creator_mask_rom_sigverify_keys_unittest',
322 sources: [
323 'sigverify_keys.c',
324 'sigverify_keys_unittest.cc',
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400325 hw_ip_otp_ctrl_reg_h,
Alphan Ulusoy23da61a2021-06-15 09:40:48 -0400326 ] + sw_silicon_creator_lib_sigverify_sources_for_boot_stage_tests,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400327 dependencies: [
328 sw_vendor_gtest,
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400329 sw_lib_testing_bitfield,
Alphan Ulusoy5f1069a2022-01-23 13:25:14 -0500330 sw_lib_testing_hardened,
Jade Philipooma45456a2022-01-17 10:25:16 +0000331 sw_lib_testing_memory,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400332 ],
333 native: true,
Alphan Ulusoy548b1332021-08-08 01:07:52 -0400334 c_args: ['-DOT_OFF_TARGET_TEST'],
335 cpp_args: ['-DOT_OFF_TARGET_TEST'],
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400336 ),
337 suite: 'mask_rom',
338)