drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_0_ppt.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_0_ppt.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_0_ppt.c- Extension
.c- Size
- 43042 bytes
- Lines
- 1467
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
smu_types.hamdgpu.hamdgpu_smu.hsmu_v15_0.hsmu15_driver_if_v15_0_0.hsmu_v15_0_0_ppt.hsmu_v15_0_0_ppsmc.hsmu_v15_0_0_pmfw.hsmu_cmn.h
Detected Declarations
enum smu_mall_pg_configfunction smu_v15_0_0_init_smc_tablesfunction smu_v15_0_0_fini_smc_tablesfunction smu_v15_0_0_system_features_controlfunction smu_v15_0_0_update_tablefunction smu_v15_0_0_set_default_dpm_tablesfunction smu_v15_0_0_get_metrics_tablefunction smu_v15_0_0_get_smu_metrics_datafunction smu_v15_0_0_read_sensorfunction smu_v15_0_0_get_enabled_maskfunction smu_v15_0_0_is_dpm_runningfunction smu_v15_0_0_set_watermarks_tablefunction smu_v15_0_0_get_gpu_metricsfunction smu_v15_0_0_mode2_resetfunction smu_v15_0_0_get_dpm_freq_by_indexfunction smu_v15_0_common_get_dpm_freq_by_indexfunction smu_v15_0_0_clk_dpm_is_enabledfunction smu_v15_0_0_get_dpm_ultimate_freqfunction smu_v15_0_common_get_dpm_ultimate_freqfunction smu_v15_0_0_get_current_clk_freqfunction smu_v15_0_0_get_dpm_level_countfunction smu_v15_0_common_get_dpm_level_countfunction smu_v15_0_0_emit_clk_levelsfunction smu_v15_0_0_set_soft_freq_limited_rangefunction smu_v15_0_0_force_clk_levelsfunction smu_v15_0_common_get_dpm_profile_freqfunction smu_v15_0_common_set_performance_levelfunction smu_v15_0_0_set_fine_grain_gfx_freq_parametersfunction smu_v15_0_common_set_fine_grain_gfx_freq_parametersfunction smu_v15_0_0_set_vpe_enablefunction smu_v15_0_0_set_umsch_mm_enablefunction smu_v15_0_0_get_dpm_tablefunction smu_v15_0_common_get_dpm_tablefunction smu_v15_0_0_init_msg_ctlfunction smu_v15_0_0_set_ppt_funcs
Annotated Snippet
time_after(jiffies, smu_table->metrics_time + msecs_to_jiffies(1))) {
ret = smu_v15_0_0_update_table(smu,
SMU_TABLE_SMU_METRICS,
0,
smu_table->metrics_table,
false);
if (ret) {
dev_info(smu->adev->dev, "Failed to export SMU15_0_0 metrics table!\n");
return ret;
}
smu_table->metrics_time = jiffies;
}
if (metrics_table)
memcpy(metrics_table, smu_table->metrics_table, table_size);
return 0;
}
static int smu_v15_0_0_get_smu_metrics_data(struct smu_context *smu,
MetricsMember_t member,
uint32_t *value)
{
struct smu_table_context *smu_table = &smu->smu_table;
SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
int ret = 0;
ret = smu_v15_0_0_get_metrics_table(smu, NULL, false);
if (ret)
return ret;
switch (member) {
case METRICS_AVERAGE_GFXCLK:
*value = metrics->GfxclkFrequency;
break;
case METRICS_AVERAGE_SOCCLK:
*value = metrics->SocclkFrequency;
break;
case METRICS_AVERAGE_VCLK:
*value = metrics->VclkFrequency;
break;
case METRICS_AVERAGE_DCLK:
*value = 0;
break;
case METRICS_AVERAGE_UCLK:
*value = metrics->MemclkFrequency;
break;
case METRICS_AVERAGE_FCLK:
*value = metrics->FclkFrequency;
break;
case METRICS_AVERAGE_VPECLK:
*value = metrics->VpeclkFrequency;
break;
case METRICS_AVERAGE_NPUCLK:
*value = metrics->NpuclkFrequency;
break;
case METRICS_AVERAGE_GFXACTIVITY:
if ((smu->smc_fw_version > 0x5d4600))
*value = metrics->GfxActivity;
else
*value = metrics->GfxActivity / 100;
break;
case METRICS_AVERAGE_VCNACTIVITY:
*value = metrics->VcnActivity / 100;
break;
case METRICS_AVERAGE_SOCKETPOWER:
case METRICS_CURR_SOCKETPOWER:
*value = (metrics->SocketPower / 1000 << 8) +
(metrics->SocketPower % 1000 / 10);
break;
case METRICS_TEMPERATURE_EDGE:
*value = metrics->GfxTemperature / 100 *
SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
break;
case METRICS_TEMPERATURE_HOTSPOT:
*value = metrics->SocTemperature / 100 *
SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
break;
case METRICS_THROTTLER_RESIDENCY_PROCHOT:
*value = metrics->ThrottleResidency_PROCHOT;
break;
case METRICS_THROTTLER_RESIDENCY_SPL:
*value = metrics->ThrottleResidency_SPL;
break;
case METRICS_THROTTLER_RESIDENCY_FPPT:
*value = metrics->ThrottleResidency_FPPT;
break;
case METRICS_THROTTLER_RESIDENCY_SPPT:
*value = metrics->ThrottleResidency_SPPT;
Annotation
- Immediate include surface: `smu_types.h`, `amdgpu.h`, `amdgpu_smu.h`, `smu_v15_0.h`, `smu15_driver_if_v15_0_0.h`, `smu_v15_0_0_ppt.h`, `smu_v15_0_0_ppsmc.h`, `smu_v15_0_0_pmfw.h`.
- Detected declarations: `enum smu_mall_pg_config`, `function smu_v15_0_0_init_smc_tables`, `function smu_v15_0_0_fini_smc_tables`, `function smu_v15_0_0_system_features_control`, `function smu_v15_0_0_update_table`, `function smu_v15_0_0_set_default_dpm_tables`, `function smu_v15_0_0_get_metrics_table`, `function smu_v15_0_0_get_smu_metrics_data`, `function smu_v15_0_0_read_sensor`, `function smu_v15_0_0_get_enabled_mask`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.