diff options
| author | Emily.Deng <Emily.Deng@amd.com> | 2020-10-01 12:41:50 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2021-07-13 11:58:48 -0400 | 
| commit | 9be26ddf88de5621f071a1e4f7725ce1015b5036 (patch) | |
| tree | c638a8c4ea10c231a4bae29aa5a1619d39b6829f /drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | |
| parent | 99e7d65cccc8f54581eb961a50da676b79c966d0 (diff) | |
drm/amdgpu: Restore msix after FLR
After FLR, the msix will be cleared, so need to re-enable it.
Signed-off-by: Peng Ju Zhou <PengJu.Zhou@amd.com>
Signed-off-by: Emily.Deng <Emily.Deng@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c index 32ce0e679dc7..83af307e97cd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c @@ -278,6 +278,21 @@ static bool amdgpu_msi_ok(struct amdgpu_device *adev)  	return true;  } +static 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; + +	/* VF FLR */ +	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); +} +  /**   * amdgpu_irq_init - initialize interrupt handling   * @@ -569,6 +584,9 @@ void amdgpu_irq_gpu_reset_resume_helper(struct amdgpu_device *adev)  {  	int i, j, k; +	if (amdgpu_sriov_vf(adev)) +		amdgpu_restore_msix(adev); +  	for (i = 0; i < AMDGPU_IRQ_CLIENTID_MAX; ++i) {  		if (!adev->irq.client[i].sources)  			continue;  | 
