Commit 8cfd6a05 authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher
Browse files

drm/amd/pm: Hide irrelevant pm device attributes



Change return code to EOPNOTSUPP for unsupported functions. Use the
error code information to hide sysfs nodes not valid for the SOC.

Signed-off-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarYang Wang <kevinyang.wang@amd.com>
Reviewed-by: default avatarAsad Kamal <asad.kamal@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 0553eb9f
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -491,7 +491,7 @@ int amdgpu_dpm_read_sensor(struct amdgpu_device *adev, enum amd_pp_sensors senso
int amdgpu_dpm_get_apu_thermal_limit(struct amdgpu_device *adev, uint32_t *limit)
{
	const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
	int ret = -EINVAL;
	int ret = -EOPNOTSUPP;

	if (pp_funcs && pp_funcs->get_apu_thermal_limit) {
		mutex_lock(&adev->pm.mutex);
@@ -505,7 +505,7 @@ int amdgpu_dpm_get_apu_thermal_limit(struct amdgpu_device *adev, uint32_t *limit
int amdgpu_dpm_set_apu_thermal_limit(struct amdgpu_device *adev, uint32_t limit)
{
	const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
	int ret = -EINVAL;
	int ret = -EOPNOTSUPP;

	if (pp_funcs && pp_funcs->set_apu_thermal_limit) {
		mutex_lock(&adev->pm.mutex);
@@ -1182,7 +1182,7 @@ int amdgpu_dpm_get_sclk_od(struct amdgpu_device *adev)
	int ret = 0;

	if (!pp_funcs->get_sclk_od)
		return 0;
		return -EOPNOTSUPP;

	mutex_lock(&adev->pm.mutex);
	ret = pp_funcs->get_sclk_od(adev->powerplay.pp_handle);
@@ -1196,7 +1196,7 @@ int amdgpu_dpm_set_sclk_od(struct amdgpu_device *adev, uint32_t value)
	const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;

	if (is_support_sw_smu(adev))
		return 0;
		return -EOPNOTSUPP;

	mutex_lock(&adev->pm.mutex);
	if (pp_funcs->set_sclk_od)
@@ -1219,7 +1219,7 @@ int amdgpu_dpm_get_mclk_od(struct amdgpu_device *adev)
	int ret = 0;

	if (!pp_funcs->get_mclk_od)
		return 0;
		return -EOPNOTSUPP;

	mutex_lock(&adev->pm.mutex);
	ret = pp_funcs->get_mclk_od(adev->powerplay.pp_handle);
@@ -1233,7 +1233,7 @@ int amdgpu_dpm_set_mclk_od(struct amdgpu_device *adev, uint32_t value)
	const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;

	if (is_support_sw_smu(adev))
		return 0;
		return -EOPNOTSUPP;

	mutex_lock(&adev->pm.mutex);
	if (pp_funcs->set_mclk_od)
+12 −0
Original line number Diff line number Diff line
@@ -2197,6 +2197,18 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
	} else if (DEVICE_ATTR_IS(xgmi_plpd_policy)) {
		if (amdgpu_dpm_get_xgmi_plpd_mode(adev, NULL) == XGMI_PLPD_NONE)
			*states = ATTR_STATE_UNSUPPORTED;
	} else if (DEVICE_ATTR_IS(pp_dpm_mclk_od)) {
		if (amdgpu_dpm_get_mclk_od(adev) == -EOPNOTSUPP)
			*states = ATTR_STATE_UNSUPPORTED;
	} else if (DEVICE_ATTR_IS(pp_dpm_sclk_od)) {
		if (amdgpu_dpm_get_sclk_od(adev) == -EOPNOTSUPP)
			*states = ATTR_STATE_UNSUPPORTED;
	} else if (DEVICE_ATTR_IS(apu_thermal_cap)) {
		u32 limit;

		if (amdgpu_dpm_get_apu_thermal_limit(adev, &limit) ==
		    -EOPNOTSUPP)
			*states = ATTR_STATE_UNSUPPORTED;
	}

	switch (gc_ver) {
+2 −2
Original line number Diff line number Diff line
@@ -2747,7 +2747,7 @@ static int smu_read_sensor(void *handle,

static int smu_get_apu_thermal_limit(void *handle, uint32_t *limit)
{
	int ret = -EINVAL;
	int ret = -EOPNOTSUPP;
	struct smu_context *smu = handle;

	if (smu->ppt_funcs && smu->ppt_funcs->get_apu_thermal_limit)
@@ -2758,7 +2758,7 @@ static int smu_get_apu_thermal_limit(void *handle, uint32_t *limit)

static int smu_set_apu_thermal_limit(void *handle, uint32_t limit)
{
	int ret = -EINVAL;
	int ret = -EOPNOTSUPP;
	struct smu_context *smu = handle;

	if (smu->ppt_funcs && smu->ppt_funcs->set_apu_thermal_limit)