drm设备不工作

在升级内核后,遇到drm设备无法正常工作,表现为缺少fb0设备且启动无drm相关信息。通过检查设备树和内核驱动,确认SUN4I驱动已启用,但问题仍未解决。进一步通过设置drm.debug获取更详细日志,发现内核错误地尝试挂载/panel节点。解决方法是修改suniv_quirks,添加has_channel_0配置,并屏蔽.has_channel_1,最终使drm成功启动。
AI助手已提取文章相关产品:

在设备升级新版内核后,发现没有 fb0 设备,开机没有打印 drm 相关的信息

首先是检查设备树,确认加入 panel 节点

panel: panel {
		compatible = "lg,lb070wv8”, “simple-panel";
		#address-cells = <1>;
		#size-cells = <0>;
		enable-gpios = <&pio 4 6 GPIO_ACTIVE_HIGH>;

		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			panel_input: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&tcon0_out_lcd>;
			};
		};
	};

其次是检查内核是否开启了相关的驱动,这里使用的是 lichepi nano,依赖的驱动是 SUN4I 系列的驱动

CONFIG_DRM_SUN4I=y
CONFIG_DRM_SUN4I_HDMI=y
CONFIG_DRM_SUN4I_BACKEND=y

不过在检查完上面两个地方没有问题后,还是没有解决问题

为了获取 drm 启动过程中的更多信息,在 uboot 的 bootargs 中加入 drm.debug=0x1f debug ,让内核打印 drm 的更多信息

[    1.079849] [drm:drm_core_init] Initialized
[    1.084524] [drm:sun4i_drv_probe] Adding component /soc/display-backend@1e60000
[    1.092143] [drm:sun4i_drv_probe] Adding component /soc/lcd-controller@1c0c000
[    1.099606] [drm:sun4i_drv_probe] Adding component /panel
[    1.105025] [drm:sun4i_drv_traverse_endpoints] No output to bind on port 1
[    1.124695] [drm:compare_of] Comparing of node /soc/lcd-controller@1c0c000 with /soc/display-backend@1e60000
...

发现内核尝试着挂载 /panel 节点,这个本来是不用挂载的

修改 suniv_quirks,加上 has_channel_0 的配置。缺少 has_channel_0 会让内核认为这个 TCON 没有 RGB 口

static const struct sun4i_tcon_quirks suniv_quirks = {
    .has_channel_0		= true,
	.has_channel_1		= true,
};

重新编译烧录后,drm 的启动信息如下。内核没有再去挂载 /panel 节点了,不过 drm 的启动还是没有成功

[    1.079943] [drm:drm_core_init] Initialized
[    1.084616] [drm:sun4i_drv_probe] Adding component /soc/display-backend@1e60000
[    1.092235] [drm:sun4i_drv_probe] Adding component /soc/lcd-controller@1c0c000
[    1.099662] [drm:sun4i_drv_traverse_endpoints] Endpoint is our panel... skipping
[    1.121843] [drm:compare_of] Comparing of node /soc/display-backend@1e60000 with /soc/display-backend@1e60000
[    1.131931] [drm:compare_of] Comparing of node /soc/display-backend@1e60000 with /soc/lcd-controller@1c0c000

后来在看到了这份 commit 中说的内容,将 .has_channel_1 屏蔽掉,drm 正常工作了

static const struct sun4i_tcon_quirks suniv_f1c100s_quirks = {
	/*
	 * The F1C100s SoC has a second channel in TCON, but the clock input of
	 * it is not documented.
	 */
	.has_channel_0		= true,
	/* .has_channel_1	= true, */
};

感谢

非常感谢这两位大神给我的帮助

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值