FAILED: patch "[PATCH] accel/ivpu: Don't enter d0i3 during FLR" failed to apply to 6.5-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.5.y
git checkout FETCH_HEAD
git cherry-pick -x 828d63042aeca132a93938b98dc7f1a6c97bbc51
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023102007-snitch-flip-acaa@gregkh' --subject-prefix 'PATCH 6.5.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 828d63042aeca132a93938b98dc7f1a6c97bbc51 Mon Sep 17 00:00:00 2001
From: Jacek Lawrynowicz <[email protected]>
Date: Tue, 3 Oct 2023 08:42:13 +0200
Subject: [PATCH] accel/ivpu: Don't enter d0i3 during FLR
Avoid HW bug on some platforms where we enter D0i3 state and CPU is in low power states (C8 or above).
drivers/accel/ivpu/ivpu_drv.c +8 -3
@@ -367,14 +367,19 @@ int ivpu_boot(struct ivpu_device *vdev)return 0 ; } -int ivpu_shutdown (struct ivpu_device *vdev) +void ivpu_prepare_for_reset (struct ivpu_device *vdev) { -int ret; -ivpu_hw_irq_disable (vdev);disable_irq (vdev->irq);ivpu_ipc_disable (vdev);ivpu_mmu_disable (vdev); +} + +int ivpu_shutdown (struct ivpu_device *vdev) +{ +int ret; + +ivpu_prepare_for_reset (vdev); ret =ivpu_hw_power_down (vdev);if (ret)
drivers/accel/ivpu/ivpu_drv.h +1 -0
@@ -151,6 +151,7 @@ void ivpu_file_priv_put(struct ivpu_file_priv **link);int ivpu_boot (struct ivpu_device *vdev);int ivpu_shutdown (struct ivpu_device *vdev); +void ivpu_prepare_for_reset (struct ivpu_device *vdev);static inline u8 ivpu_revision (struct ivpu_device *vdev) {
drivers/accel/ivpu/ivpu_hw.h +8 -0
@@ -13,6 +13,7 @@ struct ivpu_hw_ops {int (*power_up)(struct ivpu_device *vdev);int (*boot_fw)(struct ivpu_device *vdev);int (*power_down)(struct ivpu_device *vdev); +int (*reset)(struct ivpu_device *vdev);bool (*is_idle)(struct ivpu_device *vdev);void (*wdt_disable)(struct ivpu_device *vdev);void (*diagnose_failure)(struct ivpu_device *vdev);
@@ -91,6 +92,13 @@ static inline int ivpu_hw_power_down(struct ivpu_device *vdev)return vdev->hw->ops->power_down (vdev); }; +static inline int ivpu_hw_reset (struct ivpu_device *vdev) +{ +ivpu_dbg (vdev,PM ,"HW reset\n" ); + +return vdev->hw->ops->reset (vdev); +}; +static inline void ivpu_hw_wdt_disable (struct ivpu_device *vdev) { vdev->hw->ops->wdt_disable (vdev);
drivers/accel/ivpu/ivpu_hw_37xx.c +1 -0
@@ -1029,6 +1029,7 @@ const struct ivpu_hw_ops ivpu_hw_37xx_ops = { .power_up = ivpu_hw_37xx_power_up, .is_idle = ivpu_hw_37xx_is_idle, .power_down = ivpu_hw_37xx_power_down, + .reset = ivpu_hw_37xx_reset, .boot_fw = ivpu_hw_37xx_boot_fw, .wdt_disable = ivpu_hw_37xx_wdt_disable, .diagnose_failure = ivpu_hw_37xx_diagnose_failure,
drivers/accel/ivpu/ivpu_hw_40xx.c +1 -0
@@ -1179,6 +1179,7 @@ const struct ivpu_hw_ops ivpu_hw_40xx_ops = { .power_up = ivpu_hw_40xx_power_up, .is_idle = ivpu_hw_40xx_is_idle, .power_down = ivpu_hw_40xx_power_down, + .reset = ivpu_hw_40xx_reset, .boot_fw = ivpu_hw_40xx_boot_fw, .wdt_disable = ivpu_hw_40xx_wdt_disable, .diagnose_failure = ivpu_hw_40xx_diagnose_failure,
drivers/accel/ivpu/ivpu_pm.c +2 -1
@@ -261,7 +261,8 @@ void ivpu_pm_reset_prepare_cb(struct pci_dev *pdev)ivpu_dbg (vdev,PM ,"Pre-reset..\n" );atomic_inc (&vdev->pm->reset_counter);atomic_set (&vdev->pm->in_reset,1 ); -ivpu_shutdown (vdev); +ivpu_prepare_for_reset (vdev); +ivpu_hw_reset (vdev);ivpu_pm_prepare_cold_boot (vdev);ivpu_jobs_abort_all (vdev);ivpu_dbg (vdev,PM ,"Pre-reset done.\n" );