Skip to contentSkip to conversation

accel/ivpu: Add disable clock relinquish workaround for NVL-A0

PATCH In review Karol Wachowski 2 participants 3 messages Mar 23 – Mar 24

Subsystems (3)
lore
Share & tools
lore

Karol Wachowski

author maintainer
#0 lore raw

PATCH 1/1 accel/ivpu: Add disable clock relinquish workaround for NVL-A0

Turn on disable clock relinquish workaround for Nova Lake A0. Without this workaround NPU may not power off correctly after inference, leading to unexpected system behavior.

Fixes 550f4dd2cedd ("accel/ivpu: Add support for Nova Lake's NPU")
Cc <[email protected]> # v6.19+
---
 drivers/accel/ivpu/ivpu_drv.h | 1 +
 drivers/accel/ivpu/ivpu_hw.c  | 6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)
drivers/accel/ivpu/ivpu_drv.h +1 -0
index 5b34b6f50e69..f1b6155065ff 100644
@@ -35,6 +35,7 @@
 #define IVPU_HW_IP_60XX 60
 
 #define IVPU_HW_IP_REV_LNL_B0 4
+#define IVPU_HW_IP_REV_NVL_A0 0
 
 #define IVPU_HW_BTRS_MTL 1
 #define IVPU_HW_BTRS_LNL 2
drivers/accel/ivpu/ivpu_hw.c +4 -2
index d69cd0d93569..d4a9bcda4100 100644
@@ -70,8 +70,10 @@ static void wa_init(struct ivpu_device *vdev)
 	if (ivpu_hw_btrs_gen(vdev) == IVPU_HW_BTRS_MTL)
 		vdev->wa.interrupt_clear_with_0 = ivpu_hw_btrs_irqs_clear_with_0_mtl(vdev);
 
-	if (ivpu_device_id(vdev) == PCI_DEVICE_ID_LNL &&
-	    ivpu_revision(vdev) < IVPU_HW_IP_REV_LNL_B0)
+	if ((ivpu_device_id(vdev) == PCI_DEVICE_ID_LNL &&
+	     ivpu_revision(vdev) < IVPU_HW_IP_REV_LNL_B0) ||
+	    (ivpu_device_id(vdev) == PCI_DEVICE_ID_NVL &&
+	     ivpu_revision(vdev) == IVPU_HW_IP_REV_NVL_A0))
 		vdev->wa.disable_clock_relinquish = true;
 
 	if (ivpu_test_mode & IVPU_TEST_MODE_CLK_RELINQ_ENABLE)
Signature · 1 line
2.43.0
Reviewed-by on v1 1/1
#1 lore raw
Quoted 30 lines · Karol Wachowski

Turn on disable clock relinquish workaround for Nova Lake A0. Without this workaround NPU may not power off correctly after inference, leading to unexpected system behavior.

Fixes 550f4dd2cedd ("accel/ivpu: Add support for Nova Lake's NPU")
Cc <[email protected]> # v6.19+
---
  drivers/accel/ivpu/ivpu_drv.h | 1 +
  drivers/accel/ivpu/ivpu_hw.c  | 6 ++++--
  2 files changed, 5 insertions(+), 2 deletions(-)
drivers/accel/ivpu/ivpu_drv.h +1 -0
index 5b34b6f50e69..f1b6155065ff 100644
@@ -35,6 +35,7 @@
  #define IVPU_HW_IP_60XX 60
 
  #define IVPU_HW_IP_REV_LNL_B0 4
+#define IVPU_HW_IP_REV_NVL_A0 0
 
  #define IVPU_HW_BTRS_MTL 1
  #define IVPU_HW_BTRS_LNL 2
drivers/accel/ivpu/ivpu_hw.c +0 -0
index d69cd0d93569..d4a9bcda4100 100644

drivers/accel/ivpu/ivpu_hw.c static void wa_init(struct ivpu_device *vdev) · line 76

