Unverified Commit 95d0883a authored by Xin Wang's avatar Xin Wang Committed by Rodrigo Vivi
Browse files

drm/xe: Ensure GT is in C0 during resumes

This patch ensures the gt will be awake for the entire duration
of the resume sequences until GuCRC takes over and GT-C6 gets
re-enabled.

Before suspending GT-C6 is kept enabled, but upon resume, GuCRC
is not yet alive to properly control the exits and some cases of
instability and corruption related to GT-C6 can be observed.

Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4037



Suggested-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: default avatarXin Wang <x.wang@intel.com>
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4037
Link: https://lore.kernel.org/r/20250827000633.1369890-3-x.wang@intel.com


Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 1313351e
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
#include "xe_device.h"
#include "xe_ggtt.h"
#include "xe_gt.h"
#include "xe_guc.h"
#include "xe_gt_idle.h"
#include "xe_i2c.h"
#include "xe_irq.h"
#include "xe_pcode.h"
@@ -177,6 +177,9 @@ int xe_pm_resume(struct xe_device *xe)
	drm_dbg(&xe->drm, "Resuming device\n");
	trace_xe_pm_resume(xe, __builtin_return_address(0));

	for_each_gt(gt, xe, id)
		xe_gt_idle_disable_c6(gt);

	for_each_tile(tile, xe, id)
		xe_wa_apply_tile_workarounds(tile);

@@ -537,6 +540,9 @@ int xe_pm_runtime_resume(struct xe_device *xe)

	xe_rpm_lockmap_acquire(xe);

	for_each_gt(gt, xe, id)
		xe_gt_idle_disable_c6(gt);

	if (xe->d3cold.allowed) {
		err = xe_pcode_ready(xe, true);
		if (err)