diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-08-25 17:45:57 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-08 06:29:58 -0400 |
commit | 37811fcc9188f748407646e1157f3ed24ae181a4 (patch) | |
tree | c413000327d80b226c292cedae542c2f8a5293a3 /drivers/gpu/drm/i915/i915_debugfs.c | |
parent | 70d39fe4862c6c69c2582c829ec240e05bf24430 (diff) |
drm/i915: Show framebuffer info in debugfs
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_debugfs.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 83 |
1 files changed, 66 insertions, 17 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 18fd1532cecf..2f3e017d24d6 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -104,6 +104,27 @@ static const char *get_tiling_flag(struct drm_i915_gem_object *obj_priv) | |||
104 | } | 104 | } |
105 | } | 105 | } |
106 | 106 | ||
107 | static void | ||
108 | describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj) | ||
109 | { | ||
110 | seq_printf(m, "%p: %s%s %8zd %08x %08x %d%s%s", | ||
111 | &obj->base, | ||
112 | get_pin_flag(obj), | ||
113 | get_tiling_flag(obj), | ||
114 | obj->base.size, | ||
115 | obj->base.read_domains, | ||
116 | obj->base.write_domain, | ||
117 | obj->last_rendering_seqno, | ||
118 | obj->dirty ? " dirty" : "", | ||
119 | obj->madv == I915_MADV_DONTNEED ? " purgeable" : ""); | ||
120 | if (obj->base.name) | ||
121 | seq_printf(m, " (name: %d)", obj->base.name); | ||
122 | if (obj->fence_reg != I915_FENCE_REG_NONE) | ||
123 | seq_printf(m, " (fence: %d)", obj->fence_reg); | ||
124 | if (obj->gtt_space != NULL) | ||
125 | seq_printf(m, " (gtt_offset: %08x)", obj->gtt_offset); | ||
126 | } | ||
127 | |||
107 | static int i915_gem_object_list_info(struct seq_file *m, void *data) | 128 | static int i915_gem_object_list_info(struct seq_file *m, void *data) |
108 | { | 129 | { |
109 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 130 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
@@ -137,23 +158,8 @@ static int i915_gem_object_list_info(struct seq_file *m, void *data) | |||
137 | } | 158 | } |
138 | 159 | ||
139 | list_for_each_entry(obj_priv, head, list) { | 160 | list_for_each_entry(obj_priv, head, list) { |
140 | seq_printf(m, " %p: %s %8zd %08x %08x %d%s%s", | 161 | seq_printf(m, " "); |
141 | &obj_priv->base, | 162 | describe_obj(m, obj_priv); |
142 | get_pin_flag(obj_priv), | ||
143 | obj_priv->base.size, | ||
144 | obj_priv->base.read_domains, | ||
145 | obj_priv->base.write_domain, | ||
146 | obj_priv->last_rendering_seqno, | ||
147 | obj_priv->dirty ? " dirty" : "", | ||
148 | obj_priv->madv == I915_MADV_DONTNEED ? " purgeable" : ""); | ||
149 | |||
150 | if (obj_priv->base.name) | ||
151 | seq_printf(m, " (name: %d)", obj_priv->base.name); | ||
152 | if (obj_priv->fence_reg != I915_FENCE_REG_NONE) | ||
153 | seq_printf(m, " (fence: %d)", obj_priv->fence_reg); | ||
154 | if (obj_priv->gtt_space != NULL) | ||
155 | seq_printf(m, " (gtt_offset: %08x)", obj_priv->gtt_offset); | ||
156 | |||
157 | seq_printf(m, "\n"); | 163 | seq_printf(m, "\n"); |
158 | } | 164 | } |
159 | 165 | ||
@@ -815,6 +821,48 @@ static int i915_opregion(struct seq_file *m, void *unused) | |||
815 | return 0; | 821 | return 0; |
816 | } | 822 | } |
817 | 823 | ||
824 | static int i915_gem_framebuffer_info(struct seq_file *m, void *data) | ||
825 | { | ||
826 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
827 | struct drm_device *dev = node->minor->dev; | ||
828 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
829 | struct intel_fbdev *ifbdev; | ||
830 | struct intel_framebuffer *fb; | ||
831 | int ret; | ||
832 | |||
833 | ret = mutex_lock_interruptible(&dev->mode_config.mutex); | ||
834 | if (ret) | ||
835 | return ret; | ||
836 | |||
837 | ifbdev = dev_priv->fbdev; | ||
838 | fb = to_intel_framebuffer(ifbdev->helper.fb); | ||
839 | |||
840 | seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, obj ", | ||
841 | fb->base.width, | ||
842 | fb->base.height, | ||
843 | fb->base.depth, | ||
844 | fb->base.bits_per_pixel); | ||
845 | describe_obj(m, to_intel_bo(fb->obj)); | ||
846 | seq_printf(m, "\n"); | ||
847 | |||
848 | list_for_each_entry(fb, &dev->mode_config.fb_list, base.head) { | ||
849 | if (&fb->base == ifbdev->helper.fb) | ||
850 | continue; | ||
851 | |||
852 | seq_printf(m, "user size: %d x %d, depth %d, %d bpp, obj ", | ||
853 | fb->base.width, | ||
854 | fb->base.height, | ||
855 | fb->base.depth, | ||
856 | fb->base.bits_per_pixel); | ||
857 | describe_obj(m, to_intel_bo(fb->obj)); | ||
858 | seq_printf(m, "\n"); | ||
859 | } | ||
860 | |||
861 | mutex_unlock(&dev->mode_config.mutex); | ||
862 | |||
863 | return 0; | ||
864 | } | ||
865 | |||
818 | static int | 866 | static int |
819 | i915_wedged_open(struct inode *inode, | 867 | i915_wedged_open(struct inode *inode, |
820 | struct file *filp) | 868 | struct file *filp) |
@@ -944,6 +992,7 @@ static struct drm_info_list i915_debugfs_list[] = { | |||
944 | {"i915_fbc_status", i915_fbc_status, 0}, | 992 | {"i915_fbc_status", i915_fbc_status, 0}, |
945 | {"i915_sr_status", i915_sr_status, 0}, | 993 | {"i915_sr_status", i915_sr_status, 0}, |
946 | {"i915_opregion", i915_opregion, 0}, | 994 | {"i915_opregion", i915_opregion, 0}, |
995 | {"i915_gem_framebuffer", i915_gem_framebuffer_info, 0}, | ||
947 | }; | 996 | }; |
948 | #define I915_DEBUGFS_ENTRIES ARRAY_SIZE(i915_debugfs_list) | 997 | #define I915_DEBUGFS_ENTRIES ARRAY_SIZE(i915_debugfs_list) |
949 | 998 | ||