NXP MCU 技术论坛
直播中

艾玛

13年用户 890经验值
擅长:模拟技术 EDA/IC设计 RF/无线
私信 关注
[问答]

I2C与DRM启动顺序异常怎么解决?

问题:我使用4.14.98版本的内核,i2c先后drm启动,这样使用bridge(it6161)可以正常工作,启动流程作为附件。当我使用5.4.70版本的内核时,drm启动先于i2c,这样引导致it6161不能加入drm中,也不能创建fb设备,显示失败,启动流程附件所显示
分析:我查了他们的system.map文件,i2c_adapter是init4,
ffff00000924f418 t __initcall_i2c_adap_imx_init4
而it6161和imx drm是init6,2个system.map附件
ffff00000924fdf0 t __initcall_it6161_i2c_driver_init6
ffff00000924fdf8 t __initcall_it6263_driver_init6
ffff00000924fe00 t __initcall_imx_nwl_dsi_driver_init6
ffff00000924fe08 t __initcall_seiko_adapter_driver_init6
ffff00000924fe10 t __initcall_imx_drm_pdrv_init6
ffff00000924fe18 t __initcall_imx_pd_driver_init6
ffff00000924fe20 t __initcall_imx_tve_driver_init6
ffff00000924fe28 t __initcall_imx_ldb_driver_init6
ffff00000924fe30 t __initcall_dw_hdmi_imx_platform_driver_init6
ffff00000924fe38 t __initcall_imx_nwl_dsi_driver_init6
ffff00000924fe40 t __initcall_imx_sec_dsim_driver_init6
疑问:
问题1:为什么在5.4内核中,init6会在init4前启动呢?
问题2:我应该怎么配置5.4.70,才能类kernel4.14.98,让i2c_adap_imx_init4先执行,imx_xxx_init6后执行?
关键打印:
kernel5.4.70
[ 1.161527] [drm] 支持 vblank 时间戳缓存 Rev 2 (21.10.2013)。
[ 1.168161] [drm] 不支持 vblank 时间戳查询的驱动程序。
[1.174172]imx-drm soc@0:bus@32c00000:display-subsystem:bound imx-lcdif-crtc.0 (ops lcdif_crtc_ops)[1.183451]imx_sec_dsim_drv 32e10000.mipi_dsi:未能获得blk_ctl[1.19004 0] imx_sec_dsim_drv
32e10000.mipi_dsi
:版本号为 0x1060200
[1.197054] imx_sec_dsim_drv 32e10000.mipi_dsi:无法连接桥:32e10000.mipi_dsi
[1.205331] imx_sec_dsim_drv 32e10000.mipi_dsi:无法绑定 sec dsim 桥:-19
[ 1.213007] imx-drm soc@0:bus@32c00000 :显示子系统:绑定32e10000.mipi_dsi(ops imx_sec_dsim_ops)
[1.222680][drm]已初始化imx-drm 1.0.0 2
.....................................
[ 2.368897] i2c i2c-0: IMX I2C 适配器已注册
[ 2.374074] gpio-144 (scl): 强制开漏请在 DT/ACPI DSDT/board 文件中正确标记它
[ 3.628938] adv-wdt-i2c 1-0029: Advantech看门狗定时器使能。timeout=60s (nowayout=0), Ver.17
[ 3.647630] rtc-s35390a 1-0030: 注册为 rtc0
[ 3.665999] tpm_tis_i2c 1-002e: 2.0 TPM (device-id 0x0, rev-id 78)
[ 3.672842] tpm_tis_i 2c 1-002e:TPM 2.0/接口:I2C)
[3.684867] tpm tpm0:尝试自检时发生 TPM 错误(256)
[3.691680] tpm tpm0:手动启动 TPM
[3.778780] usb251xb 1-002c:集线器配置是成功的。
[3.784643]usb251xb 1-002c:集线器成功探测
[3.789856]i2c i2c-1:IMX I2C适配器已注册
[3.797382] gpio-148 (scl):强制开漏请在 DT/ACPI DSDT/板文件中正确标记它
[3.810824] sgtl5000 3-000a:未找到 3-000a 电源 VDDA,使用虚拟稳压器
[3.818754] sgtl5000 3- 000a:未找到 3-000a 电源 VDDIO,使用虚拟稳压器
[3.829038] sgtl5000 3-000a:sgtl5000 修订版 0x11
[3.837887] sgtl5000 3-000a:使用内部 LDO 代替 VDDD:检查 ER1 错误
[3.935860] pca953x 3-0070:不使用 AI
[3.940781] pca953x 3-0070:写入寄存器失败
[3.946327] i2c i2c-3:IMX I2C 适配器已注册
[3.954104] gpio-146 (scl):强制开漏请在 DT/ACPI DSDT/板中正确标记文件
[3.969117] ov5640_mipi 4-003c: 4-003c 电源 DOVDD 未找到,使用虚拟稳压器
[3.977314]ov5640_mipi 4-003c:4-003c supply DVDD not found,using dummy regulator
[3.985087]ov5640_mipi 4-003c:4-003c supply AVDD not found,using dummy regulator
[4.066622]ov5640_mipi 4-003c:读取注册错误: reg=300a
[ 4.071965] ov5640_mipi 4-003c: 找不到相机
[ 4.077934] i2c i2c-2: 添加了多路复用 i2c 总线 4
[ 4.085597] DRM:it6161_i2c_probe
[ 4.085599] DRM:it6161_i2c_probed
[ 4.130101] DRM:it6161_parse_dt
[4.138317] DRM :查找 6161 修订版:0xd0
[4.146676] i2c i2c-2:添加了多路复用 i2c 总线 5
[4.157603] i2c i2c-2:添加了多路复用 i2c 总线 6

