]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.14.67/drm-armada-fix-colorkey-mode-property.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.14.67 / drm-armada-fix-colorkey-mode-property.patch
CommitLineData
f5ab4f51
GKH
1From foo@baz Wed Aug 22 09:33:46 CEST 2018
2From: Russell King <rmk+kernel@armlinux.org.uk>
3Date: Sun, 24 Jun 2018 14:35:10 +0100
4Subject: drm/armada: fix colorkey mode property
5
6From: Russell King <rmk+kernel@armlinux.org.uk>
7
8[ Upstream commit d378859a667edc99e3473704847698cae97ca2b1 ]
9
10The colorkey mode property was not correctly disabling the colorkeying
11when "disabled" mode was selected. Arrange for this to work as one
12would expect.
13
14Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
15Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
16Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
17---
18 drivers/gpu/drm/armada/armada_hw.h | 1 +
19 drivers/gpu/drm/armada/armada_overlay.c | 30 ++++++++++++++++++++++--------
20 2 files changed, 23 insertions(+), 8 deletions(-)
21
22--- a/drivers/gpu/drm/armada/armada_hw.h
23+++ b/drivers/gpu/drm/armada/armada_hw.h
24@@ -160,6 +160,7 @@ enum {
25 CFG_ALPHAM_GRA = 0x1 << 16,
26 CFG_ALPHAM_CFG = 0x2 << 16,
27 CFG_ALPHA_MASK = 0xff << 8,
28+#define CFG_ALPHA(x) ((x) << 8)
29 CFG_PIXCMD_MASK = 0xff,
30 };
31
32--- a/drivers/gpu/drm/armada/armada_overlay.c
33+++ b/drivers/gpu/drm/armada/armada_overlay.c
34@@ -28,6 +28,7 @@ struct armada_ovl_plane_properties {
35 uint16_t contrast;
36 uint16_t saturation;
37 uint32_t colorkey_mode;
38+ uint32_t colorkey_enable;
39 };
40
41 struct armada_ovl_plane {
42@@ -59,11 +60,13 @@ armada_ovl_update_attr(struct armada_ovl
43 writel_relaxed(0x00002000, dcrtc->base + LCD_SPU_CBSH_HUE);
44
45 spin_lock_irq(&dcrtc->irq_lock);
46- armada_updatel(prop->colorkey_mode | CFG_ALPHAM_GRA,
47- CFG_CKMODE_MASK | CFG_ALPHAM_MASK | CFG_ALPHA_MASK,
48- dcrtc->base + LCD_SPU_DMA_CTRL1);
49-
50- armada_updatel(ADV_GRACOLORKEY, 0, dcrtc->base + LCD_SPU_ADV_REG);
51+ armada_updatel(prop->colorkey_mode,
52+ CFG_CKMODE_MASK | CFG_ALPHAM_MASK | CFG_ALPHA_MASK,
53+ dcrtc->base + LCD_SPU_DMA_CTRL1);
54+ if (dcrtc->variant->has_spu_adv_reg)
55+ armada_updatel(prop->colorkey_enable,
56+ ADV_GRACOLORKEY | ADV_VIDCOLORKEY,
57+ dcrtc->base + LCD_SPU_ADV_REG);
58 spin_unlock_irq(&dcrtc->irq_lock);
59 }
60
61@@ -339,8 +342,17 @@ static int armada_ovl_plane_set_property
62 dplane->prop.colorkey_vb |= K2B(val);
63 update_attr = true;
64 } else if (property == priv->colorkey_mode_prop) {
65- dplane->prop.colorkey_mode &= ~CFG_CKMODE_MASK;
66- dplane->prop.colorkey_mode |= CFG_CKMODE(val);
67+ if (val == CKMODE_DISABLE) {
68+ dplane->prop.colorkey_mode =
69+ CFG_CKMODE(CKMODE_DISABLE) |
70+ CFG_ALPHAM_CFG | CFG_ALPHA(255);
71+ dplane->prop.colorkey_enable = 0;
72+ } else {
73+ dplane->prop.colorkey_mode =
74+ CFG_CKMODE(val) |
75+ CFG_ALPHAM_GRA | CFG_ALPHA(0);
76+ dplane->prop.colorkey_enable = ADV_GRACOLORKEY;
77+ }
78 update_attr = true;
79 } else if (property == priv->brightness_prop) {
80 dplane->prop.brightness = val - 256;
81@@ -470,7 +482,9 @@ int armada_overlay_plane_create(struct d
82 dplane->prop.colorkey_yr = 0xfefefe00;
83 dplane->prop.colorkey_ug = 0x01010100;
84 dplane->prop.colorkey_vb = 0x01010100;
85- dplane->prop.colorkey_mode = CFG_CKMODE(CKMODE_RGB);
86+ dplane->prop.colorkey_mode = CFG_CKMODE(CKMODE_RGB) |
87+ CFG_ALPHAM_GRA | CFG_ALPHA(0);
88+ dplane->prop.colorkey_enable = ADV_GRACOLORKEY;
89 dplane->prop.brightness = 0;
90 dplane->prop.contrast = 0x4000;
91 dplane->prop.saturation = 0x4000;