blob: 1b069a27f87e34f7db4b071e41bebe802ecda6f8 [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.
34sw_silicon_creator_mask_rom_romextimage = declare_dependency(
35 link_with: static_library(
36 'sw_silicon_creator_mask_rom_romextimage',
37 sources: [
38 'romextimage.c',
39 ],
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,
71 sw_silicon_creator_lib_driver_uart,
72 sw_silicon_creator_lib_epmp_test_unlock,
73 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +010074 sw_silicon_creator_lib_irq_asm,
Michael Mundayfc5fb2d2021-06-08 12:59:01 +010075 sw_silicon_creator_mask_rom_epmp,
76 sw_lib_crt,
77 sw_lib_pinmux,
78 sw_lib_runtime_print,
79 sw_lib_testing_test_status,
80 ],
81 link_with: static_library(
82 'mask_rom_epmp_test_lib',
83 sources: [
84 hw_ip_sram_ctrl_reg_h,
85 'mask_rom_epmp_test.c',
86 ],
87 link_depends: [rom_linkfile],
88 )
89)
90
91# Mask ROM ePMP test images
92foreach device_name, device_lib : sw_lib_arch_core_devices
93 mask_rom_epmp_test_elf = executable(
94 'mask_rom_epmp_test_' + device_name,
95 name_suffix: 'elf',
96 link_depends: rom_link_deps,
97 link_args: [
98 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
99 ],
100 dependencies: [
101 device_lib,
102 mask_rom_epmp_test_lib,
103 ],
104 )
105
106 target_name = 'mask_rom_epmp_test_@0@_' + device_name
107
108 mask_rom_epmp_test_dis = custom_target(
109 target_name.format('dis'),
110 input: mask_rom_epmp_test_elf,
111 kwargs: elf_to_dis_custom_target_args,
112 )
113
114 mask_rom_epmp_test_bin = custom_target(
115 target_name.format('bin'),
116 input: mask_rom_epmp_test_elf,
117 kwargs: elf_to_bin_custom_target_args,
118 )
119
120 mask_rom_epmp_test_vmem32 = custom_target(
121 target_name.format('vmem32'),
122 input: mask_rom_epmp_test_bin,
123 kwargs: bin_to_vmem32_custom_target_args,
124 )
125
126 mask_rom_epmp_test_vmem64 = custom_target(
127 target_name.format('vmem64'),
128 input: mask_rom_epmp_test_bin,
129 kwargs: bin_to_vmem64_custom_target_args,
130 )
131
132 mask_rom_epmp_test_scrambled = custom_target(
133 target_name.format('scrambled'),
134 command: scramble_image_command,
135 depend_files: scramble_image_depend_files,
136 input: mask_rom_epmp_test_elf,
137 output: scramble_image_outputs,
138 build_by_default: true,
139 )
140
141 custom_target(
142 target_name.format('export'),
143 command: export_target_command,
144 depend_files: [export_target_depend_files,],
145 input: [
146 mask_rom_epmp_test_elf,
147 mask_rom_epmp_test_dis,
148 mask_rom_epmp_test_bin,
149 mask_rom_epmp_test_vmem32,
150 mask_rom_epmp_test_vmem64,
151 mask_rom_epmp_test_scrambled,
152 ],
153 output: target_name.format('export'),
154 build_always_stale: true,
155 build_by_default: true,
156 )
157endforeach
158
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000159# MaskROM library.
160mask_rom_lib = declare_dependency(
161 sources: [
Michael Munday5f158272021-07-29 23:57:32 +0100162 hw_ip_aon_timer_reg_h,
Miguel Osorio61121392021-05-18 17:27:04 -0700163 hw_ip_entropy_src_reg_h,
164 hw_ip_csrng_reg_h,
165 hw_ip_edn_reg_h,
Michael Munday31bafb82021-07-02 15:46:11 +0100166 hw_ip_sram_ctrl_reg_h,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000167 'mask_rom_start.S',
168 ],
169 link_args: rom_link_args,
170 dependencies: [
171 freestanding_headers,
Miguel Osorio925320e2021-04-08 09:05:06 -0700172 sw_silicon_creator_lib_driver_hmac,
Miguel Osorio61121392021-05-18 17:27:04 -0700173 sw_silicon_creator_lib_driver_keymgr,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700174 sw_silicon_creator_lib_driver_lifecycle,
Michael Munday78d9cda2021-06-10 16:07:04 +0100175 sw_silicon_creator_lib_driver_pinmux,
Chris Frantz620a1a72021-04-06 16:40:30 -0700176 sw_silicon_creator_lib_driver_uart,
177 sw_silicon_creator_lib_fake_deps,
Michael Munday5f158272021-07-29 23:57:32 +0100178 sw_silicon_creator_lib_irq_asm,
Alphan Ulusoyf2e575e2021-05-22 23:48:40 -0400179 sw_silicon_creator_lib_manifest,
Chris Frantz84c3a4e2021-05-27 15:59:13 -0700180 sw_silicon_creator_lib_shutdown,
Michael Mundayb4d81542021-06-04 11:49:54 +0100181 sw_silicon_creator_mask_rom_epmp,
Alphan Ulusoya628be12021-05-14 16:24:02 -0400182 sw_silicon_creator_mask_rom_sigverify,
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400183 sw_silicon_creator_mask_rom_romextimage,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000184 sw_lib_crt,
Chris Frantz620a1a72021-04-06 16:40:30 -0700185 sw_lib_runtime_print,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000186 ],
187 link_with: static_library(
188 'mask_rom_lib',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700189 sources: [
Michael Mundayb4d81542021-06-04 11:49:54 +0100190 'mask_rom.c',
Miguel Osorio73d7ead2021-05-04 21:47:36 -0700191 ],
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000192 link_depends: [rom_linkfile],
193 )
194)
195
196# Production MaskROM images
Sam Elliott240a2082020-07-27 21:34:34 +0100197foreach device_name, device_lib : sw_lib_arch_core_devices
198 mask_rom_elf = executable(
199 'mask_rom_' + device_name,
Sam Elliott240a2082020-07-27 21:34:34 +0100200 name_suffix: 'elf',
Sam Elliott240a2082020-07-27 21:34:34 +0100201 link_depends: rom_link_deps,
Chris Frantz4fa3b312021-04-09 11:41:27 -0700202 link_args: [
203 '-Wl,-Map=@0@/mask_rom_@1@.map'.format(meson.current_build_dir(), device_name),
204 ],
Sam Elliott240a2082020-07-27 21:34:34 +0100205 dependencies: [
Silvestrs Timofejevsa3e018b2021-03-18 16:56:38 +0000206 device_lib,
Silvestrs Timofejevs6c22add2021-03-09 11:43:36 +0000207 mask_rom_lib,
Sam Elliott240a2082020-07-27 21:34:34 +0100208 ],
209 )
210
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400211 target_name = 'mask_rom_@0@_' + device_name
212
213 mask_rom_dis = custom_target(
214 target_name.format('dis'),
Sam Elliott240a2082020-07-27 21:34:34 +0100215 input: mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400216 kwargs: elf_to_dis_custom_target_args,
217 )
218
219 mask_rom_bin = custom_target(
220 target_name.format('bin'),
221 input: mask_rom_elf,
222 kwargs: elf_to_bin_custom_target_args,
223 )
224
225 mask_rom_vmem32 = custom_target(
226 target_name.format('vmem32'),
227 input: mask_rom_bin,
228 kwargs: bin_to_vmem32_custom_target_args,
229 )
230
231 mask_rom_vmem64 = custom_target(
232 target_name.format('vmem64'),
233 input: mask_rom_bin,
234 kwargs: bin_to_vmem64_custom_target_args,
Sam Elliott240a2082020-07-27 21:34:34 +0100235 )
236
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000237 mask_rom_scrambled = custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400238 target_name.format('scrambled'),
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000239 command: scramble_image_command,
240 depend_files: scramble_image_depend_files,
241 input: mask_rom_elf,
242 output: scramble_image_outputs,
243 build_by_default: true,
244 )
245
Sam Elliott240a2082020-07-27 21:34:34 +0100246 custom_target(
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400247 target_name.format('export'),
Philipp Wagner525891d2020-10-30 19:01:04 +0000248 command: export_target_command,
Sam Elliott08f926f2020-11-20 13:09:14 +0000249 depend_files: [export_target_depend_files,],
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000250 input: [
251 mask_rom_elf,
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400252 mask_rom_dis,
253 mask_rom_bin,
254 mask_rom_vmem32,
255 mask_rom_vmem64,
Rupert Swarbrick4366c822021-03-24 07:44:43 +0000256 mask_rom_scrambled,
257 ],
Alphan Ulusoy9b5b10c2021-05-13 09:49:06 -0400258 output: target_name.format('export'),
Sam Elliott240a2082020-07-27 21:34:34 +0100259 build_always_stale: true,
260 build_by_default: true,
261 )
262endforeach
Alphan Ulusoy6e9a3c42021-04-14 18:17:46 -0400263
Alphan Ulusoycfa1d3c2021-05-24 13:40:09 -0400264test('sw_silicon_creator_mask_rom_romextimage_unittest', executable(
265 'sw_silicon_creator_mask_rom_romextimage_unittest',
266 sources: [
267 'romextimage_unittest.cc',
268 'romextimage.c',
269 ],
270 dependencies: [
271 sw_vendor_gtest,
272 ],
273 native: true,
274 c_args: ['-DOT_OFF_TARGET_TEST'],
275 cpp_args: ['-DOT_OFF_TARGET_TEST'],
276 ),
277 suite: 'mask_rom',
278)
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400279
280test('sw_silicon_creator_mask_rom_sigverify_keys_unittest', executable(
281 'sw_silicon_creator_mask_rom_sigverify_keys_unittest',
282 sources: [
283 'sigverify_keys.c',
284 'sigverify_keys_unittest.cc',
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400285 hw_ip_otp_ctrl_reg_h,
Alphan Ulusoy23da61a2021-06-15 09:40:48 -0400286 ] + sw_silicon_creator_lib_sigverify_sources_for_boot_stage_tests,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400287 dependencies: [
288 sw_vendor_gtest,
Alphan Ulusoy75cbf582021-06-18 14:59:41 -0400289 sw_lib_testing_bitfield,
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400290 ],
291 native: true,
Alphan Ulusoy548b1332021-08-08 01:07:52 -0400292 c_args: ['-DOT_OFF_TARGET_TEST'],
293 cpp_args: ['-DOT_OFF_TARGET_TEST'],
Alphan Ulusoy3478c7f2021-06-15 09:10:12 -0400294 ),
295 suite: 'mask_rom',
296)