[PATCH 1/2] drm/radeon: Add sclk frequency as hwmon sensor

Alex Deucher alexdeucher at gmail.com
Mon Aug 31 20:33:21 UTC 2020


On Sun, Aug 30, 2020 at 3:25 AM Sandeep Raghuraman <sandy.8925 at gmail.com> wrote:
>
> This patch series adds support for reporting sclk and vddc values for Radeon GPUs, where supported.

This commit message should be specific to this particular patch rather
than the series.  You could probably expose mclk as well.

Alex


>
> Signed-off-by: Sandeep Raghuraman <sandy.8925 at gmail.com>
> ---
>  drivers/gpu/drm/radeon/radeon_pm.c | 29 ++++++++++++++++++++++++++++-
>  1 file changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
> index 8c5d6fda0d75..05c4196a8212 100644
> --- a/drivers/gpu/drm/radeon/radeon_pm.c
> +++ b/drivers/gpu/drm/radeon/radeon_pm.c
> @@ -712,6 +712,31 @@ static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, radeon_hwmon_get_pwm1_
>  static SENSOR_DEVICE_ATTR(pwm1_min, S_IRUGO, radeon_hwmon_get_pwm1_min, NULL, 0);
>  static SENSOR_DEVICE_ATTR(pwm1_max, S_IRUGO, radeon_hwmon_get_pwm1_max, NULL, 0);
>
> +static ssize_t radeon_hwmon_show_sclk(struct device *dev,
> +                                     struct device_attribute *attr, char *buf)
> +{
> +       struct radeon_device *rdev = dev_get_drvdata(dev);
> +       struct drm_device *ddev = rdev->ddev;
> +       u32 sclk = 0;
> +
> +       /* Can't get clock frequency when the card is off */
> +       if ((rdev->flags & RADEON_IS_PX) &&
> +           (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
> +               return -EINVAL;
> +
> +       if (rdev->asic->dpm.get_current_sclk)
> +               sclk = radeon_dpm_get_current_sclk(rdev);
> +
> +       /* Value returned by dpm is in 10 KHz units, need to convert it into Hz
> +          for hwmon */
> +       sclk *= 10000;
> +
> +       return snprintf(buf, PAGE_SIZE, "%u\n", sclk);
> +}
> +
> +static SENSOR_DEVICE_ATTR(freq1_input, S_IRUGO, radeon_hwmon_show_sclk, NULL,
> +                         0);
> +
>
>  static struct attribute *hwmon_attributes[] = {
>         &sensor_dev_attr_temp1_input.dev_attr.attr,
> @@ -721,6 +746,7 @@ static struct attribute *hwmon_attributes[] = {
>         &sensor_dev_attr_pwm1_enable.dev_attr.attr,
>         &sensor_dev_attr_pwm1_min.dev_attr.attr,
>         &sensor_dev_attr_pwm1_max.dev_attr.attr,
> +       &sensor_dev_attr_freq1_input.dev_attr.attr,
>         NULL
>  };
>
> @@ -738,7 +764,8 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
>              attr == &sensor_dev_attr_pwm1.dev_attr.attr ||
>              attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr ||
>              attr == &sensor_dev_attr_pwm1_max.dev_attr.attr ||
> -            attr == &sensor_dev_attr_pwm1_min.dev_attr.attr))
> +            attr == &sensor_dev_attr_pwm1_min.dev_attr.attr ||
> +            attr == &sensor_dev_attr_freq1_input.dev_attr.attr))
>                 return 0;
>
>         /* Skip fan attributes if fan is not present */
> --
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list