mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-26 14:17:26 -04:00
drm/amdgpu: disentangle runtime pm and vga_switcheroo
Originally we only supported runtime pm on PX/HG laptops so vga_switcheroo and runtime pm are sort of entangled. Attempt to logically separate them. Reviewed-by: Evan Quan <evan.quan@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
6ae6c7d404
commit
3840c5bcc2
1 changed files with 14 additions and 8 deletions
|
@ -2743,7 +2743,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
|
||||||
uint32_t flags)
|
uint32_t flags)
|
||||||
{
|
{
|
||||||
int r, i;
|
int r, i;
|
||||||
bool runtime = false;
|
bool boco = false;
|
||||||
u32 max_MBps;
|
u32 max_MBps;
|
||||||
|
|
||||||
adev->shutdown = false;
|
adev->shutdown = false;
|
||||||
|
@ -2914,11 +2914,14 @@ int amdgpu_device_init(struct amdgpu_device *adev,
|
||||||
vga_client_register(adev->pdev, adev, NULL, amdgpu_device_vga_set_decode);
|
vga_client_register(adev->pdev, adev, NULL, amdgpu_device_vga_set_decode);
|
||||||
|
|
||||||
if (amdgpu_device_supports_boco(ddev))
|
if (amdgpu_device_supports_boco(ddev))
|
||||||
runtime = true;
|
boco = true;
|
||||||
if (!pci_is_thunderbolt_attached(adev->pdev))
|
if (amdgpu_has_atpx() &&
|
||||||
|
(amdgpu_is_atpx_hybrid() ||
|
||||||
|
amdgpu_has_atpx_dgpu_power_cntl()) &&
|
||||||
|
!pci_is_thunderbolt_attached(adev->pdev))
|
||||||
vga_switcheroo_register_client(adev->pdev,
|
vga_switcheroo_register_client(adev->pdev,
|
||||||
&amdgpu_switcheroo_ops, runtime);
|
&amdgpu_switcheroo_ops, boco);
|
||||||
if (runtime)
|
if (boco)
|
||||||
vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
|
vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
|
||||||
|
|
||||||
if (amdgpu_emu_mode == 1) {
|
if (amdgpu_emu_mode == 1) {
|
||||||
|
@ -3102,7 +3105,7 @@ fence_driver_init:
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
amdgpu_vf_error_trans_all(adev);
|
amdgpu_vf_error_trans_all(adev);
|
||||||
if (runtime)
|
if (boco)
|
||||||
vga_switcheroo_fini_domain_pm_ops(adev->dev);
|
vga_switcheroo_fini_domain_pm_ops(adev->dev);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
|
@ -3150,9 +3153,12 @@ void amdgpu_device_fini(struct amdgpu_device *adev)
|
||||||
|
|
||||||
kfree(adev->bios);
|
kfree(adev->bios);
|
||||||
adev->bios = NULL;
|
adev->bios = NULL;
|
||||||
if (!pci_is_thunderbolt_attached(adev->pdev))
|
if (amdgpu_has_atpx() &&
|
||||||
|
(amdgpu_is_atpx_hybrid() ||
|
||||||
|
amdgpu_has_atpx_dgpu_power_cntl()) &&
|
||||||
|
!pci_is_thunderbolt_attached(adev->pdev))
|
||||||
vga_switcheroo_unregister_client(adev->pdev);
|
vga_switcheroo_unregister_client(adev->pdev);
|
||||||
if (adev->flags & AMD_IS_PX)
|
if (amdgpu_device_supports_boco(adev->ddev))
|
||||||
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);
|
||||||
if (adev->rio_mem)
|
if (adev->rio_mem)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue