From d2014e26064802ee02816374ac9a9a0a75a602d3 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Tue, 9 Mar 2021 00:26:16 -0800 Subject: [PATCH] temp/u-boot-librem5: upgrade to latest u-boot from purism (MR 2023) Changes from purism: - 2 second boot delay removed - This includes an updated DDR memory training firmware version. - patch to work around wifi device not being available on boot Package changes: - u-boot installed in location consistent with other pmaports/u-boot packages - update-u-boot script added for upgrading u-boot on the device - devkit u-boot split off into a sep. subpackage --- ...m-librem5-Enable-WiFi-SW-kill-switch.patch | 29 +++++ temp/u-boot-librem5/APKBUILD | 52 +++++--- .../u-boot-librem5.post-upgrade | 9 ++ temp/u-boot-librem5/update-u-boot | 112 ++++++++++++++++++ 4 files changed, 185 insertions(+), 17 deletions(-) create mode 100644 temp/u-boot-librem5/0001-board-purism-librem5-Enable-WiFi-SW-kill-switch.patch create mode 100644 temp/u-boot-librem5/u-boot-librem5.post-upgrade create mode 100644 temp/u-boot-librem5/update-u-boot diff --git a/temp/u-boot-librem5/0001-board-purism-librem5-Enable-WiFi-SW-kill-switch.patch b/temp/u-boot-librem5/0001-board-purism-librem5-Enable-WiFi-SW-kill-switch.patch new file mode 100644 index 000000000..a2f791572 --- /dev/null +++ b/temp/u-boot-librem5/0001-board-purism-librem5-Enable-WiFi-SW-kill-switch.patch @@ -0,0 +1,29 @@ +From 08579a1a7c2a6897af952ef8dd5511b1f4830f88 Mon Sep 17 00:00:00 2001 +From: Angus Ainslie +Date: Mon, 8 Feb 2021 07:50:28 -0800 +Subject: [PATCH] board: purism: librem5: Enable WiFi SW kill switch + +Due to probe ordering in the kernel the SW kill switch might not get enabled +before the wifi driver is probed. + +Signed-off-by: Angus Ainslie +--- + board/purism/librem5/librem5.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/board/purism/librem5/librem5.h b/board/purism/librem5/librem5.h +index 461b1f7339..420b8d17b3 100644 +--- a/board/purism/librem5/librem5.h ++++ b/board/purism/librem5/librem5.h +@@ -138,6 +138,8 @@ static inline void init_pinmux(void) + gpio_direction_output(WWAN_EN, 0); + gpio_direction_output(WWAN_nRESET, 1); + ++ gpio_direction_output(WIFI_EN, 1); ++ + gpio_direction_output(HUB_EN, 0); + gpio_direction_output(HUB_nRESET, 1); + gpio_direction_output(SD_EN, 0); +-- +2.26.2 + diff --git a/temp/u-boot-librem5/APKBUILD b/temp/u-boot-librem5/APKBUILD index 498c6ff8a..fe0c80751 100644 --- a/temp/u-boot-librem5/APKBUILD +++ b/temp/u-boot-librem5/APKBUILD @@ -1,13 +1,13 @@ # Forked from Alpine, so we can build it with Librem 5 phone support pkgname=u-boot-librem5 -pkgver=0.8 -pkgrel=1 +pkgver=0.9 +pkgrel=0 # 'librem5' branch in atf repo _atfversion="92c2de12d36b31938ce940d5cac3c30a98665237" # 'librem5' branch in uboot repo -_ubootversion="c6956b68d33fa08a17629cddceb00b93ce6d4d41" +_ubootversion="e9f7caf70a5c4f468ba00392ad0ca0badecea20a" _m4version="a017421c340a69f2392086da93841244f78a03c5" -_firmwareversion="8.8" +_firmwareversion="8.10" pkgdesc="u-boot bootloader for the Purism Librem5 phone" url="http://www.denx.de/wiki/U-Boot/" arch="aarch64" @@ -19,14 +19,29 @@ source=" 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 + update-u-boot + 0001-board-purism-librem5-Enable-WiFi-SW-kill-switch.patch " +install="$pkgname.post-upgrade" +subpackages="$pkgname-devkit" + _ubootbuilddir="$srcdir"/uboot-imx-${_ubootversion} _atfbuilddir="$srcdir"/arm-trusted-firmware-${_atfversion} _m4builddir="$srcdir"/Cortex_M4-${_m4version} _firmwarebuilddir="$srcdir"/firmware-imx-${_firmwareversion} - builddir="$_ubootbuilddir" +prepare() { + default_prepare + + 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"/ +} + build() { msg "Building M4" cd "$_m4builddir" @@ -38,13 +53,6 @@ build() { # 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" # Note: HOSTCC is set explicitly here else it tries to use cc, which @@ -76,14 +84,24 @@ build() { } 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" + "$pkgdir/usr/share/u-boot/librem5/phone-boot.img" + install -D -m 755 "$srcdir"/update-u-boot \ + "$pkgdir"/usr/sbin/update-u-boot +} + +devkit() { + pkgdesc="u-boot bootloader for the Purism Librem5 devkit" + install -D -m644 "$_ubootbuilddir"/devkit-boot.img \ + "$subpkgdir/usr/share/u-boot/librem5/devkit-boot.img" + install -D -m 755 "$srcdir"/update-u-boot \ + "$subpkgdir"/usr/sbin/update-u-boot } -sha512sums="ed4832f2ffacc1fa63cca361db32e1e8b267fe7e25d7e9c7d2e0ed5d4ac9f9db629e201bd1a77ac31e40a91aaf46f8aa52d3fdf48c2a03cf40cea24d7a0d41f8 uboot-imx-c6956b68d33fa08a17629cddceb00b93ce6d4d41.tar.gz +sha512sums="feab35fae6450f24da54998b44b1d834bc33c9597ff8f9a4275e9ec7a1d1f442e133e51635eaabb9b759499728a0f70256d7bd6bc8bbeeb2133992f9c606d607 uboot-imx-e9f7caf70a5c4f468ba00392ad0ca0badecea20a.tar.gz 035a4358ddf586c829da7fa2fb0d9d1df913c0c454f2d0e57ff0c6794552e49950fb6373f9aaf72e0e4c78ab411496aabbc60bf66cd76e35053f7a2d77911735 m4-a017421c340a69f2392086da93841244f78a03c5.tar.gz cd8c9411ae0e57d2c8c700bf3e8c8d03e7dab955ace249a00911dd8c42b42929e0de3a5885eb9b1d945174abc8cfb177595d83c235e757c70640f451b62547ba arm-trusted-firmware-92c2de12d36b31938ce940d5cac3c30a98665237.tar.gz -309d3b8afd0884b055037396098f7eb938e4768604affc60e18b09e67596a593ccebe85ad130abf1e81a8fad257e5473152f259fa6cbb6d9730f6b3c11a3809d firmware-imx-8.8.bin" +24d4466b3c2202ceb1c22be2b3db4482eee54d09e167083cc53e82cd9f22ef9ac0cba5a1a3341cacf8ee01adf014eb25f4aa437f35a43ac102dd2f22e935821b firmware-imx-8.10.bin +1a98f50e572f3001bf5a37c037cf5649f9de5b6b3b0192c04ece51154f0eaec9b3bd625422cf1604f9c83e4c5d76fa980766380a214418610fab8234fd65d223 update-u-boot +acec9f7fa5fb3f4e84c6f6f74794325d5d18ea4557ab98fd0915ba5e41748e338f94604815b2f6d595119359462b48d2ee285b2e4025282d3118051b601b23a1 0001-board-purism-librem5-Enable-WiFi-SW-kill-switch.patch" diff --git a/temp/u-boot-librem5/u-boot-librem5.post-upgrade b/temp/u-boot-librem5/u-boot-librem5.post-upgrade new file mode 100644 index 000000000..3e729005b --- /dev/null +++ b/temp/u-boot-librem5/u-boot-librem5.post-upgrade @@ -0,0 +1,9 @@ +#!/bin/sh + +cat 1>&2 </dev/null)" in + purism,librem5r*) board=librem5;; + esac + fi + + if [ -z "$device" ]; then + case "$board" in + librem5) device=/dev/mmcblk0 ;; + esac + fi + + if [ -z "$imagedir" ]; then + imagedir="/usr/share/u-boot" + fi +} + +die() { + echo "ERROR: $@" + exit 1 +} + +usage() { + get_defaults + + cat <] [-b|--board ] [-d|--device ] + +options: + + -b,--board Specify the board type: librem5 + (current default: ${board:-none}) + + -d,--device Specify the device where to install u-boot + (current default: ${device:-none}) + + -i,--imagedir Specify u-boot image directory + (current default: ${imagedir:-none}) + + -n,--dry-run Print commands but don't execute them + +EOF +} + +while [ $# -gt 0 ]; do + opt="$1" + shift + case "$opt" in + -b|--board) + case "$1" in + librem5) board="librem5" ;; + *) usage; exit 1;; + esac + shift + ;; + -d|--device) + device="$1" + shift + ;; + -i|--imagedir) + imagedir="$1" + shift + ;; + -n|--dry-run) + dryrun="echo" + ;; + --) + break + ;; + -*) + usage + exit 1 + ;; + esac +done + +get_defaults +if [ -z "$board" -o -z "$device" -o -z "$imagedir" -o ! -e "$imagedir" ]; then + usage + exit 1 +fi + +if [ -z "$dryrun" ]; then + echo "Updating $board u-boot in $device in 3 seconds..." + sleep 3 +fi + +( +set -e +case "$board" in +librem5) + [ -e "$imagedir/librem5" ] || die "librem5 images not installed, apk add u-boot-librem5" + $dryrun dd if=$imagedir/librem5/phone-boot.img of=$device bs=1k seek=2 status=none + ;; +esac +$dryrun sync +) || die "U-Boot installation in $device failed" + +[ -z "$dryrun" ] && echo "Completed successfully."