NDCTL-UPDATE-FIRMWARE(1)
β¨ NAME β¨
ndctl-update-firmware β bestie, this is the one that updates the firmware on the device you point at π
π¦ SYNOPSIS π¦
ndctl update-firmware <dimm> [<options>]
π DESCRIPTION π
Okay so picture this: you need to flash new firmware onto an NVDIMM, and ndctl update-firmware is the generic little interface for exactly that. Iconic. But β and this is the important part β it only works if three things line up:
libndctlhas support for the NVDIMM "family"- the kernel has that command set enabled
- the device itself actually implements the command
Not every device is gonna serve, and that's just the vibe check. So how do you find out if firmware update is even on the table? Run ndctl list -DF, fr fr. Like this:
ndctl list -DFu -d nmem1
{
"dev":"nmem1",
"id":"cdab-0a-07e0-ffffffff",
"handle":"0",
"phys_id":"0",
"security":"disabled",
"firmware":{
"current_version":"0",
"can_update":true
}
}
See that "can_update":true? That's your green light, slay π
π OPTIONS π
<dimm>β anmemXdevice name, or a dimm id number. Restricts the whole operation to the dimm(s) you named. You can pass the keywordallto say "no restrictions whatsoever", but lowkey that's the exact same thing as just not passing a--dimmoption at all π«Ά-b,--bus=β a bus id number, or a provider string (like"ACPI.NFIT"). Restricts the operation to the bus(es) you named. Same deal as above: the keywordallmeans "no restriction", which is literally identical to not supplying a--busoption at all.-f,--firmwareβ the firmware file used to perform the update π-i,--forceβ Ignore an in-progress Address Range Scrub and try to submit the firmware update anyway, or ignore firmware activate arm overflows and force-arm devices. Use with intention, bestie.-A,--armβ Arm a device for firmware activation. This is enabled by default whenever a firmware image is specified β so if you don't want it, specify--no-armto disable that default. But also: with no firmware image at all, you can use this option to manually arm a device for firmware activate.
Here's the tea: when a device transitions from unarmed β armed, the platform recalculates the firmware activation time and compares it against the maximum platform supported time. If that activation time would exceed the platform maximum, the arm attempt gets aborted:
ndctl update-firmware --arm --bus=nfit_test.0 all
Error: update firmware: nmem4: arm aborted, tripped overflow
[
{
"dev":"nmem1",
"id":"cdab-0a-07e0-ffffffff",
"handle":"0",
"phys_id":"0",
"security":"disabled",
"firmware":{
"current_version":"0",
"can_update":true
}
},
{
"dev":"nmem3",
"id":"cdab-0a-07e0-fffeffff",
"handle":"0x100",
"phys_id":"0x2",
"security":"disabled",
"firmware":{
"current_version":"0",
"can_update":true
}
},
{
"dev":"nmem2",
"id":"cdab-0a-07e0-feffffff",
"handle":"0x1",
"phys_id":"0x1",
"security":"disabled",
"firmware":{
"current_version":"0",
"can_update":true
}
}
]
updated 3 nmems.
It is possible, but not recommended, to ignore timeout overflows with the --force option. Not me warning you twice π
And at any point, if you wanna see the 'armed' state of the bus, just do:
ndctl list -BF -b nfit_test.0
[
{
"provider":"nfit_test.0",
"dev":"ndbus2",
"scrub_state":"idle",
"firmware":{
"activate_method":"suspend",
"activate_state":"overflow"
}
}
]
-D,--disarmβ Disarm devices after uploading the firmware file, or manually disarm devices when a firmware image isn't specified. Heads up:--no-disarmis not accepted. Periodt.-v,--verboseβ Emit debug messages for the namespace check process π
π COPYRIGHT π
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.
okay that's the whole page, you're all caught up π¦ this was ndctl update-firmware from the ndctl Manual, dated 2026-07-07 β the manual page is literally called NDCTL-UPDATE-FIRMWARE(1) and honestly? she ate π β¨
π¦ where this page comes from
- fedora 43: ndctl 85-1.fc43 Β· GPL-2.0-only AND LGPL-2.1-only AND CC0-1.0 AND MIT
- fedora 44: ndctl 85-1.fc44 Β· GPL-2.0-only AND LGPL-2.1-only AND CC0-1.0 AND MIT
- ubuntu stonking: ndctl 82-1ubuntu1 Β· LGPL-2.1-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms