From 48ad89dfe88645993a1e5cf553b141c9c3d01414 Mon Sep 17 00:00:00 2001
From: Adrian Panella <[email protected]>
Date: Thu, 17 Mar 2016 22:08:42 -0600
Subject: [PATCH 06/15] base-files: add basic support for Linksys EA8500

---
 .../linux/ipq806x/base-files/etc/board.d/01_leds   |  2 +
 .../ipq806x/base-files/etc/board.d/02_network      |  8 ++++++
 .../ipq806x/base-files/etc/init.d/linksys_recovery | 20 +++++
 target/linux/ipq806x/base-files/lib/ipq806x.sh     |  3 +
.../ipq806x/base-files/lib/upgrade/linksys.sh | 88 ++++++++++++++++++++++
 .../ipq806x/base-files/lib/upgrade/platform.sh     | 19 ++++-
 .../ipq806x/base-files/lib/preinit/04_caldata      | 32 ++++++++++++
 6 files changed, 170 insertions(+), 2 deletions(-)
create mode 100755 target/linux/ipq806x/base-files/etc/init.d/linksys_recovery
 create mode 100644 target/linux/ipq806x/base-files/lib/upgrade/linksys.sh
 create mode 100644 target/linux/ipq806x/base-files/lib/preinit/04_caldata

diff --git a/target/linux/ipq806x/base-files/etc/board.d/01_leds b/target/linux/ipq806x/base-files/etc/board.d/01_leds
index b32c1cc..f57453e 100755
--- a/target/linux/ipq806x/base-files/etc/board.d/01_leds
+++ b/target/linux/ipq806x/base-files/etc/board.d/01_leds
@@ -20,6 +20,8 @@ r7500)
     ucidef_set_led_default "wps" "WPS" "r7500:white:wps" "0"
     ucidef_set_led_default "rfkill" "rfkill" "r7500:white:rfkill" "0"
     ;;
+ea8500)
+    ucidef_set_led_default "wps" "WPS" "ea8500:green:wps" "0"
 *)
     ;;
 esac
diff --git a/target/linux/ipq806x/base-files/etc/board.d/02_network b/target/linux/ipq806x/base-files/etc/board.d/02_network
index 55d78cd..8465919 100755
--- a/target/linux/ipq806x/base-files/etc/board.d/02_network
+++ b/target/linux/ipq806x/base-files/etc/board.d/02_network
@@ -6,6 +6,7 @@

 . /lib/functions/uci-defaults.sh
 . /lib/ipq806x.sh
+. /lib/functions/system.sh

 board_config_update

@@ -24,8 +25,15 @@ db149)
         "1:lan" "2:lan" "3:lan" "4:lan" "6@eth1" "5:wan" "0@eth0"
     ;;
 ea8500)
+
+    hw_mac_addr=$(mtd_get_mac_ascii devinfo hw_mac_addr)
+
     ucidef_add_switch "switch0" \
         "1:lan" "2:lan" "3:lan" "4:lan" "0t@eth0" "5:wan" "0t@eth0"
+
+    ucidef_set_interface_macaddr "lan" "$hw_mac_addr"
+    ucidef_set_interface_macaddr "wan" "$hw_mac_addr"
+
     ;;
 *)
     echo "Unsupported hardware. Network interfaces not intialized"
diff --git a/target/linux/ipq806x/base-files/etc/init.d/linksys_recovery b/target/linux/ipq806x/base-files/etc/init.d/linksys_recovery
new file mode 100755
index 0000000..b9ea004
--- /dev/null
+++ b/target/linux/ipq806x/base-files/etc/init.d/linksys_recovery
@@ -0,0 +1,20 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2015 OpenWrt.org
+
+START=97
+boot() {
+. /lib/functions.sh
+. /lib/ipq806x.sh
+
+case $(ipq806x_board_name) in
+    ea8500)
+        # make sure auto_recovery in uboot is always on
+        AUTO_RECOVERY_ENA="`fw_printenv -n auto_recovery`"
+        if [ "$AUTO_RECOVERY_ENA" != "yes" ] ; then
+            fw_setenv auto_recovery yes
+        fi
+        # reset the boot counter
+        mtd resetbc s_env
+        ;;
+esac
+}
diff --git a/target/linux/ipq806x/base-files/lib/ipq806x.sh b/target/linux/ipq806x/base-files/lib/ipq806x.sh
index db22708..fcc5a43 100644
--- a/target/linux/ipq806x/base-files/lib/ipq806x.sh
+++ b/target/linux/ipq806x/base-files/lib/ipq806x.sh
@@ -26,6 +26,9 @@ ipq806x_board_detect() {
     *"R7500")
         name="r7500"
         ;;
+    *"Linksys EA8500"*)
+        name="ea8500"
+        ;;
     esac

     [ -z "$name" ] && name="unknown"
