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.

[参考译文] AM62P:AM62Px:驱动 DSS0 OLDI 的两个独立 LVDS 面板—双链路与双单链路、同步复制以及 CLK1 输出

Guru**** 2874030 points

Other Parts Discussed in Thread: AM62P

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1630306/am62p-am62px-driving-two-independent-lvds-panels-from-dss0-oldi-dual-link-vs-dual-single-link-sync-replication-and-clk1-output

部件号: AM62P


摘要

我们将基于 Variscite VAR-VAR-AM62P 构建 VR 耳机产品 SOM。 我们需要驱动  三个独立显示器 同时:

  • DSS1→DSI :一个 568×1232 GUI 触摸屏(RM69A10 面板)— 正常工作
  • DSS0→OLDI TX0 :一个 720×720 JDI MIPI 面板通过龙腾 LT9211. LVDS 至 MIPI 桥接器— 正常工作
  • DSS0→OLDI TX1 :一个 720×720 JDI MIPI 面板通过龙腾 LT9211. LVDS 至 MIPI 桥接器— 不工作

必须显示两个 VR 面板 独立 图像(左眼图/右眼图)、每个 720 @ 720×60Hz。

克隆模式工作正常 :我们首先使用 OLDI 克隆模式 (ti,oldi-mode = <3>) 验证整个硬件链、该模式成功驱动具有相同 720×720 映像的两个面板。 这证实了 LT9211 桥接器、MIPI 链路和两个 JDI 面板均可完全正常工作。 这个问题特定于双链路模式、在该模式下、我们需要在每个面板上提供独立内容。

DSS1 已用于 DSI 面板、因此两个 OLDI 输出都必须来自 DSS0。 我们一直在尝试使用 双链路 OLDI 模式 在软件中具有 1440×720 帧缓冲区和偶数/奇数像素列交错 (LVGL)。

硬件设置

AM62Px DSS0 VP1 (1440×720 @ 79.272 MHz)
    +-- OLDI TX0 (lanes A0-A3 + CLK0) → LT9211 #1 (I2C bus 0) → MIPI → JDI Left panel
    +-- OLDI TX1 (lanes A4-A7 + CLK1) → LT9211 #2 (I2C bus 1) → MIPI → JDI Right panel

每个 LT9211 桥接器在其端口 A 上接收单链路 LVDS 输入并将其转换为 MIPI DSI 输出以驱动 JDI 面板。 LT9211 未设置为双链路模式 LVDS 接收器—它需要一个具有嵌入式 HSYNC、VSYNC 和 DE 的标准单链路 LVDS 信号。

当前 OLDI 配置

我们使用标准tidss_oldi桥接驱动器(未修改)、具有以下 DTS:

&oldi0_dss0 {
    status = "okay";
};

&oldi1_dss0 {
    status = "okay";
};

panel-lvdsdual-lvds-even-pixelsdual-lvds-odd-pixels根据 TI 参考重叠 (k3-am62p5-sk-microtips-mf101hie-panel.dtso)、一个节点在两个 OLDI 输出端口上声明 1440×720 时序和/。

驱动程序正确写入 OLDI_CFG = 0x198B (ENABLE | JEIDA_24 | BIT (3)| DEPOL | MSB | DUALMODESYNC | SOFTRST)、通过确认devmem2 0x3020a160

工作原理

  • 左侧面板 (OLDI TX0) :正确显示。 LT9211 检测到有效计时:sync=0x00 h: 120/20/40/720/900 v: 8/2/4/720/734—Perfect 720×720 @ 60Hz。
  • OLDI_CFG 是否正确设置为双链路模式 (0x198B)。
  • 两个 LT9211 芯片通过 Y 型电缆从 CLK0 接收相同的 LVDS 像素时钟 (~39.6MHz )(参见下面的时钟问题)。
  • 两个 LT9211 芯片都将其 RX PLL 锁定在 LVDS 时钟上。
  • 右侧 LT9211 可正确检测hact = 720(水平有效像素)。

哪些不起作用

右侧面板 (OLDI TX1) 保持黑色。 右侧的 LT9211 在通道 A4-A7 上接收像素数据、但是 无法检测有效的 HSYNC、VSYNC 或 DE 信号 。 视频时序检测始终报告:

sync=0x0A h: 3376/0/4095/720/65535 v: 1/0/255/0/0

水平活动计数 (720) 正确、但所有垂直时序值都是随机/无效的。 无论以下情况如何、都会发生这种情况:

  • 硬件复位时序(我们使用双通 INIT 尝试了专用复位 GPIO)
  • 仅取消同步模式(寄存器RGD_HV_SYNC_SEL 0xD81F 中的位)
  • SYNC 极性配置
  • LVDS RX 逻辑复位

