Topic: nvme-mi

This page lists all of the content under the nvme-mi topic.

MCTP + Rust: new crates for platform MCTP infrastructure

At Code Construct, we have been working on a suite of open source Management Component Transport Protocol (MCTP) infrastructure in Rust, to support our clients' platform bringup projects. We have since published that code to our github repositories - so have provided a brief tour of those new repositories here.

Overall, the source code below implements a set of tooling for implementing MCTP-based communication on Linux (where we have core support for MCTP in the operating system) and on embedded systems (where we do not). For the latter cases, we have a stand-alone MCTP stack implementation, portable enough for general microcontroller usage.

All of the code referenced below is now available in our github repositories, and is under active development. Read on for details!

NVMe out-of-band firmware updates

We have recently been adding support to the libnvme and MCTP components of Linux that allow out-of-band communication with NVMe storage devices. One of the neat applications of this is to manage device firmware - allowing a BMC to update firmware over an out-of-band (OOB) channel, without any intervention from the host system.

The protocol for the firmware updates is specified by the NVM Express standard, so device support is generally pretty good. As long as the device supports NVMe-MI, out-of-band firmware update should work.

NVMe-MI with libnvme

The Non-Volatile Memory Express (NVMe) standard describes an interface between storage controllers and host hardware. Alongside this, there's also a "management interface" (MI) standard for interacting with NVMe devices over a lighter-weight channel - typically to allow a management controller to discover and manage storage devices, over an out-of-band link, typically I²C/SMBus.