@@ -361,7 +361,9 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
361361 bool is_dsi1 = vc4_encoder -> type == VC4_ENCODER_TYPE_DSI1 ;
362362 bool is_vec = vc4_encoder -> type == VC4_ENCODER_TYPE_VEC ;
363363 u32 format = is_dsi1 ? PV_CONTROL_FORMAT_DSIV_24 : PV_CONTROL_FORMAT_24 ;
364- u8 ppc = pv_data -> pixels_per_clock ;
364+ u8 ppc = (mode -> flags & DRM_MODE_FLAG_INTERLACE ) ?
365+ pv_data -> pixels_per_clock_int :
366+ pv_data -> pixels_per_clock ;
365367
366368 u16 vert_bp = mode -> crtc_vtotal - mode -> crtc_vsync_end ;
367369 u16 vert_sync = mode -> crtc_vsync_end - mode -> crtc_vsync_start ;
@@ -426,7 +428,8 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
426428 */
427429 CRTC_WRITE (PV_V_CONTROL ,
428430 PV_VCONTROL_CONTINUOUS |
429- (vc4 -> gen >= VC4_GEN_6_C ? PV_VCONTROL_ODD_TIMING : 0 ) |
431+ (vc4 -> gen >= VC4_GEN_6_C && ppc == 1 ?
432+ PV_VCONTROL_ODD_TIMING : 0 ) |
430433 (is_dsi ? PV_VCONTROL_DSI : 0 ) |
431434 PV_VCONTROL_INTERLACE |
432435 (odd_field_first
@@ -438,7 +441,8 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
438441 } else {
439442 CRTC_WRITE (PV_V_CONTROL ,
440443 PV_VCONTROL_CONTINUOUS |
441- (vc4 -> gen >= VC4_GEN_6_C ? PV_VCONTROL_ODD_TIMING : 0 ) |
444+ (vc4 -> gen >= VC4_GEN_6_C && ppc == 1 ?
445+ PV_VCONTROL_ODD_TIMING : 0 ) |
442446 (is_dsi ? PV_VCONTROL_DSI : 0 ));
443447 CRTC_WRITE (PV_VSYNCD_EVEN , 0 );
444448 }
@@ -1205,6 +1209,7 @@ const struct vc4_pv_data bcm2835_pv0_data = {
12051209 },
12061210 .fifo_depth = 64 ,
12071211 .pixels_per_clock = 1 ,
1212+ .pixels_per_clock_int = 1 ,
12081213 .encoder_types = {
12091214 [PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI0 ,
12101215 [PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_DPI ,
@@ -1220,6 +1225,7 @@ const struct vc4_pv_data bcm2835_pv1_data = {
12201225 },
12211226 .fifo_depth = 64 ,
12221227 .pixels_per_clock = 1 ,
1228+ .pixels_per_clock_int = 1 ,
12231229 .encoder_types = {
12241230 [PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI1 ,
12251231 [PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_SMI ,
@@ -1235,6 +1241,7 @@ const struct vc4_pv_data bcm2835_pv2_data = {
12351241 },
12361242 .fifo_depth = 64 ,
12371243 .pixels_per_clock = 1 ,
1244+ .pixels_per_clock_int = 1 ,
12381245 .encoder_types = {
12391246 [PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_HDMI0 ,
12401247 [PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
@@ -1250,6 +1257,7 @@ const struct vc4_pv_data bcm2711_pv0_data = {
12501257 },
12511258 .fifo_depth = 64 ,
12521259 .pixels_per_clock = 1 ,
1260+ .pixels_per_clock_int = 1 ,
12531261 .encoder_types = {
12541262 [0 ] = VC4_ENCODER_TYPE_DSI0 ,
12551263 [1 ] = VC4_ENCODER_TYPE_DPI ,
@@ -1265,6 +1273,7 @@ const struct vc4_pv_data bcm2711_pv1_data = {
12651273 },
12661274 .fifo_depth = 64 ,
12671275 .pixels_per_clock = 1 ,
1276+ .pixels_per_clock_int = 1 ,
12681277 .encoder_types = {
12691278 [0 ] = VC4_ENCODER_TYPE_DSI1 ,
12701279 [1 ] = VC4_ENCODER_TYPE_SMI ,
@@ -1280,6 +1289,7 @@ const struct vc4_pv_data bcm2711_pv2_data = {
12801289 },
12811290 .fifo_depth = 256 ,
12821291 .pixels_per_clock = 2 ,
1292+ .pixels_per_clock_int = 2 ,
12831293 .encoder_types = {
12841294 [0 ] = VC4_ENCODER_TYPE_HDMI0 ,
12851295 },
@@ -1294,6 +1304,7 @@ const struct vc4_pv_data bcm2711_pv3_data = {
12941304 },
12951305 .fifo_depth = 64 ,
12961306 .pixels_per_clock = 1 ,
1307+ .pixels_per_clock_int = 1 ,
12971308 .encoder_types = {
12981309 [PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
12991310 },
@@ -1308,6 +1319,7 @@ const struct vc4_pv_data bcm2711_pv4_data = {
13081319 },
13091320 .fifo_depth = 64 ,
13101321 .pixels_per_clock = 2 ,
1322+ .pixels_per_clock_int = 2 ,
13111323 .encoder_types = {
13121324 [0 ] = VC4_ENCODER_TYPE_HDMI1 ,
13131325 },
@@ -1321,6 +1333,7 @@ const struct vc4_pv_data bcm2712_pv0_data = {
13211333 },
13221334 .fifo_depth = 64 ,
13231335 .pixels_per_clock = 1 ,
1336+ .pixels_per_clock_int = 2 ,
13241337 .encoder_types = {
13251338 [0 ] = VC4_ENCODER_TYPE_HDMI0 ,
13261339 },
@@ -1334,6 +1347,7 @@ const struct vc4_pv_data bcm2712_pv1_data = {
13341347 },
13351348 .fifo_depth = 64 ,
13361349 .pixels_per_clock = 1 ,
1350+ .pixels_per_clock_int = 2 ,
13371351 .encoder_types = {
13381352 [0 ] = VC4_ENCODER_TYPE_HDMI1 ,
13391353 },
0 commit comments