SK-AM62P-LP: Linux kernel boot failed with 2G memory in SDK10.00.07.04

Part Number: SK-AM62P-LP
Other Parts Discussed in Thread: AM62P5, AM62P

Tool/software:

Hi TI team:

We are using the am62p5 with SDK version 10.00.07.04. Our board uses 2G memory and the EVM board uses 8G memory.

Thus we modified the uboot file k3-am62p5-sk.dts:

diff --git a/arch/arm/dts/k3-am62p5-sk.dts b/arch/arm/dts/k3-am62p5-sk.dts
index 474a033d..eaab7d57 100644
--- a/arch/arm/dts/k3-am62p5-sk.dts
+++ b/arch/arm/dts/k3-am62p5-sk.dts
@@ -36,9 +36,8 @@
        };

        memory@80000000 {
-               /* 8G RAM */
-               reg = <0x00000000 0x80000000 0x00000000 0x80000000>,
-                     <0x00000008 0x80000000 0x00000001 0x80000000>;
+               /* 2G RAM */
+               reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
                device_type = "memory";
                bootph-pre-ram;
        };

Then we rebuild the uboot and replace the tiboot3.bin, tispl.bin and u-boot.img in the SD Card and boot. But the Linux kernel cannot start properly.

This is the boot log:

U-Boot SPL 2024.04-dirty (Dec 02 2024 - 17:53:35 +0800)
SYSFW ABI: 4.0 (firmware rev 0x000a '10.0.8--v10.00.08 (Fiery Fox)')
SPL initial stack usage: 17048 bytes
Trying to boot from MMC2
Authentication passed
Authentication passed
Authentication passed
Authentication passed
Authentication passed
Starting ATF on ARM64 core...

NOTICE:  BL31: v2.10.0(release):v2.10.0-367-g00f1ec6b87-dirty
NOTICE:  BL31: Built : 16:09:05, Feb  9 2024

U-Boot SPL 2024.04-dirty (Dec 02 2024 - 17:53:45 +0800)
SYSFW ABI: 4.0 (firmware rev 0x000a '10.0.8--v10.00.08 (Fiery Fox)')
SPL initial stack usage: 1904 bytes
Trying to boot from MMC2
Authentication passed
Authentication passed


U-Boot 2024.04-dirty (Dec 02 2024 - 17:53:45 +0800)

SoC:   AM62PX SR1.0 HS-FS
Model: Texas Instruments AM62P5 SK
DRAM:  2 GiB
Core:  85 devices, 31 uclasses, devicetree: separate
MMC:   mmc@fa10000: 0, mmc@fa00000: 1
Loading Environment from nowhere... OK
In:    serial
Out:   serial
Err:   serial
Net:   eth0: ethernet@8000000port@1
Warning: ethernet@8000000port@2 (eth1) using random MAC address - 26:eb:8d:95:34:43
, eth1: ethernet@8000000port@2
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc1 is current device
SD/MMC found on device 1
574 bytes read in 10 ms (55.7 KiB/s)
Loaded env from uEnv.txt
Importing environment from mmc1 ...
20285952 bytes read in 244 ms (79.3 MiB/s)
63672 bytes read in 13 ms (4.7 MiB/s)
Working FDT set to 88000000
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
Working FDT set to 88000000
   Loading Device Tree to 000000008feed000, end 000000008fffffff ... OK
