release 6.14.6
This commit is contained in:
72
debian/patches/patchset-pf/fixes/0011-mei-vsc-Use-struct-vsc_tp_packet-as-vsc-tp-tx_buf-an.patch
vendored
Normal file
72
debian/patches/patchset-pf/fixes/0011-mei-vsc-Use-struct-vsc_tp_packet-as-vsc-tp-tx_buf-an.patch
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
From b41541948188c8834cda272defdcaceb6b5192d5 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 18 Mar 2025 15:12:03 +0100
|
||||
Subject: mei: vsc: Use struct vsc_tp_packet as vsc-tp tx_buf and rx_buf type
|
||||
|
||||
vsc_tp.tx_buf and vsc_tp.rx_buf point to a struct vsc_tp_packet, use
|
||||
the correct type instead of "void *" and use sizeof(*ptr) when allocating
|
||||
memory for these buffers.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Reviewed-by: Alexander Usyskin <alexander.usyskin@intel.com>
|
||||
Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
|
||||
Link: https://lore.kernel.org/r/20250318141203.94342-3-hdegoede@redhat.com
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/misc/mei/vsc-tp.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/misc/mei/vsc-tp.c
|
||||
+++ b/drivers/misc/mei/vsc-tp.c
|
||||
@@ -71,8 +71,8 @@ struct vsc_tp {
|
||||
u32 seq;
|
||||
|
||||
/* command buffer */
|
||||
- void *tx_buf;
|
||||
- void *rx_buf;
|
||||
+ struct vsc_tp_packet *tx_buf;
|
||||
+ struct vsc_tp_packet *rx_buf;
|
||||
|
||||
atomic_t assert_cnt;
|
||||
wait_queue_head_t xfer_wait;
|
||||
@@ -164,7 +164,7 @@ static int vsc_tp_xfer_helper(struct vsc
|
||||
{
|
||||
int ret, offset = 0, cpy_len, src_len, dst_len = sizeof(struct vsc_tp_packet_hdr);
|
||||
int next_xfer_len = VSC_TP_PACKET_SIZE(pkt) + VSC_TP_XFER_TIMEOUT_BYTES;
|
||||
- u8 *src, *crc_src, *rx_buf = tp->rx_buf;
|
||||
+ u8 *src, *crc_src, *rx_buf = (u8 *)tp->rx_buf;
|
||||
int count_down = VSC_TP_MAX_XFER_COUNT;
|
||||
u32 recv_crc = 0, crc = ~0;
|
||||
struct vsc_tp_packet_hdr ack;
|
||||
@@ -324,7 +324,7 @@ int vsc_tp_rom_xfer(struct vsc_tp *tp, c
|
||||
guard(mutex)(&tp->mutex);
|
||||
|
||||
/* rom xfer is big endian */
|
||||
- cpu_to_be32_array(tp->tx_buf, obuf, words);
|
||||
+ cpu_to_be32_array((u32 *)tp->tx_buf, obuf, words);
|
||||
|
||||
ret = read_poll_timeout(gpiod_get_value_cansleep, ret,
|
||||
!ret, VSC_TP_ROM_XFER_POLL_DELAY_US,
|
||||
@@ -340,7 +340,7 @@ int vsc_tp_rom_xfer(struct vsc_tp *tp, c
|
||||
return ret;
|
||||
|
||||
if (ibuf)
|
||||
- be32_to_cpu_array(ibuf, tp->rx_buf, words);
|
||||
+ be32_to_cpu_array(ibuf, (u32 *)tp->rx_buf, words);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -494,11 +494,11 @@ static int vsc_tp_probe(struct spi_devic
|
||||
if (!tp)
|
||||
return -ENOMEM;
|
||||
|
||||
- tp->tx_buf = devm_kzalloc(dev, VSC_TP_MAX_XFER_SIZE, GFP_KERNEL);
|
||||
+ tp->tx_buf = devm_kzalloc(dev, sizeof(*tp->tx_buf), GFP_KERNEL);
|
||||
if (!tp->tx_buf)
|
||||
return -ENOMEM;
|
||||
|
||||
- tp->rx_buf = devm_kzalloc(dev, VSC_TP_MAX_XFER_SIZE, GFP_KERNEL);
|
||||
+ tp->rx_buf = devm_kzalloc(dev, sizeof(*tp->rx_buf), GFP_KERNEL);
|
||||
if (!tp->rx_buf)
|
||||
return -ENOMEM;
|
||||
|
98
debian/patches/patchset-pf/fixes/0012-Revert-drm-amd-Stop-evicting-resources-on-APUs-in-su.patch
vendored
Normal file
98
debian/patches/patchset-pf/fixes/0012-Revert-drm-amd-Stop-evicting-resources-on-APUs-in-su.patch
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
From dca14df8b269f207ac834149126964039142b596 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Thu, 1 May 2025 13:00:16 -0400
|
||||
Subject: Revert "drm/amd: Stop evicting resources on APUs in suspend"
|
||||
|
||||
This reverts commit 3a9626c816db901def438dc2513622e281186d39.
|
||||
|
||||
This breaks S4 because we end up setting the s3/s0ix flags
|
||||
even when we are entering s4 since prepare is used by both
|
||||
flows. The causes both the S3/s0ix and s4 flags to be set
|
||||
which breaks several checks in the driver which assume they
|
||||
are mutually exclusive.
|
||||
|
||||
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3634
|
||||
Cc: Mario Limonciello <mario.limonciello@amd.com>
|
||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 --
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 18 ------------------
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 11 ++---------
|
||||
3 files changed, 2 insertions(+), 29 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
||||
@@ -1594,11 +1594,9 @@ static inline void amdgpu_acpi_get_backl
|
||||
#if defined(CONFIG_ACPI) && defined(CONFIG_SUSPEND)
|
||||
bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev);
|
||||
bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev);
|
||||
-void amdgpu_choose_low_power_state(struct amdgpu_device *adev);
|
||||
#else
|
||||
static inline bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev) { return false; }
|
||||
static inline bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev) { return false; }
|
||||
-static inline void amdgpu_choose_low_power_state(struct amdgpu_device *adev) { }
|
||||
#endif
|
||||
|
||||
void amdgpu_register_gpu_instance(struct amdgpu_device *adev);
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
|
||||
@@ -1533,22 +1533,4 @@ bool amdgpu_acpi_is_s0ix_active(struct a
|
||||
#endif /* CONFIG_AMD_PMC */
|
||||
}
|
||||
|
||||
-/**
|
||||
- * amdgpu_choose_low_power_state
|
||||
- *
|
||||
- * @adev: amdgpu_device_pointer
|
||||
- *
|
||||
- * Choose the target low power state for the GPU
|
||||
- */
|
||||
-void amdgpu_choose_low_power_state(struct amdgpu_device *adev)
|
||||
-{
|
||||
- if (adev->in_runpm)
|
||||
- return;
|
||||
-
|
||||
- if (amdgpu_acpi_is_s0ix_active(adev))
|
||||
- adev->in_s0ix = true;
|
||||
- else if (amdgpu_acpi_is_s3_active(adev))
|
||||
- adev->in_s3 = true;
|
||||
-}
|
||||
-
|
||||
#endif /* CONFIG_SUSPEND */
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
@@ -4861,15 +4861,13 @@ int amdgpu_device_prepare(struct drm_dev
|
||||
struct amdgpu_device *adev = drm_to_adev(dev);
|
||||
int i, r;
|
||||
|
||||
- amdgpu_choose_low_power_state(adev);
|
||||
-
|
||||
if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
|
||||
return 0;
|
||||
|
||||
/* Evict the majority of BOs before starting suspend sequence */
|
||||
r = amdgpu_device_evict_resources(adev);
|
||||
if (r)
|
||||
- goto unprepare;
|
||||
+ return r;
|
||||
|
||||
flush_delayed_work(&adev->gfx.gfx_off_delay_work);
|
||||
|
||||
@@ -4880,15 +4878,10 @@ int amdgpu_device_prepare(struct drm_dev
|
||||
continue;
|
||||
r = adev->ip_blocks[i].version->funcs->prepare_suspend(&adev->ip_blocks[i]);
|
||||
if (r)
|
||||
- goto unprepare;
|
||||
+ return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
-
|
||||
-unprepare:
|
||||
- adev->in_s0ix = adev->in_s3 = adev->in_s4 = false;
|
||||
-
|
||||
- return r;
|
||||
}
|
||||
|
||||
/**
|
87
debian/patches/patchset-pf/fixes/0013-drm-amdgpu-fix-pm-notifier-handling.patch
vendored
Normal file
87
debian/patches/patchset-pf/fixes/0013-drm-amdgpu-fix-pm-notifier-handling.patch
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
From e9ee1b0a41166033eda14d11823826b79ce5131b Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Thu, 1 May 2025 13:46:46 -0400
|
||||
Subject: drm/amdgpu: fix pm notifier handling
|
||||
|
||||
Set the s3/s0ix and s4 flags in the pm notifier so that we can skip
|
||||
the resource evictions properly in pm prepare based on whether
|
||||
we are suspending or hibernating. Drop the eviction as processes
|
||||
are not frozen at this time, we we can end up getting stuck trying
|
||||
to evict VRAM while applications continue to submit work which
|
||||
causes the buffers to get pulled back into VRAM.
|
||||
|
||||
v2: Move suspend flags out of pm notifier (Mario)
|
||||
|
||||
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4178
|
||||
Fixes: 2965e6355dcd ("drm/amd: Add Suspend/Hibernate notification callback support")
|
||||
Cc: Mario Limonciello <mario.limonciello@amd.com>
|
||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 18 +++++-------------
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 10 +---------
|
||||
2 files changed, 6 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
@@ -4819,28 +4819,20 @@ static int amdgpu_device_evict_resources
|
||||
* @data: data
|
||||
*
|
||||
* This function is called when the system is about to suspend or hibernate.
|
||||
- * It is used to evict resources from the device before the system goes to
|
||||
- * sleep while there is still access to swap.
|
||||
+ * It is used to set the appropriate flags so that eviction can be optimized
|
||||
+ * in the pm prepare callback.
|
||||
*/
|
||||
static int amdgpu_device_pm_notifier(struct notifier_block *nb, unsigned long mode,
|
||||
void *data)
|
||||
{
|
||||
struct amdgpu_device *adev = container_of(nb, struct amdgpu_device, pm_nb);
|
||||
- int r;
|
||||
|
||||
switch (mode) {
|
||||
case PM_HIBERNATION_PREPARE:
|
||||
adev->in_s4 = true;
|
||||
- fallthrough;
|
||||
- case PM_SUSPEND_PREPARE:
|
||||
- r = amdgpu_device_evict_resources(adev);
|
||||
- /*
|
||||
- * This is considered non-fatal at this time because
|
||||
- * amdgpu_device_prepare() will also fatally evict resources.
|
||||
- * See https://gitlab.freedesktop.org/drm/amd/-/issues/3781
|
||||
- */
|
||||
- if (r)
|
||||
- drm_warn(adev_to_drm(adev), "Failed to evict resources, freeze active processes if problems occur: %d\n", r);
|
||||
+ break;
|
||||
+ case PM_POST_HIBERNATION:
|
||||
+ adev->in_s4 = false;
|
||||
break;
|
||||
}
|
||||
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
@@ -2592,13 +2592,8 @@ static int amdgpu_pmops_freeze(struct de
|
||||
static int amdgpu_pmops_thaw(struct device *dev)
|
||||
{
|
||||
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
||||
- struct amdgpu_device *adev = drm_to_adev(drm_dev);
|
||||
- int r;
|
||||
|
||||
- r = amdgpu_device_resume(drm_dev, true);
|
||||
- adev->in_s4 = false;
|
||||
-
|
||||
- return r;
|
||||
+ return amdgpu_device_resume(drm_dev, true);
|
||||
}
|
||||
|
||||
static int amdgpu_pmops_poweroff(struct device *dev)
|
||||
@@ -2611,9 +2606,6 @@ static int amdgpu_pmops_poweroff(struct
|
||||
static int amdgpu_pmops_restore(struct device *dev)
|
||||
{
|
||||
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
||||
- struct amdgpu_device *adev = drm_to_adev(drm_dev);
|
||||
-
|
||||
- adev->in_s4 = false;
|
||||
|
||||
return amdgpu_device_resume(drm_dev, true);
|
||||
}
|
Reference in New Issue
Block a user