[PATCH V2 3/3] DRRS status on sysfs interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This interface allows viewing the status of the DRRS.

Exposing this feature on sysfs interface would allow tools such as
powertop to provide status of the Graphics subsystem and aid
debugging RPM

Signed-off-by: Alexandra Yates <alexandra.yates@xxxxxxxxxxxxxxx>
---
 drivers/gpu/drm/i915/i915_sysfs.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_sysfs.c b/drivers/gpu/drm/i915/i915_sysfs.c
index a25bdd7..1625a5d 100644
--- a/drivers/gpu/drm/i915/i915_sysfs.c
+++ b/drivers/gpu/drm/i915/i915_sysfs.c
@@ -136,6 +136,21 @@ show_fbc(struct device *kdev, struct device_attribute *attr, char *buf)
 	return ret;
 }
 
+static ssize_t
+show_drrs(struct device *kdev, struct device_attribute *attr, char *buf)
+{
+	struct drm_minor *dminor = dev_to_drm_minor(kdev);
+	struct drm_device *dev = dminor->dev;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	ssize_t ret;
+
+	mutex_lock(&dev_priv->drrs.mutex);
+	ret = snprintf(buf, PAGE_SIZE, "%s\n", dev_priv->drrs.dp ?
+			"enabled":"disabled");
+	mutex_unlock(&dev_priv->drrs.mutex);
+	return ret;
+}
+
 static DEVICE_ATTR(rc6_enable, S_IRUGO, show_rc6_mask, NULL);
 static DEVICE_ATTR(rc6_residency_ms, S_IRUGO, show_rc6_ms, NULL);
 static DEVICE_ATTR(rc6p_residency_ms, S_IRUGO, show_rc6p_ms, NULL);
@@ -143,6 +158,7 @@ static DEVICE_ATTR(rc6pp_residency_ms, S_IRUGO, show_rc6pp_ms, NULL);
 static DEVICE_ATTR(media_rc6_residency_ms, S_IRUGO, show_media_rc6_ms, NULL);
 static DEVICE_ATTR(psr_enable, S_IRUGO, show_psr, NULL);
 static DEVICE_ATTR(fbc_enable, S_IRUGO, show_fbc, NULL);
+static DEVICE_ATTR(drrs_enable, S_IRUGO, show_drrs, NULL);
 
 static struct attribute *rc6_attrs[] = {
 	&dev_attr_rc6_enable.attr,
@@ -196,6 +212,15 @@ static struct attribute_group fbc_attr_group = {
 	.attrs = fbc_attrs
 };
 
+static struct attribute *drrs_attrs[] = {
+	&dev_attr_drrs_enable.attr,
+	NULL
+};
+
+static struct attribute_group drrs_attr_group = {
+	.name = power_group_name,
+	.attrs = drrs_attrs
+};
 #endif
 
 static int l3_access_valid(struct drm_device *dev, loff_t offset)
@@ -679,6 +704,12 @@ void i915_setup_sysfs(struct drm_device *dev)
 		if (ret)
 			DRM_ERROR("FBC sysfs setup failed\n");
 	}
+	if (HAS_PSR(dev)) {
+		ret = sysfs_merge_group(&dev->primary->kdev->kobj,
+					&drrs_attr_group);
+		if (ret)
+			DRM_ERROR("DRRS sysfs setup failed\n");
+	}
 #endif
 	if (HAS_L3_DPF(dev)) {
 		ret = device_create_bin_file(dev->primary->kdev, &dpf_attrs);
@@ -721,5 +752,6 @@ void i915_teardown_sysfs(struct drm_device *dev)
 	sysfs_unmerge_group(&dev->primary->kdev->kobj, &rc6p_attr_group);
 	sysfs_unmerge_group(&dev->primary->kdev->kobj, &psr_attr_group);
 	sysfs_unmerge_group(&dev->primary->kdev->kobj, &fbc_attr_group);
+	sysfs_unmerge_group(&dev->primary->kdev->kobj, &drrs_attr_group);
 #endif
 }
-- 
2.5.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux