]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
nvme: update firmware version after commit
authorDaniel Wagner <dwagner@suse.de>
Mon, 30 Oct 2023 16:00:44 +0000 (17:00 +0100)
committerKeith Busch <kbusch@kernel.org>
Mon, 6 Nov 2023 16:08:11 +0000 (08:08 -0800)
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>
Tested-by: Kenji Tomonaga <tkenbo@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com>
[fixed off-by one afi index]
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/host/core.c

index 62612f87aafa228622859ebc2f484c93b7ebe55e..97441d02292643c6af9992badc9daf9b2558532d 100644 (file)
@@ -4074,8 +4074,21 @@ static void nvme_get_fw_slot_info(struct nvme_ctrl *ctrl)
                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;
+       }
+
+       if (log->afi & 0x70 || !(log->afi & 0x7)) {
+               dev_info(ctrl->device,
+                        "Firmware is activated after next Controller Level Reset\n");
+               goto out_free_log;
+       }
+
+       memcpy(ctrl->subsys->firmware_rev, &log->frs[(log->afi & 0x7) - 1],
+               sizeof(ctrl->subsys->firmware_rev));
+
+out_free_log:
        kfree(log);
 }