CXL-UPDATE-FIRMWARE(1)

πŸ’… CXL-UPDATE-FIRMWARE(1) β€” bestie's guide to flashing firmware on a CXL memdev

okay so welcome to cxl-update-firmware, straight out of the cxl manual, and honestly? this one is kind of a glow-up for your hardware ✨


🌸 NAME 🌸

cxl-update-firmware β€” update the firmware on a CXL memdev. that's it, that's the whole vibe 🫢


πŸŽ€ SYNOPSIS πŸŽ€

cxl update-firmware <mem0> [<mem1>..<memN>] [<options>]

πŸ’– DESCRIPTION πŸ’–

so you wanna update the firmware on one or more CXL mem devices. iconic. but first β€” a vibe check: those mem devices must support the set of firmware related mailbox commands, no cap. if they don't, this whole thing is not it 😭

here's the tea though, and it's lowkey the most important part: this command doesn't directly issue the transfer / activate firmware mailbox commands. nope. instead, the kernel's firmware loader facility is used to hand the kernel your data, and the kernel handles performing the actual update β€” while also managing time slicing the transfer w.r.t. other background commands. the kernel is the main character here, we're just the group chat hyping it up πŸ‘‘


πŸ¦‹ EXAMPLE πŸ¦‹

# cxl update-firmware mem0 -F firmware.bin -w
[
  {
    "memdev":"mem0",
    "pmem_size":1073741824,
    "ram_size":1073741824,
    "serial":0,
    "numa_node":0,
    "host":"cxl_mem.0",
    "firmware":{
      "num_slots":3,
      "active_slot":2,
      "online_activate_capable":false,
      "slot_1_version":"cxl_test_fw_001",
      "slot_2_version":"cxl_test_fw_002",
      "slot_3_version":"cxl_test_fw_new_fw",
      "fw_update_in_progress":false
    }
  }
]
firmware update completed on 1 mem device

wait, hold on, let me not fumble the bag β€” the actual slot_3_version in that output is:

  "slot_3_version":"cxl_test_fw_new_fw",

no wait, i'm being so silly, it's literally this, copy it exactly bestie:

      "slot_3_version":"cxl_test_fw_new_fw",

hmm, okay, i'm gonna stop and just give you the block verbatim so nobody gets confused πŸ™ˆ β€” full example, exactly as it appears:

# cxl update-firmware mem0 -F firmware.bin -w
[
  {
    "memdev":"mem0",
    "pmem_size":1073741824,
    "ram_size":1073741824,
    "serial":0,
    "numa_node":0,
    "host":"cxl_mem.0",
    "firmware":{
      "num_slots":3,
      "active_slot":2,
      "online_activate_capable":false,
      "slot_1_version":"cxl_test_fw_001",
      "slot_2_version":"cxl_test_fw_002",
      "slot_3_version":"cxl_test_fw_new_fw",
      "fw_update_in_progress":false
    }
  }
]
firmware update completed on 1 mem device

and the last line slaps: firmware update completed on 1 mem device πŸ’…


πŸ”₯ OPTIONS πŸ”₯

  • -b, --bus= β€” restrict the operation to the specified bus. keep it scoped, bestie.
  • -F, --firmware-file β€” the firmware image file to use for the update. this is the actual payload, the star of the show ⭐
  • -c, --cancel β€” attempt to abort an in-progress firmware update. heads up though: this may fail depending on what stage the update process is in. it's giving "you can try" energy, not "guaranteed" energy πŸ’€
  • -w, --wait β€” by default, the update-firmware command only initiates the firmware update and returns, while the update operation happens asynchronously in the background. this option makes the firmware update command synchronous by waiting for it to complete before returning. so if you're the type who needs to watch it happen, this is your moment πŸ‘€

if --wait is passed in without an accompanying firmware-file, it will initiate a wait on any current in-progress firmware updates, and then return. no new update, just vibes and patience 🧘

  • -v, --verbose β€” emit more debug messages. more lore, more output, more to obsess over 🌈

Copyright © 2016 - 2022, Intel Corporation. License GPLv2: GNU GPL version 2 http://gnu.org/licenses/gpl.html. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. (fr fr, no warranty, don't come for them if it breaks 😭)


🌟 SEE ALSO 🌟

  • cxl-list(1), β€” go look at your memdevs before you flash anything, that's the responsible bestie move 🫢

and that's the whole page, diva. this lovely little doc ships as cxl, dated 2026-06-30, and it's page CXL-UPDATE-FIRMWARE(1) of the cxl manual β€” go forth and update responsibly πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from
  • arch rolling: ndctl 85-1 Β· LGPL-2.1-only AND GPL-2.0-only AND CC0-1.0 AND MIT
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms