]> git.pld-linux.org Git - packages/uboot.git/commitdiff
add support for odroid n2(+)
authorJan Palus <atler@pld-linux.org>
Sun, 28 Nov 2021 12:04:59 +0000 (13:04 +0100)
committerJan Palus <atler@pld-linux.org>
Sun, 28 Nov 2021 14:24:20 +0000 (15:24 +0100)
unfortunately ARM trusted firmware has no support for g12b platform yet
so instead hardkernel repo is used for images other than BL33 (u-boot
payload itself). that in turn makes the experience pretty nightmarish ie
hardkernel uboot requires x86_64 host (x86_64 binaries are literally
part of the process) and an ancient toolchain (gcc4). summary of patches
to make build fully working on aarch64 with modern toolchain:

hardkernel-uboot-gcc5.patch: don't fail on gcc newer than 4 and instead
use same include file as for gcc4 with newer gcc versions

hardkernel-uboot-werror.patch: disable -Werror preventing successful
compilation with modern toolchain

hardkernel-uboot-arm_cross.patch: boot image requires toolchains for
both aarch64 and arm. hardkernel hardcoded the values without a
possibility to override them independently so add such support

hardkernel-uboot-no_stdint.patch: don't include unused stdint.h which
likely requires glibc

hardkernel-uboot-x86_64_bin.patch: build process requires use of x86_64
binaries so add support for emulation wrappers -- separately for static
binaries (qemu) and dynamic binaries (box64)

hardkernel-uboot-acs.patch: acs.bin is a simple binary with
configuration data organized around acs_setting struct loaded into fixed
address in memory. first value in this binary points to beginning of
acs_setting struct. now likely due to toolchain differences first value
with address is either followed by 2 words of zeros (original gcc4 based
toolchain) or 1 word of zeros (up-to-date toolchain) which is enough of a
difference to create broken image. ensure acs_setting address is
followed by at least two words of zeros

hardkernel-uboot-uboot_payload.patch: make BL33 image location
customizable so final image assembly can refer to uboot payload we
target. note that this way process is much simpler than following:
https://u-boot.readthedocs.io/en/latest/board/amlogic/odroid-n2.html
and it also produces smaller image than docs from u-boot which is pretty
significant difference as the bigger image is big enough to prevent
creation of first partition at 2048 sector boundary

hardkernel-uboot-acs.patch [new file with mode: 0644]
hardkernel-uboot-arm_cross.patch [new file with mode: 0644]
hardkernel-uboot-gcc5.patch [new file with mode: 0644]
hardkernel-uboot-no_stdint.patch [new file with mode: 0644]
hardkernel-uboot-uboot_payload.patch [new file with mode: 0644]
hardkernel-uboot-werror.patch [new file with mode: 0644]
hardkernel-uboot-x86_64_bin.patch [new file with mode: 0644]
uboot.spec

