This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SK-AM62P-LP:如何与 dpi 和 LVDS 同步启用 dss0 双路输出?

Guru**** 2482805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1551759/sk-am62p-lp-how-to-enbale-dss0-dual-output-synchronously-with-dpi-and-lvds

器件型号:SK-AM62P-LP


工具/软件:

您好 TI!

      我的 SDK 版本  11.01.05.03。  当我单独使用 dpi 和 LVDS,我可以通过这两个接口播放视频 , 但是,如果我启用两个接口如果我两个接口同步 ,

  将会发生一些错误。  

[   93.313985] panel_simple: loading out-of-tree module taints kernel.
[   93.323512] panel-simple bus@f0000:max9275: supply power not found, using dummy regulator
[   93.331967] panel-simple bus@f0000:max9275: Ignore invalid data-mapping property
[   93.340897] panel-simple bus@f0000:max9277: supply power not found, using dummy regulator
root@am62pxx-evm:/test/new_sdk_file# [   93.353752] tidss 30200000.dss: tidss_dispc_modeset_init: Panel bus@f0000:max9275 has incompatible connector type for vp1 (7 != 17)
[   93.368689] tidss 30200000.dss: failed to init DRM/KMS (-22)
[   93.375067] tidss 30200000.dss: probe with driver tidss failed with error -22

我的修改如下

DTS

&max9275_gmsl {
	status = "okay";
	port {
		max9275_in: endpoint {
			remote-endpoint = <&dss0_dpi1_out>;
		};
	};
};

&max9277_gmsl {
	status = "okay";

		ports {
			port@0 {
				lcd_in0: endpoint {
					remote-endpoint = <&oldi0_dss0_out>;
			};
		};
	};
};

&dss0 {
	bootph-all;
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&main_dpi_pins_default>;
};

&oldi0_dss0 {
	status = "okay";
};

&oldi0_dss0_ports {
	#address-cells = <1>;
	#size-cells = <0>;

	port@0 {
		reg = <0>;

		oldi0_dss0_in: endpoint {
			remote-endpoint = <&dss0_dpi0_out0>;
		};
	};

	port@1 {
		reg = <1>;

		oldi0_dss0_out: endpoint {
			remote-endpoint = <&lcd_in0>;
		};
	};
};
&dss0_ports {
	#address-cells = <1>;
	#size-cells = <0>;
		/* VP1: Output to OLDI */
	port@0 {
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0>;
		dss0_dpi0_out0: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&oldi0_dss0_in>;
		};
	};
	/* DSS0-VP2: DPI/HDMI Output */
	port@1 {
		reg = <1>;
		dss0_dpi1_out: endpoint {
			remote-endpoint = <&max9275_in>;
		};
	};
};

panel-simple.c

	static struct display_timing gmsl_max9277_mode = {
	.pixelclock = {26160000,26160000,26160000},
	.hactive = {256,256,256},
	.hfront_porch = {403,403,403},
	.hback_porch = {45,45,45},
	.hsync_len = {96,96,96},
	.vactive = {64,64,64},
	.vfront_porch = {415,415,415},
	.vback_porch = {3,3,3},
	.vsync_len = {63,63,63},
};

