You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IMX8MM平台sn65dsi83桥接器驱动加载顺序问题求助

解决IMX8MM平台sn65dsi83 DSI转LVDS桥驱动加载顺序问题

问题背景

基于IMX8MM平台运行nxp-imx分支lf-5.15.y内核,启用sn65dsi83 DSI转LVDS桥驱动时遇到加载顺序异常:

  • 预期显示链路:lcdif > mipi_dsi > sn65dsi83 > panel
  • 实际加载顺序:先初始化i2c设备(含sn65dsi83,因找不到panel导致probe失败且无警告)→ nxp专属驱动sec_mipi_dsim-imx.c尝试绑定链路返回-517 (eprobe_defer) → 最后加载panel-lvds.c驱动,后续重试出现更多错误
  • 已尝试调整/drivers/gpu/drm/Makefile中obj-y += panel/的位置,但panel加载仍晚于i2c设备初始化

问题分析

  1. sn65dsi83作为i2c设备,其probe时机由i2c总线初始化流程决定,优先级高于panel驱动的加载
  2. sn65dsi_probe()调用drm_of_find_panel_or_bridge()未找到panel时,未返回EPROBE_DEFER触发延迟重试,直接导致初始化失败
  3. 仅调整Makefile编译顺序无法改变内核设备初始化的总线优先级逻辑

解决方案

1. 修改sn65dsi83驱动,添加延迟重试逻辑

在sn65dsi83.c的sn65dsi_probe()函数中,当无法找到panel时返回EPROBE_DEFER,让内核重新调度probe:

bridge = drm_of_find_panel_or_bridge(dev->of_node, 1, 0, &panel);
if (IS_ERR(bridge)) {
    ret = PTR_ERR(bridge);
    // 新增:未找到panel时返回延迟重试标记
    if (ret == -ENODEV)
        return -EPROBE_DEFER;
    dev_err(dev, "Failed to find panel or bridge: %d\n", ret);
    goto err_alloc;
}

2. 设备树中明确依赖关系

在sn65dsi83的设备树节点中添加depends-on属性,强制内核优先初始化panel:

&sn65dsi83 {
    /* 原有属性保留 */
    depends-on = <&panel_lvds>; // 替换为实际的panel节点别名
};

3. 强制panel驱动内置编译(可选)

若panel驱动为模块编译,改为内置以消除模块加载时机的不确定性:
在内核配置文件中设置:

CONFIG_DRM_PANEL_LVDS=y

验证

重新编译内核与设备树并烧录,查看dmesg日志,确认sn65dsi83的probe会延迟至panel加载完成后执行,显示链路绑定成功。

内容的提问来源于stack exchange,提问作者owndampu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:05:26