Skip to content

Commit 34ec3ce

Browse files
Li Maalexdeucher
authored andcommitted
drm/amd/swsmu: update smu v14_0_0 driver if and metrics table
Update driver if headers and metrics table in smu v14_0_0 after smu fw promotion. Drop the legacy metrics table and add warning of checking pmfw version. Signed-off-by: Li Ma <li.ma@amd.com> Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 38a64e3 commit 34ec3ce

File tree

5 files changed

+97
-318
lines changed

5 files changed

+97
-318
lines changed

drivers/gpu/drm/amd/include/kgd_pp_interface.h

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,33 +1080,35 @@ struct gpu_metrics_v3_0 {
10801080
uint16_t average_ipu_activity[8];
10811081
/* time filtered per-core C0 residency % [0-100]*/
10821082
uint16_t average_core_c0_activity[16];
1083-
/* time filtered DRAM read bandwidth [GB/sec] */
1083+
/* time filtered DRAM read bandwidth [MB/sec] */
10841084
uint16_t average_dram_reads;
1085-
/* time filtered DRAM write bandwidth [GB/sec] */
1085+
/* time filtered DRAM write bandwidth [MB/sec] */
10861086
uint16_t average_dram_writes;
10871087

10881088
/* Driver attached timestamp (in ns) */
10891089
uint64_t system_clock_counter;
10901090

10911091
/* Power/Energy */
1092-
/* average dGPU + APU power on A + A platform */
1092+
/* time filtered power used for PPT/STAPM [APU+dGPU] [mW] */
10931093
uint32_t average_socket_power;
1094-
/* average IPU power [W] */
1094+
/* time filtered IPU power [mW] */
10951095
uint16_t average_ipu_power;
1096-
/* average APU power [W] */
1096+
/* time filtered APU power [mW] */
10971097
uint32_t average_apu_power;
1098-
/* average dGPU power [W] */
1098+
/* time filtered GFX power [mW] */
1099+
uint32_t average_gfx_power;
1100+
/* time filtered dGPU power [mW] */
10991101
uint32_t average_dgpu_power;
1100-
/* sum of core power across all cores in the socket [W] */
1101-
uint32_t average_core_power;
1102-
/* calculated core power [W] */
1103-
uint16_t core_power[16];
1104-
/* maximum IRM defined STAPM power limit [W] */
1102+
/* time filtered sum of core power across all cores in the socket [mW] */
1103+
uint32_t average_all_core_power;
1104+
/* calculated core power [mW] */
1105+
uint16_t average_core_power[16];
1106+
/* maximum IRM defined STAPM power limit [mW] */
11051107
uint16_t stapm_power_limit;
1106-
/* time filtered STAPM power limit [W] */
1108+
/* time filtered STAPM power limit [mW] */
11071109
uint16_t current_stapm_power_limit;
11081110

1109-
/* Average clocks */
1111+
/* time filtered clocks [MHz] */
11101112
uint16_t average_gfxclk_frequency;
11111113
uint16_t average_socclk_frequency;
11121114
uint16_t average_vpeclk_frequency;
@@ -1115,7 +1117,7 @@ struct gpu_metrics_v3_0 {
11151117
uint16_t average_vclk_frequency;
11161118

11171119
/* Current clocks */
1118-
/* target core frequency */
1120+
/* target core frequency [MHz] */
11191121
uint16_t current_coreclk[16];
11201122
/* CCLK frequency limit enforced on classic cores [MHz] */
11211123
uint16_t current_core_maxfreq;

drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu14_driver_if_v14_0_0.h

Lines changed: 31 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -150,97 +150,39 @@ typedef struct {
150150
} DpmClocks_t;
151151

152152
typedef struct {
153-
uint16_t CoreFrequency[16]; //Target core frequency [MHz]
154-
uint16_t CorePower[16]; //CAC calculated core power [W] [Q8.8]
155-
uint16_t CoreTemperature[16]; //TSEN measured core temperature [C] [Q8.8]
156-
uint16_t GfxTemperature; //TSEN measured GFX temperature [C] [Q8.8]
157-
uint16_t SocTemperature; //TSEN measured SOC temperature [C] [Q8.8]
158-
uint16_t StapmOpnLimit; //Maximum IRM defined STAPM power limit [W] [Q8.8]
159-
uint16_t StapmCurrentLimit; //Time filtered STAPM power limit [W] [Q8.8]
160-
uint16_t InfrastructureCpuMaxFreq; //CCLK frequency limit enforced on classic cores [MHz]
161-
uint16_t InfrastructureGfxMaxFreq; //GFXCLK frequency limit enforced on GFX [MHz]
162-
uint16_t SkinTemp; //Maximum skin temperature reported by APU and HS2 chassis sensors [C] [Q8.8]
163-
uint16_t AverageGfxclkFrequency; //Time filtered target GFXCLK frequency [MHz]
164-
uint16_t AverageFclkFrequency; //Time filtered target FCLK frequency [MHz]
165-
uint16_t AverageGfxActivity; //Time filtered GFX busy % [0-100] [Q8.8]
166-
uint16_t AverageSocclkFrequency; //Time filtered target SOCCLK frequency [MHz]
167-
uint16_t AverageVclkFrequency; //Time filtered target VCLK frequency [MHz]
168-
uint16_t AverageVcnActivity; //Time filtered VCN busy % [0-100] [Q8.8]
169-
uint16_t AverageVpeclkFrequency; //Time filtered target VPECLK frequency [MHz]
170-
uint16_t AverageIpuclkFrequency; //Time filtered target IPUCLK frequency [MHz]
171-
uint16_t AverageIpuBusy[8]; //Time filtered IPU per-column busy % [0-100] [Q8.8]
172-
uint16_t AverageDRAMReads; //Time filtered DRAM read bandwidth [GB/sec] [Q8.8]
173-
uint16_t AverageDRAMWrites; //Time filtered DRAM write bandwidth [GB/sec] [Q8.8]
174-
uint16_t AverageCoreC0Residency[16]; //Time filtered per-core C0 residency % [0-100] [Q8.8]
175-
uint16_t IpuPower; //Time filtered IPU power [W] [Q8.8]
176-
uint32_t ApuPower; //Time filtered APU power [W] [Q24.8]
177-
uint32_t dGpuPower; //Time filtered dGPU power [W] [Q24.8]
178-
uint32_t AverageSocketPower; //Time filtered power used for PPT/STAPM [APU+dGPU] [W] [Q24.8]
179-
uint32_t AverageCorePower; //Time filtered sum of core power across all cores in the socket [W] [Q24.8]
180-
uint32_t FilterAlphaValue; //Metrics table alpha filter time constant [us]
181-
uint32_t MetricsCounter; //Counter that is incremented on every metrics table update [PM_TIMER cycles]
153+
uint16_t CoreFrequency[16]; //Target core frequency [MHz]
154+
uint16_t CorePower[16]; //CAC calculated core power [mW]
155+
uint16_t CoreTemperature[16]; //TSEN measured core temperature [centi-C]
156+
uint16_t GfxTemperature; //TSEN measured GFX temperature [centi-C]
157+
uint16_t SocTemperature; //TSEN measured SOC temperature [centi-C]
158+
uint16_t StapmOpnLimit; //Maximum IRM defined STAPM power limit [mW]
159+
uint16_t StapmCurrentLimit; //Time filtered STAPM power limit [mW]
160+
uint16_t InfrastructureCpuMaxFreq; //CCLK frequency limit enforced on classic cores [MHz]
161+
uint16_t InfrastructureGfxMaxFreq; //GFXCLK frequency limit enforced on GFX [MHz]
162+
uint16_t SkinTemp; //Maximum skin temperature reported by APU and HS2 chassis sensors [centi-C]
163+
uint16_t GfxclkFrequency; //Time filtered target GFXCLK frequency [MHz]
164+
uint16_t FclkFrequency; //Time filtered target FCLK frequency [MHz]
165+
uint16_t GfxActivity; //Time filtered GFX busy % [0-100]
166+
uint16_t SocclkFrequency; //Time filtered target SOCCLK frequency [MHz]
167+
uint16_t VclkFrequency; //Time filtered target VCLK frequency [MHz]
168+
uint16_t VcnActivity; //Time filtered VCN busy % [0-100]
169+
uint16_t VpeclkFrequency; //Time filtered target VPECLK frequency [MHz]
170+
uint16_t IpuclkFrequency; //Time filtered target IPUCLK frequency [MHz]
171+
uint16_t IpuBusy[8]; //Time filtered IPU per-column busy % [0-100]
172+
uint16_t DRAMReads; //Time filtered DRAM read bandwidth [MB/sec]
173+
uint16_t DRAMWrites; //Time filtered DRAM write bandwidth [MB/sec]
174+
uint16_t CoreC0Residency[16]; //Time filtered per-core C0 residency % [0-100]
175+
uint16_t IpuPower; //Time filtered IPU power [mW]
176+
uint32_t ApuPower; //Time filtered APU power [mW]
177+
uint32_t GfxPower; //Time filtered GFX power [mW]
178+
uint32_t dGpuPower; //Time filtered dGPU power [mW]
179+
uint32_t SocketPower; //Time filtered power used for PPT/STAPM [APU+dGPU] [mW]
180+
uint32_t AllCorePower; //Time filtered sum of core power across all cores in the socket [mW]
181+
uint32_t FilterAlphaValue; //Metrics table alpha filter time constant [us]
182+
uint32_t MetricsCounter; //Counter that is incremented on every metrics table update [PM_TIMER cycles]
183+
uint32_t spare[16];
182184
} SmuMetrics_t;
183185

184-
typedef struct {
185-
uint16_t GfxclkFrequency; //[MHz]
186-
uint16_t SocclkFrequency; //[MHz]
187-
uint16_t VclkFrequency; //[MHz]
188-
uint16_t DclkFrequency; //[MHz]
189-
uint16_t MemclkFrequency; //[MHz]
190-
uint16_t spare;
191-
uint16_t UvdActivity; //[centi]
192-
uint16_t GfxActivity; //[centi]
193-
194-
uint16_t Voltage[2]; //[mV] indices: VDDCR_VDD, VDDCR_SOC
195-
uint16_t Current[2]; //[mA] indices: VDDCR_VDD, VDDCR_SOC
196-
uint16_t Power[2]; //[mW] indices: VDDCR_VDD, VDDCR_SOC
197-
198-
uint16_t CoreFrequency[8]; //[MHz]
199-
uint16_t CorePower[8]; //[mW]
200-
uint16_t CoreTemperature[8]; //[centi-Celsius]
201-
uint16_t L3Frequency[2]; //[MHz]
202-
uint16_t L3Temperature[2]; //[centi-Celsius]
203-
204-
uint16_t spare2[24];
205-
206-
uint16_t GfxTemperature; //[centi-Celsius]
207-
uint16_t SocTemperature; //[centi-Celsius]
208-
uint16_t ThrottlerStatus;
209-
210-
uint16_t CurrentSocketPower; //[mW]
211-
uint16_t StapmOpnLimit; //[W]
212-
uint16_t StapmCurrentLimit; //[W]
213-
uint32_t ApuPower; //[mW]
214-
uint32_t dGpuPower; //[mW]
215-
216-
uint16_t VddTdcValue; //[mA]
217-
uint16_t SocTdcValue; //[mA]
218-
uint16_t VddEdcValue; //[mA]
219-
uint16_t SocEdcValue; //[mA]
220-
221-
uint16_t InfrastructureCpuMaxFreq; //[MHz]
222-
uint16_t InfrastructureGfxMaxFreq; //[MHz]
223-
224-
uint16_t SkinTemp;
225-
uint16_t DeviceState;
226-
uint16_t CurTemp; //[centi-Celsius]
227-
uint16_t FilterAlphaValue; //[m]
228-
229-
uint16_t AverageGfxclkFrequency;
230-
uint16_t AverageFclkFrequency;
231-
uint16_t AverageGfxActivity;
232-
uint16_t AverageSocclkFrequency;
233-
uint16_t AverageVclkFrequency;
234-
uint16_t AverageVcnActivity;
235-
uint16_t AverageDRAMReads; //Filtered DF Bandwidth::DRAM Reads
236-
uint16_t AverageDRAMWrites; //Filtered DF Bandwidth::DRAM Writes
237-
uint16_t AverageSocketPower; //Filtered value of CurrentSocketPower
238-
uint16_t AverageCorePower[2]; //Filtered of [sum of CorePower[8] per ccx])
239-
uint16_t AverageCoreC0Residency[16]; //Filtered of [average C0 residency % per core]
240-
uint16_t spare1;
241-
uint32_t MetricsCounter; //Counts the # of metrics table parameter reads per update to the metrics table, i.e. if the metrics table update happens every 1 second, this value could be up to 1000 if the smu collected metrics data every cycle, or as low as 0 if the smu was asleep the whole time. Reset to 0 after writing.
242-
} SmuMetrics_legacy_t;
243-
244186
//ISP tile definitions
245187
typedef enum {
246188
TILE_XTILE = 0, //ONO0

drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ int smu_v14_0_check_fw_version(struct smu_context *smu)
229229
smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_2;
230230
break;
231231
case IP_VERSION(14, 0, 0):
232+
if ((smu->smc_fw_version < 0x5d3a00))
233+
dev_warn(smu->adev->dev, "The PMFW version(%x) is behind in this BIOS!\n", smu->smc_fw_version);
232234
smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_0;
233235
break;
234236
default:

0 commit comments

Comments
 (0)