Working FDT set to 8feed000

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 6.6.32-ti-g6de6e418c80e-dirty (oe-user@oe-host) (aarch64-oe-linux-gcc (GCC) 13.3.0, GNU ld (GNU Binutils) 2.42.0.20240716) #1 SMP PREEMPT Fri Jul 26 14:32:20 UTC 2024
[    0.000000] KASLR disabled due to lack of seed
[    0.000000] Machine model: Texas Instruments AM62P5 SK
[    0.000000] earlycon: ns16550a0 at MMIO32 0x0000000002800000 (options '')
[    0.000000] printk: bootconsole [ns16550a0] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000db600000, size 576 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x00000000db600000..0x00000000ff5fffff (589824 KiB) map reusable linux,cma
[    0.000000] Reserved memory: created DMA memory pool at 0x000000009b500000, size 3 MiB
[    0.000000] OF: reserved mem: initialized node rtos-ipc-memory@9b500000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000009b500000..0x000000009b7fffff (3072 KiB) nomap non-reusable rtos-ipc-memory@9b500000
[    0.000000] Reserved memory: created DMA memory pool at 0x000000009b800000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node mcu-r5fss-dma-memory-region@9b800000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000009b800000..0x000000009b8fffff (1024 KiB) nomap non-reusable mcu-r5fss-dma-memory-region@9b800000
[    0.000000] Reserved memory: created DMA memory pool at 0x000000009b900000, size 15 MiB
[    0.000000] OF: reserved mem: initialized node mcu-r5fss-memory-region@9b900000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000009b900000..0x000000009c7fffff (15360 KiB) nomap non-reusable mcu-r5fss-memory-region@9b900000
[    0.000000] Reserved memory: created DMA memory pool at 0x000000009c800000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node r5f-dma-memory@9c800000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000009c800000..0x000000009c8fffff (1024 KiB) nomap non-reusable r5f-dma-memory@9c800000
[    0.000000] Reserved memory: created DMA memory pool at 0x000000009c900000, size 30 MiB
[    0.000000] OF: reserved mem: initialized node r5f-memory@9c900000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000009c900000..0x000000009e6fffff (30720 KiB) nomap non-reusable r5f-memory@9c900000
[    0.000000] OF: reserved mem: 0x000000009e780000..0x000000009e7fffff (512 KiB) nomap non-reusable tfa@9e780000
[    0.000000] OF: reserved mem: 0x000000009e800000..0x000000009fffffff (24576 KiB) nomap non-reusable optee@9e800000
[    0.000000] OF: reserved mem: 0x00000000ff700000..0x00000000ffffffff (9216 KiB) nomap non-reusable framebuffer@ff700000
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080000000-0x000000009b4fffff]
[    0.000000]   node   0: [mem 0x000000009b500000-0x000000009e6fffff]
[    0.000000]   node   0: [mem 0x000000009e700000-0x000000009e77ffff]
[    0.000000]   node   0: [mem 0x000000009e780000-0x000000009fffffff]
[    0.000000]   node   0: [mem 0x00000000a0000000-0x00000000ff6fffff]
[    0.000000]   node   0: [mem 0x00000000ff700000-0x00000000ffffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: Trusted OS migration not required
[    0.000000] psci: SMC Calling Convention v1.4
[    0.000000] percpu: Embedded 20 pages/cpu s42920 r8192 d30808 u81920
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: GIC system register CPU interface
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000 root=PARTUUID=cacf59d0-02 rw rootfstype=ext4 rootwait
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 516096
[    0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[    0.000000] software IO TLB: area num 4.
[    0.000000] software IO TLB: mapped [mem 0x00000000d4f00000-0x00000000d8f00000] (64MB)
[    0.000000] Memory: 1294700K/2097152K available (11968K kernel code, 1250K rwdata, 4036K rodata, 2432K init, 502K bss, 212628K reserved, 589824K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=4.
[    0.000000]  Trampoline variant of Tasks RCU enabled.
[    0.000000]  Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] GICv3: GIC: Using split EOI/Deactivate mode
[    0.000000] GICv3: 256 SPIs implemented
[    0.000000] GICv3: 0 Extended SPIs implemented
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GICv3: GICv3 features: 16 PPIs
[    0.000000] GICv3: CPU0: found redistributor 0 region 0:0x0000000001880000
[    0.000000] ITS [mem 0x01820000-0x0182ffff]
[    0.000000] GIC: enabling workaround for ITS: Socionext Synquacer pre-ITS
[    0.000000] ITS@0x0000000001820000: Devices Table too large, reduce ids 20->19
[    0.000000] ITS@0x0000000001820000: allocated 524288 Devices @80800000 (flat, esz 8, psz 64K, shr 0)
[    0.000000] ITS: using cache flushing for cmd queue
[    0.000000] GICv3: using LPI property table @0x0000000080040000
[    0.000000] GIC: using cache flushing for LPI property table
[    0.000000] GICv3: CPU0: using allocated LPI pending table @0x0000000080050000
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer(s) running at 200.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0x3ffffffffffffff max_cycles: 0x2e2049d3e8, max_idle_ns: 440795210634 ns
[    0.000000] sched_clock: 58 bits at 200MHz, resolution 5ns, wraps every 4398046511102ns

We tests on the EVM board again, and the results were the same.

Can you help analyze it?

Thanks

Wu Zehai

  • Can you try updating the Kernel device tree with the same to see if this does the trick? Perhaps something with U-Boot's memory fixup goes wrong as you remove a bank/region,  but I've not tested that myself.

    Regards, Andreas

  • Hi Andreas

    Today, I used the same method to modify the kernel device tree, but it's still the same. I modified the linux device tree file k3-am62p5-sk.dts :

    cxee@Linux:~/work/am62p/tmp_10_0/board-support/ti-linux-kernel-6.6.32+git-ti$ git diff arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    diff --git a/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts b/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    index 4f8557d3e..d1607da00 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    +++ b/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    @@ -52,9 +52,8 @@ framebuffer0: framebuffer@0 {
            };
    
            memory@80000000 {
    -               /* 8G RAM */
    -               reg = <0x00000000 0x80000000 0x00000000 0x80000000>,
    -                     <0x00000008 0x80000000 0x00000001 0x80000000>;
    +               /* 2G RAM */
    +               reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
                    device_type = "memory";
                    bootph-pre-ram;
            };
    

    And replace the file boot/dtb/ti/k3-am62p5-sk.dtb  in the SD Card.

    Can you give it a try?

    Thanks 

    Wu Zehai

  • Hi Wu,

    I can re-create the issue on my SK-AM62P board, somewhat to my surprise. I'm analyzing the root cause and will get back to you.

    Regards, Andreas

  • Wu,

    it turns out there's a bug in U-Boot of SDK v10.0 affecting reserved memory allocation, which will result in a crash during Kernel boot when ATF is being accessed. And the bug is getting exposed when you change the memory map. The bug will be fixed in our upcoming SDK v10.1, but you can already cherry-pick the commit on top of SDK v10.0 and get it working.

    This is the commit here:

    arm: mach-k3: j722s/am62p: Fixup TF-A/OP-TEE reserved-memory node in FDT
    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=0fffab10b4392d2f1b899a1e795b6e5aab5ddddf

    You can just cherry-pick it onto your tree like this...

    a0797059@jiji:~/git/u-boot (HEAD detached from 10.00.08)
    $ git cherry-pick 0fffab10b4392d2f1b899a1e795b6e5aab5ddddf
    [detached HEAD 61b51765a63] arm: mach-k3: j722s/am62p: Fixup TF-A/OP-TEE reserved-memory node in FDT
     Author: Jayesh Choudhary <j-choudhary@ti.com>
     Date: Tue Aug 27 15:43:31 2024 +0530
     5 files changed, 36 insertions(+)
     create mode 100644 arch/arm/mach-k3/am62p5_fdt.c
     create mode 100644 arch/arm/mach-k3/j722s_fdt.c

    And the only other thing you need is the change from 8GB -> 2GB exactly as per your initial post:

    a0797059@jiji:~/git/u-boot (HEAD detached from 10.00.08)
    $ git show 196c27a10a7
    commit 196c27a10a7115edb9c58d8081fe823f3cfe37e3
    Author: Andreas Dannenberg <dannenberg@ti.com>
    Date:   Tue Dec 3 14:13:47 2024 -0600
    
        arm: dts: k3-am62p5-sk: Switch from 8GB to 2GB of DDR
    
        Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
    
    diff --git a/arch/arm/dts/k3-am62p5-sk.dts b/arch/arm/dts/k3-am62p5-sk.dts
    index 474a033d22a..eaab7d57e8d 100644
    --- a/arch/arm/dts/k3-am62p5-sk.dts
    +++ b/arch/arm/dts/k3-am62p5-sk.dts
    @@ -36,9 +36,8 @@
            };
    
            memory@80000000 {
    -               /* 8G RAM */
    -               reg = <0x00000000 0x80000000 0x00000000 0x80000000>,
    -                     <0x00000008 0x80000000 0x00000001 0x80000000>;
    +               /* 2G RAM */
    +               reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
                    device_type = "memory";
                    bootph-pre-ram;
            };

    Then you'll be able too boot cleanly, and see your 2GB memory size from the shell:

    root@am62pxx-evm:~# free -h
                   total        used        free      shared  buff/cache   available
    Mem:           1.8Gi       438Mi       1.3Gi        76Mi       270Mi       1.4Gi
    Swap:             0B          0B          0B

    Regards, Andreas

  • Thanks Andreas. Now the kernel runs normally.