[PATCH 1/2] drm/amdgpu: make sure to init common IP before gmc
Lazar, Lijo
lijo.lazar at amd.com
Thu Sep 8 05:11:33 UTC 2022
On 9/8/2022 9:38 AM, Alex Deucher wrote:
> Common is mainly golden register setting and HDP register
> remapping, it shouldn't allocate any GPU memory. Make sure
> common happens before gmc so that the HDP registers are
> remapped before gmc attempts to access them.
>
> This fixes the Unsupported Request error reported through
> AER during driver load. The error happens as a write happens
> to the remap offset before real remapping is done.
>
> 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()")
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
Series is:
Reviewed-by: Lijo Lazar <lijo.lazar at amd.com>
Thanks,
Lijo
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 899564ea8b4b..4da85ce9e3b1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -2375,8 +2375,16 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
> }
> adev->ip_blocks[i].status.sw = true;
>
> - /* need to do gmc hw init early so we can allocate gpu mem */
> - if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
> + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON) {
> + /* need to do common hw init early so everything is set up for gmc */
> + r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev);
> + if (r) {
> + DRM_ERROR("hw_init %d failed %d\n", i, r);
> + goto init_failed;
> + }
> + adev->ip_blocks[i].status.hw = true;
> + } else if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
> + /* need to do gmc hw init early so we can allocate gpu mem */
> /* Try to reserve bad pages early */
> if (amdgpu_sriov_vf(adev))
> amdgpu_virt_exchange_data(adev);
> @@ -3062,8 +3070,8 @@ static int amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device *adev)
> int i, r;
>
> static enum amd_ip_block_type ip_order[] = {
> - AMD_IP_BLOCK_TYPE_GMC,
> AMD_IP_BLOCK_TYPE_COMMON,
> + AMD_IP_BLOCK_TYPE_GMC,
> AMD_IP_BLOCK_TYPE_PSP,
> AMD_IP_BLOCK_TYPE_IH,
> };
>
More information about the amd-gfx
mailing list