]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe/hwmon: Expose powerX_cap_interval
authorKarthik Poosa <karthik.poosa@intel.com>
Thu, 29 May 2025 16:34:56 +0000 (22:04 +0530)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Fri, 30 May 2025 15:30:01 +0000 (11:30 -0400)
Expose powerX_cap_interval to manage burst power limit time window.

Signed-off-by: Karthik Poosa <karthik.poosa@intel.com>
Reviewed-by: Badal Nilawar <badal.nilawar@intel.com>
Link: https://lore.kernel.org/r/20250529163458.2354509-5-karthik.poosa@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Documentation/ABI/testing/sysfs-driver-intel-xe-hwmon
drivers/gpu/drm/xe/xe_hwmon.c

index dffd6443664ad914d2b348cf8eedbfcd139a25f0..d9e2b17c6872058152766c3629149d0e429b0644 100644 (file)
@@ -178,3 +178,21 @@ Description:       RW. Package burst (PL2) power limit in microwatts.
                compared to PL1.
 
                Only supported for particular Intel Xe graphics platforms.
+
+What:          /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/power1_cap_interval
+Date:          May 2025
+KernelVersion: 6.15
+Contact:       intel-xe@lists.freedesktop.org
+Description:   RW. Card burst power limit interval (Tau in PL2/Tau) in
+               milliseconds over which sustained power is averaged.
+
+               Only supported for particular Intel Xe graphics platforms.
+
+What:          /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/power2_cap_interval
+Date:          May 2025
+KernelVersion: 6.15
+Contact:       intel-xe@lists.freedesktop.org
+Description:   RW. Package burst power limit interval (Tau in PL2/Tau) in
+               milliseconds over which sustained power is averaged.
+
+               Only supported for particular Intel Xe graphics platforms.
index 7a5837199492aa5737075157b4b8741ef0a8fe86..f07592aba2266cbf4aed5589ae8f953e1121d3b2 100644 (file)
@@ -474,7 +474,7 @@ xe_hwmon_power_max_interval_show(struct device *dev, struct device_attribute *at
        u32 x, y, x_w = 2; /* 2 bits */
        u64 r, tau4, out;
        int channel = (to_sensor_dev_attr(attr)->index % 2) ? CHANNEL_PKG : CHANNEL_CARD;
-       u32 power_attr = PL1_HWMON_ATTR;
+       u32 power_attr = (to_sensor_dev_attr(attr)->index > 1) ? PL2_HWMON_ATTR : PL1_HWMON_ATTR;
 
        int ret = 0;
 
@@ -529,7 +529,7 @@ xe_hwmon_power_max_interval_store(struct device *dev, struct device_attribute *a
        u64 tau4, r, max_win;
        unsigned long val;
        int channel = (to_sensor_dev_attr(attr)->index % 2) ? CHANNEL_PKG : CHANNEL_CARD;
-       u32 power_attr = PL1_HWMON_ATTR;
+       u32 power_attr = (to_sensor_dev_attr(attr)->index > 1) ? PL2_HWMON_ATTR : PL1_HWMON_ATTR;
        int ret;
 
        ret = kstrtoul(buf, 0, &val);
@@ -607,10 +607,20 @@ static SENSOR_DEVICE_ATTR(power1_max_interval, 0664,
 static SENSOR_DEVICE_ATTR(power2_max_interval, 0664,
                          xe_hwmon_power_max_interval_show,
                          xe_hwmon_power_max_interval_store, SENSOR_INDEX_PKG_PL1);
+/* PSYS PL2 */
+static SENSOR_DEVICE_ATTR(power1_cap_interval, 0664,
+                         xe_hwmon_power_max_interval_show,
+                         xe_hwmon_power_max_interval_store, SENSOR_INDEX_PSYS_PL2);
+/* PKG PL2 */
+static SENSOR_DEVICE_ATTR(power2_cap_interval, 0664,
+                         xe_hwmon_power_max_interval_show,
+                         xe_hwmon_power_max_interval_store, SENSOR_INDEX_PKG_PL2);
 
 static struct attribute *hwmon_attributes[] = {
        &sensor_dev_attr_power1_max_interval.dev_attr.attr,
        &sensor_dev_attr_power2_max_interval.dev_attr.attr,
+       &sensor_dev_attr_power1_cap_interval.dev_attr.attr,
+       &sensor_dev_attr_power2_cap_interval.dev_attr.attr,
        NULL
 };
 
@@ -621,7 +631,7 @@ static umode_t xe_hwmon_attributes_visible(struct kobject *kobj,
        struct xe_hwmon *hwmon = dev_get_drvdata(dev);
        int ret = 0;
        int channel = (index % 2) ? CHANNEL_PKG : CHANNEL_CARD;
-       u32 power_attr = PL1_HWMON_ATTR;
+       u32 power_attr = (index > 1) ? PL2_HWMON_ATTR : PL1_HWMON_ATTR;
        u32 uval;
 
        xe_pm_runtime_get(hwmon->xe);