我们的结论 :在双链路 OLDI 模式下、TX1 通道 (A4-A7) 携带偶数像素数据、但确实如此 不会 传输标准单链路 LVDS 接收器可以解码的有效嵌入式 HSYNC/VSYNC/DE。 LT9211 专为标准单链路 LVDS 输入而设计、无法从双链路辅助通道重建时序。

向 TI 提问

1.双链路模式下 TX1 上的 SYNC 信号

在双链路 OLDI 模式下 (OLDI_CFG = 0x198B、设置 DUALMODESYNC)、 在 TX0 和 TX1 输出上是否都复制了 HSYNC、VSYNC 和 DE? 还是仅存在于 TX0 上?

LT9211 桥接芯片只能解码标准的单链路 LVDS 信号。 如果没有在 TX1 上复制 SYNC 信号、则会说明我们的右桥接器无法同步的原因。

是否有一个无文档记载的寄存器或配置位在双链路模式下强制在两个 OLDI 输出上进行同步信号复制?

2.双单链路独立模式

AM62Px 文档提到了对的支持 “与 2× OLDI 单链路无关“ 配置。 我们希望使用此模式驱动 DSS0 完全独立的两台 720×720 显示器。

然而,自 DSS1 已用于 DSI 面板 我们需要两个 OLDI 输出都来自 DSS0。 当前的tidss_oldi驱动程序似乎仅支持:

  • 单链路(一个 OLDI TX)
  • 克隆(两者上具有相同的映像)
  • 双链路(像素交错,用于一个宽面板)

是否可以将 DSS0 配置为在 TX0 和 TX1 上同时输出两个独立的单链路 OLDI 流? 如果是、如何实现? 这是否需要 DSS0 中的两个单独的视频流水线 (VP1 和 VP2)、或者单个 VP 是否可以驱动两个具有不同内容的 OLDI TX?

3.双链路模式下的 CLK1 输出

在双链路模式下、我们观察到了这一点 CLK1 不可用 —与 CLK0 相比、它看起来已取消相位/无效。 我们目前使用 CLK0 的 Y 型电缆为两个 LT9211 桥供电。

CLK1 是否应该在双链路模式下承载有效的像素时钟? 如果是、是否有启用它的寄存器配置? Y 型电缆权变措施可以正常工作、但不适用于生产设计。

4、替代方法建议

鉴于我们的约束条件(3 个显示器、即用于 DSI 的 DSS1、需要在两个 OLDI 输出端实现独立的图像)、我们是否可能错过了一种推荐的方法? 我们可以:

  • Tidss 驱动程序公开内容之外的寄存器级配置
  • 不同的 OLDI 模式
  • AM62Px DSS0 的任何硬件功能可能有所帮助

存在许多风险

  • 配置 : AM62P5 (Variscite VAR- SOM - AM62P)
  • 内核 : 6.12.17 (TI/Variscite SDK)
  • OLDI 桥接驱动器 :tidss_oldi.c(上游,未修改)
  • LVDS 至 MIPI 桥接器 : Lontium LT9211(两个芯片,每个面板一个)
  • 控制面板 :JDI 720×720 MIPI DSI(2 个数据通道+ 1 个时钟通道)、60 Hz
  • GUI 面板 :RM69A10 568×1232 DSS1 上的 MIPI DSI

