mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.7 KiB
86 lines
3.7 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
|
|
================================== |
|
NVDIMM Runtime Firmware Activation |
|
================================== |
|
|
|
Some persistent memory devices run a firmware locally on the device / |
|
"DIMM" to perform tasks like media management, capacity provisioning, |
|
and health monitoring. The process of updating that firmware typically |
|
involves a reboot because it has implications for in-flight memory |
|
transactions. However, reboots are disruptive and at least the Intel |
|
persistent memory platform implementation, described by the Intel ACPI |
|
DSM specification [1], has added support for activating firmware at |
|
runtime. |
|
|
|
A native sysfs interface is implemented in libnvdimm to allow platform |
|
to advertise and control their local runtime firmware activation |
|
capability. |
|
|
|
The libnvdimm bus object, ndbusX, implements an ndbusX/firmware/activate |
|
attribute that shows the state of the firmware activation as one of 'idle', |
|
'armed', 'overflow', and 'busy'. |
|
|
|
- idle: |
|
No devices are set / armed to activate firmware |
|
|
|
- armed: |
|
At least one device is armed |
|
|
|
- busy: |
|
In the busy state armed devices are in the process of transitioning |
|
back to idle and completing an activation cycle. |
|
|
|
- overflow: |
|
If the platform has a concept of incremental work needed to perform |
|
the activation it could be the case that too many DIMMs are armed for |
|
activation. In that scenario the potential for firmware activation to |
|
timeout is indicated by the 'overflow' state. |
|
|
|
The 'ndbusX/firmware/activate' property can be written with a value of |
|
either 'live', or 'quiesce'. A value of 'quiesce' triggers the kernel to |
|
run firmware activation from within the equivalent of the hibernation |
|
'freeze' state where drivers and applications are notified to stop their |
|
modifications of system memory. A value of 'live' attempts |
|
firmware activation without this hibernation cycle. The |
|
'ndbusX/firmware/activate' property will be elided completely if no |
|
firmware activation capability is detected. |
|
|
|
Another property 'ndbusX/firmware/capability' indicates a value of |
|
'live' or 'quiesce', where 'live' indicates that the firmware |
|
does not require or inflict any quiesce period on the system to update |
|
firmware. A capability value of 'quiesce' indicates that firmware does |
|
expect and injects a quiet period for the memory controller, but 'live' |
|
may still be written to 'ndbusX/firmware/activate' as an override to |
|
assume the risk of racing firmware update with in-flight device and |
|
application activity. The 'ndbusX/firmware/capability' property will be |
|
elided completely if no firmware activation capability is detected. |
|
|
|
The libnvdimm memory-device / DIMM object, nmemX, implements |
|
'nmemX/firmware/activate' and 'nmemX/firmware/result' attributes to |
|
communicate the per-device firmware activation state. Similar to the |
|
'ndbusX/firmware/activate' attribute, the 'nmemX/firmware/activate' |
|
attribute indicates 'idle', 'armed', or 'busy'. The state transitions |
|
from 'armed' to 'idle' when the system is prepared to activate firmware, |
|
firmware staged + state set to armed, and 'ndbusX/firmware/activate' is |
|
triggered. After that activation event the nmemX/firmware/result |
|
attribute reflects the state of the last activation as one of: |
|
|
|
- none: |
|
No runtime activation triggered since the last time the device was reset |
|
|
|
- success: |
|
The last runtime activation completed successfully. |
|
|
|
- fail: |
|
The last runtime activation failed for device-specific reasons. |
|
|
|
- not_staged: |
|
The last runtime activation failed due to a sequencing error of the |
|
firmware image not being staged. |
|
|
|
- need_reset: |
|
Runtime firmware activation failed, but the firmware can still be |
|
activated via the legacy method of power-cycling the system. |
|
|
|
[1]: https://docs.pmem.io/persistent-memory/
|
|
|