aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/accel/ivpu/ivpu_hw.c
diff options
context:
space:
mode:
authorWachowski, Karol <karol.wachowski@intel.com>2024-06-11 14:04:18 +0200
committerJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>2024-06-14 09:09:36 +0200
commitd9dfc4eaa3c6bfbd072980a265edbaffbea4db4a (patch)
treed45e79a2ccf370d37560fa02101f497dbc783849 /drivers/accel/ivpu/ivpu_hw.c
parentdrm/bridge: sii902x: Add pixel clock check in atomic_check (diff)
downloadwireguard-linux-d9dfc4eaa3c6bfbd072980a265edbaffbea4db4a.tar.xz
wireguard-linux-d9dfc4eaa3c6bfbd072980a265edbaffbea4db4a.zip
accel/ivpu: Add wp0_during_power_up WA
Send workpoint 0 request during power up on 37xx. This is needed in rare case where WP0 was not sent during power down due to device hang. Signed-off-by: Wachowski, Karol <karol.wachowski@intel.com> Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240611120433.1012423-2-jacek.lawrynowicz@linux.intel.com
Diffstat (limited to '')
-rw-r--r--drivers/accel/ivpu/ivpu_hw.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/accel/ivpu/ivpu_hw.c b/drivers/accel/ivpu/ivpu_hw.c
index 9f5e3875baf1..daf1e4afb479 100644
--- a/drivers/accel/ivpu/ivpu_hw.c
+++ b/drivers/accel/ivpu/ivpu_hw.c
@@ -64,10 +64,14 @@ static void wa_init(struct ivpu_device *vdev)
if (ivpu_device_id(vdev) == PCI_DEVICE_ID_LNL)
vdev->wa.disable_clock_relinquish = true;
+ if (ivpu_hw_ip_gen(vdev) == IVPU_HW_IP_37XX)
+ vdev->wa.wp0_during_power_up = true;
+
IVPU_PRINT_WA(punit_disabled);
IVPU_PRINT_WA(clear_runtime_mem);
IVPU_PRINT_WA(interrupt_clear_with_0);
IVPU_PRINT_WA(disable_clock_relinquish);
+ IVPU_PRINT_WA(wp0_during_power_up);
}
static void timeouts_init(struct ivpu_device *vdev)
@@ -125,6 +129,13 @@ int ivpu_hw_power_up(struct ivpu_device *vdev)
{
int ret;
+ if (IVPU_WA(wp0_during_power_up)) {
+ /* WP requests may fail when powering down, so issue WP 0 here */
+ ret = wp_disable(vdev);
+ if (ret)
+ ivpu_warn(vdev, "Failed to disable workpoint: %d\n", ret);
+ }
+
ret = ivpu_hw_btrs_d0i3_disable(vdev);
if (ret)
ivpu_warn(vdev, "Failed to disable D0I3: %d\n", ret);