感谢您对这些问题的指导。

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

    您好、Sylvio、

    感谢您的查询 ,提供详细的摘要和设置说明!

    我已经开始分析、但可能需要与我们的硬件和 Linux DSS/DSI/OLDI 2 级专家进行讨论。

    请预计、响应可能会出现延迟。

     如果您在下周中旬之前没有收到回复、请随时 ping 通此主题。

    我感谢你的耐心!

    此致

    Anastas Yordanov

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

    尊敬的 Sylvio:

    要独立使用 OLDI 驱动两个显示器、您需要使用 DSS0 在单链路模式下驱动 OLDI TX0 和 DSS1、以驱动 OLDI TX1。  然后、可从 DSS1 VP1 驱动 DSI 来实现第 3 个独立显示屏。 有关更多详细信息、请参阅以下应用手册。

    https://www.ti.com/lit/an/sprads3/sprads3.pdf?ts = 1774629127751&ref_url=https%253A%252F%252Fwww.ti.com%252Fsitesearch%252Fen-us%252Fdocs%252Funiversalsearch.tsp%253FlangPref%253Den-US%2526searchTerm%253DAM62P%2526nr%253D20

    此致、

    Luis Parga.

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

    您好、

    感谢您的答复和应用手册 SPRADS3。 我们遵循了 OLDI 单链路独立模式+ DSI 的建议 DTS 配置(表 3-1、第 3 行):

    - DSS0 VP0→OLDI TX0→LT9211(LVDS 至 MIPI 桥接器)→JDI 720×720 面板(左)
    - DSS1 VP0→OLDI TX1→LT9211(LVDS-to-MIPI 桥接)→JDI 720×720 面板(右)
    - DSS1 VP1→DSI→RM69A10 GUI 面板

    DTS 时钟配置正确 (MUX 235→DSS1 VP0 + PLL18、MUX 241→PLL18、MUX 240→PLL17)、全部三个 DRM 连接器报告为已连接、DSI 和左侧 LVDS 面板正常工作。 但是、右侧 LVDS 面板 (DSS1 VP0→OLDI TX1) 不产生信号:下游 LT9211 桥接器无法锁定其 RX PLL。

    经过全面调试后、我们确定了根本原因是当前 tidss 驱动程序的限制、特别是 tidss_dispc.c 中的传统 OLDI 实现 该实现假设 OLDI TX 只能由单个固定 DSS 视频端口提供服务。 在 AM62Px 上、(其中 DSS1 VP0 可以驱动 OLDI TX1)、当 OLDI TX1 由 DSS1 而不是 DSS0 拥有时、驱动程序不会正确地对其编程。

    我们知道、目前正在对 Dri-devel 进行审查的下列修补程序系列正在解决这一问题:

    [补丁 v8 0/4] DRM/tidss:添加 OLDI 桥接器支持
    作者:Aradhya Bhatia.
    www.mail-archive.com/.../msg546947.html

    本系列将 OLDI TX 介绍为正确的 DRM 桥接实体、并明确支持两个 OLDI TX 连接到两个不同 DSS 视频端口(独立模式)的情况。 它还需要一个配套的补丁系列来介绍 EARLY ENABLE/LAST_DISABLE DRM 桥接 API、因为 OLDI 配置必须在启用父级 VP 之前进行:

    相关性:介绍 EARLY ENABLE/LAST_DISABLE DRM 桥接器 API
    lore.kernel.org/.../

    我们有两个问题:

    1.是否有计划将此补丁系列 (V8) 及其依赖项集成到 AM62Px 的 Processor SDK 版本中? 如果是、哪个 SDK 版本和内核版本会包含它?

    与此同时、您是否有经过测试或推荐的补丁集可应用于当前 Processor SDK 内核、以便在 AM62Px 上启用 DSS1 VP0→OLDI TX1 独立模式? 我们正在使用 Variscite VAR-AM62P SOM BSP、可以直接将补丁应用到其内核树中。

    这是我们产品的阻塞问题、该产品是围绕 TI 记录并支持的 AM62Px 三显示功能设计的。 如果能就前进的道路提供任何指导、将是非常感谢的。

    此致、
    Sylvio

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

    尊敬的 Sylvio:

    感谢您的意见和新问题。

    我们可能需要联系 DSS 驱动程序软件团队。

    请预计可能会延迟响应。

    谢谢

    此致

    Anastas Yordanov  

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

    您好、Sylvio、

    非常抱歉、我没能及时将您的问题转达给我们的 Sitara  DSS 软件专家。

    现在、我已将查询重新分配给他、但根据他的工作量、响应可能会出现一些延迟。  

    如果您在下周中旬之前未获得答案、请 ping 通此主题。

    感谢您的理解和耐心!

    此致

    Anastas Yordanov

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

    尊敬的 Anastas:

    感谢您的跟进。 Variscite 的支持团队帮助我运行了比我的硬件配置更简单的测试、他们能够确认在他们身边可以使用三个独立的显示器。

    然后我在 Claude 的帮助下继续调查,我们发现问题是由 DTSI 文件中的一个错误引起的。 我们能够让两个独立的 LVDS 在我们的硬件上正常工作、我想分享根本原因、因为这是基本 DTSI (k3-am62p-j722s-common-main.dtsi) 中的一个错误、可能会影响任何尝试通过 DSS1 在独立模式下使用 OLDI TX1 的人。

    问题:

    在基本 DTSI 中、oldi1_dss1(DSS1 节点下的 OLDI TX1 发送器)定义为:

    oldi1_DSS1:oldi@1{
    reg =<0>;/*<-- bug:应为<1>*/
    ...
    };

    节点名称表示oldi@1、但reg设置为 0。 tidss_oldi驱动程序读取此reg值以确定oldi_instance、然后在功率控制宏中使用:

    #define OLDI_PWRDOWN_TX (n) 位 (n)

    使用reg = <0>、驱动程序调用OLDI_PWRDOWN_TX(0)=BIT(0)、它将在 OLDI TX0 而非 TX1 上通电。 由于OLDI_PD_CTRL寄存器是共享的(通过 SYSCON)dss_oldi_io_ctrl、这意味着 TX1 从不上电、因此不会产生 LVDS 信号、并且我们的 LT9211 桥接器无法锁定其 RX PLL。

    修复:

    reg = <0>reg = <1>oldi1_dss1节点中更改为k3-am62p-j722s-common-main.dtsi(第 1218 行周围)。 作为额外的保护、我们还会在电路板 DTS 中覆盖它。