diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 32 | 
1 files changed, 32 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 6b38b0511330..84ddd02579bb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -85,6 +85,7 @@  #if IS_ENABLED(CONFIG_X86)  #include <asm/intel-family.h> +#include <asm/cpu_device_id.h>  #endif  MODULE_FIRMWARE("amdgpu/vega10_gpu_info.bin"); @@ -1873,6 +1874,35 @@ static bool amdgpu_device_pcie_dynamic_switching_supported(struct amdgpu_device  	return true;  } +static bool amdgpu_device_aspm_support_quirk(struct amdgpu_device *adev) +{ +#if IS_ENABLED(CONFIG_X86) +	struct cpuinfo_x86 *c = &cpu_data(0); + +	if (!(amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(12, 0, 0) || +		  amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(12, 0, 1))) +		return false; + +	if (c->x86 == 6 && +		adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN5) { +		switch (c->x86_model) { +		case VFM_MODEL(INTEL_ALDERLAKE): +		case VFM_MODEL(INTEL_ALDERLAKE_L): +		case VFM_MODEL(INTEL_RAPTORLAKE): +		case VFM_MODEL(INTEL_RAPTORLAKE_P): +		case VFM_MODEL(INTEL_RAPTORLAKE_S): +			return true; +		default: +			return false; +		} +	} else { +		return false; +	} +#else +	return false; +#endif +} +  /**   * amdgpu_device_should_use_aspm - check if the device should program ASPM   * @@ -1897,6 +1927,8 @@ bool amdgpu_device_should_use_aspm(struct amdgpu_device *adev)  	}  	if (adev->flags & AMD_IS_APU)  		return false; +	if (amdgpu_device_aspm_support_quirk(adev)) +		return false;  	return pcie_aspm_enabled(adev->pdev);  } | 
