1*fd118a77SEdward Cree /* SPDX-License-Identifier: GPL-2.0-only */ 2*fd118a77SEdward Cree /**************************************************************************** 3*fd118a77SEdward Cree * Driver for AMD network controllers and boards 4*fd118a77SEdward Cree * Copyright (C) 2025, Advanced Micro Devices, Inc. 5*fd118a77SEdward Cree * 6*fd118a77SEdward Cree * This program is free software; you can redistribute it and/or modify it 7*fd118a77SEdward Cree * under the terms of the GNU General Public License version 2 as published 8*fd118a77SEdward Cree * by the Free Software Foundation, incorporated herein by reference. 9*fd118a77SEdward Cree */ 10*fd118a77SEdward Cree 11*fd118a77SEdward Cree #ifndef _EFX_FW_FORMATS_H 12*fd118a77SEdward Cree #define _EFX_FW_FORMATS_H 13*fd118a77SEdward Cree 14*fd118a77SEdward Cree /* Header layouts of firmware update images recognised by Efx NICs. 15*fd118a77SEdward Cree * The sources-of-truth for these layouts are AMD internal documents 16*fd118a77SEdward Cree * and sfregistry headers, neither of which are available externally 17*fd118a77SEdward Cree * nor usable directly by the driver. 18*fd118a77SEdward Cree * 19*fd118a77SEdward Cree * While each format includes a 'magic number', these are at different 20*fd118a77SEdward Cree * offsets in the various formats, and a legal header for one format 21*fd118a77SEdward Cree * could have the right value in whichever field occupies that offset 22*fd118a77SEdward Cree * to match another format's magic. 23*fd118a77SEdward Cree * Besides, some packaging formats (such as CMS/PKCS#7 signed images) 24*fd118a77SEdward Cree * prepend a header for which finding the size is a non-trivial task; 25*fd118a77SEdward Cree * rather than trying to parse those headers, we search byte-by-byte 26*fd118a77SEdward Cree * through the provided firmware image looking for a valid header. 27*fd118a77SEdward Cree * Thus, format recognition has to include validation of the checksum 28*fd118a77SEdward Cree * field, even though the firmware will validate that itself before 29*fd118a77SEdward Cree * applying the image. 30*fd118a77SEdward Cree */ 31*fd118a77SEdward Cree 32*fd118a77SEdward Cree /* EF10 (Medford2, X2) "reflash" header format. Defined in SF-121352-AN */ 33*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_MAGIC_OFST 0 34*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_MAGIC_LEN 4 35*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_MAGIC_VALUE 0x106F1A5 36*fd118a77SEdward Cree 37*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_VERSION_OFST 4 38*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_VERSION_LEN 4 39*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_VERSION_VALUE 4 40*fd118a77SEdward Cree 41*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_FIRMWARE_TYPE_OFST 8 42*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_FIRMWARE_TYPE_LEN 4 43*fd118a77SEdward Cree #define EFX_REFLASH_FIRMWARE_TYPE_BOOTROM 0x2 44*fd118a77SEdward Cree #define EFX_REFLASH_FIRMWARE_TYPE_BUNDLE 0xd 45*fd118a77SEdward Cree 46*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_FIRMWARE_SUBTYPE_OFST 12 47*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_FIRMWARE_SUBTYPE_LEN 4 48*fd118a77SEdward Cree 49*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_PAYLOAD_SIZE_OFST 16 50*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_PAYLOAD_SIZE_LEN 4 51*fd118a77SEdward Cree 52*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_LENGTH_OFST 20 53*fd118a77SEdward Cree #define EFX_REFLASH_HEADER_LENGTH_LEN 4 54*fd118a77SEdward Cree 55*fd118a77SEdward Cree /* Reflash trailer */ 56*fd118a77SEdward Cree #define EFX_REFLASH_TRAILER_CRC_OFST 0 57*fd118a77SEdward Cree #define EFX_REFLASH_TRAILER_CRC_LEN 4 58*fd118a77SEdward Cree 59*fd118a77SEdward Cree #define EFX_REFLASH_TRAILER_LEN \ 60*fd118a77SEdward Cree (EFX_REFLASH_TRAILER_CRC_OFST + EFX_REFLASH_TRAILER_CRC_LEN) 61*fd118a77SEdward Cree 62*fd118a77SEdward Cree /* EF100 "SmartNIC image" header format. 63*fd118a77SEdward Cree * Defined in sfregistry "src/layout/snic_image_hdr.h". 64*fd118a77SEdward Cree */ 65*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_MAGIC_OFST 16 66*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_MAGIC_LEN 4 67*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_MAGIC_VALUE 0x541C057A 68*fd118a77SEdward Cree 69*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_VERSION_OFST 20 70*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_VERSION_LEN 4 71*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_VERSION_VALUE 1 72*fd118a77SEdward Cree 73*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_LENGTH_OFST 24 74*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_LENGTH_LEN 4 75*fd118a77SEdward Cree 76*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_PARTITION_TYPE_OFST 36 77*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_PARTITION_TYPE_LEN 4 78*fd118a77SEdward Cree 79*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_PARTITION_SUBTYPE_OFST 40 80*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_PARTITION_SUBTYPE_LEN 4 81*fd118a77SEdward Cree 82*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_PAYLOAD_SIZE_OFST 60 83*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_PAYLOAD_SIZE_LEN 4 84*fd118a77SEdward Cree 85*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_CRC_OFST 64 86*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_CRC_LEN 4 87*fd118a77SEdward Cree 88*fd118a77SEdward Cree #define EFX_SNICIMAGE_HEADER_MINLEN 256 89*fd118a77SEdward Cree 90*fd118a77SEdward Cree /* EF100 "SmartNIC bundle" header format. Defined in SF-122606-TC */ 91*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_MAGIC_OFST 0 92*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_MAGIC_LEN 4 93*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_MAGIC_VALUE 0xB1001001 94*fd118a77SEdward Cree 95*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_VERSION_OFST 4 96*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_VERSION_LEN 4 97*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_VERSION_VALUE 1 98*fd118a77SEdward Cree 99*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_BUNDLE_TYPE_OFST 8 100*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_BUNDLE_TYPE_LEN 4 101*fd118a77SEdward Cree 102*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_BUNDLE_SUBTYPE_OFST 12 103*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_BUNDLE_SUBTYPE_LEN 4 104*fd118a77SEdward Cree 105*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_LENGTH_OFST 20 106*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_LENGTH_LEN 4 107*fd118a77SEdward Cree 108*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_CRC_OFST 224 109*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_CRC_LEN 4 110*fd118a77SEdward Cree 111*fd118a77SEdward Cree #define EFX_SNICBUNDLE_HEADER_LEN \ 112*fd118a77SEdward Cree (EFX_SNICBUNDLE_HEADER_CRC_OFST + EFX_SNICBUNDLE_HEADER_CRC_LEN) 113*fd118a77SEdward Cree 114*fd118a77SEdward Cree #endif /* _EFX_FW_FORMATS_H */ 115