Ticket Name: TDA2SA: tda2xx uboot can't load kernel image Query Text: Part Number: TDA2SA Hi, I am working on my custom board tda2xx and try booting from emmc. I refer to http://processors.wiki.ti.com/index.php?title=Processor_SDK_Linux_Automotive_Software_Developers_Guide#Using_eMMC_Boot and do all should be setting. After switch boot mode to emmc boot, I got the error message that can't get the kernel image: Booting from eMMC ... Wrong Image Format for bootm command ERROR: can't get kernel image! => There some problem I had found: 1. It can't boot uboot (no logs) often. I often reset power many times to get success boot uboot. 2. My custom board PMICs are not connected to SOC and it can't fix right now. 3. The bootpart have changed to 0:2 not 1:2 I had set in uboot. Is it right? Please help to boot from emmc. Thanks. Terry Responses: I use VSDK3.07. attach boot log 7206.uboot.txt U-Boot SPL 2016.05 (Oct 21 2019 - 21:04:35) DRA752-GP ES2.0 Trying to boot from MMC2_2 reading single-stage-boot.dtb spl_load_image_fat_os: error reading image single-stage-boot.dtb, err - -1 reading u-boot.img reading u-boot.img U-Boot 2016.05 (Oct 21 2019 - 21:04:35 +0800) CPU : DRA752-GP ES2.0 Board: D3 TDA2x I2C: ready DRAM: i2c_read (addr phase): pads on bus probably not configured (status=0x10) 2 GiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! ** Bad device mmc 0 ** Using default environment i2c_write: pads on bus probably not configured (status=0x10) i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not turn CLK32KGAUDIO on: err = 2 i2c_read (addr phase): pads on bus probably not configured (status=0x10) Unable to read Board-ID i2c_read (addr phase): pads on bus probably not configured (status=0x10) i2c_read (addr phase): pads on bus probably not configured (status=0x10) Unable to read Baseboard-ID i2c_probe: pads on bus probably not configured (status=0x10) Unable to read Expansion-ID SCSI: 0 device not found ERROR: scsi device not found at drivers/block/disk-uclass.c:43/scsi_init() Net: not set. Validating first E-fuse MAC i2c_read (addr phase): pads on bus probably not configured (status=0x10) i2c_read (addr phase): pads on bus probably not configured (status=0x10) Could not get PHY for cpsw: addr 2 cpsw Hit any key to stop autoboot: 0 i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! Tuning failed, dropping HS200 mode. dropping DDR52 mode. switch to partitions #0, OK mmc1(part 0) is current device Tuning failed, dropping HS200 mode. dropping DDR52 mode. mmc - MMC sub system Usage: mmc info - display info of the current MMC device mmc read addr blk# cnt mmc write addr blk# cnt mmc erase blk# cnt mmc rescan mmc part - lists available partition on current mmc device mmc dev [dev] [part] - show or set current mmc device [partition] mmc list - lists available devices mmc hwpartition [args...] - does hardware partitioning arguments (sizes in 512-byte blocks): [user [enh start cnt] [wrrel {on|off}]] - sets user data area attributes [gp1|gp2|gp3|gp4 cnt [enh] [wrrel {on|off}]] - general purpose partition [check|set|complete] - mode, complete set partitioning completed WARNING: Partitioning is a write-once setting once it is set to complete. Power cycling is required to initialize partitions after set to complete. mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode - Set the BOOT_BUS_WIDTH field of the specified device mmc bootpart-resize - Change sizes of boot and RPMB partitions of specified device mmc partconf dev boot_ack boot_partition partition_access - Change the bits of the PARTITION_CONFIG field of the specified device mmc rst-function dev value - Change the RST_n_FUNCTION field of the specified device WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values. mmc setdsr - set DSR register value mmc - MMC sub system Usage: mmc info - display info of the current MMC device mmc read addr blk# cnt mmc write addr blk# cnt mmc erase blk# cnt mmc rescan mmc part - lists available partition on current mmc device mmc dev [dev] [part] - show or set current mmc device [partition] mmc list - lists available devices mmc hwpartition [args...] - does hardware partitioning arguments (sizes in 512-byte blocks): [user [enh start cnt] [wrrel {on|off}]] - sets user data area attributes [gp1|gp2|gp3|gp4 cnt [enh] [wrrel {on|off}]] - general purpose partition [check|set|complete] - mode, complete set partitioning completed WARNING: Partitioning is a write-once setting once it is set to complete. Power cycling is required to initialize partitions after set to complete. mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode - Set the BOOT_BUS_WIDTH field of the specified device mmc bootpart-resize - Change sizes of boot and RPMB partitions of specified device mmc partconf dev boot_ack boot_partition partition_access - Change the bits of the PARTITION_CONFIG field of the specified device mmc rst-function dev value - Change the RST_n_FUNCTION field of the specified device WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values. mmc setdsr - set DSR register value Booting from eMMC ... Wrong Image Format for bootm command ERROR: can't get kernel image! => printenv arch=arm args_fit=setenv bootargs console=${console} args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype} baseboard_name=unknown_baseboard baseboard_rev=unknown baudrate=115200 board=tda2x board_findfdt=if test $board_name = tda2eco; then setenv fdtfile d3-tda2ex-fpd4ch.dtb; fi;if test $board_name = tda2eco_tda2x; then setenv fdtfile d3-tda2x-fpd4ch.dtb; fi;if test $baseboard_name = tda2xde_fpd8ch; then setenv fdtfile d3-tda2x-fpd8ch.dtb; fi;if test $fdtfile = undefined; then setenv fdtfile d3-tda2eco-som.dtb; fi; board_name=unknown_board board_rev=unknown boot_fdt=try boot_fit=0 boot_os=0 boot_part=9 bootargs=androidboot.serialno=0400e0174aba8802 bootcmd=if test ${dofastboot} -eq 1; then echo Boot fastboot requested, resetting dofastboot ...;setenv dofastboot 0; saveenv;echo Booting into fastboot ...; fastboot 0; fi;if test ${boot_fit} -eq 1; then run update_to_fit;fi;run findfdt; run envboot; run mmcboot;run emmc_android_boot; 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 dofastboot=0 emmc_android_boot=setenv eval_bootargs setenv bootargs $bootargs; run eval_bootargs; setenv mmcdev 1; setenv fdt_part 3; setenv boot_part 9; if test $reboot_image = recovery; then setenv boot_part 8; setenv reboot_image boot; saveenv; fi;setenv machid fe6; mmc dev $mmcdev; mmc rescan; part start mmc ${mmcdev} ${fdt_part} fdt_start; part size mmc ${mmcdev} ${fdt_part} fdt_size; part start mmc ${mmcdev} ${boot_part} boot_start; part size mmc ${mmcdev} ${boot_part} boot_size; mmc read ${fdtaddr} ${fdt_start} ${fdt_size}; mmc read ${loadaddr} ${boot_start} ${boot_size}; echo Booting from eMMC ...; bootm $loadaddr $loadaddr $fdtaddr; 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=90:9a:77:8d:af:a5 ethact=cpsw ethaddr=90:9a:77:8d:af:a4 eval_bootargs=setenv bootargs androidboot.serialno=${serial#} expansion_name=unknown_expansion fdt_addr_r=0x88000000 fdt_part=3 fdtaddr=0x88000000 fdtfile=d3-tda2eco-som.dtb findfdt=if test $board_name = omap5_uevm; then setenv fdtfile omap5-uevm.dtb; fi; if test $board_name = dra7xx; then setenv fdtfile dra7-evm.dtb; fi;if test $board_name = dra72x-revc; then setenv fdtfile dra72-evm-revc.dtb; fi;if test $board_name = dra72x; then setenv fdtfile dra72-evm.dtb; fi;if test $board_name = dra71x; then setenv fdtfile dra71-evm.dtb; fi;if test $board_name = dra76x; then setenv fdtfile dra76-evm.dtb; fi;if test $board_name = beagle_x15; then setenv fdtfile am57xx-beagle-x15.dtb; fi;if test $board_name = beagle_x15_revb1; then setenv fdtfile am57xx-beagle-x15-revb1.dtb; fi;if test $board_name = am57xx_evm; then setenv fdtfile am57xx-evm.dtb; fi;if test $board_name = am57xx_evm_reva3; then setenv fdtfile am57xx-evm-reva3.dtb; fi;if test $board_name = am572x_idk && test $idk_lcd = no; then setenv fdtfile am572x-idk.dtb; fi;if test $board_name = am572x_idk && test $idk_lcd = osd101t2045; then setenv fdtfile am572x-idk-lcd-osd.dtb; fi;if test $board_name = am572x_idk && test $idk_lcd = osd101t2587; then setenv fdtfile am572x-idk-lcd-osd101t2587.dtb; fi;if test $board_name = am571x_idk && test $idk_lcd = no; then setenv fdtfile am571x-idk.dtb; fi;if test $board_name = am571x_idk && test $idk_lcd = osd101t2045; then setenv fdtfile am571x-idk-lcd-osd.dtb; fi;if test $board_name = am571x_idk && test $idk_lcd = osd101t2587; then setenv fdtfile am571x-idk-lcd-osd101t2587.dtb; fi;if test $board_findfdt != undefined; then run board_findfdt; fi;if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi; finduuid=part uuid mmc ${bootpart} uuid fit_bootfile=fitImage.itb fit_loadaddr=0x88000000 importbootenv=echo Importing environment from mmc${mmcdev} ...; env import -t ${loadaddr} ${filesize} kernel_addr_r=0x82000000 loadaddr=0x82000000 loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile} loadbootscript=fatload mmc ${mmcdev} ${loadaddr} boot.scr loadfdt=load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile} loadfit=run args_fit; bootm ${loadaddr}#${fdtfile}; loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile} machid=fe6 mmcboot=if mmc dev ${mmcdev}; then setenv devtype mmc; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadimage; then run loadfdt; echo Booting from mmc${mmcdev} ...; run args_mmc; bootz ${loadaddr} - ${fdtaddr}; fi; fi; fi; mmcdev=1 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 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=rootfs,start=2MiB,size=-,uuid=${uuid_gpt_rootfs} pxefile_addr_r=0x80100000 ramdisk_addr_r=0x88080000 rdaddr=0x88080000 reboot_image=boot rootpath=/export/rootfs scriptaddr=0x80000000 serial#=0400e0174aba8802 soc=omap5 static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off stderr=serial stdin=serial stdout=serial update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile} usbtty=cdc_acm vendor=d3 ver=U-Boot 2016.05 (Oct 21 2019 - 21:04:35 +0800) vram=16M Environment size: 6097/65532 bytes => Hi, Before I answer the question. Have you got the Processor SDK Linux booting from the emmc device? Have you ported the u-boot for your custom board? Did you modify the boot command for the right device that is enumerated as emmc? I see lot of i2c errors, mmc errors, etc. You need to fix them first before going ahead. Regards, Nikhil D Hi Nikhil D, Anser your question below: Have you got the Processor SDK Linux booting from the emmc device? NO. I use PROCESSOR-SDK-VISION 3.07 and it can boot linux from SD card on my custom board after some code modified. We want to boot from emmc so that would be a product. I refer to some threads : https://e2e.ti.com/support/processors/f/791/t/802605?tisearch=e2e-sitesearch&keymatch=tda2%2525252525252520linux%2525252525252520emmc https://e2e.ti.com/support/processors/f/791/t/795035?tisearch=e2e-sitesearch&keymatch=dra7-evm-infoadas.dtb but not success yet. Have you ported the u-boot for your custom board? NO. For SD card can boot the linux, I don't look into u-boot yet. Did you modify the boot command for the right device that is enumerated as emmc? I had modify boot command.I think it is right. Can you help to check it? uenv.txt: fdtfile=d3-tda2x-fpd8ch.dtb args_mmc=part uuid mmc 1:2 uuid; setenv bootargs "console=ttyO0,115200n8 vram=16M root=PARTUUID=${uuid} rw rootwait rootfs=/dev/mmcblk1p2 ip=none mem=512M cma=64M" mmc: => mmc list OMAP SD/MMC: 0 OMAP SD/MMC: 1 (eMMC) I see lot of i2c errors, mmc errors, etc. You need to fix them first before going ahead. Some i2c error is to read the id, some error is to control PMIC. I believe the PMIC may lead some problem because PMICs are not connected to SOC. If PMIC would be a issue, how to skip that? When use SD card boot mode, kernel will boot up and mount the emmc partition. It can read/write emmc. I will check i2c error message and fix it. Regards, Terry Hi, Can you please ensure that the two partitions can be enumerated using the u-boot Then, stop at the u-boot prompt, change the environment variables and try to do a boot from emmc. Regards, Nikhil D Hi Nikhil D, 1. How to ensure the two partitions can be enumerated ? When I use the "mmc part" command at uboot prompt, it shows: => mmc part Partition Map for MMC device 1 -- Partition Type: DOS Part Start Sector Num Sectors UUID Type 1 63 144522 00000000-01 0c Boot 2 144585 7405965 00000000-02 83 => Then I change to SD boot, and in linux use fdisk -l root@dra7xx-evm:~# fdisk -l Disk /dev/mmcblk0: 7867 MB, 7867465728 bytes 4 heads, 16 sectors/track, 240096 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 33 8224 262144 c Win95 FAT32 (LBA) Partition 1 does not end on cylinder boundary /dev/mmcblk0p2 8225 240096 7419904 83 Linux Partition 2 does not end on cylinder boundary Disk /dev/mmcblk1: 3867 MB, 3867148288 bytes 255 heads, 63 sectors/track, 470 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/mmcblk1p1 * 1 9 72261 c Win95 FAT32 (LBA) /dev/mmcblk1p2 10 470 3702982+ 83 Linux Disk /dev/mmcblk1boot1: 2 MB, 2097152 bytes 4 heads, 16 sectors/track, 64 cylinders Units = cylinders of 64 * 512 = 32768 bytes Disk /dev/mmcblk1boot1 doesn't contain a valid partition table Disk /dev/mmcblk1boot0: 2 MB, 2097152 bytes 4 heads, 16 sectors/track, 64 cylinders Units = cylinders of 64 * 512 = 32768 bytes Disk /dev/mmcblk1boot0 doesn't contain a valid partition table root@dra7xx-evm:~# /dev/mmcblk1 is emmc. The number displyed in uboot and in linux are not the same. 2. I reset uboot env variables follow: => env default -a ## Resetting to default environment => setenv bootpart 1:2 => setenv mmcdev 1 => saveenv Saving Environment to FAT... i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! ** Bad device mmc 0 ** => It still fail to load kernel. Regards, Terry Hi Terry, mmc list shows the different mmc devices. mmc dev N selects the device to be used. Nikhil D Hi Nikhil D, mmc commands show below: => mmc list OMAP SD/MMC: 0 OMAP SD/MMC: 1 (eMMC) => mmc dev 1 Tuning failed, dropping HS200 mode. dropping DDR52 mode. switch to partitions #0, OK mmc1(part 0) is current device => mmc part Partition Map for MMC device 1 -- Partition Type: DOS Part Start Sector Num Sectors UUID Type 1 63 144522 00000000-01 0c Boot 2 144585 7405965 00000000-02 83 => Full boot log attached 4774.uboot.txt U-Boot SPL 2016.05 (Oct 23 2019 - 18:08:17) DRA752-GP ES2.0 Trying to boot from MMC2_2 reading single-stage-boot.dtb spl_load_image_fat_os: error reading image single-stage-boot.dtb, err - -1 reading u-boot.img reading u-boot.img U-Boot 2016.05 (Oct 23 2019 - 18:08:17 +0800) CPU : DRA752-GP ES2.0 Board: D3 TDA2x I2C: ready DRAM: i2c_read (addr phase): pads on bus probably not configured (status=0x10) 2 GiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! ** Bad device mmc 0 ** Using default environment i2c_write: pads on bus probably not configured (status=0x10) i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not turn CLK32KGAUDIO on: err = 2 i2c_read (addr phase): pads on bus probably not configured (status=0x10) Unable to read Board-ID i2c_read (addr phase): pads on bus probably not configured (status=0x10) i2c_read (addr phase): pads on bus probably not configured (status=0x10) Unable to read Baseboard-ID i2c_probe: pads on bus probably not configured (status=0x10) Unable to read Expansion-ID SCSI: 0 device not found ERROR: scsi device not found at drivers/block/disk-uclass.c:43/scsi_init() Net: not set. Validating first E-fuse MAC i2c_read (addr phase): pads on bus probably not configured (status=0x10) i2c_read (addr phase): pads on bus probably not configured (status=0x10) Could not get PHY for cpsw: addr 2 cpsw Hit any key to stop autoboot: 0 i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! i2c_write: pads on bus probably not configured (status=0x10) tps65903x: could not set LDO1 voltage. Card did not respond to voltage select! Tuning failed, dropping HS200 mode. dropping DDR52 mode. switch to partitions #0, OK mmc1(part 0) is current device Tuning failed, dropping HS200 mode. dropping DDR52 mode. mmc - MMC sub system Usage: mmc info - display info of the current MMC device mmc read addr blk# cnt mmc write addr blk# cnt mmc erase blk# cnt mmc rescan mmc part - lists available partition on current mmc device mmc dev [dev] [part] - show or set current mmc device [partition] mmc list - lists available devices mmc hwpartition [args...] - does hardware partitioning arguments (sizes in 512-byte blocks): [user [enh start cnt] [wrrel {on|off}]] - sets user data area attributes [gp1|gp2|gp3|gp4 cnt [enh] [wrrel {on|off}]] - general purpose partition [check|set|complete] - mode, complete set partitioning completed WARNING: Partitioning is a write-once setting once it is set to complete. Power cycling is required to initialize partitions after set to complete. mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode - Set the BOOT_BUS_WIDTH field of the specified device mmc bootpart-resize - Change sizes of boot and RPMB partitions of specified device mmc partconf dev boot_ack boot_partition partition_access - Change the bits of the PARTITION_CONFIG field of the specified device mmc rst-function dev value - Change the RST_n_FUNCTION field of the specified device WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values. mmc setdsr - set DSR register value mmc - MMC sub system Usage: mmc info - display info of the current MMC device mmc read addr blk# cnt mmc write addr blk# cnt mmc erase blk# cnt mmc rescan mmc part - lists available partition on current mmc device mmc dev [dev] [part] - show or set current mmc device [partition] mmc list - lists available devices mmc hwpartition [args...] - does hardware partitioning arguments (sizes in 512-byte blocks): [user [enh start cnt] [wrrel {on|off}]] - sets user data area attributes [gp1|gp2|gp3|gp4 cnt [enh] [wrrel {on|off}]] - general purpose partition [check|set|complete] - mode, complete set partitioning completed WARNING: Partitioning is a write-once setting once it is set to complete. Power cycling is required to initialize partitions after set to complete. mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode - Set the BOOT_BUS_WIDTH field of the specified device mmc bootpart-resize - Change sizes of boot and RPMB partitions of specified device mmc partconf dev boot_ack boot_partition partition_access - Change the bits of the PARTITION_CONFIG field of the specified device mmc rst-function dev value - Change the RST_n_FUNCTION field of the specified device WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values. mmc setdsr - set DSR register value Booting from eMMC ... Wrong Image Format for bootm command ERROR: can't get kernel image! => mmc list OMAP SD/MMC: 0 OMAP SD/MMC: 1 (eMMC) => mmc dev 1 Tuning failed, dropping HS200 mode. dropping DDR52 mode. switch to partitions #0, OK mmc1(part 0) is current device => mmc part Partition Map for MMC device 1 -- Partition Type: DOS Part Start Sector Num Sectors UUID Type 1 63 144522 00000000-01 0c Boot 2 144585 7405965 00000000-02 83 => Hi Nikhil D, Can you advise where might be the cause? I don't resolve it yet. Thank you. Terry One option I can suggest you is to debug the whole cmd execution all the way. Use printenv bootcmd It will display a list of commands that u-boot shell would run. Follow the links and understand what exactly is happening. You can manually run commands in the variables, e.g. run args_mmc At every step, check if the command did everything right. Focus especially on commands involving mmc This will help you root cause the issue to exact command failure. Regards, NIkhil D