Skip to content

Commit 3051719

Browse files
committed
drm/vc4: Use drm_print_regset32() for our debug register dumping.
This removes a bunch of duplicated boilerplate for the debugfs vs runtime printk debug dumping. Signed-off-by: Eric Anholt <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Reviewed-by: Paul Kocialkowski <[email protected]>
1 parent 5f513cc commit 3051719

File tree

9 files changed

+350
-414
lines changed

9 files changed

+350
-414
lines changed

drivers/gpu/drm/vc4/vc4_crtc.c

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <drm/drm_atomic.h>
3636
#include <drm/drm_atomic_helper.h>
3737
#include <drm/drm_atomic_uapi.h>
38+
#include <drm/drm_print.h>
3839
#include <drm/drm_probe_helper.h>
3940
#include <linux/clk.h>
4041
#include <drm/drm_fb_cma_helper.h>
@@ -67,43 +68,29 @@ to_vc4_crtc_state(struct drm_crtc_state *crtc_state)
6768
#define CRTC_WRITE(offset, val) writel(val, vc4_crtc->regs + (offset))
6869
#define CRTC_READ(offset) readl(vc4_crtc->regs + (offset))
6970

70-
#define CRTC_REG(reg) { reg, #reg }
71-
static const struct {
72-
u32 reg;
73-
const char *name;
74-
} crtc_regs[] = {
75-
CRTC_REG(PV_CONTROL),
76-
CRTC_REG(PV_V_CONTROL),
77-
CRTC_REG(PV_VSYNCD_EVEN),
78-
CRTC_REG(PV_HORZA),
79-
CRTC_REG(PV_HORZB),
80-
CRTC_REG(PV_VERTA),
81-
CRTC_REG(PV_VERTB),
82-
CRTC_REG(PV_VERTA_EVEN),
83-
CRTC_REG(PV_VERTB_EVEN),
84-
CRTC_REG(PV_INTEN),
85-
CRTC_REG(PV_INTSTAT),
86-
CRTC_REG(PV_STAT),
87-
CRTC_REG(PV_HACT_ACT),
71+
static const struct debugfs_reg32 crtc_regs[] = {
72+
VC4_REG32(PV_CONTROL),
73+
VC4_REG32(PV_V_CONTROL),
74+
VC4_REG32(PV_VSYNCD_EVEN),
75+
VC4_REG32(PV_HORZA),
76+
VC4_REG32(PV_HORZB),
77+
VC4_REG32(PV_VERTA),
78+
VC4_REG32(PV_VERTB),
79+
VC4_REG32(PV_VERTA_EVEN),
80+
VC4_REG32(PV_VERTB_EVEN),
81+
VC4_REG32(PV_INTEN),
82+
VC4_REG32(PV_INTSTAT),
83+
VC4_REG32(PV_STAT),
84+
VC4_REG32(PV_HACT_ACT),
8885
};
8986

90-
static void vc4_crtc_dump_regs(struct vc4_crtc *vc4_crtc)
91-
{
92-
int i;
93-
94-
for (i = 0; i < ARRAY_SIZE(crtc_regs); i++) {
95-
DRM_INFO("0x%04x (%s): 0x%08x\n",
96-
crtc_regs[i].reg, crtc_regs[i].name,
97-
CRTC_READ(crtc_regs[i].reg));
98-
}
99-
}
100-
10187
#ifdef CONFIG_DEBUG_FS
10288
int vc4_crtc_debugfs_regs(struct seq_file *m, void *unused)
10389
{
10490
struct drm_info_node *node = (struct drm_info_node *)m->private;
10591
struct drm_device *dev = node->minor->dev;
10692
int crtc_index = (uintptr_t)node->info_ent->data;
93+
struct drm_printer p = drm_seq_file_printer(m);
10794
struct drm_crtc *crtc;
10895
struct vc4_crtc *vc4_crtc;
10996
int i;
@@ -118,11 +105,7 @@ int vc4_crtc_debugfs_regs(struct seq_file *m, void *unused)
118105
return 0;
119106
vc4_crtc = to_vc4_crtc(crtc);
120107

121-
for (i = 0; i < ARRAY_SIZE(crtc_regs); i++) {
122-
seq_printf(m, "%s (0x%04x): 0x%08x\n",
123-
crtc_regs[i].name, crtc_regs[i].reg,
124-
CRTC_READ(crtc_regs[i].reg));
125-
}
108+
drm_print_regset32(&p, &vc4_crtc->regset);
126109

127110
return 0;
128111
}
@@ -434,8 +417,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc)
434417
bool debug_dump_regs = false;
435418

436419
if (debug_dump_regs) {
437-
DRM_INFO("CRTC %d regs before:\n", drm_crtc_index(crtc));
438-
vc4_crtc_dump_regs(vc4_crtc);
420+
struct drm_printer p = drm_info_printer(&vc4_crtc->pdev->dev);
421+
dev_info(&vc4_crtc->pdev->dev, "CRTC %d regs before:\n",
422+
drm_crtc_index(crtc));
423+
drm_print_regset32(&p, &vc4_crtc->regset);
439424
}
440425

441426
if (vc4_crtc->channel == 2) {
@@ -476,8 +461,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc)
476461
vc4_crtc_lut_load(crtc);
477462

478463
if (debug_dump_regs) {
479-
DRM_INFO("CRTC %d regs after:\n", drm_crtc_index(crtc));
480-
vc4_crtc_dump_regs(vc4_crtc);
464+
struct drm_printer p = drm_info_printer(&vc4_crtc->pdev->dev);
465+
dev_info(&vc4_crtc->pdev->dev, "CRTC %d regs after:\n",
466+
drm_crtc_index(crtc));
467+
drm_print_regset32(&p, &vc4_crtc->regset);
481468
}
482469
}
483470

@@ -1177,11 +1164,16 @@ static int vc4_crtc_bind(struct device *dev, struct device *master, void *data)
11771164
if (!match)
11781165
return -ENODEV;
11791166
vc4_crtc->data = match->data;
1167+
vc4_crtc->pdev = pdev;
11801168

11811169
vc4_crtc->regs = vc4_ioremap_regs(pdev, 0);
11821170
if (IS_ERR(vc4_crtc->regs))
11831171
return PTR_ERR(vc4_crtc->regs);
11841172

1173+
vc4_crtc->regset.base = vc4_crtc->regs;
1174+
vc4_crtc->regset.regs = crtc_regs;
1175+
vc4_crtc->regset.nregs = ARRAY_SIZE(crtc_regs);
1176+
11851177
/* For now, we create just the primary and the legacy cursor
11861178
* planes. We should be able to stack more planes on easily,
11871179
* but to do that we would need to compute the bandwidth

drivers/gpu/drm/vc4/vc4_dpi.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ struct vc4_dpi {
101101

102102
struct clk *pixel_clock;
103103
struct clk *core_clock;
104+
105+
struct debugfs_regset32 regset;
104106
};
105107

106108
#define DPI_READ(offset) readl(dpi->regs + (offset))
@@ -118,13 +120,9 @@ to_vc4_dpi_encoder(struct drm_encoder *encoder)
118120
return container_of(encoder, struct vc4_dpi_encoder, base.base);
119121
}
120122

121-
#define DPI_REG(reg) { reg, #reg }
122-
static const struct {
123-
u32 reg;
124-
const char *name;
125-
} dpi_regs[] = {
126-
DPI_REG(DPI_C),
127-
DPI_REG(DPI_ID),
123+
static const struct debugfs_reg32 dpi_regs[] = {
124+
VC4_REG32(DPI_C),
125+
VC4_REG32(DPI_ID),
128126
};
129127

130128
#ifdef CONFIG_DEBUG_FS
@@ -134,16 +132,12 @@ int vc4_dpi_debugfs_regs(struct seq_file *m, void *unused)
134132
struct drm_device *dev = node->minor->dev;
135133
struct vc4_dev *vc4 = to_vc4_dev(dev);
136134
struct vc4_dpi *dpi = vc4->dpi;
137-
int i;
135+
struct drm_printer p = drm_seq_file_printer(m);
138136

139137
if (!dpi)
140138
return 0;
141139

142-
for (i = 0; i < ARRAY_SIZE(dpi_regs); i++) {
143-
seq_printf(m, "%s (0x%04x): 0x%08x\n",
144-
dpi_regs[i].name, dpi_regs[i].reg,
145-
DPI_READ(dpi_regs[i].reg));
146-
}
140+
drm_print_regset32(&p, &dpi->regset);
147141

148142
return 0;
149143
}
@@ -314,6 +308,9 @@ static int vc4_dpi_bind(struct device *dev, struct device *master, void *data)
314308
dpi->regs = vc4_ioremap_regs(pdev, 0);
315309
if (IS_ERR(dpi->regs))
316310
return PTR_ERR(dpi->regs);
311+
dpi->regset.base = dpi->regs;
312+
dpi->regset.regs = dpi_regs;
313+
dpi->regset.nregs = ARRAY_SIZE(dpi_regs);
317314

318315
if (DPI_READ(DPI_ID) != DPI_ID_VALUE) {
319316
dev_err(dev, "Port returned 0x%08x for ID instead of 0x%08x\n",

drivers/gpu/drm/vc4/vc4_drv.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ struct vc4_v3d {
296296
struct platform_device *pdev;
297297
void __iomem *regs;
298298
struct clk *clk;
299+
struct debugfs_regset32 regset;
299300
};
300301

301302
struct vc4_hvs {
@@ -312,6 +313,7 @@ struct vc4_hvs {
312313
spinlock_t mm_lock;
313314

314315
struct drm_mm_node mitchell_netravali_filter;
316+
struct debugfs_regset32 regset;
315317
};
316318

317319
struct vc4_plane {
@@ -431,6 +433,7 @@ struct vc4_crtc_data {
431433

432434
struct vc4_crtc {
433435
struct drm_crtc base;
436+
struct platform_device *pdev;
434437
const struct vc4_crtc_data *data;
435438
void __iomem *regs;
436439

@@ -447,6 +450,8 @@ struct vc4_crtc {
447450
u32 cob_size;
448451

449452
struct drm_pending_vblank_event *event;
453+
454+
struct debugfs_regset32 regset;
450455
};
451456

452457
static inline struct vc4_crtc *
@@ -460,6 +465,8 @@ to_vc4_crtc(struct drm_crtc *crtc)
460465
#define HVS_READ(offset) readl(vc4->hvs->regs + offset)
461466
#define HVS_WRITE(offset, val) writel(val, vc4->hvs->regs + offset)
462467

468+
#define VC4_REG32(reg) { .name = #reg, .offset = reg }
469+
463470
struct vc4_exec_info {
464471
/* Sequence number for this bin/render job. */
465472
uint64_t seqno;

0 commit comments

Comments
 (0)