Skip to content

Commit f1909e8

Browse files
committed
Merge tag 'drm-xe-fixes-2024-06-13' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes
Core Changes: - Xe Maintainers update to MAINTAINERS file. Driver Changes: - Use correct forcewake assertions. - Assert that VRAM provisioning is only done on DGFX. - Flush render caches before user-fence signalling on all engines. - Move the disable_c6 call since it was sometimes never called. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/ZmrXV0FoBb8M0c6J@fedora
2 parents ae1e782 + 2470b14 commit f1909e8

File tree

5 files changed

+38
-12
lines changed

5 files changed

+38
-12
lines changed

MAINTAINERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11034,8 +11034,8 @@ F: include/uapi/drm/i915_drm.h
1103411034

1103511035
INTEL DRM XE DRIVER (Lunar Lake and newer)
1103611036
M: Lucas De Marchi <lucas.demarchi@intel.com>
11037-
M: Oded Gabbay <ogabbay@kernel.org>
1103811037
M: Thomas Hellström <thomas.hellstrom@linux.intel.com>
11038+
M: Rodrigo Vivi <rodrigo.vivi@intel.com>
1103911039
L: intel-xe@lists.freedesktop.org
1104011040
S: Supported
1104111041
W: https://drm.pages.freedesktop.org/intel-docs/

drivers/gpu/drm/xe/xe_gt_idle.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,13 @@ static const struct attribute *gt_idle_attrs[] = {
147147
static void gt_idle_sysfs_fini(struct drm_device *drm, void *arg)
148148
{
149149
struct kobject *kobj = arg;
150+
struct xe_gt *gt = kobj_to_gt(kobj->parent);
151+
152+
if (gt_to_xe(gt)->info.skip_guc_pc) {
153+
XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FW_GT));
154+
xe_gt_idle_disable_c6(gt);
155+
xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
156+
}
150157

