[PATCH 1/4] drm/xe: Fix GT "for each engine" workaround handling
Tvrtko Ursulin
tvrtko.ursulin at igalia.com
Thu Jan 30 11:03:34 UTC 2025
Any rules using engine matching are currently broken due RTP processing
happening in early init before the list of hardware engines has been
initialised.
Fix it my moving the engine initialisation to earlier in the init process
and process the workaround and tuning lists just before the GuC load will
happen.
Looking at the debugfs gt0/workarounds on ADL-P we notice 14011060649
should be present while we see, before:
GT Workarounds
14011059788
14015795083
And after:
GT Workarounds
14011060649
14011059788
14015795083
v2:
* Moved OOB back to early init.
* Moved engine init and WA processing to earlier phase.
* Improved commit message.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
Cc: Lucas De Marchi <lucas.demarchi at intel.com>
Cc: Matt Roper <matthew.d.roper at intel.com>
---
Lets see if this explodes in CI...
---
drivers/gpu/drm/xe/xe_device.c | 18 ++++++++++++++++++
drivers/gpu/drm/xe/xe_gt.c | 6 ------
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index f3f754beb812..9d8dfee9dad2 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -55,6 +55,7 @@
#include "xe_tile.h"
#include "xe_ttm_stolen_mgr.h"
#include "xe_ttm_sys_mgr.h"
+#include "xe_tuning.h"
#include "xe_vm.h"
#include "xe_vram.h"
#include "xe_vsec.h"
@@ -793,6 +794,23 @@ int xe_device_probe(struct xe_device *xe)
}
for_each_gt(gt, xe, id) {
+ unsigned int fw_ref;
+
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (!fw_ref)
+ return -ETIMEDOUT;
+
+ err = xe_hw_engines_init_early(gt);
+ if (err) {
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ return err;
+ }
+
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+
+ xe_wa_process_gt(gt);
+ xe_tuning_process_gt(gt);
+
err = xe_gt_init_hwconfig(gt);
if (err)
return err;
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 01a4a852b8f4..c3711987737e 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -380,9 +380,7 @@ int xe_gt_init_early(struct xe_gt *gt)
if (err)
return err;
- xe_wa_process_gt(gt);
xe_wa_process_oob(gt);
- xe_tuning_process_gt(gt);
xe_force_wake_init_gt(gt, gt_to_fw(gt));
spin_lock_init(>->global_invl_lock);
@@ -430,10 +428,6 @@ static int gt_fw_domain_init(struct xe_gt *gt)
/* Rerun MCR init as we now have hw engine list */
xe_gt_mcr_init(gt);
- err = xe_hw_engines_init_early(gt);
- if (err)
- goto err_force_wake;
-
err = xe_hw_engine_class_sysfs_init(gt);
if (err)
goto err_force_wake;
--
2.48.0
More information about the Intel-xe
mailing list