Messages in this thread Patch in this message | | | From | Daniel Wagner <> | Subject | [PATCH v2] nvme: update firmware version after commit | Date | Fri, 13 Oct 2023 18:34:20 +0200 |
| |
The firmware version sysfs entry needs to be updated after a successfully firmware activation.
nvme-cli stopped issuing an Identify Controller command to list the current firmware information and relies on sysfs showing the current firmware version.
Reported-by: Kenji Tomonaga <tkenbo@gmail.com> Signed-off-by: Daniel Wagner <dwagner@suse.de> ---
Only compile tested. So you might want to wait until I am back from my vacation.
drivers/nvme/host/core.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 21783aa2ee8e..686478555585 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -4067,14 +4067,29 @@ static bool nvme_ctrl_pp_status(struct nvme_ctrl *ctrl) static void nvme_get_fw_slot_info(struct nvme_ctrl *ctrl) { struct nvme_fw_slot_info_log *log; + u64 afi; log = kmalloc(sizeof(*log), GFP_KERNEL); if (!log) return; if (nvme_get_log(ctrl, NVME_NSID_ALL, NVME_LOG_FW_SLOT, 0, NVME_CSI_NVM, - log, sizeof(*log), 0)) + log, sizeof(*log), 0)) { dev_warn(ctrl->device, "Get FW SLOT INFO log error\n"); + goto out_free_log; + } + + afi = le64_to_cpu(log->afi); + if (afi & 0x30) { + dev_info(ctrl->device, + "Firmware is activated after next Controller Level Reset\n"); + goto out_free_log; + } + + memcpy(ctrl->subsys->firmware_rev, &log->frs[afi & 0x3], + sizeof(ctrl->subsys->firmware_rev)); + +out_free_log: kfree(log); } -- 2.42.0
| |