static struct panel_desc gmsl_max9277 = {
	.timings = &gmsl_max9277_mode,
	.num_timings = 1,
	.bpc = 8,
	.size = {
		.width = 800,
		.height = 545,
	},
	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
	// .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
	.connector_type = DRM_MODE_CONNECTOR_LVDS,
};
static struct display_timing gmsl_max9275_mode = {
	.pixelclock = {26160000,26160000,26160000},
	.hactive = {256,256,256},
	.hfront_porch = {403,403,403},
	.hback_porch = {45,45,45},
	.hsync_len = {96,96,96},
	.vactive = {64,64,64},
	.vfront_porch = {415,415,415},
	.vback_porch = {3,3,3},
	.vsync_len = {63,63,63},
};
static struct panel_desc gmsl_max9275 = {
	.timings = &gmsl_max9275_mode,
	.num_timings = 1,
	.bpc = 8,
	.size = {
		.width = 800,
		.height = 545,
	},
	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
	// .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
	.connector_type = DRM_MODE_CONNECTOR_DPI,
};
	
	
	{
		.compatible = "maxim,max9275",
		.data = &gmsl_max9277,
	},
		{
		.compatible = "maxim,max9277",
		.data = &gmsl_max9275,
	},

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何正确修改 DTS 以确保 dss0 同步输出 dpi 和 LVDS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    要确认:
    1.同步时、您是希望 DPI 和 OLDI 上具有相同的数据、还是同时在 DPI 和 OLDI 上具有独立的数据?
    2.以上错误来自 TI EVM 或定制电路板?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.我想通过 DSS0 传输数据(无论是否独立)、以在 DPI 和 OLDI 上输出。  

    2.上面的错误是在我们的定制电路板上。 但是、我认为我的硬件是可以的、因为我可以分别在 DPI 或 OLDI 上通过 DSS0 传输数据。 当我尝试将这两个单独的 DTS 组合在一起时、它不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在第 61 行的您的共享 DTS 中、“端点@0“中的“@0“是有意的吗?
    将'Endpoint@0'替换为'Endpoint'时会发生什么情况?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我 将'Endpoint@0'替换为'Endpoint'、 编译 DTS 时会出现警告  

     DTC     arch/arm64/boot/dts/ti/k3-am62p5-sk.dtb
    arch/arm64/boot/dts/ti/k3-am62p5-sk.dts:902.28-905.5: Warning (graph_endpoint): /bus@f0000/dss@30200000/ports/port@0/endpoint: graph node unit address error, expected "0"
      DTC     arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dtb
      DTC     arch/arm64/boot/dts/ti/k3-j722s-evm.dtb
    然后,当我 insmod panle-simple.ko。  则会 出现相同的误差

    [   70.501884] panel_simple: loading out-of-tree module taints kernel.
    [   70.511129] panel-simple bus@f0000:max9275: supply power not found, using dummy regulator
    [   70.519586] panel-simple bus@f0000:max9275: Ignore invalid data-mapping property
    [   70.527711] panel-simple bus@f0000:max9277: supply power not found, using dummy regulator
    root@am62pxx-evm:/firmware/ko_file/new_sdk# [   70.541065] tidss 30200000.dss: tidss_dispc_modeset_init: Panel bus@f0000:max9275 has incompatible connector type for vp1 (7 != 17)
    [   70.554643] tidss 30200000.dss: failed to init DRM/KMS (-22)
    [   70.561238] tidss 30200000.dss: probe with driver tidss failed with error -22
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.在 TI EVM 上使用相同 DTS 时会发生什么情况? 您可能需要更改 k3-am62p-sk.dts 中与 dss0 相关的节点。
    2.当您设置单独配置 dpi 和 oldi 时,是否仍然存在与电源相关的问题? TI EVM 上是否也有与电源相关的错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1、当我 在 TI EVM 上、相同 DTS 时、 insmod panel-simple.ko 后、将 发生相同的错误。

    2、当我的 、工作单独配置 dpi 和 oldi、电源相关的错误确实存在,但它们不会影响功能 因为     max9275 和 9277 模块独立供电

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Divyansh:

    根据错误日志“max9275 具有与 VP1 (7!= 17) 不兼容的连接器类型“、我认为此错误是由不正确的 DTS 而不是 未配置的电源引起的。 您能否详细介绍一下如何修改  k3-am62p-sk.dts 中与 dss0 相关的节点?

    BR、

    Dongcan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    举例来说、我们可以使用以下覆盖层: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm64/boot/dts/ti/k3-am62p5-sk-microtips-mf101hie-panel.dtso?h=ti-linux-6.12.y 、在默认 DTS 上应用该覆盖层时、同时启用 HDMI 和双链路 OLDI。

    我们还提供了 https://github.com/TexasInstruments/Beyond-SDK/blob/main/am62p/psdk/simultaneous_display_examples/k3-am62p5-sk-rocktech-rk101-panel-independent-mode.dtso 、该工具可在 DSS0 上启用 SL-OLDI0、以及 DSS1 上启用 HDMI 和 SL-OLDI1。

    使用这些文件、然后一次更改一个兼容文件、以查看您是否能够使其正常工作、这可能会很有用。
    另外、由于错误仅显示在  max9275 上、 max9277 是否正常工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    通常、此行为取决于所使用的窗口管理器 (gstreamer 可以在内部使用 wayland)。

    通过 TI EVM 上的同一示例、您将看到 OLDI 和 DPI/HDMI 将在扩展模式下运行、这意味着在 Weston 屏幕上、您可以将对话框从面板拖动到另一个面板。
    同样、当您使用 DRM 框架(运行“kmsxxtest --device=/dev/dri/by-path/platform-30200000.dss-card)时、您会看到仅连接一个屏幕时显示的模式会拉伸到 2 个屏幕上。

    即使控制 DSS 的一个端口的窗口管理器也会控制整个 DSS(因此也会控制另一个视频端口)。 因此、这在很大程度上取决于用户空间框架如何控制多个显示屏。

    Suren Porwar ,请分享任何关于 gstreamer 的附加评论(如果有)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、建议查看社区论坛以获取 gstreamer 相关支持。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    确定。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    对于相同的 DRM 卡(或同一 DSS)、应通过一个进程处理同一卡/DSS 的两个 VP。

    如果你需要 2 个不同的过程来分别控制两个视频端口,你可以使用破解如下:

    e2e.ti.com/.../0001_2D00_HACK_2D00_drm_2D00_drm_5F00_ioctl_2D00_Remove_2D00_requiment_2D00_for_2D00_permission_2D00_f.patch

    最终、预计有两个单独的流程可以正常工作:

    kmsxxtest --device=/dev/dri/by-path/platform-30200000.dss-card -c 'lvds' & kmsxxtest --device=/dev/dri/by-path/platform-30200000.dss-card -c 'hdmi'

    注意:这只是一个黑客,我们不能对此提供支持。 请自行承担使用风险。