Am 09.05.26 um 05:23 schrieb Yongbang Shi:
From: Lin He <[email protected]>

If there's no VGA output, this encoder modeset won't be called, which
will cause displaying data from GPU being cut off. It's actually a
common display config for DP and VGA, so move the vdac encoder modeset
to driver load stage.

Removed invalid bit configurations from `hibmc_display_ctrl`

Fixes: 5294967f4ae4 ("drm/hisilicon/hibmc: Add support for VDAC")
Signed-off-by: Lin He <[email protected]>
Signed-off-by: Yongbang Shi <[email protected]>

Reviewed-by: Thomas Zimmermann <[email protected]>

---
ChangeLog:
v5 -> v6:
   - Removed invalid bit configurations from `hibmc_display_ctrl`.
v1 -> v2:
   - remove tag "Reviewed-by: Tao Tian <[email protected]>", witch will
     be given in public.
   - add 'drm-misc-fixes' in subject prefix.
---
  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c   | 11 ++++++++++
  .../gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c  | 22 -------------------
  2 files changed, 11 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c 
b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
index e3b40c6a6250..19d3193e2f76 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
@@ -241,6 +241,15 @@ void hibmc_set_current_gate(struct hibmc_drm_private 
*priv, unsigned int gate)
        writel(gate, mmio + gate_reg);
  }
+static void hibmc_display_ctrl(struct hibmc_drm_private *priv)
+{
+       u32 reg;
+
+       reg = readl(priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
+       reg |= HIBMC_DISPLAY_CONTROL_PANELDATE(1);
+       writel(reg, priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
+}
+
  static void hibmc_hw_config(struct hibmc_drm_private *priv)
  {
        u32 reg;
@@ -272,6 +281,8 @@ static void hibmc_hw_config(struct hibmc_drm_private *priv)
        reg |= HIBMC_MSCCTL_LOCALMEM_RESET(1);
writel(reg, priv->mmio + HIBMC_MISC_CTRL);
+
+       hibmc_display_ctrl(priv);
  }
static int hibmc_hw_map(struct hibmc_drm_private *priv)
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c 
b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
index 2fcfa3246fd1..b9bd6d33fb0f 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
@@ -88,26 +88,6 @@ static const struct drm_connector_funcs 
hibmc_connector_funcs = {
        .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
  };
-static void hibmc_encoder_mode_set(struct drm_encoder *encoder,
-                                  struct drm_display_mode *mode,
-                                  struct drm_display_mode *adj_mode)
-{
-       u32 reg;
-       struct drm_device *dev = encoder->dev;
-       struct hibmc_drm_private *priv = to_hibmc_drm_private(dev);
-
-       reg = readl(priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
-       reg |= HIBMC_DISPLAY_CONTROL_FPVDDEN(1);
-       reg |= HIBMC_DISPLAY_CONTROL_PANELDATE(1);
-       reg |= HIBMC_DISPLAY_CONTROL_FPEN(1);
-       reg |= HIBMC_DISPLAY_CONTROL_VBIASEN(1);
-       writel(reg, priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
-}
-
-static const struct drm_encoder_helper_funcs hibmc_encoder_helper_funcs = {
-       .mode_set = hibmc_encoder_mode_set,
-};
-
  int hibmc_vdac_init(struct hibmc_drm_private *priv)
  {
        struct drm_device *dev = &priv->dev;
@@ -130,8 +110,6 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
                goto err;
        }
- drm_encoder_helper_add(encoder, &hibmc_encoder_helper_funcs);
-
        ret = drm_connector_init_with_ddc(dev, connector,
                                          &hibmc_connector_funcs,
                                          DRM_MODE_CONNECTOR_VGA,

--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)


Reply via email to