From patchwork Fri Dec 14 00:01:50 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 13563 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 7F1B123E2C for ; Fri, 14 Dec 2012 00:02:01 +0000 (UTC) Received: from mail-ie0-f180.google.com (mail-ie0-f180.google.com [209.85.223.180]) by fiordland.canonical.com (Postfix) with ESMTP id 06203A18961 for ; Fri, 14 Dec 2012 00:02:00 +0000 (UTC) Received: by mail-ie0-f180.google.com with SMTP id c10so5062560ieb.39 for ; Thu, 13 Dec 2012 16:02:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf :dkim-signature:from:to:cc:subject:date:message-id:x-mailer :x-gm-message-state; bh=HrI6bakw+5agz16GPSicVTWpf8V8p952mMp6T0toins=; b=Zh0qLZL2gQRU7THPkw8FBAXYIM3cFLTun/suohUvmFEQ7enDPg/RCpzgewbNp0OBFO SJKdvW+k0MCe3LJkVcoCL7eDto258f9T8TkpCK1yLyE5z+LzxNTtpi70COTKb0EEsMJg KHwJnH5M5+kDxPmx8Nd36ZscBwHTLmQv7UGl3qCZEMKd7vYnC7CCvVR/Ys5ER6/AtFYU HkzU/aBmjcqGsGWrkmYb1xR4IyT06Dqy/4gXK8fG4ZzlrBxpm/qNZ2y5ua5jHqPGW+j2 KblCxAPXKmAraPOnD+zJv3Y6/8oHUZX6HFEUASQ709qMHNTrwveubtFczyt3O5vzP/KO v0aQ== Received: by 10.50.213.69 with SMTP id nq5mr11378274igc.70.1355443320475; Thu, 13 Dec 2012 16:02:00 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.50.67.148 with SMTP id n20csp42580igt; Thu, 13 Dec 2012 16:02:00 -0800 (PST) Received: by 10.182.95.133 with SMTP id dk5mr3263537obb.14.1355443320004; Thu, 13 Dec 2012 16:02:00 -0800 (PST) Received: from mail-ob0-f173.google.com (mail-ob0-f173.google.com [209.85.214.173]) by mx.google.com with ESMTPS id p7si3251483obj.22.2012.12.13.16.01.59 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 13 Dec 2012 16:02:00 -0800 (PST) Received-SPF: pass (google.com: domain of robdclark@gmail.com designates 209.85.214.173 as permitted sender) client-ip=209.85.214.173; Authentication-Results: mx.google.com; spf=pass (google.com: domain of robdclark@gmail.com designates 209.85.214.173 as permitted sender) smtp.mail=robdclark@gmail.com; dkim=pass header.i=@gmail.com Received: by mail-ob0-f173.google.com with SMTP id xn12so2693715obc.18 for ; Thu, 13 Dec 2012 16:01:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=HrI6bakw+5agz16GPSicVTWpf8V8p952mMp6T0toins=; b=E+p/c2/leYDWZfe533w7Nt6lqtrxrbAU97AYLnFBjJrZ7Q3aChjJJeOU/E5lRKIDeX fIMWOpJQCZDS+85nli3mCGd/uqms3UAHhvpUGP2JFPOrjdIGsWiEo9p3TZbKikZ3Dmdn AlrFZXtpmcnVEcZNK4ZgUTe1aqFoDnCqfj8eD0rDCUKA1Ro4yv1csIDy9syhKzR+v53n kA2h07EKXCGBBsNrGuuCsRQi6wKQcTqmzd/pR2YyBYjRxLDgV425Xx/Rdk3peICwI+um 9pD7yRVKImLboZilNX0KOJbWZozS0TC0V85QyZ629Zb5VdPtJF+eRPPWA7PGcFTSd6AA 62UQ== Received: by 10.182.177.72 with SMTP id co8mr3152499obc.53.1355443319753; Thu, 13 Dec 2012 16:01:59 -0800 (PST) Received: from localhost (ppp-70-129-139-144.dsl.rcsntx.swbell.net. [70.129.139.144]) by mx.google.com with ESMTPS id vq7sm2090338oeb.13.2012.12.13.16.01.58 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 13 Dec 2012 16:01:59 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: patches@linaro.org, Rob Clark Subject: [PATCH] drm/cma: add debugfs helpers Date: Thu, 13 Dec 2012 18:01:50 -0600 Message-Id: <1355443310-8550-1-git-send-email-robdclark@gmail.com> X-Mailer: git-send-email 1.8.0.2 X-Gm-Message-State: ALoCoQkHvA6F8Ex+FJuEKzsdOrS6A7eoV3MDjQfqxg3HoI3+hTIr1Ie4uq45tt/xwzHtUkjHhtrm 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 --- drivers/gpu/drm/drm_fb_cma_helper.c | 53 ++++++++++++++++++++++++++++++++++++ drivers/gpu/drm/drm_gem_cma_helper.c | 21 ++++++++++++++ include/drm/drm_fb_cma_helper.h | 5 ++++ include/drm/drm_gem_cma_helper.h | 4 +++ 4 files changed, 83 insertions(+) diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c index fd9d0af..18866ee 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, } EXPORT_SYMBOL_GPL(drm_fb_cma_get_gem_obj); +#ifdef CONFIG_DEBUG_FS +/** + * drm_fb_cma_describe() - Helper to dump information about a single + * CMA framebuffer object + */ +void drm_fb_cma_describe(struct drm_framebuffer *fb, struct seq_file *m) +{ + struct drm_fb_cma *fb_cma = to_fb_cma(fb); + int i, n = drm_format_num_planes(fb->pixel_format); + + seq_printf(m, "fb: %dx%d@%4.4s\n", fb->width, fb->height, + (char *)&fb->pixel_format); + + for (i = 0; i < n; i++) { + seq_printf(m, " %d: offset=%d pitch=%d, obj: ", + i, fb->offsets[i], fb->pitches[i]); + drm_gem_cma_describe(fb_cma->obj[i], m); + } +} +EXPORT_SYMBOL_GPL(drm_fb_cma_describe); + +/** + * drm_fb_cma_debugfs_show() - Helper to list CMA framebuffer objects + * in debugfs. + */ +int drm_fb_cma_debugfs_show(struct seq_file *m, void *arg) +{ + struct drm_info_node *node = (struct drm_info_node *) m->private; + struct drm_device *dev = node->minor->dev; + struct drm_framebuffer *fb; + int ret; + + ret = mutex_lock_interruptible(&dev->mode_config.mutex); + if (ret) + return ret; + + ret = mutex_lock_interruptible(&dev->struct_mutex); + if (ret) { + mutex_unlock(&dev->mode_config.mutex); + return ret; + } + + list_for_each_entry(fb, &dev->mode_config.fb_list, head) + drm_fb_cma_describe(fb, m); + + mutex_unlock(&dev->struct_mutex); + mutex_unlock(&dev->mode_config.mutex); + + return 0; +} +EXPORT_SYMBOL_GPL(drm_fb_cma_debugfs_show); +#endif + static struct fb_ops drm_fbdev_cma_ops = { .owner = THIS_MODULE, .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 1aa8fee..0a7e011 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, return drm_gem_handle_delete(file_priv, handle); } EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy); + +#ifdef CONFIG_DEBUG_FS +void drm_gem_cma_describe(struct drm_gem_cma_object *cma_obj, struct seq_file *m) +{ + struct drm_gem_object *obj = &cma_obj->base; + struct drm_device *dev = obj->dev; + uint64_t off = 0; + + WARN_ON(!mutex_is_locked(&dev->struct_mutex)); + + if (obj->map_list.map) + off = (uint64_t)obj->map_list.hash.key; + + seq_printf(m, "%2d (%2d) %08llx %08Zx %p %d", + obj->name, obj->refcount.refcount.counter, + off, cma_obj->paddr, cma_obj->vaddr, obj->size); + + seq_printf(m, "\n"); +} +EXPORT_SYMBOL_GPL(drm_gem_cma_describe); +#endif diff --git a/include/drm/drm_fb_cma_helper.h b/include/drm/drm_fb_cma_helper.h index 76c7098..4a3fc24 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, struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb, unsigned int plane); +#ifdef CONFIG_DEBUG_FS +void drm_fb_cma_describe(struct drm_framebuffer *fb, struct seq_file *m); +int drm_fb_cma_debugfs_show(struct seq_file *m, void *arg); +#endif + #endif diff --git a/include/drm/drm_gem_cma_helper.h b/include/drm/drm_gem_cma_helper.h index f0f6b1a..63397ce 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, extern const struct vm_operations_struct drm_gem_cma_vm_ops; +#ifdef CONFIG_DEBUG_FS +void drm_gem_cma_describe(struct drm_gem_cma_object *obj, struct seq_file *m); +#endif + #endif /* __DRM_GEM_CMA_HELPER_H__ */