diff options
-rw-r--r-- | drivers/gpu/drm/drm_fb_cma_helper.c | 53 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_gem_cma_helper.c | 21 | ||||
-rw-r--r-- | include/drm/drm_fb_cma_helper.h | 5 | ||||
-rw-r--r-- | include/drm/drm_gem_cma_helper.h | 4 |
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 | } |
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 | ||
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, | |||
23 | struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb, | 23 | struct 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 | ||
27 | void drm_fb_cma_describe(struct drm_framebuffer *fb, struct seq_file *m); | ||
28 | int 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 | ||
42 | extern const struct vm_operations_struct drm_gem_cma_vm_ops; | 42 | extern const struct vm_operations_struct drm_gem_cma_vm_ops; |
43 | 43 | ||
44 | #ifdef CONFIG_DEBUG_FS | ||
45 | void 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__ */ |