mirror of https://gitee.com/openkylin/linux.git
drm/amdgpu: Don't register Thunderbolt eGPU with vga_switcheroo
An external Thunderbolt GPU can neither drive the laptop's panel nor be powered off by the platform, so there's no point in registering it with vga_switcheroo. In fact, when the external GPU is runtime suspended, vga_switcheroo will cut power to the internal discrete GPU, resulting in a lockup. Moreover AMD's Windows driver special-cases Thunderbolt as well. Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Lukas Wunner <lukas@wunner.de> Link: http://patchwork.freedesktop.org/patch/msgid/701a8e89ce8ac39734736ab779558b6a4042a19e.1489145162.git.lukas@wunner.de
This commit is contained in:
parent
7ffb0ce31c
commit
84c8b22e9f
|
@ -1763,7 +1763,9 @@ int amdgpu_device_init(struct amdgpu_device *adev,
|
||||||
runtime = true;
|
runtime = true;
|
||||||
if (amdgpu_device_is_px(ddev))
|
if (amdgpu_device_is_px(ddev))
|
||||||
runtime = true;
|
runtime = true;
|
||||||
vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, runtime);
|
if (!pci_is_thunderbolt_attached(adev->pdev))
|
||||||
|
vga_switcheroo_register_client(adev->pdev,
|
||||||
|
&amdgpu_switcheroo_ops, runtime);
|
||||||
if (runtime)
|
if (runtime)
|
||||||
vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
|
vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
|
||||||
|
|
||||||
|
@ -1926,7 +1928,8 @@ void amdgpu_device_fini(struct amdgpu_device *adev)
|
||||||
amdgpu_atombios_fini(adev);
|
amdgpu_atombios_fini(adev);
|
||||||
kfree(adev->bios);
|
kfree(adev->bios);
|
||||||
adev->bios = NULL;
|
adev->bios = NULL;
|
||||||
vga_switcheroo_unregister_client(adev->pdev);
|
if (!pci_is_thunderbolt_attached(adev->pdev))
|
||||||
|
vga_switcheroo_unregister_client(adev->pdev);
|
||||||
if (adev->flags & AMD_IS_PX)
|
if (adev->flags & AMD_IS_PX)
|
||||||
vga_switcheroo_fini_domain_pm_ops(adev->dev);
|
vga_switcheroo_fini_domain_pm_ops(adev->dev);
|
||||||
vga_client_register(adev->pdev, NULL, NULL, NULL);
|
vga_client_register(adev->pdev, NULL, NULL, NULL);
|
||||||
|
|
|
@ -103,7 +103,8 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
|
||||||
amdgpu_has_atpx() &&
|
amdgpu_has_atpx() &&
|
||||||
(amdgpu_is_atpx_hybrid() ||
|
(amdgpu_is_atpx_hybrid() ||
|
||||||
amdgpu_has_atpx_dgpu_power_cntl()) &&
|
amdgpu_has_atpx_dgpu_power_cntl()) &&
|
||||||
((flags & AMD_IS_APU) == 0))
|
((flags & AMD_IS_APU) == 0) &&
|
||||||
|
!pci_is_thunderbolt_attached(dev->pdev))
|
||||||
flags |= AMD_IS_PX;
|
flags |= AMD_IS_PX;
|
||||||
|
|
||||||
/* amdgpu_device_init should report only fatal error
|
/* amdgpu_device_init should report only fatal error
|
||||||
|
|
Loading…
Reference in New Issue