RockPro64 booting w/ u-boot v2019-rc3

John-Mark Gurney jmg at
Mon Sep 16 06:47:06 UTC 2019

I recently received my RockPro64, and w/ a bit of help from manu, I
built a new u-boot firmware and get it booting from SD card.  The
u-boot port firmware will boot, but receives an Unhandled System Error
shortly after going to multiuser mode.

It doesn't yet set the PCIe slot.  Is anyone working on this?  If so,
can you point me to code?  I'd like to get this working.

Building u-boot isn't hard, but finding the correct part to build took
some help.

Possibly imcomplete list of packages used:
aarch64-none-elf-binutils-2.32_1,1 GNU binutils for bare metal AArch64 cross-development
aarch64-none-elf-gcc-6.4.0_6   Cross GNU Compiler Collection for aarch64noneelf
atf-rk3399-v2.1                ARM TF-A for platform rk3399
bison-3.4.1,1                  Parser generator from FSF, (mostly) compatible with Yacc
dtc-1.4.7                      Device Tree Compiler
gmake-4.2.1_3                  GNU version of 'make' utility
gsed-4.7                       GNU stream editor
python3-3_3                    The "meta-port" for version 3 of the Python interpreter

The default sed fails at one point, so used this patch:
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index ef116e0e0a..e0dedf8943 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -302,7 +302,7 @@ cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \
                -i $(dir $<) $(DTC_FLAGS) \
                -d $(depfile).dtc.tmp $(dtc-tmp) ; \
        cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) ; \
-       sed -i "s:$(pre-tmp):$(<):" $(depfile)
+       gsed -i "s:$(pre-tmp):$(<):" $(depfile)

 $(obj)/%.dtb: $(src)/%.dts FORCE
        $(call if_changed_dep,dtc)

There is also a failure on the config step, and needs this patch as
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index b18eab1707..3260c472b9 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -3100,6 +3100,7 @@ CONFIG_SYS_MACB2_BASE

And then built using the following commands:
export BL31=/usr/local/share/atf-rk3399/bl31.elf
gmake clean
gmake rockpro64-rk3399_defconfig
CROSS_COMPILE=aarch64-none-elf- gmake -j 4

I may have forgotten to include some steps.  After building, I
installed the parts via:
dd if=idbloader.img of=/dev/disk4 oseek=64 bs=512
dd if=u-boot.itb of=/dev/disk4 oseek=16384 bs=512

I used FreeBSD-13.0-CURRENT-arm64-aarch64-20190906-r351901-memstick.img
as a base, but it has the UEFI boot partition in this area, so I used
mdconfig to extract the parts, and then expanded the image, created a
new freebsd-boot partition to cover the space for the above, and then
replaced the images...

=>      3  2111549  mmcsd0  GPT  (30G) [CORRUPT]
        3    32765       2  freebsd-boot  (16M)
    32768    67584       1  efi  (33M)
   100352  2011200       3  freebsd  (982M)

The corrupt tag is because I haven't expanded the gpt to cover the
full SD card yet.

  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."

More information about the freebsd-arm mailing list