[PATCH 17/17] drm/amdgpu: move vram usage by vbios to mman (v2)

Christian König ckoenig.leichtzumerken at gmail.com
Fri Jul 31 06:45:07 UTC 2020


Am 30.07.20 um 22:04 schrieb Alex Deucher:
> It's related to the memory manager so move it there.
>
> v2: inline the structure
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

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

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu.h           | 12 -----------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c  |  4 ++--
>   .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c  |  4 ++--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c       | 20 +++++++++----------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h       |  6 ++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c      |  6 +++---
>   6 files changed, 23 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 44fd0ef7394f..81f6412eb54f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -649,16 +649,6 @@ struct amdgpu_atcs {
>   	struct amdgpu_atcs_functions functions;
>   };
>   
> -/*
> - * Firmware VRAM reservation
> - */
> -struct amdgpu_fw_vram_usage {
> -	u64 start_offset;
> -	u64 size;
> -	struct amdgpu_bo *reserved_bo;
> -	void *va;
> -};
> -
>   /*
>    * CGS
>    */
> @@ -942,8 +932,6 @@ struct amdgpu_device {
>   	struct delayed_work     delayed_init_work;
>   
>   	struct amdgpu_virt	virt;
> -	/* firmware VRAM reservation */
> -	struct amdgpu_fw_vram_usage fw_vram_usage;
>   
>   	/* link all shadow bo */
>   	struct list_head                shadow_list;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> index 29f767e026e4..e33f63712b46 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> @@ -1786,9 +1786,9 @@ static int amdgpu_atombios_allocate_fb_scratch(struct amdgpu_device *adev)
>   			(uint32_t)(ATOM_VRAM_BLOCK_SRIOV_MSG_SHARE_RESERVATION <<
>   			ATOM_VRAM_OPERATION_FLAGS_SHIFT)) {
>   			/* Firmware request VRAM reservation for SR-IOV */
> -			adev->fw_vram_usage.start_offset = (start_addr &
> +			adev->mman.fw_vram_usage_start_offset = (start_addr &
>   				(~ATOM_VRAM_OPERATION_FLAGS_MASK)) << 10;
> -			adev->fw_vram_usage.size = size << 10;
> +			adev->mman.fw_vram_usage_size = size << 10;
>   			/* Use the default scratch size */
>   			usage_bytes = 0;
>   		} else {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> index 1279053324f9..17c010d0431f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> @@ -89,9 +89,9 @@ int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev)
>   			(uint32_t)(ATOM_VRAM_BLOCK_SRIOV_MSG_SHARE_RESERVATION <<
>   			ATOM_VRAM_OPERATION_FLAGS_SHIFT)) {
>   			/* Firmware request VRAM reservation for SR-IOV */
> -			adev->fw_vram_usage.start_offset = (start_addr &
> +			adev->mman.fw_vram_usage_start_offset = (start_addr &
>   				(~ATOM_VRAM_OPERATION_FLAGS_MASK)) << 10;
> -			adev->fw_vram_usage.size = size << 10;
> +			adev->mman.fw_vram_usage_size = size << 10;
>   			/* Use the default scratch size */
>   			usage_bytes = 0;
>   		} else {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index ea9b5b39f640..c7421aa32946 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1766,8 +1766,8 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
>    */
>   static void amdgpu_ttm_fw_reserve_vram_fini(struct amdgpu_device *adev)
>   {
> -	amdgpu_bo_free_kernel(&adev->fw_vram_usage.reserved_bo,
> -		NULL, &adev->fw_vram_usage.va);
> +	amdgpu_bo_free_kernel(&adev->mman.fw_vram_usage_reserved_bo,
> +		NULL, &adev->mman.fw_vram_usage_va);
>   }
>   
>   /**
> @@ -1781,19 +1781,19 @@ static int amdgpu_ttm_fw_reserve_vram_init(struct amdgpu_device *adev)
>   {
>   	uint64_t vram_size = adev->gmc.visible_vram_size;
>   
> -	adev->fw_vram_usage.va = NULL;
> -	adev->fw_vram_usage.reserved_bo = NULL;
> +	adev->mman.fw_vram_usage_va = NULL;
> +	adev->mman.fw_vram_usage_reserved_bo = NULL;
>   
> -	if (adev->fw_vram_usage.size == 0 ||
> -	    adev->fw_vram_usage.size > vram_size)
> +	if (adev->mman.fw_vram_usage_size == 0 ||
> +	    adev->mman.fw_vram_usage_size > vram_size)
>   		return 0;
>   
>   	return amdgpu_bo_create_kernel_at(adev,
> -					  adev->fw_vram_usage.start_offset,
> -					  adev->fw_vram_usage.size,
> +					  adev->mman.fw_vram_usage_start_offset,
> +					  adev->mman.fw_vram_usage_size,
>   					  AMDGPU_GEM_DOMAIN_VRAM,
> -					  &adev->fw_vram_usage.reserved_bo,
> -					  &adev->fw_vram_usage.va);
> +					  &adev->mman.fw_vram_usage_reserved_bo,
> +					  &adev->mman.fw_vram_usage_va);
>   }
>   
>   /*
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> index 6d7b83d967ce..de37ceff0e56 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> @@ -70,6 +70,12 @@ struct amdgpu_mman {
>   	uint8_t				*discovery_bin;
>   	uint32_t			discovery_tmr_size;
>   	struct amdgpu_bo		*discovery_memory;
> +
> +	/* firmware VRAM reservation */
> +	u64		fw_vram_usage_start_offset;
> +	u64		fw_vram_usage_size;
> +	struct amdgpu_bo	*fw_vram_usage_reserved_bo;
> +	void		*fw_vram_usage_va;
>   };
>   
>   struct amdgpu_copy_mem {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> index 5cae39d35c04..1e211544f2dc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> @@ -401,7 +401,7 @@ static void amdgpu_virt_add_bad_page(struct amdgpu_device *adev,
>   	if (bp_block_size) {
>   		bp_cnt = bp_block_size / sizeof(uint64_t);
>   		for (bp_idx = 0; bp_idx < bp_cnt; bp_idx++) {
> -			retired_page = *(uint64_t *)(adev->fw_vram_usage.va +
> +			retired_page = *(uint64_t *)(adev->mman.fw_vram_usage_va +
>   					bp_block_offset + bp_idx * sizeof(uint64_t));
>   			bp.retired_page = retired_page;
>   
> @@ -428,10 +428,10 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)
>   	adev->virt.fw_reserve.p_pf2vf = NULL;
>   	adev->virt.fw_reserve.p_vf2pf = NULL;
>   
> -	if (adev->fw_vram_usage.va != NULL) {
> +	if (adev->mman.fw_vram_usage_va != NULL) {
>   		adev->virt.fw_reserve.p_pf2vf =
>   			(struct amd_sriov_msg_pf2vf_info_header *)(
> -			adev->fw_vram_usage.va + AMDGIM_DATAEXCHANGE_OFFSET);
> +			adev->mman.fw_vram_usage_va + AMDGIM_DATAEXCHANGE_OFFSET);
>   		AMDGPU_FW_VRAM_PF2VF_READ(adev, header.size, &pf2vf_size);
>   		AMDGPU_FW_VRAM_PF2VF_READ(adev, checksum, &checksum);
>   		AMDGPU_FW_VRAM_PF2VF_READ(adev, feature_flags, &adev->virt.gim_feature);



More information about the amd-gfx mailing list