# Forked from Alpine, so we can build it with Librem 5 phone support
pkgname=u-boot-librem5
pkgver=0.5
pkgrel=0
# 'librem5' branch for devkit
_atfversion="783fc2b2c4266bfdb5218e4d9b6b2bc90849e0e9"
# 'busfreq' branch
_ubootversion="2270b6cd3c143350d4fc9fe0e0d24ca209463bf2"
_m4version="a017421c340a69f2392086da93841244f78a03c5"
_firmwareversion="7.9"
pkgdesc="u-boot bootloader for the Purism Librem5 phone"
url="http://www.denx.de/wiki/U-Boot/"
arch="aarch64"
license="GPL-2.0-or-later OFL-1.1 BSD-2-Clause BSD-3-Clause eCos-2.0 IBM-pibs"
makedepends="$depends_dev bc dtc python3-dev swig binutils coreutils zlib-dev newlib-arm-none-eabi bison flex"
options="!check !tracedeps"
source="
	uboot-imx-${_ubootversion}.tar.gz::https://source.puri.sm/Librem5/uboot-imx/-/archive/${_ubootversion}/uboot-imx-${_ubootversion}.tar.gz
	m4-${_m4version}.tar.gz::https://source.puri.sm/Librem5/Cortex_M4/-/archive/${_m4version}/Cortex_M4-${_m4version}.tar.gz
	arm-trusted-firmware-${_atfversion}.tar.gz::https://source.puri.sm/Librem5/arm-trusted-firmware/-/archive/${_atfversion}/arm-trusted-firmware-${_atfversion}.tar.gz
        https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-${_firmwareversion}.bin
	"
_ubootbuilddir="$srcdir"/uboot-imx-${_ubootversion}
_atfbuilddir="$srcdir"/arm-trusted-firmware-${_atfversion}
_m4builddir="$srcdir"/Cortex_M4-${_m4version}
_firmwarebuilddir="$srcdir"/firmware-imx-${_firmwareversion}

builddir="$_ubootbuilddir"

build() {
	msg "Building M4"
	cd "$_m4builddir"
	make

	msg "Building ARM trusted firmware"
	cd "$_atfbuilddir"
	LDFLAGS="" make PLAT=imx8mq bl31
	# Overwrite default bl31 binary with one made here
	cp -v "$_atfbuilddir"/build/imx8mq/release/bl31.bin "$_ubootbuilddir"/

        msg "Extracting DDR & HDMI firmware"
        cd "$srcdir"
        chmod +x firmware-imx-${_firmwareversion}.bin
        ./firmware-imx-${_firmwareversion}.bin --auto-accept
        cp -v "$_firmwarebuilddir"/firmware/ddr/synopsys/lpddr4*.bin "$_ubootbuilddir"/
        cp -v "$_firmwarebuilddir"/firmware/hdmi/cadence/signed*.bin "$_ubootbuilddir"/

	msg "Building u-boot"
	cd "$_ubootbuilddir"
	make distclean
	# Note: HOSTCC is set explicitly here else it tries to use cc, which
	# doesn't exist on Alpine
        #
        # Devkit uboot firmware
	make ARCH=arm HOSTCC=gcc librem5_devkit_defconfig
	make ARCH=arm HOSTCC=gcc
        make ARCH=arm HOSTCC=gcc flash.bin
        make ARCH=arm HOSTCC=gcc u-boot.imx
        mv flash.bin devkit-flash.bin

        # Phone uboot firmware
        make distclean
	make ARCH=arm HOSTCC=gcc librem5_defconfig
	make ARCH=arm HOSTCC=gcc
        make ARCH=arm HOSTCC=gcc flash.bin
        make ARCH=arm HOSTCC=gcc u-boot.imx
        mv flash.bin phone-flash.bin

	msg "Building u-boot flashing images"
        dd if=/dev/zero of=devkit-boot.img bs=1024 count=1055
        dd if="$_m4builddir"/m4.bin conv=notrunc of="$_ubootbuilddir"/devkit-boot.img bs=1024
        dd if="$_ubootbuilddir"/devkit-flash.bin conv=notrunc of="$_ubootbuilddir"/devkit-boot.img bs=1024 seek=31

        dd if=/dev/zero of=phone-boot.img bs=1024 count=1055
        dd if="$_m4builddir"/m4.bin conv=notrunc of="$_ubootbuilddir"/phone-boot.img bs=1024
        dd if="$_ubootbuilddir"/phone-flash.bin conv=notrunc of="$_ubootbuilddir"/phone-boot.img bs=1024 seek=31
	msg "done!"
}

package() {
        install -D -m644 "$_ubootbuilddir"/devkit-boot.img \
		"$pkgdir/usr/share/firmware/librem5/devkit-boot.img"
	install -D -m644 "$_ubootbuilddir"/phone-boot.img \
		"$pkgdir/usr/share/firmware/librem5/phone-boot.img"
}


sha512sums="ea2ba344ead3407903618f361a14fe7561abac9c3d9849d9de8d197fca68992a5b338ee1875a17b1f37a80ff90763d066ecf29f101f7a7d2c09da3e6fa4e73f6  uboot-imx-2270b6cd3c143350d4fc9fe0e0d24ca209463bf2.tar.gz
035a4358ddf586c829da7fa2fb0d9d1df913c0c454f2d0e57ff0c6794552e49950fb6373f9aaf72e0e4c78ab411496aabbc60bf66cd76e35053f7a2d77911735  m4-a017421c340a69f2392086da93841244f78a03c5.tar.gz
d4366a775a6dbeab491087991238c55812371aa2d57279d01c49f0da2f0cfa60f6531609e53b79fb44c39b0e94fd5a2ddd2b13d77469d5588452f11de05ba40b  arm-trusted-firmware-783fc2b2c4266bfdb5218e4d9b6b2bc90849e0e9.tar.gz
d7c221e0c1cc5a22c9b98ba369f481d690a2227b0897836fb0b18975f0d2f0a085f7a120d24bdd161850d32f878e7f1aa47015dee76f7b40e84f45adf379e22c  firmware-imx-7.9.bin"
