diff options
Diffstat (limited to 'meta-baldeagle/recipes-kernel/linux/linux-yocto/0009-yocto-poky-dora-10.0.0-amd-drm-radeon-add-VRAM-debugfs-access-v3.patch')
-rw-r--r-- | meta-baldeagle/recipes-kernel/linux/linux-yocto/0009-yocto-poky-dora-10.0.0-amd-drm-radeon-add-VRAM-debugfs-access-v3.patch | 168 |
1 files changed, 0 insertions, 168 deletions
diff --git a/meta-baldeagle/recipes-kernel/linux/linux-yocto/0009-yocto-poky-dora-10.0.0-amd-drm-radeon-add-VRAM-debugfs-access-v3.patch b/meta-baldeagle/recipes-kernel/linux/linux-yocto/0009-yocto-poky-dora-10.0.0-amd-drm-radeon-add-VRAM-debugfs-access-v3.patch deleted file mode 100644 index c8788bd6..00000000 --- a/meta-baldeagle/recipes-kernel/linux/linux-yocto/0009-yocto-poky-dora-10.0.0-amd-drm-radeon-add-VRAM-debugfs-access-v3.patch +++ /dev/null @@ -1,168 +0,0 @@ -From c100632a7a63c7cc03b7c4ad391477c919c61666 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Tue, 10 Dec 2013 07:45:24 -0700 -Subject: [PATCH 09/44] drm/radeon: add VRAM debugfs access v3 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Not very fast, but makes it possible to access even the -normally inaccessible parts of VRAM from userspace. - -v2: use MM_INDEX_HI for >2GB mem access, add default_llseek -v3: set inode size in the open callback - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - drivers/gpu/drm/radeon/evergreen_reg.h | 1 + - drivers/gpu/drm/radeon/radeon.h | 4 ++ - drivers/gpu/drm/radeon/radeon_ttm.c | 77 +++++++++++++++++++++++++++++++- - 3 files changed, 81 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/radeon/evergreen_reg.h b/drivers/gpu/drm/radeon/evergreen_reg.h -index 8a4e641..a0f63ff 100644 ---- a/drivers/gpu/drm/radeon/evergreen_reg.h -+++ b/drivers/gpu/drm/radeon/evergreen_reg.h -@@ -33,6 +33,7 @@ - #define EVERGREEN_PIF_PHY0_DATA 0xc - #define EVERGREEN_PIF_PHY1_INDEX 0x10 - #define EVERGREEN_PIF_PHY1_DATA 0x14 -+#define EVERGREEN_MM_INDEX_HI 0x18 - - #define EVERGREEN_VGA_MEMORY_BASE_ADDRESS 0x310 - #define EVERGREEN_VGA_MEMORY_BASE_ADDRESS_HIGH 0x324 -diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h -index c0d4230..14df551 100644 ---- a/drivers/gpu/drm/radeon/radeon.h -+++ b/drivers/gpu/drm/radeon/radeon.h -@@ -413,6 +413,10 @@ struct radeon_mman { - struct ttm_bo_device bdev; - bool mem_global_referenced; - bool initialized; -+ -+#if defined(CONFIG_DEBUG_FS) -+ struct dentry *vram; -+#endif - }; - - /* bo virtual address in a specific vm */ -diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c -index a2d6c4f..83ef24d 100644 ---- a/drivers/gpu/drm/radeon/radeon_ttm.c -+++ b/drivers/gpu/drm/radeon/radeon_ttm.c -@@ -39,12 +39,14 @@ - #include <linux/seq_file.h> - #include <linux/slab.h> - #include <linux/swiotlb.h> -+#include <linux/debugfs.h> - #include "radeon_reg.h" - #include "radeon.h" - - #define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT) - - static int radeon_ttm_debugfs_init(struct radeon_device *rdev); -+static void radeon_ttm_debugfs_fini(struct radeon_device *rdev); - - static struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev) - { -@@ -753,6 +755,7 @@ void radeon_ttm_fini(struct radeon_device *rdev) - - if (!rdev->mman.initialized) - return; -+ radeon_ttm_debugfs_fini(rdev); - if (rdev->stollen_vga_memory) { - r = radeon_bo_reserve(rdev->stollen_vga_memory, false); - if (r == 0) { -@@ -862,12 +865,75 @@ static struct drm_info_list radeon_ttm_debugfs_list[] = { - #endif - }; - -+static int radeon_ttm_vram_open(struct inode *inode, struct file *filep) -+{ -+ struct radeon_device *rdev = inode->i_private; -+ i_size_write(inode, rdev->mc.mc_vram_size); -+ filep->private_data = inode->i_private; -+ return 0; -+} -+ -+static ssize_t radeon_ttm_vram_read(struct file *f, char __user *buf, -+ size_t size, loff_t *pos) -+{ -+ struct radeon_device *rdev = f->private_data; -+ ssize_t result = 0; -+ int r; -+ -+ if (size & 0x3 || *pos & 0x3) -+ return -EINVAL; -+ -+ while (size) { -+ unsigned long flags; -+ uint32_t value; -+ -+ if (*pos >= rdev->mc.mc_vram_size) -+ return result; -+ -+ spin_lock_irqsave(&rdev->mmio_idx_lock, flags); -+ WREG32(RADEON_MM_INDEX, ((uint32_t)*pos) | 0x80000000); -+ if (rdev->family >= CHIP_CEDAR) -+ WREG32(EVERGREEN_MM_INDEX_HI, *pos >> 31); -+ value = RREG32(RADEON_MM_DATA); -+ spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags); -+ -+ r = put_user(value, (uint32_t *)buf); -+ if (r) -+ return r; -+ -+ result += 4; -+ buf += 4; -+ *pos += 4; -+ size -= 4; -+ } -+ -+ return result; -+} -+ -+static const struct file_operations radeon_ttm_vram_fops = { -+ .owner = THIS_MODULE, -+ .open = radeon_ttm_vram_open, -+ .read = radeon_ttm_vram_read, -+ .llseek = default_llseek -+}; -+ - #endif - - static int radeon_ttm_debugfs_init(struct radeon_device *rdev) - { - #if defined(CONFIG_DEBUG_FS) -- unsigned count = ARRAY_SIZE(radeon_ttm_debugfs_list); -+ unsigned count; -+ -+ struct drm_minor *minor = rdev->ddev->primary; -+ struct dentry *ent, *root = minor->debugfs_root; -+ -+ ent = debugfs_create_file("radeon_vram", S_IFREG | S_IRUGO, root, -+ rdev, &radeon_ttm_vram_fops); -+ if (IS_ERR(ent)) -+ return PTR_ERR(ent); -+ rdev->mman.vram = ent; -+ -+ count = ARRAY_SIZE(radeon_ttm_debugfs_list); - - #ifdef CONFIG_SWIOTLB - if (!swiotlb_nr_tbl()) -@@ -880,3 +946,12 @@ static int radeon_ttm_debugfs_init(struct radeon_device *rdev) - return 0; - #endif - } -+ -+static void radeon_ttm_debugfs_fini(struct radeon_device *rdev) -+{ -+#if defined(CONFIG_DEBUG_FS) -+ -+ debugfs_remove(rdev->mman.vram); -+ rdev->mman.vram = NULL; -+#endif -+} --- -1.7.9.5 - |