[PATCH 1/2] drm/amdgpu: Add support for filling a buffer with 64 bit value

Christian König deathsimple at vodafone.de
Thu Jul 27 09:34:58 UTC 2017


Am 26.07.2017 um 22:45 schrieb Yong Zhao:
> That function will be used later to support setting a page table
> block with 64 bit value.
>
> Change-Id: Ib142ebd4163d6e23670a3f0ceed536d59133b942
> Signed-off-by: Yong Zhao <Yong.Zhao at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 19 +++++++++++++------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h |  2 +-
>   2 files changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 4d2a454..6ab30da 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1509,11 +1509,12 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset,
>   }
>   
>   int amdgpu_fill_buffer(struct amdgpu_bo *bo,
> -		       uint32_t src_data,
> -		       struct reservation_object *resv,
> -		       struct dma_fence **fence)
> +			uint64_t src_data,
> +			struct reservation_object *resv,
> +			struct dma_fence **fence)

Looks like you accidentally changed the indentation of the other 
function parameters here. What editor do you use?

Please make sure that you only change the type, with that fixed the 
patch is Reviewed-by: Christian König <christian.koenig at amd.com>.

Regards,
Christian.

>   {
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> +	/* max_bytes applies to SDMA_OP_PTEPDE as well as SDMA_OP_CONST_FILL*/
>   	uint32_t max_bytes = adev->mman.buffer_funcs->fill_max_bytes;
>   	struct amdgpu_ring *ring = adev->mman.buffer_funcs_ring;
>   
> @@ -1545,7 +1546,9 @@ int amdgpu_fill_buffer(struct amdgpu_bo *bo,
>   		num_pages -= mm_node->size;
>   		++mm_node;
>   	}
> -	num_dw = num_loops * adev->mman.buffer_funcs->fill_num_dw;
> +
> +	/* 10 double words for each SDMA_OP_PTEPDE cmd */
> +	num_dw = num_loops * 10;
>   
>   	/* for IB padding */
>   	num_dw += 64;
> @@ -1570,12 +1573,16 @@ int amdgpu_fill_buffer(struct amdgpu_bo *bo,
>   		uint32_t byte_count = mm_node->size << PAGE_SHIFT;
>   		uint64_t dst_addr;
>   
> +		WARN_ONCE(byte_count & 0x7, "size should be a multiple of 8");
> +
>   		dst_addr = amdgpu_mm_node_addr(&bo->tbo, mm_node, &bo->tbo.mem);
>   		while (byte_count) {
>   			uint32_t cur_size_in_bytes = min(byte_count, max_bytes);
>   
> -			amdgpu_emit_fill_buffer(adev, &job->ibs[0], src_data,
> -						dst_addr, cur_size_in_bytes);
> +			amdgpu_vm_set_pte_pde(adev, &job->ibs[0],
> +					dst_addr, 0,
> +					cur_size_in_bytes >> 3, 0,
> +					src_data);
>   
>   			dst_addr += cur_size_in_bytes;
>   			byte_count -= cur_size_in_bytes;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> index f137c24..0e2399f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> @@ -73,7 +73,7 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset,
>   		       struct dma_fence **fence, bool direct_submit,
>   		       bool vm_needs_flush);
>   int amdgpu_fill_buffer(struct amdgpu_bo *bo,
> -			uint32_t src_data,
> +			uint64_t src_data,
>   			struct reservation_object *resv,
>   			struct dma_fence **fence);
>   




More information about the amd-gfx mailing list