diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0608-drm-vc4-Kick-the-core-clock-up-during-a-mode-change.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0608-drm-vc4-Kick-the-core-clock-up-during-a-mode-change.patch | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0608-drm-vc4-Kick-the-core-clock-up-during-a-mode-change.patch b/target/linux/bcm27xx/patches-5.4/950-0608-drm-vc4-Kick-the-core-clock-up-during-a-mode-change.patch deleted file mode 100644 index 871d86a7a9..0000000000 --- a/target/linux/bcm27xx/patches-5.4/950-0608-drm-vc4-Kick-the-core-clock-up-during-a-mode-change.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 289c29b96fcc6cbe5c966fb0cc9e1bb8efbdd9dc Mon Sep 17 00:00:00 2001 -From: Dave Stevenson <dave.stevenson@raspberrypi.com> -Date: Thu, 26 Mar 2020 15:32:19 +0000 -Subject: [PATCH] drm/vc4: Kick the core clock up during a mode change - -Experimental commit to kick the core clock up during mode -switching. This makes mode switching far more reliable, and -mimics what the firmware does. - -Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> ---- - arch/arm/boot/dts/bcm2711.dtsi | 1 + - drivers/gpu/drm/vc4/vc4_drv.h | 2 ++ - drivers/gpu/drm/vc4/vc4_hvs.c | 7 +++++++ - drivers/gpu/drm/vc4/vc4_kms.c | 6 ++++++ - 4 files changed, 16 insertions(+) - ---- a/arch/arm/boot/dts/bcm2711.dtsi -+++ b/arch/arm/boot/dts/bcm2711.dtsi -@@ -306,6 +306,7 @@ - }; - - hvs@7e400000 { -+ clocks = <&firmware_clocks 4>; - interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; - }; - ---- a/drivers/gpu/drm/vc4/vc4_drv.h -+++ b/drivers/gpu/drm/vc4/vc4_drv.h -@@ -326,6 +326,8 @@ struct vc4_hvs { - void __iomem *regs; - u32 __iomem *dlist; - -+ struct clk *core_clk; -+ - /* Memory manager for CRTCs to allocate space in the display - * list. Units are dwords. - */ ---- a/drivers/gpu/drm/vc4/vc4_hvs.c -+++ b/drivers/gpu/drm/vc4/vc4_hvs.c -@@ -19,6 +19,7 @@ - * each CRTC. - */ - -+#include <linux/clk.h> - #include <linux/component.h> - #include <linux/platform_device.h> - -@@ -239,6 +240,12 @@ static int vc4_hvs_bind(struct device *d - hvs->regset.regs = hvs_regs; - hvs->regset.nregs = ARRAY_SIZE(hvs_regs); - -+ hvs->core_clk = devm_clk_get(&pdev->dev, NULL); -+ if (IS_ERR(hvs->core_clk)) { -+ dev_err(&pdev->dev, "Couldn't get core clock\n"); -+ return PTR_ERR(hvs->regs); -+ } -+ - hvs_version = readl(hvs->regs + SCALER_DISPLSTAT) >> 24; - if (hvs_version >= 0x40) - hvs->hvs5 = true; ---- a/drivers/gpu/drm/vc4/vc4_kms.c -+++ b/drivers/gpu/drm/vc4/vc4_kms.c -@@ -13,6 +13,7 @@ - - #include <linux/bitfield.h> - #include <linux/bitops.h> -+#include <linux/clk.h> - - #include <drm/drm_atomic.h> - #include <drm/drm_atomic_helper.h> -@@ -222,6 +223,7 @@ vc4_atomic_complete_commit(struct drm_at - { - struct drm_device *dev = state->dev; - struct vc4_dev *vc4 = to_vc4_dev(dev); -+ struct vc4_hvs *hvs = vc4->hvs; - struct vc4_crtc *vc4_crtc; - int i; - -@@ -237,6 +239,8 @@ vc4_atomic_complete_commit(struct drm_at - vc4_hvs_mask_underrun(dev, vc4_crtc_state->assigned_channel); - } - -+ clk_set_rate(hvs->core_clk, 500000000); -+ - drm_atomic_helper_wait_for_fences(dev, state, false); - - drm_atomic_helper_wait_for_dependencies(state); -@@ -262,6 +266,8 @@ vc4_atomic_complete_commit(struct drm_at - - drm_atomic_helper_commit_cleanup_done(state); - -+ clk_set_rate(hvs->core_clk, 200000000); -+ - drm_atomic_state_put(state); - - up(&vc4->async_modeset); |