Commit 3840c5bc authored by Alex Deucher's avatar Alex Deucher
Browse files

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: default avatarEvan Quan <evan.quan@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6ae6c7d4
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -2743,7 +2743,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
		       uint32_t flags)
{
	int r, i;
	bool runtime = false;
	bool boco = false;
	u32 max_MBps;

	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);

	if (amdgpu_device_supports_boco(ddev))
		runtime = true;
	if (!pci_is_thunderbolt_attached(adev->pdev))
		boco = true;
	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,
					       &amdgpu_switcheroo_ops, runtime);
	if (runtime)
					       &amdgpu_switcheroo_ops, boco);
	if (boco)
		vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);

	if (amdgpu_emu_mode == 1) {
@@ -3102,7 +3105,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,

failed:
	amdgpu_vf_error_trans_all(adev);
	if (runtime)
	if (boco)
		vga_switcheroo_fini_domain_pm_ops(adev->dev);

	return r;
@@ -3150,9 +3153,12 @@ void amdgpu_device_fini(struct amdgpu_device *adev)

	kfree(adev->bios);
	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);
	if (adev->flags & AMD_IS_PX)
	if (amdgpu_device_supports_boco(adev->ddev))
		vga_switcheroo_fini_domain_pm_ops(adev->dev);
	vga_client_register(adev->pdev, NULL, NULL, NULL);
	if (adev->rio_mem)