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@xxxxxxxxx] 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);