diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 19 | 
1 files changed, 12 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 861ccff78af9..932dc93b2e63 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -5944,13 +5944,18 @@ static void amdgpu_device_partner_bandwidth(struct amdgpu_device *adev,  	*speed = PCI_SPEED_UNKNOWN;  	*width = PCIE_LNK_WIDTH_UNKNOWN; -	while ((parent = pci_upstream_bridge(parent))) { -		/* skip upstream/downstream switches internal to dGPU*/ -		if (parent->vendor == PCI_VENDOR_ID_ATI) -			continue; -		*speed = pcie_get_speed_cap(parent); -		*width = pcie_get_width_cap(parent); -		break; +	if (amdgpu_device_pcie_dynamic_switching_supported(adev)) { +		while ((parent = pci_upstream_bridge(parent))) { +			/* skip upstream/downstream switches internal to dGPU*/ +			if (parent->vendor == PCI_VENDOR_ID_ATI) +				continue; +			*speed = pcie_get_speed_cap(parent); +			*width = pcie_get_width_cap(parent); +			break; +		} +	} else { +		/* use the current speeds rather than max if switching is not supported */ +		pcie_bandwidth_available(adev->pdev, NULL, speed, width);  	}  } |