[PATCH v4] drm/amdgpu: Restore msix after FLR
Zhou, Peng Ju
PengJu.Zhou at amd.com
Wed Jul 7 05:18:44 UTC 2021
[AMD Official Use Only]
Adding VF check and static for function, patch sent out as v5.
----------------------------------------------------------------------
BW
Pengju Zhou
> -----Original Message-----
> From: Lazar, Lijo <Lijo.Lazar at amd.com>
> Sent: Monday, July 5, 2021 1:52 PM
> To: Zhou, Peng Ju <PengJu.Zhou at amd.com>; amd-gfx at lists.freedesktop.org
> Cc: Deng, Emily <Emily.Deng at amd.com>
> Subject: Re: [PATCH v4] drm/amdgpu: Restore msix after FLR
>
>
>
> On 7/2/2021 8:53 AM, Peng Ju Zhou wrote:
> > From: "Emily.Deng" <Emily.Deng at amd.com>
> >
> > After FLR, the msix will be cleared, so need to re-enable it.
> >
> > Signed-off-by: Emily.Deng <Emily.Deng at amd.com>
> > Signed-off-by: Peng Ju Zhou <PengJu.Zhou at amd.com>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 14 ++++++++++++++
> > 1 file changed, 14 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> > index 90f50561b43a..034420c38352 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> > @@ -277,6 +277,19 @@ static bool amdgpu_msi_ok(struct amdgpu_device
> *adev)
> > return true;
> > }
> >
> > +void amdgpu_restore_msix(struct amdgpu_device *adev) {
> > + u16 ctrl;
> > +
> > + pci_read_config_word(adev->pdev, adev->pdev->msix_cap +
> PCI_MSIX_FLAGS, &ctrl);
> > + if (!(ctrl & PCI_MSIX_FLAGS_ENABLE))
> > + return;
> > +
> > + ctrl &= ~PCI_MSIX_FLAGS_ENABLE;
> > + pci_write_config_word(adev->pdev, adev->pdev->msix_cap +
> PCI_MSIX_FLAGS, ctrl);
> > + ctrl |= PCI_MSIX_FLAGS_ENABLE;
> > + pci_write_config_word(adev->pdev, adev->pdev->msix_cap +
> > +PCI_MSIX_FLAGS, ctrl);
> This field behavior is determined by PCIE spec and toggling is not required to
> enable MSIX. Also, FLR will clear this field on PF, so the ENABLE flag check to
> see if MSIX is already enabled doesn't make sense for PF case.
>
> From the code logic, a rough guess is this code is trying to reset the VF's config
> space field in PF after VF FLR and enable MSI-X back. If that is the case, make
> an explicit check so that this is only done on VF devices.
>
> Thanks,
> Lijo
>
> > +}
> > /**
> > * amdgpu_irq_init - initialize interrupt handling
> > *
> > @@ -558,6 +571,7 @@ void amdgpu_irq_gpu_reset_resume_helper(struct
> amdgpu_device *adev)
> > {
> > int i, j, k;
> >
> > + amdgpu_restore_msix(adev);
> > for (i = 0; i < AMDGPU_IRQ_CLIENTID_MAX; ++i) {
> > if (!adev->irq.client[i].sources)
> > continue;
> >
More information about the amd-gfx
mailing list