blob: 913844ba5a5573c3ff961442debc0a5941d45c5d [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 Ulusoycfa1d3c2021-05-24 13:40:09 -040033# ROM_EXT image.
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 ],
40 ),
41)
42
Michael Mundayb4d81542021-06-04 11:49:54 +010043# Mask ROM ePMP library
44sw_silicon_creator_mask_rom_epmp = declare_dependency(
45 link_with: static_library(
46 'sw_silicon_creator_mask_rom_epmp',
47 sources: [
48 'mask_rom_epmp.S',
49 'mask_rom_epmp.c',
50 ],
51 dependencies: [
52 sw_silicon_creator_lib_epmp,
53 ],
54 )
55)
56
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010057# Mask ROM ePMP test library.
58mask_rom_epmp_test_lib = declare_dependency(
59 sources: [
Michael Munday5f158272021-07-29 23:57:32 +010060 hw_ip_aon_timer_reg_h,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010061 hw_ip_entropy_src_reg_h,
62 hw_ip_csrng_reg_h,
63 hw_ip_edn_reg_h,
Michael Munday31bafb82021-07-02 15:46:11 +010064 hw_ip_sram_ctrl_reg_h,
Michael Munday5f158272021-07-29 23:57:32 +010065 hw_ip_pwrmgr_reg_h,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010066 'mask_rom_start.S',
67 ],
68 link_args: rom_link_args,
69 dependencies: [
70 freestanding_headers,
Michael Munday4ca50c32021-09-01 23:27:12 +010071 sw_silicon_creator_lib_base_sec_mmio,
Timothy Chen1e22a4b2021-09-29 15:35:01 -070072 sw_silicon_creator_lib_driver_flash_ctrl,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010073 sw_silicon_creator_lib_driver_uart,
74 sw_silicon_creator_lib_epmp_test_unlock,
75 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +010076 sw_silicon_creator_lib_irq_asm,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010077 sw_silicon_creator_mask_rom_epmp,
78 sw_lib_crt,
79 sw_lib_pinmux,
80 sw_lib_runtime_print,
81 sw_lib_testing_test_status,
82 ],
83 link_with: static_library(
84 'mask_rom_epmp_test_lib',
85 sources: [
86 hw_ip_sram_ctrl_reg_h,
87 'mask_rom_epmp_test.c',
88 ],
89 link_depends: [rom_linkfile],
90 )
91)
92
93# Mask ROM ePMP test images
94foreach device_name, device_lib : sw_lib_arch_core_devices
95 mask_rom_epmp_test_elf = executable(
96 'mask_rom_epmp_test_' + device_name,
97 name_suffix: 'elf',
98 link_depends: rom_link_deps,
99 link_args: [
100 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
101 ],
102 dependencies: [
103 device_lib,
104 mask_rom_epmp_test_lib,
105 ],
106 )
107
108 target_name = 'mask_rom_epmp_test_@0@_' + device_name
109
110 mask_rom_epmp_test_dis = custom_target(
111 target_name.format('dis'),
112 input: mask_rom_epmp_test_elf,
113 kwargs: elf_to_dis_custom_target_args,
114 )
115
116 mask_rom_epmp_test_bin = custom_target(
117 target_name.format('bin'),
118 input: mask_rom_epmp_test_elf,
119 kwargs: elf_to_bin_custom_target_args,
120 )
121
122 mask_rom_epmp_test_vmem32 = custom_target(
123 target_name.format('vmem32'),
124 input: mask_rom_epmp_test_bin,
125 kwargs: bin_to_vmem32_custom_target_args,
126 )
127
128 mask_rom_epmp_test_vmem64 = custom_target(
129 target_name.format('vmem64'),
130 input: mask_rom_epmp_test_bin,
131 kwargs: bin_to_vmem64_custom_target_args,
132 )
133
134 mask_rom_epmp_test_scrambled = custom_target(
135 target_name.format('scrambled'),
136 command: scramble_image_command,
137 depend_files: scramble_image_depend_files,
138 input: mask_rom_epmp_test_elf,
139 output: scramble_image_outputs,
140 build_by_default: true,
141 )
142
143 custom_target(
144 target_name.format('export'),
145 command: export_target_command,
146 depend_files: [export_target_depend_files,],
147 input: [
148 mask_rom_epmp_test_elf,
149 mask_rom_epmp_test_dis,
150 mask_rom_epmp_test_bin,
151 mask_rom_epmp_test_vmem32,
152 mask_rom_epmp_test_vmem64,
153 mask_rom_epmp_test_scrambled,
154 ],
155 output: target_name.format('export'),
156 build_always_stale: true,
157 build_by_default: true,
158 )
159endforeach
160
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000161# MaskROM library.
162mask_rom_lib = declare_dependency(
163 sources: [
Michael Munday5f158272021-07-29 23:57:32 +0100164 hw_ip_aon_timer_reg_h,
Miguel Osorio61121392021-05-18 17:27:04 -0700165 hw_ip_entropy_src_reg_h,
166 hw_ip_csrng_reg_h,
167 hw_ip_edn_reg_h,
Michael Munday31bafb82021-07-02 15:46:11 +0100168 hw_ip_sram_ctrl_reg_h,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000169 'mask_rom_start.S',
170 ],
171 link_args: rom_link_args,
172 dependencies: [
173 freestanding_headers,
Miguel Osorio925320e2021-04-08 09:05:06 -0700174 sw_silicon_creator_lib_driver_hmac,
Timothy Chen1e22a4b2021-09-29 15:35:01 -0700175 sw_silicon_creator_lib_driver_flash_ctrl,
Miguel Osorio61121392021-05-18 17:27:04 -0700176 sw_silicon_creator_lib_driver_keymgr,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700177 sw_silicon_creator_lib_driver_lifecycle,
Michael Munday78d9cda2021-06-10 16:07:04 +0100178 sw_silicon_creator_lib_driver_pinmux,
Michael Mundayb1188ef2021-08-26 22:51:46 +0100179 sw_silicon_creator_lib_driver_retention_sram,
180 sw_silicon_creator_lib_driver_rstmgr,
Chris Frantz620a1a72021-04-06 16:40:30 -0700181 sw_silicon_creator_lib_driver_uart,
182 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +0100183 sw_silicon_creator_lib_irq_asm,
Alphan Ulusoyf2e575e2021-05-22 23:48:40 -0400184 sw_silicon_creator_lib_manifest,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700185 sw_silicon_creator_lib_shutdown,
Michael Mundayb4d81542021-06-04 11:49:54 +0100186 sw_silicon_creator_mask_rom_epmp,
Alphan Ulusoya628be12021-05-14 16:24:02 -0400187 sw_silicon_creator_mask_rom_sigverify,
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400188 sw_silicon_creator_mask_rom_boot_policy,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000189 sw_lib_crt,
Chris Frantz620a1a72021-04-06 16:40:30 -0700190 sw_lib_runtime_print,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000191 ],
192 link_with: static_library(
193 'mask_rom_lib',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700194 sources: [
Michael Mundayb4d81542021-06-04 11:49:54 +0100195 'mask_rom.c',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700196 ],
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000197 link_depends: [rom_linkfile],
198 )
199)
200
201# Production MaskROM images
Sam Elliott240a2082020-07-27 21:34:34 +0100202foreach device_name, device_lib : sw_lib_arch_core_devices
203 mask_rom_elf = executable(
204 'mask_rom_' + device_name,
Sam Elliott240a2082020-07-27 21:34:34 +0100205 name_suffix: 'elf',
Sam Elliott240a2082020-07-27 21:34:34 +0100206 link_depends: rom_link_deps,
Chris Frantz4fa3b312021-04-09 11:41:27 -0700207 link_args: [
208 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
209 ],
Sam Elliott240a2082020-07-27 21:34:34 +0100210 dependencies: [
Silvestrs Timofejevsa3e018b2021-03-18 16:56:38 +0000211 device_lib,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000212 mask_rom_lib,
Sam Elliott240a2082020-07-27 21:34:34 +0100213 ],
214 )
215
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400216 target_name = 'mask_rom_@0@_' + device_name
217
218 mask_rom_dis = custom_target(
219 target_name.format('dis'),
Sam Elliott240a2082020-07-27 21:34:34 +0100220 input: mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400221 kwargs: elf_to_dis_custom_target_args,
222 )
223
224 mask_rom_bin = custom_target(
225 target_name.format('bin'),
226 input: mask_rom_elf,
227 kwargs: elf_to_bin_custom_target_args,
228 )
229
230 mask_rom_vmem32 = custom_target(
231 target_name.format('vmem32'),
232 input: mask_rom_bin,
233 kwargs: bin_to_vmem32_custom_target_args,
234 )
235
236 mask_rom_vmem64 = custom_target(
237 target_name.format('vmem64'),
238 input: mask_rom_bin,
239 kwargs: bin_to_vmem64_custom_target_args,
Sam Elliott240a2082020-07-27 21:34:34 +0100240 )
241
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000242 mask_rom_scrambled = custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400243 target_name.format('scrambled'),
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000244 command: scramble_image_command,
245 depend_files: scramble_image_depend_files,
246 input: mask_rom_elf,
247 output: scramble_image_outputs,
248 build_by_default: true,
249 )
250
Sam Elliott240a2082020-07-27 21:34:34 +0100251 custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400252 target_name.format('export'),
Philipp Wagner525891d2020-10-30 19:01:04 +0000253 command: export_target_command,
Sam Elliott08f926f2020-11-20 13:09:14 +0000254 depend_files: [export_target_depend_files,],
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000255 input: [
256 mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400257 mask_rom_dis,
258 mask_rom_bin,
259 mask_rom_vmem32,
260 mask_rom_vmem64,
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000261 mask_rom_scrambled,
262 ],
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400263 output: target_name.format('export'),
Sam Elliott240a2082020-07-27 21:34:34 +0100264 build_always_stale: true,
265 build_by_default: true,
266 )
267endforeach
Alphan Ulusoy6e9a3c42021-04-14 18:17:46 -0400268
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400269test('sw_silicon_creator_mask_rom_boot_policy_unittest', executable(
270 'sw_silicon_creator_mask_rom_boot_policy_unittest',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400271 sources: [
Alphan Ulusoy5a8c8a02021-08-21 12:58:13 -0400272 'boot_policy_unittest.cc',
273 'boot_policy.c',
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400274 ],
275 dependencies: [
276 sw_vendor_gtest,
277 ],
278 native: true,
279 c_args: ['-DOT_OFF_TARGET_TEST'],
280 cpp_args: ['-DOT_OFF_TARGET_TEST'],
281 ),
282 suite: 'mask_rom',
283)
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400284
285test('sw_silicon_creator_mask_rom_sigverify_keys_unittest', executable(
286 'sw_silicon_creator_mask_rom_sigverify_keys_unittest',
287 sources: [
288 'sigverify_keys.c',
289 'sigverify_keys_unittest.cc',
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400290 hw_ip_otp_ctrl_reg_h,
Alphan Ulusoy23da61a2021-06-15 09:40:48 -0400291 ] + sw_silicon_creator_lib_sigverify_sources_for_boot_stage_tests,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400292 dependencies: [
293 sw_vendor_gtest,
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400294 sw_lib_testing_bitfield,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400295 ],
296 native: true,
Alphan Ulusoy548b1332021-08-08 01:07:52 -0400297 c_args: ['-DOT_OFF_TARGET_TEST'],
298 cpp_args: ['-DOT_OFF_TARGET_TEST'],
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400299 ),
300 suite: 'mask_rom',
301)