Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: move nbio ih_doorbell_range() into ih code for vega

This mirrors what we do for other asics and this way we are
sure the ih doorbell range is properly initialized.

There is a comment about the way doorbells on gfx9 work that
requires that they are initialized for other IPs before GFX
is initialized. In this case IH is initialized before GFX,
so there should be no issue.

This is a prerequisite for fixing the Unsupported Request error
reported through AER during driver load.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=216373

The error was unnoticed before and got visible because of the commit
referenced below. This doesn't fix anything in the commit below, rather
fixes the issue in amdgpu exposed by the commit. The reference is only
to associate this commit with below one so that both go together.

Fixes: 8795e182b02d ("PCI/portdrv: Don't disable AER reporting in get_port_device_capability()")

Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org

+8 -3
-3
drivers/gpu/drm/amd/amdgpu/soc15.c
··· 1224 1224 ring->use_doorbell, ring->doorbell_index, 1225 1225 adev->doorbell_index.sdma_doorbell_range); 1226 1226 } 1227 - 1228 - adev->nbio.funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell, 1229 - adev->irq.ih.doorbell_index); 1230 1227 } 1231 1228 } 1232 1229
+4
drivers/gpu/drm/amd/amdgpu/vega10_ih.c
··· 289 289 } 290 290 } 291 291 292 + if (!amdgpu_sriov_vf(adev)) 293 + adev->nbio.funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell, 294 + adev->irq.ih.doorbell_index); 295 + 292 296 pci_set_master(adev->pdev); 293 297 294 298 /* enable interrupts */
+4
drivers/gpu/drm/amd/amdgpu/vega20_ih.c
··· 340 340 } 341 341 } 342 342 343 + if (!amdgpu_sriov_vf(adev)) 344 + adev->nbio.funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell, 345 + adev->irq.ih.doorbell_index); 346 + 343 347 pci_set_master(adev->pdev); 344 348 345 349 /* enable interrupts */