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.

[FAQ] AM62Ax, AM62x, AM64x: rti_wdt_probe error on Linux boot

Other Parts Discussed in Thread: TLV320AIC26, AM6252, AM6441, AM6421, AM6411

I am using an AM62Ax, AM62x, or AM64x device. My part number has fewer A53 cores than the maximum number of A53 cores in that part family (see below for specific part numbers). Or, my part number does NOT have a GPU core, in a part family that can have GPU cores (e.g., AM623x, AM620x).

During Linux boot, I am running into an error like this:

[   17.491528] Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
[   17.499023] Modules linked in: dwc3_am62(+) rti_wdt(+) virtio_rpmsg_bus ti_k3_m4_remoteproc snd_soc_tlv320aic26 sa2ul pruss sha512_generic authenc cdns_dphy ltc2945 at24 sch_fq_codel cryptodev(O) ipv6
[   17.516894] CPU: 1 PID: 219 Comm: systemd-udevd Tainted: G           O      5.10.168-yocto-standard #1
[   17.526191] Hardware name: Critical Link MitySOM-AM62x (DT)
[   17.531760] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO BTYPE=--)
[   17.537772] pc : rti_wdt_probe+0x1e8/0x4f0 [rti_wdt]
[   17.542738] lr : rti_wdt_probe+0x1d8/0x4f0 [rti_wdt]
[   17.547693] sp : ffff800011c5b920
[   17.550999] x29: ffff800011c5b920 x28: 0000000000000100 
[   17.556309] x27: ffff80001011c1a8 x26: 0000000000000003 
[   17.561615] x25: ffff800011603d98 x24: 000000000000004a 
[   17.566923] x23: ffff00000467a920 x22: ffff000002423400 
[   17.572231] x21: ffff00000467a890 x20: ffff000002423410 
[   17.577539] x19: ffff00000467a880 x18: 0000000000000000 
[   17.582848] x17: 0000000000000000 x16: 0000000000000000 
[   17.588155] x15: 0000000000000000 x14: ffff000005c0d580 
[   17.593463] x13: 0000000000000000 x12: ffff8000117dd000 
[   17.598769] x11: ffff8000117d7000 x10: 0000000000001000 
[   17.604078] x9 : ffff80001075c0fc x8 : ffff8000114c2b7c 
[   17.609389] x7 : 0000000000000041 x6 : 000000000000008b 
[   17.614697] x5 : 000000000e021000 x4 : ffff000002423610 
[   17.620005] x3 : ffff000005e5cd00 x2 : 0000000000000000 
[   17.625312] x1 : ffff000005c0b900 x0 : ffff8000117d5090 
[   17.630620] Call trace:
[   17.633071]  rti_wdt_probe+0x1e8/0x4f0 [rti_wdt]
[   17.637691]  platform_drv_probe+0x5c/0xb0
[   17.641695]  really_probe+0xf4/0x408
[   17.645266]  driver_probe_device+0x60/0xc0
[   17.649357]  device_driver_attach+0x7c/0x88
[   17.653533]  __driver_attach+0x70/0x100
[   17.657362]  bus_for_each_dev+0x78/0xc8
[   17.661192]  driver_attach+0x2c/0x38
[   17.664762]  bus_add_driver+0x15c/0x210
[   17.668592]  driver_register+0x6c/0x128
[   17.672423]  __platform_driver_register+0x50/0x60
[   17.677124]  rti_wdt_driver_init+0x2c/0x1000 [rti_wdt]
[   17.682260]  do_one_initcall+0x4c/0x2e0
[   17.686094]  do_init_module+0x50/0x210
[   17.689838]  load_module+0x20fc/0x27a8
[   17.693580]  __do_sys_finit_module+0xb8/0xf8
[   17.697843]  __arm64_sys_finit_module+0x28/0x38
[   17.702370]  el0_svc_common.constprop.0+0x80/0x1d0
[   17.707154]  do_el0_svc+0x2c/0xa8
[   17.710465]  el0_svc+0x20/0x30
[   17.713515]  el0_sync_handler+0xb0/0xb8
[   17.717343]  el0_sync+0x180/0x1c0
[   17.720659] Code: f9000260 b140041f 54001128 91024000 (b9400000) 
[   17.726748] ---[ end trace fbd7824ab88012ad ]---

What is going on?

.

AM62Ax: the max number of A53 cores is 4, on AM62A*4. This FAQ applies to the other part numbers with 2 or 1 A53 cores: AM62A72, AM62A32, AM62A31

AM62x: the max number of A53 cores is 4, on AM62*4. This FAQ applies to the other part numbers with 2 or 1 A53 cores: AM6252, AM6251, AM6232, AM6231, AM6202, AM6201

AM64x: the max number of A53 cores is 2, on AM64*2. This FAQ applies to the other part numbers with 1 A53 core: AM6441, AM6421, AM6411

UPDATE January 2024: The information in this FAQ has been added to the processor academy modules. This FAQ will not be maintained going forward.
Please find the latest information in the processor's academy > Linux module > Porting > Porting CPU:
AM62x
AM62Ax
AM64x

  • The concepts of this FAQ apply to AM62Ax, AM62x, AM64x. However, we will use AM62x as an example.

    What is going on - the concept

    The AM62x Linux Academy created for Linux SDK 8.6 documents that if a part number does not have the maximum number of A53 cores, the A53 cores that do not exist need to be removed from the Linux devicetree: https://dev.ti.com/tirex/explore/node?a=XaWts8R__8.6.0.42%20v1&node=A__AGMop5fjikXYw819LJNi-w__linux_academy_am62x__XaWts8R__8.6.0.42%20v1

    However, there is some missing information. The power domain for each A53 core ALSO has a watchdog timer, called the Real Time Interrupt (RTI). For more information, search the technical reference manual (TRM) for "Real Time Interrupt".

    Let's look for rti in the Linux devicetree:

    ti-linux-kernel/arch/arm64/boot/dts/ti$ grep -r rti --include=k3-am62-main*
    k3-am62-main.dtsi:      main_rti0: watchdog@e000000 {
    k3-am62-main.dtsi:              compatible = "ti,j7-rti-wdt";
    k3-am62-main.dtsi:      main_rti1: watchdog@e010000 {
    k3-am62-main.dtsi:              compatible = "ti,j7-rti-wdt";
    k3-am62-main.dtsi:      main_rti2: watchdog@e020000 {
    k3-am62-main.dtsi:              compatible = "ti,j7-rti-wdt";
    k3-am62-main.dtsi:      main_rti3: watchdog@e030000 {
    k3-am62-main.dtsi:              compatible = "ti,j7-rti-wdt";
    k3-am62-main.dtsi:      main_rti15: watchdog@e0f0000 {
    k3-am62-main.dtsi:              compatible = "ti,j7-rti-wdt";
    

    As per the TRM, RTI0 - RTI3 is associated with A53_0 - A53_3, while RTI15 is associated with the GPU. That means that this FAQ also applies to part numbers that do not have a GPU, in part families that DO have a GPU.

    The RTI that is associated with a core that does not exist must also be disabled in the Linux device tree.

  • What to do - an example

    Let's say we are using an AM6252. It has 2 A53 cores instead of the max number of 4, and it does have the GPU.

    In this case, we need to disable A53 nodes 2 and 3, and also disable main_rti2 and main_rti3.

    &cluster0 {
     /delete-node/ core2;
     /delete-node/ core3;
    };
    
    
    &main_rti2 {
     status = "disabled";
    };
    
    
    &main_rti3 {
     status = "disabled";
    };