Skip to content

Commit e7201d9

Browse files
msatwoodLucas De Marchi
authored andcommitted
drm/xe: add new type to RTP context
Prepare the RTP context to be used before GT init. Add the xe device as a type, put WARN_ONs to protect existing RTP_MATCHes. v5: split out into separate patch, change definition order v6: catch missing cases for checking gt init Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com> Link: https://lore.kernel.org/r/20250709221605.172516-4-matthew.s.atwood@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
1 parent f037e0b commit e7201d9

3 files changed

Lines changed: 36 additions & 1 deletion

File tree

drivers/gpu/drm/xe/xe_rtp.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,37 +56,61 @@ static bool rule_matches(const struct xe_device *xe,
5656
xe->info.subplatform == r->subplatform;
5757
break;
5858
case XE_RTP_MATCH_GRAPHICS_VERSION:
59+
if (drm_WARN_ON(&xe->drm, !gt))
60+
return false;
61+
5962
match = xe->info.graphics_verx100 == r->ver_start &&
6063
(!has_samedia(xe) || !xe_gt_is_media_type(gt));
6164
break;
6265
case XE_RTP_MATCH_GRAPHICS_VERSION_RANGE:
66+
if (drm_WARN_ON(&xe->drm, !gt))
67+
return false;
68+
6369
match = xe->info.graphics_verx100 >= r->ver_start &&
6470
xe->info.graphics_verx100 <= r->ver_end &&
6571
(!has_samedia(xe) || !xe_gt_is_media_type(gt));
6672
break;
6773
case XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT:
74+
if (drm_WARN_ON(&xe->drm, !gt))
75+
return false;
76+
6877
match = xe->info.graphics_verx100 == r->ver_start;
6978
break;
7079
case XE_RTP_MATCH_GRAPHICS_STEP:
80+
if (drm_WARN_ON(&xe->drm, !gt))
81+
return false;
82+
7183
match = xe->info.step.graphics >= r->step_start &&
7284
xe->info.step.graphics < r->step_end &&
7385
(!has_samedia(xe) || !xe_gt_is_media_type(gt));
7486
break;
7587
case XE_RTP_MATCH_MEDIA_VERSION:
88+
if (drm_WARN_ON(&xe->drm, !gt))
89+
return false;
90+
7691
match = xe->info.media_verx100 == r->ver_start &&
7792
(!has_samedia(xe) || xe_gt_is_media_type(gt));
7893
break;
7994
case XE_RTP_MATCH_MEDIA_VERSION_RANGE:
95+
if (drm_WARN_ON(&xe->drm, !gt))
96+
return false;
97+
8098
match = xe->info.media_verx100 >= r->ver_start &&
8199
xe->info.media_verx100 <= r->ver_end &&
82100
(!has_samedia(xe) || xe_gt_is_media_type(gt));
83101
break;
84102
case XE_RTP_MATCH_MEDIA_STEP:
103+
if (drm_WARN_ON(&xe->drm, !gt))
104+
return false;
105+
85106
match = xe->info.step.media >= r->step_start &&
86107
xe->info.step.media < r->step_end &&
87108
(!has_samedia(xe) || xe_gt_is_media_type(gt));
88109
break;
89110
case XE_RTP_MATCH_MEDIA_VERSION_ANY_GT:
111+
if (drm_WARN_ON(&xe->drm, !gt))
112+
return false;
113+
90114
match = xe->info.media_verx100 == r->ver_start;
91115
break;
92116
case XE_RTP_MATCH_INTEGRATED:
@@ -108,6 +132,9 @@ static bool rule_matches(const struct xe_device *xe,
108132
match = hwe->class != r->engine_class;
109133
break;
110134
case XE_RTP_MATCH_FUNC:
135+
if (drm_WARN_ON(&xe->drm, !gt))
136+
return false;
137+
111138
match = r->match_func(gt, hwe);
112139
break;
113140
default:
@@ -186,6 +213,11 @@ static void rtp_get_context(struct xe_rtp_process_ctx *ctx,
186213
struct xe_device **xe)
187214
{
188215
switch (ctx->type) {
216+
case XE_RTP_PROCESS_TYPE_DEVICE:
217+
*hwe = NULL;
218+
*gt = NULL;
219+
*xe = ctx->xe;
220+
break;
189221
case XE_RTP_PROCESS_TYPE_GT:
190222
*hwe = NULL;
191223
*gt = ctx->gt;

drivers/gpu/drm/xe/xe_rtp.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,8 @@ struct xe_reg_sr;
422422

423423
#define XE_RTP_PROCESS_CTX_INITIALIZER(arg__) _Generic((arg__), \
424424
struct xe_hw_engine * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_ENGINE }, \
425-
struct xe_gt * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_GT })
425+
struct xe_gt * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_GT }, \
426+
struct xe_device * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_DEVICE })
426427

427428
void xe_rtp_process_ctx_enable_active_tracking(struct xe_rtp_process_ctx *ctx,
428429
unsigned long *active_entries,

drivers/gpu/drm/xe/xe_rtp_types.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,14 @@ struct xe_rtp_entry {
110110
};
111111

112112
enum xe_rtp_process_type {
113+
XE_RTP_PROCESS_TYPE_DEVICE,
113114
XE_RTP_PROCESS_TYPE_GT,
114115
XE_RTP_PROCESS_TYPE_ENGINE,
115116
};
116117

117118
struct xe_rtp_process_ctx {
118119
union {
120+
struct xe_device *xe;
119121
struct xe_gt *gt;
120122
struct xe_hw_engine *hwe;
121123
};

0 commit comments

Comments
 (0)