drm/meson: Add G12A Support for VPP setup
authorNeil Armstrong <narmstrong@baylibre.com>
Mon, 25 Mar 2019 14:18:16 +0000 (15:18 +0100)
committerNeil Armstrong <narmstrong@baylibre.com>
Tue, 9 Apr 2019 09:24:54 +0000 (11:24 +0200)
Amlogic G12A needs a different VPP setup code, handle it here.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Tested-by: Jerome Brunet <jbrunet@baylibre.com>
Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190325141824.21259-4-narmstrong@baylibre.com
drivers/gpu/drm/meson/meson_vpp.c

index f9efb431e9535728f9bd11acc0e957d6ef2fa23b..8c52a3455ef47b80a308a49055327a6653fda5a3 100644 (file)
@@ -112,32 +112,39 @@ void meson_vpp_init(struct meson_drm *priv)
                writel_relaxed(0x20000, priv->io_base + _REG(VPP_DOLBY_CTRL));
                writel_relaxed(0x1020080,
                                priv->io_base + _REG(VPP_DUMMY_DATA1));
-       }
+       } else if (meson_vpu_is_compatible(priv, "amlogic,meson-g12a-vpu"))
+               writel_relaxed(0xf, priv->io_base + _REG(DOLBY_PATH_CTRL));
 
        /* Initialize vpu fifo control registers */
-       writel_relaxed(readl_relaxed(priv->io_base + _REG(VPP_OFIFO_SIZE)) |
-                       0x77f, priv->io_base + _REG(VPP_OFIFO_SIZE));
+       if (meson_vpu_is_compatible(priv, "amlogic,meson-g12a-vpu"))
+               writel_relaxed(0xfff << 20 | 0x1000,
+                              priv->io_base + _REG(VPP_OFIFO_SIZE));
+       else
+               writel_relaxed(readl_relaxed(priv->io_base + _REG(VPP_OFIFO_SIZE)) |
+                               0x77f, priv->io_base + _REG(VPP_OFIFO_SIZE));
        writel_relaxed(0x08080808, priv->io_base + _REG(VPP_HOLD_LINES));
 
-       /* Turn off preblend */
-       writel_bits_relaxed(VPP_PREBLEND_ENABLE, 0,
-                           priv->io_base + _REG(VPP_MISC));
-
-       /* Turn off POSTBLEND */
-       writel_bits_relaxed(VPP_POSTBLEND_ENABLE, 0,
-                           priv->io_base + _REG(VPP_MISC));
-
-       /* Force all planes off */
-       writel_bits_relaxed(VPP_OSD1_POSTBLEND | VPP_OSD2_POSTBLEND |
-                           VPP_VD1_POSTBLEND | VPP_VD2_POSTBLEND |
-                           VPP_VD1_PREBLEND | VPP_VD2_PREBLEND, 0,
-                           priv->io_base + _REG(VPP_MISC));
-
-       /* Setup default VD settings */
-       writel_relaxed(4096,
-                       priv->io_base + _REG(VPP_PREBLEND_VD1_H_START_END));
-       writel_relaxed(4096,
-                       priv->io_base + _REG(VPP_BLEND_VD2_H_START_END));
+       if (!meson_vpu_is_compatible(priv, "amlogic,meson-g12a-vpu")) {
+               /* Turn off preblend */
+               writel_bits_relaxed(VPP_PREBLEND_ENABLE, 0,
+                                   priv->io_base + _REG(VPP_MISC));
+
+               /* Turn off POSTBLEND */
+               writel_bits_relaxed(VPP_POSTBLEND_ENABLE, 0,
+                                   priv->io_base + _REG(VPP_MISC));
+
+               /* Force all planes off */
+               writel_bits_relaxed(VPP_OSD1_POSTBLEND | VPP_OSD2_POSTBLEND |
+                                   VPP_VD1_POSTBLEND | VPP_VD2_POSTBLEND |
+                                   VPP_VD1_PREBLEND | VPP_VD2_PREBLEND, 0,
+                                   priv->io_base + _REG(VPP_MISC));
+
+               /* Setup default VD settings */
+               writel_relaxed(4096,
+                               priv->io_base + _REG(VPP_PREBLEND_VD1_H_START_END));
+               writel_relaxed(4096,
+                               priv->io_base + _REG(VPP_BLEND_VD2_H_START_END));
+       }
 
        /* Disable Scalers */
        writel_relaxed(0, priv->io_base + _REG(VPP_OSD_SC_CTRL0));