aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mvebu/cortexa53
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/mvebu/cortexa53')
-rwxr-xr-xtarget/linux/mvebu/cortexa53/base-files/etc/board.d/02_network31
-rw-r--r--target/linux/mvebu/cortexa53/base-files/lib/preinit/82_uDPU48
-rwxr-xr-xtarget/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh52
-rw-r--r--target/linux/mvebu/cortexa53/base-files/lib/upgrade/uDPU.sh156
4 files changed, 287 insertions, 0 deletions
diff --git a/target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network b/target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network
new file mode 100755
index 0000000000..ba4b930426
--- /dev/null
+++ b/target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# Copyright (C) 2014-2016 OpenWrt.org
+# Copyright (C) 2016 LEDE-Project.org
+#
+
+. /lib/functions/uci-defaults.sh
+
+board_config_update
+
+board=$(board_name)
+
+case "$board" in
+globalscale,espressobin|\
+globalscale,espressobin-emmc|\
+globalscale,espressobin-v7|\
+globalscale,espressobin-v7-emmc)
+ ucidef_set_interfaces_lan_wan "lan0 lan1" "wan"
+ ;;
+marvell,armada-3720-db|\
+methode,udpu)
+ ucidef_set_interfaces_lan_wan "eth1" "eth0"
+ ;;
+*)
+ ucidef_set_interface_lan "eth0"
+ ;;
+esac
+
+board_config_flush
+
+exit 0
diff --git a/target/linux/mvebu/cortexa53/base-files/lib/preinit/82_uDPU b/target/linux/mvebu/cortexa53/base-files/lib/preinit/82_uDPU
new file mode 100644
index 0000000000..12bbfc3725
--- /dev/null
+++ b/target/linux/mvebu/cortexa53/base-files/lib/preinit/82_uDPU
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2014-2019 OpenWrt.org
+# Copyright (C) 2016 LEDE-Project.org
+#
+
+preinit_mount_udpu() {
+ . /lib/functions.sh
+ . /lib/upgrade/common.sh
+
+ case $(board_name) in
+ methode,udpu)
+ # Check which device is detected
+ [ -b "/dev/mmcblk0" ] && mmcdev="/dev/mmcblk0" || mmcdev="/dev/mmcblk1"
+
+ if [ -b "${mmcdev}p4" ]; then
+ mkdir /misc
+ mount -t f2fs ${mmcdev}p4 /misc
+ [ -f "/misc/$BACKUP_FILE" ] && {
+ echo "- Restoring configuration files -"
+ tar xzf "/misc/$BACKUP_FILE" -C /
+ rm -f "/misc/$BACKUP_FILE"
+ sync
+ }
+ [ -f "/misc/firmware/recovery.itb" ] && {
+ echo "- Updating /recovery partition -"
+ mkfs.ext4 -q ${mmcdev}p2 | echo y &> /dev/null
+ mkdir -p /tmp/recovery
+ mount ${mmcdev}p2 /tmp/recovery
+ cp /misc/firmware/recovery.itb /tmp/recovery
+ [ -f "/misc/firmware/boot.scr" ] && \
+ cp /misc/firmware/boot.scr /tmp/recovery
+ sync
+ umount /tmp/recovery
+ rm -rf /tmp/recovery
+
+ # Replace previous backup with the new one
+ [ -d "/misc/firmware_old" ] && rm -rf /misc/firmware_old
+ [ -d "/misc/firmware" ] && mv /misc/firmware /misc/firmware_old
+ }
+ fi
+
+ # Legacy support - if rootfs was booted, instruct u-boot to keep the current root dev
+ [ "$(df | grep /dev/root)" ] && fw_setenv root_ok '2'
+ ;;
+ esac
+}
+
+boot_hook_add preinit_main preinit_mount_udpu
diff --git a/target/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh
new file mode 100755
index 0000000000..cdf5933272
--- /dev/null
+++ b/target/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh
@@ -0,0 +1,52 @@
+#
+# Copyright (C) 2014-2016 OpenWrt.org
+# Copyright (C) 2016 LEDE-Project.org
+#
+
+RAMFS_COPY_BIN='fw_printenv fw_setenv'
+RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
+REQUIRE_IMAGE_METADATA=1
+
+platform_check_image() {
+ case "$(board_name)" in
+ globalscale,espressobin|\
+ globalscale,espressobin-emmc|\
+ globalscale,espressobin-v7|\
+ globalscale,espressobin-v7-emmc)
+ platform_check_image_sdcard "$1"
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+}
+
+platform_do_upgrade() {
+ case "$(board_name)" in
+ globalscale,espressobin|\
+ globalscale,espressobin-emmc|\
+ globalscale,espressobin-v7|\
+ globalscale,espressobin-v7-emmc)
+ platform_do_upgrade_sdcard "$1"
+ ;;
+ methode,udpu)
+ platform_do_upgrade_uDPU "$1"
+ ;;
+ *)
+ default_do_upgrade "$1"
+ ;;
+ esac
+}
+platform_copy_config() {
+ case "$(board_name)" in
+ globalscale,espressobin|\
+ globalscale,espressobin-emmc|\
+ globalscale,espressobin-v7|\
+ globalscale,espressobin-v7-emmc)
+ platform_copy_config_sdcard
+ ;;
+ methode,udpu)
+ platform_copy_config_uDPU
+ ;;
+ esac
+}
diff --git a/target/linux/mvebu/cortexa53/base-files/lib/upgrade/uDPU.sh b/target/linux/mvebu/cortexa53/base-files/lib/upgrade/uDPU.sh
new file mode 100644
index 0000000000..032c706605
--- /dev/null
+++ b/target/linux/mvebu/cortexa53/base-files/lib/upgrade/uDPU.sh
@@ -0,0 +1,156 @@
+udpu_check_emmc() {
+# uDPU uses combined ext4 and f2fs partitions.
+# partition layout:
+# 1. boot (ext4)
+# 2. recovery (ext4)
+# 3. rootfs (f2fs)
+# 4. misc (f2fs)
+
+ # Check which device is available, depending on the board revision
+ if [ -b "/dev/mmcblk1" ]; then
+ emmc_dev=/dev/mmcblk1
+ elif [ -b "/dev/mmcblk0" ]; then
+ emmc_dev=/dev/mmcblk0
+ else
+ echo "Cannot detect eMMC flash, aborting.."
+ exit 1
+ fi
+}
+
+udpu_part_prep() {
+ if [ "$(grep $1 /proc/mounts)" ]; then
+ mounted_part="$(grep $1 /proc/mounts | awk '{print $2}' | head -1)"
+ umount $mounted_part
+ [ "$(grep -wo $mounted_part /proc/mounts)" ] && umount -l $mounted_part
+ fi
+}
+
+udpu_do_part_check() {
+ local emmc_parts="1 2 3 4"
+ local part_valid="1"
+
+ # Check if the block devices exist
+ for num in ${emmc_parts}; do
+ [[ ! -b ${emmc_dev}p${num} ]] && part_valid="0"
+ done
+
+ # If partitions are missing create a new partition table
+ if [ "$part_valid" != "1" ]; then
+ printf "Invalid partition table, creating a new one\n"
+ printf "o\nn\np\n1\n\n+256M\nn\np\n2\n\n+256M\nn\np\n3\n\n+1536M\nn\np\n\n\nw\n" | fdisk -W always $emmc_dev > /dev/null 2>&1
+
+ # Format the /misc part right away as we will need it for the firmware
+ printf "Formating /misc partition, this make take a while..\n"
+ udpu_part_prep ${emmc_dev}p4
+ mkfs.f2fs -q -l misc ${emmc_dev}p4
+ [ $? -eq 0 ] && printf "/misc partition formated successfully\n" || printf "/misc partition formatting failed\n"
+
+ udpu_do_initial_setup
+ else
+ printf "Partition table looks ok\n"
+ fi
+}
+
+udpu_do_misc_prep() {
+ if [ ! "$(grep -wo /misc /proc/mounts)" ]; then
+ mkdir -p /misc
+ mount ${emmc_dev}p4 /misc
+
+ # If the mount fails, try to reformat partition
+ # Leaving possiblity for multiple iterations
+ if [ $? -ne 0 ]; then
+ printf "Error while mounting /misc, trying to reformat..\n"
+
+ format_count=0
+ while [ "$format_count" -lt "1" ]; do
+ udpu_part_prep ${emmc_dev}p4
+ mkfs.f2fs -q -l misc ${emmc_dev}p4
+ mount ${emmc_dev}p4 /misc
+ if [ $? -ne 0 ]; then
+ umount -l /misc
+ printf "Failed while mounting /misc\n"
+ format_count=$((format_count +1))
+ else
+ printf "Mounted /misc successfully\n"
+ break
+ fi
+ done
+ fi
+ fi
+}
+
+udpu_do_initial_setup() {
+ # Prepare /recovery parition
+ udpu_part_prep ${emmc_dev}p2
+ mkfs.ext4 -q ${emmc_dev}p2 | echo y &> /dev/null
+
+ # Prepare /boot partition
+ udpu_part_prep ${emmc_dev}p1
+ mkfs.ext4 -q ${emmc_dev}p1 | echo y &> /dev/null
+
+ # Prepare /root partition
+ printf "Formating /root partition, this may take a while..\n"
+ udpu_part_prep ${emmc_dev}p3
+ mkfs.f2fs -q -l rootfs ${emmc_dev}p3
+ [ $? -eq 0 ] && printf "/root partition reformated\n"
+}
+
+udpu_do_regular_upgrade() {
+ # Clean /boot partition - mfks.ext4 is not available in chroot
+ [ "$(grep -wo /boot /proc/mounts)" ] && umount /boot
+ mkdir -p /tmp/boot
+ mount ${emmc_dev}p1 /tmp/boot
+ rm -rf /tmp/boot/*
+
+ # Clean /root partition - mkfs.f2fs is not available in chroot
+ [ "$(grep -wo /dev/root /proc/mounts)" ] && umount /
+ mkdir -p /tmp/rootpart
+ mount ${emmc_dev}p3 /tmp/rootpart
+ rm -rf /tmp/rootpart/*
+}
+
+platform_do_upgrade_uDPU() {
+ udpu_check_emmc
+
+ # Prepare and extract firmware on /misc partition
+ udpu_do_misc_prep
+
+ [ -f "/misc/firmware" ] && rm -r /misc/firmware
+ mkdir -p /misc/firmware
+ tar xzf "$1" -C /misc/firmware/
+
+ udpu_do_regular_upgrade
+
+ printf "Updating /boot partition\n"
+ tar xzf /misc/firmware/boot.tgz -C /tmp/boot
+ [ $? -eq 0 ] && printf "/boot partition updated successfully\n" || printf "/boot partition update failed\n"
+ sync
+
+ printf "Updating /root partition\n"
+ tar xzf /misc/firmware/rootfs.tgz -C /tmp/rootpart
+ [ $? -eq 0 ] && printf "/root partition updated successfully\n" || printf "/root partition update failed\n"
+ sync
+
+ # Saving configuration files over sysupgrade
+ platform_copy_config_uDPU
+
+ # Remove tmp mounts
+ tmp_parts=$(grep "${emmc_dev}" /proc/mounts | awk '{print $2}')
+ for part in ${tmp_parts}; do
+ umount $part
+ # Force umount is necessary
+ [ "$(grep "${part}" /proc/mounts)" ] && umount -l $part
+ done
+
+ # Sysupgrade complains about /tmp and /dev, so we can detach them here
+ umount -l /tmp
+ umount -l /dev
+}
+
+platform_copy_config_uDPU() {
+ # Config is saved on the /misc partition and copied on the rootfs after the reboot
+ if [ -f "$UPGRADE_BACKUP" ]; then
+ cp -f "$UPGRADE_BACKUP" "/misc/$BACKUP_FILE"
+ sync
+ fi
+}