]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
accel/habanalabs/gaudi2: read preboot status after recovering from dirty state
authorKonstantin Sinyuk <konstantin.sinyuk@intel.com>
Tue, 1 Oct 2024 12:52:27 +0000 (15:52 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:31 +0000 (15:37 -0500)
[ Upstream commit a0d866bab184161ba155b352650083bf6695e50e ]

Dirty state can occur when the host VM undergoes a reset while the
device does not. In such a case, the driver must reset the device before
it can be used again. As part of this reset, the device capabilities
are zeroed. Therefore, the driver must read the Preboot status again to
learn the Preboot state, capabilities, and security configuration.

Signed-off-by: Konstantin Sinyuk <konstantin.sinyuk@intel.com>
Reviewed-by: Koby Elbaz <koby.elbaz@intel.com>
Signed-off-by: Koby Elbaz <koby.elbaz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/accel/habanalabs/gaudi2/gaudi2.c

index 5722e4128d3cee8cc8fbc652347b9b198b94c031..3df72a5d024a6a05663ef56701c7644956cf1879 100644 (file)
@@ -3150,7 +3150,6 @@ static int gaudi2_early_init(struct hl_device *hdev)
        rc = hl_fw_read_preboot_status(hdev);
        if (rc) {
                if (hdev->reset_on_preboot_fail)
-                       /* we are already on failure flow, so don't check if hw_fini fails. */
                        hdev->asic_funcs->hw_fini(hdev, true, false);
                goto pci_fini;
        }
@@ -3162,6 +3161,13 @@ static int gaudi2_early_init(struct hl_device *hdev)
                        dev_err(hdev->dev, "failed to reset HW in dirty state (%d)\n", rc);
                        goto pci_fini;
                }
+
+               rc = hl_fw_read_preboot_status(hdev);
+               if (rc) {
+                       if (hdev->reset_on_preboot_fail)
+                               hdev->asic_funcs->hw_fini(hdev, true, false);
+                       goto pci_fini;
+               }
        }
 
        return 0;