brcm2708: update to latest patches from RPi Foundation
[openwrt/staging/dedeckeh.git] / target / linux / brcm2708 / patches-4.19 / 950-0110-drm-vc4-Add-missing-enable-disable-vblank-handlers-i.patch
diff --git a/target/linux/brcm2708/patches-4.19/950-0110-drm-vc4-Add-missing-enable-disable-vblank-handlers-i.patch b/target/linux/brcm2708/patches-4.19/950-0110-drm-vc4-Add-missing-enable-disable-vblank-handlers-i.patch
new file mode 100644 (file)
index 0000000..fbccc12
--- /dev/null
@@ -0,0 +1,79 @@
+From 10d8194f8415a69d3ea049450e86e14572591a71 Mon Sep 17 00:00:00 2001
+From: Eric Anholt <eric@anholt.net>
+Date: Tue, 30 Jan 2018 14:21:02 -0800
+Subject: [PATCH] drm/vc4: Add missing enable/disable vblank handlers
+ in fkms.
+
+Fixes hang at boot in 4.14.
+
+Signed-off-by: Eric Anholt <eric@anholt.net>
+---
+ drivers/gpu/drm/vc4/vc4_crtc.c         | 14 --------------
+ drivers/gpu/drm/vc4/vc4_firmware_kms.c | 15 +++++++++++++++
+ 2 files changed, 15 insertions(+), 14 deletions(-)
+
+--- a/drivers/gpu/drm/vc4/vc4_crtc.c
++++ b/drivers/gpu/drm/vc4/vc4_crtc.c
+@@ -764,15 +764,8 @@ static void vc4_crtc_atomic_flush(struct
+ static int vc4_enable_vblank(struct drm_crtc *crtc)
+ {
+-      struct drm_device *dev = crtc->dev;
+-      struct vc4_dev *vc4 = to_vc4_dev(dev);
+       struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
+-      if (vc4->firmware_kms) {
+-              /* XXX: Can we mask the SMI interrupt? */
+-              return 0;
+-      }
+-
+       CRTC_WRITE(PV_INTEN, PV_INT_VFP_START);
+       return 0;
+@@ -780,15 +773,8 @@ static int vc4_enable_vblank(struct drm_
+ static void vc4_disable_vblank(struct drm_crtc *crtc)
+ {
+-      struct drm_device *dev = crtc->dev;
+-      struct vc4_dev *vc4 = to_vc4_dev(dev);
+       struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
+-      if (vc4->firmware_kms) {
+-              /* XXX: Can we mask the SMI interrupt? */
+-              return;
+-      }
+-
+       CRTC_WRITE(PV_INTEN, 0);
+ }
+--- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
++++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
+@@ -433,6 +433,19 @@ static int vc4_page_flip(struct drm_crtc
+       return drm_atomic_helper_page_flip(crtc, fb, event, flags, ctx);
+ }
++static int vc4_fkms_enable_vblank(struct drm_crtc *crtc)
++{
++      /* XXX: Need a way to enable/disable the interrupt, to avoid
++       * DRM warnings at boot time.
++       */
++
++      return 0;
++}
++
++static void vc4_fkms_disable_vblank(struct drm_crtc *crtc)
++{
++}
++
+ static const struct drm_crtc_funcs vc4_crtc_funcs = {
+       .set_config = drm_atomic_helper_set_config,
+       .destroy = drm_crtc_cleanup,
+@@ -443,6 +456,8 @@ static const struct drm_crtc_funcs vc4_c
+       .reset = drm_atomic_helper_crtc_reset,
+       .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
+       .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
++      .enable_vblank = vc4_fkms_enable_vblank,
++      .disable_vblank = vc4_fkms_disable_vblank,
+ };
+ static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = {