Refresh the BeagleBone Black image

Barebox won't build (it complains about <linux/list.h> not found and I
cannot easily solve that), so let's go back to U-Boot.

The 2019.01 U-Boot release is buggy in its recognizing of partition
tables (`fatls` complains, for example), and the whole thing reverts to
a "legacy boot", so let's use the latest release, the 2019.07.

I'm also giving up on the g_cdc module because the board that I'm using
has a microUSB header for the debug console.

- FIXME: Properly distinguish between an SD-card boot and an eMMC boot
(right now it is hardcoded to boot from the SD card)
- FIXME: test Rauc updates once eMMC works
- FIXME: activate watchdog from U-Boot

Change-Id: I013f145cf2fe24e41ea0dafd225e3feb1854712c
diff --git a/board/czechlight/beaglebone/barebox.env/boot/sd b/board/czechlight/beaglebone/barebox.env/boot/sd
deleted file mode 100644
index 2aa7912..0000000
--- a/board/czechlight/beaglebone/barebox.env/boot/sd
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-global.bootm.image=/boot/zImage
-
-global.bootm.oftree=/boot/czechlight-bbb.dtb
-
-# No initrd
-# global.bootm.initrd=<path to initrd>
-
-global.linux.bootargs.dyn.root="root=/dev/mmcblk0p2 rootfstype=ext4 rootwait"
-global.linux.bootargs.base="omap_wdt.early_enable=1"
diff --git a/board/czechlight/beaglebone/barebox.env/config-board b/board/czechlight/beaglebone/barebox.env/config-board
deleted file mode 100644
index 042ed45..0000000
--- a/board/czechlight/beaglebone/barebox.env/config-board
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-global.boot.default=sd
-global.boot.watchdog_timeout=60
diff --git a/board/czechlight/beaglebone/boot.scr.txt b/board/czechlight/beaglebone/boot.scr.txt
new file mode 100644
index 0000000..9a8adc7
--- /dev/null
+++ b/board/czechlight/beaglebone/boot.scr.txt
@@ -0,0 +1,8 @@
+setenv bootargs root=/dev/mmcblk0p${rauc_part} console=ttyO0,115200n8 init=/sbin/init-czechlight.sh rauc.slot=${rauc_slot} czechlight=${czechlight} systemd.machine_id=${machineid} panic=10 oops=panic
+if test -n ${czechlight} && load mmc 0:${rauc_part} ${fdt_addr_r} /boot/${czechlight}-bbb.dtb; then
+  echo "DTS: ${czechlight}-bbb"
+else
+  load mmc 0:${rauc_part} ${fdt_addr_r} /boot/czechlight-bbb.dtb || reset
+fi
+load mmc 0:${rauc_part} ${kernel_addr_r} /boot/zImage || reset
+bootz ${kernel_addr_r} - ${fdt_addr_r} || reset
diff --git a/board/czechlight/beaglebone/create-uEnv.sh b/board/czechlight/beaglebone/create-uEnv.sh
new file mode 100755
index 0000000..9808fdd
--- /dev/null
+++ b/board/czechlight/beaglebone/create-uEnv.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+install -m 0644 -D $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr
+
+# prepare the static script with RAUC logic
+${HOST_DIR}/bin/mkimage -C none -A arm -T script \
+        -d ${BR2_EXTERNAL_CZECHLIGHT_PATH}/board/czechlight/beaglebone/rauc.scr.txt ${BINARIES_DIR}/rauc.scr
+
+# ...and a simplified one for SD-card booting (no image determination)
+${HOST_DIR}/bin/mkimage -C none -A arm -T script \
+        -d ${BR2_EXTERNAL_CZECHLIGHT_PATH}/board/czechlight/beaglebone/sd.scr.txt ${BINARIES_DIR}/sd.scr
diff --git a/board/czechlight/beaglebone/genimage.cfg b/board/czechlight/beaglebone/genimage.cfg
index a1cb8c9..dc9f7c1 100644
--- a/board/czechlight/beaglebone/genimage.cfg
+++ b/board/czechlight/beaglebone/genimage.cfg
@@ -1,33 +1,82 @@
-image boot.vfat {
+image boot-sd.vfat {
 	vfat {
-		file MLO {
-			image = "barebox-am33xx-beaglebone-mlo.img"
-		}
-		file barebox.bin {
-			image = "barebox-am33xx-beaglebone.img"
-		}
 		files = {
-			"barebox.env",
-			"czechlight-bbb.dtb",
-			"zImage"
+			"MLO",
+			"u-boot.img"
+		}
+		file boot.scr {
+			image = "sd.scr"
 		}
 	}
-	size = 32M
+	size = 8M
 }
 
 image sdcard.img {
 	hdimage {
 	}
 
-	partition boot {
+	partition u-boot {
 		partition-type = 0xC
-		in-partition-table = "yes"
 		bootable = "true"
-		image = "boot.vfat"
+		image = "boot-sd.vfat"
 	}
 
 	partition rootfs {
 		partition-type = 0x83
 		image = "rootfs.ext4"
 	}
+
+	partition cfg {
+		partition-type = 0x83
+		image = "cfg.ext4"
+	}
 }
+
+# this is largely untested...
+#image boot-emmc.vfat {
+#	vfat {
+#		files = {
+#			"MLO",
+#			"u-boot.img"
+#		}
+#		file boot.scr {
+#			image = "rauc.scr"
+#		}
+#	}
+#	size = 8M
+#}
+#
+#image emmc.img {
+#	hdimage {
+#	}
+#
+#	partition u-boot {
+#		partition-type = 0xC
+#		bootable = "true"
+#		image = "boot-emmc.vfat"
+#	}
+#
+#	partition rootfs-A {
+#		partition-type = 0x83
+#		image = "rootfs.ext4"
+#		size = 1024M
+#	}
+#
+#	partition cfg-A {
+#		partition-type = 0x83
+#		image = "cfg.ext4"
+#		size = 512M
+#	}
+#
+#	partition rootfs-B {
+#		partition-type = 0x83
+#		image = "rootfs.ext4"
+#		size = 1024M
+#	}
+#
+#	partition cfg-B {
+#		partition-type = 0x83
+#		image = "cfg.ext4"
+#		size = 512M
+#	}
+#}
diff --git a/board/czechlight/beaglebone/linux.fragment b/board/czechlight/beaglebone/linux.fragment
index 5dcd313..2871883 100644
--- a/board/czechlight/beaglebone/linux.fragment
+++ b/board/czechlight/beaglebone/linux.fragment
@@ -1,5 +1 @@
 CONFIG_OMAP_WATCHDOG=y
-
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_CDC_COMPOSITE=m
-# CONFIG_USB_G_NOKIA is not set
diff --git a/board/czechlight/beaglebone/overlay/etc/modules-load.d/usb-serial-gadget.conf b/board/czechlight/beaglebone/overlay/etc/modules-load.d/usb-serial-gadget.conf
deleted file mode 100644
index 41c481d..0000000
--- a/board/czechlight/beaglebone/overlay/etc/modules-load.d/usb-serial-gadget.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-# composite module for serial console and Ethernet over the miniUSB port
-g_cdc
diff --git a/board/czechlight/beaglebone/overlay/etc/systemd/system/network/30-usbnet-apipa.network b/board/czechlight/beaglebone/overlay/etc/systemd/system/network/30-usbnet-apipa.network
deleted file mode 100644
index 807dcc4..0000000
--- a/board/czechlight/beaglebone/overlay/etc/systemd/system/network/30-usbnet-apipa.network
+++ /dev/null
@@ -1,6 +0,0 @@
-[Match]
-Name=usb0
-
-[Network]
-Description=miniUSB console
-LinkLocalAddressing=yes
diff --git a/board/czechlight/beaglebone/post-image.sh b/board/czechlight/beaglebone/post-image.sh
deleted file mode 100755
index 149ffb1..0000000
--- a/board/czechlight/beaglebone/post-image.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-BOARD_DIR="$(dirname $0)"
-GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg"
-GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
-
-rm -rf "${GENIMAGE_TMP}"
-
-genimage \
-	--rootpath "${TARGET_DIR}" \
-	--tmppath "${GENIMAGE_TMP}" \
-	--inputpath "${BINARIES_DIR}" \
-	--outputpath "${BINARIES_DIR}" \
-	--config "${GENIMAGE_CFG}"
-
-exit $?
-
diff --git a/board/czechlight/beaglebone/rauc.scr.txt b/board/czechlight/beaglebone/rauc.scr.txt
new file mode 100644
index 0000000..8e5ba65
--- /dev/null
+++ b/board/czechlight/beaglebone/rauc.scr.txt
@@ -0,0 +1,35 @@
+echo CzechLight BeagleBone Black RAUC
+
+test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3;
+test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3;
+test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B";
+for BOOT_SLOT in "${BOOT_ORDER}"; do
+  if test "x${rauc_part}" != "x"; then
+    ;
+  elif test "x${BOOT_SLOT}" = "xA"; then
+    if test ${BOOT_A_LEFT} -gt 0; then
+      setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1;
+      echo "Found valid slot A, ${BOOT_A_LEFT} attempts remaining";
+      rauc_part=2;
+      rauc_slot=A;
+    fi;
+  elif test "x${BOOT_SLOT}" = "xB"; then
+    if test ${BOOT_B_LEFT} -gt 0; then
+      setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1;
+      echo "Found valid slot B, ${BOOT_B_LEFT} attempts remaining";
+      rauc_part=4;
+      rauc_slot=B;
+    fi;
+  fi;
+done;
+if test -n "${rauc_part}"; then
+  saveenv;
+else
+  echo "No valid slot found, resetting tries to 3";
+  setenv BOOT_A_LEFT 3;
+  setenv BOOT_B_LEFT 3;
+  saveenv;
+  reset;
+fi;
+load mmc 0:${rauc_part} ${scriptaddr} /boot/boot.scr || reset;
+source ${scriptaddr} || reset;
diff --git a/board/czechlight/beaglebone/sd.scr.txt b/board/czechlight/beaglebone/sd.scr.txt
new file mode 100644
index 0000000..9d02237
--- /dev/null
+++ b/board/czechlight/beaglebone/sd.scr.txt
@@ -0,0 +1,4 @@
+rauc_part=2
+rauc_slot=A
+load mmc 0:${rauc_part} ${scriptaddr} /boot/boot.scr || reset
+source ${scriptaddr} || reset
diff --git a/board/czechlight/beaglebone/uboot.fragment b/board/czechlight/beaglebone/uboot.fragment
new file mode 100644
index 0000000..d231b5d
--- /dev/null
+++ b/board/czechlight/beaglebone/uboot.fragment
@@ -0,0 +1 @@
+CONFIG_CMD_SETEXPR=y
diff --git a/configs/czechlight_beaglebone_defconfig b/configs/czechlight_beaglebone_defconfig
index a89c7e0..e7641dd 100644
--- a/configs/czechlight_beaglebone_defconfig
+++ b/configs/czechlight_beaglebone_defconfig
@@ -1,56 +1,92 @@
 BR2_arm=y
 BR2_cortex_a8=y
 BR2_ARM_FPU_VFPV3=y
+BR2_ENABLE_DEBUG=y
+BR2_STRIP_EXCLUDE_FILES="cla-* netopeer2* sysrepo* libsysrepo* libSysrepo* libnetconf2* libyang* netconf-cli"
+BR2_STRIP_EXCLUDE_DIRS="/usr/lib/libyang /usr/lib/sysrepo"
+BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/patches"
+BR2_REPRODUCIBLE=y
+BR2_PER_PACKAGE_DIRECTORIES=y
+BR2_SSP_STRONG=y
 BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
 BR2_TARGET_GENERIC_HOSTNAME="czechlight"
-BR2_TARGET_GENERIC_ISSUE="Welcome to CzechLight"
-BR2_TARGET_GENERIC_PASSWD_SHA256=y
+BR2_TARGET_GENERIC_ISSUE="Welcome to Czech Light"
 BR2_INIT_SYSTEMD=y
 BR2_TARGET_GENERIC_GETTY_PORT="ttyO0"
 # BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
 BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/overlay/ $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/overlay/"
-BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/post-image.sh"
+BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/create-uEnv.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/genimage.cfg"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.44"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.5"
 BR2_LINUX_KERNEL_DEFCONFIG="omap2plus"
 BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/linux.fragment $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/linux.fragment"
 BR2_LINUX_KERNEL_DTS_SUPPORT=y
-BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
 BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/czechlight-bbb.dts"
+BR2_LINUX_KERNEL_INSTALL_TARGET=y
+BR2_PACKAGE_LINUX_TOOLS_GPIO=y
 BR2_PACKAGE_LINUX_TOOLS_PERF=y
 BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/busybox-config"
+BR2_PACKAGE_STRACE=y
+BR2_PACKAGE_E2FSPROGS=y
+BR2_PACKAGE_MMC_UTILS=y
 BR2_PACKAGE_I2C_TOOLS=y
+BR2_PACKAGE_PICOCOM=y
+BR2_PACKAGE_PMBUS_PEEK=y
+BR2_PACKAGE_SPI_TOOLS=y
+BR2_PACKAGE_UBOOT_TOOLS=y
+BR2_PACKAGE_LIBGPIOD_TOOLS=y
+BR2_PACKAGE_MSTPD=y
 BR2_PACKAGE_AVAHI=y
 BR2_PACKAGE_AVAHI_DAEMON=y
-# BR2_PACKAGE_NETSNMP_SERVER is not set
-# BR2_PACKAGE_NETSNMP_CLIENTS is not set
-# BR2_PACKAGE_NETSNMP_ENABLE_MIBS is not set
-BR2_PACKAGE_OPENSSH=y
+BR2_PACKAGE_ETHTOOL=y
+BR2_PACKAGE_IPROUTE2=y
+BR2_PACKAGE_NETCONF_CLI=y
+BR2_PACKAGE_TCPDUMP=y
 BR2_PACKAGE_BASH=y
+BR2_PACKAGE_INOTIFY_TOOLS=y
+BR2_PACKAGE_DDRESCUE=y
 BR2_PACKAGE_RAUC=y
 BR2_PACKAGE_RAUC_NETWORK=y
 # BR2_PACKAGE_SYSTEMD_HWDB is not set
-BR2_PACKAGE_SYSTEMD_LOGIND=y
-# BR2_PACKAGE_SYSTEMD_MYHOSTNAME is not set
-BR2_PACKAGE_UTIL_LINUX_AGETTY=y
+BR2_PACKAGE_SYSTEMD_RANDOMSEED=y
+# BR2_PACKAGE_SYSTEMD_VCONSOLE is not set
 BR2_PACKAGE_VIM=y
 # BR2_PACKAGE_VIM_RUNTIME is not set
+BR2_TARGET_ROOTFS_CPIO=y
+BR2_TARGET_ROOTFS_CPIO_GZIP=y
+BR2_TARGET_ROOTFS_CPIO_UIMAGE=y
 BR2_TARGET_ROOTFS_EXT2=y
 BR2_TARGET_ROOTFS_EXT2_4=y
-BR2_TARGET_ROOTFS_EXT2_SIZE="131072"
-BR2_TARGET_BAREBOX=y
-BR2_TARGET_BAREBOX_BOARD_DEFCONFIG="am335x"
-BR2_TARGET_BAREBOX_IMAGE_FILE="images/barebox-am33xx-beaglebone.img"
-BR2_TARGET_BAREBOX_BAREBOXENV=y
-BR2_TARGET_BAREBOX_CUSTOM_ENV=y
-BR2_TARGET_BAREBOX_CUSTOM_ENV_PATH="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/barebox.env"
-BR2_TARGET_BAREBOX_AUX=y
-BR2_TARGET_BAREBOX_AUX_BOARD_DEFCONFIG="am335x_mlo"
-BR2_TARGET_BAREBOX_AUX_IMAGE_FILE="images/barebox-am33xx-beaglebone-mlo.img"
+BR2_TARGET_ROOTFS_EXT2_SIZE="307200"
+BR2_TARGET_ROOTFS_TAR_XZ=y
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.07"
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="am335x_evm"
+BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/uboot.fragment"
+BR2_TARGET_UBOOT_NEEDS_DTC=y
+# BR2_TARGET_UBOOT_FORMAT_BIN is not set
+BR2_TARGET_UBOOT_FORMAT_IMG=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="spl/u-boot-spl.bin"
+BR2_TARGET_UBOOT_SPL=y
+BR2_TARGET_UBOOT_SPL_NAME="MLO"
+BR2_TARGET_UBOOT_BOOT_SCRIPT=y
+BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/boot.scr.txt"
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
-BR2_PACKAGE_HOST_DTC=y
 BR2_PACKAGE_HOST_GENIMAGE=y
 BR2_PACKAGE_HOST_MTOOLS=y
-BR2_PACKAGE_HOST_RAUC=y
+CZECHLIGHT_CFG_FS_PERSIST_SYSREPO=y
+CZECHLIGHT_CFG_FS_PERSIST_KEYS=y
+CZECHLIGHT_RAUC_ROOTFS=y
+CZECHLIGHT_RAUC_COMPATIBLE="beaglebone-black"
+CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV="/dev/mmcblk0p2"
+CZECHLIGHT_RAUC_SLOT_A_CFG_DEV="/dev/mmcblk0p3"
+CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV="/dev/mmcblk0p4"
+CZECHLIGHT_RAUC_SLOT_B_CFG_DEV="/dev/mmcblk0p5"
 CZECHLIGHT_NETCONF=y