[OpenWrt-Devel] [PATCH 8/8] base-files: add basic support for Linksys EA8500
Adrian Panella
ianchi74 at outlook.com
Thu Mar 31 22:02:45 EDT 2016
From 48ad89dfe88645993a1e5cf553b141c9c3d01414 Mon Sep 17 00:00:00 2001
From: Adrian Panella <ianchi74 at outlook.com>
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 at eth1" "5:wan" "0 at 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 at eth0" "5:wan" "0t at 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
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list