diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cik.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index c7c298b88170..fd9c9588ef46 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include "amdgpu_vce.h" | 32 | #include "amdgpu_vce.h" |
33 | #include "cikd.h" | 33 | #include "cikd.h" |
34 | #include "atom.h" | 34 | #include "atom.h" |
35 | #include "amd_pcie.h" | ||
35 | 36 | ||
36 | #include "cik.h" | 37 | #include "cik.h" |
37 | #include "gmc_v7_0.h" | 38 | #include "gmc_v7_0.h" |
@@ -1595,8 +1596,8 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) | |||
1595 | { | 1596 | { |
1596 | struct pci_dev *root = adev->pdev->bus->self; | 1597 | struct pci_dev *root = adev->pdev->bus->self; |
1597 | int bridge_pos, gpu_pos; | 1598 | int bridge_pos, gpu_pos; |
1598 | u32 speed_cntl, mask, current_data_rate; | 1599 | u32 speed_cntl, current_data_rate; |
1599 | int ret, i; | 1600 | int i; |
1600 | u16 tmp16; | 1601 | u16 tmp16; |
1601 | 1602 | ||
1602 | if (pci_is_root_bus(adev->pdev->bus)) | 1603 | if (pci_is_root_bus(adev->pdev->bus)) |
@@ -1608,23 +1609,20 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) | |||
1608 | if (adev->flags & AMD_IS_APU) | 1609 | if (adev->flags & AMD_IS_APU) |
1609 | return; | 1610 | return; |
1610 | 1611 | ||
1611 | ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); | 1612 | if (!(adev->pm.pcie_gen_mask & (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 | |
1612 | if (ret != 0) | 1613 | CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3))) |
1613 | return; | ||
1614 | |||
1615 | if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80))) | ||
1616 | return; | 1614 | return; |
1617 | 1615 | ||
1618 | speed_cntl = RREG32_PCIE(ixPCIE_LC_SPEED_CNTL); | 1616 | speed_cntl = RREG32_PCIE(ixPCIE_LC_SPEED_CNTL); |
1619 | current_data_rate = (speed_cntl & PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK) >> | 1617 | current_data_rate = (speed_cntl & PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK) >> |
1620 | PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE__SHIFT; | 1618 | PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE__SHIFT; |
1621 | if (mask & DRM_PCIE_SPEED_80) { | 1619 | if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { |
1622 | if (current_data_rate == 2) { | 1620 | if (current_data_rate == 2) { |
1623 | DRM_INFO("PCIE gen 3 link speeds already enabled\n"); | 1621 | DRM_INFO("PCIE gen 3 link speeds already enabled\n"); |
1624 | return; | 1622 | return; |
1625 | } | 1623 | } |
1626 | DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n"); | 1624 | DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n"); |
1627 | } else if (mask & DRM_PCIE_SPEED_50) { | 1625 | } else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) { |
1628 | if (current_data_rate == 1) { | 1626 | if (current_data_rate == 1) { |
1629 | DRM_INFO("PCIE gen 2 link speeds already enabled\n"); | 1627 | DRM_INFO("PCIE gen 2 link speeds already enabled\n"); |
1630 | return; | 1628 | return; |
@@ -1640,7 +1638,7 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) | |||
1640 | if (!gpu_pos) | 1638 | if (!gpu_pos) |
1641 | return; | 1639 | return; |
1642 | 1640 | ||
1643 | if (mask & DRM_PCIE_SPEED_80) { | 1641 | if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { |
1644 | /* re-try equalization if gen3 is not already enabled */ | 1642 | /* re-try equalization if gen3 is not already enabled */ |
1645 | if (current_data_rate != 2) { | 1643 | if (current_data_rate != 2) { |
1646 | u16 bridge_cfg, gpu_cfg; | 1644 | u16 bridge_cfg, gpu_cfg; |
@@ -1735,9 +1733,9 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) | |||
1735 | 1733 | ||
1736 | pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); | 1734 | pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); |
1737 | tmp16 &= ~0xf; | 1735 | tmp16 &= ~0xf; |
1738 | if (mask & DRM_PCIE_SPEED_80) | 1736 | if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) |
1739 | tmp16 |= 3; /* gen3 */ | 1737 | tmp16 |= 3; /* gen3 */ |
1740 | else if (mask & DRM_PCIE_SPEED_50) | 1738 | else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) |
1741 | tmp16 |= 2; /* gen2 */ | 1739 | tmp16 |= 2; /* gen2 */ |
1742 | else | 1740 | else |
1743 | tmp16 |= 1; /* gen1 */ | 1741 | tmp16 |= 1; /* gen1 */ |
@@ -2450,6 +2448,8 @@ static int cik_common_early_init(void *handle) | |||
2450 | return -EINVAL; | 2448 | return -EINVAL; |
2451 | } | 2449 | } |
2452 | 2450 | ||
2451 | amdgpu_get_pcie_info(adev); | ||
2452 | |||
2453 | return 0; | 2453 | return 0; |
2454 | } | 2454 | } |
2455 | 2455 | ||