[AMD Official Use Only - Internal Distribution Only] PMFW of Arcturus does not expose us those information. So, we have to stick to current implementation(smu_v11_0_get_current_pcie_link_width/speed) for Arcturus. Regards Evan -----Original Message----- From: Alex Deucher <alexdeucher@xxxxxxxxx> Sent: Tuesday, February 23, 2021 5:48 AM To: Quan, Evan <Evan.Quan@xxxxxxx> Cc: amd-gfx list <amd-gfx@xxxxxxxxxxxxxxxxxxxxx>; Deucher, Alexander <Alexander.Deucher@xxxxxxx> Subject: Re: [PATCH 2/2] drm/amd/pm: optimize the link width/speed retrieving On Sun, Feb 21, 2021 at 11:04 PM Evan Quan <evan.quan@xxxxxxx> wrote: > > By using the information provided by PMFW when available. > > Change-Id: I1afec4cd07ac9608861ee07c449e320e3f36a932 > Signed-off-by: Evan Quan <evan.quan@xxxxxxx> What about arcturus? Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > .../gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 17 ++++++++++---- > .../amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 22 +++++++++++++++---- > 2 files changed, 31 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > index 29e04f33f276..7fe2876c99fe 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > @@ -72,6 +72,8 @@ > > #define SMU_11_0_GFX_BUSY_THRESHOLD 15 > > +static uint16_t link_speed[] = {25, 50, 80, 160}; > + > static struct cmn2asic_msg_mapping navi10_message_map[SMU_MSG_MAX_COUNT] = { > MSG_MAP(TestMessage, PPSMC_MSG_TestMessage, 1), > MSG_MAP(GetSmuVersion, PPSMC_MSG_GetSmuVersion, 1), > @@ -2391,10 +2393,17 @@ static ssize_t navi10_get_gpu_metrics(struct > smu_context *smu, > > gpu_metrics->current_fan_speed = metrics.CurrFanSpeed; > > - gpu_metrics->pcie_link_width = > - smu_v11_0_get_current_pcie_link_width(smu); > - gpu_metrics->pcie_link_speed = > - smu_v11_0_get_current_pcie_link_speed(smu); > + if (((adev->asic_type == CHIP_NAVI14) && smu_version > 0x00351F00) || > + ((adev->asic_type == CHIP_NAVI12) && smu_version > 0x00341C00) || > + ((adev->asic_type == CHIP_NAVI10) && smu_version > 0x002A3B00)) { > + gpu_metrics->pcie_link_width = (uint16_t)metrics.PcieWidth; > + gpu_metrics->pcie_link_speed = link_speed[metrics.PcieRate]; > + } else { > + gpu_metrics->pcie_link_width = > + smu_v11_0_get_current_pcie_link_width(smu); > + gpu_metrics->pcie_link_speed = > + smu_v11_0_get_current_pcie_link_speed(smu); > + } > > gpu_metrics->system_clock_counter = ktime_get_boottime_ns(); > > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > index e74299da1739..6fd95764c952 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > @@ -73,6 +73,8 @@ > > #define SMU_11_0_7_GFX_BUSY_THRESHOLD 15 > > +static uint16_t link_speed[] = {25, 50, 80, 160}; > + > static struct cmn2asic_msg_mapping sienna_cichlid_message_map[SMU_MSG_MAX_COUNT] = { > MSG_MAP(TestMessage, PPSMC_MSG_TestMessage, 1), > MSG_MAP(GetSmuVersion, PPSMC_MSG_GetSmuVersion, 1), > @@ -3124,6 +3126,8 @@ static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu, > SmuMetricsExternal_t metrics_external; > SmuMetrics_t *metrics = > &(metrics_external.SmuMetrics); > + struct amdgpu_device *adev = smu->adev; > + uint32_t smu_version; > int ret = 0; > > ret = smu_cmn_get_metrics_table(smu, @@ -3170,10 +3174,20 @@ > static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu, > > gpu_metrics->current_fan_speed = metrics->CurrFanSpeed; > > - gpu_metrics->pcie_link_width = > - smu_v11_0_get_current_pcie_link_width(smu); > - gpu_metrics->pcie_link_speed = > - smu_v11_0_get_current_pcie_link_speed(smu); > + ret = smu_cmn_get_smc_version(smu, NULL, &smu_version); > + if (ret) > + return ret; > + > + if (((adev->asic_type == CHIP_SIENNA_CICHLID) && smu_version > 0x003A1E00) || > + ((adev->asic_type == CHIP_NAVY_FLOUNDER) && smu_version > 0x00410400)) { > + gpu_metrics->pcie_link_width = (uint16_t)metrics->PcieWidth; > + gpu_metrics->pcie_link_speed = link_speed[metrics->PcieRate]; > + } else { > + gpu_metrics->pcie_link_width = > + smu_v11_0_get_current_pcie_link_width(smu); > + gpu_metrics->pcie_link_speed = > + smu_v11_0_get_current_pcie_link_speed(smu); > + } > > gpu_metrics->system_clock_counter = ktime_get_boottime_ns(); > > -- > 2.29.0 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist > s.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=04%7C01%7Cev > an.quan%40amd.com%7Cdbf961954f9c4ef66b1308d8d77b8592%7C3dd8961fe4884e6 > 08e11a82d994e183d%7C0%7C0%7C637496272809706224%7CUnknown%7CTWFpbGZsb3d > 8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C > 1000&sdata=29zqelJSqHdhHVMPUqag5i1Sv9mrUhHSGysA52YYQXs%3D&rese > rved=0 _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx