[PATCH] drm/i915/mtl: Connect root sysfs entries to GT0

Vinay Belgaumkar vinay.belgaumkar at intel.com
Fri Jan 13 02:27:52 UTC 2023


Reading current root sysfs entries gives a min/max of all
GTs. Updating this so we return default (GT0) values when root
level sysfs entries are accessed, instead of min/max for the card.
Tests that are not multi GT capable will read incorrect sysfs
values without this change on multi-GT platforms like MTL.

Fixes: a8a4f0467d70 ("drm/i915: Fix CFI violations in gt_sysfs")

Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar at intel.com>
---
 drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c | 47 +++------------------
 1 file changed, 6 insertions(+), 41 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
index cf71305ad586..395ae47483a7 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
@@ -28,77 +28,42 @@ sysfs_gt_attribute_w_func(struct kobject *kobj, struct attribute *attr,
 			  int (func)(struct intel_gt *gt, u32 val), u32 val)
 {
 	struct intel_gt *gt;
-	int ret;
 
 	if (!is_object_gt(kobj)) {
-		int i;
 		struct device *dev = kobj_to_dev(kobj);
 		struct drm_i915_private *i915 = kdev_minor_to_i915(dev);
 
-		for_each_gt(gt, i915, i) {
-			ret = func(gt, val);
-			if (ret)
-				break;
-		}
+		gt = to_gt(i915);
 	} else {
 		gt = intel_gt_sysfs_get_drvdata(kobj, attr->name);
-		ret = func(gt, val);
 	}
 
-	return ret;
+	return func(gt, val);
 }
 
 static u32
 sysfs_gt_attribute_r_func(struct kobject *kobj, struct attribute *attr,
-			  u32 (func)(struct intel_gt *gt),
-			  enum intel_gt_sysfs_op op)
+			  u32 (func)(struct intel_gt *gt))
 {
 	struct intel_gt *gt;
-	u32 ret;
-
-	ret = (op == INTEL_GT_SYSFS_MAX) ? 0 : (u32) -1;
 
 	if (!is_object_gt(kobj)) {
-		int i;
 		struct device *dev = kobj_to_dev(kobj);
 		struct drm_i915_private *i915 = kdev_minor_to_i915(dev);
 
-		for_each_gt(gt, i915, i) {
-			u32 val = func(gt);
-
-			switch (op) {
-			case INTEL_GT_SYSFS_MIN:
-				if (val < ret)
-					ret = val;
-				break;
-
-			case INTEL_GT_SYSFS_MAX:
-				if (val > ret)
-					ret = val;
-				break;
-			}
-		}
+		gt = to_gt(i915);
 	} else {
 		gt = intel_gt_sysfs_get_drvdata(kobj, attr->name);
-		ret = func(gt);
 	}
 
-	return ret;
+	return func(gt);
 }
 
-/* RC6 interfaces will show the minimum RC6 residency value */
-#define sysfs_gt_attribute_r_min_func(d, a, f) \
-		sysfs_gt_attribute_r_func(d, a, f, INTEL_GT_SYSFS_MIN)
-
-/* Frequency interfaces will show the maximum frequency value */
-#define sysfs_gt_attribute_r_max_func(d, a, f) \
-		sysfs_gt_attribute_r_func(d, a, f, INTEL_GT_SYSFS_MAX)
-
 #define INTEL_GT_SYSFS_SHOW(_name, _attr_type)							\
 	static ssize_t _name##_show_common(struct kobject *kobj,				\
 					   struct attribute *attr, char *buff)			\
 	{											\
-		u32 val = sysfs_gt_attribute_r_##_attr_type##_func(kobj, attr,			\
+		u32 val = sysfs_gt_attribute_r_func(kobj, attr,			\
 								   __##_name##_show);		\
 												\
 		return sysfs_emit(buff, "%u\n", val);						\
-- 
2.38.1



More information about the dri-devel mailing list