FIRMWARE LAYOUT(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– Firmware Layout(9) πŸ’–

okay bestie so you're reading the Firmware Layout page from the Kernel API Manual and honestly? it's giving "anatomy diagram but make it firmware" and we're gonna get through it together 🫢


🌸 The Actual Layout 🌸

The GuC/HuC firmware layout looks like this, no cap:

     +======================================================================+
     |  Firmware blob                                                       |
     +===============+===============+============+============+============+
     |  CSS header   |     uCode     |  RSA key   |  modulus   |  exponent  |
     +===============+===============+============+============+============+
      <-header size->                 <---header size continued ----------->
      <--- size ----------------------------------------------------------->
                                      <-key size->
                                                   <-mod size->
                                                                <-exp size->

so like, the firmware may or may not have the modulus key and exponent data β€” it's optional, she's flexible πŸ’…. But the header, uCode and RSA signature are must-have components that will be used by the driver. periodt.

The length of each component β€” which is all in dwords btw, write that down β€” can be found in the header. And in the case that modulus and exponent are NOT present in the fw, a.k.a a truncated image, the length value still appears in the header. like it's still invited to the party even if it doesn't show up, iykyk ✨


πŸ¦‹ The Driver's Size Validation Rules πŸ¦‹

The driver does some basic fw size validation based on the following rules, and honestly it's very "let me just vibe-check this real quick":

  1. Header, uCode and RSA are must-have components.
  2. All firmware components, if they present, are in the sequence illustrated in the layout table above.
  3. Length info of each component can be found in header, in dwords.
  4. Modulus and exponent key are not required by driver. They may not appear in fw. So driver will load a truncated firmware in this case.

πŸŽ€ The DG2 Plot Twist πŸŽ€

Starting from DG2, the HuC is loaded by the GSC instead of i915. main character energy fr fr πŸ‘‘

The GSC firmware performs all the required integrity checks, so we just need to check the version. easy slay.

⚠️ heads up bestie: note that the header for GSC-managed blobs is different from the CSS used for dma-loaded firmwares. don't mix them up, that's not the vibe πŸ’€

✨ SEE ALSO ✨

  • Kernel file ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h

that's the whole thing, you ate that 🌈 this iconic little page lives in ./drivers/gpu/drm/i915/gt/uc, it's dated October 2026, and it's the one and only Firmware Layout(9) β€” go forth and read firmware headers responsibly, mwah πŸ’œπŸŽ€

πŸ“¦ where this page comes from