€•&;Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ7/translations/zh_CN/driver-api/nvdimm/firmware-activate”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/zh_TW/driver-api/nvdimm/firmware-activate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/it_IT/driver-api/nvdimm/firmware-activate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ja_JP/driver-api/nvdimm/firmware-activate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ko_KR/driver-api/nvdimm/firmware-activate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/pt_BR/driver-api/nvdimm/firmware-activate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/sp_SP/driver-api/nvdimm/firmware-activate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/driver-api/nvdimm/firmware-activate.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ"NVDIMM Runtime Firmware Activation”h]”hŒ"NVDIMM Runtime Firmware Activation”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hXî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.”h]”hXò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.”…””}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)”}”(hŒ“A native sysfs interface is implemented in libnvdimm to allow platform to advertise and control their local runtime firmware activation capability.”h]”hŒ“A native sysfs interface is implemented in libnvdimm to allow platform to advertise and control their local runtime firmware activation capability.”…””}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)”}”(hŒµ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'.”h]”hŒÅ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’.”…””}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ6idle: No devices are set / armed to activate firmware ”h]”hÞ)”}”(hŒ5idle: No devices are set / armed to activate firmware”h]”hŒ5idle: No devices are set / armed to activate firmware”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubj)”}”(hŒ$armed: At least one device is armed ”h]”hÞ)”}”(hŒ#armed: At least one device is armed”h]”hŒ#armed: At least one device is armed”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubj)”}”(hŒ{busy: In the busy state armed devices are in the process of transitioning back to idle and completing an activation cycle. ”h]”hÞ)”}”(hŒzbusy: In the busy state armed devices are in the process of transitioning back to idle and completing an activation cycle.”h]”hŒzbusy: In the busy state armed devices are in the process of transitioning back to idle and completing an activation cycle.”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubj)”}”(hXoverflow: 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. ”h]”hÞ)”}”(hXoverflow: 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.”h]”hX 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.”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K"hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j h³hÇh´KhhÊh²hubhÞ)”}”(hXThe '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.”h]”hXThe ‘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.”…””}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hhÊh²hubhÞ)”}”(hXkAnother 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.”h]”hX‹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.”…””}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hhÊh²hubhÞ)”}”(hX`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:”h]”hXˆ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:”…””}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hhÊh²hubj )”}”(hhh]”(j)”}”(hŒOnone: No runtime activation triggered since the last time the device was reset ”h]”hÞ)”}”(hŒNnone: No runtime activation triggered since the last time the device was reset”h]”hŒNnone: No runtime activation triggered since the last time the device was reset”…””}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KEhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢h²hh³hÇh´Nubj)”}”(hŒ=success: The last runtime activation completed successfully. ”h]”hÞ)”}”(hŒ