]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/pm: hide pp_table sysfs on APUs
authorYang Wang <kevinyang.wang@amd.com>
Wed, 29 Jul 2026 07:56:46 +0000 (15:56 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 29 Jul 2026 22:20:29 +0000 (18:20 -0400)
APUs use firmware-owned DPM tables and do not support replacement through
pp_table. Generic callbacks can nevertheless expose the sysfs file and
accept an upload before resetting the power management stack.

Treat pp_table as unsupported on APUs. Use the same platform check in the
get and set paths to hide the file and reject uploads.

Fixes: 289921b03fe5 ("drm/amd/powerplay: implement sysfs of pp_table for smu11 (v2)")
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
Reviewed-by: Kenneth Feng <kenneth.feng@amd.com>
Reviewed-by: Asad Kamal <asad.kamal@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 74f28db2db69777cd2f059d50fe34e365ddd5add)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/pm/amdgpu_dpm.c

index 6d1ad4d5b8f0412e24a75889d3bf701cab176615..e5e89294958a876d771e1b1debffc786cf24036c 100644 (file)
@@ -1183,6 +1183,13 @@ int amdgpu_dpm_dispatch_task(struct amdgpu_device *adev,
        return ret;
 }
 
+static bool amdgpu_dpm_is_pp_table_allowed(struct amdgpu_device *adev)
+{
+       return !amdgpu_sriov_vf(adev) &&
+              !(adev->flags & AMD_IS_APU) &&
+              !adev->scpm_enabled;
+}
+
 int amdgpu_dpm_get_pp_table(struct amdgpu_device *adev, char *table,
                            size_t size)
 {
@@ -1193,7 +1200,8 @@ int amdgpu_dpm_get_pp_table(struct amdgpu_device *adev, char *table,
        if ((!table && size) || (table && !size))
                return -EINVAL;
 
-       if (amdgpu_sriov_vf(adev) || !pp_funcs->get_pp_table || adev->scpm_enabled)
+       if (!amdgpu_dpm_is_pp_table_allowed(adev) ||
+           !pp_funcs->get_pp_table)
                return -EOPNOTSUPP;
 
        mutex_lock(&adev->pm.mutex);
@@ -1717,7 +1725,8 @@ int amdgpu_dpm_set_pp_table(struct amdgpu_device *adev,
        if (!buf || !size)
                return -EINVAL;
 
-       if (amdgpu_sriov_vf(adev) || !pp_funcs->set_pp_table || adev->scpm_enabled)
+       if (!amdgpu_dpm_is_pp_table_allowed(adev) ||
+           !pp_funcs->set_pp_table)
                return -EOPNOTSUPP;
 
        mutex_lock(&adev->pm.mutex);