Other Parts Discussed in Thread: CDCE913, AM5718, PMP
Tool/software:
We are in the process of upgrading our SDK from version 05.03.00.07 to 08.02.01.00 on the TI AM5708 IDK. However, the system hangs at the "Starting kernel..."
message during the boot process.
Booting Log:
U-Boot SPL 2021.01-00003-g16d964ac27-dirty (May 02 2025 - 15:09:18 +0000)
DRA722-GP ES2.1
Trying to boot from MMC1
Loading Environment from FAT... *** Warning - bad CRC, using default environment
Loading Environment from MMC... *** Warning - bad CRC, using default environment
U-Boot 2021.01-00003-g16d964ac27-dirty (May 02 2025 - 15:09:18 +0000)
CPU : DRA722-GP ES2.1
Model: TI AM5708 IDK
Board: AM5708 IDK REV
DRAM: 1 GiB
MMC: OMAP SD/MMC: 0
Loading Environment from FAT... *** Warning - bad CRC, using default environment
Loading Environment from MMC... *** Warning - bad CRC, using default environment
invalid mmc device
i2c_write: error waiting for data ACK (status=0x116)
cdce9xx-clk cdce913@65: cdce9xx_reg_write: failed for addr:5, ret:-121
Net: Could not get PHY for ethernet@48484000: addr 0
eth2: ethernet@48484000
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
Failed to load 'boot.scr'
4468 bytes read in 12 ms (363.3 KiB/s)
Loaded env from uEnv.txt
Importing environment from mmc0 ...
Running uenvcmd ...
Failed to load 'newpart_attempt'
Failed to load 'newpart_request'
Failed to load 'PART_A'
Failed to load 'PART_B'
WARNING: Could not find either flag file (PART_A or PART_B). Will boot from PART_A by default
INFO: Booting from partition A (mmcblk0p2)
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
5251584 bytes read in 262 ms (19.1 MiB/s)
144370 bytes read in 21 ms (6.6 MiB/s)
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 8ffd9000, end 8ffff3f1 ... OK
Starting kernel ...
At this point, the system stops responding.
However, when we manually load the kernel and device tree from U-Boot using the following commands, the system begins booting partially:
Log:
U-Boot SPL 2021.01-00003-g16d964ac27-dirty (May 02 2025 - 15:09:18 +0000)
DRA722-GP ES2.1
Trying to boot from MMC1
Loading Environment from FAT... *** Warning - bad CRC, using default environment
Loading Environment from MMC... *** Warning - bad CRC, using default environment
U-Boot 2021.01-00003-g16d964ac27-dirty (May 02 2025 - 15:09:18 +0000)
CPU : DRA722-GP ES2.1
Model: TI AM5708 IDK
Board: AM5708 IDK REV
DRAM: 1 GiB
MMC: OMAP SD/MMC: 0
Loading Environment from FAT... *** Warning - bad CRC, using default environment
Loading Environment from MMC... *** Warning - bad CRC, using default environment
invalid mmc device
i2c_write: error waiting for data ACK (status=0x116)
cdce9xx-clk cdce913@65: cdce9xx_reg_write: failed for addr:5, ret:-121
Net: Could not get PHY for ethernet@48484000: addr 0
eth2: ethernet@48484000
Hit any key to stop autoboot: 0
=>
=>
=> ext4load mmc 0:2 0x82000000 /boot/zImage
5251584 bytes read in 227 ms (22.1 MiB/s)
=> ext4load mmc 0:2 0x88000000 /boot/am5708-idk.dtb
144370 bytes read in 15 ms (9.2 MiB/s)
=> bootz 0x82000000 - 0x88000000
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 8ffd9000, end 8ffff3f1 ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.10.100-g7a7a3af903 (root@useadevbtcvm001) (arm-linux-gnueabihf-gcc (Linaro GCC 7.2-2017.11) 7.2.1 20171011, GNU ld (Linaro_Binutils-2017.11) 2.28.2.20170706) #1 SMP PREEMPT Fri May 2 15:21:49 UTC 2025
[ 0.000000] CPU: ARMv7 Processor [412fc0f2] revision 2 (ARMv7), cr=30c5387d
[ 0.000000] CPU: div instructions available: patching division code
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
[ 0.000000] OF: fdt: Machine model: TI AM5718 IDK
[ 0.000000] earlycon: omap8250 at MMIO 0x000000004806a000 (options '')
[ 0.000000] printk: bootconsole [omap8250] enabled
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] efi: UEFI not found.
[ 0.000000] Reserved memory: created CMA memory pool at 0x0000000095800000, size 56 MiB
[ 0.000000] OF: reserved mem: initialized node ipu2-memory@95800000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created CMA memory pool at 0x0000000099000000, size 64 MiB
[ 0.000000] OF: reserved mem: initialized node dsp1-memory@99000000, compatible id shared-dma-pool
[ 0.000000] Reserved memory: created CMA memory pool at 0x000000009d000000, size 32 MiB
[ 0.000000] OF: reserved mem: initialized node ipu1-memory@9d000000, compatible id shared-dma-pool
[ 0.000000] cma: Reserved 24 MiB at 0x00000000be800000
[ 0.000000] OMAP4: Map 0x00000000afd00000 to (ptrval) for dram barrier
[ 0.000000] Hit pending asynchronous external abort (FSR=0x00001211) during first unmask, this is most likely caused by a firmware/bootloader bug.
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000080000000-0x00000000afcfffff]
[ 0.000000] Normal empty
[ 0.000000] HighMem [mem 0x00000000afd00000-0x00000000bfffffff]
The previous SDK booted automatically without any issues. Could you please advise on possible causes for the current behavior, and how we can configure U-Boot to automatically locate and load the zImage
from the root filesystem on partition 2 or 3?
We are using a custom board based on the AM5708 and booting from an SD card. The uEnv.txt
file has been attached.
Thank you in advance.
#########################################################################################################################################
#
# File: uEnv.txt
# Description: Controls which partition Linux will boot from
# Instructions: Place this file in the root of the boot paritition. It will automatically be processed by the standard Beaglebone uBoot startup
#
# ---------------------------- flag files used ----------------------------------
#
# NOTE: Content is arbitrary, but flag files MUST have non-zero length! (from Linux do not use "touch <filename>"; suggested mechanism is "echo 1 > <filename>")
#
# Exactly one of the following two flag files should always present:
# "PART_A" : requested boot is from partion A
# "PART_B" : requested boot is from partion B
# Software upgrade related flag files (these are not "normally" present):
# "newpart_request" : created by Linux to tell uboot that its next boot is the first attempt of booting into "new" partition
# "newpart_attempt" : created by uboot after seeing "newpart_request" and just prior to actually attempting booting into the "new" partition
#
# NOTE: except for the creation of "newpart_attempt" noted above, all flag file deleteions and creations are handled by Linux. See doc for details
#
# ---------------------------------------------------------------------------------
#
# ---------------------------- uBoot logic implemented by these commands ----------------------------
#
# 1. Check for file "newpart_attempt". If it exists, prev boot attempt must have failed, so boot to the "opposite" partition (using "setpart_reversed")
# **ELSE**
# 2 a. Check for file "newpart_request". If it exists, create file "newpart_attempt" indicating a new "first attempt" about to be tried
# b. Regardless of result in 2a, boot normally using "setpart_normal"
#
# ---------------------------------------------------------------------------------------------------------
#########################################################################################################################################
#
# code:
#
# strings for various messages appear below
msg_booting_from_a="INFO: Booting from partition A (mmcblk0p2)"
msg_booting_from_b="INFO: Booting from partition B (mmcblk0p3)"
msg_newpart_attempt="INFO: Booting into new partition (first time attempt)"
msg_newpart_fail="WARNING: Previous boot failed, reverting to alternate partition"
msg_file_missing="WARNING: Could not find either flag file (PART_A or PART_B). Will boot from PART_A by default"
# setpart_a: run this to set up booting from partition A by setting "mmcroot" to "/dev/mmcblk0p2" and to setting "bootpart" to "0:2"
setpart_a=echo ${msg_booting_from_a}; setenv mmcroot /dev/mmcblk0p2 ro; setenv bootpart 0:2;
# setpart_b: run this to set up booting from partition B by setting "mmcroot" to "/dev/mmcblk0p3" and to setting "bootpart" to "0:3"
setpart_b=echo ${msg_booting_from_b}; setenv mmcroot /dev/mmcblk0p3 ro; setenv bootpart 0:3;
# setpart_normal: run this to check for existence of non-empty file "PART_A" or "PART_B" and set up to boot from corresponding partition
setpart_normal=if fatload mmc 0:1 ${loadaddr} PART_A; then run setpart_a; elif fatload mmc 0:1 ${loadaddr} PART_B; then run setpart_b; else echo ${msg_file_missing}; run setpart_a; fi;
# setpart_reverse: run this to check for existence of non-empty file "PART_A" or "PART_B" and set up to boot from OPPOSITE partition
setpart_reversed=if fatload mmc 0:1 ${loadaddr} PART_A; then run setpart_b; elif fatload mmc 0:1 ${loadaddr} PART_B; then run setpart_a; else echo ${msg_file_missing}; run setpart_a; fi;
# newcheck: run this to check for the existing flag file "newpart_request". If it is, create a new flagfile named "newpart_attempt".
newcheck=if fatload mmc 0:1 ${loadaddr} newpart_request; then echo ${msg_newpart_attempt}; fatwrite mmc 0:1 ${loadaddr} newpart_attempt 2; fi
# uenvcmd: uenvcmd is a special variable that is automatically run by beaglebone's bootcmd just prior to actually booting
# - running this command implements the entirety or the required partition boot logic by using the various other commands above
uenvcmd=if fatload mmc 0:1 ${loadaddr} newpart_attempt; then echo ${msg_newpart_fail}; run setpart_reversed; else run newcheck; run setpart_normal; fi
#
#########################################################################################################################################
# end-of-file
Thanks,
Mahesh R