|
@@ -9499,9 +9499,10 @@ int cik_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk)
|
|
static void cik_pcie_gen3_enable(struct radeon_device *rdev)
|
|
static void cik_pcie_gen3_enable(struct radeon_device *rdev)
|
|
{
|
|
{
|
|
struct pci_dev *root = rdev->pdev->bus->self;
|
|
struct pci_dev *root = rdev->pdev->bus->self;
|
|
|
|
+ enum pci_bus_speed speed_cap;
|
|
int bridge_pos, gpu_pos;
|
|
int bridge_pos, gpu_pos;
|
|
- u32 speed_cntl, mask, current_data_rate;
|
|
|
|
- int ret, i;
|
|
|
|
|
|
+ u32 speed_cntl, current_data_rate;
|
|
|
|
+ int i;
|
|
u16 tmp16;
|
|
u16 tmp16;
|
|
|
|
|
|
if (pci_is_root_bus(rdev->pdev->bus))
|
|
if (pci_is_root_bus(rdev->pdev->bus))
|
|
@@ -9516,23 +9517,24 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)
|
|
if (!(rdev->flags & RADEON_IS_PCIE))
|
|
if (!(rdev->flags & RADEON_IS_PCIE))
|
|
return;
|
|
return;
|
|
|
|
|
|
- ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask);
|
|
|
|
- if (ret != 0)
|
|
|
|
|
|
+ speed_cap = pcie_get_speed_cap(root);
|
|
|
|
+ if (speed_cap == PCI_SPEED_UNKNOWN)
|
|
return;
|
|
return;
|
|
|
|
|
|
- if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80)))
|
|
|
|
|
|
+ if ((speed_cap != PCIE_SPEED_8_0GT) &&
|
|
|
|
+ (speed_cap != PCIE_SPEED_5_0GT))
|
|
return;
|
|
return;
|
|
|
|
|
|
speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
|
|
speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
|
|
current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
|
|
current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
|
|
LC_CURRENT_DATA_RATE_SHIFT;
|
|
LC_CURRENT_DATA_RATE_SHIFT;
|
|
- if (mask & DRM_PCIE_SPEED_80) {
|
|
|
|
|
|
+ if (speed_cap == PCIE_SPEED_8_0GT) {
|
|
if (current_data_rate == 2) {
|
|
if (current_data_rate == 2) {
|
|
DRM_INFO("PCIE gen 3 link speeds already enabled\n");
|
|
DRM_INFO("PCIE gen 3 link speeds already enabled\n");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
DRM_INFO("enabling PCIE gen 3 link speeds, disable with radeon.pcie_gen2=0\n");
|
|
DRM_INFO("enabling PCIE gen 3 link speeds, disable with radeon.pcie_gen2=0\n");
|
|
- } else if (mask & DRM_PCIE_SPEED_50) {
|
|
|
|
|
|
+ } else if (speed_cap == PCIE_SPEED_5_0GT) {
|
|
if (current_data_rate == 1) {
|
|
if (current_data_rate == 1) {
|
|
DRM_INFO("PCIE gen 2 link speeds already enabled\n");
|
|
DRM_INFO("PCIE gen 2 link speeds already enabled\n");
|
|
return;
|
|
return;
|
|
@@ -9548,7 +9550,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)
|
|
if (!gpu_pos)
|
|
if (!gpu_pos)
|
|
return;
|
|
return;
|
|
|
|
|
|
- if (mask & DRM_PCIE_SPEED_80) {
|
|
|
|
|
|
+ if (speed_cap == PCIE_SPEED_8_0GT) {
|
|
/* re-try equalization if gen3 is not already enabled */
|
|
/* re-try equalization if gen3 is not already enabled */
|
|
if (current_data_rate != 2) {
|
|
if (current_data_rate != 2) {
|
|
u16 bridge_cfg, gpu_cfg;
|
|
u16 bridge_cfg, gpu_cfg;
|
|
@@ -9636,9 +9638,9 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)
|
|
|
|
|
|
pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
|
|
pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
|
|
tmp16 &= ~0xf;
|
|
tmp16 &= ~0xf;
|
|
- if (mask & DRM_PCIE_SPEED_80)
|
|
|
|
|
|
+ if (speed_cap == PCIE_SPEED_8_0GT)
|
|
tmp16 |= 3; /* gen3 */
|
|
tmp16 |= 3; /* gen3 */
|
|
- else if (mask & DRM_PCIE_SPEED_50)
|
|
|
|
|
|
+ else if (speed_cap == PCIE_SPEED_5_0GT)
|
|
tmp16 |= 2; /* gen2 */
|
|
tmp16 |= 2; /* gen2 */
|
|
else
|
|
else
|
|
tmp16 |= 1; /* gen1 */
|
|
tmp16 |= 1; /* gen1 */
|