From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>,
Jeffrey Hugo <quic_jhugo@quicinc.com>,
Sasha Levin <sashal@kernel.org>,
stanislaw.gruszka@linux.intel.com, ogabbay@kernel.org,
dri-devel@lists.freedesktop.org
Subject: [PATCH AUTOSEL 6.8 17/43] accel/ivpu: Remove d3hot_after_power_off WA
Date: Mon, 22 Apr 2024 19:14:03 -0400 [thread overview]
Message-ID: <20240422231521.1592991-17-sashal@kernel.org> (raw)
In-Reply-To: <20240422231521.1592991-1-sashal@kernel.org>
From: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
[ Upstream commit e3caadf1f9dfc9d62b5ffc3bd73ebac0c8f26b3f ]
Always enter D3hot after entering D0i3 an all platforms.
This minimizes power usage.
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240402104929.941186-3-jacek.lawrynowicz@linux.intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/accel/ivpu/ivpu_drv.c | 20 ++++++++++----------
drivers/accel/ivpu/ivpu_drv.h | 3 +--
drivers/accel/ivpu/ivpu_hw_37xx.c | 4 +---
drivers/accel/ivpu/ivpu_pm.c | 7 ++-----
4 files changed, 14 insertions(+), 20 deletions(-)
diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
index b35c7aedca03e..bad1ccc81ad73 100644
--- a/drivers/accel/ivpu/ivpu_drv.c
+++ b/drivers/accel/ivpu/ivpu_drv.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
- * Copyright (C) 2020-2023 Intel Corporation
+ * Copyright (C) 2020-2024 Intel Corporation
*/
#include <linux/firmware.h>
@@ -371,12 +371,15 @@ int ivpu_shutdown(struct ivpu_device *vdev)
{
int ret;
- ivpu_prepare_for_reset(vdev);
+ /* Save PCI state before powering down as it sometimes gets corrupted if NPU hangs */
+ pci_save_state(to_pci_dev(vdev->drm.dev));
ret = ivpu_hw_power_down(vdev);
if (ret)
ivpu_warn(vdev, "Failed to power down HW: %d\n", ret);
+ pci_set_power_state(to_pci_dev(vdev->drm.dev), PCI_D3hot);
+
return ret;
}
@@ -543,11 +546,11 @@ static int ivpu_dev_init(struct ivpu_device *vdev)
/* Power up early so the rest of init code can access VPU registers */
ret = ivpu_hw_power_up(vdev);
if (ret)
- goto err_power_down;
+ goto err_shutdown;
ret = ivpu_mmu_global_context_init(vdev);
if (ret)
- goto err_power_down;
+ goto err_shutdown;
ret = ivpu_mmu_init(vdev);
if (ret)
@@ -584,10 +587,8 @@ static int ivpu_dev_init(struct ivpu_device *vdev)
ivpu_mmu_reserved_context_fini(vdev);
err_mmu_gctx_fini:
ivpu_mmu_global_context_fini(vdev);
-err_power_down:
- ivpu_hw_power_down(vdev);
- if (IVPU_WA(d3hot_after_power_off))
- pci_set_power_state(to_pci_dev(vdev->drm.dev), PCI_D3hot);
+err_shutdown:
+ ivpu_shutdown(vdev);
err_xa_destroy:
xa_destroy(&vdev->submitted_jobs_xa);
xa_destroy(&vdev->context_xa);
@@ -610,9 +611,8 @@ static void ivpu_bo_unbind_all_user_contexts(struct ivpu_device *vdev)
static void ivpu_dev_fini(struct ivpu_device *vdev)
{
ivpu_pm_disable(vdev);
+ ivpu_prepare_for_reset(vdev);
ivpu_shutdown(vdev);
- if (IVPU_WA(d3hot_after_power_off))
- pci_set_power_state(to_pci_dev(vdev->drm.dev), PCI_D3hot);
ivpu_jobs_abort_all(vdev);
ivpu_job_done_consumer_fini(vdev);
diff --git a/drivers/accel/ivpu/ivpu_drv.h b/drivers/accel/ivpu/ivpu_drv.h
index 069ace4adb2d1..e7a9e849940ea 100644
--- a/drivers/accel/ivpu/ivpu_drv.h
+++ b/drivers/accel/ivpu/ivpu_drv.h
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
- * Copyright (C) 2020-2023 Intel Corporation
+ * Copyright (C) 2020-2024 Intel Corporation
*/
#ifndef __IVPU_DRV_H__
@@ -87,7 +87,6 @@
struct ivpu_wa_table {
bool punit_disabled;
bool clear_runtime_mem;
- bool d3hot_after_power_off;
bool interrupt_clear_with_0;
bool disable_clock_relinquish;
bool disable_d0i3_msg;
diff --git a/drivers/accel/ivpu/ivpu_hw_37xx.c b/drivers/accel/ivpu/ivpu_hw_37xx.c
index 32bb772e03cf9..5e392b6823764 100644
--- a/drivers/accel/ivpu/ivpu_hw_37xx.c
+++ b/drivers/accel/ivpu/ivpu_hw_37xx.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
- * Copyright (C) 2020-2023 Intel Corporation
+ * Copyright (C) 2020-2024 Intel Corporation
*/
#include "ivpu_drv.h"
@@ -75,7 +75,6 @@ static void ivpu_hw_wa_init(struct ivpu_device *vdev)
{
vdev->wa.punit_disabled = false;
vdev->wa.clear_runtime_mem = false;
- vdev->wa.d3hot_after_power_off = true;
REGB_WR32(VPU_37XX_BUTTRESS_INTERRUPT_STAT, BUTTRESS_ALL_IRQ_MASK);
if (REGB_RD32(VPU_37XX_BUTTRESS_INTERRUPT_STAT) == BUTTRESS_ALL_IRQ_MASK) {
@@ -86,7 +85,6 @@ static void ivpu_hw_wa_init(struct ivpu_device *vdev)
IVPU_PRINT_WA(punit_disabled);
IVPU_PRINT_WA(clear_runtime_mem);
- IVPU_PRINT_WA(d3hot_after_power_off);
IVPU_PRINT_WA(interrupt_clear_with_0);
}
diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c
index a15d30d0943af..2d706cb29a5a5 100644
--- a/drivers/accel/ivpu/ivpu_pm.c
+++ b/drivers/accel/ivpu/ivpu_pm.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
- * Copyright (C) 2020-2023 Intel Corporation
+ * Copyright (C) 2020-2024 Intel Corporation
*/
#include <linux/highmem.h>
@@ -58,15 +58,12 @@ static int ivpu_suspend(struct ivpu_device *vdev)
{
int ret;
- /* Save PCI state before powering down as it sometimes gets corrupted if NPU hangs */
- pci_save_state(to_pci_dev(vdev->drm.dev));
+ ivpu_prepare_for_reset(vdev);
ret = ivpu_shutdown(vdev);
if (ret)
ivpu_err(vdev, "Failed to shutdown VPU: %d\n", ret);
- pci_set_power_state(to_pci_dev(vdev->drm.dev), PCI_D3hot);
-
return ret;
}
--
2.43.0
next prev parent reply other threads:[~2024-04-22 23:54 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-22 23:13 [PATCH AUTOSEL 6.8 01/43] tools/power turbostat: Fix added raw MSR output Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 02/43] tools/power turbostat: Increase the limit for fd opened Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 03/43] tools/power turbostat: Fix Bzy_MHz documentation typo Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 04/43] tools/power turbostat: Do not print negative LPI residency Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 05/43] tools/power turbostat: Expand probe_intel_uncore_frequency() Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 06/43] tools/power turbostat: Print ucode revision only if valid Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 07/43] tools/power turbostat: Fix warning upon failed /dev/cpu_dma_latency read Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 08/43] btrfs: make btrfs_clear_delalloc_extent() free delalloc reserve Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 09/43] btrfs: always clear PERTRANS metadata during commit Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 10/43] memblock tests: fix undefined reference to `early_pfn_to_nid' Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 11/43] memblock tests: fix undefined reference to `panic' Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 12/43] memblock tests: fix undefined reference to `BIT' Sasha Levin
2024-04-22 23:13 ` [PATCH AUTOSEL 6.8 13/43] nouveau/gsp: Avoid addressing beyond end of rpc->entries Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 14/43] scsi: target: Fix SELinux error when systemd-modules loads the target module Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 15/43] scsi: hisi_sas: Handle the NCQ error returned by D2H frame Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 16/43] blk-iocost: avoid out of bounds shift Sasha Levin
2024-04-22 23:14 ` Sasha Levin [this message]
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 18/43] accel/ivpu: Improve clarity of MMU error messages Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 19/43] accel/ivpu: Fix missed error message after VPU rename Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 20/43] platform/x86: acer-wmi: Add support for Acer PH18-71 Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 21/43] gpu: host1x: Do not setup DMA for virtual devices Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 22/43] MIPS: scall: Save thread_info.syscall unconditionally on entry Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 23/43] tools/power/turbostat: Fix uncore frequency file string Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 24/43] net: add copy_safe_from_sockptr() helper Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 25/43] nfc: llcp: fix nfc_llcp_setsockopt() unsafe copies Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 26/43] drm/amdgpu: Refine IB schedule error logging Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 27/43] drm/amd/display: add DCN 351 version for microcode load Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 28/43] drm/amdgpu: add smu 14.0.1 discovery support Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 29/43] drm/amdgpu: implement IRQ_STATE_ENABLE for SDMA v4.4.2 Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 30/43] drm/amd/display: Skip on writeback when it's not applicable Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 31/43] drm/amd/pm: fix the high voltage issue after unload Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 32/43] drm/amdgpu: Fix VCN allocation in CPX partition Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 33/43] amd/amdkfd: sync all devices to wait all processes being evicted Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 34/43] selftests: timers: Fix valid-adjtimex signed left-shift undefined behavior Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 35/43] Drivers: hv: vmbus: Leak pages if set_memory_encrypted() fails Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 36/43] Drivers: hv: vmbus: Track decrypted status in vmbus_gpadl Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 37/43] hv_netvsc: Don't free decrypted memory Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 38/43] uio_hv_generic: " Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 39/43] Drivers: hv: vmbus: Don't free ring buffers that couldn't be re-encrypted Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 40/43] drm/xe/xe_migrate: Cast to output precision before multiplying operands Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 41/43] drm/xe: Label RING_CONTEXT_CONTROL as masked Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 42/43] smb3: fix broken reconnect when password changing on the server by allowing password rotation Sasha Levin
2024-04-22 23:14 ` [PATCH AUTOSEL 6.8 43/43] iommu: mtk: fix module autoloading Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240422231521.1592991-17-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=jacek.lawrynowicz@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ogabbay@kernel.org \
--cc=quic_jhugo@quicinc.com \
--cc=stable@vger.kernel.org \
--cc=stanislaw.gruszka@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox