fw_formats.h 4.1 KB

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