From: Baihan Li <libai...@huawei.com>

When using command rmmod and insmod, there is no showing in second time
insmoding. Because DP controller won't send HPD signals, if connection
doesn't change or controller isn't reset. So add reset before unreset
in hibmc_dp_hw_init().

Fixes: 94ee73ee3020 ("drm/hisilicon/hibmc: add dp hw moduel in hibmc driver")
Signed-off-by: Baihan Li <libai...@huawei.com>
---
 drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c 
b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c
index 4f93d60b932b..e1b9589ce639 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c
@@ -172,13 +172,15 @@ int hibmc_dp_hw_init(struct hibmc_dp *dp)
        dp_dev->link.cap.lanes = 0x2;
        dp_dev->link.cap.link_rate = DP_LINK_BW_8_1;
 
-       /* hdcp data */
-       writel(HIBMC_DP_HDCP, dp_dev->base + HIBMC_DP_HDCP_CFG);
        /* int init */
        writel(0, dp_dev->base + HIBMC_DP_INTR_ENABLE);
        writel(HIBMC_DP_INT_RST, dp_dev->base + HIBMC_DP_INTR_ORIGINAL_STATUS);
        /* rst */
+       writel(0, dp_dev->base + HIBMC_DP_DPTX_RST_CTRL);
+       usleep_range(30, 50);
        writel(HIBMC_DP_DPTX_RST, dp_dev->base + HIBMC_DP_DPTX_RST_CTRL);
+       /* hdcp data */
+       writel(HIBMC_DP_HDCP, dp_dev->base + HIBMC_DP_HDCP_CFG);
        /* clock enable */
        writel(HIBMC_DP_CLK_EN, dp_dev->base + HIBMC_DP_DPTX_CLK_CTRL);
 
-- 
2.33.0

Reply via email to