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.

[参考译文] AM6442:Linux 系统时钟漂移

Guru**** 2652495 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1576762/am6442-linux-system-clock-drift

器件型号: AM6442
主题: SysConfig 中讨论的其他器件

工具/软件:

您好:

我按照 EtherNet/IP 适配器内核隧道的说明 在评估板上设置演示。 对于 Linux 器件、我使用了推荐的 SDK 版本 TI Processor SDK v09.02.00.08。 但我不使用 SD 卡引导模式、而是使用 ospi、使用 SBL OSPI Linux

以太网通信正常工作、但我遇到了巨大的 Linux 系统时钟漂移 、每分钟约 6 秒。

但是、如果我刷写 闪存 Hello World 示例 、系统时钟运行正常。

您是否知道导致时钟漂移的原因?

此致

Martin

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

    我尚未使用 EtherNet/IP 适配器内核隧道演示、但在并行使用 Linux + R5f 软件时也遇到过类似问题。

    您可以尝试在开始隧道演示之前/之后检查 GTC(全局时间戳计数器,用于驱动用于 Linux 系统时钟的 ARM 计时器)的时钟是否发生变化。 您可以使用“k3conf dump clock“转储时钟、并在前后检查是否存在任何差异。

    此致、

    Dominic

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

    尊敬的 Dominic:

    感谢您的快速答复。 不知道这个工具、但它确实非常有用。 我发现如果隧道示例和 hello world 之间存在差异:

    138c138
    < |    13     |     2    | DEV_CPSW0_CPTS_RFT_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 200000000       |
    ---
    > |    13     |     2    | DEV_CPSW0_CPTS_RFT_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 225000000       |
    165c165
    < |    84     |     1    | DEV_CPTS0_CPTS_RFT_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 200000000       |
    ---
    > |    84     |     1    | DEV_CPTS0_CPTS_RFT_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 225000000       |
    219c219
    < |    19     |     1    | DEV_DCC3_DCC_CLKSRC1_CLK                                                                             | CLK_STATE_READY     | 200000000       |
    ---
    > |    19     |     1    | DEV_DCC3_DCC_CLKSRC1_CLK                                                                             | CLK_STATE_READY     | 225000000       |
    337,338c337,338
    < |    61     |     0    | DEV_GTC0_GTC_CLK                                                                                     | CLK_STATE_READY     | 200000000       |
    < |    61     |     1    | DEV_GTC0_GTC_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                           | CLK_STATE_READY     | 200000000       |
    ---
    > |    61     |     0    | DEV_GTC0_GTC_CLK                                                                                     | CLK_STATE_READY     | 225000000       |
    > |    61     |     1    | DEV_GTC0_GTC_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                           | CLK_STATE_READY     | 225000000       |
    410c410
    < |    23     |     2    | DEV_MCU_DCC0_DCC_CLKSRC2_CLK                                                                         | CLK_STATE_READY     | 48000000        |
    ---
    > |    23     |     2    | DEV_MCU_DCC0_DCC_CLKSRC2_CLK                                                                         | CLK_STATE_READY     | 96000000        |
    501c501
    < |   149     |     0    | DEV_MCU_UART0_FCLK_CLK                                                                               | CLK_STATE_READY     | 48000000        |
    ---
    > |   149     |     0    | DEV_MCU_UART0_FCLK_CLK                                                                               | CLK_STATE_READY     | 96000000        |
    503c503
    < |   160     |     0    | DEV_MCU_UART1_FCLK_CLK                                                                               | CLK_STATE_READY     | 48000000        |
    ---
    > |   160     |     0    | DEV_MCU_UART1_FCLK_CLK                                                                               | CLK_STATE_READY     | 96000000        |
    534,535c534,535
    < |   114     |     1    | DEV_PCIE0_PCIE_CPTS_RCLK_CLK                                                                         | CLK_STATE_READY     | 200000000       |
    < |   114     |     2    | DEV_PCIE0_PCIE_CPTS_RCLK_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                               | CLK_STATE_READY     | 200000000       |
    ---
    > |   114     |     1    | DEV_PCIE0_PCIE_CPTS_RCLK_CLK                                                                         | CLK_STATE_READY     | 225000000       |
    > |   114     |     2    | DEV_PCIE0_PCIE_CPTS_RCLK_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                               | CLK_STATE_READY     | 225000000       |
    571,572c571,572
    < |    81     |     3    | DEV_PRU_ICSSG0_IEP_CLK                                                                               | CLK_STATE_READY     | 200000000       |
    < |    81     |     4    | DEV_PRU_ICSSG0_IEP_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 200000000       |
    ---
    > |    81     |     3    | DEV_PRU_ICSSG0_IEP_CLK                                                                               | CLK_STATE_READY     | 225000000       |
    > |    81     |     4    | DEV_PRU_ICSSG0_IEP_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 225000000       |
    595,596c595,596
    < |    82     |     3    | DEV_PRU_ICSSG1_IEP_CLK                                                                               | CLK_STATE_READY     | 200000000       |
    < |    82     |     4    | DEV_PRU_ICSSG1_IEP_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 200000000       |
    ---
    > |    82     |     3    | DEV_PRU_ICSSG1_IEP_CLK                                                                               | CLK_STATE_READY     | 225000000       |
    > |    82     |     4    | DEV_PRU_ICSSG1_IEP_CLK_PARENT_POSTDIV4_16FF_MAIN_2_HSDIVOUT5_CLK                                     | CLK_STATE_READY     | 225000000       |

    像需要 200MHz 的 icssg 实例一样的接缝会改变 GTC。 SysConfig 中是否有办法阻止 GTC 更改? 可能禁用 IEP Clk 同步模式、但该模式显示为灰色、并且显示为内核时钟 (Hz) 设置。

    此致
    Martin

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

    尊敬的 Dominic:

    在这段时间里、我有另一个想法:我通过将其添加到器件树中来修复 Linux 中的预期时钟间隔形式:

    &a53_timer0 {
    	clock-frequency = <200000000>;
    };

    默认情况下不提供时钟频率、因此 ARMv8-TIMER 内核驱动程序会读取频率形式寄存器。 该值未根据 GTC 的更改进行更新。 它仍然是 225MHz。 为了在将来防止出现此类问题、是否还可以在 GTC 发生变化(单一真值来源)时更新该寄存器?

    此致
    Martin

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

    您好 Martin、

    我想您可以使用它作为权变措施、但您需要注意、现在 GTC 时钟是错误的、直到 R5f 启动的点(可能是 vai remoteproc?)。

    正确的位置是在 U-Boot(可能是 TF-A?)中、U-Boot 最初为 GTC 配置时钟、从一开始就为 200MHz 进行配置。 IIRC 是 U-Boot、它还会配置读取时钟频率的寄存器、从而将信息传播到 Linux。

    请注意、我不是 TI。 如果他们有人能就这个问题发表意见、那将是很好的。

    此致、

    Dominic

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

    尊敬的 Dominic:

    我不使用 Remoteproc 来启动 R5 内核、而是使用 SPL OSPI Linux 引导模式、因此我认为在探测到 arch arm timer 驱动程序之前、R5 内核已经配置了 GTC。

    但你是对的。 如果 TI 人员能验证这一点、那会很好!

    此致
    Martin

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

    您好 Martin、

    我尚未查看此示例的时钟频率、因此将向您学习。 我将在开发团队中循环、但我认为他们已在下周度假。 所以现在可能只是我们。

    在工程的 SysConfig 设置中、您是否看到为 PRU 内核和 IEP 计数器指定的特定时钟频率? 这些频率是什么?

    PLL2_hsdiv5 由多个 外设使用。 我尚未对此进行测试、但如果多个外设都使用相同的时钟源、但尝试将其配置为不同的频率、我预计应用的第一个设置会保留。 AM64x 时钟树工具是一个图形界面、可用于尝试不同的时钟设置并查看它对其他外设的影响。

    一种选择是为 IEP 计数器和 GTC 计数器设置不同的时钟源(如果您希望它们以单独的频率运行)、但 如果它们具有完全相同的时钟源、则更容易对齐时间戳。

    同意您要配置 u-boot 和 Linux 器件树、以便与您最终为 GTC 使用的任何时钟频率保持一致。 请注意、在 SDK 的后续版本(我认为是 SDK 11.x 之后的版本)中、我们对 u-boot 和 Linux 使用相同的器件树文件。 但是、SDK 9.x 仍具有用于 U-Boot 和 Linux 的单独器件树文件。

    此致、

    Nick

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

    您好 Martin、

    后续

    我已解锁该主题、因此可以继续对话。

    你们方面是否有任何更新?

    如果您看到 SBL 引导与 SPL 引导有不同的行为、则可能是因为 SBL 初始化设置的内核时钟与 SPL 引导不同。

    SPL 设置时钟频率在何处?

    我今天花了一些时间戳探 SDK 11.1(在检查线程时,我看到您使用的是 SDK 9.2、因此 uboot 文件的结构将不同)。 在本更高版本的 SDK 中、与 Linux 共享的器件树文件如下:
    TI-u-boot-2025.01+git/dts/上游/ src /ARM64/ti
    SPL/R5 器件树文件应位于以下位置:
    TI-u-boot-2025.01+git/arch/arm/dts

    看起来 R5F SPL 文件 k3-am642-r5-sk.dts 包含 linux/uboot 文件 k3-am642-sk.dts、该文件位于“DTS/上行“目录下(这允许 R5F SPL 文件根据需要引用器件树节点)。

    看起来、时钟名称“GTC"设置“设置为 200kHz:

    在 https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/am64x/clocks.html 上、我们可以看到 MAIN_0_HSDIVOUT6_CLK 是在 assigned-clock-parenter 条目中选择作为时钟源的输入(其中 GTC 的时钟 ID 为 61)。

    ti-u-boot-2025.01+git/arch/arm/dts/k3-am642-r5-evm.dts
    
            a53_0: a53@0 {
                    compatible = "ti,am654-rproc";
                    reg = <0x00 0x00a90000 0x00 0x10>;
                    power-domains = <&k3_pds 61 TI_SCI_PD_EXCLUSIVE>,
                                    <&k3_pds 135 TI_SCI_PD_EXCLUSIVE>,
                                    <&k3_pds 137 TI_SCI_PD_EXCLUSIVE>;
                    resets = <&k3_reset 135 0>;
                    clocks = <&k3_clks 61 0>, <&k3_clks 135 0>;
                    clock-names = "gtc", "core";
                    assigned-clocks = <&k3_clks 61 0>, <&k3_clks 135 0>;
                    assigned-clock-parents = <&k3_clks 61 2>;
                    assigned-clock-rates = <200000000>, <1000000000>;
                    ti,sci = <&dmsc>;
                    ti,sci-proc-id = <32>;
                    ti,sci-host-id = <10>;
                    bootph-pre-ram;
            };
    

    此致、

    Nick