67 lines
2.6 KiB
Diff
67 lines
2.6 KiB
Diff
|
From 8a0bf7456f10a06adeeed0690d181f67d887e18e Mon Sep 17 00:00:00 2001
|
||
|
From: Ondrej Jirman
|
||
|
Date: Tue, 28 Jan 2020 00:26:17 +0100
|
||
|
Subject: drm: sun4i-drm: Recover from occasional HW failures
|
||
|
|
||
|
Layer can be disabled automatically by HW (HW clears the bit in
|
||
|
some unknown situations). We need to always update this bit,
|
||
|
so that DE2 will not fail.
|
||
|
|
||
|
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||
|
---
|
||
|
drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 13 ++++++-------
|
||
|
drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 13 ++++++-------
|
||
|
2 files changed, 12 insertions(+), 14 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
|
||
|
index f1c87695b4d7..e58482f6d7ba 100644
|
||
|
--- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
|
||
|
+++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
|
||
|
@@ -36,13 +36,12 @@ static void sun8i_ui_layer_enable(struct sun8i_mixer *mixer, int channel,
|
||
|
DRM_DEBUG_DRIVER("%sabling channel %d overlay %d\n",
|
||
|
enable ? "En" : "Dis", channel, overlay);
|
||
|
|
||
|
- if (!was_enabled != !enable) {
|
||
|
- val = enable ? SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN : 0;
|
||
|
-
|
||
|
- regmap_update_bits(mixer->engine.regs,
|
||
|
- SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay),
|
||
|
- SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN, val);
|
||
|
- }
|
||
|
+ /* We always update the layer enable bit, because it can clear
|
||
|
+ * spontaneously for unknown reasons. */
|
||
|
+ val = enable ? SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN : 0;
|
||
|
+ regmap_update_bits(mixer->engine.regs,
|
||
|
+ SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay),
|
||
|
+ SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN, val);
|
||
|
|
||
|
/*
|
||
|
* If this layer was enabled and is being disabled or if it is
|
||
|
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||
|
index 81eda71c4fff..0c2ccc33d456 100644
|
||
|
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||
|
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||
|
@@ -30,13 +30,12 @@ static void sun8i_vi_layer_enable(struct sun8i_mixer *mixer, int channel,
|
||
|
DRM_DEBUG_DRIVER("%sabling VI channel %d overlay %d\n",
|
||
|
enable ? "En" : "Dis", channel, overlay);
|
||
|
|
||
|
- if (!was_enabled != !enable) {
|
||
|
- val = enable ? SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN : 0;
|
||
|
-
|
||
|
- regmap_update_bits(mixer->engine.regs,
|
||
|
- SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay),
|
||
|
- SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN, val);
|
||
|
- }
|
||
|
+ /* We always update the layer enable bit, because it can clear
|
||
|
+ * spontaneously for unknown reasons. */
|
||
|
+ val = enable ? SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN : 0;
|
||
|
+ regmap_update_bits(mixer->engine.regs,
|
||
|
+ SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay),
|
||
|
+ SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN, val);
|
||
|
|
||
|
/*
|
||
|
* If this layer was enabled and is being disabled or if it is
|
||
|
--
|
||
|
cgit v1.2.3
|
||
|
|