[PATCH v5 2/6] drm/xe: add new type to RTP context
Lucas De Marchi
lucas.demarchi at intel.com
Thu Jul 3 21:07:46 UTC 2025
On Wed, Jul 02, 2025 at 12:30:32PM -0700, Matt Atwood wrote:
>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
>
>Signed-off-by: Matt Atwood <matthew.s.atwood at intel.com>
>---
> drivers/gpu/drm/xe/xe_rtp.c | 26 ++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_rtp.h | 3 ++-
> drivers/gpu/drm/xe/xe_rtp_types.h | 2 ++
> 3 files changed, 30 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
>index 29e694bb1219..9ae0bf15984a 100644
>--- a/drivers/gpu/drm/xe/xe_rtp.c
>+++ b/drivers/gpu/drm/xe/xe_rtp.c
>@@ -56,10 +56,16 @@ static bool rule_matches(const struct xe_device *xe,
> xe->info.subplatform == r->subplatform;
> break;
> case XE_RTP_MATCH_GRAPHICS_VERSION:
>+ if (drm_WARN_ON(&xe->drm, !gt))
>+ return false;
>+
> match = xe->info.graphics_verx100 == r->ver_start &&
> (!has_samedia(xe) || !xe_gt_is_media_type(gt));
> break;
> case XE_RTP_MATCH_GRAPHICS_VERSION_RANGE:
>+ if (drm_WARN_ON(&xe->drm, !gt))
>+ return false;
>+
> match = xe->info.graphics_verx100 >= r->ver_start &&
> xe->info.graphics_verx100 <= r->ver_end &&
> (!has_samedia(xe) || !xe_gt_is_media_type(gt));
>@@ -68,20 +74,32 @@ static bool rule_matches(const struct xe_device *xe,
missed handling XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT?
> match = xe->info.graphics_verx100 == r->ver_start;
> break;
> case XE_RTP_MATCH_GRAPHICS_STEP:
>+ if (drm_WARN_ON(&xe->drm, !gt))
>+ return false;
>+
> match = xe->info.step.graphics >= r->step_start &&
> xe->info.step.graphics < r->step_end &&
> (!has_samedia(xe) || !xe_gt_is_media_type(gt));
> break;
> case XE_RTP_MATCH_MEDIA_VERSION:
>+ if (drm_WARN_ON(&xe->drm, !gt))
>+ return false;
>+
> match = xe->info.media_verx100 == r->ver_start &&
> (!has_samedia(xe) || xe_gt_is_media_type(gt));
> break;
> case XE_RTP_MATCH_MEDIA_VERSION_RANGE:
>+ if (drm_WARN_ON(&xe->drm, !gt))
>+ return false;
>+
> match = xe->info.media_verx100 >= r->ver_start &&
> xe->info.media_verx100 <= r->ver_end &&
> (!has_samedia(xe) || xe_gt_is_media_type(gt));
> break;
> case XE_RTP_MATCH_MEDIA_STEP:
>+ if (drm_WARN_ON(&xe->drm, !gt))
>+ return false;
>+
> match = xe->info.step.media >= r->step_start &&
> xe->info.step.media < r->step_end &&
> (!has_samedia(xe) || xe_gt_is_media_type(gt));
>@@ -108,6 +126,9 @@ static bool rule_matches(const struct xe_device *xe,
same thing here about XE_RTP_MATCH_MEDIA_VERSION_ANY_GT
> match = hwe->class != r->engine_class;
> break;
> case XE_RTP_MATCH_FUNC:
>+ if (drm_WARN_ON(&xe->drm, !gt))
>+ return false;
yeah... that func is gt or hwe specific, depending on gt.
with those missing ones added, Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>
I have some refactor ideas in this area, by splitting the enum
per context (no, device, gt, hwe), but it can wait and be done on top.
thanks
Lucas De Marchi
>+
> match = r->match_func(gt, hwe);
> break;
> default:
>@@ -186,6 +207,11 @@ static void rtp_get_context(struct xe_rtp_process_ctx *ctx,
> struct xe_device **xe)
> {
> switch (ctx->type) {
>+ case XE_RTP_PROCESS_TYPE_DEVICE:
>+ *hwe = NULL;
>+ *gt = NULL;
>+ *xe = ctx->xe;
>+ break;
> case XE_RTP_PROCESS_TYPE_GT:
> *hwe = NULL;
> *gt = ctx->gt;
>diff --git a/drivers/gpu/drm/xe/xe_rtp.h b/drivers/gpu/drm/xe/xe_rtp.h
>index 4fe736a11c42..ac260feaabef 100644
>--- a/drivers/gpu/drm/xe/xe_rtp.h
>+++ b/drivers/gpu/drm/xe/xe_rtp.h
>@@ -422,7 +422,8 @@ struct xe_reg_sr;
>
> #define XE_RTP_PROCESS_CTX_INITIALIZER(arg__) _Generic((arg__), \
> struct xe_hw_engine * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_ENGINE }, \
>- struct xe_gt * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_GT })
>+ struct xe_gt * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_GT }, \
>+ struct xe_device * : (struct xe_rtp_process_ctx){ { (void *)(arg__) }, XE_RTP_PROCESS_TYPE_DEVICE })
>
> void xe_rtp_process_ctx_enable_active_tracking(struct xe_rtp_process_ctx *ctx,
> unsigned long *active_entries,
>diff --git a/drivers/gpu/drm/xe/xe_rtp_types.h b/drivers/gpu/drm/xe/xe_rtp_types.h
>index 1b76b947c706..f4cf30e298cf 100644
>--- a/drivers/gpu/drm/xe/xe_rtp_types.h
>+++ b/drivers/gpu/drm/xe/xe_rtp_types.h
>@@ -110,12 +110,14 @@ struct xe_rtp_entry {
> };
>
> enum xe_rtp_process_type {
>+ XE_RTP_PROCESS_TYPE_DEVICE,
> XE_RTP_PROCESS_TYPE_GT,
> XE_RTP_PROCESS_TYPE_ENGINE,
> };
>
> struct xe_rtp_process_ctx {
> union {
>+ struct xe_device *xe;
> struct xe_gt *gt;
> struct xe_hw_engine *hwe;
> };
>--
>2.49.0
>
More information about the Intel-xe
mailing list