[PATCH 07/10] drm/amdgpu:free CSA in unified place

Liu, Monk Monk.Liu at amd.com
Tue Nov 14 15:02:05 UTC 2017


Yeah CSA is allocated right after in GMC hw init (and after WB_INIT)
So we can put the free of it right before WB_INIT, thus avoiding doing it in each GFX IP's sw_init



-----Original Message-----
From: Christian König [mailto:ckoenig.leichtzumerken at gmail.com] 
Sent: 2017年11月14日 19:55
To: Liu, Monk <Monk.Liu at amd.com>; amd-gfx at lists.freedesktop.org
Subject: Re: [PATCH 07/10] drm/amdgpu:free CSA in unified place

Am 14.11.2017 um 10:07 schrieb Monk Liu:
> instead of doing it in each GFX ip's sw_fini

Mhm, is that allocated in the same way as well?

>
> Change-Id: Idf0fd500d4fc385cf7a930cc56305070c937bf20
> Signed-off-by: Monk Liu <Monk.Liu at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c   | 6 ++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h   | 1 +
>   drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c      | 1 -
>   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c      | 1 -
>   5 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index c13b493..ccb33ef 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1865,6 +1865,7 @@ static int amdgpu_fini(struct amdgpu_device *adev)
>   		if (!adev->ip_blocks[i].status.hw)
>   			continue;
>   		if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
> +			amdgpu_free_static_csa(adev);
>   			amdgpu_wb_fini(adev);
>   			amdgpu_vram_scratch_fini(adev);
>   		}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> index 67fd110..118c84c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> @@ -47,6 +47,12 @@ int amdgpu_allocate_static_csa(struct amdgpu_device *adev)
>   	return 0;
>   }
>   
> +void amdgpu_free_static_csa(struct amdgpu_device *adev) {
> +	amdgpu_bo_free_kernel(&adev->virt.csa_obj,
> +						&adev->virt.csa_vmid0_addr,
> +						NULL);

The coding style here looks odd.

Christian.

> +}
> +
>   /*
>    * amdgpu_map_static_csa should be called during amdgpu_vm_init
>    * it maps virtual address "AMDGPU_VA_RESERVED_SIZE - AMDGPU_CSA_SIZE"
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
> index f77d116..6a83425 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
> @@ -283,6 +283,7 @@ bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev);
>   int amdgpu_allocate_static_csa(struct amdgpu_device *adev);
>   int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm,
>   			  struct amdgpu_bo_va **bo_va);
> +void amdgpu_free_static_csa(struct amdgpu_device *adev);
>   void amdgpu_virt_init_setting(struct amdgpu_device *adev);
>   uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg);
>   void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, 
> uint32_t v); diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c 
> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 9f5d123..82d157e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -2114,7 +2114,6 @@ static int gfx_v8_0_sw_fini(void *handle)
>   	amdgpu_gfx_compute_mqd_sw_fini(adev);
>   	amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq);
>   	amdgpu_gfx_kiq_fini(adev);
> -	amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL);
>   
>   	gfx_v8_0_mec_fini(adev);
>   	gfx_v8_0_rlc_fini(adev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c 
> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 5a4c074..034bcbe 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -1455,7 +1455,6 @@ static int gfx_v9_0_sw_fini(void *handle)
>   	amdgpu_gfx_compute_mqd_sw_fini(adev);
>   	amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq);
>   	amdgpu_gfx_kiq_fini(adev);
> -	amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL);
>   
>   	gfx_v9_0_mec_fini(adev);
>   	gfx_v9_0_ngg_fini(adev);




More information about the amd-gfx mailing list