[AMD Official Use Only] > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Alex > Deucher > Sent: Saturday, January 22, 2022 4:22 AM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx> > Subject: [PATCH 4/5] drm/amdgpu: handle BACO synchronization with > secondary funcs > > Extend secondary function handling for runtime pm beyond audio > to USB and UCSI. > > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 30 +++++++++++++++------ > ---- > 1 file changed, 18 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > index 89c3578bc818..119a5798623e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > @@ -1968,19 +1968,25 @@ static bool > amdgpu_is_fw_framebuffer(resource_size_t base, > return found; > } > > -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; > > - p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev- > >bus), > - adev->pdev->bus->number, 1); > - 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); > + /* 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, > 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); > + } > } > } [Quan, Evan] Although PMFW does not care the status of those functions except audio. Logically this seems more reasonable and should be harmless. Patch 3 & 4 are reviewed-by: Evan Quan <evan.quan@xxxxxxx> Patch 1, 2, 5 are acked-by: Evan Quan <evan.quan@xxxxxxx> > > @@ -2148,14 +2154,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; > -- > 2.34.1