const struct vc4_crtc_data *crtc_data = vc4_crtc_to_vc4_crtc_data(vc4_crtc);
        const struct vc4_pv_data *pv_data = vc4_crtc_to_vc4_pv_data(vc4_crtc);
        struct vc4_dev *vc4 = to_vc4_dev(vc4_crtc->base.dev);
+
+       /*
+        * NOTE: Could we use register 0x68 (PV_HW_CFG1) to get the FIFO
+        * size?
+        */
        u32 fifo_len_bytes = pv_data->fifo_depth;
 
        /*
                 */
                CRTC_WRITE(PV_V_CONTROL,
                           PV_VCONTROL_CONTINUOUS |
+                          (vc4->gen >= VC4_GEN_6_C ? PV_VCONTROL_ODD_TIMING : 0) |
                           (is_dsi ? PV_VCONTROL_DSI : 0) |
                           PV_VCONTROL_INTERLACE |
                           (odd_field_first
        } else {
                CRTC_WRITE(PV_V_CONTROL,
                           PV_VCONTROL_CONTINUOUS |
+                          (vc4->gen >= VC4_GEN_6_C ? PV_VCONTROL_ODD_TIMING : 0) |
                           (is_dsi ? PV_VCONTROL_DSI : 0));
                CRTC_WRITE(PV_VSYNCD_EVEN, 0);
        }
        if (is_dsi)
                CRTC_WRITE(PV_HACT_ACT, mode->hdisplay * pixel_rep);
 
-       if (vc4->gen == VC4_GEN_5)
+       if (vc4->gen >= VC4_GEN_5)
                CRTC_WRITE(PV_MUX_CFG,
                           VC4_SET_FIELD(PV_MUX_CFG_RGB_PIXEL_MUX_MODE_NO_SWAP,
                                         PV_MUX_CFG_RGB_PIXEL_MUX_MODE));
 
+       if (vc4->gen >= VC4_GEN_6_C)
+               CRTC_WRITE(PV_PIPE_INIT_CTRL,
+                          VC4_SET_FIELD(1, PV_PIPE_INIT_CTRL_PV_INIT_WIDTH) |
+                          VC4_SET_FIELD(1, PV_PIPE_INIT_CTRL_PV_INIT_IDLE) |
+                          PV_PIPE_INIT_CTRL_PV_INIT_EN);
+
        CRTC_WRITE(PV_CONTROL, PV_CONTROL_FIFO_CLR |
                   vc4_crtc_get_fifo_full_level_bits(vc4_crtc, format) |
                   VC4_SET_FIELD(format, PV_CONTROL_FORMAT) |
        if (!(of_device_is_compatible(vc4_crtc->pdev->dev.of_node,
                                      "brcm,bcm2711-pixelvalve2") ||
              of_device_is_compatible(vc4_crtc->pdev->dev.of_node,
-                                     "brcm,bcm2711-pixelvalve4")))
+                                     "brcm,bcm2711-pixelvalve4") ||
+             of_device_is_compatible(vc4_crtc->pdev->dev.of_node,
+                                     "brcm,bcm2712-pixelvalve0") ||
+             of_device_is_compatible(vc4_crtc->pdev->dev.of_node,
+                                     "brcm,bcm2712-pixelvalve1")))
                return 0;
 
        if (!(CRTC_READ(PV_CONTROL) & PV_CONTROL_EN))
        },
 };
 
+const struct vc4_pv_data bcm2712_pv0_data = {
+       .base = {
+               .debugfs_name = "crtc0_regs",
+               .hvs_available_channels = BIT(0),
+               .hvs_output = 0,
+       },
+       .fifo_depth = 64,
+       .pixels_per_clock = 1,
+       .encoder_types = {
+               [0] = VC4_ENCODER_TYPE_HDMI0,
+       },
+};
+
+const struct vc4_pv_data bcm2712_pv1_data = {
+       .base = {
+               .debugfs_name = "crtc1_regs",
+               .hvs_available_channels = BIT(1),
+               .hvs_output = 1,
+       },
+       .fifo_depth = 64,
+       .pixels_per_clock = 1,
+       .encoder_types = {
+               [0] = VC4_ENCODER_TYPE_HDMI1,
+       },
+};
+
 static const struct of_device_id vc4_crtc_dt_match[] = {
        { .compatible = "brcm,bcm2835-pixelvalve0", .data = &bcm2835_pv0_data },
        { .compatible = "brcm,bcm2835-pixelvalve1", .data = &bcm2835_pv1_data },
        { .compatible = "brcm,bcm2711-pixelvalve2", .data = &bcm2711_pv2_data },
        { .compatible = "brcm,bcm2711-pixelvalve3", .data = &bcm2711_pv3_data },
        { .compatible = "brcm,bcm2711-pixelvalve4", .data = &bcm2711_pv4_data },
+       { .compatible = "brcm,bcm2712-pixelvalve0", .data = &bcm2712_pv0_data },
+       { .compatible = "brcm,bcm2712-pixelvalve1", .data = &bcm2712_pv1_data },
        {}
 };
 
 
 # define PV_CONTROL_EN                         BIT(0)
 
 #define PV_V_CONTROL                           0x04
+# define PV_VCONTROL_ODD_TIMING                        BIT(29)
 # define PV_VCONTROL_ODD_DELAY_MASK            VC4_MASK(22, 6)
 # define PV_VCONTROL_ODD_DELAY_SHIFT           6
 # define PV_VCONTROL_ODD_FIRST                 BIT(5)
 # define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_SHIFT   2
 # define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_NO_SWAP 8
 
+#define PV_PIPE_INIT_CTRL                      0x94
+# define PV_PIPE_INIT_CTRL_PV_INIT_WIDTH_MASK  VC4_MASK(11, 8)
+# define PV_PIPE_INIT_CTRL_PV_INIT_IDLE_MASK   VC4_MASK(7, 4)
+# define PV_PIPE_INIT_CTRL_PV_INIT_EN          BIT(0)
+
 #define SCALER_CHANNELS_COUNT                  3
 
 #define SCALER_DISPCTRL                         0x00000000