diff --git a/hardkernel-uboot-acs.patch b/hardkernel-uboot-acs.patch
new file mode 100644 (file)
index 0000000..c0d3292
--- /dev/null
@@ -0,0 +1,11 @@
+--- hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/acs/acs_entry.S.orig      2021-03-29 03:39:35.000000000 +0200
++++ hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/acs/acs_entry.S   2021-11-28 02:02:25.014983869 +0100
+@@ -7,5 +7,5 @@
+ #ifdef CONFIG_MDUMP_COMPRESS
+       .word   __ramdump_data
+ #else
+-      .word   0x0
+-#endif
+\ No newline at end of file
++      .quad   0x0
++#endif
diff --git a/hardkernel-uboot-arm_cross.patch b/hardkernel-uboot-arm_cross.patch
new file mode 100644 (file)
index 0000000..cc3f91c
--- /dev/null
@@ -0,0 +1,12 @@
+--- hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/scp_task/Makefile.orig    2021-11-21 15:35:31.551670174 +0100
++++ hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/scp_task/Makefile 2021-11-21 15:38:26.863510869 +0100
+@@ -6,7 +6,8 @@
+ include $(buildtree)/.config
+ # Select ARMv7-m bare-metal toolchain
+-CROSS_COMPILE=arm-none-eabi-
++ARM_CROSS_COMPILE=arm-none-eabi-
++override CROSS_COMPILE=$(ARM_CROSS_COMPILE)
+ ASM=$(CROSS_COMPILE)as
+ CC=$(CROSS_COMPILE)gcc
+ CPP=$(CROSS_COMPILE)cpp
diff --git a/hardkernel-uboot-gcc5.patch b/hardkernel-uboot-gcc5.patch
new file mode 100644 (file)
index 0000000..6235fb3
--- /dev/null
@@ -0,0 +1,14 @@
+--- hardkernel-uboot-odroid/include/linux/compiler-gcc.h.orig  2021-03-29 03:39:35.000000000 +0200
++++ hardkernel-uboot-odroid/include/linux/compiler-gcc.h       2021-11-21 15:25:04.044889807 +0100
+@@ -111,7 +111,11 @@
+ #define __gcc_header(x) #x
+ #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
+ #define gcc_header(x) _gcc_header(x)
++#if __GNUC__ >= 4
++#include gcc_header(4)
++#else
+ #include gcc_header(__GNUC__)
++#endif
+ #if !defined(__noclone)
+ #define __noclone     /* not needed */
diff --git a/hardkernel-uboot-no_stdint.patch b/hardkernel-uboot-no_stdint.patch
new file mode 100644 (file)
index 0000000..3803c16
--- /dev/null
@@ -0,0 +1,10 @@
+--- hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/scp_task/uart.c.orig      2021-11-21 15:42:14.755011547 +0100
++++ hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/scp_task/uart.c   2021-11-21 15:42:26.868250049 +0100
+@@ -20,7 +20,6 @@
+ */
+ #include "registers.h"
+-#include <stdint.h>
+ #include "task_apis.h"
+ /* #define P_AO_UART_WFIFO                 (0xc81004c0) */
diff --git a/hardkernel-uboot-uboot_payload.patch b/hardkernel-uboot-uboot_payload.patch
new file mode 100644 (file)
index 0000000..b79ec5c
--- /dev/null
@@ -0,0 +1,28 @@
+--- hardkernel-uboot-odroid/fip/Makefile.orig  2021-03-29 03:39:35.000000000 +0200
++++ hardkernel-uboot-odroid/fip/Makefile       2021-11-21 17:32:49.696089392 +0100
+@@ -13,6 +13,7 @@
+ AML_USER_KEY := $(srctree)/$(BOARDDIR)/aml-user-key.sig
+ FIP_BL32_PROCESS =
+ DDR_FW_NAME := aml_ddr.fw
++UBOOT_PAYLOAD := $(buildtree)/u-boot.bin
+ ifeq ($(CONFIG_AML_BL33_COMPRESS_ENABLE),y)
+ BL33_COMPRESS_FLAG := --compress lz4
+@@ -71,7 +72,7 @@
+ FIP_ARGS := --bl30 $(buildtree)/fip/bl30_new.bin \
+       --bl31 $(buildsrc)/fip/$(SOC)/bl31.$(BL3X_SUFFIX) \
+-      --bl33 $(buildtree)/u-boot.bin
++      --bl33 $(UBOOT_PAYLOAD)
+ $(buildtree)/fip/fip.bin: FORCE
+       $(Q)echo Building $@...
+@@ -122,7 +123,7 @@
+                               --input $(buildsrc)/fip/$(SOC)/bl32.$(BL3X_SUFFIX) \
+                               --output $(buildtree)/fip/bl32.$(BL3X_SUFFIX).enc))
+       $(call encrypt_step, --bl3sig --type bl33 $(V3_PROCESS_FLAG) $(BL33_COMPRESS_FLAG) \
+-                      --input $(buildtree)/u-boot.bin \
++                      --input $(UBOOT_PAYLOAD) \
+                       --output $(buildtree)/fip/bl33.bin.enc)
+ endif
+       $(call encrypt_step, --bl2sig \
diff --git a/hardkernel-uboot-werror.patch b/hardkernel-uboot-werror.patch
new file mode 100644 (file)
index 0000000..a3af07e
--- /dev/null
@@ -0,0 +1,21 @@
+--- hardkernel-uboot-odroid/Makefile.orig      2021-03-29 03:39:35.000000000 +0200
++++ hardkernel-uboot-odroid/Makefile   2021-11-21 15:31:27.980593091 +0100
+@@ -589,7 +589,6 @@
+ KBUILD_CPPFLAGS += $(KCPPFLAGS)
+ KBUILD_AFLAGS += $(KAFLAGS)
+ KBUILD_CFLAGS += $(KCFLAGS)
+-KBUILD_CFLAGS += -Werror
+ # Use UBOOTINCLUDE when you must reference the include/ directory.
+ # Needed to be compatible with the O= option
+--- hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/acs/Makefile.orig 2021-11-21 15:33:42.835979314 +0100
++++ hardkernel-uboot-odroid/arch/arm/cpu/armv8/g12b/firmware/acs/Makefile      2021-11-21 15:33:54.685870737 +0100
+@@ -180,7 +180,7 @@
+                               -mgeneral-regs-only -D__ASSEMBLY__              \
+                               ${DEFINES} ${INCLUDES}
+ CFLAGS                        +=      -nostdinc -pedantic -ffreestanding -Wall        \
+-                              -Werror -mgeneral-regs-only -std=c99 -c -Os     \
++                              -mgeneral-regs-only -std=c99 -c -Os     \
+                               ${DEFINES} ${INCLUDES} $(VPATH_LIST:%=-I%)
+ CFLAGS                        +=      -ffunction-sections -fdata-sections
+ ASFLAGS                       +=      ${FIRMWARE_CPPFLAGS}
diff --git a/hardkernel-uboot-x86_64_bin.patch b/hardkernel-uboot-x86_64_bin.patch
new file mode 100644 (file)
index 0000000..877bcce
--- /dev/null
@@ -0,0 +1,24 @@
+--- hardkernel-uboot-odroid/fip/Makefile.orig  2021-11-21 17:41:53.590511510 +0100
++++ hardkernel-uboot-odroid/fip/Makefile       2021-11-22 11:19:57.287486043 +0100
+@@ -67,7 +67,7 @@
+ endef
+ define encrypt_step
+-      $(Q)$(buildsrc)/fip/$(SOC)/aml_encrypt_$(SOC) $1
++      $(Q)$(X86_64_STATIC_WRAPPER) $(buildsrc)/fip/$(SOC)/aml_encrypt_$(SOC) $1
+ endef
+ FIP_ARGS := --bl30 $(buildtree)/fip/bl30_new.bin \
+--- hardkernel-uboot-odroid/fip/Makefile.orig  2021-03-29 03:39:35.000000000 +0200
++++ hardkernel-uboot-odroid/fip/Makefile       2021-11-21 17:27:36.244548072 +0100
+@@ -97,8 +97,8 @@
+       $(eval FIP_BL32_PROCESS := --bl32 $(buildsrc)/fip/$(SOC)/bl32.$(BL3X_SUFFIX).enc)
+ endif
+ endif
+-      $(Q)$(buildsrc)/fip/fip_create $(FIP_ARGS) $@
+-      $(Q)$(buildsrc)/fip/fip_create --dump $@
++      $(Q)$(X86_64_DYNAMIC_WRAPPER) $(buildsrc)/fip/fip_create $(FIP_ARGS) $@
++      $(Q)$(X86_64_DYNAMIC_WRAPPER) $(buildsrc)/fip/fip_create --dump $@
+       # build final bootloader
+       $(Q)cat $(buildtree)/fip/bl2_new.bin $(buildtree)/fip/fip.bin > $(buildtree)/fip/boot_new.bin
index 8fb95247c422bf182c98400f5bfea45d9c4e9a5a..35e402769b2c9c52a4898ca107d69d8b769f4010 100644 (file)
@@ -7,18 +7,31 @@ License:      GPL v2
 Group:         Applications/System
 Source0:       https://ftp.denx.de/pub/u-boot/u-boot-%{version}.tar.bz2
 # Source0-md5: f1392080facf59dd2c34096a5fd95d4c
+Source1:       https://github.com/hardkernel/u-boot/archive/travis/odroidc4-189/odroid-189.tar.gz
+# Source1-md5: dd117b6180ad5c9abb3303b31e57e7b4
 Patch0:                rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch
 Patch1:                %{name}-pbp_usb_hang.patch
 Patch2:                rk3399-emmc.patch
+Patch3:                hardkernel-uboot-gcc5.patch
+Patch4:                hardkernel-uboot-werror.patch
+Patch5:                hardkernel-uboot-arm_cross.patch
+Patch6:                hardkernel-uboot-no_stdint.patch
+Patch7:                hardkernel-uboot-x86_64_bin.patch
+Patch8:                hardkernel-uboot-acs.patch
+Patch9:                hardkernel-uboot-uboot_payload.patch
 URL:           https://www.denx.de/wiki/U-Boot
-%ifarch aarch64
-BuildRequires: arm-trusted-firmware-armv8
-%endif
 BuildRequires: bison
 BuildRequires: dtc
 BuildRequires: flex
 BuildRequires: openssl-devel
 BuildRequires: rpmbuild(macros) >= 2.007
+%ifarch aarch64
+BuildRequires: arm-trusted-firmware-armv8
+BuildRequires: box64
+BuildRequires: crossarm-gcc
+BuildRequires: qemu-user
+BuildConflicts:        libfdt-devel
+%endif
 BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
 %define                common_configs  tools-only
@@ -30,7 +43,7 @@ BuildRoot:    %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 %define                arch_configs    rpi_2
 %endif
 %ifarch aarch64
-%define                arch_configs    pinebook-pro-rk3399
+%define                arch_configs    odroid-n2 pinebook-pro-rk3399
 %endif
 
 %define                configs %{common_configs} %{?arch_configs}
@@ -49,6 +62,17 @@ Das U-Boot (Universal Bootloader lub "łódź podwodna" po niemiecku) to
 bootloader dla wielu różnych architektur komputerów, w tym PPC, ARM,
 AVR32, MIPS, x86, 68k, Nios i MicroBlaze.
 
+%package image-odroid-n2
+Summary:       U-Boot firmware images for Odroid N2/N2+
+Summary(pl.UTF-8):     Obrazy firmware'u U-Boot dla urządzeń Odroid N2/N2+
+Group:         Applications/System
+
+%description image-odroid-n2
+U-Boot firmware images for Odroid N2/N2+.
+
+%description image-odroid-n2 -l pl.UTF-8
+Obrazy firmware'u U-Boot dla urządzeń Odroid N2/N2+.
+
 %package image-pinebook-pro
 Summary:       U-Boot firmware images for Pinebook Pro
 Summary(pl.UTF-8):     Obrazy firmware'u U-Boot dla urządzeń Pinebook Pro
@@ -118,6 +142,18 @@ czasie utworzenia, sumach kontrolnych CRC32 itp.
 %ifarch aarch64
 %patch1 -p1
 %patch2 -p1
+install -d build/hardkernel-uboot-odroid
+tar xf %{SOURCE1} -C build/hardkernel-uboot-odroid
+mv build/hardkernel-uboot-odroid/u-boot*/* build/hardkernel-uboot-odroid
+cd build/hardkernel-uboot-odroid
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+cd ../..
 %endif
 
 %build
@@ -144,6 +180,19 @@ for config in %configs; do
                V=1 \
                O=build/$config
 done
+%ifarch aarch64
+cd build/hardkernel-uboot-odroid
+%{__make} odroidn2_defconfig \
+       V=1
+%{__make} \
+       CROSS_COMPILE= \
+       ARM_CROSS_COMPILE=arm-linux-gnueabi- \
+       UBOOT_PAYLOAD=$(pwd)/../odroid-n2/u-boot.bin \
+       X86_64_DYNAMIC_WRAPPER=/usr/bin/box64 \
+       X86_64_STATIC_WRAPPER=/usr/bin/qemu-x86_64 \
+       V=1
+cd ../..
+%endif
 
 %install
 rm -rf $RPM_BUILD_ROOT
@@ -155,6 +204,9 @@ for config in %configs; do
        elif echo ' %rk3399_configs ' | grep -q " $config "; then
                install -d $RPM_BUILD_ROOT%{imagedir}/$config
                cp -p build/$config/{idbloader.img,u-boot.itb} $RPM_BUILD_ROOT%{imagedir}/$config
+       elif [ $config = "odroid-n2" ]; then
+               install -d $RPM_BUILD_ROOT%{imagedir}/$config
+               cp -p build/hardkernel-uboot-odroid/sd_fuse/u-boot.bin $RPM_BUILD_ROOT%{imagedir}/$config
        else
                install -d $RPM_BUILD_ROOT%{imagedir}/$config
                cp -p build/$config/u-boot.bin $RPM_BUILD_ROOT%{imagedir}/$config
@@ -170,6 +222,10 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{imagedir}
 
 %ifarch aarch64
+%files image-odroid-n2
+%defattr(644,root,root,755)
+%{imagedir}/odroid-n2
+
 %files image-pinebook-pro
 %defattr(644,root,root,755)
 %{imagedir}/pinebook-pro-rk3399
This page took 1.341401 seconds and 4 git commands to generate.