Commit 0d35bc78 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu/pm: rework the hwmon visibility settings



Previously we just always exposed everything for asics
supported by powerplay.  Make it a bit more fine grained.
In practice this shouldn't change anything.

Acked-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarRex Zhu <Rex.Zhu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 21a381f7
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
@@ -1246,9 +1246,19 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
	struct amdgpu_device *adev = dev_get_drvdata(dev);
	umode_t effective_mode = attr->mode;

	/* no skipping for powerplay */
	if (adev->powerplay.cgs_device)
		return effective_mode;
	/* handle non-powerplay limitations */
	if (!adev->powerplay.cgs_device) {
		/* Skip fan attributes if fan is not present */
		if (adev->pm.no_fan &&
		    (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))
			return 0;
		/* requires powerplay */
		if (attr == &sensor_dev_attr_fan1_input.dev_attr.attr)
			return 0;
	}

	/* Skip limit attributes if DPM is not enabled */
	if (!adev->pm.dpm_enabled &&
@@ -1260,14 +1270,6 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
	     attr == &sensor_dev_attr_pwm1_min.dev_attr.attr))
		return 0;

	/* Skip fan attributes if fan is not present */
	if (adev->pm.no_fan &&
	    (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))
		return 0;

	/* mask fan attributes if we have no bindings for this asic to expose */
	if ((!adev->powerplay.pp_funcs->get_fan_speed_percent &&
	     attr == &sensor_dev_attr_pwm1.dev_attr.attr) || /* can't query fan */
@@ -1288,8 +1290,10 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
	     attr == &sensor_dev_attr_pwm1_min.dev_attr.attr))
		return 0;

	/* requires powerplay */
	if (attr == &sensor_dev_attr_fan1_input.dev_attr.attr)
	/* only APUs have vddnb */
	if (!(adev->flags & AMD_IS_APU) &&
	    (attr == &sensor_dev_attr_in1_input.dev_attr.attr ||
	     attr == &sensor_dev_attr_in1_label.dev_attr.attr))
		return 0;

	return effective_mode;