]> git.baikalelectronics.ru Git - kernel.git/commitdiff
habanalabs/gaudi: replace hl_poll_timeout with while loop
authorDafna Hirschfeld <dhirschfeld@habana.ai>
Sun, 26 Jun 2022 13:18:40 +0000 (16:18 +0300)
committerOded Gabbay <ogabbay@kernel.org>
Tue, 12 Jul 2022 06:09:26 +0000 (09:09 +0300)
in gaudi_scrub_device_mem, replace call to hl_poll_timeout
with a while loop to avoid using dummy variables.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Dafna Hirschfeld <dhirschfeld@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/gaudi/gaudi.c

index 584feac7ee8375c58a941f9ec1a600b3f7a3a432..05d9817985d99ed7d0316a090c83d26186ac26b7 100644 (file)
@@ -4827,23 +4827,22 @@ static int gaudi_scrub_device_dram(struct hl_device *hdev, u64 val)
 static int gaudi_scrub_device_mem(struct hl_device *hdev)
 {
        struct asic_fixed_properties *prop = &hdev->asic_prop;
-       u64 addr, size, dummy_val;
+       u64 wait_to_idle_time = hdev->pdev ? HBM_SCRUBBING_TIMEOUT_US :
+                       min_t(u64, HBM_SCRUBBING_TIMEOUT_US * 10, HL_SIM_MAX_TIMEOUT_US);
+       u64 addr, size, val = hdev->memory_scrub_val;
+       ktime_t timeout;
        int rc = 0;
-       u64 val = hdev->memory_scrub_val;
 
        if (!hdev->memory_scrub)
                return 0;
 
-       /* Wait till device is idle */
-       rc = hl_poll_timeout(hdev,
-                       mmDMA0_CORE_STS0 /* dummy */,
-                       dummy_val /* dummy */,
-                       (hdev->asic_funcs->is_device_idle(hdev, NULL, 0, NULL)),
-                       1000,
-                       HBM_SCRUBBING_TIMEOUT_US);
-       if (rc) {
-               dev_err(hdev->dev, "waiting for idle timeout\n");
-               return -EIO;
+       timeout = ktime_add_us(ktime_get(), wait_to_idle_time);
+       while (!hdev->asic_funcs->is_device_idle(hdev, NULL, 0, NULL)) {
+               if (ktime_compare(ktime_get(), timeout) > 0) {
+                       dev_err(hdev->dev, "waiting for idle timeout\n");
+                       return -ETIMEDOUT;
+               }
+               usleep_range((1000 >> 2) + 1, 1000);
        }
 
        /* Scrub SRAM */