Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *  Copyright 2018-2021 Broadcom Inc. All rights reserved.
0004  *
0005  */
0006 #ifndef MPI30_IMAGE_H
0007 #define MPI30_IMAGE_H     1
0008 struct mpi3_comp_image_version {
0009     __le16     build_num;
0010     __le16     customer_id;
0011     u8         phase_minor;
0012     u8         phase_major;
0013     u8         gen_minor;
0014     u8         gen_major;
0015 };
0016 
0017 struct mpi3_hash_exclusion_format {
0018     __le32                     offset;
0019     __le32                     size;
0020 };
0021 
0022 #define MPI3_IMAGE_HASH_EXCUSION_NUM                           (4)
0023 struct mpi3_component_image_header {
0024     __le32                            signature0;
0025     __le32                            load_address;
0026     __le32                            data_size;
0027     __le32                            start_offset;
0028     __le32                            signature1;
0029     __le32                            flash_offset;
0030     __le32                            image_size;
0031     __le32                            version_string_offset;
0032     __le32                            build_date_string_offset;
0033     __le32                            build_time_string_offset;
0034     __le32                            environment_variable_offset;
0035     __le32                            application_specific;
0036     __le32                            signature2;
0037     __le32                            header_size;
0038     __le32                            crc;
0039     __le32                            flags;
0040     __le32                            secondary_flash_offset;
0041     __le32                            etp_offset;
0042     __le32                            etp_size;
0043     union mpi3_version_union             rmc_interface_version;
0044     union mpi3_version_union             etp_interface_version;
0045     struct mpi3_comp_image_version        component_image_version;
0046     struct mpi3_hash_exclusion_format     hash_exclusion[MPI3_IMAGE_HASH_EXCUSION_NUM];
0047     __le32                            next_image_header_offset;
0048     union mpi3_version_union             security_version;
0049     __le32                            reserved84[31];
0050 };
0051 
0052 #define MPI3_IMAGE_HEADER_SIGNATURE0_MPI3                     (0xeb00003e)
0053 #define MPI3_IMAGE_HEADER_LOAD_ADDRESS_INVALID                (0x00000000)
0054 #define MPI3_IMAGE_HEADER_SIGNATURE1_APPLICATION              (0x20505041)
0055 #define MPI3_IMAGE_HEADER_SIGNATURE1_FIRST_MUTABLE            (0x20434d46)
0056 #define MPI3_IMAGE_HEADER_SIGNATURE1_BSP                      (0x20505342)
0057 #define MPI3_IMAGE_HEADER_SIGNATURE1_ROM_BIOS                 (0x534f4942)
0058 #define MPI3_IMAGE_HEADER_SIGNATURE1_HII_X64                  (0x4d494948)
0059 #define MPI3_IMAGE_HEADER_SIGNATURE1_HII_ARM                  (0x41494948)
0060 #define MPI3_IMAGE_HEADER_SIGNATURE1_CPLD                     (0x444c5043)
0061 #define MPI3_IMAGE_HEADER_SIGNATURE1_SPD                      (0x20445053)
0062 #define MPI3_IMAGE_HEADER_SIGNATURE1_GAS_GAUGE                (0x20534147)
0063 #define MPI3_IMAGE_HEADER_SIGNATURE1_PBLP                     (0x504c4250)
0064 #define MPI3_IMAGE_HEADER_SIGNATURE1_MANIFEST                 (0x464e414d)
0065 #define MPI3_IMAGE_HEADER_SIGNATURE1_OEM                      (0x204d454f)
0066 #define MPI3_IMAGE_HEADER_SIGNATURE2_VALUE                    (0x50584546)
0067 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_MASK         (0x00000030)
0068 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_CDI          (0x00000000)
0069 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_DI           (0x00000010)
0070 #define MPI3_IMAGE_HEADER_FLAGS_SIGNED_NVDATA                 (0x00000008)
0071 #define MPI3_IMAGE_HEADER_FLAGS_REQUIRES_ACTIVATION           (0x00000004)
0072 #define MPI3_IMAGE_HEADER_FLAGS_COMPRESSED                    (0x00000002)
0073 #define MPI3_IMAGE_HEADER_FLAGS_FLASH                         (0x00000001)
0074 #define MPI3_IMAGE_HEADER_SIGNATURE0_OFFSET                   (0x00)
0075 #define MPI3_IMAGE_HEADER_LOAD_ADDRESS_OFFSET                 (0x04)
0076 #define MPI3_IMAGE_HEADER_DATA_SIZE_OFFSET                    (0x08)
0077 #define MPI3_IMAGE_HEADER_START_OFFSET_OFFSET                 (0x0c)
0078 #define MPI3_IMAGE_HEADER_SIGNATURE1_OFFSET                   (0x10)
0079 #define MPI3_IMAGE_HEADER_FLASH_OFFSET_OFFSET                 (0x14)
0080 #define MPI3_IMAGE_HEADER_FLASH_SIZE_OFFSET                   (0x18)
0081 #define MPI3_IMAGE_HEADER_VERSION_STRING_OFFSET_OFFSET        (0x1c)
0082 #define MPI3_IMAGE_HEADER_BUILD_DATE_STRING_OFFSET_OFFSET     (0x20)
0083 #define MPI3_IMAGE_HEADER_BUILD_TIME_OFFSET_OFFSET            (0x24)
0084 #define MPI3_IMAGE_HEADER_ENVIROMENT_VAR_OFFSET_OFFSET        (0x28)
0085 #define MPI3_IMAGE_HEADER_APPLICATION_SPECIFIC_OFFSET         (0x2c)
0086 #define MPI3_IMAGE_HEADER_SIGNATURE2_OFFSET                   (0x30)
0087 #define MPI3_IMAGE_HEADER_HEADER_SIZE_OFFSET                  (0x34)
0088 #define MPI3_IMAGE_HEADER_CRC_OFFSET                          (0x38)
0089 #define MPI3_IMAGE_HEADER_FLAGS_OFFSET                        (0x3c)
0090 #define MPI3_IMAGE_HEADER_SECONDARY_FLASH_OFFSET_OFFSET       (0x40)
0091 #define MPI3_IMAGE_HEADER_ETP_OFFSET_OFFSET                   (0x44)
0092 #define MPI3_IMAGE_HEADER_ETP_SIZE_OFFSET                     (0x48)
0093 #define MPI3_IMAGE_HEADER_RMC_INTERFACE_VER_OFFSET            (0x4c)
0094 #define MPI3_IMAGE_HEADER_ETP_INTERFACE_VER_OFFSET            (0x50)
0095 #define MPI3_IMAGE_HEADER_COMPONENT_IMAGE_VER_OFFSET          (0x54)
0096 #define MPI3_IMAGE_HEADER_HASH_EXCLUSION_OFFSET               (0x5c)
0097 #define MPI3_IMAGE_HEADER_NEXT_IMAGE_HEADER_OFFSET_OFFSET     (0x7c)
0098 #define MPI3_IMAGE_HEADER_SIZE                                (0x100)
0099 #ifndef MPI3_CI_MANIFEST_MPI_MAX
0100 #define MPI3_CI_MANIFEST_MPI_MAX                               (1)
0101 #endif
0102 struct mpi3_ci_manifest_mpi_comp_image_ref {
0103     __le32                                signature1;
0104     __le32                                reserved04[3];
0105     struct mpi3_comp_image_version            component_image_version;
0106     __le32                                component_image_version_string_offset;
0107     __le32                                crc;
0108 };
0109 
0110 struct mpi3_ci_manifest_mpi {
0111     u8                                       manifest_type;
0112     u8                                       reserved01[3];
0113     __le32                                   reserved04[3];
0114     u8                                       num_image_references;
0115     u8                                       release_level;
0116     __le16                                   reserved12;
0117     __le16                                   reserved14;
0118     __le16                                   flags;
0119     __le32                                   reserved18[2];
0120     __le16                                   vendor_id;
0121     __le16                                   device_id;
0122     __le16                                   subsystem_vendor_id;
0123     __le16                                   subsystem_id;
0124     __le32                                   reserved28[2];
0125     union mpi3_version_union                    package_security_version;
0126     __le32                                   reserved34;
0127     struct mpi3_comp_image_version               package_version;
0128     __le32                                   package_version_string_offset;
0129     __le32                                   package_build_date_string_offset;
0130     __le32                                   package_build_time_string_offset;
0131     __le32                                   reserved4c;
0132     __le32                                   diag_authorization_identifier[16];
0133     struct mpi3_ci_manifest_mpi_comp_image_ref   component_image_ref[MPI3_CI_MANIFEST_MPI_MAX];
0134 };
0135 
0136 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DEV                        (0x00)
0137 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PREALPHA                   (0x10)
0138 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_ALPHA                      (0x20)
0139 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_BETA                       (0x30)
0140 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_RC                         (0x40)
0141 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_GCA                        (0x50)
0142 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_POINT                      (0x60)
0143 #define MPI3_CI_MANIFEST_MPI_FLAGS_DIAG_AUTHORIZATION                 (0x01)
0144 #define MPI3_CI_MANIFEST_MPI_SUBSYSTEMID_IGNORED                   (0xffff)
0145 #define MPI3_CI_MANIFEST_MPI_PKG_VER_STR_OFF_UNSPECIFIED           (0x00000000)
0146 #define MPI3_CI_MANIFEST_MPI_PKG_BUILD_DATE_STR_OFF_UNSPECIFIED    (0x00000000)
0147 #define MPI3_CI_MANIFEST_MPI_PKG_BUILD_TIME_STR_OFF_UNSPECIFIED    (0x00000000)
0148 union mpi3_ci_manifest {
0149     struct mpi3_ci_manifest_mpi               mpi;
0150     __le32                                dword[1];
0151 };
0152 
0153 #define MPI3_CI_MANIFEST_TYPE_MPI                                  (0x00)
0154 struct mpi3_extended_image_header {
0155     u8                                image_type;
0156     u8                                reserved01[3];
0157     __le32                            checksum;
0158     __le32                            image_size;
0159     __le32                            next_image_header_offset;
0160     __le32                            reserved10[4];
0161     __le32                            identify_string[8];
0162 };
0163 
0164 #define MPI3_EXT_IMAGE_IMAGETYPE_OFFSET         (0x00)
0165 #define MPI3_EXT_IMAGE_IMAGESIZE_OFFSET         (0x08)
0166 #define MPI3_EXT_IMAGE_NEXTIMAGE_OFFSET         (0x0c)
0167 #define MPI3_EXT_IMAGE_HEADER_SIZE              (0x40)
0168 #define MPI3_EXT_IMAGE_TYPE_UNSPECIFIED             (0x00)
0169 #define MPI3_EXT_IMAGE_TYPE_NVDATA                  (0x03)
0170 #define MPI3_EXT_IMAGE_TYPE_SUPPORTED_DEVICES       (0x07)
0171 #define MPI3_EXT_IMAGE_TYPE_ENCRYPTED_HASH          (0x09)
0172 #define MPI3_EXT_IMAGE_TYPE_RDE                     (0x0a)
0173 #define MPI3_EXT_IMAGE_TYPE_AUXILIARY_PROCESSOR     (0x0b)
0174 #define MPI3_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC    (0x80)
0175 #define MPI3_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC    (0xff)
0176 struct mpi3_supported_device {
0177     __le16                     device_id;
0178     __le16                     vendor_id;
0179     __le16                     device_id_mask;
0180     __le16                     reserved06;
0181     u8                         low_pci_rev;
0182     u8                         high_pci_rev;
0183     __le16                     reserved0a;
0184     __le32                     reserved0c;
0185 };
0186 
0187 #ifndef MPI3_SUPPORTED_DEVICE_MAX
0188 #define MPI3_SUPPORTED_DEVICE_MAX                      (1)
0189 #endif
0190 struct mpi3_supported_devices_data {
0191     u8                         image_version;
0192     u8                         reserved01;
0193     u8                         num_devices;
0194     u8                         reserved03;
0195     __le32                     reserved04;
0196     struct mpi3_supported_device   supported_device[MPI3_SUPPORTED_DEVICE_MAX];
0197 };
0198 
0199 #ifndef MPI3_ENCRYPTED_HASH_MAX
0200 #define MPI3_ENCRYPTED_HASH_MAX                      (1)
0201 #endif
0202 struct mpi3_encrypted_hash_entry {
0203     u8                         hash_image_type;
0204     u8                         hash_algorithm;
0205     u8                         encryption_algorithm;
0206     u8                         reserved03;
0207     __le32                     reserved04;
0208     __le32                     encrypted_hash[MPI3_ENCRYPTED_HASH_MAX];
0209 };
0210 
0211 #define MPI3_HASH_IMAGE_TYPE_KEY_WITH_SIGNATURE      (0x03)
0212 #define MPI3_HASH_ALGORITHM_VERSION_MASK             (0xe0)
0213 #define MPI3_HASH_ALGORITHM_VERSION_NONE             (0x00)
0214 #define MPI3_HASH_ALGORITHM_VERSION_SHA1             (0x20)
0215 #define MPI3_HASH_ALGORITHM_VERSION_SHA2             (0x40)
0216 #define MPI3_HASH_ALGORITHM_VERSION_SHA3             (0x60)
0217 #define MPI3_HASH_ALGORITHM_SIZE_MASK                (0x1f)
0218 #define MPI3_HASH_ALGORITHM_SIZE_UNUSED              (0x00)
0219 #define MPI3_HASH_ALGORITHM_SIZE_SHA256              (0x01)
0220 #define MPI3_HASH_ALGORITHM_SIZE_SHA512              (0x02)
0221 #define MPI3_HASH_ALGORITHM_SIZE_SHA384              (0x03)
0222 #define MPI3_ENCRYPTION_ALGORITHM_UNUSED             (0x00)
0223 #define MPI3_ENCRYPTION_ALGORITHM_RSA256             (0x01)
0224 #define MPI3_ENCRYPTION_ALGORITHM_RSA512             (0x02)
0225 #define MPI3_ENCRYPTION_ALGORITHM_RSA1024            (0x03)
0226 #define MPI3_ENCRYPTION_ALGORITHM_RSA2048            (0x04)
0227 #define MPI3_ENCRYPTION_ALGORITHM_RSA4096            (0x05)
0228 #define MPI3_ENCRYPTION_ALGORITHM_RSA3072            (0x06)
0229 #ifndef MPI3_PUBLIC_KEY_MAX
0230 #define MPI3_PUBLIC_KEY_MAX                          (1)
0231 #endif
0232 struct mpi3_encrypted_key_with_hash_entry {
0233     u8                         hash_image_type;
0234     u8                         hash_algorithm;
0235     u8                         encryption_algorithm;
0236     u8                         reserved03;
0237     __le32                     reserved04;
0238     __le32                     public_key[MPI3_PUBLIC_KEY_MAX];
0239 };
0240 
0241 #ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
0242 #define MPI3_ENCRYPTED_HASH_ENTRY_MAX               (1)
0243 #endif
0244 struct mpi3_encrypted_hash_data {
0245     u8                                  image_version;
0246     u8                                  num_hash;
0247     __le16                              reserved02;
0248     __le32                              reserved04;
0249     struct mpi3_encrypted_hash_entry        encrypted_hash_entry[MPI3_ENCRYPTED_HASH_ENTRY_MAX];
0250 };
0251 
0252 #ifndef MPI3_AUX_PROC_DATA_MAX
0253 #define MPI3_AUX_PROC_DATA_MAX               (1)
0254 #endif
0255 struct mpi3_aux_processor_data {
0256     u8                         boot_method;
0257     u8                         num_load_addr;
0258     u8                         reserved02;
0259     u8                         type;
0260     __le32                     version;
0261     __le32                     load_address[8];
0262     __le32                     reserved28[22];
0263     __le32                     aux_processor_data[MPI3_AUX_PROC_DATA_MAX];
0264 };
0265 
0266 #define MPI3_AUX_PROC_DATA_OFFSET                                     (0x80)
0267 #define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_MSG                          (0x00)
0268 #define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_DOORBELL                     (0x01)
0269 #define MPI3_AUXPROCESSOR_BOOT_METHOD_COMPONENT                       (0x02)
0270 #define MPI3_AUXPROCESSOR_TYPE_ARM_A15                                (0x00)
0271 #define MPI3_AUXPROCESSOR_TYPE_ARM_M0                                 (0x01)
0272 #define MPI3_AUXPROCESSOR_TYPE_ARM_R4                                 (0x02)
0273 #endif