Skip to contentSkip to conversation

A80 (CubieBoard4) u-boot - what to inject in boot0 area?

U-Boot Konrad Rzeszutek Wilk 2 participants 4 messages Jul 18, 2017 – Jul 19, 2017

lore
Share & tools
lore
#0 lore raw

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?

Thanks!

[*1]: https://github.com/cubieboard/CC-A80-binaries
[*2]: https://github.com/cubieboard/CC-A80-u-boot

#1 lore raw

"Hi,

Quoted 37 lines · Konrad Rzeszutek Wilk

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?

Quoted 5 lines

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.

ChenYu

Quoted 6 lines

Thanks!

[*1]: https://github.com/cubieboard/CC-A80-binaries
[*2]: https://github.com/cubieboard/CC-A80-u-boot

#2 lore raw
Quoted 45 lines · Chen-Yu Tsai

"Hi,

Quoted 41 lines · Konrad Rzeszutek Wilk

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.

Quoted 7 lines
Quoted 1 line

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}

#3 lore raw
Quoted 135 lines · Konrad Rzeszutek Wilk
Quoted 45 lines · Chen-Yu Tsai

"Hi,

Quoted 41 lines · Konrad Rzeszutek Wilk

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.

Quoted 7 lines
Quoted 1 line

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 ...

Quoted 8 lines

- 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?

Non-secure on the A80 is not supported. Basically
the security extensions are broken.

ChenYu

Quoted 55 lines

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}