| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /****************************************************************************
- * Driver for AMD network controllers and boards
- * Copyright (C) 2025, Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation, incorporated herein by reference.
- */
- #ifndef _EFX_FW_FORMATS_H
- #define _EFX_FW_FORMATS_H
- /* Header layouts of firmware update images recognised by Efx NICs.
- * The sources-of-truth for these layouts are AMD internal documents
- * and sfregistry headers, neither of which are available externally
- * nor usable directly by the driver.
- *
- * While each format includes a 'magic number', these are at different
- * offsets in the various formats, and a legal header for one format
- * could have the right value in whichever field occupies that offset
- * to match another format's magic.
- * Besides, some packaging formats (such as CMS/PKCS#7 signed images)
- * prepend a header for which finding the size is a non-trivial task;
- * rather than trying to parse those headers, we search byte-by-byte
- * through the provided firmware image looking for a valid header.
- * Thus, format recognition has to include validation of the checksum
- * field, even though the firmware will validate that itself before
- * applying the image.
- */
- /* EF10 (Medford2, X2) "reflash" header format. Defined in SF-121352-AN */
- #define EFX_REFLASH_HEADER_MAGIC_OFST 0
- #define EFX_REFLASH_HEADER_MAGIC_LEN 4
- #define EFX_REFLASH_HEADER_MAGIC_VALUE 0x106F1A5
- #define EFX_REFLASH_HEADER_VERSION_OFST 4
- #define EFX_REFLASH_HEADER_VERSION_LEN 4
- #define EFX_REFLASH_HEADER_VERSION_VALUE 4
- #define EFX_REFLASH_HEADER_FIRMWARE_TYPE_OFST 8
- #define EFX_REFLASH_HEADER_FIRMWARE_TYPE_LEN 4
- #define EFX_REFLASH_FIRMWARE_TYPE_BOOTROM 0x2
- #define EFX_REFLASH_FIRMWARE_TYPE_BUNDLE 0xd
- #define EFX_REFLASH_HEADER_FIRMWARE_SUBTYPE_OFST 12
- #define EFX_REFLASH_HEADER_FIRMWARE_SUBTYPE_LEN 4
- #define EFX_REFLASH_HEADER_PAYLOAD_SIZE_OFST 16
- #define EFX_REFLASH_HEADER_PAYLOAD_SIZE_LEN 4
- #define EFX_REFLASH_HEADER_LENGTH_OFST 20
- #define EFX_REFLASH_HEADER_LENGTH_LEN 4
- /* Reflash trailer */
- #define EFX_REFLASH_TRAILER_CRC_OFST 0
- #define EFX_REFLASH_TRAILER_CRC_LEN 4
- #define EFX_REFLASH_TRAILER_LEN \
- (EFX_REFLASH_TRAILER_CRC_OFST + EFX_REFLASH_TRAILER_CRC_LEN)
- /* EF100 "SmartNIC image" header format.
- * Defined in sfregistry "src/layout/snic_image_hdr.h".
- */
- #define EFX_SNICIMAGE_HEADER_MAGIC_OFST 16
- #define EFX_SNICIMAGE_HEADER_MAGIC_LEN 4
- #define EFX_SNICIMAGE_HEADER_MAGIC_VALUE 0x541C057A
- #define EFX_SNICIMAGE_HEADER_VERSION_OFST 20
- #define EFX_SNICIMAGE_HEADER_VERSION_LEN 4
- #define EFX_SNICIMAGE_HEADER_VERSION_VALUE 1
- #define EFX_SNICIMAGE_HEADER_LENGTH_OFST 24
- #define EFX_SNICIMAGE_HEADER_LENGTH_LEN 4
- #define EFX_SNICIMAGE_HEADER_PARTITION_TYPE_OFST 36
- #define EFX_SNICIMAGE_HEADER_PARTITION_TYPE_LEN 4
- #define EFX_SNICIMAGE_HEADER_PARTITION_SUBTYPE_OFST 40
- #define EFX_SNICIMAGE_HEADER_PARTITION_SUBTYPE_LEN 4
- #define EFX_SNICIMAGE_HEADER_PAYLOAD_SIZE_OFST 60
- #define EFX_SNICIMAGE_HEADER_PAYLOAD_SIZE_LEN 4
- #define EFX_SNICIMAGE_HEADER_CRC_OFST 64
- #define EFX_SNICIMAGE_HEADER_CRC_LEN 4
- #define EFX_SNICIMAGE_HEADER_MINLEN 256
- /* EF100 "SmartNIC bundle" header format. Defined in SF-122606-TC */
- #define EFX_SNICBUNDLE_HEADER_MAGIC_OFST 0
- #define EFX_SNICBUNDLE_HEADER_MAGIC_LEN 4
- #define EFX_SNICBUNDLE_HEADER_MAGIC_VALUE 0xB1001001
- #define EFX_SNICBUNDLE_HEADER_VERSION_OFST 4
- #define EFX_SNICBUNDLE_HEADER_VERSION_LEN 4
- #define EFX_SNICBUNDLE_HEADER_VERSION_VALUE 1
- #define EFX_SNICBUNDLE_HEADER_BUNDLE_TYPE_OFST 8
- #define EFX_SNICBUNDLE_HEADER_BUNDLE_TYPE_LEN 4
- #define EFX_SNICBUNDLE_HEADER_BUNDLE_SUBTYPE_OFST 12
- #define EFX_SNICBUNDLE_HEADER_BUNDLE_SUBTYPE_LEN 4
- #define EFX_SNICBUNDLE_HEADER_LENGTH_OFST 20
- #define EFX_SNICBUNDLE_HEADER_LENGTH_LEN 4
- #define EFX_SNICBUNDLE_HEADER_CRC_OFST 224
- #define EFX_SNICBUNDLE_HEADER_CRC_LEN 4
- #define EFX_SNICBUNDLE_HEADER_LEN \
- (EFX_SNICBUNDLE_HEADER_CRC_OFST + EFX_SNICBUNDLE_HEADER_CRC_LEN)
- #endif /* _EFX_FW_FORMATS_H */
|