Other Parts Discussed in Thread: SK-AM62B
Tool/software:
Overview
The TI SK-AM64B EVM has an on-board 64MB-sized OSPI Flash chip that can be used to boot the AM64x device from. The documentation associated with SDK v11.0 contains two chapters discussing OSPI setup and use from both U-Boot and Linux, including steps on how to program the bootloader into OSPI to enable booting to U-Boot prompt:
https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_00_09_04/exports/docs/linux/Foundational_Components/U-Boot/UG-QSPI.html
https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_00_09_04/exports/docs/linux/Foundational_Components/Kernel/Kernel_Drivers/QSPI.html
Furthermore, more steps are provided in an additional section to manually setup an UBI/UBIFS image that can be used to boot the device:
However to get to a fully booting and working system there is a large number of steps and considerations involved, making this somewhat difficult to setup and use. In addition, there also seems to be some challenges that are not straightforward to overcome especially for somebody new to this:
- The filesystem suggested for generating an UBI/UBIFS image is too large for use with the 64MB-sized OSPI device found on the SK-AM64B board
- The instructions don't solve the issue of automatically booting from an UBI/UBIFS image located in OSPI
This E2E FAQ uses the Yocto build system to generate UBI/UBIFS images in a reproducible manner, ready to program and use on the SK-AM64B board. It also uses Yocto to re-configure U-Boot to directly boot from the generated UBI/UBIFS image, providing a readily usable end-to-end solution.
The solution provided here can also be used on similar other AM6x boards that use the same OSPI NOR flash such as SK-AM62B and SK-AM62P with minimal changes.
Updating U-Boot Configuration for UBI/UBIFS Boot
In order to allow working with and booting from UBI/UBIFS images in U-Boot, two changes need to be made to the SDK v11.0 baseline U-Boot:
- Enabling the UBI command set by setting the appropriate U-Boot config option (
"CONFIG_CMD_UBI=y"
). Note that this step will not be needed in future v11.1+ SDK version U-Boot variants. - Updating the U-Boot boot command (
"bootcmd"
) environmental variable through setting an U-Boot config option ("CONFIG_BOOTCOMMAND"
) to probe and mount the UBI/UBIFS-based rootfs, load the Linux Kernel and device tree files, and pass a command line to the Linux Kernel that activates the UBI/UBIFS-based boot.
Both changes are implemented in the attached patch file that needs to get applied to the meta-tisdk
Yocto layer using the "git am"
command after setting up the Yocto build environment as per the SDK documentation at https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_00_09_04/exports/docs/linux/Overview_Building_the_SDK.html#building-the-sdk-with-yocto. Do not start the Yocto build process until modifications to the conf/local.conf
file outlined in the next section have been made.
- After basic Yocto setup, go to the
<YOCTO_INSTALL_DIR>/sources/meta-tisdk
folder - Copy the attached patch file into that folder
- Apply the patch using the
"git am 0001-meta-ti-foundational-u-boot-am64xx-Configure-for-UBI.patch"
command
https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/0001_2D00_meta_2D00_ti_2D00_foundational_2D00_u_2D00_boot_2D00_am64xx_2D00_Configure_2D00_for_2D00_UBI.patch
Preparing UBI/UBIFS Images suitable for OSPI Boot using Yocto
Before building the UBI/UBIFS images using Yocto we need to consider two modifications to the Yocto configuration.
First, the size available for the rootfs in the SK-AM64B on-board OSPI is not very large and only about ~50MB. This includes space needed for the Linux Kernel, as it will get loaded from the rootfs partition by the U-Boot bootloader during the boot process. As it turns out even the small self-contained Yocto image target called tisdk-tiny-image
is too large for this, and is therefor not suitable as-is, and needs to be further optimized in size. One quick way to do this is to disable the systemd based init manager, and switch back to the "leaner" systemvinit init manger. This change can be done with a simple update to the conf/local.conf
Yocto config file.
Second, building images for SK-AM64B, by default no UBI/UBIFS images are generated. Therefore we need to enable those output images, while also setting the command line parameters used by the build internally for creating the UBIFS filesystem and the UBI image, in a way that is compatible and suitable for consumption by the board and the Flash setup.
Below are the changes to be made to the conf/local.conf
Yocto config file:
# Reduce filesystem size by using sysvinit instead of systemd
ARAGO_SYSVINIT = "1"
# Build UBI image for use on SK-AM64B on-board OSPI flash
IMAGE_FSTYPES += "ubifs ubi"
MKUBIFS_ARGS = "-F -m 16 -e 262016 -c 8000"
UBINIZE_ARGS = "-m 16 -p 256KiB -s 16 -O 64"
After making those changes, proceed to building the Yocto image and all bootloader artifacts as per regular Yocto build flow as follows:
# Build bootloader binaries and UBI/UBIFS images $ MACHINE=am64xx-evm bitbake -k tisdk-tiny-image # Show relevant build output files needed for OSPI programming $ ll deploy-ti/images/am64xx-evm/{tiboot3.bin*,tispl.bin*,u-boot.img*,*ubi*} lrwxrwxrwx 2 a0797059 a0797059 70 May 5 10:59 deploy-ti/images/am64xx-evm/tiboot3.bin -> tiboot3-am64x_sr2-hs-fs-evm-am64xx-evm-k3r5-2025.01+git-r0_tisdk_5.bin -rw-r--r-- 2 a0797059 a0797059 42991616 May 6 16:20 deploy-ti/images/am64xx-evm/tisdk-tiny-image-am64xx-evm.rootfs-20250506211930.ubi -rw-r--r-- 2 a0797059 a0797059 42446592 May 6 16:20 deploy-ti/images/am64xx-evm/tisdk-tiny-image-am64xx-evm.rootfs-20250506211930.ubifs lrwxrwxrwx 2 a0797059 a0797059 53 May 6 16:20 deploy-ti/images/am64xx-evm/tisdk-tiny-image-am64xx-evm.rootfs.ubi -> tisdk-tiny-image-am64xx-evm.rootfs-20250506211930.ubi lrwxrwxrwx 2 a0797059 a0797059 55 May 6 16:20 deploy-ti/images/am64xx-evm/tisdk-tiny-image-am64xx-evm.rootfs.ubifs -> tisdk-tiny-image-am64xx-evm.rootfs-20250506211930.ubifs lrwxrwxrwx 2 a0797059 a0797059 43 May 6 19:09 deploy-ti/images/am64xx-evm/tispl.bin -> tispl.bin-am64xx-evm-2025.01+git-r0_tisdk_5 lrwxrwxrwx 2 a0797059 a0797059 43 May 6 19:09 deploy-ti/images/am64xx-evm/tispl.bin-am64xx-evm -> tispl.bin-am64xx-evm-2025.01+git-r0_tisdk_5 -rw-r--r-- 2 a0797059 a0797059 943935 May 6 19:09 deploy-ti/images/am64xx-evm/tispl.bin-am64xx-evm-2025.01+git-r0_tisdk_5 -rw-r--r-- 2 a0797059 a0797059 289 May 6 16:20 deploy-ti/images/am64xx-evm/ubinize-tisdk-tiny-image-am64xx-evm.rootfs-20250506211930.cfg lrwxrwxrwx 2 a0797059 a0797059 44 May 6 19:09 deploy-ti/images/am64xx-evm/u-boot.img -> u-boot-am64xx-evm-2025.01+git-r0_tisdk_5.img
Note that we are not using the *.ubifs file system images directly with the approach discussed in this E2E FAQ. They can be used however to be written into an UBI volume that has been created through other means (through U-Boot or Linux commands). For simplicity, we only use the *.ubi images and directly program them into the MTD memory device.
Programming OSPI with U-Boot Bootloader and UBI Images
The below steps use TFTP to transfer the image artifacts to be programmed into DDR, and then writes them out to the different OSPI partitions that are setup. In a similar fashion, image artifacts can also be copied to an SD card, and loaded from there for programming purposes. Note that the steps also include the OSPI PHY calibration pattern getting programmed which is critical for high-speed operation. The PHY calibration pattern binary file can be obtained from https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_00_09_04/exports/docs/linux/Foundational_Components/U-Boot/UG-QSPI.html, under "Phy Calibration".
# Download and program tiboot3.bin => dhcp ${loadaddr} tiboot3.bin link up on port 2, speed 1000, full duplex BOOTP broadcast 1 DHCP client bound to address 192.168.1.105 (4 ms) Using ethernet@8000000port@2 device TFTP from server 192.168.1.1; our IP address is 192.168.1.105 Filename 'tiboot3.bin'. Load address: 0x82000000 Loading: ################################################## 515.9 KiB 4.5 MiB/s done Bytes transferred = 528242 (80f72 hex) => mtd erase ospi.tiboot3 Erasing 0x00000000 ... 0x000fffff (4 eraseblock(s)) => mtd write ospi.tiboot3 ${loadaddr} 0 ${filesize} Size not on a page boundary (0x10), rounding to 0x80f80 Writing 528256 byte(s) at offset 0x00000000 # Download and program tispl.bin => dhcp ${loadaddr} tispl.bin link up on port 2, speed 1000, full duplex BOOTP broadcast 1 DHCP client bound to address 192.168.1.105 (3 ms) Using ethernet@8000000port@2 device TFTP from server 192.168.1.1; our IP address is 192.168.1.105 Filename 'tispl.bin'. Load address: 0x82000000 Loading: ################################################## 921.6 KiB 4.6 MiB/s done Bytes transferred = 943719 (e6667 hex) => mtd erase ospi.tispl Erasing 0x00000000 ... 0x001fffff (8 eraseblock(s)) => mtd write ospi.tispl ${loadaddr} 0 ${filesize} Size not on a page boundary (0x10), rounding to 0xe6670 Writing 943728 byte(s) at offset 0x00000000 # Download and program u-boot.img => dhcp ${loadaddr} u-boot.img link up on port 2, speed 1000, full duplex BOOTP broadcast 1 DHCP client bound to address 192.168.1.105 (3 ms) Using ethernet@8000000port@2 device TFTP from server 192.168.1.1; our IP address is 192.168.1.105 Filename 'u-boot.img'. Load address: 0x82000000 Loading: ################################################## 1.4 MiB 4.7 MiB/s done Bytes transferred = 1443195 (16057b hex) => mtd erase ospi.u-boot Erasing 0x00000000 ... 0x003fffff (16 eraseblock(s)) => mtd write ospi.u-boot ${loadaddr} 0 ${filesize} Size not on a page boundary (0x10), rounding to 0x160580 Writing 1443200 byte(s) at offset 0x00000000 # Download and program OSPI PHY calibration pattern (needed for high-speed OSPI operation) => dhcp ${loadaddr} ospi_phy_pattern link up on port 2, speed 1000, full duplex BOOTP broadcast 1 DHCP client bound to address 192.168.1.105 (11 ms) Using ethernet@8000000port@2 device TFTP from server 192.168.1.1; our IP address is 192.168.1.105 Filename 'ospi_phy_pattern'. Load address: 0x82000000 Loading: ################################################## 128 Bytes 11.7 KiB/s done Bytes transferred = 128 (80 hex) => mtd erase ospi.phypattern Erasing 0x00000000 ... 0x0003ffff (1 eraseblock(s)) => mtd write ospi.phypattern ${loadaddr} 0 ${filesize} Writing 128 byte(s) at offset 0x00000000 # Download and program UBI rootfs image file => dhcp ${loadaddr} tisdk-tiny-image-am64xx-evm.rootfs.ubi ethernet@8000000port@2 Waiting for PHY auto negotiation to complete....... done link up on port 2, speed 1000, full duplex BOOTP broadcast 1 BOOTP broadcast 2 BOOTP broadcast 3 DHCP client bound to address 192.168.1.108 (1266 ms) Using ethernet@8000000port@2 device TFTP from server 192.168.1.1; our IP address is 192.168.1.108 Filename 'tisdk-tiny-image-am64xx-evm.rootfs.ubi'. Load address: 0x82000000 Loading: ################################################## 41 MiB 4.8 MiB/s done Bytes transferred = 42991616 (2900000 hex) => mtd erase ospi.rootfs Erasing 0x00000000 ... 0x037bffff (223 eraseblock(s)) => mtd write ospi.rootfs ${loadaddr} 0 ${filesize} Writing 42991616 byte(s) at offset 0x00000000
Now with all OSPI artifacts programmed, we can already test-mount and access the Linux rootfs from U-Boot:
# Test UBIFS access from U-Boot # This includes listing directories and test-loading the Kernel Image file => ubi part ospi.rootfs ubi0: attaching mtd6 ubi0: scanning is finished ubi0: volume 0 ("rootfs") re-sized from 162 to 219 LEBs ubi0: attached mtd6 (name "ospi.rootfs", size 55 MiB) ubi0: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes ubi0: min./max. I/O unit sizes: 16/256, sub-page size 16 ubi0: VID header offset: 64 (aligned 64), data offset: 128 ubi0: good PEBs: 223, bad PEBs: 0, corrupted PEBs: 0 ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128 ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 965596038 ubi0: available PEBs: 0, total reserved PEBs: 223, PEBs reserved for bad PEB handling: 0 => ubifsmount ubi0:rootfs => ubifsls <DIR> 4864 Fri Mar 09 12:34:56 2018 bin <DIR> 160 Fri Mar 09 12:34:56 2018 dev <DIR> 3440 Fri Mar 09 12:34:56 2018 etc <DIR> 1768 Fri Mar 09 12:34:56 2018 lib <DIR> 160 Fri Mar 09 12:34:56 2018 mnt <DIR> 160 Fri Mar 09 12:34:56 2018 run <DIR> 160 Fri Mar 09 12:34:56 2018 tmp <DIR> 160 Fri Mar 09 12:34:56 2018 sys <DIR> 808 Fri Mar 09 12:34:56 2018 var <DIR> 608 Fri Mar 09 12:34:56 2018 usr <DIR> 616 Fri Mar 09 12:34:56 2018 boot <DIR> 224 Fri Mar 09 12:34:56 2018 home <DIR> 160 Fri Mar 09 12:34:56 2018 proc <DIR> 4104 Fri Mar 09 12:34:56 2018 sbin <DIR> 160 Fri Mar 09 12:34:56 2018 media => ubifsls boot <DIR> 224 Fri Mar 09 12:34:56 2018 EFI <DIR> 224 Fri Mar 09 12:34:56 2018 dtb 9655556 Fri Mar 09 12:34:56 2018 fitImage-6.12.17-ti-00771-gc85877d40f8e <LNK> 36 Fri Mar 09 12:34:56 2018 Image <LNK> 39 Fri Mar 09 12:34:56 2018 fitImage 22256128 Fri Mar 09 12:34:56 2018 Image-6.12.17-ti-00771-gc85877d40f8e => ubifsload ${loadaddr} boot/Image Loading file 'boot/Image' to addr 0x82000000... Done =>
Note that should you get errors like "Unknown command 'ubi' - try 'help'"
this means your U-Boot has not yet been enabled with the UBI command set which is the case for straight SDK v11.0 U-Boot. Make sure to use the U-Boot that was built with the Yocto build steps outlined earlier which has those commands enabled. Later SDK U-Boot versions (v11.1+) will also have the UBI command set enabled by default.
Example Boot Log
U-Boot SPL 2025.01-00406-gcd91d7360181 (Mar 25 2025 - 16:14:37 +0000) SYSFW ABI: 4.0 (firmware rev 0x000b '11.0.7--v11.00.07 (Fancy Rat)') EEPROM not available at 0x50, trying to read at 0x51 SPL initial stack usage: 13392 bytes Trying to boot from SPI Authentication passed Authentication passed Loading Environment from nowhere... OK Authentication passed Authentication passed Starting ATF on ARM64 core... NOTICE: BL31: v2.12.0(release):11.00.09-dirty NOTICE: BL31: Built : 12:35:58, Mar 24 2025 I/TC: I/TC: OP-TEE version: 4.5.0-73-gef1ebdc23-dev (gcc version 13.3.0 (GCC)) #1 Tue Feb 4 11:33:18 UTC 2025 aarch64 I/TC: WARNING: This OP-TEE configuration might be insecure! I/TC: WARNING: Please check https://optee.readthedocs.io/en/latest/architecture/porting_guidelines.html I/TC: Primary CPU initializing I/TC: GIC redistributor base address not provided I/TC: Assuming default GIC group status and modifier I/TC: SYSFW ABI: 4.0 (firmware rev 0x000b '11.0.7--v11.00.07 (Fancy Rat)') I/TC: Activated SA2UL device I/TC: Enabled firewalls for SA2UL TRNG device I/TC: SA2UL TRNG initialized I/TC: SA2UL Drivers initialized I/TC: HUK Initialized I/TC: Primary CPU switching to normal world boot U-Boot SPL 2025.01-00406-gcd91d7360181-dirty (Mar 25 2025 - 16:14:37 +0000) SYSFW ABI: 4.0 (firmware rev 0x000b '11.0.7--v11.00.07 (Fancy Rat)') Trying to boot from SPI Authentication passed Authentication passed U-Boot 2025.01-00406-gcd91d7360181-dirty (Mar 25 2025 - 16:14:37 +0000) SoC: AM64X SR2.0 HS-FS Model: Texas Instruments AM642 SK Board: AM64B-SKEVM rev A DRAM: 2 GiB Core: 95 devices, 33 uclasses, devicetree: separate MMC: mmc@fa00000: 1 Loading Environment from nowhere... OK In: serial@2800000 Out: serial@2800000 Err: serial@2800000 Failed to probe prueth driver Net: eth0: ethernet@8000000port@1, eth1: ethernet@8000000port@2 Hit any key to stop autoboot: 0 SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ubi0: attaching mtd6 ubi0: scanning is finished ubi0: attached mtd6 (name "ospi.rootfs", size 55 MiB) ubi0: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes ubi0: min./max. I/O unit sizes: 16/256, sub-page size 16 ubi0: VID header offset: 64 (aligned 64), data offset: 128 ubi0: good PEBs: 223, bad PEBs: 0, corrupted PEBs: 0 ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128 ubi0: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 965596038 ubi0: available PEBs: 0, total reserved PEBs: 223, PEBs reserved for bad PEB handling: 0 Loading file '/boot/Image' to addr 0x82000000... Done Loading file '/boot/dtb/ti/k3-am642-sk.dtb' to addr 0x88000000... Done ## Flattened Device Tree blob at 88000000 Booting using the fdt blob at 0x88000000 Working FDT set to 88000000 Loading Device Tree to 000000008ffed000, end 000000008ffff33a ... OK Working FDT set to 8ffed000 Starting kernel ... Removing MTD device #6 (ospi.rootfs) with use count 1 Error when deleting partition "ospi.rootfs" (-16) [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034] [ 0.000000] Linux version 6.12.17-ti-00771-gc85877d40f8e (oe-user@oe-host) (aarch64-oe-linux-gcc (GCC) 13.3.0, GNU ld (GNU Binutils) 2.42.0.20240723) #1 SMP PREEMPT Tue Mar 25 12:45:29 UTC 2025 [ 0.000000] KASLR disabled due to lack of seed [ 0.000000] Machine model: Texas Instruments AM642 SK [ 0.000000] earlycon: ns16550a0 at MMIO32 0x0000000002800000 (options '') [ 0.000000] printk: legacy bootconsole [ns16550a0] enabled [ 0.000000] efi: UEFI not found. [ 0.000000] OF: reserved mem: 0x000000009e800000..0x000000009fffffff (24576 KiB) nomap non-reusable optee@9e800000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a0000000, size 1 MiB [ 0.000000] OF: reserved mem: initialized node r5f-dma-memory@a0000000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a0000000..0x00000000a00fffff (1024 KiB) nomap non-reusable r5f-dma-memory@a0000000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a0100000, size 15 MiB [ 0.000000] OF: reserved mem: initialized node r5f-memory@a0100000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a0100000..0x00000000a0ffffff (15360 KiB) nomap non-reusable r5f-memory@a0100000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a1000000, size 1 MiB [ 0.000000] OF: reserved mem: initialized node r5f-dma-memory@a1000000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a1000000..0x00000000a10fffff (1024 KiB) nomap non-reusable r5f-dma-memory@a1000000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a1100000, size 15 MiB [ 0.000000] OF: reserved mem: initialized node r5f-memory@a1100000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a1100000..0x00000000a1ffffff (15360 KiB) nomap non-reusable r5f-memory@a1100000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a2000000, size 1 MiB [ 0.000000] OF: reserved mem: initialized node r5f-dma-memory@a2000000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a2000000..0x00000000a20fffff (1024 KiB) nomap non-reusable r5f-dma-memory@a2000000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a2100000, size 15 MiB [ 0.000000] OF: reserved mem: initialized node r5f-memory@a2100000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a2100000..0x00000000a2ffffff (15360 KiB) nomap non-reusable r5f-memory@a2100000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a3000000, size 1 MiB [ 0.000000] OF: reserved mem: initialized node r5f-dma-memory@a3000000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a3000000..0x00000000a30fffff (1024 KiB) nomap non-reusable r5f-dma-memory@a3000000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a3100000, size 15 MiB [ 0.000000] OF: reserved mem: initialized node r5f-memory@a3100000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a3100000..0x00000000a3ffffff (15360 KiB) nomap non-reusable r5f-memory@a3100000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a4000000, size 1 MiB [ 0.000000] OF: reserved mem: initialized node m4f-dma-memory@a4000000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a4000000..0x00000000a40fffff (1024 KiB) nomap non-reusable m4f-dma-memory@a4000000 [ 0.000000] Reserved memory: created DMA memory pool at 0x00000000a4100000, size 15 MiB [ 0.000000] OF: reserved mem: initialized node m4f-memory@a4100000, compatible id shared-dma-pool [ 0.000000] OF: reserved mem: 0x00000000a4100000..0x00000000a4ffffff (15360 KiB) nomap non-reusable m4f-memory@a4100000 [ 0.000000] OF: reserved mem: 0x00000000a5000000..0x00000000a57fffff (8192 KiB) nomap non-reusable ipc-memories@a5000000 [ 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-0x000000009e7fffff] [ 0.000000] node 0: [mem 0x000000009e800000-0x00000000a57fffff] [ 0.000000] node 0: [mem 0x00000000a5800000-0x00000000ffffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000ffffffff] [ 0.000000] cma: Reserved 32 MiB at 0x00000000fba00000 on node -1 [ 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.5 [ 0.000000] percpu: Embedded 22 pages/cpu s51672 r8192 d30248 u90112 [ 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=ubi0:rootfs ubi.mtd=5 rootfstype=ubifs rw [ 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: 524288 [ 0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off [ 0.000000] software IO TLB: SWIOTLB bounce buffer size adjusted to 2MB [ 0.000000] software IO TLB: area num 2. [ 0.000000] software IO TLB: mapped [mem 0x00000000fb600000-0x00000000fb800000] (2MB) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, 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=512 to nr_cpu_ids=2. [ 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=2 [ 0.000000] RCU Tasks: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=2. [ 0.000000] RCU Tasks Trace: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=2. [ 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: GICD_CTRL.DS=0, SCR_EL3.FIQ=1 [ 0.000000] GICv3: CPU0: found redistributor 0 region 0:0x0000000001840000 [ 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.000001] sched_clock: 58 bits at 200MHz, resolution 5ns, wraps every 4398046511102ns [ 0.008819] Console: colour dummy device 80x25 [ 0.013441] Calibrating delay loop (skipped), value calculated using timer frequency.. 400.00 BogoMIPS (lpj=800000) [ 0.024123] pid_max: default: 32768 minimum: 301 [ 0.028967] LSM: initializing lsm=capability,selinux [ 0.034117] SELinux: Initializing. [ 0.038296] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear) [ 0.045881] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear) [ 0.074062] rcu: Hierarchical SRCU implementation. [ 0.079006] rcu: Max phase no-delay instances is 1000. [ 0.084624] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level [ 0.093564] EFI services will not be available. [ 0.102280] smp: Bringing up secondary CPUs ... I/TC: Secondary CPU 1 initializing I/TC: Secondary CPU 1 switching to normal world boot [ 0.119663] Detected VIPT I-cache on CPU1 [ 0.119790] GICv3: CPU1: found redistributor 1 region 0:0x0000000001860000 [ 0.119812] GICv3: CPU1: using allocated LPI pending table @0x0000000080060000 [ 0.119874] CPU1: Booted secondary processor 0x0000000001 [0x410fd034] [ 0.120102] smp: Brought up 1 node, 2 CPUs [ 0.149484] SMP: Total of 2 processors activated. [ 0.154295] CPU: All CPU(s) started at EL2 [ 0.158506] CPU features: detected: 32-bit EL0 Support [ 0.163767] CPU features: detected: CRC32 instructions [ 0.169068] alternatives: applying system-wide alternatives [ 0.175534] Memory: 1876944K/2097152K available (12928K kernel code, 1254K rwdata, 4644K rodata, 2752K init, 639K bss, 179468K reserved, 32768K cma-reserved) [ 0.191460] devtmpfs: initialized [ 0.205896] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns [ 0.215908] futex hash table entries: 512 (order: 3, 32768 bytes, linear) [ 0.224128] 27152 pages in range for non-PLT usage [ 0.224159] 518672 pages in range for PLT usage [ 0.229570] pinctrl core: initialized pinctrl subsystem [ 0.240134] DMI not present or invalid. [ 0.246814] NET: Registered PF_NETLINK/PF_ROUTE protocol family [ 0.254794] DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations [ 0.263057] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations [ 0.272343] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations [ 0.280620] audit: initializing netlink subsys (disabled) [ 0.286706] audit: type=2000 audit(0.224:1): state=initialized audit_enabled=0 res=1 [ 0.287402] thermal_sys: Registered thermal governor 'step_wise' [ 0.294644] thermal_sys: Registered thermal governor 'power_allocator' [ 0.300865] cpuidle: using governor menu [ 0.311819] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers. [ 0.318859] ASID allocator initialised with 65536 entries [ 0.331937] /bus@f4000/interrupt-controller@1800000: Fixed dependency cycle(s) with /bus@f4000/interrupt-controller@1800000 [ 0.355411] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages [ 0.362398] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page [ 0.368811] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages [ 0.375748] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page [ 0.382155] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages [ 0.389090] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page [ 0.395498] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages [ 0.402444] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page [ 0.411983] k3-chipinfo 43000014.chipid: Family:AM64X rev:SR2.0 JTAGID[0x1bb3802f] Detected [ 0.424683] iommu: Default domain type: Translated [ 0.429618] iommu: DMA domain TLB invalidation policy: strict mode [ 0.436441] SCSI subsystem initialized [ 0.440968] usbcore: registered new interface driver usbfs [ 0.446616] usbcore: registered new interface driver hub [ 0.452112] usbcore: registered new device driver usb [ 0.457943] pps_core: LinuxPPS API ver. 1 registered [ 0.463040] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it> [ 0.472390] PTP clock support registered [ 0.476448] EDAC MC: Ver: 3.0.0 [ 0.480248] scmi_core: SCMI protocol bus registered [ 0.485829] FPGA manager framework [ 0.489467] Advanced Linux Sound Architecture Driver Initialized. [ 0.497010] vgaarb: loaded [ 0.500448] clocksource: Switched to clocksource arch_sys_counter [ 0.507157] VFS: Disk quotas dquot_6.6.0 [ 0.511229] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes) [ 0.528403] NET: Registered PF_INET protocol family [ 0.533779] IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear) [ 0.543492] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear) [ 0.552358] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.560314] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear) [ 0.568551] TCP bind hash table entries: 16384 (order: 7, 524288 bytes, linear) [ 0.576707] TCP: Hash tables configured (established 16384 bind 16384) [ 0.583657] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear) [ 0.590611] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear) [ 0.598168] NET: Registered PF_UNIX/PF_LOCAL protocol family [ 0.604784] RPC: Registered named UNIX socket transport module. [ 0.610890] RPC: Registered udp transport module. [ 0.615703] RPC: Registered tcp transport module. [ 0.620520] RPC: Registered tcp-with-tls transport module. [ 0.626129] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 0.632726] NET: Registered PF_XDP protocol family [ 0.637648] PCI: CLS 0 bytes, default 64 [ 0.643355] Initialise system trusted keyrings [ 0.648328] workingset: timestamp_bits=46 max_order=19 bucket_order=0 [ 0.655438] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.661949] NFS: Registering the id_resolver key type [ 0.667216] Key type id_resolver registered [ 0.671499] Key type id_legacy registered [ 0.675626] nfs4filelayout_init: NFSv4 File Layout Driver Registering... [ 0.682488] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering... [ 0.756814] Key type asymmetric registered [ 0.761042] Asymmetric key parser 'x509' registered [ 0.766153] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244) [ 0.774026] io scheduler mq-deadline registered [ 0.778682] io scheduler kyber registered [ 0.782837] io scheduler bfq registered [ 0.790562] pinctrl-single 4084000.pinctrl: 33 pins, size 132 [ 0.797146] pinctrl-single f4000.pinctrl: 180 pins, size 720 [ 0.805104] ledtrig-cpu: registered to indicate activity on CPUs [ 0.819112] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 0.837819] loop: module loaded [ 0.842528] megasas: 07.727.03.00-rc1 [ 0.851630] tun: Universal TUN/TAP device driver, 1.6 [ 0.858566] VFIO - User Level meta-driver version: 0.3 [ 0.865351] usbcore: registered new interface driver usb-storage [ 0.872283] i2c_dev: i2c /dev entries driver [ 0.878102] sdhci: Secure Digital Host Controller Interface driver [ 0.884541] sdhci: Copyright(c) Pierre Ossman [ 0.889282] sdhci-pltfm: SDHCI platform and OF driver helper [ 0.895885] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping .... [ 0.903411] usbcore: registered new interface driver usbhid [ 0.909189] usbhid: USB HID core driver [ 0.914847] hw perfevents: enabled with armv8_cortex_a53 PMU driver, 7 (0,8000003f) counters available [ 0.925311] optee: probing for conduit method. I/TC: Reserved shared memory is enabled I/TC: Dynamic shared memory is enabled I/TC: Normal World virtualization support is disabled I/TC: Asynchronous notifications are disabled [ 0.929937] optee: revision 4.5 (ef1ebdc23034a804) [ 0.946795] optee: dynamic shared memory is enabled [ 0.957778] optee: initialized driver [ 0.957887] random: crng init done [ 0.964863] Initializing XFRM netlink socket [ 0.969513] NET: Registered PF_PACKET protocol family [ 0.974819] Key type dns_resolver registered [ 0.990209] registered taskstats version 1 [ 0.994634] Loading compiled-in X.509 certificates [ 1.015899] ti-sci 44043000.system-controller: ABI: 4.0 (firmware rev 0x000b '11.0.7--v11.00.07 (Fancy Rat)') [ 1.148011] pca953x 1-0070: supply vcc not found, using dummy regulator [ 1.155043] pca953x 1-0070: using no AI [ 1.173821] omap_i2c 20010000.i2c: bus 1 rev0.12 at 400 kHz [ 1.180011] ti-sci-intr bus@f4000:interrupt-controller@a00000: Interrupt Router 3 domain created [ 1.189493] ti-sci-inta 48000000.interrupt-controller: Interrupt Aggregator domain 28 created [ 1.202390] ti-udma 485c0100.dma-controller: Number of rings: 68 [ 1.210508] ti-udma 485c0100.dma-controller: Channels: 24 (bchan: 12, tchan: 6, rchan: 6) [ 1.221100] ti-udma 485c0000.dma-controller: Number of rings: 288 [ 1.239364] ti-udma 485c0000.dma-controller: Channels: 44 (tchan: 29, rchan: 15) [ 1.251225] printk: legacy console [ttyS2] disabled [ 1.256794] 2800000.serial: ttyS2 at MMIO 0x2800000 (irq = 309, base_baud = 3000000) is a 8250 [ 1.265945] printk: legacy console [ttyS2] enabled [ 1.265945] printk: legacy console [ttyS2] enabled [ 1.275650] printk: legacy bootconsole [ns16550a0] disabled [ 1.275650] printk: legacy bootconsole [ns16550a0] disabled [ 1.294040] 7 fixed-partitions partitions found on MTD device fc40000.spi.0 [ 1.301072] Creating 7 MTD partitions on "fc40000.spi.0": [ 1.306478] 0x000000000000-0x000000100000 : "ospi.tiboot3" [ 1.313958] 0x000000100000-0x000000300000 : "ospi.tispl" [ 1.321124] 0x000000300000-0x000000700000 : "ospi.u-boot" [ 1.328357] 0x000000700000-0x000000740000 : "ospi.env" [ 1.335202] 0x000000740000-0x000000780000 : "ospi.env.backup" [ 1.342759] 0x000000800000-0x000003fc0000 : "ospi.rootfs" [ 1.350007] 0x000003fc0000-0x000004000000 : "ospi.phypattern" [ 1.487774] davinci_mdio 8000f00.mdio: Configuring MDIO in manual mode [ 1.528457] davinci_mdio 8000f00.mdio: davinci mdio revision 9.7, bus freq 1000000 [ 1.540885] davinci_mdio 8000f00.mdio: phy[0]: device 8000f00.mdio:00, driver TI DP83867 [ 1.549011] davinci_mdio 8000f00.mdio: phy[1]: device 8000f00.mdio:01, driver TI DP83867 [ 1.557154] am65-cpsw-nuss 8000000.ethernet: initializing am65 cpsw nuss version 0x6BA00903, cpsw version 0x6BA80903 Ports: 3 quirks:00000006 [ 1.570245] am65-cpsw-nuss 8000000.ethernet: initialized cpsw ale version 1.4 [ 1.577401] am65-cpsw-nuss 8000000.ethernet: ALE Table size 512, Policers 32 [ 1.585833] am65-cpsw-nuss 8000000.ethernet: CPTS ver 0x4e8a010c, freq:500000000, add_val:1 pps:1 [ 1.612010] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 16 [ 1.626493] am65-cpts 39000000.cpts: CPTS ver 0x4e8a010c, freq:500000000, add_val:1 pps:0 [ 1.653986] mmc0: CQHCI version 5.10 [ 1.655363] mmc1: CQHCI version 5.10 [ 1.658459] ubi0: attaching mtd5 [ 1.681403] ubi0: scanning is finished [ 1.703325] mmc0: SDHCI controller on fa10000.mmc [fa10000.mmc] using ADMA 64-bit [ 1.713570] ubi0: attached mtd5 (name "ospi.rootfs", size 55 MiB) [ 1.719798] mmc1: SDHCI controller on fa00000.mmc [fa00000.mmc] using ADMA 64-bit [ 1.720235] ubi0: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes [ 1.734792] ubi0: min./max. I/O unit sizes: 16/256, sub-page size 16 [ 1.735085] sdhci-am654 fa10000.mmc: card claims to support voltages below defined range [ 1.741286] ubi0: VID header offset: 64 (aligned 64), data offset: 128 [ 1.755872] ubi0: good PEBs: 223, bad PEBs: 0, corrupted PEBs: 0 [ 1.761378] mmc0: new SDIO card at address 0001 [ 1.761943] ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128 [ 1.773638] ubi0: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 965596038 [ 1.782709] ubi0: available PEBs: 0, total reserved PEBs: 223, PEBs reserved for bad PEB handling: 0 [ 1.791881] ubi0: background thread "ubi_bgt0d" started, PID 72 [ 1.792574] clk: Disabling unused clocks [ 1.823032] PM: genpd: Disabling unused power domains [ 1.828239] ALSA device list: [ 1.831319] No soundcards found. [ 1.835898] UBIFS (ubi0:0): Mounting in unauthenticated mode [ 1.841909] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 75 [ 1.862376] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "rootfs" [ 1.869868] UBIFS (ubi0:0): LEB size: 262016 bytes (255 KiB), min./max. I/O unit sizes: 16 bytes/256 bytes [ 1.879542] UBIFS (ubi0:0): FS size: 54761344 bytes (52 MiB, 209 LEBs), max 8000 LEBs, journal size 9436672 bytes (8 MiB, 37 LEBs) [ 1.891278] UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB) [ 1.897108] UBIFS (ubi0:0): media format: w4/r0 (latest is w5/r0), UUID 18CD90FD-98CC-4936-9722-0B76DE84F710, small LPT model [ 1.909178] VFS: Mounted root (ubifs filesystem) on device 0:23. [ 1.915779] devtmpfs: mounted [ 1.920799] Freeing unused kernel memory: 2752K [ 1.925478] Run /sbin/init as init process INIT: version 3.04 booting [ 2.086406] mmc1: new ultra high speed SDR104 SDHC card at address aaaa [ 2.094358] mmcblk1: mmc1:aaaa SL16G 14.8 GiB [ 2.105421] mmcblk1: p1 p2 Starting udev [ 2.264178] udevd[107]: starting version 3.2.14 [ 2.306830] udevd[108]: starting eudev-3.2.14 [ 2.911421] udevd[132]: failed to execute '/etc/udev/scripts/mount.sh' '/etc/udev/scripts/mount.sh': No such file or directory [ 2.915297] udevd[133]: failed to execute '/etc/udev/scripts/mount.sh' '/etc/udev/scripts/mount.sh': No such file or directory hwclock: can't open '/dev/misc/rtc': No such file or directory Fri Mar 9 13:40:30 UTC 2018 hwclock: can't open '/dev/misc/rtc': No such file or directory INIT: Entering runlevel: 5misc/rtc': No such file or directory Configuring network interfaces... [ 4.415632] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL) [ 4.428292] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode udhcpc: started, v1.36.1 udhcpc: broadcasting discover udhcpc: broadcasting discover udhcpc: broadcasting discover [ 11.841873] platform led-controller: deferred probe pending: leds-gpio: Failed to get GPIO '/led-controller/led-0' [ 11.852258] platform 20000000.i2c: deferred probe pending: (reason unknown) udhcpc: no lease, forking to background done. Starting syslogd/klogd: done INIT: Id "S0" respawning too fast: disabled for 5 minutes _____ _____ _ _ | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_ | | _| .'| . | . | | __| _| . | | | -_| _| _| |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_| |___| |___| Arago Project am64xx-evm /dev/ttyS2 Arago 2025.01 am64xx-evm /dev/ttyS2 am64xx-evm login: root root@am64xx-evm:~# df -h Filesystem Size Used Available Use% Mounted on ubi0:rootfs 47.5M 36.4M 11.1M 77% / devtmpfs 920.4M 0 920.4M 0% /dev tmpfs 937.7M 84.0K 937.6M 0% /run tmpfs 937.7M 76.0K 937.6M 0% /var/volatile root@am64xx-evm:~#