当前位置: 首页 > ops >正文

记录: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);
....省略...
}
http://www.xdnf.cn/news/8095.html

相关文章:

  • React 第四十六节 Router中useInRouterContext的使用详细介绍及注意事项
  • docker-安装部署于macOS11
  • windows安装clamav
  • 多模态大语言模型arxiv论文略读(八十九)
  • LeetCode 404.左叶子之和的递归求解:终止条件与递归逻辑的深度剖析
  • C++学习:六个月从基础到就业——多线程编程:并发容器与无锁编程
  • Intel oneAPI对OpenCL 的支持
  • 什么是特征工程?
  • Java异常分类与Spring事务回滚机制深度剖析
  • 电子电路:为什么会产生电流超前或者滞后于电压的情况?
  • 实战演练:天猫商品详情页动态数据 API 接口开发与调用
  • Nginx 部署前端项目dist文件到局域网然后ngrok部署到公网
  • 如何使用AI为WordPress生成图片
  • 通过Python 在Excel工作表中轻松插入行、列
  • 编译xiaozhi-esp32-server-java遇到的报错
  • 痉挛性斜颈护理指南:多维度守护颈部健康
  • 快速创建 Vue 3 项目
  • ss、lsof 命令
  • AI与.NET技术实操系列(六):实现图像分类模型的部署与调用
  • 密码学标准(Cryptography Standards)介绍
  • 用vue canvas画一个能源电表和设备的监测图
  • Python的切片操作[::-1]
  • 集团企业数字化转型及集团数字化整体蓝图未来五年实施方案
  • 【图像处理入门】1. 数字图像的本质:从像素到色彩模型
  • 【计算机网络】网络层——IP协议
  • Java大厂面试:JVM调优、高并发订单处理与大数据服务场景解析
  • leetcode hot100刷题日记——9.矩阵置零
  • PYTORCH_CUDA_ALLOC_CONF基本原理和具体示例
  • 解决leetcode第3548题.等和矩阵分割II
  • asp.net core 添加 EntityFrame