aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_fb_cma_helper.c53
-rw-r--r--drivers/gpu/drm/drm_gem_cma_helper.c21
-rw-r--r--include/drm/drm_fb_cma_helper.h5
-rw-r--r--include/drm/drm_gem_cma_helper.h4
4 files changed, 83 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}
181EXPORT_SYMBOL_GPL(drm_fb_cma_get_gem_obj); 181EXPORT_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 */
188void 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}
202EXPORT_SYMBOL_GPL(drm_fb_cma_describe);
203
204/**
205 * drm_fb_cma_debugfs_show() - Helper to list CMA framebuffer objects
206 * in debugfs.
207 */
208int 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}
233EXPORT_SYMBOL_GPL(drm_fb_cma_debugfs_show);
234#endif
235
183static struct fb_ops drm_fbdev_cma_ops = { 236static 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}
251EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy); 251EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy);
252
253#ifdef CONFIG_DEBUG_FS
254void 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}
271EXPORT_SYMBOL_GPL(drm_gem_cma_describe);
272#endif
diff --git a/include/drm/drm_fb_cma_helper.h b/include/drm/drm_fb_cma_helper.h
index 76c709837543..4a3fc244301c 100644
--- a/include/drm/drm_fb_cma_helper.h
+++ b/include/drm/drm_fb_cma_helper.h
@@ -23,5 +23,10 @@ struct drm_framebuffer *drm_fb_cma_create(struct drm_device *dev,
23struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb, 23struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb,
24 unsigned int plane); 24 unsigned int plane);
25 25
26#ifdef CONFIG_DEBUG_FS
27void drm_fb_cma_describe(struct drm_framebuffer *fb, struct seq_file *m);
28int drm_fb_cma_debugfs_show(struct seq_file *m, void *arg);
29#endif
30
26#endif 31#endif
27 32
diff --git a/include/drm/drm_gem_cma_helper.h b/include/drm/drm_gem_cma_helper.h
index f0f6b1af25ad..63397ced9254 100644
--- a/include/drm/drm_gem_cma_helper.h
+++ b/include/drm/drm_gem_cma_helper.h
@@ -41,4 +41,8 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
41 41
42extern const struct vm_operations_struct drm_gem_cma_vm_ops; 42extern const struct vm_operations_struct drm_gem_cma_vm_ops;
43 43
44#ifdef CONFIG_DEBUG_FS
45void drm_gem_cma_describe(struct drm_gem_cma_object *obj, struct seq_file *m);
46#endif
47
44#endif /* __DRM_GEM_CMA_HELPER_H__ */ 48#endif /* __DRM_GEM_CMA_HELPER_H__ */