[U-Boot] A80 (CubieBoard4) u-boot - what to inject in boot0 area?

Konrad Rzeszutek Wilk konrad at kernel.org
Wed Jul 19 15:03:51 UTC 2017


On Tue, Jul 18, 2017 at 11:22:00AM +0800, Chen-Yu Tsai wrote:
> "Hi,
> 
> On Tue, Jul 18, 2017 at 10:40 AM, Konrad Rzeszutek Wilk
> <konrad at kernel.org> wrote:
> > Hey,
> >
> > I am trying to install an U-boot from the upstream repo as it looks to have most (if not all?)
> > of the features needed for the A80 board (Cubieboard4).
> >
> > I've built the uboot just fine (using the default ./configs/Cubieboard4_defconfig)
> > ..
> > ./tools/mkimage -A arm -T firmware -C none -O u-boot -a 0x2a000000 -e 0 -n "U-Boot 2017.07-00217-ge14b116 for sunxi board" -d u-boot.bin u-boot.img
> > Image Name:   U-Boot 2017.07-00217-ge14b116 fo
> > Created:      Wed Jul 12 22:11:53 2017
> > Image Type:   ARM U-Boot Firmware (uncompressed)
> > Data Size:    355711 Bytes = 347.37 KiB = 0.34 MiB
> > Load Address: 2a000000
> > Entry Point:  00000000
> >
> > And now I am trying to load it on the SD card and load it
> > on a Cubieboard4, but it just hangs.
> >
> > If I use from the CC-A80-binaries[*1] git repo the "sdcard-fwbuild.sh"
> > and put the two resulting binaries on the SD card it boots fine.
> >
> > But naturally the u-boot that is on the mentioned repo is from 2011
> > and I would like a more recent version.
> >
> > If I try to use the CC-A80-binaries[*1] git repo and the "sdcard-fwbuild.sh"
> > with the upstream u-boot it complains very loudly - and the resulting
> > binary is not created.
> >
> > I figured out that it must be due to the header which as the magic
> > string of 'uboot' (which in [*2] is in arch/arm/cpu/armv7/sun9iw1/spare_head.c)
> >
> > In u-boot upstream I can set CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
> > which I did, but now I am struggling to figure out what I am
> > suppose to put in there. Any ideas? Is there an tool to fill this
> > area out? And more importantly, am I on the right track or is
> > there something else that I a missing?
> >
> > I did look at board/sunxi/README.sunxi64 and it explained about the boot0
> > but that talks about A53 boards I have an A15 (armv7) - and
> > 'arm-trusted-firmware' is all geared towards armv8.
> >
> > Hints of what I should do next?
> 
> With ARMv7 Allwinner SoCs and mainline U-boot, boot0 is replaced with
> U-boot SPL. The build process should generate a "u-boot-sunxi-with-spl.bin"
> file, which is the SPL combined with U-boot proper at the correct offsets.
> Just write that as you would the image built from "sdcard-fwbuild.sh",
> that is at an offset of 8192 bytes on the SD card.

Awesome! Next snag - I am hitting an issue with trying to boot Xen with
it. Specifically I have:


U-Boot SPL 2017.07-00217-ge14b1169c0 (Jul 18 2017 - 09:27:24)
DRAM: 2048 MiB
Trying to boot from MMC1


U-Boot 2017.07-00217-ge14b1169c0 (Jul 18 2017 - 09:27:24 -0400) Allwinner Technology

CPU:   Allwinner A80 (SUN9I)
Model: Cubietech Cubieboard4
DRAM:  2 GiB
MMC:   SUNXI SD/MMC: 0, SUNXI SD/MMC: 1
*** Warning - bad CRC, using default environment

In:    serial at 07000000
Out:   serial at 07000000
Err:   serial at 07000000


U-Boot 2017.07-00217-ge14b1169c0 (Jul 18 2017 - 09:27:24 -0400) Allwinner Technology

CPU:   Allwinner A80 (SUN9I)
Model: Cubietech Cubieboard4
DRAM:  2 GiB
MMC:   SUNXI SD/MMC: 0, SUNXI SD/MMC: 1
*** Warning - bad CRC, using default environment

In:    serial at 07000000
Out:   serial at 07000000
Err:   serial at 07000000
Net:   No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot:  2  1  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
1687 bytes read in 19 ms (85.9 KiB/s)
## Executing script at 23100000
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
No FDT memory address configured. Please configure
the FDT address via "fdt addr <address>" command.
Aborting!
reading /xen
851976 bytes read in 121 ms (6.7 MiB/s)
reading /zImage.dtb
16825 bytes read in 27 ms (608.4 KiB/s)
reading /zImage
10233696 bytes read in 1153 ms (8.5 MiB/s)
## Flattened Device Tree blob at bec00000
   Booting using the fdt blob at 0xbec00000
   Using Device Tree in place at bec00000, end bec071b8

Starting kernel ...

- UART enabled -
- CPU 00000000 booting -
- Xen must be entered in NS Hyp mode -
- Please update the bootloader -
- Boot failed -


I couldn't see anything in uboot about enabling NS Hyp mode?


In case you are wondering the boot.scr is generated from

$mkimage -A arm -T script -d boot.xen boot.scr

And boot.xen looks as so:

# SUNXI Xen Boot Script

# Addresses suitable for 1GB system, adjust as appropriate for a 2GB system.
# Top of RAM:         0xc0000000
# Xen relocate addr   0xbfe00000
setenv kernel_addr_r  0xbf600000 # 8M
setenv ramdisk_addr_r 0xbee00000 # 8M
setenv fdt_addr       0xbec00000 # 2M
setenv xen_addr_r     0xbea00000 # 2M

setenv fdt_high      0xffffffff # Load fdt in place instead of relocating

# Load xen/xen to ${xen_addr_r}. e.g. tftp, fatload or ext2load to ${xen_addr_r}.
# see the following sections for details of booting from various devices.

setenv bootargs "console=dtuart dtuart=/soc/serial at 07000000  dom0_mem=512M"

# Load appropriate .dtb file to ${fdt_addr} e.g. tftp, fatload or ext2load to ${fdt_addr}.
# see the following sections for details of booting from various devices.

fdt addr ${fdt_addr} 0x40000

fdt resize

fdt chosen

fdt set /chosen \#address-cells <1>
fdt set /chosen \#size-cells <1>

# Load Linux arch/arm/boot/zImage to ${kernel_addr_r}. e.g. tftp, fatload or ext2load to ${kernel_addr_r}.
# see the following sections for details of booting from various devices.


fdt mknod /chosen module at 0
fdt set /chosen/module at 0 compatible "xen,linux-zimage" "xen,multiboot-module"
fdt set /chosen/module at 0 reg <${kernel_addr_r} 0x${filesize} >
fdt set /chosen/module at 0 bootargs "console=hvc0 ro root=/dev/sda1 clk_ignore_unused"

fatload mmc 0 ${xen_addr_r} /xen
   
# Load appropriate .dtb file to ${fdt_addr}
fatload mmc 0 ${fdt_addr} /zImage.dtb
#          # Load Linux arch/arm/boot/zImage to ${kernel_addr_r}
fatload mmc 0 ${kernel_addr_r} /zImage

bootz ${xen_addr_r} - ${fdt_addr}



More information about the U-Boot mailing list