[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