Loading...
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * Copyright 2018-2023 Broadcom Inc. All rights reserved.
4 */
5#ifndef MPI30_IMAGE_H
6#define MPI30_IMAGE_H 1
7struct mpi3_comp_image_version {
8 __le16 build_num;
9 __le16 customer_id;
10 u8 phase_minor;
11 u8 phase_major;
12 u8 gen_minor;
13 u8 gen_major;
14};
15
16struct mpi3_hash_exclusion_format {
17 __le32 offset;
18 __le32 size;
19};
20
21#define MPI3_IMAGE_HASH_EXCUSION_NUM (4)
22struct mpi3_component_image_header {
23 __le32 signature0;
24 __le32 load_address;
25 __le32 data_size;
26 __le32 start_offset;
27 __le32 signature1;
28 __le32 flash_offset;
29 __le32 image_size;
30 __le32 version_string_offset;
31 __le32 build_date_string_offset;
32 __le32 build_time_string_offset;
33 __le32 environment_variable_offset;
34 __le32 application_specific;
35 __le32 signature2;
36 __le32 header_size;
37 __le32 crc;
38 __le32 flags;
39 __le32 secondary_flash_offset;
40 __le32 etp_offset;
41 __le32 etp_size;
42 union mpi3_version_union rmc_interface_version;
43 union mpi3_version_union etp_interface_version;
44 struct mpi3_comp_image_version component_image_version;
45 struct mpi3_hash_exclusion_format hash_exclusion[MPI3_IMAGE_HASH_EXCUSION_NUM];
46 __le32 next_image_header_offset;
47 union mpi3_version_union security_version;
48 __le32 reserved84[31];
49};
50
51#define MPI3_IMAGE_HEADER_SIGNATURE0_MPI3 (0xeb00003e)
52#define MPI3_IMAGE_HEADER_LOAD_ADDRESS_INVALID (0x00000000)
53#define MPI3_IMAGE_HEADER_SIGNATURE1_APPLICATION (0x20505041)
54#define MPI3_IMAGE_HEADER_SIGNATURE1_FIRST_MUTABLE (0x20434d46)
55#define MPI3_IMAGE_HEADER_SIGNATURE1_BSP (0x20505342)
56#define MPI3_IMAGE_HEADER_SIGNATURE1_ROM_BIOS (0x534f4942)
57#define MPI3_IMAGE_HEADER_SIGNATURE1_HII_X64 (0x4d494948)
58#define MPI3_IMAGE_HEADER_SIGNATURE1_HII_ARM (0x41494948)
59#define MPI3_IMAGE_HEADER_SIGNATURE1_CPLD (0x444c5043)
60#define MPI3_IMAGE_HEADER_SIGNATURE1_SPD (0x20445053)
61#define MPI3_IMAGE_HEADER_SIGNATURE1_GAS_GAUGE (0x20534147)
62#define MPI3_IMAGE_HEADER_SIGNATURE1_PBLP (0x504c4250)
63#define MPI3_IMAGE_HEADER_SIGNATURE1_MANIFEST (0x464e414d)
64#define MPI3_IMAGE_HEADER_SIGNATURE1_OEM (0x204d454f)
65#define MPI3_IMAGE_HEADER_SIGNATURE1_RMC (0x20434d52)
66#define MPI3_IMAGE_HEADER_SIGNATURE1_SMM (0x204d4d53)
67#define MPI3_IMAGE_HEADER_SIGNATURE1_PSW (0x20575350)
68#define MPI3_IMAGE_HEADER_SIGNATURE2_VALUE (0x50584546)
69#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_MASK (0x00000030)
70#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_CDI (0x00000000)
71#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_DI (0x00000010)
72#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_NVDATA (0x00000008)
73#define MPI3_IMAGE_HEADER_FLAGS_REQUIRES_ACTIVATION (0x00000004)
74#define MPI3_IMAGE_HEADER_FLAGS_COMPRESSED (0x00000002)
75#define MPI3_IMAGE_HEADER_FLAGS_FLASH (0x00000001)
76#define MPI3_IMAGE_HEADER_SIGNATURE0_OFFSET (0x00)
77#define MPI3_IMAGE_HEADER_LOAD_ADDRESS_OFFSET (0x04)
78#define MPI3_IMAGE_HEADER_DATA_SIZE_OFFSET (0x08)
79#define MPI3_IMAGE_HEADER_START_OFFSET_OFFSET (0x0c)
80#define MPI3_IMAGE_HEADER_SIGNATURE1_OFFSET (0x10)
81#define MPI3_IMAGE_HEADER_FLASH_OFFSET_OFFSET (0x14)
82#define MPI3_IMAGE_HEADER_FLASH_SIZE_OFFSET (0x18)
83#define MPI3_IMAGE_HEADER_VERSION_STRING_OFFSET_OFFSET (0x1c)
84#define MPI3_IMAGE_HEADER_BUILD_DATE_STRING_OFFSET_OFFSET (0x20)
85#define MPI3_IMAGE_HEADER_BUILD_TIME_OFFSET_OFFSET (0x24)
86#define MPI3_IMAGE_HEADER_ENVIROMENT_VAR_OFFSET_OFFSET (0x28)
87#define MPI3_IMAGE_HEADER_APPLICATION_SPECIFIC_OFFSET (0x2c)
88#define MPI3_IMAGE_HEADER_SIGNATURE2_OFFSET (0x30)
89#define MPI3_IMAGE_HEADER_HEADER_SIZE_OFFSET (0x34)
90#define MPI3_IMAGE_HEADER_CRC_OFFSET (0x38)
91#define MPI3_IMAGE_HEADER_FLAGS_OFFSET (0x3c)
92#define MPI3_IMAGE_HEADER_SECONDARY_FLASH_OFFSET_OFFSET (0x40)
93#define MPI3_IMAGE_HEADER_ETP_OFFSET_OFFSET (0x44)
94#define MPI3_IMAGE_HEADER_ETP_SIZE_OFFSET (0x48)
95#define MPI3_IMAGE_HEADER_RMC_INTERFACE_VER_OFFSET (0x4c)
96#define MPI3_IMAGE_HEADER_ETP_INTERFACE_VER_OFFSET (0x50)
97#define MPI3_IMAGE_HEADER_COMPONENT_IMAGE_VER_OFFSET (0x54)
98#define MPI3_IMAGE_HEADER_HASH_EXCLUSION_OFFSET (0x5c)
99#define MPI3_IMAGE_HEADER_NEXT_IMAGE_HEADER_OFFSET_OFFSET (0x7c)
100#define MPI3_IMAGE_HEADER_SIZE (0x100)
101#ifndef MPI3_CI_MANIFEST_MPI_MAX
102#define MPI3_CI_MANIFEST_MPI_MAX (1)
103#endif
104struct mpi3_ci_manifest_mpi_comp_image_ref {
105 __le32 signature1;
106 __le32 reserved04[3];
107 struct mpi3_comp_image_version component_image_version;
108 __le32 component_image_version_string_offset;
109 __le32 crc;
110};
111
112struct mpi3_ci_manifest_mpi {
113 u8 manifest_type;
114 u8 reserved01[3];
115 __le32 reserved04[3];
116 u8 num_image_references;
117 u8 release_level;
118 __le16 reserved12;
119 __le16 reserved14;
120 __le16 flags;
121 __le32 reserved18[2];
122 __le16 vendor_id;
123 __le16 device_id;
124 __le16 subsystem_vendor_id;
125 __le16 subsystem_id;
126 __le32 reserved28[2];
127 union mpi3_version_union package_security_version;
128 __le32 reserved34;
129 struct mpi3_comp_image_version package_version;
130 __le32 package_version_string_offset;
131 __le32 package_build_date_string_offset;
132 __le32 package_build_time_string_offset;
133 __le32 reserved4c;
134 __le32 diag_authorization_identifier[16];
135 struct mpi3_ci_manifest_mpi_comp_image_ref component_image_ref[MPI3_CI_MANIFEST_MPI_MAX];
136};
137
138#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DEV (0x00)
139#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PREALPHA (0x10)
140#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_ALPHA (0x20)
141#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_BETA (0x30)
142#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_RC (0x40)
143#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_GCA (0x50)
144#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_POINT (0x60)
145#define MPI3_CI_MANIFEST_MPI_FLAGS_DIAG_AUTHORIZATION (0x01)
146#define MPI3_CI_MANIFEST_MPI_SUBSYSTEMID_IGNORED (0xffff)
147#define MPI3_CI_MANIFEST_MPI_PKG_VER_STR_OFF_UNSPECIFIED (0x00000000)
148#define MPI3_CI_MANIFEST_MPI_PKG_BUILD_DATE_STR_OFF_UNSPECIFIED (0x00000000)
149#define MPI3_CI_MANIFEST_MPI_PKG_BUILD_TIME_STR_OFF_UNSPECIFIED (0x00000000)
150union mpi3_ci_manifest {
151 struct mpi3_ci_manifest_mpi mpi;
152 __le32 dword[1];
153};
154
155#define MPI3_CI_MANIFEST_TYPE_MPI (0x00)
156struct mpi3_extended_image_header {
157 u8 image_type;
158 u8 reserved01[3];
159 __le32 checksum;
160 __le32 image_size;
161 __le32 next_image_header_offset;
162 __le32 reserved10[4];
163 __le32 identify_string[8];
164};
165
166#define MPI3_EXT_IMAGE_IMAGETYPE_OFFSET (0x00)
167#define MPI3_EXT_IMAGE_IMAGESIZE_OFFSET (0x08)
168#define MPI3_EXT_IMAGE_NEXTIMAGE_OFFSET (0x0c)
169#define MPI3_EXT_IMAGE_HEADER_SIZE (0x40)
170#define MPI3_EXT_IMAGE_TYPE_UNSPECIFIED (0x00)
171#define MPI3_EXT_IMAGE_TYPE_NVDATA (0x03)
172#define MPI3_EXT_IMAGE_TYPE_SUPPORTED_DEVICES (0x07)
173#define MPI3_EXT_IMAGE_TYPE_ENCRYPTED_HASH (0x09)
174#define MPI3_EXT_IMAGE_TYPE_RDE (0x0a)
175#define MPI3_EXT_IMAGE_TYPE_AUXILIARY_PROCESSOR (0x0b)
176#define MPI3_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC (0x80)
177#define MPI3_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC (0xff)
178struct mpi3_supported_device {
179 __le16 device_id;
180 __le16 vendor_id;
181 __le16 device_id_mask;
182 __le16 reserved06;
183 u8 low_pci_rev;
184 u8 high_pci_rev;
185 __le16 reserved0a;
186 __le32 reserved0c;
187};
188
189#ifndef MPI3_SUPPORTED_DEVICE_MAX
190#define MPI3_SUPPORTED_DEVICE_MAX (1)
191#endif
192struct mpi3_supported_devices_data {
193 u8 image_version;
194 u8 reserved01;
195 u8 num_devices;
196 u8 reserved03;
197 __le32 reserved04;
198 struct mpi3_supported_device supported_device[MPI3_SUPPORTED_DEVICE_MAX];
199};
200
201#ifndef MPI3_ENCRYPTED_HASH_MAX
202#define MPI3_ENCRYPTED_HASH_MAX (1)
203#endif
204struct mpi3_encrypted_hash_entry {
205 u8 hash_image_type;
206 u8 hash_algorithm;
207 u8 encryption_algorithm;
208 u8 reserved03;
209 __le32 reserved04;
210 __le32 encrypted_hash[MPI3_ENCRYPTED_HASH_MAX];
211};
212
213#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_SIGNATURE (0x03)
214#define MPI3_HASH_ALGORITHM_VERSION_MASK (0xe0)
215#define MPI3_HASH_ALGORITHM_VERSION_NONE (0x00)
216#define MPI3_HASH_ALGORITHM_VERSION_SHA1 (0x20)
217#define MPI3_HASH_ALGORITHM_VERSION_SHA2 (0x40)
218#define MPI3_HASH_ALGORITHM_VERSION_SHA3 (0x60)
219#define MPI3_HASH_ALGORITHM_SIZE_MASK (0x1f)
220#define MPI3_HASH_ALGORITHM_SIZE_UNUSED (0x00)
221#define MPI3_HASH_ALGORITHM_SIZE_SHA256 (0x01)
222#define MPI3_HASH_ALGORITHM_SIZE_SHA512 (0x02)
223#define MPI3_HASH_ALGORITHM_SIZE_SHA384 (0x03)
224#define MPI3_ENCRYPTION_ALGORITHM_UNUSED (0x00)
225#define MPI3_ENCRYPTION_ALGORITHM_RSA256 (0x01)
226#define MPI3_ENCRYPTION_ALGORITHM_RSA512 (0x02)
227#define MPI3_ENCRYPTION_ALGORITHM_RSA1024 (0x03)
228#define MPI3_ENCRYPTION_ALGORITHM_RSA2048 (0x04)
229#define MPI3_ENCRYPTION_ALGORITHM_RSA4096 (0x05)
230#define MPI3_ENCRYPTION_ALGORITHM_RSA3072 (0x06)
231#ifndef MPI3_PUBLIC_KEY_MAX
232#define MPI3_PUBLIC_KEY_MAX (1)
233#endif
234struct mpi3_encrypted_key_with_hash_entry {
235 u8 hash_image_type;
236 u8 hash_algorithm;
237 u8 encryption_algorithm;
238 u8 reserved03;
239 __le32 reserved04;
240 __le32 public_key[MPI3_PUBLIC_KEY_MAX];
241};
242
243#ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
244#define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1)
245#endif
246struct mpi3_encrypted_hash_data {
247 u8 image_version;
248 u8 num_hash;
249 __le16 reserved02;
250 __le32 reserved04;
251 struct mpi3_encrypted_hash_entry encrypted_hash_entry[MPI3_ENCRYPTED_HASH_ENTRY_MAX];
252};
253
254#ifndef MPI3_AUX_PROC_DATA_MAX
255#define MPI3_AUX_PROC_DATA_MAX (1)
256#endif
257struct mpi3_aux_processor_data {
258 u8 boot_method;
259 u8 num_load_addr;
260 u8 reserved02;
261 u8 type;
262 __le32 version;
263 __le32 load_address[8];
264 __le32 reserved28[22];
265 __le32 aux_processor_data[MPI3_AUX_PROC_DATA_MAX];
266};
267
268#define MPI3_AUX_PROC_DATA_OFFSET (0x80)
269#define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_MSG (0x00)
270#define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_DOORBELL (0x01)
271#define MPI3_AUXPROCESSOR_BOOT_METHOD_COMPONENT (0x02)
272#define MPI3_AUXPROCESSOR_TYPE_ARM_A15 (0x00)
273#define MPI3_AUXPROCESSOR_TYPE_ARM_M0 (0x01)
274#define MPI3_AUXPROCESSOR_TYPE_ARM_R4 (0x02)
275#endif
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * Copyright 2018-2021 Broadcom Inc. All rights reserved.
4 *
5 */
6#ifndef MPI30_IMAGE_H
7#define MPI30_IMAGE_H 1
8struct mpi3_comp_image_version {
9 __le16 build_num;
10 __le16 customer_id;
11 u8 phase_minor;
12 u8 phase_major;
13 u8 gen_minor;
14 u8 gen_major;
15};
16
17struct mpi3_hash_exclusion_format {
18 __le32 offset;
19 __le32 size;
20};
21
22#define MPI3_IMAGE_HASH_EXCUSION_NUM (4)
23struct mpi3_component_image_header {
24 __le32 signature0;
25 __le32 load_address;
26 __le32 data_size;
27 __le32 start_offset;
28 __le32 signature1;
29 __le32 flash_offset;
30 __le32 image_size;
31 __le32 version_string_offset;
32 __le32 build_date_string_offset;
33 __le32 build_time_string_offset;
34 __le32 environment_variable_offset;
35 __le32 application_specific;
36 __le32 signature2;
37 __le32 header_size;
38 __le32 crc;
39 __le32 flags;
40 __le32 secondary_flash_offset;
41 __le32 etp_offset;
42 __le32 etp_size;
43 union mpi3_version_union rmc_interface_version;
44 union mpi3_version_union etp_interface_version;
45 struct mpi3_comp_image_version component_image_version;
46 struct mpi3_hash_exclusion_format hash_exclusion[MPI3_IMAGE_HASH_EXCUSION_NUM];
47 __le32 next_image_header_offset;
48 union mpi3_version_union security_version;
49 __le32 reserved84[31];
50};
51
52#define MPI3_IMAGE_HEADER_SIGNATURE0_MPI3 (0xeb00003e)
53#define MPI3_IMAGE_HEADER_LOAD_ADDRESS_INVALID (0x00000000)
54#define MPI3_IMAGE_HEADER_SIGNATURE1_APPLICATION (0x20505041)
55#define MPI3_IMAGE_HEADER_SIGNATURE1_FIRST_MUTABLE (0x20434d46)
56#define MPI3_IMAGE_HEADER_SIGNATURE1_BSP (0x20505342)
57#define MPI3_IMAGE_HEADER_SIGNATURE1_ROM_BIOS (0x534f4942)
58#define MPI3_IMAGE_HEADER_SIGNATURE1_HII_X64 (0x4d494948)
59#define MPI3_IMAGE_HEADER_SIGNATURE1_HII_ARM (0x41494948)
60#define MPI3_IMAGE_HEADER_SIGNATURE1_CPLD (0x444c5043)
61#define MPI3_IMAGE_HEADER_SIGNATURE1_SPD (0x20445053)
62#define MPI3_IMAGE_HEADER_SIGNATURE1_GAS_GAUGE (0x20534147)
63#define MPI3_IMAGE_HEADER_SIGNATURE1_PBLP (0x504c4250)
64#define MPI3_IMAGE_HEADER_SIGNATURE2_VALUE (0x50584546)
65#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_MASK (0x00000030)
66#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_CDI (0x00000000)
67#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_DI (0x00000010)
68#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_NVDATA (0x00000008)
69#define MPI3_IMAGE_HEADER_FLAGS_REQUIRES_ACTIVATION (0x00000004)
70#define MPI3_IMAGE_HEADER_FLAGS_COMPRESSED (0x00000002)
71#define MPI3_IMAGE_HEADER_FLAGS_FLASH (0x00000001)
72#define MPI3_IMAGE_HEADER_SIGNATURE0_OFFSET (0x00)
73#define MPI3_IMAGE_HEADER_LOAD_ADDRESS_OFFSET (0x04)
74#define MPI3_IMAGE_HEADER_DATA_SIZE_OFFSET (0x08)
75#define MPI3_IMAGE_HEADER_START_OFFSET_OFFSET (0x0c)
76#define MPI3_IMAGE_HEADER_SIGNATURE1_OFFSET (0x10)
77#define MPI3_IMAGE_HEADER_FLASH_OFFSET_OFFSET (0x14)
78#define MPI3_IMAGE_HEADER_FLASH_SIZE_OFFSET (0x18)
79#define MPI3_IMAGE_HEADER_VERSION_STRING_OFFSET_OFFSET (0x1c)
80#define MPI3_IMAGE_HEADER_BUILD_DATE_STRING_OFFSET_OFFSET (0x20)
81#define MPI3_IMAGE_HEADER_BUILD_TIME_OFFSET_OFFSET (0x24)
82#define MPI3_IMAGE_HEADER_ENVIROMENT_VAR_OFFSET_OFFSET (0x28)
83#define MPI3_IMAGE_HEADER_APPLICATION_SPECIFIC_OFFSET (0x2c)
84#define MPI3_IMAGE_HEADER_SIGNATURE2_OFFSET (0x30)
85#define MPI3_IMAGE_HEADER_HEADER_SIZE_OFFSET (0x34)
86#define MPI3_IMAGE_HEADER_CRC_OFFSET (0x38)
87#define MPI3_IMAGE_HEADER_FLAGS_OFFSET (0x3c)
88#define MPI3_IMAGE_HEADER_SECONDARY_FLASH_OFFSET_OFFSET (0x40)
89#define MPI3_IMAGE_HEADER_ETP_OFFSET_OFFSET (0x44)
90#define MPI3_IMAGE_HEADER_ETP_SIZE_OFFSET (0x48)
91#define MPI3_IMAGE_HEADER_RMC_INTERFACE_VER_OFFSET (0x4c)
92#define MPI3_IMAGE_HEADER_ETP_INTERFACE_VER_OFFSET (0x50)
93#define MPI3_IMAGE_HEADER_COMPONENT_IMAGE_VER_OFFSET (0x54)
94#define MPI3_IMAGE_HEADER_HASH_EXCLUSION_OFFSET (0x5c)
95#define MPI3_IMAGE_HEADER_NEXT_IMAGE_HEADER_OFFSET_OFFSET (0x7c)
96#define MPI3_IMAGE_HEADER_SIZE (0x100)
97struct mpi3_extended_image_header {
98 u8 image_type;
99 u8 reserved01[3];
100 __le32 checksum;
101 __le32 image_size;
102 __le32 next_image_header_offset;
103 __le32 reserved10[4];
104 __le32 identify_string[8];
105};
106
107#define MPI3_EXT_IMAGE_IMAGETYPE_OFFSET (0x00)
108#define MPI3_EXT_IMAGE_IMAGESIZE_OFFSET (0x08)
109#define MPI3_EXT_IMAGE_NEXTIMAGE_OFFSET (0x0c)
110#define MPI3_EXT_IMAGE_HEADER_SIZE (0x40)
111#define MPI3_EXT_IMAGE_TYPE_UNSPECIFIED (0x00)
112#define MPI3_EXT_IMAGE_TYPE_NVDATA (0x03)
113#define MPI3_EXT_IMAGE_TYPE_SUPPORTED_DEVICES (0x07)
114#define MPI3_EXT_IMAGE_TYPE_ENCRYPTED_HASH (0x09)
115#define MPI3_EXT_IMAGE_TYPE_RDE (0x0a)
116#define MPI3_EXT_IMAGE_TYPE_AUXILIARY_PROCESSOR (0x0b)
117#define MPI3_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC (0x80)
118#define MPI3_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC (0xff)
119struct mpi3_supported_device {
120 __le16 device_id;
121 __le16 vendor_id;
122 __le16 device_id_mask;
123 __le16 reserved06;
124 u8 low_pci_rev;
125 u8 high_pci_rev;
126 __le16 reserved0a;
127 __le32 reserved0c;
128};
129
130#ifndef MPI3_SUPPORTED_DEVICE_MAX
131#define MPI3_SUPPORTED_DEVICE_MAX (1)
132#endif
133struct mpi3_supported_devices_data {
134 u8 image_version;
135 u8 reserved01;
136 u8 num_devices;
137 u8 reserved03;
138 __le32 reserved04;
139 struct mpi3_supported_device supported_device[MPI3_SUPPORTED_DEVICE_MAX];
140};
141
142#ifndef MPI3_ENCRYPTED_HASH_MAX
143#define MPI3_ENCRYPTED_HASH_MAX (1)
144#endif
145struct mpi3_encrypted_hash_entry {
146 u8 hash_image_type;
147 u8 hash_algorithm;
148 u8 encryption_algorithm;
149 u8 reserved03;
150 __le32 reserved04;
151 __le32 encrypted_hash[MPI3_ENCRYPTED_HASH_MAX];
152};
153
154#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_SIGNATURE (0x03)
155#define MPI3_HASH_ALGORITHM_VERSION_MASK (0xe0)
156#define MPI3_HASH_ALGORITHM_VERSION_NONE (0x00)
157#define MPI3_HASH_ALGORITHM_VERSION_SHA1 (0x20)
158#define MPI3_HASH_ALGORITHM_VERSION_SHA2 (0x40)
159#define MPI3_HASH_ALGORITHM_VERSION_SHA3 (0x60)
160#define MPI3_HASH_ALGORITHM_SIZE_MASK (0x1f)
161#define MPI3_HASH_ALGORITHM_SIZE_UNUSED (0x00)
162#define MPI3_HASH_ALGORITHM_SIZE_SHA256 (0x01)
163#define MPI3_HASH_ALGORITHM_SIZE_SHA512 (0x02)
164#define MPI3_ENCRYPTION_ALGORITHM_UNUSED (0x00)
165#define MPI3_ENCRYPTION_ALGORITHM_RSA256 (0x01)
166#define MPI3_ENCRYPTION_ALGORITHM_RSA512 (0x02)
167#define MPI3_ENCRYPTION_ALGORITHM_RSA1024 (0x03)
168#define MPI3_ENCRYPTION_ALGORITHM_RSA2048 (0x04)
169#define MPI3_ENCRYPTION_ALGORITHM_RSA4096 (0x05)
170#define MPI3_ENCRYPTION_ALGORITHM_RSA3072 (0x06)
171#ifndef MPI3_PUBLIC_KEY_MAX
172#define MPI3_PUBLIC_KEY_MAX (1)
173#endif
174struct mpi3_encrypted_key_with_hash_entry {
175 u8 hash_image_type;
176 u8 hash_algorithm;
177 u8 encryption_algorithm;
178 u8 reserved03;
179 __le32 reserved04;
180 __le32 public_key[MPI3_PUBLIC_KEY_MAX];
181 __le32 encrypted_hash[MPI3_ENCRYPTED_HASH_MAX];
182};
183
184#ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
185#define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1)
186#endif
187struct mpi3_encrypted_hash_data {
188 u8 image_version;
189 u8 num_hash;
190 __le16 reserved02;
191 __le32 reserved04;
192 struct mpi3_encrypted_hash_entry encrypted_hash_entry[MPI3_ENCRYPTED_HASH_ENTRY_MAX];
193};
194
195#ifndef MPI3_AUX_PROC_DATA_MAX
196#define MPI3_AUX_PROC_DATA_MAX (1)
197#endif
198struct mpi3_aux_processor_data {
199 u8 boot_method;
200 u8 num_load_addr;
201 u8 reserved02;
202 u8 type;
203 __le32 version;
204 __le32 load_address[8];
205 __le32 reserved28[22];
206 __le32 aux_processor_data[MPI3_AUX_PROC_DATA_MAX];
207};
208
209#define MPI3_AUX_PROC_DATA_OFFSET (0x80)
210#define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_MSG (0x00)
211#define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_DOORBELL (0x01)
212#define MPI3_AUXPROCESSOR_BOOT_METHOD_COMPONENT (0x02)
213#define MPI3_AUXPROCESSOR_TYPE_ARM_A15 (0x00)
214#define MPI3_AUXPROCESSOR_TYPE_ARM_M0 (0x01)
215#define MPI3_AUXPROCESSOR_TYPE_ARM_R4 (0x02)
216#endif