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/AM5728:3个视频输出的 PLL 时钟设置

Guru**** 2551110 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/590341/linux-am5728-pll-clock-setting-for-3-video-outputs

器件型号:AM5728

工具/软件:Linux

您好、专家、

我们在 am5728上有一个具有3个视频输出的电路板。

DSS 通道 lcd1、vout1连接到我们的 HDMI 编码器1。
dss 通道 tv、hdmi 至 tpd12。
DSS 通道 lcd2、vout2到输出 HDMI 编码器2。

但是、我无法正确配置 clk src。
DSS-PLL 驱动器不能将 M4和 M6时钟都设置为有效。

如何配置视频输出 src clk?
我应该使用视频2 PLL 吗?

我的 PSDK 版本是3.02.05。

此致、
Hugo


=========================== DSS 时钟脚本================================
转储 DSS 的内部时钟和多路复用器

CTRL_CORE_DSS_PLL_CONTROL (0x4a002538)= 0x00000282
视频1 PLL:已启用
VIDEO2 PLL:已禁用
HDMI PLL:已启用
DSI1_A_CLK 多路复用器:DPLL Video1
DSI1_B_CLK 多路复用器:DPLL Video1
DSI1_C_CLK 多路复用器:DPLL Video1

DSS_CTRL (0x58000040)= 0x00011001
2:LCD1时钟开关:DSI1_A_CLK
3:LCD2时钟开关:DSI1_B_CLK
10:LCD3时钟开关:DSS 时钟
1:func clk 开关:dss clk
13:DPI1输出:LCD1

DSS_STATUS (0x5800005C)= 0x01409282

DSI_CLK_CTRL (0x58004054)= 0x80004001

CM_DSS_CLKSTCTRL (0x4A009100)= 0x00040F03

CM_DSS_DSS_CLKCTRL (0x4A009120)= 0x00001702

===================================================================================================
DPLL 视频1的寄存器转储
|------------------------- |
|地址(十六进制)|数据(十六进制)|
|------------------------- |
| 0x58004300 | 0x00000018 |
| 0x58004304 | 0x00002603 |
| 0x58004308 | 0x00000000 |
| 0x5800430C | 0x000DEC4E |
| 0x58004310 | 0x00E06008 |
| 0x58004314 | 0x0000000B |
| 0x58004318 | 0x00000000 |
| 0x5800431C | 0x00000000 |
| 0x58004320 | 0x00000000 |
|------------------------- |
DPLL 视频1的详细信息
PLL 状态:已锁定
M4 hsdiv(1):未激活
M5 hsdiv(2):未激活
M6 hsdiv (3):激活
M7 hsdiv(4):未激活

PLL_REGM = 1782
PLL_REGN = 39
M4 DIV = 0
M6 DIV = 11
M7 DIV = 0

时钟计算(DPLL 视频1)
SYSCLK = 20000000
DCO clk = SYSCLK * 2 * REGM /(REGN + 1)= 1782000000
M4clk (clkcout1)= DCO clk /(M4 DIV + 1)= 0
M6clk (clkcout3)= DCO clk /(M6 DIV + 1)= 148500000
M7clk (clkcout4)= DCO clk /(M7 DIV + 1)= 0

===================================================================================================
DPLL HDMI 的寄存器转储
|------------------------- |
|地址(十六进制)|数据(十六进制)|
|------------------------- |
| 0x58040200 | 0x00000018 |
| 0x58040204 | 0x00000003 |
| 0x58040208 | 0x00000000 |
| 0x5804020C | 0x0003600E |
| 0x58040210 | 0x00602004 |
| 0x58040214 | 0x00001400 |
| 0x58040218 | 0x00000000 |
| 0x5804021C | 0x00000000 |
| 0x58040220 | 0x00040000 |
|------------------------- |
DPLL HDMI 详细信息
PLL 状态:已锁定
M4 hsdiv(1):未激活
M5 hsdiv(2):未激活
M6 hsdiv(3):未激活
M7 hsdiv(4):未激活

