diff options
author | Rob Clark <robdclark@gmail.com> | 2012-12-10 11:46:43 -0500 |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2013-02-17 17:55:42 -0500 |
commit | 6f646095ec2f5d38a6429dd896cb2d5cbbb776dc (patch) | |
tree | 41444767a379449c4e57f60dbee6d3bf2c670904 /drivers/gpu/drm | |
parent | 21a245d2d62ef617978316203af032d499805cd2 (diff) |
drm/cma: add debugfs helpers
Add helper to display fb's which can be used directly in drm_info_list:
static struct drm_info_list foo_debugfs_list[] = {
...
{ "fb", drm_fb_cma_debugfs_show, 0 },
};
to display information about CMA fb objects, as well as a
drm_gem_cma_describe() which can be used if the driver bothers to keep
a list of CMA GEM objects.
Signed-off-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/drm_fb_cma_helper.c | 53 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_gem_cma_helper.c | 21 |
2 files changed, 74 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c index ef68e34b16ec..8044c5e56665 100644 --- a/drivers/gpu/drm/drm_fb_cma_helper.c +++ b/drivers/gpu/drm/drm_fb_cma_helper.c | |||
@@ -180,6 +180,59 @@ struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb, | |||
180 | } | 180 | } |
181 | EXPORT_SYMBOL_GPL(drm_fb_cma_get_gem_obj); | 181 | EXPORT_SYMBOL_GPL(drm_fb_cma_get_gem_obj); |
182 | 182 | ||
183 | #ifdef CONFIG_DEBUG_FS | ||
184 | /** | ||
185 | * drm_fb_cma_describe() - Helper to dump information about a single | ||
186 | * CMA framebuffer object | ||
187 | */ | ||
188 | void drm_fb_cma_describe(struct drm_framebuffer *fb, struct seq_file *m) | ||
189 | { | ||
190 | struct drm_fb_cma *fb_cma = to_fb_cma(fb); | ||
191 | int i, n = drm_format_num_planes(fb->pixel_format); | ||
192 | |||
193 | seq_printf(m, "fb: %dx%d@%4.4s\n", fb->width, fb->height, | ||
194 | (char *)&fb->pixel_format); | ||
195 | |||
196 | for (i = 0; i < n; i++) { | ||
197 | seq_printf(m, " %d: offset=%d pitch=%d, obj: ", | ||
198 | i, fb->offsets[i], fb->pitches[i]); | ||
199 | drm_gem_cma_describe(fb_cma->obj[i], m); | ||
200 | } | ||
201 | } | ||
202 | EXPORT_SYMBOL_GPL(drm_fb_cma_describe); | ||
203 | |||
204 | /** | ||
205 | * drm_fb_cma_debugfs_show() - Helper to list CMA framebuffer objects | ||
206 | * in debugfs. | ||
207 | */ | ||
208 | int drm_fb_cma_debugfs_show(struct seq_file *m, void *arg) | ||
209 | { | ||
210 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
211 | struct drm_device *dev = node->minor->dev; | ||
212 | struct drm_framebuffer *fb; | ||
213 | int ret; | ||
214 | |||
215 | ret = mutex_lock_interruptible(&dev->mode_config.mutex); | ||
216 | if (ret) | ||
217 | return ret; | ||
218 | |||
219 | ret = mutex_lock_interruptible(&dev->struct_mutex); | ||
220 | if (ret) { | ||
221 | mutex_unlock(&dev->mode_config.mutex); | ||
222 | return ret; | ||
223 | } | ||
224 | |||
225 | list_for_each_entry(fb, &dev->mode_config.fb_list, head) | ||
226 | drm_fb_cma_describe(fb, m); | ||
227 | |||
228 | mutex_unlock(&dev->struct_mutex); | ||
229 | mutex_unlock(&dev->mode_config.mutex); | ||
230 | |||
231 | return 0; | ||
232 | } | ||
233 | EXPORT_SYMBOL_GPL(drm_fb_cma_debugfs_show); | ||
234 | #endif | ||
235 | |||
183 | static struct fb_ops drm_fbdev_cma_ops = { | 236 | static struct fb_ops drm_fbdev_cma_ops = { |
184 | .owner = THIS_MODULE, | 237 | .owner = THIS_MODULE, |
185 | .fb_fillrect = sys_fillrect, | 238 | .fb_fillrect = sys_fillrect, |
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c index 1aa8fee1e865..0a7e011509bd 100644 --- a/drivers/gpu/drm/drm_gem_cma_helper.c +++ b/drivers/gpu/drm/drm_gem_cma_helper.c | |||
@@ -249,3 +249,24 @@ int drm_gem_cma_dumb_destroy(struct drm_file *file_priv, | |||
249 | return drm_gem_handle_delete(file_priv, handle); | 249 | return drm_gem_handle_delete(file_priv, handle); |
250 | } | 250 | } |
251 | EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy); | 251 | EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy); |
252 | |||
253 | #ifdef CONFIG_DEBUG_FS | ||
254 | void drm_gem_cma_describe(struct drm_gem_cma_object *cma_obj, struct seq_file *m) | ||
255 | { | ||
256 | struct drm_gem_object *obj = &cma_obj->base; | ||
257 | struct drm_device *dev = obj->dev; | ||
258 | uint64_t off = 0; | ||
259 | |||
260 | WARN_ON(!mutex_is_locked(&dev->struct_mutex)); | ||
261 | |||
262 | if (obj->map_list.map) | ||
263 | off = (uint64_t)obj->map_list.hash.key; | ||
264 | |||
265 | seq_printf(m, "%2d (%2d) %08llx %08Zx %p %d", | ||
266 | obj->name, obj->refcount.refcount.counter, | ||
267 | off, cma_obj->paddr, cma_obj->vaddr, obj->size); | ||
268 | |||
269 | seq_printf(m, "\n"); | ||
270 | } | ||
271 | EXPORT_SYMBOL_GPL(drm_gem_cma_describe); | ||
272 | #endif | ||