root/drivers/gpu/drm/armada/armada_debugfs.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. armada_debugfs_gem_linear_show
  2. armada_debugfs_crtc_reg_show
  3. armada_debugfs_crtc_reg_open
  4. armada_debugfs_crtc_reg_write
  5. armada_drm_crtc_debugfs_init
  6. armada_drm_debugfs_init

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Copyright (C) 2012 Russell King
   4  *  Rewritten from the dovefb driver, and Armada510 manuals.
   5  */
   6 
   7 #include <linux/ctype.h>
   8 #include <linux/module.h>
   9 #include <linux/seq_file.h>
  10 #include <linux/uaccess.h>
  11 
  12 #include <drm/drm_debugfs.h>
  13 #include <drm/drm_file.h>
  14 
  15 #include "armada_crtc.h"
  16 #include "armada_drm.h"
  17 
  18 static int armada_debugfs_gem_linear_show(struct seq_file *m, void *data)
  19 {
  20         struct drm_info_node *node = m->private;
  21         struct drm_device *dev = node->minor->dev;
  22         struct armada_private *priv = dev->dev_private;
  23         struct drm_printer p = drm_seq_file_printer(m);
  24 
  25         mutex_lock(&priv->linear_lock);
  26         drm_mm_print(&priv->linear, &p);
  27         mutex_unlock(&priv->linear_lock);
  28 
  29         return 0;
  30 }
  31 
  32 static int armada_debugfs_crtc_reg_show(struct seq_file *m, void *data)
  33 {
  34         struct armada_crtc *dcrtc = m->private;
  35         int i;
  36 
  37         for (i = 0x84; i <= 0x1c4; i += 4) {
  38                 u32 v = readl_relaxed(dcrtc->base + i);
  39                 seq_printf(m, "0x%04x: 0x%08x\n", i, v);
  40         }
  41 
  42         return 0;
  43 }
  44 
  45 static int armada_debugfs_crtc_reg_open(struct inode *inode, struct file *file)
  46 {
  47         return single_open(file, armada_debugfs_crtc_reg_show,
  48                            inode->i_private);
  49 }
  50 
  51 static int armada_debugfs_crtc_reg_write(struct file *file,
  52         const char __user *ptr, size_t len, loff_t *off)
  53 {
  54         struct armada_crtc *dcrtc;
  55         unsigned long reg, mask, val;
  56         char buf[32];
  57         int ret;
  58         u32 v;
  59 
  60         if (*off != 0)
  61                 return 0;
  62 
  63         if (len > sizeof(buf) - 1)
  64                 len = sizeof(buf) - 1;
  65 
  66         ret = strncpy_from_user(buf, ptr, len);
  67         if (ret < 0)
  68                 return ret;
  69         buf[len] = '\0';
  70 
  71         if (sscanf(buf, "%lx %lx %lx", &reg, &mask, &val) != 3)
  72                 return -EINVAL;
  73         if (reg < 0x84 || reg > 0x1c4 || reg & 3)
  74                 return -ERANGE;
  75 
  76         dcrtc = ((struct seq_file *)file->private_data)->private;
  77         v = readl(dcrtc->base + reg);
  78         v &= ~mask;
  79         v |= val & mask;
  80         writel(v, dcrtc->base + reg);
  81 
  82         return len;
  83 }
  84 
  85 static const struct file_operations armada_debugfs_crtc_reg_fops = {
  86         .owner = THIS_MODULE,
  87         .open = armada_debugfs_crtc_reg_open,
  88         .read = seq_read,
  89         .write = armada_debugfs_crtc_reg_write,
  90         .llseek = seq_lseek,
  91         .release = single_release,
  92 };
  93 
  94 void armada_drm_crtc_debugfs_init(struct armada_crtc *dcrtc)
  95 {
  96         debugfs_create_file("armada-regs", 0600, dcrtc->crtc.debugfs_entry,
  97                             dcrtc, &armada_debugfs_crtc_reg_fops);
  98 }
  99 
 100 static struct drm_info_list armada_debugfs_list[] = {
 101         { "gem_linear", armada_debugfs_gem_linear_show, 0 },
 102 };
 103 #define ARMADA_DEBUGFS_ENTRIES ARRAY_SIZE(armada_debugfs_list)
 104 
 105 int armada_drm_debugfs_init(struct drm_minor *minor)
 106 {
 107         drm_debugfs_create_files(armada_debugfs_list, ARMADA_DEBUGFS_ENTRIES,
 108                                  minor->debugfs_root, minor);
 109 
 110         return 0;
 111 }

/* [<][>][^][v][top][bottom][index][help] */