NVME-SET-REG(1)
π NVME-SET-REG(1) β nvme-set-reg, bestie edition
okay so real talk: this is a page from the NVMe Manual (yes, that NVMe), and it's about the nvme-set-reg command. It writes and shows the defined NVMe controller register. Let's get into it π
β¨ NAME β¨
nvme-set-reg β writes and shows the defined NVMe controller register π
π¦ SYNOPSIS π¦
nvme [<global-options>] set-reg <device>
[--register=<name> | -r <name>] [--offset=<offset> | -O <offset>]
[--value=<val> | -V <val>] [--mmio32 | -m]
πΈ DESCRIPTION πΈ
So what this does: it writes a controller register. If it's an NVMe over PCIe controller, it writes into its PCI memory space. If it's an NVMe over Fabrics controller β which has no PCI memory space, poor thing β it sets the property with a Property Set command instead. No cap, same energy, different plumbing. β¨
The <device> parameter is mandatory β like, non-negotiable, main character requirement β and it must be the nvme admin character device (example: /dev/nvme0). π
π OPTIONS π
-r <name>,--register=<name>β the register to write, by name. Pick one of the registers the host is allowed to write:intms,intmc,cc,csts,nssr,aqa,asq,acq,bprsel,bpmbl,cmbmsc,nssd,pmrctl,pmrmscl,pmrmscu.-O <offset>,--offset=<offset>β the register to write, but by offset or by name, e.g.0x14orcc. Your choice, bestie π«Ά-V <val>,--value=<val>β the value you're writing. Heads up: a 32 bit register will flat-out refuse a larger value. It's giving boundaries. π€-m,--mmio32β write a 64 bit register as two 32 bit accesses. Splitting it, iconic behavior.
β οΈ Also: the old-school options like--cc=<val>,--aqa=<val>and so on from earlier versions β one for each register the host may write β still work, but they're deprecated. Use--registerand--valueinstead, fr fr. Don't be that girl using deprecated flags π
π GLOBAL OPTIONS π
These are defined at the top-level nvme command and they're available to this subcommand too. Global besties, if you will. π
--dry-runβ print the command that would be executed, but don't actually execute it. Manifesting the command without committing to it β¨--no-ioctl-probingβ disable probing for 64-bit IOCTL support.--no-retriesβ disable retry logic on transient errors. One shot, one opportunity π-o <fmt>,--output-format=<fmt>β set the reporting format tonormal,tabular,'json, orbinary. Only one output format may be used at a time. Pick a lane, queen π--output-format-version=<version>β select the output format version. Version 1 uses the original field naming, while version 2 (default) provides more consistent and script-friendly field names. Any other versions are rejected β straight up not invited to the party π«--quietβ suppress informational messages. Errors still get reported, and--quietcancels any--verbosefor the library log level. Shhh π€«--set-options=<key=value>[,<key=value>...]β set libnvme library options for this one invocation. Supported keys areforce-4k,mi-probe-enabled,test-base-dirandtest-sysfs-dir.--timeout=<ms>β set the timeout for the command in milliseconds.infiniteor-1waits without a time limit (0xffffffff). Patience is a virtue, but like, optionally.-v,--verboseβ increase the level of detail in the output. You can pass it multiple times to keep cranking up the verbosity. Spill the tea, more of it β
Also! These options can be set as machine-wide defaults in nvme-cli.conf(5). And a command-line flag always overrides the file β CLI stays winning, no cap. π₯
β EXAMPLES β
- Write
0x460000to the Controller Configuration register:
# nvme set-reg /dev/nvme0 --register=cc --value=0x460000
slay. that's the whole thing. π β¨
π§ NVME π§
Part of the nvme-user suite. π«Ά
and that's the page!! this manual page is from the NVMe manual, dated 10/30/2026, and it's part of the nvme-user suite β go write some registers responsibly, bestie πππ¦
π¦ where this page comes from
- arch rolling: nvme-cli 3.2-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms