35
35
#include <drm/drm_atomic.h>
36
36
#include <drm/drm_atomic_helper.h>
37
37
#include <drm/drm_atomic_uapi.h>
38
+ #include <drm/drm_print.h>
38
39
#include <drm/drm_probe_helper.h>
39
40
#include <linux/clk.h>
40
41
#include <drm/drm_fb_cma_helper.h>
@@ -67,43 +68,29 @@ to_vc4_crtc_state(struct drm_crtc_state *crtc_state)
67
68
#define CRTC_WRITE (offset , val ) writel(val, vc4_crtc->regs + (offset))
68
69
#define CRTC_READ (offset ) readl(vc4_crtc->regs + (offset))
69
70
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 ),
88
85
};
89
86
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
-
101
87
#ifdef CONFIG_DEBUG_FS
102
88
int vc4_crtc_debugfs_regs (struct seq_file * m , void * unused )
103
89
{
104
90
struct drm_info_node * node = (struct drm_info_node * )m -> private ;
105
91
struct drm_device * dev = node -> minor -> dev ;
106
92
int crtc_index = (uintptr_t )node -> info_ent -> data ;
93
+ struct drm_printer p = drm_seq_file_printer (m );
107
94
struct drm_crtc * crtc ;
108
95
struct vc4_crtc * vc4_crtc ;
109
96
int i ;
@@ -118,11 +105,7 @@ int vc4_crtc_debugfs_regs(struct seq_file *m, void *unused)
118
105
return 0 ;
119
106
vc4_crtc = to_vc4_crtc (crtc );
120
107
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 );
126
109
127
110
return 0 ;
128
111
}
@@ -434,8 +417,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc)
434
417
bool debug_dump_regs = false;
435
418
436
419
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 );
439
424
}
440
425
441
426
if (vc4_crtc -> channel == 2 ) {
@@ -476,8 +461,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc)
476
461
vc4_crtc_lut_load (crtc );
477
462
478
463
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 );
481
468
}
482
469
}
483
470
@@ -1177,11 +1164,16 @@ static int vc4_crtc_bind(struct device *dev, struct device *master, void *data)
1177
1164
if (!match )
1178
1165
return - ENODEV ;
1179
1166
vc4_crtc -> data = match -> data ;
1167
+ vc4_crtc -> pdev = pdev ;
1180
1168
1181
1169
vc4_crtc -> regs = vc4_ioremap_regs (pdev , 0 );
1182
1170
if (IS_ERR (vc4_crtc -> regs ))
1183
1171
return PTR_ERR (vc4_crtc -> regs );
1184
1172
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
+
1185
1177
/* For now, we create just the primary and the legacy cursor
1186
1178
* planes. We should be able to stack more planes on easily,
1187
1179
* but to do that we would need to compute the bandwidth
0 commit comments