diff --git a/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh b/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh
new file mode 100644
index 0000000..ca5161a
--- /dev/null
+++ b/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh
@@ -0,0 +1,88 @@
+#
+# Copyright (C) 2014-2015 OpenWrt.org
+#
+
+linksys_get_target_firmware() {
+    cur_boot_part=`/usr/sbin/fw_printenv -n boot_part`
+    target_firmware=""
+    if [ "$cur_boot_part" = "1" ]
+    then
+        # current primary boot - update alt boot
+        target_firmware="kernel2"
+        fw_setenv boot_part 2
+        #In EA8500 bootcmd is always "bootipq", so don't change
+        #fw_setenv bootcmd "run altnandboot"
+    elif [ "$cur_boot_part" = "2" ]
+    then
+        # current alt boot - update primary boot
+        target_firmware="kernel1"
+        fw_setenv boot_part 1
+        #In EA8500 bootcmd is always "bootipq", so don't change
+        #fw_setenv bootcmd "run nandboot"
+    fi
+
+    # re-enable recovery so we get back if the new firmware is broken
+    fw_setenv auto_recovery yes
+
+    echo "$target_firmware"
+}
+
+linksys_get_root_magic() {
+ (get_image "$@" | dd skip=786432 bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2>/dev/null
+}
+
+platform_do_upgrade_linksys() {
+    local magic_long="$(get_magic_long "$1")"
+
+    mkdir -p /var/lock
+    local part_label="$(linksys_get_target_firmware)"
+    touch /var/lock/fw_printenv.lock
+
+    if [ ! -n "$part_label" ]
+    then
+        echo "cannot find target partition"
+        exit 1
+    fi
+
+    local target_mtd=$(find_mtd_part $part_label)
+
+    [ "$magic_long" = "73797375" ] && {
+        CI_KERNPART="$part_label"
+        if [ "$part_label" = "kernel1" ]
+        then
+            CI_UBIPART="rootfs1"
+        else
+            CI_UBIPART="rootfs2"
+        fi
+
+        nand_upgrade_tar "$1"
+    }
+    [ "$magic_long" = "27051956" ] && {
+        # check firmwares' rootfs types
+        local target_mtd=$(find_mtd_part $part_label)
+        local oldroot="$(linksys_get_root_magic $target_mtd)"
+        local newroot="$(linksys_get_root_magic "$1")"
+
+        if [ "$newroot" = "55424923" -a "$oldroot" = "55424923" ]
+        # we're upgrading from a firmware with UBI to one with UBI
+        then
+            # erase everything to be safe
+            mtd erase $part_label
+            get_image "$1" | mtd -n write - $part_label
+        else
+            get_image "$1" | mtd write - $part_label
+        fi
+    }
+}
+
+linksys_preupgrade() {
+ export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/sbin/fw_printenv /usr/sbin/fw_setenv"
+    export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /bin/mkdir /bin/touch"
+ export RAMFS_COPY_DATA="${RAMFS_COPY_DATA} /etc/fw_env.config /var/lock/fw_printenv.lock"
+
+    [ -f /tmp/sysupgrade.tgz ] && {
+        cp /tmp/sysupgrade.tgz /tmp/syscfg/sysupgrade.tgz
+    }
+}
+
+append sysupgrade_pre_upgrade linksys_preupgrade
diff --git a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
index 542b5ce..f155572 100644
--- a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
@@ -8,7 +8,8 @@ platform_check_image() {
     case "$board" in
     ap148 |\
     d7800 |\
-    r7500)
+    r7500 |\
+    ea8500)
         nand_do_platform_check $board $1
         return $?;
         ;;
@@ -26,7 +27,21 @@ platform_pre_upgrade() {
     r7500)
         nand_do_upgrade "$1"
         ;;
+    ea8500)
+        linksys_preupgrade "$1"
+        ;;
     esac
 }

-# use default for platform_do_upgrade()
+platform_do_upgrade() {
+    local board=$(ipq806x_board_name)
+
+    case "$board" in
+    ea8500)
+        platform_do_upgrade_linksys "$ARGV"
+        ;;
+    *)
+        default_do_upgrade "$ARGV"
+        ;;
+    esac
+}
diff --git a/target/linux/ipq806x/base-files/lib/preinit/04_caldata b/target/linux/ipq806x/base-files/lib/preinit/04_caldata
new file mode 100644
index 0000000..0cc89a0
--- /dev/null
+++ b/target/linux/ipq806x/base-files/lib/preinit/04_caldata
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+
+do_ath10k_caldata() {
+
+    . /lib/ipq806x.sh
+    . /lib/functions.sh
+    . /lib/functions/system.sh
+
+    board=$(ipq806x_board_name)
+    DIR=/lib/firmware
+
+    case $board in
+        ea8500)
+            hw_mac_addr=$(mtd_get_mac_ascii devinfo hw_mac_addr)
+
+            FIRMWARE="ath10k/cal-pci-0000:01:00.0.bin"
+ [ -f $DIR/$FIRMWARE ] || caldata -i art -o 0x1000 -s 0x4000 -a $hw_mac_addr -f $DIR/$FIRMWARE
+
+            FIRMWARE="ath10k/cal-pci-0001:01:00.0.bin"
+ [ -f $DIR/$FIRMWARE ] || caldata -i art -o 0x5000 -s 0x4000 -a $hw_mac_addr -f $DIR/$FIRMWARE
+            ;;
+
+        *)
+            exit 1
+            ;;
+    esac
+}
+
+boot_hook_add preinit_mount_root do_ath10k_caldata
--
1.9.1
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to