aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2017-11-14 03:52:14 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-12-06 12:47:51 -0500
commit84e5b5161e7159bcf24dfeed9f985bd86e354ea8 (patch)
tree39b58d34375f10352b20ea60463eea2bdb084e08 /drivers/gpu/drm/amd/amdgpu
parent9921167d9086d666217fd98be5a28bb43c193a34 (diff)
drm/amdgpu:free CSA in unified place
instead of doing it in each GFX ip's sw_fini Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c1
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 29c81c387420..fdce06b5b2b8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1893,6 +1893,7 @@ static int amdgpu_fini(struct amdgpu_device *adev)
1893 if (!adev->ip_blocks[i].status.hw) 1893 if (!adev->ip_blocks[i].status.hw)
1894 continue; 1894 continue;
1895 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { 1895 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
1896 amdgpu_free_static_csa(adev);
1896 amdgpu_wb_fini(adev); 1897 amdgpu_wb_fini(adev);
1897 amdgpu_vram_scratch_fini(adev); 1898 amdgpu_vram_scratch_fini(adev);
1898 } 1899 }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index 0769cb935318..e7dfb7b44b4b 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)
47 return 0; 47 return 0;
48} 48}
49 49
50void amdgpu_free_static_csa(struct amdgpu_device *adev) {
51 amdgpu_bo_free_kernel(&adev->virt.csa_obj,
52 &adev->virt.csa_vmid0_addr,
53 NULL);
54}
55
50/* 56/*
51 * amdgpu_map_static_csa should be called during amdgpu_vm_init 57 * amdgpu_map_static_csa should be called during amdgpu_vm_init
52 * it maps virtual address "AMDGPU_VA_RESERVED_SIZE - AMDGPU_CSA_SIZE" 58 * 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 f77d116c7a1c..6a83425aa9ed 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);
283int amdgpu_allocate_static_csa(struct amdgpu_device *adev); 283int amdgpu_allocate_static_csa(struct amdgpu_device *adev);
284int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm, 284int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm,
285 struct amdgpu_bo_va **bo_va); 285 struct amdgpu_bo_va **bo_va);
286void amdgpu_free_static_csa(struct amdgpu_device *adev);
286void amdgpu_virt_init_setting(struct amdgpu_device *adev); 287void amdgpu_virt_init_setting(struct amdgpu_device *adev);
287uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg); 288uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg);
288void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v); 289void 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 ee77c949bf87..d02493cf9175 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)
2114 amdgpu_gfx_compute_mqd_sw_fini(adev); 2114 amdgpu_gfx_compute_mqd_sw_fini(adev);
2115 amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq); 2115 amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq);
2116 amdgpu_gfx_kiq_fini(adev); 2116 amdgpu_gfx_kiq_fini(adev);
2117 amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL);
2118 2117
2119 gfx_v8_0_mec_fini(adev); 2118 gfx_v8_0_mec_fini(adev);
2120 gfx_v8_0_rlc_fini(adev); 2119 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 5ba24792f801..560d8e76d14c 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -1464,7 +1464,6 @@ static int gfx_v9_0_sw_fini(void *handle)
1464 amdgpu_gfx_compute_mqd_sw_fini(adev); 1464 amdgpu_gfx_compute_mqd_sw_fini(adev);
1465 amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq); 1465 amdgpu_gfx_kiq_free_ring(&adev->gfx.kiq.ring, &adev->gfx.kiq.irq);
1466 amdgpu_gfx_kiq_fini(adev); 1466 amdgpu_gfx_kiq_fini(adev);
1467 amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL);
1468 1467
1469 gfx_v9_0_mec_fini(adev); 1468 gfx_v9_0_mec_fini(adev);
1470 gfx_v9_0_ngg_fini(adev); 1469 gfx_v9_0_ngg_fini(adev);