欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 记录:RK3588无法显示开机logo问题

记录:RK3588无法显示开机logo问题

2025/7/1 4:07:38 来源:https://blog.csdn.net/xuesong10210/article/details/148146469  浏览:    关键词:记录:RK3588无法显示开机logo问题

问题:
RK3588内核6.1,采用HDMI显示,开机后无法显示logo,但可以正常进入桌面。
内核可能出现如下错误:(这里为啥说“可能”呢?是因为只用HDMI单显时没有看到这错误。)

[    7.467552] rockchip-drm display-subsystem: route-dsi1: failed to get logo,offset
[    7.467559] rockchip-drm display-subsystem: route-hdmi0: failed to get logo,offset
[    7.467564] rockchip-drm display-subsystem: can't not find any logo display
[    7.467569] rockchip-drm display-subsystem: failed to show kernel logo

uboot的出现如下错误:

Cannot get enable GPIO: -19
Warn: can't find connect driver
Warn: can't get connect driver
Cannot get enable GPIO: -19
Warn: can't find connect driver
Warn: can't get connect driver

分析:
在"u-boot/drivers/video/drm/rockchip_dw_hdmi_qp.c"中找到第一句错误的地方。

static int rockchip_dw_hdmi_qp_probe(struct udevice *dev)
{
...省略...ret = gpio_request_by_name(dev, "enable-gpios", 0,&hdmi->enable_gpio, GPIOD_IS_OUT);if (ret && ret != -ENOENT) {dev_err(dev, "Cannot get enable GPIO: %d\n", ret);
//              return ret;}ret = clk_get_by_name(dev, "link_clk", &hdmi->link_clk);if (ret) {printf("%s: can't get link_clk\n", __func__);return ret;}hdmi->ops = (struct rockchip_hdmi_chip_ops *)hdmi->plat_data->chip_ops;rockchip_connector_bind(&hdmi->connector, dev, hdmi->id, &rockchip_dw_hdmi_qp_funcs,NULL, DRM_MODE_CONNECTOR_HDMIA);return 0;
}

可以看到如果未请求到enable-gpios那么就会退出,下面rockchip_connector_bind过程将不会执行,自然后面就无法找到"connect driver"。板子的硬件上这个使能引脚被连接在了外部扩展的GPIO上,在uboot中并未适配GPIO驱动,所以请求GPIO失败。确保这个"enable-gpios"引脚在默认状态下是使能的,然后注释掉请求GPIO失败时的返回,HDMI可正常显示logo。
另外,没有正常connect,rockchip_display_fixup函数<u-boot/drivers/video/drm/rockchip_display.c>也不会执行到设置"logo,offset"的地方,自然也不会生成“/sys/firmware/devicetree/base/display-subsystem/route/route-hdmi0/logo,offset”节点,这就是内核出现“rockchip-drm display-subsystem: route-hdmi0: failed to get logo,offset”报错的原因。

void rockchip_display_fixup(void *blob)
{
....省略...
#define FDT_SET_U32(name, val) \do_fixup_by_path_u32(blob, path, name, val, 1);offset = s->logo.offset + (u32)(unsigned long)s->logo.mem- memory_start;FDT_SET_U32("logo,offset", offset);FDT_SET_U32("logo,width", s->logo.width);FDT_SET_U32("logo,height", s->logo.height);FDT_SET_U32("logo,bpp", s->logo.bpp);FDT_SET_U32("logo,ymirror", s->logo.ymirror);FDT_SET_U32("video,clock", s->conn_state.mode.clock);FDT_SET_U32("video,hdisplay", s->conn_state.mode.hdisplay);FDT_SET_U32("video,vdisplay", s->conn_state.mode.vdisplay);FDT_SET_U32("video,crtc_hsync_end", s->conn_state.mode.crtc_hsync_end);FDT_SET_U32("video,crtc_vsync_end", s->conn_state.mode.crtc_vsync_end);FDT_SET_U32("video,vrefresh",drm_mode_vrefresh(&s->conn_state.mode));FDT_SET_U32("video,flags", s->conn_state.mode.flags);FDT_SET_U32("video,aspect_ratio", s->conn_state.mode.picture_aspect_ratio);FDT_SET_U32("overscan,left_margin", s->conn_state.overscan.left_margin);FDT_SET_U32("overscan,right_margin", s->conn_state.overscan.right_margin);FDT_SET_U32("overscan,top_margin", s->conn_state.overscan.top_margin);FDT_SET_U32("overscan,bottom_margin", s->conn_state.overscan.bottom_margin);
....省略...
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词