151158
sysfs_remove_files(kobj, gt_idle_attrs);
152159
kobject_put(kobj);
@@ -199,7 +206,7 @@ void xe_gt_idle_enable_c6(struct xe_gt *gt)
199206
void xe_gt_idle_disable_c6(struct xe_gt *gt)
200207
{
201208
xe_device_assert_mem_access(gt_to_xe(gt));
202-
xe_force_wake_assert_held(gt_to_fw(gt), XE_FORCEWAKE_ALL);
209+
xe_force_wake_assert_held(gt_to_fw(gt), XE_FW_GT);
203210

204211
xe_mmio_write32(gt, PG_ENABLE, 0);
205212
xe_mmio_write32(gt, RC_CONTROL, 0);

drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,6 +1274,9 @@ static void pf_reset_vf_lmtt(struct xe_device *xe, unsigned int vfid)
12741274
struct xe_tile *tile;
12751275
unsigned int tid;
12761276

1277+
xe_assert(xe, IS_DGFX(xe));
1278+
xe_assert(xe, IS_SRIOV_PF(xe));
1279+
12771280
for_each_tile(tile, xe, tid) {
12781281
lmtt = &tile->sriov.pf.lmtt;
12791282
xe_lmtt_drop_pages(lmtt, vfid);
@@ -1292,6 +1295,9 @@ static int pf_update_vf_lmtt(struct xe_device *xe, unsigned int vfid)
12921295
unsigned int tid;
12931296
int err;
12941297

1298+
xe_assert(xe, IS_DGFX(xe));
1299+
xe_assert(xe, IS_SRIOV_PF(xe));
1300+
12951301
total = 0;
12961302
for_each_tile(tile, xe, tid)
12971303
total += pf_get_vf_config_lmem(tile->primary_gt, vfid);
@@ -1337,6 +1343,7 @@ static int pf_update_vf_lmtt(struct xe_device *xe, unsigned int vfid)
13371343

13381344
static void pf_release_vf_config_lmem(struct xe_gt *gt, struct xe_gt_sriov_config *config)
13391345
{
1346+
xe_gt_assert(gt, IS_DGFX(gt_to_xe(gt)));
13401347
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
13411348
lockdep_assert_held(xe_gt_sriov_pf_master_mutex(gt));
13421349

@@ -1355,6 +1362,7 @@ static int pf_provision_vf_lmem(struct xe_gt *gt, unsigned int vfid, u64 size)
13551362
int err;
13561363

13571364
xe_gt_assert(gt, vfid);
1365+
xe_gt_assert(gt, IS_DGFX(xe));
13581366
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
13591367

13601368
size = round_up(size, pf_get_lmem_alignment(gt));
@@ -1745,11 +1753,14 @@ static void pf_reset_config_sched(struct xe_gt *gt, struct xe_gt_sriov_config *c
17451753
static void pf_release_vf_config(struct xe_gt *gt, unsigned int vfid)
17461754
{
17471755
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
1756+
struct xe_device *xe = gt_to_xe(gt);
17481757

17491758
if (!xe_gt_is_media_type(gt)) {
17501759
pf_release_vf_config_ggtt(gt, config);
1751-
pf_release_vf_config_lmem(gt, config);
1752-
pf_update_vf_lmtt(gt_to_xe(gt), vfid);
1760+
if (IS_DGFX(xe)) {
1761+
pf_release_vf_config_lmem(gt, config);
1762+
pf_update_vf_lmtt(xe, vfid);
1763+
}
17531764
}
17541765
pf_release_config_ctxs(gt, config);
17551766
pf_release_config_dbs(gt, config);

drivers/gpu/drm/xe/xe_guc_pc.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -895,12 +895,6 @@ int xe_guc_pc_stop(struct xe_guc_pc *pc)
895895
static void xe_guc_pc_fini(struct drm_device *drm, void *arg)
896896
{
897897
struct xe_guc_pc *pc = arg;
898-
struct xe_device *xe = pc_to_xe(pc);
899-
900-
if (xe->info.skip_guc_pc) {
901-
xe_gt_idle_disable_c6(pc_to_gt(pc));
902-
return;
903-
}
904898

905899
XE_WARN_ON(xe_force_wake_get(gt_to_fw(pc_to_gt(pc)), XE_FORCEWAKE_ALL));
906900
XE_WARN_ON(xe_guc_pc_gucrc_disable(pc));

drivers/gpu/drm/xe/xe_ring_ops.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,16 @@ static int emit_store_imm_ggtt(u32 addr, u32 value, u32 *dw, int i)
8080
return i;
8181
}
8282

83+
static int emit_flush_dw(u32 *dw, int i)
84+
{
85+
dw[i++] = MI_FLUSH_DW | MI_FLUSH_IMM_DW;
86+
dw[i++] = 0;
87+
dw[i++] = 0;
88+
dw[i++] = 0;
89+
90+
return i;
91+
}
92+
8393
static int emit_flush_imm_ggtt(u32 addr, u32 value, bool invalidate_tlb,
8494
u32 *dw, int i)
8595
{
@@ -234,10 +244,12 @@ static void __emit_job_gen12_simple(struct xe_sched_job *job, struct xe_lrc *lrc
234244

235245
i = emit_bb_start(batch_addr, ppgtt_flag, dw, i);
236246

237-
if (job->user_fence.used)
247+
if (job->user_fence.used) {
248+
i = emit_flush_dw(dw, i);
238249
i = emit_store_imm_ppgtt_posted(job->user_fence.addr,
239250
job->user_fence.value,
240251
dw, i);
252+
}
241253

242254
i = emit_flush_imm_ggtt(xe_lrc_seqno_ggtt_addr(lrc), seqno, false, dw, i);
243255

@@ -293,10 +305,12 @@ static void __emit_job_gen12_video(struct xe_sched_job *job, struct xe_lrc *lrc,
293305

294306
i = emit_bb_start(batch_addr, ppgtt_flag, dw, i);
295307

296-
if (job->user_fence.used)
308+
if (job->user_fence.used) {
309+
i = emit_flush_dw(dw, i);
297310
i = emit_store_imm_ppgtt_posted(job->user_fence.addr,
298311
job->user_fence.value,
299312
dw, i);
313+
}
300314

301315
i = emit_flush_imm_ggtt(xe_lrc_seqno_ggtt_addr(lrc), seqno, false, dw, i);
302316

0 commit comments

Comments
 (0)