hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/amd/include/kgd_pp_interface.h
....@@ -92,8 +92,12 @@
9292 PP_SCLK,
9393 PP_MCLK,
9494 PP_PCIE,
95
+ PP_SOCCLK,
96
+ PP_FCLK,
97
+ PP_DCEFCLK,
9598 OD_SCLK,
9699 OD_MCLK,
100
+ OD_VDDC_CURVE,
97101 OD_RANGE,
98102 };
99103
....@@ -105,13 +109,21 @@
105109 AMDGPU_PP_SENSOR_UVD_DCLK,
106110 AMDGPU_PP_SENSOR_VCE_ECCLK,
107111 AMDGPU_PP_SENSOR_GPU_LOAD,
112
+ AMDGPU_PP_SENSOR_MEM_LOAD,
108113 AMDGPU_PP_SENSOR_GFX_MCLK,
109114 AMDGPU_PP_SENSOR_GPU_TEMP,
115
+ AMDGPU_PP_SENSOR_EDGE_TEMP = AMDGPU_PP_SENSOR_GPU_TEMP,
116
+ AMDGPU_PP_SENSOR_HOTSPOT_TEMP,
117
+ AMDGPU_PP_SENSOR_MEM_TEMP,
110118 AMDGPU_PP_SENSOR_VCE_POWER,
111119 AMDGPU_PP_SENSOR_UVD_POWER,
112120 AMDGPU_PP_SENSOR_GPU_POWER,
113121 AMDGPU_PP_SENSOR_STABLE_PSTATE_SCLK,
114122 AMDGPU_PP_SENSOR_STABLE_PSTATE_MCLK,
123
+ AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK,
124
+ AMDGPU_PP_SENSOR_MIN_FAN_RPM,
125
+ AMDGPU_PP_SENSOR_MAX_FAN_RPM,
126
+ AMDGPU_PP_SENSOR_VCN_POWER_STATE,
115127 };
116128
117129 enum amd_pp_task {
....@@ -123,12 +135,14 @@
123135 };
124136
125137 enum PP_SMC_POWER_PROFILE {
126
- PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x0,
127
- PP_SMC_POWER_PROFILE_POWERSAVING = 0x1,
128
- PP_SMC_POWER_PROFILE_VIDEO = 0x2,
129
- PP_SMC_POWER_PROFILE_VR = 0x3,
130
- PP_SMC_POWER_PROFILE_COMPUTE = 0x4,
131
- PP_SMC_POWER_PROFILE_CUSTOM = 0x5,
138
+ PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT = 0x0,
139
+ PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x1,
140
+ PP_SMC_POWER_PROFILE_POWERSAVING = 0x2,
141
+ PP_SMC_POWER_PROFILE_VIDEO = 0x3,
142
+ PP_SMC_POWER_PROFILE_VR = 0x4,
143
+ PP_SMC_POWER_PROFILE_COMPUTE = 0x5,
144
+ PP_SMC_POWER_PROFILE_CUSTOM = 0x6,
145
+ PP_SMC_POWER_PROFILE_COUNT,
132146 };
133147
134148 enum {
....@@ -141,6 +155,7 @@
141155 enum PP_OD_DPM_TABLE_COMMAND {
142156 PP_OD_EDIT_SCLK_VDDC_TABLE,
143157 PP_OD_EDIT_MCLK_VDDC_TABLE,
158
+ PP_OD_EDIT_VDDC_CURVE,
144159 PP_OD_RESTORE_DEFAULT_TABLE,
145160 PP_OD_COMMIT_DPM_TABLE
146161 };
....@@ -148,6 +163,25 @@
148163 struct pp_states_info {
149164 uint32_t nums;
150165 uint32_t states[16];
166
+};
167
+
168
+enum PP_HWMON_TEMP {
169
+ PP_TEMP_EDGE = 0,
170
+ PP_TEMP_JUNCTION,
171
+ PP_TEMP_MEM,
172
+ PP_TEMP_MAX
173
+};
174
+
175
+enum pp_mp1_state {
176
+ PP_MP1_STATE_NONE,
177
+ PP_MP1_STATE_SHUTDOWN,
178
+ PP_MP1_STATE_UNLOAD,
179
+ PP_MP1_STATE_RESET,
180
+};
181
+
182
+enum pp_df_cstate {
183
+ DF_CSTATE_DISALLOW = 0,
184
+ DF_CSTATE_ALLOW,
151185 };
152186
153187 #define PP_GROUP_MASK 0xF0000000
....@@ -185,6 +219,9 @@
185219 #define PP_CG_MSG_ID(group, block, support, state) \
186220 ((group) << PP_GROUP_SHIFT | (block) << PP_BLOCK_SHIFT | \
187221 (support) << PP_STATE_SUPPORT_SHIFT | (state) << PP_STATE_SHIFT)
222
+
223
+#define XGMI_MODE_PSTATE_D3 0
224
+#define XGMI_MODE_PSTATE_D0 1
188225
189226 struct seq_file;
190227 enum amd_pp_clock_type;
....@@ -225,6 +262,7 @@
225262 enum amd_dpm_forced_level (*get_performance_level)(void *handle);
226263 enum amd_pm_state_type (*get_current_power_state)(void *handle);
227264 int (*get_fan_speed_rpm)(void *handle, uint32_t *rpm);
265
+ int (*set_fan_speed_rpm)(void *handle, uint32_t rpm);
228266 int (*get_pp_num_states)(void *handle, struct pp_states_info *data);
229267 int (*get_pp_table)(void *handle, char **table);
230268 int (*set_pp_table)(void *handle, const char *buf, size_t size);
....@@ -243,7 +281,11 @@
243281 int (*get_power_limit)(void *handle, uint32_t *limit, bool default_limit);
244282 int (*get_power_profile_mode)(void *handle, char *buf);
245283 int (*set_power_profile_mode)(void *handle, long *input, uint32_t size);
246
- int (*odn_edit_dpm_table)(void *handle, uint32_t type, long *input, uint32_t size);
284
+ int (*set_fine_grain_clk_vol)(void *handle, uint32_t type, long *input, uint32_t size);
285
+ int (*odn_edit_dpm_table)(void *handle, enum PP_OD_DPM_TABLE_COMMAND type,
286
+ long *input, uint32_t size);
287
+ int (*set_mp1_state)(void *handle, enum pp_mp1_state mp1_state);
288
+ int (*smu_i2c_bus_access)(void *handle, bool acquire);
247289 /* export to DC */
248290 u32 (*get_sclk)(void *handle, bool low);
249291 u32 (*get_mclk)(void *handle, bool low);
....@@ -269,6 +311,128 @@
269311 int (*get_display_mode_validation_clocks)(void *handle,
270312 struct amd_pp_simple_clock_info *clocks);
271313 int (*notify_smu_enable_pwe)(void *handle);
314
+ int (*enable_mgpu_fan_boost)(void *handle);
315
+ int (*set_active_display_count)(void *handle, uint32_t count);
316
+ int (*set_hard_min_dcefclk_by_freq)(void *handle, uint32_t clock);
317
+ int (*set_hard_min_fclk_by_freq)(void *handle, uint32_t clock);
318
+ int (*set_min_deep_sleep_dcefclk)(void *handle, uint32_t clock);
319
+ int (*get_asic_baco_capability)(void *handle, bool *cap);
320
+ int (*get_asic_baco_state)(void *handle, int *state);
321
+ int (*set_asic_baco_state)(void *handle, int state);
322
+ int (*get_ppfeature_status)(void *handle, char *buf);
323
+ int (*set_ppfeature_status)(void *handle, uint64_t ppfeature_masks);
324
+ int (*asic_reset_mode_2)(void *handle);
325
+ int (*set_df_cstate)(void *handle, enum pp_df_cstate state);
326
+ int (*set_xgmi_pstate)(void *handle, uint32_t pstate);
327
+ ssize_t (*get_gpu_metrics)(void *handle, void **table);
328
+};
329
+
330
+struct metrics_table_header {
331
+ uint16_t structure_size;
332
+ uint8_t format_revision;
333
+ uint8_t content_revision;
334
+};
335
+
336
+struct gpu_metrics_v1_0 {
337
+ struct metrics_table_header common_header;
338
+
339
+ /* Driver attached timestamp (in ns) */
340
+ uint64_t system_clock_counter;
341
+
342
+ /* Temperature */
343
+ uint16_t temperature_edge;
344
+ uint16_t temperature_hotspot;
345
+ uint16_t temperature_mem;
346
+ uint16_t temperature_vrgfx;
347
+ uint16_t temperature_vrsoc;
348
+ uint16_t temperature_vrmem;
349
+
350
+ /* Utilization */
351
+ uint16_t average_gfx_activity;
352
+ uint16_t average_umc_activity; // memory controller
353
+ uint16_t average_mm_activity; // UVD or VCN
354
+
355
+ /* Power/Energy */
356
+ uint16_t average_socket_power;
357
+ uint32_t energy_accumulator;
358
+
359
+ /* Average clocks */
360
+ uint16_t average_gfxclk_frequency;
361
+ uint16_t average_socclk_frequency;
362
+ uint16_t average_uclk_frequency;
363
+ uint16_t average_vclk0_frequency;
364
+ uint16_t average_dclk0_frequency;
365
+ uint16_t average_vclk1_frequency;
366
+ uint16_t average_dclk1_frequency;
367
+
368
+ /* Current clocks */
369
+ uint16_t current_gfxclk;
370
+ uint16_t current_socclk;
371
+ uint16_t current_uclk;
372
+ uint16_t current_vclk0;
373
+ uint16_t current_dclk0;
374
+ uint16_t current_vclk1;
375
+ uint16_t current_dclk1;
376
+
377
+ /* Throttle status */
378
+ uint32_t throttle_status;
379
+
380
+ /* Fans */
381
+ uint16_t current_fan_speed;
382
+
383
+ /* Link width/speed */
384
+ uint8_t pcie_link_width;
385
+ uint8_t pcie_link_speed; // in 0.1 GT/s
386
+};
387
+
388
+struct gpu_metrics_v2_0 {
389
+ struct metrics_table_header common_header;
390
+
391
+ /* Driver attached timestamp (in ns) */
392
+ uint64_t system_clock_counter;
393
+
394
+ /* Temperature */
395
+ uint16_t temperature_gfx; // gfx temperature on APUs
396
+ uint16_t temperature_soc; // soc temperature on APUs
397
+ uint16_t temperature_core[8]; // CPU core temperature on APUs
398
+ uint16_t temperature_l3[2];
399
+
400
+ /* Utilization */
401
+ uint16_t average_gfx_activity;
402
+ uint16_t average_mm_activity; // UVD or VCN
403
+
404
+ /* Power/Energy */
405
+ uint16_t average_socket_power; // dGPU + APU power on A + A platform
406
+ uint16_t average_cpu_power;
407
+ uint16_t average_soc_power;
408
+ uint16_t average_gfx_power;
409
+ uint16_t average_core_power[8]; // CPU core power on APUs
410
+
411
+ /* Average clocks */
412
+ uint16_t average_gfxclk_frequency;
413
+ uint16_t average_socclk_frequency;
414
+ uint16_t average_uclk_frequency;
415
+ uint16_t average_fclk_frequency;
416
+ uint16_t average_vclk_frequency;
417
+ uint16_t average_dclk_frequency;
418
+
419
+ /* Current clocks */
420
+ uint16_t current_gfxclk;
421
+ uint16_t current_socclk;
422
+ uint16_t current_uclk;
423
+ uint16_t current_fclk;
424
+ uint16_t current_vclk;
425
+ uint16_t current_dclk;
426
+ uint16_t current_coreclk[8]; // CPU core clocks
427
+ uint16_t current_l3clk[2];
428
+
429
+ /* Throttle status */
430
+ uint32_t throttle_status;
431
+
432
+ /* Fans */
433
+ uint16_t fan_pwm;
434
+
435
+ uint16_t padding;
272436 };
273437
274438 #endif