xref: /linux/drivers/net/ethernet/sfc/fw_formats.h (revision 1a9239bb4253f9076b5b4b2a1a4e8d7defd77a95)
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