omap_debugfs.c 2.4 KB

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