aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/si.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2018-02-26 11:05:10 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-03-05 13:30:55 -0500
commit0bf6718537cf1112cbe2d7c4349188d7e89be90c (patch)
treeb42ad6ea841d07849c4103e925591db6445bf476 /drivers/gpu/drm/amd/amdgpu/si.c
parent9c5c71bbed4132a3a5f200064914db768c88302a (diff)
drm/amdgpu: used cached pcie gen info for SI (v2)
Rather than querying it every time we need it. Also fixes a crash in VM pass through if there is no root bridge because the cached value fetch already checks this properly. v2: fix includes Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=105244 Acked-by: Christian König <christian.koenig@amd.com> Reviewed-by: Rex Zhu<rezhu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/si.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/si.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c
index f20c4b7414e8..6e61b56bfbfc 100644
--- a/drivers/gpu/drm/amd/amdgpu/si.c
+++ b/drivers/gpu/drm/amd/amdgpu/si.c
@@ -31,6 +31,7 @@
31#include "amdgpu_uvd.h" 31#include "amdgpu_uvd.h"
32#include "amdgpu_vce.h" 32#include "amdgpu_vce.h"
33#include "atom.h" 33#include "atom.h"
34#include "amd_pcie.h"
34#include "amdgpu_powerplay.h" 35#include "amdgpu_powerplay.h"
35#include "sid.h" 36#include "sid.h"
36#include "si_ih.h" 37#include "si_ih.h"
@@ -1484,8 +1485,8 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
1484{ 1485{
1485 struct pci_dev *root = adev->pdev->bus->self; 1486 struct pci_dev *root = adev->pdev->bus->self;
1486 int bridge_pos, gpu_pos; 1487 int bridge_pos, gpu_pos;
1487 u32 speed_cntl, mask, current_data_rate; 1488 u32 speed_cntl, current_data_rate;
1488 int ret, i; 1489 int i;
1489 u16 tmp16; 1490 u16 tmp16;
1490 1491
1491 if (pci_is_root_bus(adev->pdev->bus)) 1492 if (pci_is_root_bus(adev->pdev->bus))
@@ -1497,23 +1498,20 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
1497 if (adev->flags & AMD_IS_APU) 1498 if (adev->flags & AMD_IS_APU)
1498 return; 1499 return;
1499 1500
1500 ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); 1501 if (!(adev->pm.pcie_gen_mask & (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
1501 if (ret != 0) 1502 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3)))
1502 return;
1503
1504 if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80)))
1505 return; 1503 return;
1506 1504
1507 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 1505 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
1508 current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >> 1506 current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
1509 LC_CURRENT_DATA_RATE_SHIFT; 1507 LC_CURRENT_DATA_RATE_SHIFT;
1510 if (mask & DRM_PCIE_SPEED_80) { 1508 if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) {
1511 if (current_data_rate == 2) { 1509 if (current_data_rate == 2) {
1512 DRM_INFO("PCIE gen 3 link speeds already enabled\n"); 1510 DRM_INFO("PCIE gen 3 link speeds already enabled\n");
1513 return; 1511 return;
1514 } 1512 }
1515 DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n"); 1513 DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n");
1516 } else if (mask & DRM_PCIE_SPEED_50) { 1514 } else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) {
1517 if (current_data_rate == 1) { 1515 if (current_data_rate == 1) {
1518 DRM_INFO("PCIE gen 2 link speeds already enabled\n"); 1516 DRM_INFO("PCIE gen 2 link speeds already enabled\n");
1519 return; 1517 return;
@@ -1529,7 +1527,7 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
1529 if (!gpu_pos) 1527 if (!gpu_pos)
1530 return; 1528 return;
1531 1529
1532 if (mask & DRM_PCIE_SPEED_80) { 1530 if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) {
1533 if (current_data_rate != 2) { 1531 if (current_data_rate != 2) {
1534 u16 bridge_cfg, gpu_cfg; 1532 u16 bridge_cfg, gpu_cfg;
1535 u16 bridge_cfg2, gpu_cfg2; 1533 u16 bridge_cfg2, gpu_cfg2;
@@ -1612,9 +1610,9 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev)
1612 1610
1613 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); 1611 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
1614 tmp16 &= ~0xf; 1612 tmp16 &= ~0xf;
1615 if (mask & DRM_PCIE_SPEED_80) 1613 if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3)
1616 tmp16 |= 3; 1614 tmp16 |= 3;
1617 else if (mask & DRM_PCIE_SPEED_50) 1615 else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2)
1618 tmp16 |= 2; 1616 tmp16 |= 2;
1619 else 1617 else
1620 tmp16 |= 1; 1618 tmp16 |= 1;