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