aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_debugfs.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-08-25 17:45:57 -0400
committerChris Wilson <chris@chris-wilson.co.uk>2010-09-08 06:29:58 -0400
commit37811fcc9188f748407646e1157f3ed24ae181a4 (patch)
treec413000327d80b226c292cedae542c2f8a5293a3 /drivers/gpu/drm/i915/i915_debugfs.c
parent70d39fe4862c6c69c2582c829ec240e05bf24430 (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.c83
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
107static void
108describe_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
107static int i915_gem_object_list_info(struct seq_file *m, void *data) 128static 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
824static 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
818static int 866static int
819i915_wedged_open(struct inode *inode, 867i915_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