[PATCH] drm/amdgpu: fix AGP addressing when GART is not at 0

Christian König christian.koenig at amd.com
Fri Nov 10 15:03:37 UTC 2023


Am 10.11.23 um 16:02 schrieb Alex Deucher:
> This worked by luck if the GART aperture ended up at 0.  When
> we ended up moving GART on some chips, the GART aperture ended
> up offsetting the the AGP address since the resource->start is
> a GART offset, not an MC address.  Fix this by moving the AGP
> address setup into amdgpu_bo_gpu_offset_no_check().
>
> v2: check mem_type before checking agp
>
> Fixes: 67318cb84341 ("drm/amdgpu/gmc11: set gart placement GC11")
> Reported-by: Jesse Zhang <Jesse.Zhang at amd.com>
> Reported-by: Yifan Zhang <yifan1.zhang at amd.com>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> Cc: christian.koenig at amd.com

Reviewed-by: Christian König <christian.koenig at amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 10 +++++++---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    |  4 +---
>   2 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index cef920a93924..d79b4ca1ecfc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -1527,10 +1527,14 @@ u64 amdgpu_bo_gpu_offset(struct amdgpu_bo *bo)
>   u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo)
>   {
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> -	uint64_t offset;
> +	uint64_t offset = AMDGPU_BO_INVALID_OFFSET;
>   
> -	offset = (bo->tbo.resource->start << PAGE_SHIFT) +
> -		 amdgpu_ttm_domain_start(adev, bo->tbo.resource->mem_type);
> +	if (bo->tbo.resource->mem_type == TTM_PL_TT)
> +		offset = amdgpu_gmc_agp_addr(&bo->tbo);
> +
> +	if (offset == AMDGPU_BO_INVALID_OFFSET)
> +		offset = (bo->tbo.resource->start << PAGE_SHIFT) +
> +			amdgpu_ttm_domain_start(adev, bo->tbo.resource->mem_type);
>   
>   	return amdgpu_gmc_sign_extend(offset);
>   }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 05991c5c8ddb..ab4a762aed5b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -959,10 +959,8 @@ int amdgpu_ttm_alloc_gart(struct ttm_buffer_object *bo)
>   		return 0;
>   
>   	addr = amdgpu_gmc_agp_addr(bo);
> -	if (addr != AMDGPU_BO_INVALID_OFFSET) {
> -		bo->resource->start = addr >> PAGE_SHIFT;
> +	if (addr != AMDGPU_BO_INVALID_OFFSET)
>   		return 0;
> -	}
>   
>   	/* allocate GART space */
>   	placement.num_placement = 1;



More information about the amd-gfx mailing list