aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1521-drm-amdgpu-Add-sysfs-files-for-returning-VRAM-GTT-in.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1521-drm-amdgpu-Add-sysfs-files-for-returning-VRAM-GTT-in.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1521-drm-amdgpu-Add-sysfs-files-for-returning-VRAM-GTT-in.patch268
1 files changed, 268 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1521-drm-amdgpu-Add-sysfs-files-for-returning-VRAM-GTT-in.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1521-drm-amdgpu-Add-sysfs-files-for-returning-VRAM-GTT-in.patch
new file mode 100644
index 00000000..2e462d57
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1521-drm-amdgpu-Add-sysfs-files-for-returning-VRAM-GTT-in.patch
@@ -0,0 +1,268 @@
+From c97de1eeb34e87866d816fc26340cfb6088615cb Mon Sep 17 00:00:00 2001
+From: Kent Russell <kent.russell@amd.com>
+Date: Thu, 28 Feb 2019 07:05:02 -0500
+Subject: [PATCH 1521/2940] drm/amdgpu: Add sysfs files for returning VRAM/GTT
+ info v2
+
+Add 6 files that return (in bytes):
+The total amount of VRAM/visible VRAM/GTT
+and the current total used VRAM/visible VRAM/GTT
+
+v2: Split used and total into separate files
+
+Change-Id: I0bd702b166b4253887ef76fb1bba8b9aadc7e2c5
+Signed-off-by: Kent Russell <kent.russell@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 59 ++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 109 +++++++++++++++++++
+ 2 files changed, 168 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+index da7b1b92d9cf..62591d081856 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+@@ -36,6 +36,47 @@ struct amdgpu_gtt_node {
+ struct ttm_buffer_object *tbo;
+ };
+
++/**
++ * DOC: mem_info_gtt_total
++ *
++ * The amdgpu driver provides a sysfs API for reporting current total size of
++ * the GTT.
++ * The file mem_info_gtt_total is used for this, and returns the total size of
++ * the GTT block, in bytes
++ */
++static ssize_t amdgpu_mem_info_gtt_total_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct drm_device *ddev = dev_get_drvdata(dev);
++ struct amdgpu_device *adev = ddev->dev_private;
++
++ return snprintf(buf, PAGE_SIZE, "%llu\n",
++ (adev->mman.bdev.man[TTM_PL_TT].size) * PAGE_SIZE);
++}
++
++/**
++ * DOC: mem_info_gtt_used
++ *
++ * The amdgpu driver provides a sysfs API for reporting current total amount of
++ * used GTT.
++ * The file mem_info_gtt_used is used for this, and returns the current used
++ * size of the GTT block, in bytes
++ */
++static ssize_t amdgpu_mem_info_gtt_used_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct drm_device *ddev = dev_get_drvdata(dev);
++ struct amdgpu_device *adev = ddev->dev_private;
++
++ return snprintf(buf, PAGE_SIZE, "%llu\n",
++ amdgpu_gtt_mgr_usage(&adev->mman.bdev.man[TTM_PL_TT]));
++}
++
++static DEVICE_ATTR(mem_info_gtt_total, S_IRUGO,
++ amdgpu_mem_info_gtt_total_show, NULL);
++static DEVICE_ATTR(mem_info_gtt_used, S_IRUGO,
++ amdgpu_mem_info_gtt_used_show, NULL);
++
+ /**
+ * amdgpu_gtt_mgr_init - init GTT manager and DRM MM
+ *
+@@ -50,6 +91,7 @@ static int amdgpu_gtt_mgr_init(struct ttm_mem_type_manager *man,
+ struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
+ struct amdgpu_gtt_mgr *mgr;
+ uint64_t start, size;
++ int ret;
+
+ mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+ if (!mgr)
+@@ -61,6 +103,18 @@ static int amdgpu_gtt_mgr_init(struct ttm_mem_type_manager *man,
+ spin_lock_init(&mgr->lock);
+ atomic64_set(&mgr->available, p_size);
+ man->priv = mgr;
++
++ ret = device_create_file(adev->dev, &dev_attr_mem_info_gtt_total);
++ if (ret) {
++ DRM_ERROR("Failed to create device file mem_info_gtt_total\n");
++ return ret;
++ }
++ ret = device_create_file(adev->dev, &dev_attr_mem_info_gtt_used);
++ if (ret) {
++ DRM_ERROR("Failed to create device file mem_info_gtt_used\n");
++ return ret;
++ }
++
+ return 0;
+ }
+
+@@ -74,12 +128,17 @@ static int amdgpu_gtt_mgr_init(struct ttm_mem_type_manager *man,
+ */
+ static int amdgpu_gtt_mgr_fini(struct ttm_mem_type_manager *man)
+ {
++ struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
+ struct amdgpu_gtt_mgr *mgr = man->priv;
+ spin_lock(&mgr->lock);
+ drm_mm_takedown(&mgr->mm);
+ spin_unlock(&mgr->lock);
+ kfree(mgr);
+ man->priv = NULL;
++
++ device_remove_file(adev->dev, &dev_attr_mem_info_gtt_total);
++ device_remove_file(adev->dev, &dev_attr_mem_info_gtt_used);
++
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+index 3f9d5d00c9b3..ec9ea3fdbb4a 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+@@ -32,6 +32,85 @@ struct amdgpu_vram_mgr {
+ atomic64_t vis_usage;
+ };
+
++/**
++ * DOC: mem_info_vram_total
++ *
++ * The amdgpu driver provides a sysfs API for reporting current total VRAM
++ * available on the device
++ * The file mem_info_vram_total is used for this and returns the total
++ * amount of VRAM in bytes
++ */
++static ssize_t amdgpu_mem_info_vram_total_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct drm_device *ddev = dev_get_drvdata(dev);
++ struct amdgpu_device *adev = ddev->dev_private;
++
++ return snprintf(buf, PAGE_SIZE, "%llu\n", adev->gmc.real_vram_size);
++}
++
++/**
++ * DOC: mem_info_vis_vram_total
++ *
++ * The amdgpu driver provides a sysfs API for reporting current total
++ * visible VRAM available on the device
++ * The file mem_info_vis_vram_total is used for this and returns the total
++ * amount of visible VRAM in bytes
++ */
++static ssize_t amdgpu_mem_info_vis_vram_total_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct drm_device *ddev = dev_get_drvdata(dev);
++ struct amdgpu_device *adev = ddev->dev_private;
++
++ return snprintf(buf, PAGE_SIZE, "%llu\n", adev->gmc.visible_vram_size);
++}
++
++/**
++ * DOC: mem_info_vram_used
++ *
++ * The amdgpu driver provides a sysfs API for reporting current total VRAM
++ * available on the device
++ * The file mem_info_vram_used is used for this and returns the total
++ * amount of currently used VRAM in bytes
++ */
++static ssize_t amdgpu_mem_info_vram_used_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct drm_device *ddev = dev_get_drvdata(dev);
++ struct amdgpu_device *adev = ddev->dev_private;
++
++ return snprintf(buf, PAGE_SIZE, "%llu\n",
++ amdgpu_vram_mgr_usage(&adev->mman.bdev.man[TTM_PL_VRAM]));
++}
++
++/**
++ * DOC: mem_info_vis_vram_used
++ *
++ * The amdgpu driver provides a sysfs API for reporting current total of
++ * used visible VRAM
++ * The file mem_info_vis_vram_used is used for this and returns the total
++ * amount of currently used visible VRAM in bytes
++ */
++static ssize_t amdgpu_mem_info_vis_vram_used_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct drm_device *ddev = dev_get_drvdata(dev);
++ struct amdgpu_device *adev = ddev->dev_private;
++
++ return snprintf(buf, PAGE_SIZE, "%llu\n",
++ amdgpu_vram_mgr_vis_usage(&adev->mman.bdev.man[TTM_PL_VRAM]));
++}
++
++static DEVICE_ATTR(mem_info_vram_total, S_IRUGO,
++ amdgpu_mem_info_vram_total_show, NULL);
++static DEVICE_ATTR(mem_info_vis_vram_total, S_IRUGO,
++ amdgpu_mem_info_vis_vram_total_show,NULL);
++static DEVICE_ATTR(mem_info_vram_used, S_IRUGO,
++ amdgpu_mem_info_vram_used_show, NULL);
++static DEVICE_ATTR(mem_info_vis_vram_used, S_IRUGO,
++ amdgpu_mem_info_vis_vram_used_show, NULL);
++
+ /**
+ * amdgpu_vram_mgr_init - init VRAM manager and DRM MM
+ *
+@@ -43,7 +122,9 @@ struct amdgpu_vram_mgr {
+ static int amdgpu_vram_mgr_init(struct ttm_mem_type_manager *man,
+ unsigned long p_size)
+ {
++ struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
+ struct amdgpu_vram_mgr *mgr;
++ int ret;
+
+ mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+ if (!mgr)
+@@ -52,6 +133,29 @@ static int amdgpu_vram_mgr_init(struct ttm_mem_type_manager *man,
+ drm_mm_init(&mgr->mm, 0, p_size);
+ spin_lock_init(&mgr->lock);
+ man->priv = mgr;
++
++ /* Add the two VRAM-related sysfs files */
++ ret = device_create_file(adev->dev, &dev_attr_mem_info_vram_total);
++ if (ret) {
++ DRM_ERROR("Failed to create device file mem_info_vram_total\n");
++ return ret;
++ }
++ ret = device_create_file(adev->dev, &dev_attr_mem_info_vis_vram_total);
++ if (ret) {
++ DRM_ERROR("Failed to create device file mem_info_vis_vram_total\n");
++ return ret;
++ }
++ ret = device_create_file(adev->dev, &dev_attr_mem_info_vram_used);
++ if (ret) {
++ DRM_ERROR("Failed to create device file mem_info_vram_used\n");
++ return ret;
++ }
++ ret = device_create_file(adev->dev, &dev_attr_mem_info_vis_vram_used);
++ if (ret) {
++ DRM_ERROR("Failed to create device file mem_info_vis_vram_used\n");
++ return ret;
++ }
++
+ return 0;
+ }
+
+@@ -65,6 +169,7 @@ static int amdgpu_vram_mgr_init(struct ttm_mem_type_manager *man,
+ */
+ static int amdgpu_vram_mgr_fini(struct ttm_mem_type_manager *man)
+ {
++ struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
+ struct amdgpu_vram_mgr *mgr = man->priv;
+
+ spin_lock(&mgr->lock);
+@@ -72,6 +177,10 @@ static int amdgpu_vram_mgr_fini(struct ttm_mem_type_manager *man)
+ spin_unlock(&mgr->lock);
+ kfree(mgr);
+ man->priv = NULL;
++ device_remove_file(adev->dev, &dev_attr_mem_info_vram_total);
++ device_remove_file(adev->dev, &dev_attr_mem_info_vis_vram_total);
++ device_remove_file(adev->dev, &dev_attr_mem_info_vram_used);
++ device_remove_file(adev->dev, &dev_attr_mem_info_vis_vram_used);
+ return 0;
+ }
+
+--
+2.17.1
+