mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
drm/amd/pm: Keep sub-watt precision in Q10 socket power
The Q10 socket power was rounded to whole watts before scaling to milliwatts, so the reported value lost its sub-watt precision. Add SMUQ10_TO_MILLIWATT to convert while keeping the fractional bits. Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Asad Kamal <asad.kamal@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
f5998f4d71
commit
a01ff85d6f
|
|
@ -55,6 +55,9 @@
|
|||
#define SMUQ10_TO_UINT(x) ((x) >> 10)
|
||||
#define SMUQ10_FRAC(x) ((x) & 0x3ff)
|
||||
#define SMUQ10_ROUND(x) ((SMUQ10_TO_UINT(x)) + ((SMUQ10_FRAC(x)) >= 0x200))
|
||||
/* Convert Q10 watts to milliwatts, preserving the fractional part */
|
||||
#define SMUQ10_TO_MILLIWATT(x) (SMUQ10_TO_UINT(x) * MILLIWATT_PER_WATT + \
|
||||
((SMUQ10_FRAC(x) * MILLIWATT_PER_WATT) >> 10))
|
||||
#define SMU_V13_SOFT_FREQ_ROUND(x) ((x) + 1)
|
||||
|
||||
extern const int pmfw_decoded_link_speed[5];
|
||||
|
|
|
|||
|
|
@ -434,8 +434,7 @@ int smu_v13_0_12_get_smu_metrics_data(struct smu_context *smu,
|
|||
*value = SMUQ10_ROUND(metrics->DramBandwidthUtilization);
|
||||
break;
|
||||
case METRICS_CURR_SOCKETPOWER:
|
||||
*value = SMUQ10_ROUND(metrics->SocketPower) *
|
||||
MILLIWATT_PER_WATT;
|
||||
*value = SMUQ10_TO_MILLIWATT(metrics->SocketPower);
|
||||
break;
|
||||
case METRICS_TEMPERATURE_HOTSPOT:
|
||||
*value = SMUQ10_ROUND(metrics->MaxSocketTemperature) *
|
||||
|
|
|
|||
|
|
@ -1303,8 +1303,7 @@ static int smu_v13_0_6_get_smu_metrics_data(struct smu_context *smu,
|
|||
*value = SMUQ10_ROUND(GET_METRIC_FIELD(DramBandwidthUtilization, version));
|
||||
break;
|
||||
case METRICS_CURR_SOCKETPOWER:
|
||||
*value = SMUQ10_ROUND(GET_METRIC_FIELD(SocketPower, version)) *
|
||||
MILLIWATT_PER_WATT;
|
||||
*value = SMUQ10_TO_MILLIWATT(GET_METRIC_FIELD(SocketPower, version));
|
||||
break;
|
||||
case METRICS_TEMPERATURE_HOTSPOT:
|
||||
*value = SMUQ10_ROUND(GET_METRIC_FIELD(MaxSocketTemperature, version)) *
|
||||
|
|
|
|||
|
|
@ -55,6 +55,9 @@
|
|||
#define SMUQ10_TO_UINT(x) ((x) >> 10)
|
||||
#define SMUQ10_FRAC(x) ((x) & 0x3ff)
|
||||
#define SMUQ10_ROUND(x) ((SMUQ10_TO_UINT(x)) + ((SMUQ10_FRAC(x)) >= 0x200))
|
||||
/* Convert Q10 watts to milliwatts, preserving the fractional part */
|
||||
#define SMUQ10_TO_MILLIWATT(x) (SMUQ10_TO_UINT(x) * MILLIWATT_PER_WATT + \
|
||||
((SMUQ10_FRAC(x) * MILLIWATT_PER_WATT) >> 10))
|
||||
|
||||
#define hbm_stack_mask_valid(umc_mask) \
|
||||
(((umc_mask) & 0xF) == 0xF)
|
||||
|
|
@ -413,8 +416,7 @@ static int smu_v15_0_8_get_smu_metrics_data(struct smu_context *smu,
|
|||
*value = SMUQ10_ROUND(metrics->DramBandwidthUtilization);
|
||||
break;
|
||||
case METRICS_CURR_SOCKETPOWER:
|
||||
*value = SMUQ10_ROUND(metrics->SocketPower) *
|
||||
MILLIWATT_PER_WATT;
|
||||
*value = SMUQ10_TO_MILLIWATT(metrics->SocketPower);
|
||||
break;
|
||||
case METRICS_TEMPERATURE_HOTSPOT:
|
||||
*value = SMUQ10_ROUND(metrics->MaxSocketTemperature) *
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user