Hi,
I am designing a custom board with 66AK2G12, I am using the SDK Linux 06_01_00_08 and I am doing some test with k2g-evm board. I was able to flash the QSPI via DFU-USB and u-boot start correctly but the boot hangs at the following point:
U-Boot 2019.01-g171fca6551-dirty (Mar 06 2020 - 03:00:28 -0800) CPU: 66AK2Gx-100 SR1.0 Model: Texas Instruments K2G General Purpose EVM DRAM: Clear entire DDR3 memory to enable ECC 2 GiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 Loading Environment from FAT... Card did not respond to voltage select! Loading Environment from SPI Flash... SF: Detected s25fl512s_256k with page size 256 Bytes, erase size 256 KiB, total 64 MiB *** Warning - bad CRC, using default environment In: serial@02530c00 Out: serial@02530c00 Err: serial@02530c00 Net: Warning: netcp@4000000 using MAC address from ROM eth0: netcp@4000000 Hit any key to stop autoboot: 0 2 Found keystone-k2g-evm.dtb Running spiargs ... Booting from spi ... Running spiargs ... SF: Detected s25fl512s_256k with page size 256 Bytes, erase size 256 KiB, total 64 MiB device 0 offset 0x1b0000, size 0x800000 SF: 8388608 bytes @ 0x1b0000 Read: OK device 0 offset 0x160000, size 0x40000 SF: 262144 bytes @ 0x160000 Read: OK magic: 0xd00dfeed totalsize: 0x73a7 (29607) off_dt_struct: 0x38 off_dt_strings: 0x6acc off_mem_rsvmap: 0x28 version: 17 last_comp_version: 16 boot_cpuid_phys: 0x0 size_dt_strings: 0x8db size_dt_struct: 0x6a94 number mem_rsv: 0x0 Start Boot ## Flattened Device Tree blob at 88000000 Booting using the fdt blob at 0x88000000 Loading Device Tree to 8fff5000, end 8ffff3a6 ... OK Starting kernel ...
The printenv in u-boot shows the following result:
=> pri
addr_load_sec_bm=0x0c09c000
addr_mon=0x87000000
addr_non_sec_mon=0x0c097fc0
addr_secdb_key=0xc000000
addr_ubi=0x82000000
arch=arm
args_all=setenv bootargs console=ttyS0,115200n8 rootwait=1 mtdparts=spi1.0:1m(u-boot-spl)ro,-(misc);
args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype}
args_net=setenv bootargs ${bootargs} rootfstype=nfs root=/dev/nfs rw nfsroot=${serverip}:${nfs_root},${nfs_options} ip=dhcp
args_ramfs=setenv bootargs ${bootargs} rdinit=/sbin/init rw root=/dev/ram0 initrd=0x808080000,80M
args_ubi=setenv bootargs ${bootargs} rootfstype=ubifs root=ubi0:rootfs rootflags=sync rw ubi.mtd=ubifs,2048
baudrate=115200
board=ks2_evm
board_name=66AK2GG1
boot=mmc
boot_fdt=try
boot_fit=0
bootcmd=run findfdt; run spiargs; run spiboot;
bootdelay=2
bootdir=/boot
bootenvfile=uEnv.txt
bootfile=zImage
bootm_size=0x10000000
bootpart=0:2
bootscript=echo Running bootscript from mmc${mmcdev} ...; source ${loadaddr}
burn_ubi=nand erase.part ubifs; nand write ${addr_ubi} ubifs ${filesize}
burn_uboot_nand=nand erase 0 0x100000; nand write ${loadaddr} 0 ${filesize}
burn_uboot_spi=sf probe; sf erase 0 0x100000; sf write ${loadaddr} 0 ${filesize}
console=ttyO0,115200n8 earlyprintk
cpu=armv7
dev_pmmc=0
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_qspi=MLO raw 0x00000000 0x000B0000;u-boot.img raw 0x000B0000 0x000B0000;blob raw 0x00160000 0x00040000;skern raw 0x001A0000 0x00010000;kernel raw 0x001B0000 0x0800000;file-system raw 0x009B0000 0x2700000
dfu_alt_info_ram=MLO ram 0x80000000 0x00B0000;u-boot.img ram 0x800B0000 0x00B0000;blob ram 0x80160000 0x00040000;skern ram 0x801A0000 0x00010000;kernel ram 0x801B0000 0x0800000;file-system ram 0x809B0000 0x2700000
dfu_bufsiz=0x10000
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;
ethaddr=70:ff:76:1c:67:ed
fdt_addr_r=0x88000000
fdtaddr=0x88000000
fdtcontroladdr=fdeff738
fdtfile=undefined
findfdt=if test $board_name = 66AK2GGP; then echo 1 Found keystone-k2g-evm.dtb; setenv name_fdt keystone-k2g-evm.dtb; else if test $board_name = 66AK2GG1; then echo 2 Found keystone-k2g-evm.dtb; setenv name_fdt keystone-k2g-evm.dtb; else if test $board_name = 66AK2GIC; then echo 1 Found keystone-k2g-ice.dtb; setenv name_fdt keystone-k2g-ice.dtb; else if test $name_fdt = undefined; then echo WARNING: Could not determine device tree to use;fi;fi;fi;fi; setenv fdtfile ${name_fdt}
finduuid=part uuid mmc ${bootpart} uuid
fit_bootfile=fitImage
fit_loadaddr=0x90000000
get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${name_fdt}
get_fdt_net=dhcp ${fdtaddr} ${tftp_root}/${name_fdt}
get_fdt_nfs=nfs ${fdtaddr} ${nfs_root}/boot/${name_fdt}
get_fdt_ramfs=dhcp ${fdtaddr} ${tftp_root}/${name_fdt}
get_fdt_ubi=ubifsload ${fdtaddr} ${bootdir}/${name_fdt}
get_fit_mmc=load mmc ${bootpart} ${fit_loadaddr} ${bootdir}/${fit_bootfile}
get_fit_net=dhcp ${fit_loadaddr} ${tftp_root}/${fit_bootfile}
get_fit_nfs=nfs ${fit_loadaddr} ${nfs_root}/boot/${fit_bootfile}
get_fit_ramfs=dhcp ${fit_loadaddr} ${tftp_root}/${fit_bootfile}
get_fit_ubi=ubifsload ${fit_loadaddr} ${bootdir}/${fit_bootfile}
get_fs_ramfs=dhcp ${rdaddr} ${tftp_root}/${name_fs}
get_kern_mmc=load mmc ${bootpart} ${loadaddr} ${bootdir}/${name_kern}
get_kern_net=dhcp ${loadaddr} ${tftp_root}/${name_kern}
get_kern_nfs=nfs ${loadaddr} ${nfs_root}/boot/${name_kern}
get_kern_ramfs=dhcp ${loadaddr} ${tftp_root}/${name_kern}
get_kern_ubi=ubifsload ${loadaddr} ${bootdir}/${name_kern}
get_mon_mmc=load mmc ${bootpart} ${addr_mon} ${bootdir}/${name_mon}
get_mon_net=dhcp ${addr_mon} ${tftp_root}/${name_mon}
get_mon_nfs=nfs ${addr_mon} ${nfs_root}/boot/${name_mon}
get_mon_ramfs=dhcp ${addr_mon} ${tftp_root}/${name_mon}
get_mon_ubi=ubifsload ${addr_mon} ${bootdir}/${name_mon}
get_overlaystring=for overlay in $overlay_files;do;setenv overlaystring ${overlaystring}'#'${overlay};done;
get_pmmc_mmc=load mmc ${bootpart} ${loadaddr} ${bootdir}/${name_pmmc}
get_pmmc_net=dhcp ${loadaddr} ${tftp_root}/${name_pmmc}
get_pmmc_nfs=nfs ${loadaddr} ${nfs_root}/boot/${name_pmmc}
get_pmmc_ramfs=run get_pmmc_net
get_pmmc_ubi=ubifsload ${loadaddr} ${bootdir}/${name_pmmc}
get_ubi_net=dhcp ${addr_ubi} ${tftp_root}/${name_ubi}
get_ubi_nfs=nfs ${addr_ubi} ${nfs_root}/boot/${name_ubi}
get_uboot_net=dhcp ${loadaddr} ${tftp_root}/${name_uboot}
get_uboot_nfs=nfs ${loadaddr} ${nfs_root}/boot/${name_uboot}
importbootenv=echo Importing environment from mmc${mmcdev} ...; env import -t ${loadaddr} ${filesize}
init_fw_rd_mmc=load mmc ${bootpart} ${rdaddr} ${bootdir}/${name_fw_rd}; run set_rd_spec
init_fw_rd_net=dhcp ${rdaddr} ${tftp_root}/${name_fw_rd}; run set_rd_spec
init_fw_rd_nfs=nfs ${rdaddr} ${nfs_root}/boot/${name_fw_rd}; run set_rd_spec
init_fw_rd_ramfs=setenv rd_spec -
init_fw_rd_ubi=ubifsload ${rdaddr} ${bootdir}/${name_fw_rd}; run set_rd_spec
init_mmc=run args_all args_mmc
init_net=run args_all args_net
init_nfs=setenv autoload no; dhcp; run args_all args_net
init_ramfs=run args_all args_ramfs get_fs_ramfs
init_ubi=run args_all args_ubi; ubi part ubifs; ubifsmount ubi:rootfs;
kernel_addr_r=0x82000000
loadaddr=0x82000000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}
loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr
loadfdt=load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadfit=run args_mmc; run run_fit;
loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
mem_lpae=1
mmcboot=mmc dev ${mmcdev}; setenv devnum ${mmcdev}; setenv devtype mmc; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadimage; then if test ${boot_fit} -eq 1; then run loadfit; else run mmcloados;fi;fi;fi;
mmcdev=0
mmcloados=run args_mmc; 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
mtdparts=mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)
name_fs=arago-base-tisdk-image-k2g-evm.cpio
name_fw_rd=k2-fw-initrd.cpio.gz
name_kern=zImage
name_mon=skern-k2g.bin
name_ubi=k2g-evm-ubifs.ubi
name_uboot=u-boot-spi-k2g-evm.gph
nfs_options=v3,tcp,rsize=4096,wsize=4096
nfs_root=/export
no_post=1
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
rd_spec=-
rdaddr=0x88080000
run_fit=bootm ${fit_loadaddr}#${fdtfile}${overlaystring}
run_kern=bootz ${loadaddr} ${rd_spec} ${fdtaddr}
run_mon=mon_install ${addr_mon}
run_mon_hs=mon_install ${addr_non_sec_mon} ${addr_load_sec_bm}
run_pmmc=rproc init; rproc list; rproc load ${dev_pmmc} ${loadaddr} 0x${filesize}; rproc start ${dev_pmmc}
scriptaddr=0x80000000
set_name_pmmc=setenv name_pmmc ti-sci-firmware-${soc_variant}.bin
set_rd_spec=setenv rd_spec ${rdaddr}:${filesize}
soc=keystone
soc_variant=k2g
spiargs=echo Running 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}; sf read ${fdtaddr} ${spifdtaddr} ${spifdtsize}; fdt addr ${fdtaddr}; fdt header; echo Start Boot; bootz ${loadaddr} - ${fdtaddr}
spibusno=4
spifdtaddr=0x160000
spifdtsize=0x40000
spiimgsize=0x800000
spiroot=/dev/mtdblock5 rw
spirootfstype=jffs2
spisrcaddr=0x1b0000
stderr=serial@02530c00
stdin=serial@02530c00
stdout=serial@02530c00
tftp_root=/
update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile}
vendor=ti
ver=U-Boot 2019.01-g171fca6551-dirty (Mar 06 2020 - 03:00:28 -0800)
Environment size: 8462/262139 bytes
In keystone-k2g-evm.dts I modified the QSPI partitions to adapt my needs and I generated the relative .dtb:
&qspi {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&qspi_pins>;
cdns,rclk-en;
flash0: m25p80@0 {
compatible = "s25fl512s", "jedec,spi-nor";
reg = <0>;
spi-tx-bus-width = <1>;
spi-rx-bus-width = <4>;
spi-max-frequency = <96000000>;
#address-cells = <1>;
#size-cells = <1>;
cdns,read-delay = <5>;
cdns,tshsl-ns = <500>;
cdns,tsd2d-ns = <500>;
cdns,tchsh-ns = <119>;
cdns,tslch-ns = <119>;
partition@0 {
label = "QSPI.MLO";
reg = <0x00000000 0x000B0000>;
};
partition@1 {
label = "QSPI.u-boot-img";
reg = <0x000B0000 0x000B0000>;
};
partition@2 {
label = "QSPI.blob";
reg = <0x00160000 0x00040000>;
};
partition@3 {
label = "QSPI.skern";
reg = <0x001A0000 0x00010000>;
};
partition@4 {
label = "QSPI.kernel";
reg = <0x001B0000 0x0800000>;
};
partition@5 {
label = "QSPI.file-system";
reg = <0x009B0000 0x2700000>;
};
};
};
I read that this kind of problem could depend by wrong UART definition (ttyOX or ttySX) or dtb mismatch. How can I do in order to find the problem and go on with boot?
To enable qspi boot I modified k2g_evm.h where #define CONFIG_BOOTCOMMAND executes "run findfdt;" "run spiargs;" "run spiboot;"; the details are in u-boot printenv above. Are there other actions to do beyond my modification?
Regards
Graziano