Espressobin booting (Was: Re: [PATCH 1/5] arm: mvebu: Espressobin: Move env load addresses)

Andre Heider a.heider at
Wed Aug 26 11:57:01 CEST 2020


On 26/08/2020 10:31, Pali Rohár wrote:
> Hello!
> On Wednesday 26 August 2020 09:30:11 Andre Heider wrote:
>> Pali,
>> thank you for all these espressobin fixes, much appreciated!
>> This isn't directly related to the patch I'm replying to, but since you seem
>> to be syncing down- with upstream:
>> Upstream u-boot doesn't detect my sata ssd ("SATA link 0 timeout"), nor is
> Could you try following Marvell SATA/AHCI patch?

will do that later and report my findings, thanks!

>> it able to run debian's kernel (hangs after "Starting kernel"). Both work
>> with armbian's downstream flash-image.bin.
>> I'm using the espressobin v1 with these patches from the list on top of
> Do you really have espressobin v1? I saw hw schemas and diagrams only
> for V3, V4, V5 and V7. And I tested only V5 as I do not have any other
> revisions.

Oh sorry, I meant the first public version, the one with ddr3 memory. 
Which would be the V5 schematics iirc.

>> 2020.07:
>> arm64: a37xx: pci: Depends on DM_GPIO
>> arm: mvebu: Espressobin: Update README.marvell file
>> arm: mvebu: Espressobin: Define console env
>> arm: mvebu: Espressobin: Define fdt_addr and kernel_addr env aliases
>> arm: mvebu: Espressobin: Change default loadaddr
>> arm: mvebu: Espressobin: Move env load addresses
>> arm: mvebu: Espressobin: Setup MTD partitions when booting kernel
>> arm: mvebu: Espressobin: Make SPI env offset compatible with Marvell's
>> U-Boot
>> arm: dts: a37x0: enable sd card support on espressobin
>> mmc: xenon: set signal voltage and max base clock
>> arm64: a37xx: pci: Assert PERST# signal when unloading driver
>> arm64: a37xx: pci: Make PCIe Reset GPIO DT compatible with Linux kernel DT
>> arm64: dts: armada-3720-espressobin: fix COMPHY nodes
>> arm: mvebu: Espressobin: Enable CONFIG_MVNETA
>> arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan
>> ports
>> Bootlog:
>> TIM-1.0
>> WTMI-devel-18.12.1-
>> WTMI: system early-init
>> CPU VDD voltage default value: 1.108V
>> NOTICE:  Booting Trusted Firmware
>> NOTICE:  BL1: v2.3(): (Marvell-devel-18.12.0)
>> NOTICE:  BL1: Built : 06:12:46, Aug 26 2020
>> NOTICE:  BL1: Booting BL2
>> NOTICE:  BL2: v2.3(): (Marvell-devel-18.12.0)
>> NOTICE:  BL2: Built : 06:12:46, Aug 26 2020
>> NOTICE:  BL1: Booting BL31
>> NOTICE:  BL31: v2.3(): (Marvell-devel-18.12.0)
>> NOTICE:  BL31: Built : 06:12:46
>> U-Boot 2020.07 (Aug 26 2020 - 06:12:46 +0000)
>> DRAM:  1 GiB
>> Comphy-0: USB3_HOST0    5 Gbps
>> Comphy-1: PEX0          2.5 Gbps
>> Comphy-2: SATA0         5 Gbps
>> SATA link 0 timeout.
>> AHCI 0001.0300 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
>> flags: ncq led only pmp fbss pio slum part sxs
>> PCIE-0: Link up
>> MMC:   sdhci at d0000: 0
>> Loading Environment from SPI Flash... SF: Detected w25q32dw with page size
>> 256 Bytes, erase size 4 KiB, total 4 MiB
>> OK
>> Model: Marvell Armada 3720 Community Board ESPRESSOBin
>> Net:   eth0: neta at 30000
>> Hit any key to stop autoboot:  0
>> MMC Device 1 not found
>> no mmc device at slot 1
>> switch to partitions #0, OK
>> mmc0 is current device
>> Scanning mmc 0:1...
>> Found U-Boot script /boot.scr
>> 2250 bytes read in 12 ms (182.6 KiB/s)
>> ## Executing script at 06d00000
>> 22079344 bytes read in 1219 ms (17.3 MiB/s)
>> 10671 bytes read in 24 ms (433.6 KiB/s)
>> 27689238 bytes read in 1555 ms (17 MiB/s)
>> Booting Debian 5.7.0-0.bpo.2-arm64 from mmc 0:1...
>> ## Flattened Device Tree blob at 06f00000
>>     Booting using the fdt blob at 0x6f00000
>>     Loading Ramdisk to 3e0be000, end 3fb26116 ... OK
>>     Loading Device Tree to 000000003e0b8000, end 000000003e0bd9ae ... OK
>> Starting kernel ...
>> <hangs here>
> Can you write which commands you have run to load & boot kernel?
> What are command line arguments for kernel?
> Also have you reset env variables to default?

