summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorshengyang.chen <shengyang.chen@starfivetech.com>2024-04-12 06:16:47 +0300
committershengyang.chen <shengyang.chen@starfivetech.com>2024-04-19 11:50:22 +0300
commit9d5cdef8a3a836ee9220264cbac3a592b398b055 (patch)
tree03a599075683dc9120448219a7f4833387ec97a1 /drivers
parent4f0dc1bed91ce8dd3206514f71c7036c13dea998 (diff)
downloadu-boot-9d5cdef8a3a836ee9220264cbac3a592b398b055.tar.xz
video: Add mipi remove process and drop dc interrupt
to fix vf2 kernel 6.6 mipi bug #9706 (startup crash or mipi cannot display) -add mipi remove process to solve bug of mipi display -drop dc interrupt of vf2 uboot to solve startup crash Signed-off-by: Shengyang Chen <shengyang.chen@starfivetech.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/starfive/sf_mipi.c41
-rw-r--r--drivers/video/starfive/sf_vop.c5
2 files changed, 44 insertions, 2 deletions
diff --git a/drivers/video/starfive/sf_mipi.c b/drivers/video/starfive/sf_mipi.c
index d9300c5879..b4704eb62b 100644
--- a/drivers/video/starfive/sf_mipi.c
+++ b/drivers/video/starfive/sf_mipi.c
@@ -568,6 +568,45 @@ free_clock_apb_clk:
return ret;
}
+static int dsi_sf_remove(struct udevice *dev)
+{
+ struct dsi_sf_priv *priv = dev_get_priv(dev);
+ struct mipi_dsi_device *device = &priv->device;
+ struct dsi_sf_priv *dsi = dev_get_priv(dev);
+ uint32_t val;
+
+ sf_dphy_set_reg(dsi->sys_reg, 0,AON_GP_REG_SHIFT,AON_GP_REG_MASK);
+
+ /*dphy*/
+ reset_assert(&priv->txbytehs_rst);//sys_mipi_dsi_set_ppi_txbyte_hs(0, priv_data);
+ reset_assert(&priv->dphy_sys);
+
+ reset(1, priv->phy_reg);
+
+ clk_disable(&priv->dphy_txesc_clk);
+
+ /*dsi*/
+ reset_assert(&priv->dpi_rst);
+
+ reset_assert(&priv->rxesc_rst);
+
+ reset_assert(&priv->txesc_rst);
+
+ reset_assert(&priv->apb_rst);
+
+ reset_assert(&priv->sys_rst);
+
+ clk_disable(&priv->dpi_clk);
+
+ clk_disable(&priv->txesc_clk);
+
+ clk_disable(&priv->apb_clk);
+
+ clk_disable(&priv->dsi_sys_clk);
+
+ return 0;
+}
+
struct video_bridge_ops sf_dsi_bridge_ops = {
.attach = dsi_sf_attach,
.set_backlight = dsi_sf_set_backlight,
@@ -585,6 +624,8 @@ U_BOOT_DRIVER(starfive_mipi_dsi) = {
.bind = dm_scan_fdt_dev,
.of_to_plat = sf_mipi_of_to_plat,
.probe = dsi_sf_probe,
+ .remove = dsi_sf_remove,
.ops = &sf_dsi_bridge_ops,
.priv_auto = sizeof(struct dsi_sf_priv),
+ .flags = DM_FLAG_OS_PREPARE,
};
diff --git a/drivers/video/starfive/sf_vop.c b/drivers/video/starfive/sf_vop.c
index a167341cd9..524c7abfb0 100644
--- a/drivers/video/starfive/sf_vop.c
+++ b/drivers/video/starfive/sf_vop.c
@@ -641,8 +641,10 @@ static int sf_display_init(struct udevice *dev, ulong fbbase, ofnode ep_node)
}
#endif
+#if CONFIG_IS_ENABLED(TARGET_STARFIVE_EVB)
+ writel(0xc0001fff, priv->regs_hi+0x00000014); //csr_reg//dc interrupt
+#endif
#if CONFIG_IS_ENABLED(TARGET_STARFIVE_EVB) || CONFIG_IS_ENABLED(TARGET_STARFIVE_VISIONFIVE2)
- writel(0xc0001fff, priv->regs_hi+0x00000014); //csr_reg
writel(0x000000e8, priv->regs_hi+0x00001a38); //csr_reg
writel(0x00002000, priv->regs_hi+0x00001cc0); //csr_reg
writel(0x00000000, priv->regs_hi+0x000024d8); //csr_reg
@@ -694,7 +696,6 @@ static int sf_display_init(struct udevice *dev, ulong fbbase, ofnode ep_node)
#else
if(uc_priv->xsize == 800)
{
- writel(0xc0001fff, priv->regs_hi+0x00000014); //csr_reg
writel(0x000000e8, priv->regs_hi+0x00001a38); //csr_reg
writel(0x00002000, priv->regs_hi+0x00001cc0); //csr_reg
writel(0x00000000, priv->regs_hi+0x000024d8); //csr_reg