From: Harish Kasiviswanathan <[email protected]>

Implement new kgd-kfd interface function get_local_mem_info.

Signed-off-by: Harish Kasiviswanathan <[email protected]>
Signed-off-by: Ben Goz <[email protected]>
Signed-off-by: Felix Kuehling <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c        | 30 +++++++++++++++++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h        |  2 ++
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c |  1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c |  1 +
 4 files changed, 34 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index cfb7827..56f6c12 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -252,6 +252,36 @@ uint64_t get_vmem_size(struct kgd_dev *kgd)
        return adev->mc.real_vram_size;
 }
 
+void get_local_mem_info(struct kgd_dev *kgd,
+                       struct kfd_local_mem_info *mem_info)
+{
+       struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
+       uint64_t address_mask = adev->dev->dma_mask ? ~*adev->dev->dma_mask :
+                                            ~((1ULL << 32) - 1);
+       resource_size_t aper_limit = adev->mc.aper_base + adev->mc.aper_size;
+
+       memset(mem_info, 0, sizeof(*mem_info));
+       if (!(adev->mc.aper_base & address_mask || aper_limit & address_mask)) {
+               mem_info->local_mem_size_public = adev->mc.visible_vram_size;
+               mem_info->local_mem_size_private = adev->mc.real_vram_size -
+                               adev->mc.visible_vram_size;
+       } else {
+               mem_info->local_mem_size_public = 0;
+               mem_info->local_mem_size_private = adev->mc.real_vram_size;
+       }
+       mem_info->vram_width = adev->mc.vram_width;
+
+       pr_debug("Address base: 0x%llx limit 0x%llx public 0x%llx private 
0x%llx\n",
+                       adev->mc.aper_base, aper_limit,
+                       mem_info->local_mem_size_public,
+                       mem_info->local_mem_size_private);
+
+       if (amdgpu_sriov_vf(adev))
+               mem_info->mem_clk_max = adev->clock.default_mclk / 100;
+       else
+               mem_info->mem_clk_max = amdgpu_dpm_get_mclk(adev, false) / 100;
+}
+
 uint64_t get_gpu_clock_counter(struct kgd_dev *kgd)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index a8fa225..bc5385a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -57,6 +57,8 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
                        void **cpu_ptr);
 void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj);
 uint64_t get_vmem_size(struct kgd_dev *kgd);
+void get_local_mem_info(struct kgd_dev *kgd,
+                       struct kfd_local_mem_info *mem_info);
 uint64_t get_gpu_clock_counter(struct kgd_dev *kgd);
 
 uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
index c9b98d0..b705608 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
@@ -174,6 +174,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
        .init_gtt_mem_allocation = alloc_gtt_mem,
        .free_gtt_mem = free_gtt_mem,
        .get_vmem_size = get_vmem_size,
+       .get_local_mem_info = get_local_mem_info,
        .get_gpu_clock_counter = get_gpu_clock_counter,
        .get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
        .alloc_pasid = amdgpu_vm_alloc_pasid,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
index c538e30..b0e581a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
@@ -133,6 +133,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
        .init_gtt_mem_allocation = alloc_gtt_mem,
        .free_gtt_mem = free_gtt_mem,
        .get_vmem_size = get_vmem_size,
+       .get_local_mem_info = get_local_mem_info,
        .get_gpu_clock_counter = get_gpu_clock_counter,
        .get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
        .alloc_pasid = amdgpu_vm_alloc_pasid,
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to