aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq40xx/base-files
diff options
context:
space:
mode:
authorJohn Crispin <john@phrozen.org>2018-02-21 20:40:50 +0100
committerMathias Kresin <dev@kresin.me>2018-03-14 19:04:50 +0100
commit54b275c8ed3ad20c447fd46deec83384822ac79d (patch)
tree4198c9f77e467b316940cb78297d3030e67d67ea /target/linux/ipq40xx/base-files
parentb7f115f22a9d79bd45bfe27cfb8d491dac49feb4 (diff)
downloadupstream-54b275c8ed3ad20c447fd46deec83384822ac79d.tar.gz
upstream-54b275c8ed3ad20c447fd46deec83384822ac79d.tar.bz2
upstream-54b275c8ed3ad20c447fd46deec83384822ac79d.zip
ipq40xx: add target
Signed-off-by: Christian Lamparter <chunkeey@gmail.com> Signed-off-by: Mathias Kresin <dev@kresin.me> Signed-off-by: John Crispin <john@phrozen.org>
Diffstat (limited to 'target/linux/ipq40xx/base-files')
-rwxr-xr-xtarget/linux/ipq40xx/base-files/etc/board.d/01_leds28
-rwxr-xr-xtarget/linux/ipq40xx/base-files/etc/board.d/02_network31
-rwxr-xr-xtarget/linux/ipq40xx/base-files/etc/diag.sh43
-rw-r--r--target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata62
-rw-r--r--target/linux/ipq40xx/base-files/etc/inittab4
-rw-r--r--target/linux/ipq40xx/base-files/lib/upgrade/openmesh.sh110
-rw-r--r--target/linux/ipq40xx/base-files/lib/upgrade/platform.sh27
7 files changed, 305 insertions, 0 deletions
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/01_leds b/target/linux/ipq40xx/base-files/etc/board.d/01_leds
new file mode 100755
index 0000000000..31c6e32a06
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/etc/board.d/01_leds
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+
+. /lib/functions/uci-defaults.sh
+
+board_config_update
+
+board=$(board_name)
+boardname="${board##*,}"
+
+case "$board" in
+avm,fritzbox-4040)
+ ucidef_set_led_wlan "wlan" "WLAN" "fritz4040:green:wlan" "phy0tpt" "phy1tpt"
+ ucidef_set_led_netdev "wan" "WAN" "fritz4040:green:wan" "eth1"
+ ucidef_set_led_switch "lan" "LAN" "fritz4040:green:lan" "switch0" "0x1e"
+ ;;
+glinet,gl-b1300)
+ ucidef_set_led_wlan "wlan" "WLAN" "${boardname}:green:wlan" "phy0tpt"
+ ;;
+*)
+ ;;
+esac
+
+board_config_flush
+
+exit 0
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
new file mode 100755
index 0000000000..37f81a398a
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# Copyright (c) 2015 The Linux Foundation. All rights reserved.
+# Copyright (c) 2011-2015 OpenWrt.org
+#
+
+. /lib/functions/uci-defaults.sh
+. /lib/functions/system.sh
+
+board_config_update
+
+board=$(board_name)
+
+case "$board" in
+avm,fritzbox-4040)
+ ucidef_set_interfaces_lan_wan "eth0" "eth1"
+ ucidef_add_switch "switch0" \
+ "0u@eth0" "1:lan" "2:lan" "3:lan" "4:lan"
+ ;;
+glinet,gl-b1300 |\
+openmesh,a42)
+ ucidef_set_interfaces_lan_wan "eth1" "eth0"
+ ;;
+*)
+ echo "Unsupported hardware. Network interfaces not intialized"
+ ;;
+esac
+
+board_config_flush
+
+exit 0
diff --git a/target/linux/ipq40xx/base-files/etc/diag.sh b/target/linux/ipq40xx/base-files/etc/diag.sh
new file mode 100755
index 0000000000..4cfe6325f2
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/etc/diag.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+. /lib/functions/leds.sh
+
+boot="$(get_dt_led boot)"
+failsafe="$(get_dt_led failsafe)"
+running="$(get_dt_led running)"
+upgrade="$(get_dt_led upgrade)"
+
+set_state() {
+ status_led="$boot"
+
+ case "$1" in
+ preinit)
+ status_led_blink_preinit
+ ;;
+ failsafe)
+ status_led_off
+ [ -n "$running" ] && {
+ status_led="$running"
+ status_led_off
+ }
+ status_led="$failsafe"
+ status_led_blink_failsafe
+ ;;
+ preinit_regular)
+ status_led_blink_preinit_regular
+ ;;
+ upgrade)
+ [ -n "$running" ] && {
+ status_led="$upgrade"
+ status_led_blink_preinit_regular
+ }
+ ;;
+ done)
+ status_led_off
+ [ -n "$running" ] && {
+ status_led="$running"
+ status_led_on
+ }
+ ;;
+ esac
+}
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
new file mode 100644
index 0000000000..33ea9b426c
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+ath10kcal_die() {
+ echo "ath10cal: " "$*"
+ exit 1
+}
+
+ath10kcal_extract() {
+ local part=$1
+ local offset=$2
+ local count=$3
+ local mtd
+
+ mtd=$(find_mtd_chardev $part)
+ [ -n "$mtd" ] || \
+ ath10kcal_die "no mtd device found for partition $part"
+
+ dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
+ ath10kcal_die "failed to extract calibration data from $mtd"
+}
+
+[ -e /lib/firmware/$FIRMWARE ] && exit 0
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+board=$(board_name)
+
+
+case "$FIRMWARE" in
+"ath10k/pre-cal-ahb-a000000.wifi.bin")
+ case "$board" in
+ avm,fritzbox-4040)
+ /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
+ ;;
+ glinet,gl-b1300 |\
+ qcom,ap-dk01.1-c1)
+ ath10kcal_extract "ART" 4096 12064
+ ;;
+ openmesh,a42)
+ ath10kcal_extract "0:ART" 4096 12064
+ ;;
+ esac
+ ;;
+"ath10k/pre-cal-ahb-a800000.wifi.bin")
+ case "$board" in
+ avm,fritzbox-4040)
+ /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
+ ;;
+ glinet,gl-b1300 |\
+ qcom,ap-dk01.1-c1)
+ ath10kcal_extract "ART" 20480 12064
+ ;;
+ openmesh,a42)
+ ath10kcal_extract "0:ART" 20480 12064
+ ;;
+ esac
+ ;;
+*)
+ exit 1
+ ;;
+esac
diff --git a/target/linux/ipq40xx/base-files/etc/inittab b/target/linux/ipq40xx/base-files/etc/inittab
new file mode 100644
index 0000000000..809bba5e5f
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/etc/inittab
@@ -0,0 +1,4 @@
+# Copyright (c) 2013 The Linux Foundation. All rights reserved.
+::sysinit:/etc/init.d/rcS S boot
+::shutdown:/etc/init.d/rcS K shutdown
+ttyMSM0::askfirst:/usr/libexec/login.sh
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/openmesh.sh b/target/linux/ipq40xx/base-files/lib/upgrade/openmesh.sh
new file mode 100644
index 0000000000..71ab247ead
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/openmesh.sh
@@ -0,0 +1,110 @@
+# The U-Boot loader of the OpenMesh devices requires image sizes and
+# checksums to be provided in the U-Boot environment.
+# The OpenMesh devices come with 2 main partitions - while one is active
+# sysupgrade will flash the other. The boot order is changed to boot the
+# newly flashed partition. If the new partition can't be booted due to
+# upgrade failures the previously used partition is loaded.
+
+platform_do_upgrade_openmesh() {
+ local tar_file="$1"
+ local restore_backup
+ local primary_kernel_mtd
+
+ local setenv_script="/tmp/fw_env_upgrade"
+
+ local kernel_mtd="$(find_mtd_index $PART_NAME)"
+ local kernel_offset="$(cat /sys/class/mtd/mtd${kernel_mtd}/offset)"
+ local total_size="$(cat /sys/class/mtd/mtd${kernel_mtd}/size)"
+
+ # detect to which flash region the new image is written to.
+ #
+ # 1. check what is the mtd index for the first flash region on this
+ # device
+ # 2. check if the target partition ("inactive") has the mtd index of
+ # the first flash region
+ #
+ # - when it is: the new bootseq will be 1,2 and the first region is
+ # modified
+ # - when it isnt: bootseq will be 2,1 and the second region is
+ # modified
+ #
+ # The detection has to be done via the hardcoded mtd partition because
+ # the current boot might be done with the fallback region. Let us
+ # assume that the current bootseq is 1,2. The bootloader detected that
+ # the image in flash region 1 is corrupt and thus switches to flash
+ # region 2. The bootseq in the u-boot-env is now still the same and
+ # the sysupgrade code can now only rely on the actual mtd indexes and
+ # not the bootseq variable to detect the currently booted flash
+ # region/image.
+ #
+ # In the above example, an implementation which uses bootseq ("1,2") to
+ # detect the currently booted image would assume that region 1 is booted
+ # and then overwrite the variables for the wrong flash region (aka the
+ # one which isn't modified). This could result in a device which doesn't
+ # boot anymore to Linux until it was reflashed with ap51-flash.
+ local next_boot_part="1"
+ case "$(board_name)" in
+ openmesh,a42)
+ primary_kernel_mtd=8
+ ;;
+ *)
+ echo "failed to detect primary kernel mtd partition for board"
+ return 1
+ ;;
+ esac
+ [ "$kernel_mtd" = "$primary_kernel_mtd" ] || next_boot_part="2"
+
+ local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
+ board_dir=${board_dir%/}
+
+ local kernel_length=$(tar xf $tar_file ${board_dir}/kernel -O | wc -c)
+ local rootfs_length=$(tar xf $tar_file ${board_dir}/root -O | wc -c)
+ # rootfs without EOF marker
+ rootfs_length=$((rootfs_length-4))
+
+ local kernel_md5=$(tar xf $tar_file ${board_dir}/kernel -O | md5sum); kernel_md5="${kernel_md5%% *}"
+ # md5 checksum of rootfs with EOF marker
+ local rootfs_md5=$(tar xf $tar_file ${board_dir}/root -O | dd bs=1 count=$rootfs_length | md5sum); rootfs_md5="${rootfs_md5%% *}"
+
+ #
+ # add tar support to get_image() to use default_do_upgrade() instead?
+ #
+
+ # take care of restoring a saved config
+ [ "$SAVE_CONFIG" -eq 1 ] && restore_backup="${MTD_CONFIG_ARGS} -j ${CONF_TAR}"
+
+ # write concatinated kernel + rootfs to flash
+ tar xf $tar_file ${board_dir}/kernel ${board_dir}/root -O | \
+ mtd $restore_backup write - $PART_NAME
+
+ # prepare new u-boot env
+ if [ "$next_boot_part" = "1" ]; then
+ echo "bootseq 1,2" > $setenv_script
+ else
+ echo "bootseq 2,1" > $setenv_script
+ fi
+
+ printf "kernel_size_%i 0x%08x\n" $next_boot_part $kernel_length >> $setenv_script
+ printf "vmlinux_start_addr 0x%08x\n" ${kernel_offset} >> $setenv_script
+ printf "vmlinux_size 0x%08x\n" ${kernel_length} >> $setenv_script
+ printf "vmlinux_checksum %s\n" ${kernel_md5} >> $setenv_script
+
+ printf "rootfs_size_%i 0x%08x\n" $next_boot_part $((total_size-kernel_length)) >> $setenv_script
+ printf "rootfs_start_addr 0x%08x\n" $((kernel_offset+kernel_length)) >> $setenv_script
+ printf "rootfs_size 0x%08x\n" ${rootfs_length} >> $setenv_script
+ printf "rootfs_checksum %s\n" ${rootfs_md5} >> $setenv_script
+
+ # store u-boot env changes
+ fw_setenv -s $setenv_script || {
+ echo "failed to update U-Boot environment"
+ return 1
+ }
+}
+
+# create /var/lock for the lock "fw_setenv.lock" of fw_setenv
+# the rest is copied using ipq806x's RAMFS_COPY_BIN and RAMFS_COPY_DATA
+platform_add_ramfs_ubootenv()
+{
+ mkdir -p $RAM_ROOT/var/lock
+}
+append sysupgrade_pre_upgrade platform_add_ramfs_ubootenv
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
new file mode 100644
index 0000000000..defa04d880
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
@@ -0,0 +1,27 @@
+PART_NAME=firmware
+REQUIRE_IMAGE_METADATA=1
+
+RAMFS_COPY_BIN='fw_printenv fw_setenv'
+RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
+
+platform_check_image() {
+ return 0;
+}
+
+platform_do_upgrade() {
+ case "$(board_name)" in
+ openmesh,a42)
+ PART_NAME="inactive"
+ platform_do_upgrade_openmesh "$ARGV"
+ ;;
+ *)
+ default_do_upgrade "$ARGV"
+ ;;
+ esac
+}
+
+blink_led() {
+ . /etc/diag.sh; set_state upgrade
+}
+
+append sysupgrade_pre_upgrade blink_led