summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/include
diff options
context:
space:
mode:
authorLijo Lazar <lijo.lazar@amd.com>2026-09-18 09:15:48 +0530
committerAlex Deucher <alexander.deucher@amd.com>2026-09-23 14:21:23 -0400
commite53e12cb4ccb95e19c5efeb8172ff79a7ace963d (patch)
tree3256318d0f134846f8ea8054db091ab0e046861d /drivers/gpu/drm/amd/include
parentb51576a5d53eaf53e07b07c4841f6981e542b63c (diff)
downloadlinux-next-e53e12cb4ccb95e19c5efeb8172ff79a7ace963d.tar.gz
linux-next-e53e12cb4ccb95e19c5efeb8172ff79a7ace963d.zip
drm/amd/pm: Create NPM sysfs files from capability
Advertise each NPM board attribute from a per-field R/W bitmap instead of probing a single sensor. SMU 13.0.6/13.0.12 reports the cap only when NPM metrics and MaxNodePowerLimit are present. Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Assisted-by: Cursor Grok 4.6 Reviewed-by: Asad Kamal <asad.kamal@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/include')
-rw-r--r--drivers/gpu/drm/amd/include/kgd_pp_interface.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
index 606d48115301..5e8476c4b808 100644
--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
@@ -174,6 +174,21 @@ enum amd_pp_sensors {
AMDGPU_PP_SENSOR_UBB_POWER_LIMIT,
};
+/*
+ * NPM sysfs capability bitmap: two bits per field, R then W.
+ * 00 = unsupported, 01 = read-only, 1x = writable (or RW).
+ */
+enum amdgpu_npm_cap_field {
+ AMDGPU_NPM_CAP_CUR_NODE_POWER_LIMIT,
+ AMDGPU_NPM_CAP_NODE_POWER,
+ AMDGPU_NPM_CAP_GLOBAL_PPT_RESID,
+ AMDGPU_NPM_CAP_MAX_NODE_POWER_LIMIT,
+ AMDGPU_NPM_CAP_NPM_STATUS,
+};
+
+#define AMDGPU_NPM_CAP_R(field) BIT_ULL((field) * 2)
+#define AMDGPU_NPM_CAP_W(field) BIT_ULL((field) * 2 + 1)
+
enum amd_pp_task {
AMD_PP_TASK_DISPLAY_CONFIG_CHANGE,
AMD_PP_TASK_ENABLE_USER_STATE,
@@ -513,6 +528,7 @@ struct amd_pm_funcs {
ssize_t (*get_gpu_metrics)(void *handle, void **table);
ssize_t (*get_temp_metrics)(void *handle, enum smu_temp_metric_type type, void *table);
bool (*temp_metrics_is_supported)(void *handle, enum smu_temp_metric_type type);
+ u64 (*get_npm_cap)(void *handle);
ssize_t (*get_xcp_metrics)(void *handle, int xcp_id, void *table);
ssize_t (*get_pm_metrics)(void *handle, void *pmmetrics, size_t size);
int (*set_watermarks_for_clock_ranges)(void *handle,