drm/vc4: Alter the HDMI state machine clock calc to allow for 1920x1200
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Wed, 25 Mar 2020 18:22:40 +0000 (18:22 +0000)
committerpopcornmix <popcornmix@gmail.com>
Wed, 1 Jul 2020 15:33:42 +0000 (16:33 +0100)
Whilst the documentation for BCM2835 states that the HDMI state machine
clock needs to be 108% of the pixel clock, other documentation says
that it only has to be greater than the pixel clock. The firmware
uses 101%, and that allows 1920x1200@60Hz to work within the
constraint of the HSM clock being < 163.68MHz.

Adopt 101%, and increase the maximum pixel clock for vc4 to 162MHz
so that it too supports 1920x1200@60.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drivers/gpu/drm/vc4/vc4_hdmi.c

index f89734b..02419aa 100644 (file)
@@ -581,10 +581,11 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
        }
 
        /*
-        * The HSM rate needs to be at 108% of the pixel clock, with a
-        * minimum of 108MHz.
+        * The HSM rate needs to be slightly greater than the pixel clock, with
+        * a minimum of 108MHz.
+        * Use 101% as this is what the firmware uses.
         */
-       hsm_rate = max_t(unsigned long, 108000000, (pixel_rate / 100) * 108);
+       hsm_rate = max_t(unsigned long, 108000000, (pixel_rate / 100) * 101);
        ret = clk_set_rate(vc4_hdmi->hsm_clock, hsm_rate);
        if (ret) {
                DRM_ERROR("Failed to set HSM clock rate: %d\n", ret);
@@ -1730,7 +1731,7 @@ static int vc4_hdmi_dev_remove(struct platform_device *pdev)
 }
 
 static const struct vc4_hdmi_variant bcm2835_variant = {
-       .max_pixel_clock        = 148500000,
+       .max_pixel_clock        = 162000000,
        .audio_available        = true,
        .cec_available          = true,
        .registers              = vc4_hdmi_fields,