1caab277bSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
28bb0daffSRob Clark /*
31b409fdaSAlexander A. Klimov  * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
48bb0daffSRob Clark  * Author: Rob Clark <rob.clark@linaro.org>
58bb0daffSRob Clark  */
68bb0daffSRob Clark 
72d802453SArnd Bergmann #include <linux/seq_file.h>
82d802453SArnd Bergmann 
92d278f54SLaurent Pinchart #include <drm/drm_crtc.h>
1081f6156cSSam Ravnborg #include <drm/drm_debugfs.h>
1181f6156cSSam Ravnborg #include <drm/drm_file.h>
122d278f54SLaurent Pinchart #include <drm/drm_fb_helper.h>
13720cf96dSVille Syrjälä #include <drm/drm_framebuffer.h>
142d278f54SLaurent Pinchart 
158bb0daffSRob Clark #include "omap_drv.h"
168bb0daffSRob Clark #include "omap_dmm_tiler.h"
178bb0daffSRob Clark 
188bb0daffSRob Clark #ifdef CONFIG_DEBUG_FS
198bb0daffSRob Clark 
gem_show(struct seq_file * m,void * arg)208bb0daffSRob Clark static int gem_show(struct seq_file *m, void *arg)
218bb0daffSRob Clark {
228bb0daffSRob Clark 	struct drm_info_node *node = (struct drm_info_node *) m->private;
238bb0daffSRob Clark 	struct drm_device *dev = node->minor->dev;
248bb0daffSRob Clark 	struct omap_drm_private *priv = dev->dev_private;
258bb0daffSRob Clark 
268bb0daffSRob Clark 	seq_printf(m, "All Objects:\n");
275117bd89SDaniel Vetter 	mutex_lock(&priv->list_lock);
288bb0daffSRob Clark 	omap_gem_describe_objects(&priv->obj_list, m);
295117bd89SDaniel Vetter 	mutex_unlock(&priv->list_lock);
308bb0daffSRob Clark 
318bb0daffSRob Clark 	return 0;
328bb0daffSRob Clark }
338bb0daffSRob Clark 
mm_show(struct seq_file * m,void * arg)348bb0daffSRob Clark static int mm_show(struct seq_file *m, void *arg)
358bb0daffSRob Clark {
368bb0daffSRob Clark 	struct drm_info_node *node = (struct drm_info_node *) m->private;
378bb0daffSRob Clark 	struct drm_device *dev = node->minor->dev;
38b5c3714fSDaniel Vetter 	struct drm_printer p = drm_seq_file_printer(m);
39b5c3714fSDaniel Vetter 
40b5c3714fSDaniel Vetter 	drm_mm_print(&dev->vma_offset_manager->vm_addr_space_mm, &p);
41b5c3714fSDaniel Vetter 
42b5c3714fSDaniel Vetter 	return 0;
438bb0daffSRob Clark }
448bb0daffSRob Clark 
45e1c1174fSLaurent Pinchart #ifdef CONFIG_DRM_FBDEV_EMULATION
fb_show(struct seq_file * m,void * arg)468bb0daffSRob Clark static int fb_show(struct seq_file *m, void *arg)
478bb0daffSRob Clark {
488bb0daffSRob Clark 	struct drm_info_node *node = (struct drm_info_node *) m->private;
498bb0daffSRob Clark 	struct drm_device *dev = node->minor->dev;
50*8e3aac3bSThomas Zimmermann 	struct drm_fb_helper *helper = dev->fb_helper;
518bb0daffSRob Clark 	struct drm_framebuffer *fb;
528bb0daffSRob Clark 
538bb0daffSRob Clark 	seq_printf(m, "fbcon ");
54*8e3aac3bSThomas Zimmermann 	omap_framebuffer_describe(helper->fb, m);
558bb0daffSRob Clark 
568bb0daffSRob Clark 	mutex_lock(&dev->mode_config.fb_lock);
578bb0daffSRob Clark 	list_for_each_entry(fb, &dev->mode_config.fb_list, head) {
58*8e3aac3bSThomas Zimmermann 		if (fb == helper->fb)
598bb0daffSRob Clark 			continue;
608bb0daffSRob Clark 
618bb0daffSRob Clark 		seq_printf(m, "user ");
628bb0daffSRob Clark 		omap_framebuffer_describe(fb, m);
638bb0daffSRob Clark 	}
648bb0daffSRob Clark 	mutex_unlock(&dev->mode_config.fb_lock);
658bb0daffSRob Clark 
668bb0daffSRob Clark 	return 0;
678bb0daffSRob Clark }
68e1c1174fSLaurent Pinchart #endif
698bb0daffSRob Clark 
708bb0daffSRob Clark /* list of debufs files that are applicable to all devices */
718bb0daffSRob Clark static struct drm_info_list omap_debugfs_list[] = {
728bb0daffSRob Clark 	{"gem", gem_show, 0},
738bb0daffSRob Clark 	{"mm", mm_show, 0},
74e1c1174fSLaurent Pinchart #ifdef CONFIG_DRM_FBDEV_EMULATION
758bb0daffSRob Clark 	{"fb", fb_show, 0},
76e1c1174fSLaurent Pinchart #endif
778bb0daffSRob Clark };
788bb0daffSRob Clark 
798bb0daffSRob Clark /* list of debugfs files that are specific to devices with dmm/tiler */
808bb0daffSRob Clark static struct drm_info_list omap_dmm_debugfs_list[] = {
818bb0daffSRob Clark 	{"tiler_map", tiler_map_show, 0},
828bb0daffSRob Clark };
838bb0daffSRob Clark 
omap_debugfs_init(struct drm_minor * minor)847ce84471SWambui Karuga void omap_debugfs_init(struct drm_minor *minor)
858bb0daffSRob Clark {
8668f73a1bSWambui Karuga 	drm_debugfs_create_files(omap_debugfs_list,
878bb0daffSRob Clark 				 ARRAY_SIZE(omap_debugfs_list),
888bb0daffSRob Clark 				 minor->debugfs_root, minor);
898bb0daffSRob Clark 
908bb0daffSRob Clark 	if (dmm_is_available())
9168f73a1bSWambui Karuga 		drm_debugfs_create_files(omap_dmm_debugfs_list,
928bb0daffSRob Clark 					 ARRAY_SIZE(omap_dmm_debugfs_list),
938bb0daffSRob Clark 					 minor->debugfs_root, minor);
948bb0daffSRob Clark }
958bb0daffSRob Clark 
968bb0daffSRob Clark #endif
97