aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.14/950-0179-drm-vc4-Reject-HDMI-modes-with-too-high-of-clocks.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708/patches-4.14/950-0179-drm-vc4-Reject-HDMI-modes-with-too-high-of-clocks.patch')
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0179-drm-vc4-Reject-HDMI-modes-with-too-high-of-clocks.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0179-drm-vc4-Reject-HDMI-modes-with-too-high-of-clocks.patch b/target/linux/brcm2708/patches-4.14/950-0179-drm-vc4-Reject-HDMI-modes-with-too-high-of-clocks.patch
new file mode 100644
index 0000000000..bef2811458
--- /dev/null
+++ b/target/linux/brcm2708/patches-4.14/950-0179-drm-vc4-Reject-HDMI-modes-with-too-high-of-clocks.patch
@@ -0,0 +1,44 @@
+From ee3cf448adf29e8948c40d251f87d87a9817515c Mon Sep 17 00:00:00 2001
+From: Eric Anholt <eric@anholt.net>
+Date: Wed, 20 Sep 2017 15:59:34 -0700
+Subject: [PATCH 179/454] drm/vc4: Reject HDMI modes with too high of clocks.
+
+Peter Robinson reported issues on Fedora with 4k monitors not having
+their modes filtered down to 1920x1080 on Raspberry Pi.
+
+v2: Fix vc5 typo in place of vc4.
+
+Cc: Peter Robinson <pbrobinson@redhat.com>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Link: https://patchwork.freedesktop.org/patch/msgid/20170920225935.14566-1-eric@anholt.net
+Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> (v1)
+(cherry picked from commit 32e823c63e90f7535ea1cc5311d25c0233e1456d)
+---
+ drivers/gpu/drm/vc4/vc4_hdmi.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
+@@ -695,7 +695,22 @@ static void vc4_hdmi_encoder_enable(stru
+ }
+ }
+
++static enum drm_mode_status
++vc4_hdmi_encoder_mode_valid(struct drm_encoder *crtc,
++ const struct drm_display_mode *mode)
++{
++ /* HSM clock must be 108% of the pixel clock. Additionally,
++ * the AXI clock needs to be at least 25% of pixel clock, but
++ * HSM ends up being the limiting factor.
++ */
++ if (mode->clock > HSM_CLOCK_FREQ / (1000 * 108 / 100))
++ return MODE_CLOCK_HIGH;
++
++ return MODE_OK;
++}
++
+ static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
++ .mode_valid = vc4_hdmi_encoder_mode_valid,
+ .disable = vc4_hdmi_encoder_disable,
+ .enable = vc4_hdmi_encoder_enable,
+ };