]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/amd/pm: Use metric table for pcie speed/width
authorAsad Kamal <asad.kamal@amd.com>
Mon, 11 Mar 2024 06:03:10 +0000 (14:03 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 20 Mar 2024 17:38:12 +0000 (13:38 -0400)
Report pcie link speed/width using metric table in case
of one vf & if pmfw support is available, else report directly from
registers in case of pf. Skip reporting it for other cases.

v2: Skip multi-vf check(Lijo)

Signed-off-by: Asad Kamal <asad.kamal@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c

index 3957af057d54ff1ed8d5f5f9545e51562cb3973c..4e178916e8454de428987deb3bd38710cf3f67cf 100644 (file)
@@ -2228,7 +2228,15 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
        gpu_metrics->gfxclk_lock_status = GET_METRIC_FIELD(GfxLockXCDMak) >> GET_INST(GC, 0);
 
        if (!(adev->flags & AMD_IS_APU)) {
-               if (!amdgpu_sriov_vf(adev)) {
+               /*Check smu version, PCIE link speed and width will be reported from pmfw metric
+                * table for both pf & one vf for smu version 85.99.0 or higher else report only
+                * for pf from registers
+                */
+               if (smu->smc_fw_version >= 0x556300) {
+                       gpu_metrics->pcie_link_width = metrics_x->PCIeLinkWidth;
+                       gpu_metrics->pcie_link_speed =
+                               pcie_gen_to_speed(metrics_x->PCIeLinkSpeed);
+               } else if (!amdgpu_sriov_vf(adev)) {
                        link_width_level = smu_v13_0_6_get_current_pcie_link_width_level(smu);
                        if (link_width_level > MAX_LINK_WIDTH)
                                link_width_level = 0;
@@ -2238,6 +2246,7 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
                        gpu_metrics->pcie_link_speed =
                                smu_v13_0_6_get_current_pcie_link_speed(smu);
                }
+
                gpu_metrics->pcie_bandwidth_acc =
                                SMUQ10_ROUND(metrics_x->PcieBandwidthAcc[0]);
                gpu_metrics->pcie_bandwidth_inst =