Skip to content

Commit d506644

Browse files
6by9pelwell
authored andcommitted
drm/vc4: Fix reading of frame count on GEN5 / Pi4
The frame count values moved within registers DISPSTAT1 and DISPSTAT2 with GEN5, so update the accessor function to accommodate that. Fixes: b51cd7a ("drm/vc4: hvs: Fix frame count register readout") Signed-off-by: Dave Stevenson <[email protected]>
1 parent dfc0490 commit d506644

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

drivers/gpu/drm/vc4/vc4_hvs.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -823,10 +823,28 @@ u8 vc4_hvs_get_fifo_frame_count(struct vc4_hvs *hvs, unsigned int fifo)
823823
if (!drm_dev_enter(drm, &idx))
824824
return 0;
825825

826-
if (vc4->gen >= VC4_GEN_6) {
826+
switch (vc4->gen) {
827+
case VC4_GEN_6:
827828
field = VC4_GET_FIELD(HVS_READ(SCALER6_DISPX_STATUS(fifo)),
828829
SCALER6_DISPX_STATUS_FRCNT);
829-
} else {
830+
break;
831+
case VC4_GEN_5:
832+
switch (fifo) {
833+
case 0:
834+
field = VC4_GET_FIELD(HVS_READ(SCALER_DISPSTAT1),
835+
SCALER5_DISPSTAT1_FRCNT0);
836+
break;
837+
case 1:
838+
field = VC4_GET_FIELD(HVS_READ(SCALER_DISPSTAT1),
839+
SCALER5_DISPSTAT1_FRCNT1);
840+
break;
841+
case 2:
842+
field = VC4_GET_FIELD(HVS_READ(SCALER_DISPSTAT2),
843+
SCALER5_DISPSTAT2_FRCNT2);
844+
break;
845+
}
846+
break;
847+
case VC4_GEN_4:
830848
switch (fifo) {
831849
case 0:
832850
field = VC4_GET_FIELD(HVS_READ(SCALER_DISPSTAT1),
@@ -841,6 +859,7 @@ u8 vc4_hvs_get_fifo_frame_count(struct vc4_hvs *hvs, unsigned int fifo)
841859
SCALER_DISPSTAT2_FRCNT2);
842860
break;
843861
}
862+
break;
844863
}
845864

846865
drm_dev_exit(idx);

drivers/gpu/drm/vc4/vc4_regs.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,10 @@
424424
# define SCALER_DISPSTAT1_FRCNT0_SHIFT 18
425425
# define SCALER_DISPSTAT1_FRCNT1_MASK VC4_MASK(17, 12)
426426
# define SCALER_DISPSTAT1_FRCNT1_SHIFT 12
427+
# define SCALER5_DISPSTAT1_FRCNT0_MASK VC4_MASK(25, 20)
428+
# define SCALER5_DISPSTAT1_FRCNT0_SHIFT 20
429+
# define SCALER5_DISPSTAT1_FRCNT1_MASK VC4_MASK(19, 14)
430+
# define SCALER5_DISPSTAT1_FRCNT1_SHIFT 14
427431

428432
#define SCALER_DISPSTATX(x) (SCALER_DISPSTAT0 + \
429433
(x) * (SCALER_DISPSTAT1 - \
@@ -442,6 +446,8 @@
442446
#define SCALER_DISPSTAT2 0x00000068
443447
# define SCALER_DISPSTAT2_FRCNT2_MASK VC4_MASK(17, 12)
444448
# define SCALER_DISPSTAT2_FRCNT2_SHIFT 12
449+
# define SCALER5_DISPSTAT2_FRCNT2_MASK VC4_MASK(19, 14)
450+
# define SCALER5_DISPSTAT2_FRCNT2_SHIFT 14
445451

446452
#define SCALER_DISPBASE2 0x0000006c
447453
#define SCALER_DISPALPHA2 0x00000070

0 commit comments

Comments
 (0)