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.

AM3358: Falcon mode on BeagleBone Black

Part Number: AM3358

Greetings,

I have been having trouble enabling Falcon mode on the BeagleBone Black. I have a working U-Boot (v2022.04) and Linux (Debian 11.5, kernel v5.15.65-bone-rt-r30), but I have been unsuccessful thus far in enabling Falcon mode. 

Here is the output of my U-Boot console:

U-Boot SPL 2022.04 (Nov 03 2022 - 11:40:28 -0400)
Trying to boot from MMC2


U-Boot 2022.04 (Nov 03 2022 - 11:40:28 -0400)

CPU : AM335X-GP rev 2.1
Model: TI AM335x BeagleBone Black
DRAM: 512 MiB
Reset Source: Power-on reset has occurred.
RTC 32KCLK Source: External.
Core: 150 devices, 14 uclasses, devicetree: separate
WDT: Started wdt@44e35000 with servicing (60s timeout)
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from MMC... *** Warning - bad CRC, using default environment

Board: BeagleBone Black
<ethaddr> not set. Validating first E-fuse MAC
BeagleBone Black:
Model: BeagleBone Black Industrial:
BeagleBone Cape EEPROM: no EEPROM at address: 0x54
BeagleBone Cape EEPROM: no EEPROM at address: 0x55
BeagleBone Cape EEPROM: no EEPROM at address: 0x56
BeagleBone Cape EEPROM: no EEPROM at address: 0x57
Net: Could not get PHY for ethernet@4a100000: addr 0
eth2: ethernet@4a100000, eth3: usb_ether
Press SPACE to abort autoboot in 0 seconds
=> setenv args_mmc 'setenv bootargs console=${console} ${optargs} root=/dev/mmcblk0p1 ro rootfstype=${mmcrootfstype}'
=> setenv loadfdt 'mmc read ${fdtaddr} 80 180'
=> setenv loadimage 'mmc read ${loadaddr} 900 2000'
=> setenv bootcmd 'run args_mmc; run loadfdt; run loadimage; bootm ${loadaddr} - ${fdtaddr}'
=> saveenv
Saving Environment to MMC... Writing to redundant MMC(0)... OK
=> run args_mmc
=> run loadimage

MMC read: dev # 0, block # 2304, count 8192 ... 8192 blocks read: OK
=> run loadfdt

MMC read: dev # 0, block # 128, count 384 ... 384 blocks read: OK
=> spl export fdt ${loadaddr} - ${fdtaddr}
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux kernel
Created: 2022-10-26 17:38:41 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 9880064 Bytes = 9.4 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
XIP Invalid Image
data abort
pc : [<9ffa9fe8>] lr : [<9ff6bfa9>]
reloc pc : [<80843fe8>] lr : [<80805fa9>]
sp : 9df30e08 ip : 00000000 fp : 00000020
r10: 00000003 r9 : 9df45eb0 r8 : 9df30f04
r7 : 00000000 r6 : 9ffe3b1c r5 : 00000000 r4 : 00000000
r3 : edfe0dd0 r2 : 00000003 r1 : 00000000 r0 : 00000000
Flags: nzCv IRQs off FIQs on Mode SVC_32 (T)
Code: bfef 0000 b510 4b24 (6801) 4602
Resetting CPU ...

resetting ...

Any insight into why the kernel header is being read but the checksum is failing would be greatly appreciated. I have been referencing this tutorial, although what I have done has differed in a few ways (e.g., I haven't been using Yocto, so I can't use the "part" command): embetrix.com/.../.

  • Hello Aaron,
    One sure thing I noticed is <setenv loadimage 'mmc read ${loadaddr} 900 2000'> would not work for your kernel image (9.4MiB). This would trigger "Verifying Checksum ... Bad Data CRC"...

    Since you're referring to a community tutorials with the latest u-boot/kernel tree, it is not rare that you may have to work out more details, and most likely need some tweak work yourself...

    - In original tutorials:
    => setenv loadimage 'mmc read ${loadaddr} 900 2000' // => read 4MiB => this would work for 2.5MiB kernel
    ## Booting kernel from Legacy Image at 82000000 ...
    Image Name: Linux-4.4.61-beagleboard.org
    Created: 2017-05-04 10:55:09 UTC
    Image Type: ARM Linux Kernel Image (uncompressed)
    Data Size: 2641896 Bytes = 2.5 MiB
    Load Address: 80008000
    Entry Point: 80008000
    Verifying Checksum ... OK

    - In your log:
    ## Booting kernel from Legacy Image at 82000000 ...
    Image Name: Linux kernel
    Created: 2022-10-26 17:38:41 UTC
    Image Type: ARM Linux Kernel Image (uncompressed)
    Data Size: 9880064 Bytes = 9.4 MiB
    Load Address: 80008000
    Entry Point: 80008000
    Verifying Checksum ... Bad Data CRC
    ERROR: can't get kernel image!

    Best,

    -Hong

  • So I changed the line mentioned above to:

    setenv loadimage 'mmc read ${loadaddr} 900 8000'

    which reads 16.8MB, plenty of space for the kernel. Falcon mode is now functional. Thanks for your help!

    EDIT:

    So actually I realized Falcon mode is not functional. I did manage to get the spl export command to work, but I received the following warning: WARN: FDT size > CMD_SPL_WRITE_SIZE. Also, I'm thinking the files are just being written back to the SD card, because when I reboot the normal U-Boot process occurs.