PLL_REGM = 432
PLL_REGN = 7
M4 DIV = 0
M6 DIV = 0
M7 DIV = 0
PLL_REGM2 = 1
PLL_REGM_F = 1.
PLL_SD = 5
HDMI_SSC_CONFIGURATION1 (应为零) 0x00000000
HDMI_SSC_configuration2 (应为零) 0x00000000

时钟计算(DPLL HDMI)
SYSCLK = 20000000
CLKOUT = SYSCLK * REGM /(REGM2 *(REGN + 1))= 1080000000

===================================================================================================
多路复用器的时钟 O/P
DPLL PER H12输出192000000
CM_DIV_H12_DPLL_PER (0x4A00815C)= 0x00000204

DSI1_A_CLK:0
DSI1_B_CLK:148500000
DSI1_C_CLK:148500000

DISPC_di遮 阳板(0x58001804)= 0x00010001

2:LCD1时钟:0
3:LCD2时钟:148500000
10:LCD3时钟:192000000
1:func clk:192000000

LCD1逻辑 clk (/ 1):0 pix clk (/ 1):0
LCD2逻辑 clk (/ 1):148500000 pix clk (/ 1):148500000
LCD3逻辑时钟(/ 4):48000000 pix 时钟(/ 1):48000000

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    已通知视频专家。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我现在在函数 DSS_PLL_WRITE_CONFIG_TYPE_A 中添加了一个补丁来强制 M4/M6处于活动状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您应该使用 PLL2。

    如果内核足够新,则在 dpi.c 中有 dpi_get_clk_src_dra7xx ()。 此时会出现'OMAP-DSS_CHANGE_LCD2'的情况、默认情况下、该情况当前会返回 PLL1_3、然后返回 PLL2_3秒。 应针对您的情况交换它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试在 dpi_get_clk_src_dra7xx ()中交换 PLL1_3和 PLL2_3。

    但是 、视频2 PLL 仍处于非活动状态。

    如何以通用方式启用视频2 PLL?

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

    您能否分享您所做更改的不同之处以及您使用的 Linux 内核版本?

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

    我只需在  函数 dpi_get_clk_src_dra7xx 的 OMAP-DSS_channel_LCD2案例中交换 DSS_CLK_SRC_PLL1_3和 DSS_CLK_SRC_PLL2_3。

    我的 Linux 内核基于 PSDK 3.02.05、是4.4.32。

    静态 DSS_clk_source dpi_get_clk_src_dra7xx (enum OMAP-channel channel)
    {
    //
    *可能的时钟源:
    * LCD1:FCK/PLL1_HDMI_PLL
    * LCD2:FCK/PLL1_3/HDMI_PLL (SRC 74x:PLL2_CLK)
    * LCDL3_CLK_RETURN
    
    (CC_CLK_CC_CLK_CLK_CCS_CLK_CCS_CLK_CCS_CLK_CLK
    
    
    
    
    
    
    
    
    
    )(SRC:CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CCS_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_ENCH)
    
    *(ADC_RETURN:CCS_CLK_CCS_CLK_CLK_CLK_CLK_CCS_CLK_CLK_CLK_CLK_CLK_CLK_CCS_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CCS_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CL
    案例 OMAD_DSS_CHANNEL LCD3:
    {
    IF (DSS_PLL_FIND_BY_src (DSS_CLK_SRC_PLL2_1)
    返回 DSS_CLK_SRC_PLL2_1;
    if (DSS_PLL_FIND_BY_src (SRC_CLK_SRC_PLL2_3)
    )返回 DSS_CLK_SRC_PLL2_1;}
    
    默认
    
    
    
    值:LL1_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_CLK_3)};}返回:默认值
    

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

    这是我的错
    它可以处理以下更改。

    再次感谢你。


    案例 OMAP-DSS_CHANGE_LCD2: { IF (DSS_PLL_FIND_BY_src (DSS_CLK_SRC_PLL2_1) 返回 DSS_CLK_SRC_PLL2_1; IF (DSS_PLL_FIND_BY_src (SRC_CLK_SRC_PLL2_3) )返回 DSS_CLK_PLL1_3; }

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

    大家好、Manisha、

    在交换 PLL2_3和 PLL1_3后仍然出现错误。

    在函数 DSS_PLL_WRITE_CONFIG_TYPE_A ()中、

    omapdss PLL 错误:无法锁定 DSS DPLL。

    它会导致 dpI_set_mode 失败。

    您对此有什么意见或建议吗?

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

    建议的更改在我们的末尾使用内核 v4.9进行了测试、并验证 了两个视频 PLL 都已启用、并且两个 LCD 输出的同步速度为60fps 时工作正常。

    您是否还负责 DTS 配置中所需的更改?

    需要在 AM5 EVM DTS 文件中定义第二个 LCD,并将其设置为使用第二个端口,然后如上所述更改 dpi.c。  

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

    大家好、Manisha、

    我们将使用内核 v4.9进行尝试。

    我觉得我们的 DTS 设置还可以。

    &DSS{
    status ="确定";
    端口{
    #address-cells =<1>;
    #size-cells =<0>;
    
    端口@0{
    reg =<0>;
    dpi_out_1:端点{
    remote-endpoint =<&HDMI_Encoder_1_in>;
    数据线=<24>;
    };
    }
    ;端口@1{
    reg =<1>
    
    ;}端点=<2_deot_out>
    
    
    
    ;}
    }; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 如果仍然不起作用、请分享您所做更改的补丁、我们可以在结尾将其与我们的进行比较
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否仍在努力使其正常工作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Manisha、

    我们将资源切换为执行其他任务。

    目前、我们使用 video1 PLL 来驱动具有不同 DIV M4和 M6的 dpi1和 dpi2。

    此致、

    Hugo

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

    您好 Hugo、

    这是否意味着 LCD1和 LCD2输出现在都在为您服务? 如果没有、我注意到 在您的代码中未正确修改 dpi_get_clk_src_dra7xx ()。 您应该尝试以下操作-  

    OMAP-DSS_CHANGE_LCD2案例:

    IF (DSS_PLL_find_by_src (DSS_CLK_SRC_PLL2_3))
    返回 DSS_CLK_SRC_PLL2_3;
    IF (DSS_PLL_find_by_src (DSS_CLK_SRC_PLL1_3))
    返回 DSS_CLK_SRC_PLL1_3;

    此致、

    Manisha

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

    大家好、Manisha、

    我已经尝试过这种修改、但它仍然不起作用。

    VIDEO2 PLL: 已禁用

    此致、

    Hugo

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

    您好 Hugo、

    请查找随附的我们为测试 LCD1和 LCD2以及 HDMI 而创建的补丁。

    e2e.ti.com/.../0001_2D00_hack_2D00_for_2D00_am5_2D00_evm_2D00_vout1_2D00_2.patch

    由于我们没有配备三个显示屏的硬件、因此我们使用 kmstest 应用程序(kmstest --flip)测试了补丁。 应用源代码可在此处找到-  

    它基于最新的4.4内核。 但是、您需要更改内核配置以获得3个显示:将 CONFIG_DRM_OMAP_NUM_CRTCS 更改为3。  

    当内核使用 补丁进行编译、然后运行 kmstest exmaple 应用程序时、它在所有显示屏上都执行了页面翻转-

    可以看到 LCD 和 HDMI 上的移动条、这表明真实的显示屏正在工作。 此外、我们还可以看到 kmstest 中显示3个显示的打印速度为 fps ~60。 这表明、第三个显示屏也会正确计时并每16.6ms 获得一次 VSYNC。

    请将补丁与您的实施进行比较、并告知我们。