内核4.14.98
[ 0.738597] i2c i2c-0: IMX I2C 适配器已注册
[ 0.740457] i2c i2c-0: 不能使用 DMA,而是使用 PIO。
[ 0.746606] i2c i2c-1: IMX I2C 适配器已注册
[ 0.750554] i2c i2c-1: 不能使用 DMA,而是使用 PIO。
[0.756367] i2c i2c-2:IMX I2C 适配器已注册
[0.760623] i2c i2c-2:不能使用 DMA,而是使用 PIO。
[0.766653]pca953x 3-0070:3-0070 supply vcc not found,using dummy regulator
[0.777359]pca953x 3-0070:读取寄存器失败
[0.779475]i2c i2c-3:IMX I2C适配器已注册
[0.784131]i2c i2c-3:不能使用 DMA,而是使用 PIO。
[0.793802]i2c i2c-2:添加了多路复用 i2c 总线 4
[0.795966]i2c i2c-2:添加了多路复用 i2c 总线 5
[0.800671] i2c i2c-2:添加了多路复用 i2c 总线 6
[0.805624] pca953x 7-0073:未找到 7-0073 电源 vcc,使用虚拟调节器
[0.837025] 随机:完成快速初始化
[0.865343] i2c i2c-2:添加了多路复用i2c 总线 7
............................................... .....
[ 1.895889] DRM:it6161_parse_dt
[ 1.899625] DRM:Find 6161 修订版:0xd0
[ 1.908067] [drm] 支持 vblank 时间戳缓存 Rev 2 (21.10.2013)。
[ 1.918668] [drm] 不支持 vblank 时间戳查询的驱动程序。
[1.924672]imx-drm显示子系统:绑定imx-lcdif-crtc.0(ops lcdif_crtc_ops)
[1.932348]imx_sec_dsim_drv 32e10000.mipi_dsi:版本号为0x1060200
[1.939442]DRM:it6161_bridge _attach, ret:0
[1.989447]DRM:it6161_bridge_attach完成
[1.993649]imx-drm显示子系统:绑定32e10000.mipi_dsi(ops imx_sec_dsim_ops)
[2.006330]DRM:hpd:high

回帖(1)

张玉兰

2024-1-10 11:39:58
可以尝试在内核配置中修改i2c和drm的启动顺序。

首先确认内核配置中i2c和drm的代码顺序,相关的配置项可以在“Device Drivers” -> “I2C support”和“Device Drivers” -> “Graphics support”中找到。

在“Device Drivers” -> “Graphics support”中找到“Support for frame buffer devices”选项,将其设置为模块(M),并将其移动到i2c前面。这样在内核启动时,fb设备就可以顺利加入drm中。

然后在“Device Drivers” -> “I2C support”中找到“Miscellaneous I2C drivers”选项,将其设置为模块(M),并将其移动到drm前面。这样在内核启动时,i2c设备就可以先于drm启动。

重新编译内核并将其安装到设备上,启动时就应该按照修改后的顺序启动i2c和drm,从而解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分