Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
0004  * Author: Rob Clark <rob.clark@linaro.org>
0005  */
0006 
0007 #include <linux/seq_file.h>
0008 
0009 #include <drm/drm_crtc.h>
0010 #include <drm/drm_debugfs.h>
0011 #include <drm/drm_file.h>
0012 #include <drm/drm_fb_helper.h>
0013 #include <drm/drm_framebuffer.h>
0014 
0015 #include "omap_drv.h"
0016 #include "omap_dmm_tiler.h"
0017 
0018 #ifdef CONFIG_DEBUG_FS
0019 
0020 static int gem_show(struct seq_file *m, void *arg)
0021 {
0022     struct drm_info_node *node = (struct drm_info_node *) m->private;
0023     struct drm_device *dev = node->minor->dev;
0024     struct omap_drm_private *priv = dev->dev_private;
0025 
0026     seq_printf(m, "All Objects:\n");
0027     mutex_lock(&priv->list_lock);
0028     omap_gem_describe_objects(&priv->obj_list, m);
0029     mutex_unlock(&priv->list_lock);
0030 
0031     return 0;
0032 }
0033 
0034 static int mm_show(struct seq_file *m, void *arg)
0035 {
0036     struct drm_info_node *node = (struct drm_info_node *) m->private;
0037     struct drm_device *dev = node->minor->dev;
0038     struct drm_printer p = drm_seq_file_printer(m);
0039 
0040     drm_mm_print(&dev->vma_offset_manager->vm_addr_space_mm, &p);
0041 
0042     return 0;
0043 }
0044 
0045 #ifdef CONFIG_DRM_FBDEV_EMULATION
0046 static int fb_show(struct seq_file *m, void *arg)
0047 {
0048     struct drm_info_node *node = (struct drm_info_node *) m->private;
0049     struct drm_device *dev = node->minor->dev;
0050     struct omap_drm_private *priv = dev->dev_private;
0051     struct drm_framebuffer *fb;
0052 
0053     seq_printf(m, "fbcon ");
0054     omap_framebuffer_describe(priv->fbdev->fb, m);
0055 
0056     mutex_lock(&dev->mode_config.fb_lock);
0057     list_for_each_entry(fb, &dev->mode_config.fb_list, head) {
0058         if (fb == priv->fbdev->fb)
0059             continue;
0060 
0061         seq_printf(m, "user ");
0062         omap_framebuffer_describe(fb, m);
0063     }
0064     mutex_unlock(&dev->mode_config.fb_lock);
0065 
0066     return 0;
0067 }
0068 #endif
0069 
0070 /* list of debufs files that are applicable to all devices */
0071 static struct drm_info_list omap_debugfs_list[] = {
0072     {"gem", gem_show, 0},
0073     {"mm", mm_show, 0},
0074 #ifdef CONFIG_DRM_FBDEV_EMULATION
0075     {"fb", fb_show, 0},
0076 #endif
0077 };
0078 
0079 /* list of debugfs files that are specific to devices with dmm/tiler */
0080 static struct drm_info_list omap_dmm_debugfs_list[] = {
0081     {"tiler_map", tiler_map_show, 0},
0082 };
0083 
0084 void omap_debugfs_init(struct drm_minor *minor)
0085 {
0086     drm_debugfs_create_files(omap_debugfs_list,
0087                  ARRAY_SIZE(omap_debugfs_list),
0088                  minor->debugfs_root, minor);
0089 
0090     if (dmm_is_available())
0091         drm_debugfs_create_files(omap_dmm_debugfs_list,
0092                      ARRAY_SIZE(omap_dmm_debugfs_list),
0093                      minor->debugfs_root, minor);
0094 }
0095 
0096 #endif