RE: [PATCH] drm/amdgpu: Renoir/Cezanne GPU power reporting issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-by: Aaron Liu aaron.liu@xxxxxxx

 

From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Zhang, Jesse(Jie)
Sent: Friday, January 13, 2023 10:07 AM
To: Deucher, Alexander <Alexander.Deucher@xxxxxxx>
Cc: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
Subject: [PATCH] drm/amdgpu: Renoir/Cezanne GPU power reporting issue

 

[AMD Official Use Only - General]

 

 

    drm/amdgpu: Correct the power calcultion for Renior/Cezanne.

    From smu firmware,the value of power is transferred  in units of watts.

    Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2321

    Fixes: 137aac26a2ed ("drm/amdgpu/smu12: fix power reporting on renoir")

 

    Acked-by: Alex Deucher alexander.deucher@xxxxxxx

    Signed-off-by: Jesse Zhang Jesse.Zhang@xxxxxxx

 

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c

index 85e22210963f..96a49a3b3ad9 100644

--- a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c

+++ b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c

@@ -1171,6 +1171,7 @@ static int renoir_get_smu_metrics_data(struct smu_context *smu,

        int ret = 0;

        uint32_t apu_percent = 0;

        uint32_t dgpu_percent = 0;

+       struct amdgpu_device *adev = smu->adev;

 

 

        ret = smu_cmn_get_metrics_table(smu,

@@ -1196,7 +1197,11 @@ static int renoir_get_smu_metrics_data(struct smu_context *smu,

                *value = metrics->AverageUvdActivity / 100;

                break;

        case METRICS_AVERAGE_SOCKETPOWER:

-               *value = (metrics->CurrentSocketPower << 8) / 1000;

+               if (((adev->ip_versions[MP1_HWIP][0] == IP_VERSION(12, 0, 1)) && (adev->pm.fw_version >= 0x40000f))

+                       || ((adev->ip_versions[MP1_HWIP][0] == IP_VERSION(12, 0, 0)) && (adev->pm.fw_version >= 0x373200)))

+                       *value = metrics->CurrentSocketPower << 8;

+               else

+                       *value = (metrics->CurrentSocketPower << 8) / 1000;

                break;

        case METRICS_TEMPERATURE_EDGE:

                *value = (metrics->GfxTemperature / 100) *


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux