Commit 243c719e authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu: handle BACO synchronization with secondary funcs



Extend secondary function handling for runtime pm beyond audio
to USB and UCSI.

Reviewed-by: default avatarEvan Quan <evan.quan@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d0d66b8c
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -1946,21 +1946,27 @@ MODULE_DEVICE_TABLE(pci, pciidlist);

static const struct drm_driver amdgpu_kms_driver;

static void amdgpu_get_audio_func(struct amdgpu_device *adev)
static void amdgpu_get_secondary_funcs(struct amdgpu_device *adev)
{
	struct pci_dev *p = NULL;
	int i;

	/* 0 - GPU
	 * 1 - audio
	 * 2 - USB
	 * 3 - UCSI
	 */
	for (i = 1; i < 4; i++) {
		p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
			adev->pdev->bus->number, 1);
						adev->pdev->bus->number, i);
		if (p) {
			pm_runtime_get_sync(&p->dev);

			pm_runtime_mark_last_busy(&p->dev);
			pm_runtime_put_autosuspend(&p->dev);

			pci_dev_put(p);
		}
	}
}

static int amdgpu_pci_probe(struct pci_dev *pdev,
			    const struct pci_device_id *ent)
@@ -2119,14 +2125,14 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
		 * be no PMFW-aware D-state transition(D0->D3) on runpm
		 * suspend. Thus the BACO will be not correctly kicked in.
		 *
		 * Via amdgpu_get_audio_func(), the audio dev is put
		 * Via amdgpu_get_secondary_funcs(), the audio dev is put
		 * into D0 state. Then there will be a PMFW-aware D-state
		 * transition(D0->D3) on runpm suspend.
		 */
		if (amdgpu_device_supports_baco(ddev) &&
		    !(adev->flags & AMD_IS_APU) &&
		    (adev->asic_type >= CHIP_NAVI10))
			amdgpu_get_audio_func(adev);
			amdgpu_get_secondary_funcs(adev);
	}

	return 0;