Skip to content

Commit da9a922

Browse files
committed
drm/vc4: Add a debugfs function for dumping the gamma tables
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
1 parent 5bb603a commit da9a922

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

drivers/gpu/drm/vc4/vc4_hvs.c

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,85 @@ static int vc4_hvs_debugfs_lbm_allocs(struct seq_file *m, void *data)
401401
return 0;
402402
}
403403

404+
static int vc6_hvs_debugfs_gamma(struct seq_file *m, void *data)
405+
{
406+
struct drm_debugfs_entry *entry = m->private;
407+
struct drm_device *dev = entry->dev;
408+
struct vc4_dev *vc4 = to_vc4_dev(dev);
409+
struct vc4_hvs *hvs = vc4->hvs;
410+
struct drm_printer p = drm_seq_file_printer(m);
411+
unsigned int i, chan;
412+
u32 dispstat, dither_gamma;
413+
414+
for (chan = 0; chan < SCALER_CHANNELS_COUNT; chan++) {
415+
u32 x_c, grad;
416+
u32 offset = SCALER6D_DSPGAMMA_START +
417+
chan * SCALER6D_DSPGAMMA_CHAN_OFFSET;
418+
419+
dispstat = VC4_GET_FIELD(HVS_READ(SCALER6_DISPX_STATUS(chan)),
420+
SCALER6_DISPX_STATUS_MODE);
421+
if (dispstat == SCALER6_DISPX_STATUS_MODE_DISABLED ||
422+
dispstat == SCALER6_DISPX_STATUS_MODE_EOF) {
423+
drm_printf(&p, "HVS channel %u: disabled\n", chan);
424+
continue;
425+
}
426+
427+
dither_gamma = HVS_READ(SCALER6D_DITHERGAMMA);
428+
if (!(dither_gamma & SCALER6D_DITHERGAMMA_GAMMA(chan))) {
429+
drm_printf(&p, "HVS channel %u: Gamma disabled\n", chan);
430+
continue;
431+
}
432+
433+
drm_printf(&p, "HVS channel %u:\n", chan);
434+
drm_printf(&p, " blue:\n");
435+
for (i = 0; i < SCALER6D_DSPGAMMA_NUM_POINTS; i++, offset += 8) {
436+
x_c = HVS_READ(offset);
437+
grad = HVS_READ(offset + 4);
438+
drm_printf(&p, " %08x %08x - x %u, c %u, grad %u\n",
439+
x_c, grad,
440+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_X),
441+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_C),
442+
grad);
443+
}
444+
drm_printf(&p, " green:\n");
445+
for (i = 0; i < SCALER6D_DSPGAMMA_NUM_POINTS; i++, offset += 8) {
446+
x_c = HVS_READ(offset);
447+
grad = HVS_READ(offset + 4);
448+
drm_printf(&p, " %08x %08x - x %u, c %u, grad %u\n",
449+
x_c, grad,
450+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_X),
451+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_C),
452+
grad);
453+
}
454+
drm_printf(&p, " red:\n");
455+
for (i = 0; i < SCALER6D_DSPGAMMA_NUM_POINTS; i++, offset += 8) {
456+
x_c = HVS_READ(offset);
457+
grad = HVS_READ(offset + 4);
458+
drm_printf(&p, " %08x %08x - x %u, c %u, grad %u\n",
459+
x_c, grad,
460+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_X),
461+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_C),
462+
grad);
463+
}
464+
465+
/* Alpha only valid on channel 2 */
466+
if (chan != 2)
467+
continue;
468+
469+
drm_printf(&p, " alpha:\n");
470+
for (i = 0; i < SCALER6D_DSPGAMMA_NUM_POINTS; i++, offset += 8) {
471+
x_c = HVS_READ(offset);
472+
grad = HVS_READ(offset + 4);
473+
drm_printf(&p, " %08x %08x - x %u, c %u, grad %u\n",
474+
x_c, grad,
475+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_X),
476+
VC4_GET_FIELD(x_c, SCALER6D_DSPGAMMA_OFF_C),
477+
grad);
478+
}
479+
}
480+
return 0;
481+
}
482+
404483
/* The filter kernel is composed of dwords each containing 3 9-bit
405484
* signed integers packed next to each other.
406485
*/
@@ -1623,6 +1702,8 @@ int vc4_hvs_debugfs_init(struct drm_minor *minor)
16231702
if (vc4->gen >= VC4_GEN_6_C) {
16241703
drm_debugfs_add_file(drm, "hvs_dlists", vc6_hvs_debugfs_dlist, NULL);
16251704
drm_debugfs_add_file(drm, "hvs_upm", vc6_hvs_debugfs_upm_allocs, NULL);
1705+
if (vc4->gen >= VC4_GEN_6_D)
1706+
drm_debugfs_add_file(drm, "gamma", vc6_hvs_debugfs_gamma, NULL);
16261707
} else {
16271708
drm_debugfs_add_file(drm, "hvs_dlists", vc4_hvs_debugfs_dlist, NULL);
16281709
}

0 commit comments

Comments
 (0)