aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/files/1139-unify-memory-query-info-interface.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/1139-unify-memory-query-info-interface.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/files/1139-unify-memory-query-info-interface.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/1139-unify-memory-query-info-interface.patch b/meta-amdfalconx86/recipes-kernel/linux/files/1139-unify-memory-query-info-interface.patch
new file mode 100644
index 00000000..b7c965a3
--- /dev/null
+++ b/meta-amdfalconx86/recipes-kernel/linux/files/1139-unify-memory-query-info-interface.patch
@@ -0,0 +1,113 @@
+From 314642915b4a2bda146fb9d900ca99eabeab36c0 Mon Sep 17 00:00:00 2001
+From: Sanjay R Mehta <sanju.mehta@amd.com>
+Date: Mon, 14 Nov 2016 12:13:41 +0530
+Subject: [PATCH 01/10] unify memory query info interface
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Change-Id: I74d2b7379bc4febe714a91daf4e1786895de90f2
+Signed-off-by: Junwei Zhang <Jerry.Zhang@amd.com>
+Reviewed-by: Marek Olšák <marek.olsak@amd.com>
+Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 32 +++++++++++++++++++++++
+ drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h | 32 +++++++++++++++++++++++
+ 2 files changed, 64 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+index 31c20ba..a48783e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+@@ -390,6 +390,38 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
+ return copy_to_user(out, &vram_gtt,
+ min((size_t)size, sizeof(vram_gtt))) ? -EFAULT : 0;
+ }
++
++ case AMDGPU_INFO_MEMORY: {
++ struct drm_amdgpu_memory_info mem;
++
++ memset(&mem, 0, sizeof(mem));
++ mem.vram.total_heap_size = adev->mc.real_vram_size;
++ mem.vram.usable_heap_size =
++ adev->mc.real_vram_size - adev->vram_pin_size;
++ mem.vram.heap_usage = atomic64_read(&adev->vram_usage);
++ mem.vram.max_allocation = mem.vram.usable_heap_size * 3 / 4;
++
++ mem.cpu_accessible_vram.total_heap_size =
++ adev->mc.visible_vram_size;
++ mem.cpu_accessible_vram.usable_heap_size =
++ adev->mc.visible_vram_size -
++ (adev->vram_pin_size - adev->invisible_pin_size);
++ mem.cpu_accessible_vram.heap_usage =
++ atomic64_read(&adev->vram_vis_usage);
++ mem.cpu_accessible_vram.max_allocation =
++ mem.cpu_accessible_vram.usable_heap_size * 3 / 4;
++
++ mem.gtt.total_heap_size = adev->mc.gtt_size;
++ mem.gtt.usable_heap_size =
++ adev->mc.gtt_size - adev->gart_pin_size;
++ mem.gtt.heap_usage = atomic64_read(&adev->gtt_usage);
++ mem.gtt.max_allocation = mem.gtt.usable_heap_size * 3 / 4;
++
++ return copy_to_user(out, &mem,
++ min((size_t)size, sizeof(mem)))
++ ? -EFAULT : 0;
++ }
++
+ case AMDGPU_INFO_READ_MMR_REG: {
+ unsigned n, alloc_size;
+ uint32_t *regs;
+diff --git a/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h b/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h
+index 4d7d982..3f13a87 100644
+--- a/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h
++++ b/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h
+@@ -540,6 +540,10 @@ struct drm_amdgpu_cs_chunk_data {
+ #define AMDGPU_INFO_VIS_VRAM_USAGE 0x17
+ /* virtual range */
+ #define AMDGPU_INFO_VIRTUAL_RANGE 0x18
++
++/* Query memory about VRAM and GTT domains */
++#define AMDGPU_INFO_MEMORY 0x19
++
+ /* gpu capability */
+ #define AMDGPU_INFO_CAPABILITY 0x50
+ /* query pin memory capability */
+@@ -705,6 +709,34 @@ struct drm_amdgpu_info_hw_ip {
+ __u32 _pad;
+ };
+
++struct drm_amdgpu_heap_info {
++ /** max. physical memory */
++ __u64 total_heap_size;
++
++ /** Theoretical max. available memory in the given heap */
++ __u64 usable_heap_size;
++
++ /**
++ * Number of bytes allocated in the heap. This includes all processes
++ * and private allocations in the kernel. It changes when new buffers
++ * are allocated, freed, and moved. It cannot be larger than
++ * heap_size.
++ */
++ __u64 heap_usage;
++
++ /**
++ * Theoretical possible max. size of buffer which
++ * could be allocated in the given heap
++ */
++ __u64 max_allocation;
++};
++
++struct drm_amdgpu_memory_info {
++ struct drm_amdgpu_heap_info vram;
++ struct drm_amdgpu_heap_info cpu_accessible_vram;
++ struct drm_amdgpu_heap_info gtt;
++};
++
+ /*
+ * Supported GPU families
+ */
+--
+2.7.4
+