]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe/oa: Refactor oa_unit_supports_oa_format
authorAshutosh Dixit <ashutosh.dixit@intel.com>
Thu, 30 Apr 2026 16:14:56 +0000 (09:14 -0700)
committerAshutosh Dixit <ashutosh.dixit@intel.com>
Tue, 12 May 2026 21:34:17 +0000 (14:34 -0700)
Minor refactor of oa_unit_supports_oa_format to implement Wa_14026746987.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Link: https://patch.msgid.link/20260430161459.2892545-2-ashutosh.dixit@intel.com
drivers/gpu/drm/xe/xe_oa.c

index 5de5bf19240a2915396077765ddfd4423d519f55..b767dccfc4fc7313ebf86adebdc68c5d4713879c 100644 (file)
@@ -1934,16 +1934,18 @@ static u64 oa_exponent_to_ns(struct xe_gt *gt, int exponent)
        return div_u64(nom + den - 1, den);
 }
 
-static bool oa_unit_supports_oa_format(struct xe_oa_open_param *param, int type)
+static bool oa_unit_supports_oa_format(struct xe_oa *oa, struct xe_oa_open_param *param)
 {
+       const struct xe_oa_format *f = &oa->oa_formats[param->oa_format];
+
        switch (param->oa_unit->type) {
        case DRM_XE_OA_UNIT_TYPE_OAG:
-               return type == DRM_XE_OA_FMT_TYPE_OAG || type == DRM_XE_OA_FMT_TYPE_OAR ||
-                       type == DRM_XE_OA_FMT_TYPE_OAC || type == DRM_XE_OA_FMT_TYPE_PEC;
+               return f->type == DRM_XE_OA_FMT_TYPE_OAG || f->type == DRM_XE_OA_FMT_TYPE_OAR ||
+                       f->type == DRM_XE_OA_FMT_TYPE_OAC || f->type == DRM_XE_OA_FMT_TYPE_PEC;
        case DRM_XE_OA_UNIT_TYPE_OAM:
        case DRM_XE_OA_UNIT_TYPE_OAM_SAG:
        case DRM_XE_OA_UNIT_TYPE_MERT:
-               return type == DRM_XE_OA_FMT_TYPE_OAM || type == DRM_XE_OA_FMT_TYPE_OAM_MPEC;
+               return f->type == DRM_XE_OA_FMT_TYPE_OAM || f->type == DRM_XE_OA_FMT_TYPE_OAM_MPEC;
        default:
                return false;
        }
@@ -2083,8 +2085,7 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, u64 data, struct drm_file *f
                goto err_exec_q;
 
        f = &oa->oa_formats[param.oa_format];
-       if (!param.oa_format || !f->size ||
-           !oa_unit_supports_oa_format(&param, f->type)) {
+       if (!param.oa_format || !f->size || !oa_unit_supports_oa_format(oa, &param)) {
                drm_dbg(&oa->xe->drm, "Invalid OA format %d type %d size %d for class %d\n",
                        param.oa_format, f->type, f->size, param.hwe->class);
                ret = -EINVAL;