layerscape: add LX2160ARDB (Rev2.0 silicon) board support
[openwrt/openwrt.git] / target / linux / layerscape / base-files / lib / upgrade / platform.sh
index 633cbaf953c6ff30165ee2f676d2f99bdd476628..857be5a744b3c3290efa2b76256ec587007f49cd 100644 (file)
@@ -8,88 +8,28 @@ RAMFS_COPY_DATA="/etc/fw_env.config /var/lock/fw_printenv.lock"
 
 REQUIRE_IMAGE_METADATA=1
 
-platform_check_image_sdboot() {
-       local diskdev partdev diff
-
-       export_bootdevice && export_partdevice diskdev 0 || {
-               echo "Unable to determine upgrade device"
-               return 1
-       }
-
-       # get partitions table from boot device
-       get_partitions "/dev/$diskdev" bootdisk
-
-       # get partitions table from sysupgrade.bin
-       dd if="$1" of=/tmp/image.bs bs=512b count=1 > /dev/null 2>&1
-       sync
-       get_partitions /tmp/image.bs image
-
-       # compare tables
-       diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
-
-       rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
-
-       if [ -n "$diff" ]; then
-               echo "Partition layout has changed. Full image will be written."
-               ask_bool 0 "Abort" && exit 1
-               return 0
-       fi
-}
 platform_do_upgrade_sdboot() {
-       local diskdev partdev diff
+       local diskdev partdev parttype=ext4
+       local tar_file="$1"
+       local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
+       board_dir=${board_dir%/}
 
        export_bootdevice && export_partdevice diskdev 0 || {
                echo "Unable to determine upgrade device"
                return 1
        }
 
-       if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
-               # get partitions table from boot device
-               get_partitions "/dev/$diskdev" bootdisk
-
-               # get partitions table from sysupgrade.bin
-               dd if="$1" of=/tmp/image.bs bs=512b count=1 > /dev/null 2>&1
-               sync
-               get_partitions /tmp/image.bs image
-
-               # compare tables
-               diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
-       else
-               diff=1
-       fi
-
-       if [ -n "$diff" ]; then
-               dd if="$1" of="/dev/$diskdev" bs=1024 count=4 > /dev/null 2>&1
-               echo "Writing image to /dev/$diskdev..."
-               dd if="$1" of="/dev/$diskdev" bs=1024 skip=15360 seek=15360 > /dev/null 2>&1
-               sync
-
-               # Separate removal and addtion is necessary; otherwise, partition 1
-               # will be missing if it overlaps with the old partition 2
-               partx -d - "/dev/$diskdev"
-               partx -a - "/dev/$diskdev"
-
-               return 0
+       if export_partdevice partdev 1; then
+               mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt 2>&1
+               echo "Writing kernel..."
+               tar xf $tar_file ${board_dir}/kernel -O > /mnt/fitImage
+               umount /mnt
        fi
 
-       # write dtb
-       echo "Writing dtb to /dev/$diskdev..."
-       dd if="$1" of="/dev/$diskdev" bs=1024 skip=15360 seek=15360 count=1024 > /dev/null 2>&1
-       # write kernel image
-       echo "Writing kernel to /dev/$diskdev..."
-       dd if="$1" of="/dev/$diskdev" bs=1024 skip=16384 seek=16384 count=16384 > /dev/null 2>&1
-       sync
-
-       # iterate over each partition from the image and write it to the boot disk
-       while read part start size; do
-               if export_partdevice partdev $part; then
-                       echo "Writing image to /dev/$partdev..."
-                       dd if="$1" of="/dev/$partdev" bs=512 skip="$start" count="$size" > /dev/null 2>&1
-                       sync
-               else
-                       echo "Unable to find partition $part device, skipped."
-               fi
-       done < /tmp/partmap.image
+       echo "Erasing rootfs..."
+       dd if=/dev/zero of=/dev/mmcblk0p2 bs=1M > /dev/null 2>&1
+       echo "Writing rootfs..."
+       tar xf $tar_file ${board_dir}/root -O  | dd of=/dev/mmcblk0p2 bs=512k > /dev/null 2>&1
 
 }
 platform_do_upgrade_traverse_nandubi() {
@@ -109,15 +49,37 @@ platform_do_upgrade_traverse_nandubi() {
        nand_do_upgrade "$1" || (echo "Upgrade failed, setting bootsys ${bootsys}" && fw_setenv bootsys $bootsys)
 
 }
-platform_copy_config() {
-       local partdev parttype=ext4
+platform_copy_config_sdboot() {
+       local diskdev partdev parttype=ext4
+
+       export_bootdevice && export_partdevice diskdev 0 || {
+               echo "Unable to determine upgrade device"
+               return 1
+       }
 
        if export_partdevice partdev 1; then
-               mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt
+               mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt 2>&1
+               echo "Saving config backup..."
                cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
                umount /mnt
        fi
 }
+platform_copy_config() {
+       local board=$(board_name)
+
+       case "$board" in
+       fsl,ls1012a-frwy-sdboot | \
+       fsl,ls1021a-iot-sdboot | \
+       fsl,ls1021a-twr-sdboot | \
+       fsl,ls1043a-rdb-sdboot | \
+       fsl,ls1046a-frwy-sdboot | \
+       fsl,ls1046a-rdb-sdboot | \
+       fsl,ls1088a-rdb-sdboot | \
+       fsl,lx2160a-rdb-sdboot)
+               platform_copy_config_sdboot
+               ;;
+       esac
+}
 platform_check_image() {
        local board=$(board_name)
 
@@ -128,20 +90,22 @@ platform_check_image() {
                return $?
                ;;
        fsl,ls1012a-frdm | \
+       fsl,ls1012a-frwy-sdboot | \
        fsl,ls1012a-rdb | \
+       fsl,ls1021a-iot-sdboot | \
        fsl,ls1021a-twr | \
-       fsl,ls1043a-rdb | \
-       fsl,ls1046a-rdb | \
-       fsl,ls1088a-rdb | \
-       fsl,ls2088a-rdb)
-               return 0
-               ;;
-       fsl,ls1012a-frwy-sdboot | \
        fsl,ls1021a-twr-sdboot | \
+       fsl,ls1043a-rdb | \
        fsl,ls1043a-rdb-sdboot | \
+       fsl,ls1046a-frwy | \
+       fsl,ls1046a-frwy-sdboot | \
+       fsl,ls1046a-rdb | \
        fsl,ls1046a-rdb-sdboot | \
-       fsl,ls1088a-rdb-sdboot)
-               platform_check_image_sdboot "$1"
+       fsl,ls1088a-rdb | \
+       fsl,ls1088a-rdb-sdboot | \
+       fsl,ls2088a-rdb | \
+       fsl,lx2160a-rdb | \
+       fsl,lx2160a-rdb-sdboot)
                return 0
                ;;
        *)
@@ -167,17 +131,22 @@ platform_do_upgrade() {
        fsl,ls1012a-rdb | \
        fsl,ls1021a-twr | \
        fsl,ls1043a-rdb | \
+       fsl,ls1046a-frwy | \
        fsl,ls1046a-rdb | \
        fsl,ls1088a-rdb | \
-       fsl,ls2088a-rdb)
+       fsl,ls2088a-rdb | \
+       fsl,lx2160a-rdb)
                PART_NAME=firmware
                default_do_upgrade "$1"
                ;;
        fsl,ls1012a-frwy-sdboot | \
+       fsl,ls1021a-iot-sdboot | \
        fsl,ls1021a-twr-sdboot | \
        fsl,ls1043a-rdb-sdboot | \
+       fsl,ls1046a-frwy-sdboot | \
        fsl,ls1046a-rdb-sdboot | \
-       fsl,ls1088a-rdb-sdboot)
+       fsl,ls1088a-rdb-sdboot | \
+       fsl,lx2160a-rdb-sdboot)
                platform_do_upgrade_sdboot "$1"
                return 0
                ;;