mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
60 lines
1.8 KiB
Diff
60 lines
1.8 KiB
Diff
|
From 2118551cfedf4b76821987d4de72379c82fbe1be Mon Sep 17 00:00:00 2001
|
||
|
From: Tim Gover <tim.gover@raspberrypi.com>
|
||
|
Date: Thu, 13 Jul 2023 17:47:22 +0100
|
||
|
Subject: [PATCH 0602/1085] drm/vc4: Enable SCALER_CONTROL early in HVS init
|
||
|
|
||
|
Always enable SCALER_CONTROL before attempting other HVS
|
||
|
operations. It's safe to write to some parts of the HVS but
|
||
|
in general it's dangerous to do this because it can cause bus
|
||
|
lockups.
|
||
|
|
||
|
Signed-off-by: Tim Gover <tim.gover@raspberrypi.com>
|
||
|
---
|
||
|
drivers/gpu/drm/vc4/vc4_hvs.c | 14 ++++++++------
|
||
|
1 file changed, 8 insertions(+), 6 deletions(-)
|
||
|
|
||
|
--- a/drivers/gpu/drm/vc4/vc4_hvs.c
|
||
|
+++ b/drivers/gpu/drm/vc4/vc4_hvs.c
|
||
|
@@ -1293,6 +1293,10 @@ static int vc4_hvs_hw_init(struct vc4_hv
|
||
|
struct vc4_dev *vc4 = hvs->vc4;
|
||
|
u32 dispctrl, reg;
|
||
|
|
||
|
+ dispctrl = HVS_READ(SCALER_DISPCTRL);
|
||
|
+ dispctrl |= SCALER_DISPCTRL_ENABLE;
|
||
|
+ HVS_WRITE(SCALER_DISPCTRL, dispctrl);
|
||
|
+
|
||
|
reg = HVS_READ(SCALER_DISPECTRL);
|
||
|
reg &= ~SCALER_DISPECTRL_DSP2_MUX_MASK;
|
||
|
HVS_WRITE(SCALER_DISPECTRL,
|
||
|
@@ -1314,8 +1318,6 @@ static int vc4_hvs_hw_init(struct vc4_hv
|
||
|
reg | VC4_SET_FIELD(3, SCALER_DISPDITHER_DSP5_MUX));
|
||
|
|
||
|
dispctrl = HVS_READ(SCALER_DISPCTRL);
|
||
|
-
|
||
|
- dispctrl |= SCALER_DISPCTRL_ENABLE;
|
||
|
dispctrl |= SCALER_DISPCTRL_DISPEIRQ(0) |
|
||
|
SCALER_DISPCTRL_DISPEIRQ(1) |
|
||
|
SCALER_DISPCTRL_DISPEIRQ(2);
|
||
|
@@ -1511,6 +1513,10 @@ static int vc4_hvs_bind(struct device *d
|
||
|
else
|
||
|
hvs->dlist = hvs->regs + SCALER5_DLIST_START;
|
||
|
|
||
|
+ ret = vc4_hvs_hw_init(hvs);
|
||
|
+ if (ret)
|
||
|
+ return ret;
|
||
|
+
|
||
|
/* Upload filter kernels. We only have the one for now, so we
|
||
|
* keep it around for the lifetime of the driver.
|
||
|
*/
|
||
|
@@ -1520,10 +1526,6 @@ static int vc4_hvs_bind(struct device *d
|
||
|
if (ret)
|
||
|
return ret;
|
||
|
|
||
|
- ret = vc4_hvs_hw_init(hvs);
|
||
|
- if (ret)
|
||
|
- return ret;
|
||
|
-
|
||
|
ret = vc4_hvs_cob_init(hvs);
|
||
|
if (ret)
|
||
|
return ret;
|