aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.4/0441-drm-vc4-Start-switching-to-using-debugfs_reg32-helpe.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708/patches-4.4/0441-drm-vc4-Start-switching-to-using-debugfs_reg32-helpe.patch')
-rw-r--r--target/linux/brcm2708/patches-4.4/0441-drm-vc4-Start-switching-to-using-debugfs_reg32-helpe.patch156
1 files changed, 156 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.4/0441-drm-vc4-Start-switching-to-using-debugfs_reg32-helpe.patch b/target/linux/brcm2708/patches-4.4/0441-drm-vc4-Start-switching-to-using-debugfs_reg32-helpe.patch
new file mode 100644
index 0000000000..17fcdeec0b
--- /dev/null
+++ b/target/linux/brcm2708/patches-4.4/0441-drm-vc4-Start-switching-to-using-debugfs_reg32-helpe.patch
@@ -0,0 +1,156 @@
+From 65b36b9316eb06fa8fb7163206dc8878d36091ae Mon Sep 17 00:00:00 2001
+From: Eric Anholt <eric@anholt.net>
+Date: Fri, 20 May 2016 16:24:47 -0700
+Subject: [PATCH] drm/vc4: Start switching to using debugfs_reg32 helpers for
+ debugfs.
+
+Every file was defining its own little struct and dumping for the
+regs, when there's a helper in debugfs for doing just this. However,
+instead of printing:
+
+PV_HORZA (0x000c): 0x00000000
+
+we now print:
+
+PV_HORZA = 0x00000000
+
+Signed-off-by: Eric Anholt <eric@anholt.net>
+---
+ drivers/gpu/drm/vc4/vc4_crtc.c | 48 ++++++++++++++++--------------------------
+ drivers/gpu/drm/vc4/vc4_drv.c | 13 ++++++++++++
+ drivers/gpu/drm/vc4/vc4_drv.h | 6 ++++++
+ 3 files changed, 37 insertions(+), 30 deletions(-)
+
+--- a/drivers/gpu/drm/vc4/vc4_crtc.c
++++ b/drivers/gpu/drm/vc4/vc4_crtc.c
+@@ -35,6 +35,7 @@
+ #include "drm_atomic_helper.h"
+ #include "drm_crtc_helper.h"
+ #include "linux/clk.h"
++#include "linux/debugfs.h"
+ #include "drm_fb_cma_helper.h"
+ #include "linux/component.h"
+ #include "linux/of_device.h"
+@@ -85,35 +86,25 @@ struct vc4_crtc_data {
+ #define CRTC_WRITE(offset, val) writel(val, vc4_crtc->regs + (offset))
+ #define CRTC_READ(offset) readl(vc4_crtc->regs + (offset))
+
+-#define CRTC_REG(reg) { reg, #reg }
+-static const struct {
+- u32 reg;
+- const char *name;
+-} crtc_regs[] = {
+- CRTC_REG(PV_CONTROL),
+- CRTC_REG(PV_V_CONTROL),
+- CRTC_REG(PV_VSYNCD_EVEN),
+- CRTC_REG(PV_HORZA),
+- CRTC_REG(PV_HORZB),
+- CRTC_REG(PV_VERTA),
+- CRTC_REG(PV_VERTB),
+- CRTC_REG(PV_VERTA_EVEN),
+- CRTC_REG(PV_VERTB_EVEN),
+- CRTC_REG(PV_INTEN),
+- CRTC_REG(PV_INTSTAT),
+- CRTC_REG(PV_STAT),
+- CRTC_REG(PV_HACT_ACT),
++static const struct debugfs_reg32 crtc_regs[] = {
++ VC4_DEBUG_REG(PV_CONTROL),
++ VC4_DEBUG_REG(PV_V_CONTROL),
++ VC4_DEBUG_REG(PV_VSYNCD_EVEN),
++ VC4_DEBUG_REG(PV_HORZA),
++ VC4_DEBUG_REG(PV_HORZB),
++ VC4_DEBUG_REG(PV_VERTA),
++ VC4_DEBUG_REG(PV_VERTB),
++ VC4_DEBUG_REG(PV_VERTA_EVEN),
++ VC4_DEBUG_REG(PV_VERTB_EVEN),
++ VC4_DEBUG_REG(PV_INTEN),
++ VC4_DEBUG_REG(PV_INTSTAT),
++ VC4_DEBUG_REG(PV_STAT),
++ VC4_DEBUG_REG(PV_HACT_ACT),
+ };
+
+ static void vc4_crtc_dump_regs(struct vc4_crtc *vc4_crtc)
+ {
+- int i;
+-
+- for (i = 0; i < ARRAY_SIZE(crtc_regs); i++) {
+- DRM_INFO("0x%04x (%s): 0x%08x\n",
+- crtc_regs[i].reg, crtc_regs[i].name,
+- CRTC_READ(crtc_regs[i].reg));
+- }
++ vc4_dump_regs32(crtc_regs, ARRAY_SIZE(crtc_regs), vc4_crtc->regs, "");
+ }
+
+ #ifdef CONFIG_DEBUG_FS
+@@ -136,11 +127,8 @@ int vc4_crtc_debugfs_regs(struct seq_fil
+ return 0;
+ vc4_crtc = to_vc4_crtc(crtc);
+
+- for (i = 0; i < ARRAY_SIZE(crtc_regs); i++) {
+- seq_printf(m, "%s (0x%04x): 0x%08x\n",
+- crtc_regs[i].name, crtc_regs[i].reg,
+- CRTC_READ(crtc_regs[i].reg));
+- }
++ debugfs_print_regs32(m, crtc_regs, ARRAY_SIZE(crtc_regs),
++ vc4_crtc->regs, "");
+
+ return 0;
+ }
+--- a/drivers/gpu/drm/vc4/vc4_drv.c
++++ b/drivers/gpu/drm/vc4/vc4_drv.c
+@@ -9,6 +9,7 @@
+
+ #include <linux/clk.h>
+ #include <linux/component.h>
++#include <linux/debugfs.h>
+ #include <linux/device.h>
+ #include <linux/io.h>
+ #include <linux/module.h>
+@@ -52,6 +53,18 @@ static void vc4_drm_preclose(struct drm_
+ vc4_cancel_page_flip(crtc, file);
+ }
+
++void vc4_dump_regs32(const struct debugfs_reg32 *regs, unsigned int num_regs,
++ void __iomem *base, const char *prefix)
++{
++ unsigned int i;
++
++ for (i = 0; i < num_regs; i++) {
++ DRM_INFO("%s0x%04lx (%s): 0x%08x\n",
++ prefix, regs[i].offset, regs[i].name,
++ readl(base + regs[i].offset));
++ }
++}
++
+ static void vc4_lastclose(struct drm_device *dev)
+ {
+ struct vc4_dev *vc4 = to_vc4_dev(dev);
+--- a/drivers/gpu/drm/vc4/vc4_drv.h
++++ b/drivers/gpu/drm/vc4/vc4_drv.h
+@@ -9,6 +9,8 @@
+ #include "drmP.h"
+ #include "drm_gem_cma_helper.h"
+
++struct debugfs_reg32;
++
+ struct vc4_dev {
+ struct drm_device *dev;
+
+@@ -207,6 +209,8 @@ to_vc4_encoder(struct drm_encoder *encod
+ #define HVS_READ(offset) readl(vc4->hvs->regs + offset)
+ #define HVS_WRITE(offset, val) writel(val, vc4->hvs->regs + offset)
+
++#define VC4_DEBUG_REG(reg) { .name = #reg, .offset = reg }
++
+ struct vc4_exec_info {
+ /* Sequence number for this bin/render job. */
+ uint64_t seqno;
+@@ -418,6 +422,8 @@ void vc4_debugfs_cleanup(struct drm_mino
+
+ /* vc4_drv.c */
+ void __iomem *vc4_ioremap_regs(struct platform_device *dev, int index);
++void vc4_dump_regs32(const struct debugfs_reg32 *reg, unsigned int num_regs,
++ void __iomem *base, const char *prefix);
+
+ /* vc4_dpi.c */
+ extern struct platform_driver vc4_dpi_driver;