Skip to content

Commit 08bb9f3

Browse files
Lin Hegregkh
authored andcommitted
drm/hisilicon/hibmc: move display contrl config to hibmc_probe()
[ Upstream commit de2a56c ] 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: 5294967 ("drm/hisilicon/hibmc: Add support for VDAC") Signed-off-by: Lin He <helin52@huawei.com> Signed-off-by: Yongbang Shi <shiyongbang@huawei.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patch.msgid.link/20260509032302.2057227-4-shiyongbang@huawei.com Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent cca79a1 commit 08bb9f3

2 files changed

Lines changed: 11 additions & 22 deletions

File tree

drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,15 @@ void hibmc_set_current_gate(struct hibmc_drm_private *priv, unsigned int gate)
174174
writel(gate, mmio + gate_reg);
175175
}
176176

177+
static void hibmc_display_ctrl(struct hibmc_drm_private *priv)
178+
{
179+
u32 reg;
180+
181+
reg = readl(priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
182+
reg |= HIBMC_DISPLAY_CONTROL_PANELDATE(1);
183+
writel(reg, priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
184+
}
185+
177186
static void hibmc_hw_config(struct hibmc_drm_private *priv)
178187
{
179188
u32 reg;
@@ -205,6 +214,8 @@ static void hibmc_hw_config(struct hibmc_drm_private *priv)
205214
reg |= HIBMC_MSCCTL_LOCALMEM_RESET(1);
206215

207216
writel(reg, priv->mmio + HIBMC_MISC_CTRL);
217+
218+
hibmc_display_ctrl(priv);
208219
}
209220

210221
static int hibmc_hw_map(struct hibmc_drm_private *priv)

drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -66,26 +66,6 @@ static const struct drm_connector_funcs hibmc_connector_funcs = {
6666
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
6767
};
6868

69-
static void hibmc_encoder_mode_set(struct drm_encoder *encoder,
70-
struct drm_display_mode *mode,
71-
struct drm_display_mode *adj_mode)
72-
{
73-
u32 reg;
74-
struct drm_device *dev = encoder->dev;
75-
struct hibmc_drm_private *priv = to_hibmc_drm_private(dev);
76-
77-
reg = readl(priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
78-
reg |= HIBMC_DISPLAY_CONTROL_FPVDDEN(1);
79-
reg |= HIBMC_DISPLAY_CONTROL_PANELDATE(1);
80-
reg |= HIBMC_DISPLAY_CONTROL_FPEN(1);
81-
reg |= HIBMC_DISPLAY_CONTROL_VBIASEN(1);
82-
writel(reg, priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE);
83-
}
84-
85-
static const struct drm_encoder_helper_funcs hibmc_encoder_helper_funcs = {
86-
.mode_set = hibmc_encoder_mode_set,
87-
};
88-
8969
int hibmc_vdac_init(struct hibmc_drm_private *priv)
9070
{
9171
struct drm_device *dev = &priv->dev;
@@ -108,8 +88,6 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
10888
return ret;
10989
}
11090

111-
drm_encoder_helper_add(encoder, &hibmc_encoder_helper_funcs);
112-
11391
ret = drm_connector_init_with_ddc(dev, connector,
11492
&hibmc_connector_funcs,
11593
DRM_MODE_CONNECTOR_VGA,

0 commit comments

Comments
 (0)