summaryrefslogtreecommitdiffstats
path: root/Documentation/nvme-rpmb.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/nvme-rpmb.txt')
-rw-r--r--Documentation/nvme-rpmb.txt150
1 files changed, 150 insertions, 0 deletions
diff --git a/Documentation/nvme-rpmb.txt b/Documentation/nvme-rpmb.txt
new file mode 100644
index 0000000..f9b371a
--- /dev/null
+++ b/Documentation/nvme-rpmb.txt
@@ -0,0 +1,150 @@
+nvme-rpmb(1)
+==============
+
+NAME
+----
+nvme-rpmb - Send RPMB commands to an NVMe device
+
+SYNOPSIS
+--------
+[verse]
+'nvme rpmb' <device> [--cmd=<command> | -c <command>]
+ [--msgfile=<data-file> | -f <data-file>]
+ [--keyfile=<key-file> | -g <key-file>]
+ [--key=<key> | -k <key>]
+ [--msg=<data> | -d <data>]
+ [--address=<offset> | -o <offset>]
+ [--blocks=<512 byte sectors> | -b <sectors> ]
+ [--target=<target-id> | -t <id> ]
+
+DESCRIPTION
+-----------
+For the NVMe device given, send an nvme rpmb command and provide the results.
+
+The <device> parameter is mandatory and NVMe character device (ex: /dev/nvme0)
+must be specified. If the given device supports RPMB targets, command given
+with --cmd or -c option shall be sent to the controller. If given NVMe device
+doesn't support RPMB targets, a message indicating the same shall be printed
+along with controller register values related RPMB.
+
+OPTIONS
+-------
+-c <command>::
+--cmd=<command>::
+ RPMB command to be sent to the device. It can be one of the following
+
+ info - print information regarding supported RPMB targets and
+ access and total sizes. No further arguments are required
+
+ program-key - program 'key' specified with -k option or key read from
+ file specified with --keyfile option to the specified
+ RPMB target given with --target or -t options. As per
+ spec, this is one time action which can't be undone.
+
+ read-couter - Read 'write counter' of specified RPMB target. The
+ counter value read is printed onto STDOUT
+
+ read-config - Read 512 bytes of device configuration block data of
+ specified RPMB target of the NVMe device. The data read
+ is written to input file specified with --msgfile or -f
+ option.
+ write-config - Write 512 byes of device configuration block data
+ from file specified by --msgfile or -f options to the
+ RPMB target specified with --target or -t options.
+
+ read-data - Supports authenticated data reading from specified
+ RPMB target (--target or -t option) at given offset
+ specified with --address or -o option, using key
+ specified using --keyfile or -k options. --blocks or
+ -o option should be given to read the amount of data
+ to be read in 512 byte blocks.
+
+ write-data - Supports authenticated data writting to specified RPMB
+ target (--target or -t option) at given offset
+ specified with --address or -o option, using key
+ specified using --keyfile or -k options. --blocks or
+ -o option should be given to indicate amount of data
+ to be written in 512 byte blocks.
+
+ For data transfer (read/write) commands, if the specified size is not
+ within the total size supported by a target, the request is failed
+ nvme-rpmb without sending it to device. RPMB target 0 is used as the
+ default target if --target or -t is not specified. 0x0 is used as the
+ default address if no -address or -o option is specified,
+
+-t <target>::
+--target=<target>::
+ RPMB target id. This should be one of the supported RPMB targets as
+ reported by 'info' command. If nothing is given, default of 0 is used
+ as RPMB target.
+
+-k <key>::
+--key=<key>::
+-g <key-file>::
+--keyfile=<key-file>::
+ Authentication key to be used for read/write commands. This should have
+ been already programmed by 'program-key' command for given target. Key
+ can be specified on command line using --key or -k options. Key can
+ also be specified using file argument specified with --keyfile or -g
+ options.
+
+-f <data-file>::
+--msgfile=<data-file>::
+ Name of the file to be used for data transfer commands (read or write).
+ For read command, if an existing file is specified, it will be appended.
+
+-d <data>::
+--msg=<data>::
+ These options provide the data on the command line itself.
+-o <offset>::
+--address=<offset>::
+ The address (in 512 byte sector offset from 0) to be used for data
+ trasnfer commands (read or write) for a specified RPMB target.
+-b::
+--blocks=<sectors>::
+ The size in 512 byte sectors to be used for data trasnfer commands
+ (read or write) for a specified RPMB target.
+
+EXAMPLES
+--------
+* Print RPMB support information of an NVMe device
++
+-----------
+# nvme rpmb /dev/nvme0 --cmd=info
+-----------
++
+* Program 'SecreteKey' as authentication key for target 1
++
+------------
+# nvme rpmb /dev/nvme0 --cmd=program-key -key='SecretKey' --target=1
+------------
++
+* Read current write counter of RPMB target 0
++
+------------
+# nvme rpmb /dev/nvme0 --cmd=read-counter --target=0
+------------
++
+* Read configuration data block of target 2 into config.bin file
++
+------------
+# nvme rpmb /dev/nvme0 --cmd=read-config --target=2 -f config.bin
+------------
++
+* Write 200 blocks of (512 bytes) from input.bin onto target 0
++
+------------
+# nvme rpmb /dev/nvme0 -c write-data -t 0 -f input.bin -b 200 -k 'SecreteKey'
+------------
++
+* Read 200 blocks of (512 bytes) from target 2, at offset 0x100 and save the
+* data onto output.bin
++
+------------
+# nvme rpmb /dev/nvme0 -c read-data -t 2 -f out.bin -b 200 -o 0x100
+------------
+
+NVME
+----
+Part of the nvme-user suite
+