| From 820acc44728343b37810d1acd9251ffbaec83e67 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 7 Mar 2025 19:56:35 -0500 |
| Subject: drm/xe/pm: Temporarily disable D3Cold on BMG |
| |
| From: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| |
| [ Upstream commit 3e331a6715ee26f2fabc59dad6bb36d810707028 ] |
| |
| Currently, many instability cases related to D3Cold -> D0 transition |
| on BMG are under investigation. Among them some bad cases where |
| the device is lost after 1 to 3 transitions from D3Cold to D0 |
| on the runtime pm, with pcieport upstream bridge port link retrain |
| failure. |
| |
| In other cases, it works fine, but with some sudden random memory |
| corruptions after D3cold, that could be 0xffff missed ack on GT |
| forcewake or GuC reload related failures. |
| |
| In some other cases though, D3Cold -> D0 works pretty reliably. |
| It looks like it is a combination of GPU cards and Host boards at |
| this point. So, there is no possible/available quirk at this time. |
| |
| This patch disables the D3Cold by default on BMG by reducing the |
| vram_d3cold_threshold to 0. Users and developers who wants to enable |
| it are still able to via |
| $ echo 300 > /sys/bus/pci/devices/<addr>/vram_d3cold_threshold |
| |
| Fixes: 3adcf970dc7e ("drm/xe/bmg: Drop force_probe requirement") |
| Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4037 |
| Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4395 |
| Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4396 |
| Cc: Karthik Poosa <karthik.poosa@intel.com> |
| Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20250308005636.1475420-1-rodrigo.vivi@intel.com |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| (cherry picked from commit d945cc876277851053c0cf37927c8d7bd9d0e880) |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/xe/xe_pm.c | 13 ++++++++++++- |
| 1 file changed, 12 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c |
| index 40f7c844ed44a..f13bccfa09e2c 100644 |
| --- a/drivers/gpu/drm/xe/xe_pm.c |
| +++ b/drivers/gpu/drm/xe/xe_pm.c |
| @@ -266,6 +266,15 @@ int xe_pm_init_early(struct xe_device *xe) |
| } |
| ALLOW_ERROR_INJECTION(xe_pm_init_early, ERRNO); /* See xe_pci_probe() */ |
| |
| +static u32 vram_threshold_value(struct xe_device *xe) |
| +{ |
| + /* FIXME: D3Cold temporarily disabled by default on BMG */ |
| + if (xe->info.platform == XE_BATTLEMAGE) |
| + return 0; |
| + |
| + return DEFAULT_VRAM_THRESHOLD; |
| +} |
| + |
| /** |
| * xe_pm_init - Initialize Xe Power Management |
| * @xe: xe device instance |
| @@ -276,6 +285,7 @@ ALLOW_ERROR_INJECTION(xe_pm_init_early, ERRNO); /* See xe_pci_probe() */ |
| */ |
| int xe_pm_init(struct xe_device *xe) |
| { |
| + u32 vram_threshold; |
| int err; |
| |
| /* For now suspend/resume is only allowed with GuC */ |
| @@ -289,7 +299,8 @@ int xe_pm_init(struct xe_device *xe) |
| if (err) |
| return err; |
| |
| - err = xe_pm_set_vram_threshold(xe, DEFAULT_VRAM_THRESHOLD); |
| + vram_threshold = vram_threshold_value(xe); |
| + err = xe_pm_set_vram_threshold(xe, vram_threshold); |
| if (err) |
| return err; |
| } |
| -- |
| 2.39.5 |
| |