mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
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>
This commit is contained in:
parent
f037e0b78e
commit
e7201d98ca
|
|
@ -56,37 +56,61 @@ 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));
|
||||
break;
|
||||
case XE_RTP_MATCH_GRAPHICS_VERSION_ANY_GT:
|
||||
if (drm_WARN_ON(&xe->drm, !gt))
|
||||
return false;
|
||||
|
||||
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));
|
||||
break;
|
||||
case XE_RTP_MATCH_MEDIA_VERSION_ANY_GT:
|
||||
if (drm_WARN_ON(&xe->drm, !gt))
|
||||
return false;
|
||||
|
||||
match = xe->info.media_verx100 == r->ver_start;
|
||||
break;
|
||||
case XE_RTP_MATCH_INTEGRATED:
|
||||
|
|
@ -108,6 +132,9 @@ static bool rule_matches(const struct xe_device *xe,
|
|||
match = hwe->class != r->engine_class;
|
||||
break;
|
||||
case XE_RTP_MATCH_FUNC:
|
||||
if (drm_WARN_ON(&xe->drm, !gt))
|
||||
return false;
|
||||
|
||||
match = r->match_func(gt, hwe);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -186,6 +213,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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user