aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorThierry Reding <thierry.reding@avionic-design.de>2013-02-13 10:13:16 -0500
committerThierry Reding <thierry.reding@avionic-design.de>2013-02-22 02:21:37 -0500
commite450fcc6669705ef49784080ac6dd8513df37763 (patch)
tree1411de86b91f4407f3368b47b2c68ea6f6345b01 /drivers/gpu
parent84ff6b270893cd8b054bae371a315c905ffa3ac9 (diff)
drm/tegra: Add list of framebuffers to debugfs
This list is most useful to inspect whether framebuffer reference counting works as expected. The code is loosely based on the i915 implementation. Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/tegra/drm.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 97485af6eaf9..181a370c56c1 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -143,6 +143,45 @@ static void tegra_drm_preclose(struct drm_device *drm, struct drm_file *file)
143 tegra_dc_cancel_page_flip(crtc, file); 143 tegra_dc_cancel_page_flip(crtc, file);
144} 144}
145 145
146#ifdef CONFIG_DEBUG_FS
147static int tegra_debugfs_framebuffers(struct seq_file *s, void *data)
148{
149 struct drm_info_node *node = (struct drm_info_node *)s->private;
150 struct drm_device *drm = node->minor->dev;
151 struct drm_framebuffer *fb;
152
153 mutex_lock(&drm->mode_config.fb_lock);
154
155 list_for_each_entry(fb, &drm->mode_config.fb_list, head) {
156 seq_printf(s, "%3d: user size: %d x %d, depth %d, %d bpp, refcount %d\n",
157 fb->base.id, fb->width, fb->height, fb->depth,
158 fb->bits_per_pixel,
159 atomic_read(&fb->refcount.refcount));
160 }
161
162 mutex_unlock(&drm->mode_config.fb_lock);
163
164 return 0;
165}
166
167static struct drm_info_list tegra_debugfs_list[] = {
168 { "framebuffers", tegra_debugfs_framebuffers, 0 },
169};
170
171static int tegra_debugfs_init(struct drm_minor *minor)
172{
173 return drm_debugfs_create_files(tegra_debugfs_list,
174 ARRAY_SIZE(tegra_debugfs_list),
175 minor->debugfs_root, minor);
176}
177
178static void tegra_debugfs_cleanup(struct drm_minor *minor)
179{
180 drm_debugfs_remove_files(tegra_debugfs_list,
181 ARRAY_SIZE(tegra_debugfs_list), minor);
182}
183#endif
184
146struct drm_driver tegra_drm_driver = { 185struct drm_driver tegra_drm_driver = {
147 .driver_features = DRIVER_BUS_PLATFORM | DRIVER_MODESET | DRIVER_GEM, 186 .driver_features = DRIVER_BUS_PLATFORM | DRIVER_MODESET | DRIVER_GEM,
148 .load = tegra_drm_load, 187 .load = tegra_drm_load,
@@ -155,6 +194,11 @@ struct drm_driver tegra_drm_driver = {
155 .enable_vblank = tegra_drm_enable_vblank, 194 .enable_vblank = tegra_drm_enable_vblank,
156 .disable_vblank = tegra_drm_disable_vblank, 195 .disable_vblank = tegra_drm_disable_vblank,
157 196
197#if defined(CONFIG_DEBUG_FS)
198 .debugfs_init = tegra_debugfs_init,
199 .debugfs_cleanup = tegra_debugfs_cleanup,
200#endif
201
158 .gem_free_object = drm_gem_cma_free_object, 202 .gem_free_object = drm_gem_cma_free_object,
159 .gem_vm_ops = &drm_gem_cma_vm_ops, 203 .gem_vm_ops = &drm_gem_cma_vm_ops,
160 .dumb_create = drm_gem_cma_dumb_create, 204 .dumb_create = drm_gem_cma_dumb_create,