Yeah, I do reset the full env when switching between the flash images.

For the upstream version:
env default -a
setenv ethaddr f0:ad:4e:03:86:cd
setenv eth1addr f0:ad:4e:03:86:cd
setenv eth2addr f0:ad:4e:03:86:cd
setenv serverip
setenv ipaddr

For the downstream version:
env default -a
env delete console
setenv fdt_addr_r 0x6000000
setenv kernel_addr_r 0x7000000
setenv ramdisk_addr_r 0x1100000
setenv ethaddr f0:ad:4e:03:86:cd
setenv eth1addr f0:ad:4e:03:86:cd
setenv eth2addr f0:ad:4e:03:86:cd
setenv serverip
setenv ipaddr
setenv fdt_addr 0x6000000
setenv kernel_addr 0x7000000
setenv loadaddr 0x8000000
setenv initrd_size 0x2000000
setenv initrd_addr 0x1100000
setenv scriptaddr 0x6d00000
setenv initrd_image uInitrd
setenv image_name Image
setenv boot_targets 'mmc0 usb sata mmc1'
setenv boot_prefixes '/ /boot/'
setenv bootcmd_mmc0 'setenv devnum 0; setenv devtype mmc; run 
setenv bootcmd_mmc1 'setenv devnum 1; setenv devtype mmc; run 
setenv bootcmd_sata 'setenv devnum 0; scsi scan; scsi dev 0; setenv 
devtype scsi; run scan_dev_for_boot;'
setenv bootcmd_usb 'setenv devnum 0; usb start;setenv devtype usb; run 
setenv bootcmd 'for target in ${boot_targets}; do run bootcmd_${target}; 
setenv scan_dev_for_boot 'for prefix in ${boot_prefixes}; do echo 
${prefix};run boot_a_script; done'
setenv boot_a_script 'ext4load ${devtype} ${devnum}:1 ${scriptaddr} 
${prefix}boot.scr;source ${scriptaddr};'

Debian's boot.scr relies on u-boot's distro boot. Downstream still fails 
to enable it (even managed to break my patch to enable it...), so most 
of my env is to make it compatible again so I can use an unmodified 

Debian's script is rather boring then:

$ strings /boot/boot.scr
boot script
# flash-kernel: bootscr.uboot-generic
# Bootscript using the new unified bootcmd handling
# Expects to be called with the following environment variables set:
#  devtype              e.g. mmc/scsi etc
#  devnum               The device number of the given type
#  bootpart             The partition containing the boot files
#  distro_bootpart      The partition containing the boot files
#                       (introduced in u-boot mainline 2016.01)
#  prefix               Prefix within the boot partiion to the boot files
#  kernel_addr_r        Address to load the kernel to
#  fdt_addr_r           Address to load the FDT to
#  ramdisk_addr_r       Address to load the initrd to.
# The uboot must support the booti and generic filesystem load commands.
if test -n "${console}"; then
   setenv bootargs "${bootargs} console=${console}"
setenv bootargs  ${bootargs} root=LABEL=espresso-root
if test -z "${fk_kvers}"; then
    setenv fk_kvers '5.7.0-0.bpo.2-arm64'
# These two blocks should be the same apart from the use of
# ${fk_kvers} in the first, the syntax supported by u-boot does not
# lend itself to removing this duplication.
if test -n "${fdtfile}"; then
    setenv fdtpath dtbs/${fk_kvers}/${fdtfile}
    setenv fdtpath dtb-${fk_kvers}
if test -z "${distro_bootpart}"; then
   setenv partition ${bootpart}
   setenv partition ${distro_bootpart}
load ${devtype} ${devnum}:${partition} ${kernel_addr_r} 
${prefix}vmlinuz-${fk_kvers} \
&& load ${devtype} ${devnum}:${partition} ${fdt_addr_r} 
${prefix}${fdtpath} \
&& load ${devtype} ${devnum}:${partition} ${ramdisk_addr_r} 
${prefix}initrd.img-${fk_kvers} \
&& echo "Booting Debian ${fk_kvers} from ${devtype} 
${devnum}:${partition}..." \
&& booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}
load ${devtype} ${devnum}:${partition} ${kernel_addr_r} ${prefix}vmlinuz \
&& load ${devtype} ${devnum}:${partition} ${fdt_addr_r} ${prefix}dtb \
&& load ${devtype} ${devnum}:${partition} ${ramdisk_addr_r} 
${prefix}initrd.img \
&& echo "Booting Debian from ${devtype} ${devnum}:${partition}..." \
&& booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}


More information about the U-Boot mailing list