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.

[参考译文] PROCESSOR-SDK-AM335X:找不到时钟和计时器

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1521158/processor-sdk-am335x-clock-and-timer-not-found

器件型号:PROCESSOR-SDK-AM335X

工具/软件:

您好:  

我使用 AM335x 创建了电路板、并使用 SDK 工具通过硬件修改 U-Boot 和内核。  u-boot 正确启动我并尝试初始化内核。

问题是当内核尝试启动时,我有很多错误的时钟和计时器和系统停止启动。  

[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@38 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@1c not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@24 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@120 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@e8 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@0 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@18 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@0/clock@14c not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@400/clock@0 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@400/clock@14 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@400/clock@b0 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@600/clock@0 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@800/clock@0 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@900/clock@0 not found from clkctrl data.
[    0.000000] /ocp/l4_wkup@44c00000/segment@200000/target-module@0/prcm@0/clock@a00/clock@0 not found from clkctrl data.
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-sys-clkin-22!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-dpll-core-m4!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-dpll-core-m5!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-dpll-core-m6!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-dpll-mpu-m2!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-dpll-ddr-m2!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-dpll-disp-m2!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-dpll-per-m2!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-pruss-ocp-gclk!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-mmu-fck-1!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-timer1-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-timer2-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-timer3-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-timer4-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-timer5-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-timer6-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-timer7-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-usbotg-fck-8!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-ieee5000-fck-1!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-wdt1-fck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-cpsw-cpts-rft!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-gpio0-dbclk-mux!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clock-lcd-gclk!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for gfx_fclk_clksel_ck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for gfx_fck_div_ck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for sysclkout_pre_ck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clkout2_div_ck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for clkout2_ck!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for ehrpwm0_tbclk!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for ehrpwm1_tbclk!
[    0.000000] ti_clk_get_reg_addr: clk-provider not found for ehrpwm2_tbclk!
[    0.000000] dmtimer_systimer_init: unable to detect system timers, update dtb?
[    0.000000] Failed to initialize '/ocp/l4_wkup@44c00000/segment@200000/target-module@31000/timer@0': -22
[    0.000000] dmtimer_systimer_init: unable to detect system timers, update dtb?
[    0.000000] Failed to initialize '/ocp/interconnect@48000000/segment@0/target-module@40000/timer@0': -22
[    0.000000] dmtimer_systimer_init: unable to detect system timers, update dtb?
[    0.000000] Failed to initialize '/ocp/interconnect@48000000/segment@0/target-module@42000/timer@0': -22
[    0.000000] dmtimer_systimer_init: unable to detect system timers, update dtb?
[    0.000000] Failed to initialize '/ocp/interconnect@48000000/segment@0/target-module@44000/timer@0': -22
[    0.000000] dmtimer_systimer_init: unable to detect system timers, update dtb?
[    0.000000] Failed to initialize '/ocp/interconnect@48000000/segment@0/target-module@46000/timer@0': -22
[    0.000000] dmtimer_systimer_init: unable to detect system timers, update dtb?
[    0.000000] Failed to initialize '/ocp/interconnect@48000000/segment@0/target-module@48000/timer@0': -22
[    0.000000] dmtimer_systimer_init: unable to detect system timers, update dtb?
[    0.000000] Failed to initialize '/ocp/interconnect@48000000/segment@0/target-module@4a000/timer@0': -22
[    0.000000] timer_probe: no matching timers found

对于硬件、我使用了与 AM335x-EVM 相同的元件和连接、并连接 SYSBOOT [15:14 ]= 01b = 24MHz。



我查看了有关 Board_Port 的所有文件(假设在创建电路板时要复制)(https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_03_05_02/exports/docs/linux/How_to_Guides/EVM/U-Boot.html#integration-support-for-a-new-board-intro-the-u-boot-tree) 、我只找到了以下与时钟和计时器有关的项目。

&rtc {
	clocks = <&clk_32768_ck>, <&clk_24mhz_clkctrl AM3_CLK_24MHZ_CLKDIV32K_CLKCTRL 0>;
	clock-names = "ext-clk", "int-clk";
};

/* Clock Defines */
#define V_OSCK				24000000  /* Clock output from T2 */
#define V_SCLK				(V_OSCK)

因为我找不到为时钟和计时器充电的元素、我可能会发生什么情况?

谢谢、  

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

    您好、

    今天我继续测试,最后我发现问题是因为 DTB 不兼容我的硬件。 也就是说、我为硬件修改了以下行。

    模型=“TI AM335x EVM“;
    兼容=“ti、am335x-evm“、“ti、am33xx“;

    我已验证我为硬件创建的 dtb 文件是否加载正确、但在修改兼容文本时、它会停止加载操作系统。
    当操作系统启动时、它如何知道它在哪个硬件上运行? 如何修改它、以便它知道这是我的硬件而不是 AM335x EVM?

    谢谢、  

    Xavier

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

    尊敬的 Xavier:
    一些内核平台驱动程序(如时钟驱动程序或 CPU 频率驱动程序)在板级查找兼容字符串、然后才能正常运行...

    a0797059@jiji:~/git/linux (ti-linux-6.1.y)
    $ git grep '"ti,am33xx"' drivers/
    drivers/clk/ti/clkctrl.c:       if (of_machine_is_compatible("ti,am33xx"))
    drivers/clocksource/timer-ti-dm-systimer.c:     if (of_machine_is_compatible("ti,am33xx") ||
    drivers/cpufreq/cpufreq-dt-platdev.c:   { .compatible = "ti,am33xx", },
    drivers/cpufreq/ti-cpufreq.c:   { .compatible = "ti,am33xx", .data = &am3x_soc_data, },
    drivers/net/ethernet/ti/cpsw-common.c:  if (of_machine_is_compatible("ti,am33xx"))
    drivers/soc/ti/pm33xx.c:        if (!of_machine_is_compatible("ti,am33xx") &&

    因此、 定义板级兼容节点的正确方法是将平台级兼容字符串保留在`compatible`列表中、就像任何其他基于 AM335x 的电路板那样、这样驱动程序就可以与您的电路板匹配。

    如下所示:

    compatible = "xavier-corporation,am335x-custom-board", "ti,am33xx";

    此致、Andreas