xref: /linux/drivers/gpu/drm/omapdrm/omap_debugfs.c (revision a13f2ef168cb2a033a284eb841bcc481ffbc90cf)
1  // SPDX-License-Identifier: GPL-2.0-only
2  /*
3   * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
4   * Author: Rob Clark <rob.clark@linaro.org>
5   */
6  
7  #include <linux/seq_file.h>
8  
9  #include <drm/drm_crtc.h>
10  #include <drm/drm_debugfs.h>
11  #include <drm/drm_file.h>
12  #include <drm/drm_fb_helper.h>
13  
14  #include "omap_drv.h"
15  #include "omap_dmm_tiler.h"
16  
17  #ifdef CONFIG_DEBUG_FS
18  
19  static int gem_show(struct seq_file *m, void *arg)
20  {
21  	struct drm_info_node *node = (struct drm_info_node *) m->private;
22  	struct drm_device *dev = node->minor->dev;
23  	struct omap_drm_private *priv = dev->dev_private;
24  
25  	seq_printf(m, "All Objects:\n");
26  	mutex_lock(&priv->list_lock);
27  	omap_gem_describe_objects(&priv->obj_list, m);
28  	mutex_unlock(&priv->list_lock);
29  
30  	return 0;
31  }
32  
33  static int mm_show(struct seq_file *m, void *arg)
34  {
35  	struct drm_info_node *node = (struct drm_info_node *) m->private;
36  	struct drm_device *dev = node->minor->dev;
37  	struct drm_printer p = drm_seq_file_printer(m);
38  
39  	drm_mm_print(&dev->vma_offset_manager->vm_addr_space_mm, &p);
40  
41  	return 0;
42  }
43  
44  #ifdef CONFIG_DRM_FBDEV_EMULATION
45  static int fb_show(struct seq_file *m, void *arg)
46  {
47  	struct drm_info_node *node = (struct drm_info_node *) m->private;
48  	struct drm_device *dev = node->minor->dev;
49  	struct omap_drm_private *priv = dev->dev_private;
50  	struct drm_framebuffer *fb;
51  
52  	seq_printf(m, "fbcon ");
53  	omap_framebuffer_describe(priv->fbdev->fb, m);
54  
55  	mutex_lock(&dev->mode_config.fb_lock);
56  	list_for_each_entry(fb, &dev->mode_config.fb_list, head) {
57  		if (fb == priv->fbdev->fb)
58  			continue;
59  
60  		seq_printf(m, "user ");
61  		omap_framebuffer_describe(fb, m);
62  	}
63  	mutex_unlock(&dev->mode_config.fb_lock);
64  
65  	return 0;
66  }
67  #endif
68  
69  /* list of debufs files that are applicable to all devices */
70  static struct drm_info_list omap_debugfs_list[] = {
71  	{"gem", gem_show, 0},
72  	{"mm", mm_show, 0},
73  #ifdef CONFIG_DRM_FBDEV_EMULATION
74  	{"fb", fb_show, 0},
75  #endif
76  };
77  
78  /* list of debugfs files that are specific to devices with dmm/tiler */
79  static struct drm_info_list omap_dmm_debugfs_list[] = {
80  	{"tiler_map", tiler_map_show, 0},
81  };
82  
83  void omap_debugfs_init(struct drm_minor *minor)
84  {
85  	drm_debugfs_create_files(omap_debugfs_list,
86  				 ARRAY_SIZE(omap_debugfs_list),
87  				 minor->debugfs_root, minor);
88  
89  	if (dmm_is_available())
90  		drm_debugfs_create_files(omap_dmm_debugfs_list,
91  					 ARRAY_SIZE(omap_dmm_debugfs_list),
92  					 minor->debugfs_root, minor);
93  }
94  
95  #endif
96