Hi Expert,
Customized board cannot boot
ti-processor-sdk-linux-am335x-evm-08.02.00.24
Could you help to give some suggestions?

Thanks
Daniel
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.
Hi Expert,
Customized board cannot boot
ti-processor-sdk-linux-am335x-evm-08.02.00.24
Could you help to give some suggestions?

Thanks
Daniel
Hi Hong
1/, is it TI reference board or customer board?
customer board
2/. what is SYSBOOT pins configuration on board?

3/. what is intended boot media on board?
SD CARD
Thanks
Daniel
Hello Daniel,
SYSBOOT[4:0]=10111 => Boot list MMC0 SPI0 UART0 USB0
1/. Can we upload the full log as an attachment?
2/. Assuming "mmc 0" is the SD card on your board, Can we run a simple test @u-boot as listed below, and upload the log?
stop @u-boot prompt mmc dev 0 mmc info mmc part ls mmc 0:1 ls mmc 0:2 ls mmc 0:2 boot
Best,
-Hong
Hi Hong:
Thanks for your response,
This board is working in very old SDK version(ti-processor-sdk-linux-am335x-evm06.00.00.00), but I cannot boot it for ti-processor-sdk-linux-am335x-evm-08.02.00.24
No message showed when I input thoes command.

Please see u-boot-log.txt for full log
U-Boot SPL 2021.01-00001-gc59bf25a38-dirty (Aug 29 2023 - 15:31:36 +0800)
Trying to boot from MMC1
U-Boot 2021.01-00001-gc59bf25a38-dirty (Aug 29 2023 - 15:31:36 +0800)
CPU : AM335X-GP rev 2.1
Model: TI AM335x EVM
DRAM: 512 MiB
WDT: Started with servicing (60s timeout)
NAND: 0 MiB
MMC: OMAP SD/MMC: 0
Loading Environment from FAT... <ethaddr> not set. Validating first E-fuse MAC
Net: Could not get PHY for ethernet@4a100000: addr 0
eth2: ethernet@4a100000, eth3: usb_ether
Hit any key to stop autoboot: 0
MMC Device 1 not found
no mmc device at slot 1
MMC Device 1 not found
no mmc device at slot 1
## Error: "bootcmd_nand0" not defined
starting USB...
Bus usb@47401800: Port not available.
USB is stopped. Please issue 'usb start' first.
starting USB...
Bus usb@47401800: Port not available.
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
missing environment variable: pxeuuid
Retrieving file: pxelinux.cfg/01-68-5e-1c-7d-13-25
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/00000000
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/0000000
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/000000
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/00000
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/0000
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/000
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/00
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/0
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/default-arm-am33xx-am335x
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/default-arm-am33xx
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/default-arm
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Retrieving file: pxelinux.cfg/default
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Config file not found
starting USB...
Bus usb@47401800: Port not available.
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:ef:00:00
RNDIS ready
Please see the u-boot-env.txt for my printenv screen
U-boot env
addr_fit=0x90000000
arch=arm
args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype}
baudrate=115200
board=am335x
board_config=SKU#01
board_name=A33515BB
board_rev=1.6A
board_serial=36154P160338
boot=mmc
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_efi_bootmgr=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_fdt=try
boot_fit=0
boot_net_usb_start=usb start
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=mmc0 legacy_mmc0 mmc1 legacy_mmc1 nand0 usb0 pxe dhcp
bootcmd=if test ${boot_fit} -eq 1; then run update_to_fit; fi; run findfdt; run init_console; run envboot; run finduuid; run distro_bootcmd
bootcmd_dhcp=setenv devtype dhcp; run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci;
bootcmd_legacy_mmc0=setenv mmcdev 0; setenv bootpart 0:2 ; run mmcboot
bootcmd_legacy_mmc1=setenv mmcdev 1; setenv bootpart 1:2 ; run mmcboot
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_nand=run nandboot
bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
bootcmd_usb0=devnum=0; run usb_boot
bootcount=1
bootdelay=2
bootdir=/boot
bootenvfile=uEnv.txt
bootfile=zImage
bootm_size=0x10000000
bootpart=0:2
bootscript=echo Running bootscript from mmc${mmcdev} ...; source ${loadaddr}
console=ttyO0,115200n8
cpu=armv7
dfu_alt_info_emmc=rawemmc raw 0 3751936;boot part 1 1;rootfs part 1 2;MLO fat 1 1;MLO.raw raw 0x100 0x200;u-boot.img.raw raw 0x300 0x1000;u-env.raw raw 0x1300 0x200;spl-os-args.raw raw 0x1500 0x200;spl-os-image.raw raw 0x1700 0x6900;spl-os-args fat 1 1;spl-os-image fat 1 1;u-boot.img fat 1 1;uEnv.txt fat 1 1
dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw raw 0x100 0x200;u-boot.img.raw raw 0x300 0x1000;u-env.raw raw 0x1300 0x200;spl-os-args.raw raw 0x1500 0x200;spl-os-image.raw raw 0x1700 0x6900;spl-os-args fat 0 1;spl-os-image fat 0 1;u-boot.img fat 0 1;uEnv.txt fat 0 1
dfu_alt_info_nand=SPL part 0 1;SPL.backup1 part 0 2;SPL.backup2 part 0 3;SPL.backup3 part 0 4;u-boot part 0 5;u-boot-spl-os part 0 6;kernel part 0 8;rootfs part 0 9
dfu_alt_info_ram=kernel ram 0x80200000 0x4000000;fdt ram 0x80f80000 0x80000;ramdisk ram 0x81000000 0x4000000
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
dtboaddr=0x89000000
efi_dtb_prefixes=/ /dtb/ /dtb/current/
envboot=mmc dev ${mmcdev}; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadbootscript; then run bootscript;else if run loadbootenv; then echo Loaded env from ${bootenvfile};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;fi;fi;
eth1addr=68:5e:1c:7d:13:27
eth2addr=68:5e:1c:7d:13:25
eth3addr=de:ad:be:ef:00:01
ethaddr=68:5e:1c:7d:13:25
fdt_addr_r=0x88000000
fdtaddr=0x88000000
fdtcontroladdr=9df40850
fdtfile=undefined
findfdt=if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $board_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi; if test $board_name = A335PBGL; then setenv fdtfile am335x-pocketbeagle.dtb; fi; if test $board_name = BBBW; then setenv fdtfile am335x-boneblack-wireless.dtb; fi; if test $board_name = BBG1; then setenv fdtfile am335x-bonegreen.dtb; fi; if test $board_name = BBGW; then setenv fdtfile am335x-bonegreen-wireless.dtb; fi; if test $board_name = BBBL; then setenv fdtfile am335x-boneblue.dtb; fi; if test $board_name = BBEN; then setenv fdtfile am335x-sancloud-bbe.dtb; fi; if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi; if test $board_name = A335_ICE && test $ice_mii = rmii; then setenv fdtfile am335x-icev2.dtb; fi; if test $board_name = A335_ICE && test $ice_mii = mii; then setenv fdtfile am335x-icev2-prueth.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;
finduuid=part uuid ${boot} ${bootpart} uuid
get_overlaystring=for overlay in $name_overlays;do;setenv overlaystring ${overlaystring}'#'${overlay};done;
ice_mii=mii
importbootenv=echo Importing environment from mmc${mmcdev} ...; env import -t ${loadaddr} ${filesize}
init_console=if test $board_name = A335_ICE; then setenv console ttyO3,115200n8;else setenv console ttyO0,115200n8;fi;
kernel_addr_r=0x82000000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0x82000000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}
loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr
loadfdt=load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
mmcboot=mmc dev ${mmcdev}; devnum=${mmcdev}; devtype=mmc; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadimage; then run args_mmc; if test ${boot_fit} -eq 1; then run run_fit; else run mmcloados;fi;fi;fi;
mmcdev=0
mmcloados=if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdtaddr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
mmcrootfstype=ext4 rootwait
mtdids=nand0=nand.0
mtdparts=mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),128k(NAND.SPL.backup2),128k(NAND.SPL.backup3),256k(NAND.u-boot-spl-os),1m(NAND.u-boot),128k(NAND.u-boot-env),128k(NAND.u-boot-env.backup1),8m(NAND.kernel),-(NAND.file-system)
name_fit=fitImage
nandargs=setenv bootargs console=${console} ${optargs} root=${nandroot} rootfstype=${nandrootfstype}
nandboot=echo Booting from nand ...; run nandargs; nand read ${fdtaddr} NAND.u-boot-spl-os; nand read ${loadaddr} NAND.kernel; bootz ${loadaddr} - ${fdtaddr}
nandroot=ubi0:rootfs rw ubi.mtd=NAND.file-system,2048
nandrootfstype=ubifs rootwait=1
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp
netboot=echo Booting from network ...; setenv autoload no; dhcp; run netloadimage; run netloadfdt; run netargs; bootz ${loadaddr} - ${fdtaddr}
netloadfdt=tftp ${fdtaddr} ${fdtfile}
netloadimage=tftp ${loadaddr} ${bootfile}
nfsopts=nolock
partitions=uuid_disk=${uuid_gpt_disk};name=bootloader,start=384K,size=1792K,uuid=${uuid_gpt_bootloader};name=rootfs,start=2688K,size=-,uuid=${uuid_gpt_rootfs}
pxefile_addr_r=0x80100000
ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootz ${loadaddr} ${rdaddr} ${fdtaddr}
ramdisk_addr_r=0x88080000
ramroot=/dev/ram0 rw
ramrootfstype=ext2
rdaddr=0x88080000
rootpath=/export/rootfs
run_fit=bootm ${addr_fit}#${fdtfile}${overlaystring}
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
scriptaddr=0x80000000
serial#=36154P160338
soc=am33xx
spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype}
spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; bootz ${loadaddr}
spibusno=0
spiimgsize=0x362000
spiroot=/dev/mtdblock4 rw
spirootfstype=jffs2
spisrcaddr=0xe0000
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
stderr=serial@44e09000
stdin=serial@44e09000
stdout=serial@44e09000
update_to_fit=setenv loadaddr ${addr_fit}; setenv bootfile ${name_fit}
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
usbnet_devaddr=de:ad:be:ef:00:01
vendor=ti
ver=U-Boot 2021.01-00001-gc59bf25a38-dirty (Aug 29 2023 - 15:31:36 +0800)
Environment size: 10234/131068 bytes
Below files are my modifcation.
1. I follow evm board to set the value in ti_i2c_eeprom_am_get(int bus_addr, int dev_addr)
// SPDX-License-Identifier: GPL-2.0+
/*
* Library to support early TI EVM EEPROM handling
*
* Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
* Lokesh Vutla
* Steve Kipisz
*/
#include <common.h>
#include <eeprom.h>
#include <log.h>
#include <net.h>
#include <asm/arch/hardware.h>
#include <asm/omap_common.h>
#include <dm/uclass.h>
#include <env.h>
#include <i2c.h>
#include <mmc.h>
#include <errno.h>
#include <malloc.h>
#include "board_detect.h"
#if !defined(CONFIG_DM_I2C)
/**
* ti_i2c_eeprom_init - Initialize an i2c bus and probe for a device
* @i2c_bus: i2c bus number to initialize
* @dev_addr: Device address to probe for
*
* Return: 0 on success or corresponding error on failure.
*/
static int __maybe_unused ti_i2c_eeprom_init(int i2c_bus, int dev_addr)
{
int rc;
if (i2c_bus >= 0) {
rc = i2c_set_bus_num(i2c_bus);
if (rc)
return rc;
}
return i2c_probe(dev_addr);
}
/**
* ti_i2c_eeprom_read - Read data from an EEPROM
* @dev_addr: The device address of the EEPROM
* @offset: Offset to start reading in the EEPROM
* @ep: Pointer to a buffer to read into
* @epsize: Size of buffer
*
* Return: 0 on success or corresponding result of i2c_read
*/
static int __maybe_unused ti_i2c_eeprom_read(int dev_addr, int offset,
uchar *ep, int epsize)
{
return i2c_read(dev_addr, offset, 2, ep, epsize);
}
#endif
/**
* ti_eeprom_string_cleanup() - Handle eeprom programming errors
* @s: eeprom string (should be NULL terminated)
*
* Some Board manufacturers do not add a NULL termination at the
* end of string, instead some binary information is kludged in, hence
* convert the string to just printable characters of ASCII chart.
*/
static void __maybe_unused ti_eeprom_string_cleanup(char *s)
{
int i, l;
l = strlen(s);
for (i = 0; i < l; i++, s++)
if (*s < ' ' || *s > '~') {
*s = 0;
break;
}
}
__weak void gpi2c_init(void)
{
}
static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
u32 header, u32 size, uint8_t *ep)
{
u32 hdr_read;
int rc;
#if defined(CONFIG_DM_I2C)
struct udevice *dev;
struct udevice *bus;
rc = uclass_get_device_by_seq(UCLASS_I2C, bus_addr, &bus);
if (rc)
return rc;
rc = dm_i2c_probe(bus, dev_addr, 0, &dev);
if (rc)
return rc;
/*
* Read the header first then only read the other contents.
*/
rc = i2c_set_chip_offset_len(dev, 2);
if (rc)
return rc;
rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
if (rc)
return rc;
/* Corrupted data??? */
if (hdr_read != header) {
/*
* read the eeprom header using i2c again, but use only a
* 1 byte address (some legacy boards need this..)
*/
rc = i2c_set_chip_offset_len(dev, 1);
if (rc)
return rc;
rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
if (rc)
return rc;
}
if (hdr_read != header)
return -1;
rc = dm_i2c_read(dev, 0, ep, size);
if (rc)
return rc;
#else
u32 byte;
gpi2c_init();
rc = ti_i2c_eeprom_init(bus_addr, dev_addr);
if (rc)
return rc;
/*
* Read the header first then only read the other contents.
*/
byte = 2;
rc = i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read, 4);
if (rc)
return rc;
/* Corrupted data??? */
if (hdr_read != header) {
/*
* read the eeprom header using i2c again, but use only a
* 1 byte address (some legacy boards need this..)
*/
byte = 1;
rc = i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read,
4);
if (rc)
return rc;
}
if (hdr_read != header)
return -1;
rc = i2c_read(dev_addr, 0x0, byte, ep, size);
if (rc)
return rc;
#endif
return 0;
}
int __maybe_unused ti_emmc_boardid_get(void)
{
int rc;
struct udevice *dev;
struct mmc *mmc;
struct ti_common_eeprom *ep;
struct ti_am_eeprom brdid;
struct blk_desc *bdesc;
uchar *buffer;
ep = TI_EEPROM_DATA;
if (ep->header == TI_EEPROM_HEADER_MAGIC)
return 0; /* EEPROM has already been read */
/* Initialize with a known bad marker for emmc fails.. */
ep->header = TI_DEAD_EEPROM_MAGIC;
ep->name[0] = 0x0;
ep->version[0] = 0x0;
ep->serial[0] = 0x0;
ep->config[0] = 0x0;
/* uclass object initialization */
rc = mmc_initialize(NULL);
if (rc)
return rc;
/* Set device to /dev/mmcblk1 */
rc = uclass_get_device(UCLASS_MMC, 1, &dev);
if (rc)
return rc;
/* Grab the mmc device */
mmc = mmc_get_mmc_dev(dev);
if (!mmc)
return -ENODEV;
/* mmc hardware initialization routine */
mmc_init(mmc);
/* Set partition to /dev/mmcblk1boot1 */
rc = mmc_switch_part(mmc, 2);
if (rc)
return rc;
buffer = malloc(mmc->read_bl_len);
if (!buffer)
return -ENOMEM;
bdesc = mmc_get_blk_desc(mmc);
/* blk_dread returns the number of blocks read*/
if (blk_dread(bdesc, 0L, 1, buffer) != 1) {
rc = -EIO;
goto cleanup;
}
memcpy(&brdid, buffer, sizeof(brdid));
/* Write out the ep struct values */
ep->header = brdid.header;
strlcpy(ep->name, brdid.name, TI_EEPROM_HDR_NAME_LEN + 1);
ti_eeprom_string_cleanup(ep->name);
strlcpy(ep->version, brdid.version, TI_EEPROM_HDR_REV_LEN + 1);
ti_eeprom_string_cleanup(ep->version);
strlcpy(ep->serial, brdid.serial, TI_EEPROM_HDR_SERIAL_LEN + 1);
ti_eeprom_string_cleanup(ep->serial);
cleanup:
free(buffer);
return rc;
}
int __maybe_unused ti_i2c_eeprom_am_set(const char *name, const char *rev)
{
struct ti_common_eeprom *ep;
if (!name || !rev)
return -1;
ep = TI_EEPROM_DATA;
if (ep->header == TI_EEPROM_HEADER_MAGIC)
goto already_set;
/* Set to 0 all fields */
memset(ep, 0, sizeof(*ep));
strncpy(ep->name, name, TI_EEPROM_HDR_NAME_LEN);
strncpy(ep->version, rev, TI_EEPROM_HDR_REV_LEN);
/* Some dummy serial number to identify the platform */
strncpy(ep->serial, "0000", TI_EEPROM_HDR_SERIAL_LEN);
/* Mark it with a valid header */
ep->header = TI_EEPROM_HEADER_MAGIC;
already_set:
return 0;
}
int __maybe_unused ti_i2c_eeprom_am_get(int bus_addr, int dev_addr)
{
int rc;
struct ti_am_eeprom am_ep;
struct ti_common_eeprom *ep;
ep = TI_EEPROM_DATA;
#ifndef CONFIG_SPL_BUILD
if (ep->header == TI_EEPROM_HEADER_MAGIC)
return 0; /* EEPROM has already been read */
#endif
/* Initialize with a known bad marker for i2c fails.. */
ep->header = TI_DEAD_EEPROM_MAGIC;
ep->name[0] = 0x0;
ep->version[0] = 0x0;
ep->serial[0] = 0x0;
ep->config[0] = 0x0;
#if 0
rc = ti_i2c_eeprom_get(bus_addr, dev_addr, TI_EEPROM_HEADER_MAGIC,
sizeof(am_ep), (uint8_t *)&am_ep);
if (rc)
return rc;
ep->header = am_ep.header;
strlcpy(ep->name, am_ep.name, TI_EEPROM_HDR_NAME_LEN + 1);
ti_eeprom_string_cleanup(ep->name);
/* BeagleBone Green '1' eeprom, board_rev: 0x1a 0x00 0x00 0x00 */
if (am_ep.version[0] == 0x1a && am_ep.version[1] == 0x00 &&
am_ep.version[2] == 0x00 && am_ep.version[3] == 0x00)
strlcpy(ep->version, "BBG1", TI_EEPROM_HDR_REV_LEN + 1);
else
strlcpy(ep->version, am_ep.version, TI_EEPROM_HDR_REV_LEN + 1);
ti_eeprom_string_cleanup(ep->version);
strlcpy(ep->serial, am_ep.serial, TI_EEPROM_HDR_SERIAL_LEN + 1);
strlcpy(ep->config, am_ep.config, TI_EEPROM_HDR_CONFIG_LEN + 1);
ti_eeprom_string_cleanup(ep->config);
memcpy(ep->mac_addr, am_ep.mac_addr,
TI_EEPROM_HDR_NO_OF_MAC_ADDR * TI_EEPROM_HDR_ETH_ALEN);
#else
char mac_addr[TI_EEPROM_HDR_NO_OF_MAC_ADDR][TI_EEPROM_HDR_ETH_ALEN] = {
{0xd0,0xff,0x50,0x56,0xe4,0x14},
{0xd0,0xff,0x50,0x56,0xe4,0x12},
{0xde,0xad,0xbe,0xef,0x00,0x01}
};
ep->header = TI_EEPROM_HEADER_MAGIC;
strlcpy(ep->name, "A33515BB", TI_EEPROM_HDR_NAME_LEN + 1);
ti_eeprom_string_cleanup(ep->name);
strlcpy(ep->version, "1.6A", TI_EEPROM_HDR_REV_LEN + 1);
ti_eeprom_string_cleanup(ep->version);
strlcpy(ep->serial, "36154P160338", TI_EEPROM_HDR_SERIAL_LEN + 1);
ti_eeprom_string_cleanup(ep->serial);
strlcpy(ep->config, "SKU#01", TI_EEPROM_HDR_CONFIG_LEN + 1);
ti_eeprom_string_cleanup(ep->config);
memcpy(ep->mac_addr, mac_addr,
TI_EEPROM_HDR_NO_OF_MAC_ADDR * TI_EEPROM_HDR_ETH_ALEN);
#endif
return 0;
}
int __maybe_unused ti_i2c_eeprom_dra7_get(int bus_addr, int dev_addr)
{
int rc, offset = 0;
struct dra7_eeprom dra7_ep;
struct ti_common_eeprom *ep;
ep = TI_EEPROM_DATA;
#ifndef CONFIG_SPL_BUILD
if (ep->header == DRA7_EEPROM_HEADER_MAGIC)
return 0; /* EEPROM has already been read */
#endif
/* Initialize with a known bad marker for i2c fails.. */
ep->header = TI_DEAD_EEPROM_MAGIC;
ep->name[0] = 0x0;
ep->version[0] = 0x0;
ep->serial[0] = 0x0;
ep->config[0] = 0x0;
ep->emif1_size = 0;
ep->emif2_size = 0;
rc = ti_i2c_eeprom_get(bus_addr, dev_addr, DRA7_EEPROM_HEADER_MAGIC,
sizeof(dra7_ep), (uint8_t *)&dra7_ep);
if (rc)
return rc;
ep->header = dra7_ep.header;
strlcpy(ep->name, dra7_ep.name, TI_EEPROM_HDR_NAME_LEN + 1);
ti_eeprom_string_cleanup(ep->name);
offset = dra7_ep.version_major - 1;
/* Rev F is skipped */
if (offset >= 5)
offset = offset + 1;
snprintf(ep->version, TI_EEPROM_HDR_REV_LEN + 1, "%c.%d",
'A' + offset, dra7_ep.version_minor);
ti_eeprom_string_cleanup(ep->version);
ep->emif1_size = (u64)dra7_ep.emif1_size;
ep->emif2_size = (u64)dra7_ep.emif2_size;
strlcpy(ep->config, dra7_ep.config, TI_EEPROM_HDR_CONFIG_LEN + 1);
ti_eeprom_string_cleanup(ep->config);
return 0;
}
static int ti_i2c_eeprom_am6_parse_record(struct ti_am6_eeprom_record *record,
struct ti_am6_eeprom *ep,
char **mac_addr,
u8 mac_addr_max_cnt,
u8 *mac_addr_cnt)
{
switch (record->header.id) {
case TI_AM6_EEPROM_RECORD_BOARD_INFO:
if (record->header.len != sizeof(record->data.board_info))
return -EINVAL;
if (!ep)
break;
/* Populate (and clean, if needed) the board name */
strlcpy(ep->name, record->data.board_info.name,
sizeof(ep->name));
ti_eeprom_string_cleanup(ep->name);
/* Populate selected other fields from the board info record */
strlcpy(ep->version, record->data.board_info.version,
sizeof(ep->version));
strlcpy(ep->software_revision,
record->data.board_info.software_revision,
sizeof(ep->software_revision));
strlcpy(ep->serial, record->data.board_info.serial,
sizeof(ep->serial));
break;
case TI_AM6_EEPROM_RECORD_MAC_INFO:
if (record->header.len != sizeof(record->data.mac_info))
return -EINVAL;
if (!mac_addr || !mac_addr_max_cnt)
break;
*mac_addr_cnt = ((record->data.mac_info.mac_control &
TI_AM6_EEPROM_MAC_ADDR_COUNT_MASK) >>
TI_AM6_EEPROM_MAC_ADDR_COUNT_SHIFT) + 1;
/*
* The EEPROM can (but may not) hold a very large amount
* of MAC addresses, by far exceeding what we want/can store
* in the common memory array, so only grab what we can fit.
* Note that a value of 0 means 1 MAC address, and so on.
*/
*mac_addr_cnt = min(*mac_addr_cnt, mac_addr_max_cnt);
memcpy(mac_addr, record->data.mac_info.mac_addr,
*mac_addr_cnt * TI_EEPROM_HDR_ETH_ALEN);
break;
case 0x00:
/* Illegal value... Fall through... */
case 0xFF:
/* Illegal value... Something went horribly wrong... */
return -EINVAL;
default:
pr_warn("%s: Ignoring record id %u\n", __func__,
record->header.id);
}
return 0;
}
int __maybe_unused ti_i2c_eeprom_am6_get(int bus_addr, int dev_addr,
struct ti_am6_eeprom *ep,
char **mac_addr,
u8 mac_addr_max_cnt,
u8 *mac_addr_cnt)
{
struct udevice *dev;
struct udevice *bus;
unsigned int eeprom_addr;
struct ti_am6_eeprom_record_board_id board_id;
struct ti_am6_eeprom_record record;
int rc;
/* Initialize with a known bad marker for i2c fails.. */
memset(ep, 0, sizeof(*ep));
ep->header = TI_DEAD_EEPROM_MAGIC;
/* Read the board ID record which is always the first EEPROM record */
rc = ti_i2c_eeprom_get(bus_addr, dev_addr, TI_EEPROM_HEADER_MAGIC,
sizeof(board_id), (uint8_t *)&board_id);
if (rc)
return rc;
if (board_id.header.id != TI_AM6_EEPROM_RECORD_BOARD_ID) {
pr_err("%s: Invalid board ID record!\n", __func__);
return -EINVAL;
}
/* Establish DM handle to board config EEPROM */
rc = uclass_get_device_by_seq(UCLASS_I2C, bus_addr, &bus);
if (rc)
return rc;
rc = i2c_get_chip(bus, dev_addr, 1, &dev);
if (rc)
return rc;
ep->header = TI_EEPROM_HEADER_MAGIC;
/* Ready to parse TLV structure. Initialize variables... */
*mac_addr_cnt = 0;
/*
* After the all-encompassing board ID record all other records follow
* a TLV-type scheme. Point to the first such record and then start
* parsing those one by one.
*/
eeprom_addr = sizeof(board_id);
while (true) {
rc = dm_i2c_read(dev, eeprom_addr, (uint8_t *)&record.header,
sizeof(record.header));
if (rc)
return rc;
/*
* Check for end of list marker. If we reached it don't go
* any further and stop parsing right here.
*/
if (record.header.id == TI_AM6_EEPROM_RECORD_END_LIST)
break;
eeprom_addr += sizeof(record.header);
debug("%s: dev_addr=0x%02x header.id=%u header.len=%u\n",
__func__, dev_addr, record.header.id,
record.header.len);
/* Read record into memory if it fits */
if (record.header.len <= sizeof(record.data)) {
rc = dm_i2c_read(dev, eeprom_addr,
(uint8_t *)&record.data,
record.header.len);
if (rc)
return rc;
/* Process record */
rc = ti_i2c_eeprom_am6_parse_record(&record, ep,
mac_addr,
mac_addr_max_cnt,
mac_addr_cnt);
if (rc) {
pr_err("%s: EEPROM parsing error!\n", __func__);
return rc;
}
} else {
/*
* We may get here in case of larger records which
* are not yet understood.
*/
pr_err("%s: Ignoring record id %u\n", __func__,
record.header.id);
}
eeprom_addr += record.header.len;
}
return 0;
}
int __maybe_unused ti_i2c_eeprom_am6_get_base(int bus_addr, int dev_addr)
{
struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA;
int ret;
/*
* Always execute EEPROM read by not allowing to bypass it during the
* first invocation of SPL which happens on the R5 core.
*/
#if !(defined(CONFIG_SPL_BUILD) && defined(CONFIG_CPU_V7R))
if (ep->header == TI_EEPROM_HEADER_MAGIC) {
debug("%s: EEPROM has already been read\n", __func__);
return 0;
}
#endif
ret = ti_i2c_eeprom_am6_get(bus_addr, dev_addr, ep,
(char **)ep->mac_addr,
AM6_EEPROM_HDR_NO_OF_MAC_ADDR,
&ep->mac_addr_cnt);
return ret;
}
bool __maybe_unused board_ti_k3_is(char *name_tag)
{
struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA;
if (ep->header == TI_DEAD_EEPROM_MAGIC)
return false;
return !strncmp(ep->name, name_tag, AM6_EEPROM_HDR_NAME_LEN);
}
bool __maybe_unused board_ti_is(char *name_tag)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
if (ep->header == TI_DEAD_EEPROM_MAGIC)
return false;
return !strncmp(ep->name, name_tag, TI_EEPROM_HDR_NAME_LEN);
}
bool __maybe_unused board_ti_rev_is(char *rev_tag, int cmp_len)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
int l;
if (ep->header == TI_DEAD_EEPROM_MAGIC)
return false;
l = cmp_len > TI_EEPROM_HDR_REV_LEN ? TI_EEPROM_HDR_REV_LEN : cmp_len;
return !strncmp(ep->version, rev_tag, l);
}
char * __maybe_unused board_ti_get_rev(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
/* if ep->header == TI_DEAD_EEPROM_MAGIC, this is empty already */
return ep->version;
}
char * __maybe_unused board_ti_get_config(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
/* if ep->header == TI_DEAD_EEPROM_MAGIC, this is empty already */
return ep->config;
}
char * __maybe_unused board_ti_get_name(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
/* if ep->header == TI_DEAD_EEPROM_MAGIC, this is empty already */
return ep->name;
}
void __maybe_unused
board_ti_get_eth_mac_addr(int index,
u8 mac_addr[TI_EEPROM_HDR_ETH_ALEN])
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
if (ep->header == TI_DEAD_EEPROM_MAGIC)
goto fail;
if (index < 0 || index >= TI_EEPROM_HDR_NO_OF_MAC_ADDR)
goto fail;
memcpy(mac_addr, ep->mac_addr[index], TI_EEPROM_HDR_ETH_ALEN);
return;
fail:
memset(mac_addr, 0, TI_EEPROM_HDR_ETH_ALEN);
}
void __maybe_unused
board_ti_am6_get_eth_mac_addr(int index,
u8 mac_addr[TI_EEPROM_HDR_ETH_ALEN])
{
struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA;
if (ep->header == TI_DEAD_EEPROM_MAGIC)
goto fail;
if (index < 0 || index >= ep->mac_addr_cnt)
goto fail;
memcpy(mac_addr, ep->mac_addr[index], TI_EEPROM_HDR_ETH_ALEN);
return;
fail:
memset(mac_addr, 0, TI_EEPROM_HDR_ETH_ALEN);
}
u64 __maybe_unused board_ti_get_emif1_size(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
if (ep->header != DRA7_EEPROM_HEADER_MAGIC)
return 0;
return ep->emif1_size;
}
u64 __maybe_unused board_ti_get_emif2_size(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
if (ep->header != DRA7_EEPROM_HEADER_MAGIC)
return 0;
return ep->emif2_size;
}
void __maybe_unused set_board_info_env(char *name)
{
char *unknown = "unknown";
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
if (name)
env_set("board_name", name);
else if (strlen(ep->name) != 0)
env_set("board_name", ep->name);
else
env_set("board_name", unknown);
if (strlen(ep->version) != 0)
env_set("board_rev", ep->version);
else
env_set("board_rev", unknown);
if (strlen(ep->serial) != 0)
env_set("board_serial", ep->serial);
else
env_set("board_serial", unknown);
if (strlen(ep->config) != 0)
env_set("board_config", ep->config);
else
env_set("board_config", unknown);
}
void __maybe_unused set_board_info_env_am6(char *name)
{
char *unknown = "unknown";
struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA;
if (name)
env_set("board_name", name);
else if (strlen(ep->name) != 0)
env_set("board_name", ep->name);
else
env_set("board_name", unknown);
if (strlen(ep->version) != 0)
env_set("board_rev", ep->version);
else
env_set("board_rev", unknown);
if (strlen(ep->software_revision) != 0)
env_set("board_software_revision", ep->software_revision);
else
env_set("board_software_revision", unknown);
if (strlen(ep->serial) != 0)
env_set("board_serial", ep->serial);
else
env_set("board_serial", unknown);
}
static u64 mac_to_u64(u8 mac[6])
{
int i;
u64 addr = 0;
for (i = 0; i < 6; i++) {
addr <<= 8;
addr |= mac[i];
}
return addr;
}
static void u64_to_mac(u64 addr, u8 mac[6])
{
mac[5] = addr;
mac[4] = addr >> 8;
mac[3] = addr >> 16;
mac[2] = addr >> 24;
mac[1] = addr >> 32;
mac[0] = addr >> 40;
}
void board_ti_set_ethaddr(int index)
{
uint8_t mac_addr[6];
int i;
u64 mac1, mac2;
u8 mac_addr1[6], mac_addr2[6];
int num_macs;
/*
* Export any Ethernet MAC addresses from EEPROM.
* The 2 MAC addresses in EEPROM define the address range.
*/
board_ti_get_eth_mac_addr(0, mac_addr1);
board_ti_get_eth_mac_addr(1, mac_addr2);
if (is_valid_ethaddr(mac_addr1) && is_valid_ethaddr(mac_addr2)) {
mac1 = mac_to_u64(mac_addr1);
mac2 = mac_to_u64(mac_addr2);
/* must contain an address range */
num_macs = mac2 - mac1 + 1;
if (num_macs <= 0)
return;
if (num_macs > 50) {
printf("%s: Too many MAC addresses: %d. Limiting to 50\n",
__func__, num_macs);
num_macs = 50;
}
for (i = 0; i < num_macs; i++) {
u64_to_mac(mac1 + i, mac_addr);
if (is_valid_ethaddr(mac_addr)) {
eth_env_set_enetaddr_by_index("eth", i + index,
mac_addr);
}
}
}
}
void board_ti_am6_set_ethaddr(int index, int count)
{
u8 mac_addr[6];
int i;
for (i = 0; i < count; i++) {
board_ti_am6_get_eth_mac_addr(i, mac_addr);
if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr_by_index("eth", i + index,
mac_addr);
}
}
bool __maybe_unused board_ti_was_eeprom_read(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
if (ep->header == TI_EEPROM_HEADER_MAGIC)
return true;
else
return false;
}
Thank you so much.
Best Regards,
YiFong
Hello,
stop @u-boot prompt
mmc list
Is "mmc dev 1" available?
if yes,
mmc dev 1 mmc info mmc part ls mmc 1:1 ls mmc 1:2 ls mmc 1:2 boot
Hello YiFong.
It looks like somehow mmc dev (SD) is not accessible by u-boot when loading kernel/dtb....
I'm attaching a reference log booting from SD with SDK8.2 on TI AM335x GP EVM.
Best,
-Hong
U-Boot SPL 2021.01-g44a87e3ab8 (May 14 2022 - 22:32:40 +0000)
Trying to boot from MMC1
U-Boot 2021.01-g44a87e3ab8 (May 14 2022 - 22:32:40 +0000)
CPU : AM335X-GP rev 2.0
Model: TI AM335x EVM
DRAM: 512 MiB
WDT: Started with servicing (60s timeout)
NAND: 256 MiB
MMC: OMAP SD/MMC: 0
Loading Environment from FAT... *** Warning - bad CRC, using default environment
<ethaddr> not set. Validating first E-fuse MAC
Net: eth2: ethernet@4a100000, eth3: usb_ether
Hit any key to stop autoboot: 2 1 0
=> md.l 0x44e10040 1
44e10040: 00400397 ..@.
=> boot
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
Failed to load 'boot.scr'
Failed to load 'uEnv.txt'
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Scanning disk mmc@48060000.blk...
Found 3 disks
No EFI system partition
BootOrder not defined
EFI boot manager: Cannot load any image
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
4997632 bytes read in 370 ms (12.9 MiB/s)
97293 bytes read in 13 ms (7.1 MiB/s)
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 8ffe5000, end 8ffffc0c ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.10.100-g7a7a3af903 (oe-user@oe-host) (arm-none-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 9.2.1 20191025, GNU ld (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 2.33.1.20191209) #1 PREEMPT Sat May 14 22:36:58 UTC 2022
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: TI AM335x EVM
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 48 MiB at 0x9c800000
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x0000000080000000-0x000000009fefffff]
[ 0.000000] HighMem empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000080000000-0x000000009fefffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x000000009fefffff]
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] AM335X ES2.0 (sgx neon)
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129666
[ 0.000000] Kernel command line: console=ttyO0,115200n8 root=PARTUUID=415c4c9f-02 rw rootfstype=ext4 rootwait
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 452316K/523264K available (10240K kernel code, 695K rwdata, 3404K rodata, 1024K init, 280K bss, 21796K reserved, 49152K cma-reserved, 0K highmem)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Preemptible hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] Trampoline variant of Tasks RCU enabled.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts
[ 0.000000] random: get_random_bytes called from start_kernel+0x30c/0x4c8 with crng_init=0
[ 0.000000] TI gptimer clocksource: always-on /ocp/interconnect@44c00000/segment@200000/target-module@31000
[ 0.000011] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.000033] clocksource: dmtimer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000432] TI gptimer clockevent: 24000000 Hz at /ocp/interconnect@48000000/segment@0/target-module@40000
[ 0.001677] Console: colour dummy device 80x30
[ 0.001724] WARNING: Your 'console=ttyO0' has been replaced by 'ttyS0'
[ 0.001733] This ensures that you still see kernel messages. Please
[ 0.001740] update your kernel commandline.
[ 0.001806] Calibrating delay loop... 795.44 BogoMIPS (lpj=3977216)
[ 0.090512] pid_max: default: 32768 minimum: 301
[ 0.090711] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.090731] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.091754] CPU: Testing write buffer coherency: ok
[ 0.091845] CPU0: Spectre v2: using BPIALL workaround
[ 0.092836] Setting up static identity map for 0x80100000 - 0x80100060
[ 0.093007] rcu: Hierarchical SRCU implementation.
[ 0.093117] EFI services will not be available.
[ 0.093562] devtmpfs: initialized
[ 0.107498] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[ 0.107803] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.107832] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[ 0.112011] pinctrl core: initialized pinctrl subsystem
[ 0.113129] DMI not present or invalid.
[ 0.113659] NET: Registered protocol family 16
[ 0.116307] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.136137] l3-aon-clkctrl:0000:0: failed to disable
[ 0.137570] thermal_sys: Registered thermal governor 'fair_share'
[ 0.137584] thermal_sys: Registered thermal governor 'bang_bang'
[ 0.137601] thermal_sys: Registered thermal governor 'step_wise'
[ 0.137609] thermal_sys: Registered thermal governor 'user_space'
[ 0.138033] cpuidle: using governor ladder
[ 0.138075] cpuidle: using governor menu
[ 1.708148] No ATAGs?
[ 1.708182] hw-breakpoint: debug architecture 0x4 unsupported.
[ 1.738914] v1_8d: supplied by vbat
[ 1.739803] v3_3d: supplied by vbat
[ 1.741612] iommu: Default domain type: Translated
[ 1.744311] SCSI subsystem initialized
[ 1.744925] mc: Linux media interface: v0.10
[ 1.744981] videodev: Linux video capture interface: v2.00
[ 1.745121] pps_core: LinuxPPS API ver. 1 registered
[ 1.745134] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 1.745162] PTP clock support registered
[ 1.745236] EDAC MC: Ver: 3.0.0
[ 1.746849] Advanced Linux Sound Architecture Driver Initialized.
[ 1.748454] clocksource: Switched to clocksource dmtimer
[ 1.757724] NET: Registered protocol family 2
[ 1.757990] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 1.759331] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 1.759375] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
[ 1.759428] TCP bind hash table entries: 4096 (order: 2, 16384 bytes, linear)
[ 1.759476] TCP: Hash tables configured (established 4096 bind 4096)
[ 1.759616] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 1.759640] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 1.759790] NET: Registered protocol family 1
[ 1.760441] RPC: Registered named UNIX socket transport module.
[ 1.760458] RPC: Registered udp transport module.
[ 1.760467] RPC: Registered tcp transport module.
[ 1.760475] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 1.760498] PCI: CLS 0 bytes, default 64
[ 1.761661] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
[ 1.763162] Initialise system trusted keyrings
[ 1.763558] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[ 1.768218] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 1.769398] NFS: Registering the id_resolver key type
[ 1.769458] Key type id_resolver registered
[ 1.769469] Key type id_legacy registered
[ 1.769581] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 1.769595] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 1.769640] ntfs: driver 2.1.32 [Flags: R/O].
[ 1.770364] Key type asymmetric registered
[ 1.770387] Asymmetric key parser 'x509' registered
[ 1.770448] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[ 1.770463] io scheduler mq-deadline registered
[ 1.770474] io scheduler kyber registered
[ 2.291002] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
[ 2.411839] debugfs: Directory '49000000.dma' with parent 'dmaengine' already present!
[ 2.411897] edma 49000000.dma: TI EDMA DMA engine driver
[ 2.466999] pinctrl-single 44e10800.pinmux: 142 pins, size 568
[ 2.468528] random: fast init done
[ 2.472219] pwm-backlight backlight: supply power not found, using dummy regulator
[ 2.532086] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled
[ 2.537661] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 21, base_baud = 3000000) is a 8250
[ 3.227254] printk: console [ttyS0] enabled
[ 3.233818] 48022000.serial: ttyS1 at MMIO 0x48022000 (irq = 28, base_baud = 3000000) is a 8250
[ 3.246511] omap_rng 48310000.rng: Random Number Generator ver. 20
[ 3.253114] random: crng init done
[ 3.274478] panel-simple panel: supply power not found, using dummy regulator
[ 3.282266] panel-simple panel: Specify missing connector_type
[ 3.304666] brd: module loaded
[ 3.316328] loop: module loaded
[ 3.388480] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6, bus freq 1000000
[ 3.403052] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver Qualcomm Atheros AR8031/AR8033
[ 3.414071] cpsw-switch 4a100000.switch: initialized cpsw ale version 1.4
[ 3.421037] cpsw-switch 4a100000.switch: ALE Table size 1024
[ 3.426873] cpsw-switch 4a100000.switch: cpts: overflow check period 500 (jiffies)
[ 3.434552] cpsw-switch 4a100000.switch: CPTS: ref_clk_freq:250000000 calc_mult:2147483648 calc_shift:29 error:0 nsec/sec
[ 3.445677] cpsw-switch 4a100000.switch: Detected MACID = c8:a0:30:7d:1a:90
[ 3.453754] cpsw-switch 4a100000.switch: initialized (regs 0x4a100000, pool size 256) hw_ver:0019010C 1.12 (0)
[ 3.465200] i2c /dev entries driver
[ 3.472269] cpuidle: enable-method property 'ti,am3352' found operations
[ 3.479950] sdhci: Secure Digital Host Controller Interface driver
[ 3.486172] sdhci: Copyright(c) Pierre Ossman
[ 3.491985] sdhci-pltfm: SDHCI platform and OF driver helper
[ 3.500913] sdhci-omap 47810000.mmc: supply vqmmc not found, using dummy regulator
[ 3.509516] ledtrig-cpu: registered to indicate activity on CPUs
[ 3.532866] davinci-mcasp 4803c000.mcasp: IRQ common not found
[ 3.541355] NET: Registered protocol family 10
[ 3.547365] Segment Routing with IPv6
[ 3.551291] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[ 3.558054] NET: Registered protocol family 17
[ 3.563078] Key type dns_resolver registered
[ 3.568161] omap_voltage_late_init: Voltage driver support not added
[ 3.575437] Loading compiled-in X.509 certificates
[ 3.594696] omap-gpmc 50000000.gpmc: GPMC revision 6.0
[ 3.600102] gpmc_mem_init: disabling cs 0 mapped at 0x0-0x1000000
[ 3.612809] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
[ 3.619282] nand: Micron MT29F2G08ABAEAWP
[ 3.623314] nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[ 3.631140] nand: using OMAP_ECC_BCH8_CODE_HW ECC scheme
[ 3.636627] 10 fixed-partitions partitions found on MTD device omap2-nand.0
[ 3.643661] Creating 10 MTD partitions on "omap2-nand.0":
[ 3.649105] 0x000000000000-0x000000020000 : "NAND.SPL"
[ 3.656207] 0x000000020000-0x000000040000 : "NAND.SPL.backup1"
[ 3.663826] 0x000000040000-0x000000060000 : "NAND.SPL.backup2"
[ 3.671371] 0x000000060000-0x000000080000 : "NAND.SPL.backup3"
[ 3.678849] 0x000000080000-0x0000000c0000 : "NAND.u-boot-spl-os"
[ 3.686505] 0x0000000c0000-0x0000001c0000 : "NAND.u-boot"
[ 3.693989] 0x0000001c0000-0x0000001e0000 : "NAND.u-boot-env"
[ 3.701448] 0x0000001e0000-0x000000200000 : "NAND.u-boot-env.backup1"
[ 3.709614] 0x000000200000-0x000000a00000 : "NAND.kernel"
[ 3.720509] 0x000000a00000-0x000010000000 : "NAND.file-system"
[ 3.849636] OMAP GPIO hardware version 0.1
[ 3.888750] tps65910 0-002d: No interrupt support, no core IRQ
[ 3.896871] vrtc: supplied by vbat
[ 3.903846] vio: supplied by vbat
[ 3.909087] vdd_mpu: supplied by vbat
[ 3.914493] vdd_core: supplied by vbat
[ 3.920986] vdig1: supplied by vbat
[ 3.925796] vdig2: supplied by vbat
[ 3.930622] vpll: supplied by vbat
[ 3.935347] vdac: supplied by vbat
[ 3.940083] vaux1: supplied by vbat
[ 3.944870] vaux2: supplied by vbat
[ 3.949685] vaux33: supplied by vbat
[ 3.954698] vmmc: supplied by vbat
[ 3.959627] vbb: supplied by vbat
[ 3.963752] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[ 3.972933] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 100 kHz
[ 3.987940] [drm] Initialized tilcdc 1.0.0 20121205 for 4830e000.lcdc on minor 0
[ 4.040407] Console: switching to colour frame buffer device 100x30
[ 4.062787] tilcdc 4830e000.lcdc: [drm] fb0: tilcdcdrmfb frame buffer device
[ 4.073443] omap_gpio 44e07000.gpio: Could not set line 6 debounce to 200000 microseconds (-22)
[ 4.085523] input: volume_keys0 as /devices/platform/volume_keys0/input/input0
[ 4.094640] sdhci-omap 47810000.mmc: supply vqmmc not found, using dummy regulator
[ 4.102476] sdhci-omap 48060000.mmc: Got CD GPIO
[ 4.107356] sdhci-omap 48060000.mmc: supply vqmmc not found, using dummy regulator
[ 4.117108] ALSA device list:
[ 4.128569] No soundcards found.
[ 4.205126] mmc0: SDHCI controller on 48060000.mmc [48060000.mmc] using External DMA
[ 4.247757] mmc0: new high speed SDHC card at address 59b4
[ 4.255195] mmcblk0: mmc0:59b4 USD00 15.0 GiB
[ 4.262240] mmcblk0: p1 p2
[ 4.285113] mmc2: SDHCI controller on 47810000.mmc [47810000.mmc] using External DMA
[ 4.299265] sdhci-omap 47810000.mmc: card claims to support voltages below defined range
[ 4.345581] mmc2: new SDIO card at address 0001
[ 6.365730] EXT4-fs (mmcblk0p2): recovery complete
[ 6.416676] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 6.425509] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 6.442938] devtmpfs: mounted
[ 6.450198] Freeing unused kernel memory: 1024K
[ 6.455617] Run /sbin/init as init process
[ 6.815479] systemd[1]: System time before build time, advancing clock.
[ 6.854863] systemd[1]: systemd 244 running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMOR -SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN2 -IDN -PCRE2 default-hierarchy=hybrid)
[ 6.877942] systemd[1]: Detected architecture arm.
Welcome to Arago 2021.09!
[ 6.920350] systemd[1]: Set hostname to <am335x-evm>.
[ 7.913673] systemd[1]: system-getty.slice: unit configures an IP firewall, but the local system does not support BPF/cgroup firewalling.
[ 7.926815] systemd[1]: (This warning is only shown for the first unit using IP firewalling.)
[ 7.941119] systemd[1]: Created slice system-getty.slice.
[ OK ] Created slice system-getty.slice.
[ 7.981792] systemd[1]: Created slice system-serial\x2dgetty.slice.
[ OK ] Created slice system-serial\x2dgetty.slice.
[ 8.023392] systemd[1]: Created slice User and Session Slice.
[ OK ] Created slice User and Session Slice.
[ 8.060303] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[ OK ] Started Dispatch Password �ts to Console Directory Watch.
[ 8.099458] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[ OK ] Started Forward Password R�uests to Wall Directory Watch.
[ 8.140356] systemd[1]: Reached target Paths.
[ OK ] Reached target Paths.
[ 8.179008] systemd[1]: Reached target Remote File Systems.
[ OK ] Reached target Remote File Systems.
[ 8.219270] systemd[1]: Reached target Slices.
[ OK ] Reached target Slices.
[ 8.259002] systemd[1]: Reached target Swap.
[ OK ] Reached target Swap.
[ 8.276044] systemd[1]: Listening on RPCbind Server Activation Socket.
[ OK ] Listening on RPCbind Server Activation Socket.
[ 8.319030] systemd[1]: Reached target RPC Port Mapper.
[ OK ] Reached target RPC Port Mapper.
[ 8.378419] systemd[1]: Listening on Process Core Dump Socket.
[ OK ] Listening on Process Core Dump Socket.
[ 8.420593] systemd[1]: Listening on initctl Compatibility Named Pipe.
[ OK ] Listening on initctl Compatibility Named Pipe.
[ 8.515847] systemd[1]: Condition check resulted in Journal Audit Socket being skipped.
[ 8.526960] systemd[1]: Listening on Journal Socket (/dev/log).
[ OK ] Listening on Journal Socket (/dev/log).
[ 8.571468] systemd[1]: Listening on Journal Socket.
[ OK ] Listening on Journal Socket.
[ 8.612078] systemd[1]: Listening on Network Service Netlink Socket.
[ OK ] Listening on Network Service Netlink Socket.
[ 8.650395] systemd[1]: Listening on udev Control Socket.
[ OK ] Listening on udev Control Socket.
[ 8.690583] systemd[1]: Listening on udev Kernel Socket.
[ OK ] Listening on udev Kernel Socket.
[ 8.729991] systemd[1]: Condition check resulted in Huge Pages File System being skipped.
[ 8.755322] systemd[1]: Mounting POSIX Message Queue File System...
Mounting POSIX Message Queue File System...
[ 8.807080] systemd[1]: Mounting Kernel Debug File System...
Mounting Kernel Debug File System...
[ 8.873543] systemd[1]: Mounting Temporary Directory (/tmp)...
Mounting Temporary Directory (/tmp)...
[ 8.919859] systemd[1]: Condition check resulted in Create list of static device nodes for the current kernel being skipped.
[ 8.941576] systemd[1]: Starting Start psplash boot splash screen...
Starting Start psplash boot splash screen...
[ 9.005459] systemd[1]: Starting RPC Bind...
Starting RPC Bind...
[ 9.024382] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.
[ 9.050343] systemd[1]: Starting Journal Service...
Starting Journal Service...
[ 9.133811] systemd[1]: Starting Load Kernel Modules...
Starting Load Kernel Modules...
[ 9.185072] cryptodev: loading out-of-tree module taints kernel.
[ 9.206519] systemd[1]: Starting Remount Root and Kernel File Systems...
[ 9.229275] cryptodev: driver 1.10 loaded.
Starting Remount Root and Kernel File Systems...
[ 9.285649] systemd[1]: Starting udev Coldplug all Devices...
Starting udev Coldplug all Devices...[ 9.372047] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 9.463599] systemd[1]: Started Start psplash boot splash screen.
[ OK ] Started Start psplash boot splash screen.
[ 9.520060] systemd[1]: Started RPC Bind.
[ OK ] Started RPC Bind.
[ 9.550377] systemd[1]: Mounted POSIX Message Queue File System.
[ OK ] Mounted POSIX Message Queue File System.
[ 9.590130] systemd[1]: Mounted Kernel Debug File System.
[ OK ] Mounted Kernel Debug File System.
[ 9.620493] systemd[1]: Mounted Temporary Directory (/tmp).
[ OK ] Mounted Temporary Directory (/tmp).
[ 9.652490] systemd[1]: Started Load Kernel Modules.
[ OK ] Started Load Kernel Modules.
[ 9.689518] systemd[1]: Started Remount Root and Kernel File Systems.
[ OK ] Started Remount Root and Kernel File Systems.
[ 9.721379] systemd[1]: Condition check resulted in FUSE Control File System being skipped.
[ 9.769834] systemd[1]: Mounting Kernel Configuration File System...
Mounting Kernel Configuration File System...
[ 9.824572] systemd[1]: Started Start psplash-systemd progress communication helper.
[ OK ] Started Start psplash-syst�progress communication helper.
[ 9.902692] systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.
[ 9.945211] systemd[1]: Starting Apply Kernel Variables...
Starting Apply Kernel Variables...
[ 9.989204] systemd[1]: Condition check resulted in Create System Users being skipped.
[ 10.037645] systemd[1]: Starting Create Static Device Nodes in /dev...
Starting Create Static Device Nodes in /dev...
[ 10.130815] systemd[1]: Mounted Kernel Configuration File System.
[ OK ] Mounted Kernel Configuration File System.
[ 10.186257] systemd[1]: Started Apply Kernel Variables.
[ OK ] Started Apply Kernel Variables.
[ 10.259657] systemd[1]: Started Create Static Device Nodes in /dev.
[ OK ] Started Create Static Device Nodes in /dev.
[ 10.290747] systemd[1]: Started Journal Service.
[ OK ] Started Journal Service.
[ OK ] Reached target Local File Systems (Pre).
Mounting /media/ram...
Mounting /var/volatile...
Starting Flush Journal to Persistent Storage...
[ 10.614359] systemd-journald[88]: Received client request to flush runtime journal.
Starting udev Kernel Device Manager...
[ OK ] Mounted /media/ram.
[ OK ] Mounted /var/volatile.
[ OK ] Started Flush Journal to Persistent Storage.
Starting Load/Save Random Seed...
[ OK ] Reached target Local File Systems.
Starting Create Volatile Files and Directories...
[ OK ] Started Load/Save Random Seed.
[ OK ] Started Create Volatile Files and Directories.
Starting Network Time Synchronization...
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Started udev Kernel Device Manager.
[ OK ] Started Update UTMP about System Boot/Shutdown.
[ OK ] Started udev Coldplug all Devices.
Starting udev Wait for Complete Device Initialization...
[ 13.554453] input: matrix_keypad0 as /devices/platform/matrix_keypad0/input/input1
[ OK ] Started Network Time Synchronization.
[ OK ] Reached target System Time Set.
[ OK ] Reached target System Time Synchronized.
[ OK ] Created slice system-systemd\x2dbacklight.slice.
Starting Load/Save Screen �ness of backlight:backlight...
[ 14.150312] remoteproc remoteproc0: wkup_m3 is available
[ OK ] Started Load/Save Screen B�htness of backlight:backlight.
[ 14.782241] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[ 14.889377] omap_rtc 44e3e000.rtc: registered as rtc0
[ 14.969248] omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01T00:00:00 UTC (946684800)
[ 15.538695] remoteproc remoteproc0: powering up wkup_m3
[ 15.597098] remoteproc remoteproc0: Booting fw image am335x-pm-firmware.elf, size 243276
[ 15.709045] remoteproc remoteproc0: remote processor wkup_m3 is now up
[ 15.709072] wkup_m3_ipc 44e11324.wkup_m3_ipc: CM3 Firmware Version = 0x192
[ 15.912387] tps65910-rtc tps65910-rtc: registered as rtc1
[ 16.277367] am335x-phy-driver 47401300.usb-phy: supply vcc not found, using dummy regulator
[ 16.383493] usbcore: registered new interface driver usbfs
[ 16.394977] am335x-phy-driver 47401b00.usb-phy: supply vcc not found, using dummy regulator
[ 16.428825] usbcore: registered new interface driver hub
[ 16.434290] usbcore: registered new device driver usb
[ 16.675404] musb-hdrc musb-hdrc.0: MUSB HDRC host driver
[ 16.798792] musb-hdrc musb-hdrc.0: new USB bus registered, assigned bus number 1
[ 16.897513] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.10
[ 17.018585] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 17.025884] usb usb1: Product: MUSB HDRC host driver
[ 17.186289] usb usb1: Manufacturer: Linux 5.10.100-g7a7a3af903 musb-hcd
[ 17.268678] usb usb1: SerialNumber: musb-hdrc.0
[ 17.339338] hub 1-0:1.0: USB hub found
[ 17.379698] hub 1-0:1.0: 1 port detected
[ 17.535426] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
[ 17.630977] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 2
[ 17.721503] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.10
[ 17.828844] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 17.836154] usb usb2: Product: MUSB HDRC host driver
[ 17.968343] usb usb2: Manufacturer: Linux 5.10.100-g7a7a3af903 musb-hcd
[ 18.068673] usb usb2: SerialNumber: musb-hdrc.1
[ 18.107271] hub 2-0:1.0: USB hub found
[ 18.188799] hub 2-0:1.0: 1 port detected
[* ] A start job is running for udev Wai�ice Initialization (11s / 3min 4s)
[ 20.562918] omap-sham 53100000.sham: hw accel on OMAP rev 4.3
[ 20.651393] omap-aes 53500000.aes: OMAP AES hw accel rev: 3.2
[ 20.730721] omap-sham 53100000.sham: will run requests pump with realtime priority
[ 20.784864] omap-aes 53500000.aes: will run requests pump with realtime priority
[** ] A start job is running for udev Wai�ice Initialization (12s / 3min 4s)
[*** ] A start job is running for udev Wai�ice Initialization (13s / 3min 4s)
[ *** ] A start job is running for udev Wai�ice Initialization (14s / 3min 4s)
[ 22.835840] PM: bootloader does not support rtc-only!
[ *** ] A start job is running for udev Wai�ice Initialization (15s / 3min 4s)
[ 23.109160] [drm] Initialized pvr 1.17.4948957 20110701 for 56000000.gpu on minor 1
[ ***] A start job is running for udev Wai�ice Initialization (15s / 3min 4s)
[ **] A start job is running for udev Wai�ice Initialization (17s / 3min 4s)
[ *] A start job is running for udev Wai�ice Initialization (17s / 3min 4s)
[ **] A start job is running for udev Wai�ice Initialization (18s / 3min 4s)
[ ***] A start job is running for udev Wai�ice Initialization (18s / 3min 4s)
[ *** ] A start job is running for udev Wai�ice Initialization (19s / 3min 4s)
[ *** ] A start job is running for udev Wai�ice Initialization (20s / 3min 4s)
[*** ] A start job is running for udev Wai�ice Initialization (20s / 3min 4s)
[** ] A start job is running for udev Wai�ice Initialization (21s / 3min 4s)
[* ] A start job is running for udev Wai�ice Initialization (21s / 3min 4s)
[ 29.806198] input: ti-tsc as /devices/platform/ocp/44c00000.interconnect/44c00000.interconnect:segment@200000/44e0d000.target-module/44e0d000.tscadc/TI-am335x-tsc.0.auto/input/input2
[** ] A start job is running for udev Wai�ice Initialization (22s / 3min 4s)
[ 30.622449] remoteproc remoteproc1: 4a334000.pru is available
[ 30.746435] remoteproc remoteproc2: 4a338000.pru is available
[ OK ] Started udev Wait for Complete Device Initialization.
[ OK ] Created slice system-systemd\x2dfsck.slice.
[ OK ] Reached target Hardware activated USB gadget.
[ OK ] Listening on Load/Save RF �itch Status /dev/rfkill Watch.
[ OK ] Started Hardware RNG Entropy Gatherer Daemon.
Starting File System Check on /dev/mmcblk0p1...
[ OK ] Reached target System Initialization.
[ OK ] Started Daily rotation of log files.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target Timers.
[ OK ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Listening on dropbear.socket.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
Starting Save/Restore Sound Card State...
[ OK ] Started Job spooling tools.
[ OK ] Started Periodic Command Scheduler.
[ OK ] Started D-Bus System Message Bus.
Starting Print notice about GPLv3 packages...
Starting IPv6 Packet Filtering Framework...
Starting IPv4 Packet Filtering Framework...
[ 34.408651] lis3_reg: disabling
[ 34.411869] v1_8d: disabling
[ 34.414765] v3_3d: disabling
Starting Reboot and dump vmcore via kexec...
[ 34.482711] wlan-en-regulator: disabling
Starting rc.pvr.service...
Starting Login Service...
[ OK ] Started Save/Restore Sound Card State.
[ 34.782686] PVR_K: UM DDK-(4948957) and KM DDK-(4948957) match. [ OK ]
[ OK ] Started IPv6 Packet Filtering Framework.
[ OK ] Started IPv4 Packet Filtering Framework.
[ OK ] Started Reboot and dump vmcore via kexec.
[ OK ] Started File System Check on /dev/mmcblk0p1.
[ OK ] Started rc.pvr.service.
[ OK ] Reached target Network (Pre).
[ OK ] Reached target Sound Card.
Mounting /run/media/mmcblk0p1...
Starting Network Service...
Starting weston.service...
[ OK ] Mounted /run/media/mmcblk0p1.
[ OK ] Started weston.service.
Starting Matrix GUI...
Starting telnetd.service...
[ OK ] Started Matrix GUI.
[ OK ] Started Network Service.
Starting Wait for Network to be Configured...
[ 36.784058] cpsw-switch 4a100000.switch: starting ndev. mode: dual_mac
Starting Network Name Resolution...
[ OK ] Started telnetd.service.
[ 37.012785] Qualcomm Atheros AR8031/AR8033 4a101000.mdio:00: attached PHY driver [Qualcomm Atheros AR8031/AR8033] (mii_bus:phy_addr=4a101000.mdio:00, irq=POLL)
[ OK ] Started Login Service.
[ OK ] Started Network Name Resolution.
[ OK ] Reached target Network.
[ OK ] Reached target Host and Network Name Lookups.
Starting Avahi mDNS/DNS-SD Stack...
Starting Enable and configure wl18xx bluetooth stack...
[ OK ] Started NFS status monitor for NFSv2/3 locking..
Starting Simple Network Ma�ent Protocol (SNMP) Daemon....
Starting Permit User Sessions...
[ OK ] Started Permit User Sessions.
[ OK ] Started Avahi mDNS/DNS-SD Stack.
[ OK ] Started Getty on tty1.
[ OK ] Started Serial Getty on ttyS0.
[ OK ] Started Serial Getty on ttyS3.
[ OK ] Reached target Login Prompts.
Starting Synchronize System and HW clocks...
[ OK ] Started Enable and configure wl18xx bluetooth stack.
[ OK ] Started Simple Network Man�ement Protocol (SNMP) Daemon..
[ OK ] Started Synchronize System and HW clocks.
[ 44.181610] cryptd: max_cpu_qlen set to 1000
_____ _____ _ _
| _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_
| | _| .'| . | . | | __| _| . | | | -_| _| _|
|__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_|
|___| |___|
Arago Project http://arago-project.org am335x-evm ttyS0
Arago 2021.09 am335x-evm ttyS0
am335x-evm login: ***************************************************************
***************************************************************
NOTICE: This file system contains the following GPLv3 packages:
autoconf
bash-dev
bash
bc
binutils
cifs-utils
coreutils-stdbuf
coreutils
cpio
cpp-symlinks
cpp
dosfstools
elfutils
g++-symlinks
g++
gawk
gcc-symlinks
gcc
gdb
gdbserver
gettext
glmark2
gstreamer1.0-libav
gzip
hidapi
less
libasm1
libbfd
libdw1
libelf1
libgdbm-compat4
libgdbm-dev
libgdbm6
libgettextlib
libgettextsrc
libgmp10
libidn2-0
libmpc3
libmpfr6
libreadline-dev
libreadline8
libunistring2
m4-dev
m4
make
nettle
parted
pdm-anomaly-detection
tar
which
If you do not wish to distribute GPLv3 components please remove
the above packages prior to distribution. This can be done using
the opkg remove command. i.e.:
opkg remove <package>
Where <package> is the name printed in the list above
NOTE: If the package is a dependency of another package you
will be notified of the dependent packages. You should
use the --force-removal-of-dependent-packages option to
also remove the dependent packages as well
***************************************************************
***************************************************************
am335x-evm login: root
root@am335x-evm:~# uname -a
Linux am335x-evm 5.10.100-g7a7a3af903 #1 PREEMPT Sat May 14 22:36:58 UTC 2022 armv7l armv7l armv7l GNU/Linux
root@am335x-evm:~# ls -l /dev/hwrng
crw------- 1 root root 10, 183 Jan 1 00:00 /dev/hwrng
root@am335x-evm:~# cat /dev/hwrng | rngtest -c 1000
rngtest 6.9
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 999
rngtest: FIPS 140-2 failures: 1
rngtest: FIPS 140-2(2001-10-10) Monobit: 1
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=50.347; avg=2899.461; max=3906250.000)Kibits/s
rngtest: FIPS tests speed: (min=1.763; avg=22.655; max=31.014)Mibits/s
rngtest: Program run time: 7928807 microseconds
root@am335x-evm:~#
Hi Hong:
I have AM3358 EVM board, that can boot successfully for my modication.
I recheck the code about MMC part, but I still cannot solve it, I have no idea now, do you have some suggestions for checking?
Thanks
YiFong
Hello YiFong,
Is there mmc0(SD) node listed from "dm tree" cmd @u-boot?
I'm wandering mmc0 node access under DM @u-boot.
Best,
-Hong
Hi Hong:
My dm tree screen is below

I can see "mmc 0 [ + ] omap_hsmmc |-- mmc@48060000",
I also check the "dm tree" for my TI3358_GP board with same sdcard, I got the same result.
what should I check next step?
Thanks
Best Regards,
YiFong
Hi Hong:
My dm tree screen is below

I refer to https://e2e.ti.com/support/processors-group/processors/f/processors-forum/814034/linux-am3358-custom-board-boot-issue
I follow the post to add CONFIG_MMC_BROKEN_CD=y in am335x_evm_defconfig
My board boot successfully, :D
Thanks
Hello YiFong,
It is good to know you're able to boot from SD on your board.
Thanks for sharing the patch from an early e2e post. This'll be useful for future users...
Best,
-Hong