Commit 4b5581f1 authored by Jacek Lawrynowicz's avatar Jacek Lawrynowicz
Browse files

accel/ivpu: Disable PLL after VPU IP reset during FLR



IP reset has to followed by ivpu_pll_disable() to properly enter
reset state.

Fixes: 828d6304 ("accel/ivpu: Don't enter d0i3 during FLR")
Signed-off-by: default avatarJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Reviewed-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231024165353.761507-1-stanislaw.gruszka@linux.intel.com
parent b246271d
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -746,7 +746,7 @@ static int ivpu_hw_40xx_info_init(struct ivpu_device *vdev)
	return 0;
}

static int ivpu_hw_40xx_reset(struct ivpu_device *vdev)
static int ivpu_hw_40xx_ip_reset(struct ivpu_device *vdev)
{
	int ret;
	u32 val;
@@ -768,6 +768,23 @@ static int ivpu_hw_40xx_reset(struct ivpu_device *vdev)
	return ret;
}

static int ivpu_hw_40xx_reset(struct ivpu_device *vdev)
{
	int ret = 0;

	if (ivpu_hw_40xx_ip_reset(vdev)) {
		ivpu_err(vdev, "Failed to reset VPU IP\n");
		ret = -EIO;
	}

	if (ivpu_pll_disable(vdev)) {
		ivpu_err(vdev, "Failed to disable PLL\n");
		ret = -EIO;
	}

	return ret;
}

static int ivpu_hw_40xx_d0i3_enable(struct ivpu_device *vdev)
{
	int ret;
@@ -913,7 +930,7 @@ static int ivpu_hw_40xx_power_down(struct ivpu_device *vdev)

	ivpu_hw_40xx_save_d0i3_entry_timestamp(vdev);

	if (!ivpu_hw_40xx_is_idle(vdev) && ivpu_hw_40xx_reset(vdev))
	if (!ivpu_hw_40xx_is_idle(vdev) && ivpu_hw_40xx_ip_reset(vdev))
		ivpu_warn(vdev, "Failed to reset the VPU\n");

	if (ivpu_pll_disable(vdev)) {