Quoted 9 lines
drivers/accel/ivpu/ivpu_hw.c +4 -2
@@ -70,8 +70,10 @@ static void wa_init(struct ivpu_device *vdev)
  	if (ivpu_hw_btrs_gen(vdev) == IVPU_HW_BTRS_MTL)
  		vdev->wa.interrupt_clear_with_0 = ivpu_hw_btrs_irqs_clear_with_0_mtl(vdev);
 
-	if (ivpu_device_id(vdev) == PCI_DEVICE_ID_LNL &&
-	    ivpu_revision(vdev) < IVPU_HW_IP_REV_LNL_B0)
+	if ((ivpu_device_id(vdev) == PCI_DEVICE_ID_LNL &&
+	     ivpu_revision(vdev) < IVPU_HW_IP_REV_LNL_B0) ||
+	    (ivpu_device_id(vdev) == PCI_DEVICE_ID_NVL &&
+	     ivpu_revision(vdev) == IVPU_HW_IP_REV_NVL_A0))
Quoted 3 lines
drivers/accel/ivpu/ivpu_hw.c +0 -0
  		vdev->wa.disable_clock_relinquish = true;
 
  	if (ivpu_test_mode & IVPU_TEST_MODE_CLK_RELINQ_ENABLE)
author maintainer Applied
#2 lore raw
Quoted 33 lines · Lizhi Hou
Quoted 31 lines · Karol Wachowski

Turn on disable clock relinquish workaround for Nova Lake A0. Without this workaround NPU may not power off correctly after inference, leading to unexpected system behavior.

Fixes 550f4dd2cedd ("accel/ivpu: Add support for Nova Lake's NPU")
Cc <[email protected]> # v6.19+

---
  drivers/accel/ivpu/ivpu_drv.h | 1 +
  drivers/accel/ivpu/ivpu_hw.c  | 6 ++++--

  2 files changed, 5 insertions(+), 2 deletions(-)
drivers/accel/ivpu/ renamed from drivers/accel/ivpu/ivpu_drv.h +0 -0

ivpu_drv.h
index 5b34b6f50e69..f1b6155065ff 100644

drivers/accel/ivpu/ivpu_drv.h +1 -0
@@ -35,6 +35,7 @@
   #define IVPU_HW_IP_60XX 60
     #define IVPU_HW_IP_REV_LNL_B0 4
+#define IVPU_HW_IP_REV_NVL_A0 0
     #define IVPU_HW_BTRS_MTL 1
   #define IVPU_HW_BTRS_LNL 2
drivers/accel/ivpu/ivpu_hw.c +0 -0
index d69cd0d93569..d4a9bcda4100 100644
@@ -70,8 +70,10 @@ static void wa_init(struct ivpu_device *vdev)
       if (ivpu_hw_btrs_gen(vdev) == IVPU_HW_BTRS_MTL)

          vdev->wa.interrupt_clear_with_0 =

Quoted 8 lines
Quoted 7 lines

ivpu_hw_btrs_irqs_clear_with_0_mtl(vdev);
  -    if (ivpu_device_id(vdev) == PCI_DEVICE_ID_LNL && -        ivpu_revision(vdev) < IVPU_HW_IP_REV_LNL_B0) +    if ((ivpu_device_id(vdev) == PCI_DEVICE_ID_LNL && +         ivpu_revision(vdev) < IVPU_HW_IP_REV_LNL_B0) || +        (ivpu_device_id(vdev) == PCI_DEVICE_ID_NVL && +         ivpu_revision(vdev) == IVPU_HW_IP_REV_NVL_A0))

Thank you, applied to drm-misc-fixes.

Karol

Quoted 3 lines
Quoted 2 lines

          vdev->wa.disable_clock_relinquish = true; if (ivpu_test_mode & IVPU_TEST_MODE_CLK_RELINQ_ENABLE)