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.

[参考译文] Linux/DRA744:DRA744:如何使用扩展显示功能和2个 VOUT 显示2880x960分辨率

Guru**** 2600335 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/636694/linux-dra744-dra744-how-to-display-2880x960-resolution-by-using-extended-display-features-and-2-vout

器件型号:DRA744

工具/软件:Linux

我们使用的是 DRA7xx 信息娱乐处理器 J6和 Linux 内核4.4.23。

除了 e2e 帖子:

https://e2e.ti.com/support/arm/automotive_processors/f/1020/p/575710/2259260#2259260

参考图:图11-4. 显示子系统时钟树、请参阅下图。

默认情况下、HDMI 驱动程序(在 drivers/GPU/DRM/omapdrm 中)使用此配置:

F_CLK (多路复用器1)由 DSS_CLK (DSS_CLK_SRC_FCK)提供

如果我们尝试使用常见的 DSS_CLK 源(而不是来自 DPLL 的视频 PLL 线路)同步 LCD、并在启用显示屏之前引入"热复位"、则2 Vout HSYNC 之间的时间为~2ns (请参阅下面的示波器图)。

但使用这种方法、HDMI 不再起作用。

可以将 HDMI 配置为使用内部生成的时钟、而不是默认的 DSS_CLK?

怎么可能?

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

    这是使用 LCD1和 LCD2并激活 PLL Video1和 PLL Video 2的标准配置(DS_clockdump):

    e2e.ti.com/.../standard_5F00_configuration.txt

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

    为了获得 HSYNC 之间的同步(如上图中所示的2ns 延迟)、我们使用 DS_CLK 作为 F_CLK 源、这是 LCD1和 LCD2的共用源、并且我们禁用了视频 PLL:

    e2e.ti.com/.../our_5F00_configuration.txt

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

    我已将您的问题转交给 DSS 专家。

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

    我需要几天的时间来回答这个问题。 我需要了解 HDMI 为什么会停止工作。

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

    你好,Venkat,谢谢。

    我添加了更多详细信息。

    为了使 LCD 能够与常见的 dss_clk 配合使用、我们在驱动程序 dpi.c 中修改了为 dra7xx 选择时钟源的函数:

    diff --git a/drivers/GPU/DRM/omapdrm/dss/dpi.c b/drivers/GPU/DRM/omapdrm/dss/dpi.c
    索引03429c6..272d73f 100644
    -- a/drivers/GPU/DRM/omapdrm/dss/dpi.c
    ++ b/drivers/GPU/DRM/omapdrm/dss/dpi.c
    @@-78、24 +78、24 @@静态枚举 dss_clk_source dpI_get_clk_src_dra7xx (enum omap_channel 通道)
    开关(通道){
    OMAP-DSS_CHANGE_LCD 案例:
    + IF (DSS_PLL_find_by_src (DSS_CLK_SRC_FCK)= NULL)
    + RETURN DSS_CLK_SRC_FCK;
    IF (DSS_PLL_find_by_src (DSS_CLK_SRC_PLL1_1))
    返回 DSS_CLK_SRC_PLL1_1;
    OMAP-DSS_CHANGE_LCD2案例:
    + IF (DSS_PLL_find_by_src (DSS_CLK_SRC_FCK)= NULL)
    + RETURN DSS_CLK_SRC_FCK;
    IF (DSS_PLL_find_by_src (DSS_CLK_SRC_PLL1_3))
    返回 DSS_CLK_SRC_PLL1_3;
    + IF (DSS_PLL_find_by_src (DSS_CLK_SRC_PLL2_3))
    + RETURN DSS_CLK_SRC_PLL2_3;
    OMAP-DSS_CHANGE_LCD3案例:
    + IF (DSS_PLL_find_by_src (DSS_CLK_SRC_FCK)= NULL)
    + RETURN DSS_CLK_SRC_FCK;
    IF (DSS_PLL_find_by_src (DSS_CLK_SRC_PLL2_1))
    返回 DSS_CLK_SRC_PLL2_1;
    IF (DSS_PLL_find_by_src (DSS_CLK_SRC_PLL1_3))
     
      
    通过这种方式(并在启用 LCD 之前添加热复位)、我们可以使 LCD 与2ns 延迟同步工作。
    在驱动程序中、我们看到 DSS_CLK 用于为 dispc 创建 F_CLK 信号。
     
    应用此补丁的一个区别在于 H12除数寄存器:cm_DIV_H12_DPLL_PER
    该值从0x00000204传递到0x0000020B (将 DPLL (H12+1)后分频因子从4更改为 B)。
     
    如果我们手动将该寄存器强制为旧值、
    devmem2 0x4a00815c 0x00000204
    我们得到 HDMI 可以工作、但 LCD 不能工作。
     
    我们希望确保该除数 CM_DIV_H12_DPLL_PER 仅对 DSS 子系统产生影响、或者知道该时钟信号对于与 DSS 不同的其他外设是否也很重要。 这是我们的另一个重要问题。
     
     
    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    很抱歉耽误你的答复。

    DPLL_PER HSDIV 12仅馈入 DSS_GFCLK。 这会影响任何其他 IP。

    对于 LCD 输出和 HDMI、您尝试实现的像素时钟频率是多少?

    您是否考虑使用 DPLL Video1 HS DIV3作为 LCD2和 LCD3的输入? 如果需要、可以使用 DSS 内的 parally_SEL 多路复用器将 LCD3输出到 LCD1输出?

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

    感谢您的回答、

    "DPLL_PER HSDIV 12仅馈入 DSS_GFCLK。 这会影响任何其他 IP。"

    好的、好的!

    "对于 LCD 输出和 HDMI、您尝试实现的像素时钟频率是多少:"

    我们在数据表中提供了以下范围:

    LCD 时钟:85MHz 至93MHz

    HDMI 时钟:32.4至41.2 MHz

    "您是否考虑使用 DPLL Video1 HS DIV3..."

    是的、这也是我们考虑的解决方案、但从测量结果来看、LCD 同步不是"可"的、并且可能在2-12ns 范围内变化(HSYNC 之间的延迟+或-)。

    然后我们决定强制使用更稳定且 HSYNC 之间的延迟为~2ns 的 DSS_CLK。

    这是在视频 PLL 1-3至 LCD2和 LCD3以及 mux13/dpi1设为 LCD3的情况下进行的测量(请参阅~10ns 延迟):

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

    >>但通过这种方法、HDMI 不再工作。

    HDMI 无法正常工作意味着什么? 您是否遇到同步错误或 HDMI 接口根本不出现?

    此致、
    Venkat
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个问题、最终产品将使用哪个 DRA7变体?

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

    >>但通过这种方法、HDMI 不再工作。

    HDMI 无法正常工作意味着什么? 您是否遇到同步错误或 HDMI 接口根本不出现?

    HDMI 接口出现、但 HDMI 时钟不正确:通过对 DSS_CLOCK 除数(CM_DIV_H12_DPLL_PER 寄存器)的特定写操作手动调整时钟、我们可以让 HDMI 工作:

    devmem2 0x4A00815C w 0x00000204 => HDMI 工作、但 LCD 不工作

    devmem2 0x4A00815C w 0x0000020B => HDMI 不工作、LCD 工作并且处于同步状态

    可能(我们假设)在强制为所有 dpi 视频 LCD 使用 DSS_clock 后、驱动程序无法计算 HDMI 的正确分频值。

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

    最终产品将使用哪种 DRA7型号?

    DRA7xxP、 DSS 的时钟方案在"控制模块"中有所不同(它可以采用"备用外部时钟")。

    但我们不能使用该外部源、因为我们的原理图中没有该外部源、而且我们的电路板上没有 J6P...

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

    您好!

    我查看了您之前共享的时钟转储。  在这两个转储中、HDMI PLL 设置为相同的值。 我们怀疑在分频器从0x4 -> 0xB 变为0x4后、DSS 功能时钟太慢、无法处理 HDMI 数据速率。 一个要检查的选项是从 HDMI PLL 为 DSS 计时、而不是从 PRCM 为 DSS_CLK 计时、同时从 DSS_CLK 为 LCD1和 LCD2计时。 此控制通过 DSS_CTRL 寄存器(0x5800 0040)完成。

    您还能分享您正在使用的确切 LCD 时序吗? 我希望能够在我的末尾复制设置 我正在从 DT 查找以下模块。

          面板正时{
             时钟频率=<154000000>;
             hactive =<1920>;
             Vactive =<1200>;

             前沿=<112>;
             后沿=<32>;
             HSYNC-LEN =<16>;

             垂直前沿=<16>;
             后沿=<16>;
             vsync-len =<2>;

             HSYNC-ACTIVE =<0>;
             vsync-active =<0>;
             停用=<1>;
             像素时钟激活=<1>;
          };

    此致、

    Venkat

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

    勘误表1.

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

    勘误表2.

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

    e2e.ti.com/.../4375.mta.dts.zip

    LCD
          面板正时{
            时钟频率=<69300404>;
              hactive =<1280>;
              Vactive =<800>;
              前沿=<48>;
              后沿=<44>;
              HSYNC-LEN =<32>;
              垂直前沿=<4>;
              后沿=<7>;
              vsync-len =<12>;
              HSYNC-ACTIVE =<0>;
              vsync-active =<0>;
              停用=<1>;
              像素时钟激活=<1>;
          };

    HDMI
          面板正时{
              时钟频率=<97344000>;
              hactive =<1920>;
              Vactive =<720>;
              前沿=<60>;
              后沿=<80>;
              HSYNC-LEN =<20>;
              垂直前沿=<2>;
              后沿=<57>;
              vsync-len =<1>;
              HSYNC-ACTIVE =<1>;
              vsync-active =<1>;
              停用=<1>;
              像素时钟激活=<1>;
          };
          

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

    感谢大家分享时间安排。 正如我在上次答复中提到的、我们正在开发一个补丁来从 HDMI PLL 设置 DSS 功能时钟。 我们将向您提供更新。

    此致、
    Venkat
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "一个要检查的选项是从 HDMI PLL 为 DSS 计时、而不是从 PRCM 为 DSS_CLK 计时、同时从 DSS_CLK 为 LCD1和 LCD2计时。 此控制通过 DSS_CTRL 寄存器(0x5800 0040)完成。"

    您是要设置寄存器 DSS_CTRL 位字段 F_CLK_SWITCH (位9:7)=>从0x0开始:选择 DSS_CLK (来自 PRCM)、默认值、
    更改为=> 0x3:是否选择了 DPLL_HDMI_CLK1 (来自 DPLL_HDMI)?

    我们不知道如何在 DSS (或 HDMI)驱动程序(或 DTS)中实现这一点。
    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "我们正在开发一个补丁、以通过 HDMI PLL 设置 DSS 功能时钟。 我们将向您提供更新"

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

    您好!

    我们正在处理该补丁。 我们将在测试更新后发布更新。

    此致、

    Venkat

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

    好的

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

    请查看此补丁、其中视频1 PLL 用作 DSS 功能时钟、而不是 DPLL_PER。

    HACK:使用 video1 PLL 作为 DSS FCK
    review.omapzoom.org/38748

    使用此补丁、我验证了 LCD 像素时钟可以从 DPLL_PER HSDIV12派生出来、并且 HDMI 继续正常工作。 但是、我不确定热复位如何工作、因为 DSS 功能时钟现在来自 DSS 内的 PLL。

    请先在没有预热复位的情况下、然后在预热复位的情况下、在您的设置中尝试此操作。

    此致、
    Venkat
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Venkat、非常感谢您分享您的补丁。
    我们已验证应用此补丁的 LCD 和 HDMI 是否能正常工作!!

    我们还进行了热复位测试:这对于 LCD 的同步时序是必需的(如果没有热复位、则 LCD 不是同步的)。

    我认为这个补丁解决了我们的问题、因为通过这种方式、LCD 可以使用 DSS_CLK 而不会影响 HDMI。

    现在、我必须验证此解决方案的"可操作性":请给我一些时间进行其他测试、然后再关闭问题。
    非常感谢
    Massimo