Intel Volume Management Device is a hardware logic inside processor's Root Complex responsible for management of PCIe NVMe SSDs. It provides robust Hot Plug support and Status LED management.
The driver is responsible for enumeration and hooking NVMe devices behind VMD into SPDK PCIe subsystem. It also provides API for LED management and hot plug.
|spdk_vmd_init()||Enumerate VMD devices and hook them into the spdk pci subsystem.|
|spdk_vmd_pci_device_list()||Returns a list of nvme devices found on the given vmd pci BDF.|
|spdk_vmd_set_led_state()||Sets the state of the LED on specified PCI device.|
|spdk_vmd_get_led_state()||Retrieves the state of the LED on specified PCI device.|
|spdk_vmd_hotplug_monitor()||Checks for hotplug/hotremove events of the devices behind the VMD.|
To enable VMD driver enumeration, the following steps are required:
Check for available VMD devices (VMD needs to be properly set up in BIOS first).
Run setup.sh script with VMD devices set in PCI_ALLOWED.
Check for available devices behind the VMD with spdk_lspci.
VMD NVMe BDF could be used as regular NVMe BDF.
When application framework is used, VMD section needs to be added to the configuration file:
or use RPC call before framework starts e.g.
To enable VMD enumeration in SPDK application that are not using application framework e.g nvme/perf, nvme/identify -V flag is required - please refer to app help if it supports VMD.
Applications need to call spdk_vmd_init() to enumerate NVMe devices behind the VMD prior to calling spdk_nvme_(probe|connect). To support hot plugs spdk_vmd_hotplug_monitor() needs to be called periodically.
VMD LED utility in the examples/vmd/led could be used to set LED states.
In order to verify that a platform is correctly configured to support LED management, ledctl(8) can be utilized. For instructions on how to use it, consult the manual page of this utility.