Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/*
  2 * drivers/gpu/drm/omapdrm/omap_debugfs.c
  3 *
  4 * Copyright (C) 2011 Texas Instruments
  5 * Author: Rob Clark <rob.clark@linaro.org>
  6 *
  7 * This program is free software; you can redistribute it and/or modify it
  8 * under the terms of the GNU General Public License version 2 as published by
  9 * the Free Software Foundation.
 10 *
 11 * This program is distributed in the hope that it will be useful, but WITHOUT
 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 14 * more details.
 15 *
 16 * You should have received a copy of the GNU General Public License along with
 17 * this program.  If not, see <http://www.gnu.org/licenses/>.
 18 */
 19
 20#include <linux/seq_file.h>
 21
 22#include <drm/drm_crtc.h>
 23#include <drm/drm_fb_helper.h>
 24
 25#include "omap_drv.h"
 26#include "omap_dmm_tiler.h"
 27
 28#ifdef CONFIG_DEBUG_FS
 29
 30static int gem_show(struct seq_file *m, void *arg)
 31{
 32	struct drm_info_node *node = (struct drm_info_node *) m->private;
 33	struct drm_device *dev = node->minor->dev;
 34	struct omap_drm_private *priv = dev->dev_private;
 35	int ret;
 36
 37	ret = mutex_lock_interruptible(&dev->struct_mutex);
 38	if (ret)
 39		return ret;
 40
 41	seq_printf(m, "All Objects:\n");
 42	omap_gem_describe_objects(&priv->obj_list, m);
 43
 44	mutex_unlock(&dev->struct_mutex);
 45
 46	return 0;
 47}
 48
 49static int mm_show(struct seq_file *m, void *arg)
 50{
 51	struct drm_info_node *node = (struct drm_info_node *) m->private;
 52	struct drm_device *dev = node->minor->dev;
 53	return drm_mm_dump_table(m, &dev->vma_offset_manager->vm_addr_space_mm);
 54}
 55
 56#ifdef CONFIG_DRM_FBDEV_EMULATION
 57static int fb_show(struct seq_file *m, void *arg)
 58{
 59	struct drm_info_node *node = (struct drm_info_node *) m->private;
 60	struct drm_device *dev = node->minor->dev;
 61	struct omap_drm_private *priv = dev->dev_private;
 62	struct drm_framebuffer *fb;
 63
 64	seq_printf(m, "fbcon ");
 65	omap_framebuffer_describe(priv->fbdev->fb, m);
 66
 67	mutex_lock(&dev->mode_config.fb_lock);
 68	list_for_each_entry(fb, &dev->mode_config.fb_list, head) {
 69		if (fb == priv->fbdev->fb)
 70			continue;
 71
 72		seq_printf(m, "user ");
 73		omap_framebuffer_describe(fb, m);
 74	}
 75	mutex_unlock(&dev->mode_config.fb_lock);
 76
 77	return 0;
 78}
 79#endif
 80
 81/* list of debufs files that are applicable to all devices */
 82static struct drm_info_list omap_debugfs_list[] = {
 83	{"gem", gem_show, 0},
 84	{"mm", mm_show, 0},
 85#ifdef CONFIG_DRM_FBDEV_EMULATION
 86	{"fb", fb_show, 0},
 87#endif
 88};
 89
 90/* list of debugfs files that are specific to devices with dmm/tiler */
 91static struct drm_info_list omap_dmm_debugfs_list[] = {
 92	{"tiler_map", tiler_map_show, 0},
 93};
 94
 95int omap_debugfs_init(struct drm_minor *minor)
 96{
 97	struct drm_device *dev = minor->dev;
 98	int ret;
 99
100	ret = drm_debugfs_create_files(omap_debugfs_list,
101			ARRAY_SIZE(omap_debugfs_list),
102			minor->debugfs_root, minor);
103
104	if (ret) {
105		dev_err(dev->dev, "could not install omap_debugfs_list\n");
106		return ret;
107	}
108
109	if (dmm_is_available())
110		ret = drm_debugfs_create_files(omap_dmm_debugfs_list,
111				ARRAY_SIZE(omap_dmm_debugfs_list),
112				minor->debugfs_root, minor);
113
114	if (ret) {
115		dev_err(dev->dev, "could not install omap_dmm_debugfs_list\n");
116		return ret;
117	}
118
119	return ret;
120}
121
122void omap_debugfs_cleanup(struct drm_minor *minor)
123{
124	drm_debugfs_remove_files(omap_debugfs_list,
125			ARRAY_SIZE(omap_debugfs_list), minor);
126	if (dmm_is_available())
127		drm_debugfs_remove_files(omap_dmm_debugfs_list,
128				ARRAY_SIZE(omap_dmm_debugfs_list), minor);
129}
130
131#endif