ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/target/linux/mmp/base-files/sbin/464xlat_cfg.sh b/target/linux/mmp/base-files/sbin/464xlat_cfg.sh
new file mode 100755
index 0000000..8b5e889
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/464xlat_cfg.sh
@@ -0,0 +1,90 @@
+#!/bin/sh
+# para 1 add/del/bypass --- para 2&3&4 needed only in add
+# para 2 cid --- translate specific skb from v4 to v6
+# para 3 local v4 addr --- default is 192.0.0.1/32 if not assign
+# para 4 remote v6 prefix --- default is 64:ff9b::/96 if not assign
+
+network_cfg() {
+ if [ "$PIPE" == "1" ]; then
+ uci set network.lan.ipaddr=$gw
+ uci set network.lan.netmask=255.255.255.0
+ uci commit network
+ /etc/init.d/network reload
+ option=`uci get dhcp.lan.dhcp_option`
+ for i in $option
+ do
+ uci del_list dhcp.lan.dhcp_option="$i"
+ done
+ uci set dhcp.lan.start=$host
+ uci set dhcp.lan.limit=1
+ uci add_list dhcp.lan.dhcp_option=3,$gw
+ uci add_list dhcp.lan.dhcp_option=6,8.8.8.8,114.114.114.114
+ uci add_list dhcp.lan.dhcp_option=1,255.255.255.0
+ uci commit dhcp
+ /etc/init.d/dnsmasq reload
+ else
+ ifconfig $iface $ipaddr
+ ip route add default dev $iface
+ fi
+}
+
+if [ -d /sys/kernel/debug/tel/psd/data-pathv1 ]; then
+ psd_ver=data-pathv1
+elif [ -d /sys/kernel/debug/tel/psd/data-pathv3 ]; then
+ psd_ver=data-pathv3
+else
+ echo "464xlat:wrong datapath version" > /dev/kmsg
+ exit 0
+fi
+
+if [ $1 == "del" ]; then
+ echo del nat46 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
+ exit 0
+fi
+
+if [ $1 == "bypass" ]; then
+ echo 1 > /sys/kernel/debug/tel/psd/$psd_ver/bypass_nat46
+ exit 0
+fi
+
+[ $1 == "add" ] || exit 0
+
+if [ -z $3 ]; then
+ ipaddr=192.0.0.1
+else
+ ipaddr=$3
+fi
+
+if [ -z $4 ]; then
+ remote=64:ff9b::/96
+else
+ remote=$4
+fi
+
+iface=ccinet$2
+
+PIPE=`uci get cmdline.PIPE 2> /dev/null`
+if [ "$PIPE" == "1" ]; then
+ host=`echo $ipaddr | awk -F "." '{print $4}'`
+ gw_host=$((255 - $((host)) ))
+ net=`echo $ipaddr | awk '{split($ipaddr, a, "."); print a[1]"."a[2]"."a[3]}'`
+ gw=$net.$gw_host
+ network_cfg
+ echo "464xlat:ver=$psd_ver,cid=$2,local.v4=$ipaddr,remote.v6=$remote,pipe=$PIPE" > /dev/kmsg
+ local_v6=`cat /sys/kernel/mpipe/devices/$iface/gb6addr`
+ echo $ipaddr > /sys/kernel/mpipe/devices/$iface/ipaddr
+ echo 1 > /sys/kernel/mpipe/devices/$iface/up
+else
+ PIPE=0
+ network_cfg
+ local_v6=`ifconfig ccinet0 | grep Global | awk '{print $3}' | awk -F "/" '{print $1}'`
+ echo "464xlat:ver=$psd_ver,cid=$2,local.v4=$ipaddr,remote.v6=$remote,pipe=$PIPE" > /dev/kmsg
+fi
+
+echo add nat46 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
+echo config nat46 local.v4 $ipaddr/32 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
+echo config nat46 local.v6 $local_v6/96 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
+echo config nat46 local.style RFC6052 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
+echo config nat46 remote.v6 $remote | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
+echo config nat46 remote.style RFC6052 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
+
diff --git a/target/linux/mmp/base-files/sbin/80_mount_root b/target/linux/mmp/base-files/sbin/80_mount_root
new file mode 100755
index 0000000..193fd6a
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/80_mount_root
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+do_mount_root() {
+ #mount_root
+ boot_run_hook preinit_mount_root
+ [ -f /sysupgrade.tgz ] && {
+ echo "- config restore -"
+ cd /
+ mv sysupgrade.tgz /tmp
+ tar xzf /tmp/sysupgrade.tgz
+ rm -f /tmp/sysupgrade.tgz
+ sync
+ }
+}
+
+[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main do_mount_root
diff --git a/target/linux/mmp/base-files/sbin/cmdline2uci b/target/linux/mmp/base-files/sbin/cmdline2uci
new file mode 100755
index 0000000..60d7ad2
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/cmdline2uci
@@ -0,0 +1,24 @@
+#!/bin/sh
+#This script parse /proc/cmdline and set "cmdline" UCI
+
+UCI_TMP_DIR=/var/config
+UCI_FILE=cmdline
+mkdir -p $UCI_TMP_DIR
+touch $UCI_TMP_DIR/$UCI_FILE
+
+CMDLINE=/proc/cmdline
+CMDLINE="$(cat "$CMDLINE" | tr -s " ")"
+COUNTER=1
+CMD=`echo "$CMDLINE" | cut -d " " -f$COUNTER`
+
+while [ -n "$CMD" ]; do
+ KEY=`echo $CMD | cut -d "=" -f1`
+ VALUE=`echo $CMD | cut -d "=" -f2`
+ # If KEY contains "." the uci set will fail
+ uci -c $UCI_TMP_DIR set $UCI_FILE.$KEY=$VALUE 2> /dev/null
+ let COUNTER+=1
+ CMD=`echo "$CMDLINE" | cut -d " " -f$COUNTER`
+done
+
+uci -c $UCI_TMP_DIR commit $UCI_FILE
+mv $UCI_TMP_DIR/$UCI_FILE /etc/config/$UCI_FILE
diff --git a/target/linux/mmp/base-files/sbin/dvc_update_volt.sh b/target/linux/mmp/base-files/sbin/dvc_update_volt.sh
new file mode 100644
index 0000000..6df23de
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/dvc_update_volt.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+volt_step=2
+
+soc_is_asr1901=0
+
+if cat /etc/mversion | grep asr1901 > /dev/null
+then
+ echo "asr1901" > /dev/kmsg
+ pmic_dvl0_reg=0x16
+ pmic_dvl1_reg=0x25
+ pmic_dvl2_reg=0x18
+ pmic_dvl3_reg=0x19
+ soc_is_asr1901=1
+else
+ pmic_ver=`i2cget -y -f 2 0x31 0x0`
+ if [ "$pmic_ver" == "0x12" -o "$pmic_ver" == "0x13" ]
+ then
+ echo "pmic is pm802" > /dev/kmsg
+ pmic_dvl0_reg=0x29
+ pmic_dvl1_reg=0x2a
+ pmic_dvl2_reg=0x2b
+ pmic_dvl3_reg=0x2c
+ else
+ echo "pmic is pm802s or pm803 " > /dev/kmsg
+ pmic_dvl0_reg=0x2b
+ pmic_dvl1_reg=0x2c
+ pmic_dvl2_reg=0x2d
+ pmic_dvl3_reg=0x2e
+ fi
+fi
+
+for reg in $pmic_dvl0_reg $pmic_dvl1_reg $pmic_dvl2_reg $pmic_dvl3_reg
+do
+ if [ "$soc_is_asr1901" == "1" ]
+ then
+ if [ "$reg" == "0x25" ]
+ then
+ old_volt=`i2cget -y -f 3 0x68 $reg`
+ else
+ old_volt=`i2cget -y -f 3 0x21 $reg`
+ fi
+ else
+ old_volt=`i2cget -y -f 2 0x31 $reg`
+ fi
+
+ echo "old reg-$reg volt is: $old_volt" > /dev/kmsg
+ decimal_number=`printf %d $old_volt`
+ if [ "$1" == "sub" ]
+ then
+ new_decimal_number=$((decimal_number - 2))
+ else
+ new_decimal_number=$((decimal_number + 2))
+ fi
+ new_hex_number=$(printf '%x' "$new_decimal_number")
+ echo "new reg-$reg volt is: 0x$new_hex_number" > /dev/kmsg
+
+ if [ "$soc_is_asr1901" == "1" ]
+ then
+ if [ "$reg" == "0x25" ]
+ then
+ i2cset -y -f 3 0x68 $reg 0x$new_hex_number
+ else
+ i2cset -y -f 3 0x21 $reg 0x$new_hex_number
+ fi
+ else
+ i2cset -y -f 2 0x31 $reg 0x$new_hex_number
+ fi
+done
diff --git a/target/linux/mmp/base-files/sbin/flash_crawler b/target/linux/mmp/base-files/sbin/flash_crawler
new file mode 100755
index 0000000..95ad722
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/flash_crawler
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+echo "Scan all mtd partitions to handle bit-flip:"
+mtdX=$(cat /proc/mtd | sed '1d;s/: .*//')
+for mtd in $mtdX; do
+ name="$(awk '/^'$mtd':/{print gensub(/"/,"","g",$4)}' /proc/mtd)"
+ if [ "$name" = "OTA" ]; then
+ continue
+ fi
+
+ echo "Read $name" > /dev/console
+ dd if=/dev/$mtd of=/dev/null bs=4096 2>/dev/null
+ sleep 1
+done
+
diff --git a/target/linux/mmp/base-files/sbin/jffs2reset_mmp b/target/linux/mmp/base-files/sbin/jffs2reset_mmp
new file mode 100755
index 0000000..c6d4975
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/jffs2reset_mmp
@@ -0,0 +1,124 @@
+#!/bin/sh
+SYSCFG_UBIFS_MNT=/tmp/syscfg
+. /lib/functions.sh
+
+# mtdpart: the ubifs syscfg partition
+# overlay: the overlay upper directory
+pre_check() {
+ # return 1 on failed
+ grep -qs ubifs /proc/filesystems || return 1
+ grep -qs overlay /proc/filesystems || return 1
+ [ ! -e $SYSCFG_UBIFS_MNT ] && mkdir -p $SYSCFG_UBIFS_MNT
+
+ mtdpart="$(find_mtd_part rootfs_data)"
+ [ -z "$mtdpart" ] && return 1
+ mtdpart_idx="$(echo $mtdpart | tr -d "/dev/mtdblock")"
+
+ overlays=$(awk '/overlayfs/ {print $2}' /proc/mounts)
+ return 0
+}
+
+clean_mounted_overlayfs() {
+ echo "first stop respawn app..."
+ /etc/init.d/odhcpd stop
+ /etc/init.d/log stop
+ /etc/init.d/dnsmasq stop
+ /etc/init.d/network stop
+ /etc/init.d/services.init stop
+ /etc/init.d/cm.init stop
+ /etc/init.d/sdcard_mount stop
+
+ echo "then stop other left app..."
+ ps | sed '/ash\|PID\|firstboot\|sed/d;/\[.*\]$/d;s/^ \+//;s/ .*//;/^'$$'$/d;/^'$PPID'$/d' | xargs kill -9
+ sleep 2
+
+ echo "start to umount overlay-fs..."
+ if [ -d /NVM/*data ]; then
+ /bin/umount /NVM/*data
+ fi
+ if [ -d /usr/*web ]; then
+ /bin/umount /usr/*web
+ fi
+ rm -rf /data/*
+ /bin/umount /data /mnt /log
+ /bin/umount /system/etc
+ /bin/umount /NVM
+
+ echo -n "delete files under overlay upper layer... "
+ mtd erase /dev/mtd$mtdpart_idx
+
+ echo "done"
+ return 0
+}
+
+__try_ubifs_syscfg_mount() {
+ overlay_mountpoint=$1
+ if [ -z $overlay_mountpoint ]; then
+ overlay_mountpoint=/overlay
+ fi
+ recover_ubifs=0
+ [ ! -e /dev/ubi0 ] && ubiattach /dev/ubi_ctrl -m $mtdpart_idx -d 0 || recover_ubifs=1
+ if [ $recover_ubifs -eq 0 ]; then
+ ubi0_nod_id=`cat /sys/class/ubi/ubi0/dev | tr -s ":" " "`
+ [ ! -e /dev/ubi0 ] && mknod /dev/ubi0 c ${ubi0_nod_id}
+ if [ ! -e /sys/class/ubi/ubi0_0/dev ]
+ then
+ # no volume
+ recover_ubifs=1
+ else
+ # check for "data" volume
+ ubi0_0_nod_id=`cat /sys/class/ubi/ubi0_0/dev | tr -s ":" " "`
+ [ ! -e /dev/ubi0_0 ] && mknod /dev/ubi0_0 c ${ubi0_0_nod_id}
+ { ubinfo /dev/ubi0_0 | grep Name | grep -qs "data" ; } || \
+ recover_ubifs=1
+ fi
+ fi
+ if [ $recover_ubifs -eq 1 ]; then
+ echo "ubifs syscfg partition is damaged"
+ echo "try to recover by formatting $mtdpart..."
+ [ -e /dev/ubi0 ] && ubidetach -m $mtdpart_idx
+ ubiformat -y -q /dev/mtd$mtdpart_idx
+ ubiattach -m $mtdpart_idx /dev/ubi_ctrl
+ ubi0_nod_id=`cat /sys/class/ubi/ubi0/dev | tr -s ":" " "`
+ [ ! -e /dev/ubi0 ] && mknod /dev/ubi0 c ${ubi0_nod_id}
+ ubimkvol /dev/ubi0 -n 1 -N etc -t dynamic -s 5MiB
+ ubimkvol /dev/ubi0 -n 2 -N nvm -t dynamic -s 4MiB
+ ubimkvol /dev/ubi0 -n 0 -N data -t dynamic --maxavsize
+ fi
+
+ # finally mount the ubifs
+ mount -t ubifs -o noatime ubi0:data /data || return 1
+ mount -t ubifs -o noatime ubi0:data /mnt || return 1
+ mount -t ubifs -o noatime ubi0:data /log || return 1
+ mount -t ubifs -o noatime ubi0:etc $overlay_mountpoint/etc || return 1
+ mount -t ubifs -o noatime ubi0:nvm $overlay_mountpoint/nvm || return 1
+ return 0
+}
+
+try_ubifs_syscfg_mount() {
+ __try_ubifs_syscfg_mount || {
+ echo "roofs_data mount fail, try to recover by erase..."
+ mtd erase rootfs_data
+ __try_ubifs_syscfg_mount
+ }
+
+ return 0
+}
+
+if [ "$1" != "-y" ]
+then
+read -p "This will erase all settings and remove any installed packages. Are you sure? [N/y]" answer
+case $answer in
+ [Yy]* ) break;;
+ [Nn]* ) exit 0;;
+ * ) exit 0;;
+esac
+fi
+
+pre_check || exit 1
+if [ -z "$overlays" ]; then
+ echo "try to mount overlayfs"
+ try_ubifs_syscfg_mount || exit 1
+fi
+
+clean_mounted_overlayfs
diff --git a/target/linux/mmp/base-files/sbin/memport_monitor.sh b/target/linux/mmp/base-files/sbin/memport_monitor.sh
new file mode 100755
index 0000000..f6ac60b
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/memport_monitor.sh
@@ -0,0 +1,125 @@
+#!/bin/sh
+
+if cat /etc/mversion | grep pxa1826 > /dev/null
+then
+ echo "1826 has no port monitor feature"
+fi
+
+while [ 1 ]
+do
+ hwacc w 0xc0158500 0x00000000 > /dev/null
+ hwacc w 0xc0158500 0x80008020 > /dev/null
+ hwacc w 0xc0158510 0x00000000 > /dev/null
+ hwacc w 0xc0158510 0x80008020 > /dev/null
+ hwacc w 0xc0158520 0x00000000 > /dev/null
+ hwacc w 0xc0158520 0x80008020 > /dev/null
+ hwacc w 0xc0158530 0x00000000 > /dev/null
+ hwacc w 0xc0158530 0x80008020 > /dev/null
+ sleep 1
+ hwacc w 0xc0158500 0x80008060 > /dev/null
+ hwacc w 0xc0158510 0x80008060 > /dev/null
+ hwacc w 0xc0158520 0x80008060 > /dev/null
+ hwacc w 0xc0158530 0x80008060 > /dev/null
+ echo "----------------------------------------------------"
+ hwacc w 0xc0158500 0x80008070 > /dev/null
+ num=`hwacc r 0xc015850c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT0 read bandwith is $num Bytes/s
+
+ hwacc w 0xc0158500 0x80008072 > /dev/null
+ num=`hwacc r 0xc015850c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT0 write bandwith is $num Bytes/s
+
+ hwacc w 0xc0158500 0x80008065 > /dev/null
+ num=`hwacc r 0xc015850c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT0 read latency is $num AXI clock
+
+ hwacc w 0xc0158500 0x8000806D > /dev/null
+ num=`hwacc r 0xc015850c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT0 write latency is $num AXI clock
+ echo "================================"
+ #port1
+ hwacc w 0xc0158510 0x80008070 > /dev/null
+ num=`hwacc r 0xc015851c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT1 read bandwith is $num Bytes/s
+
+ hwacc w 0xc0158510 0x80008072 > /dev/null
+ num=`hwacc r 0xc015851c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT1 write bandwith is $num Bytes/s
+
+ hwacc w 0xc0158510 0x80008065 > /dev/null
+ num=`hwacc r 0xc015851c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT1 read latency is $num AXI clock
+
+ hwacc w 0xc0158510 0x8000806D > /dev/null
+ num=`hwacc r 0xc015851c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT1 write latency is $num AXI clock
+
+ echo "================================"
+ #port2
+ hwacc w 0xc0158520 0x80008070 > /dev/null
+ num=`hwacc r 0xc015852c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT2 read bandwith is $num Bytes/s
+
+ hwacc w 0xc0158520 0x80008072 > /dev/null
+ num=`hwacc r 0xc015852c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT2 write bandwith is $num Bytes/s
+
+ hwacc w 0xc0158520 0x80008065 > /dev/null
+ num=`hwacc r 0xc015852c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT2 read latency is $num AXI clock
+
+ hwacc w 0xc0158520 0x8000806D > /dev/null
+ num=`hwacc r 0xc015852c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT2 write latency is $num AXI clock
+ echo "================================"
+
+ #port3
+ hwacc w 0xc0158530 0x80008070 > /dev/null
+ num=`hwacc r 0xc015853c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT3 read bandwith is $num Bytes/s
+
+ hwacc w 0xc0158530 0x80008072 > /dev/null
+ num=`hwacc r 0xc015853c | sed -n '2 p' | awk '{print $8}`
+ #echo $num
+ num=$((num))
+ num=$((num*16))
+ echo DDR PORT3 write bandwith is $num Bytes/s
+
+ hwacc w 0xc0158530 0x80008065 > /dev/null
+ num=`hwacc r 0xc015853c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT3 read latency is $num AXI clock
+
+
+ hwacc w 0xc0158530 0x8000806D > /dev/null
+ num=`hwacc r 0xc015853c | sed -n '2 p' | awk '{print $8}`
+ num=$((num))
+ echo DDR PORT3 write latency is $num AXI clock
+done
diff --git a/target/linux/mmp/base-files/sbin/mrvl_detect_sdcard b/target/linux/mmp/base-files/sbin/mrvl_detect_sdcard
new file mode 100755
index 0000000..fee319f
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/mrvl_detect_sdcard
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+num=0
+path_prefix=/sdcard
+
+link_mount() {
+ local config="$1"
+ local target
+ local path=$path_prefix
+
+ config_get target "$config" target
+ echo $target | grep "mnt" && {
+ grep -qs "$target" /proc/mounts
+ if [ $? -eq 0 ]; then
+ [ $num -gt 0 ] && path=$path$num
+ mkdir -p $path
+ /bin/mount -o noatime,move $target $path
+ echo $target mounted, soft link created:$path
+ num=$((num+1))
+ else
+ echo $target NOT mounted, removing $target
+ rmdir $target &> /dev/null
+ fi
+ }
+}
+
+config_load fstab
+
+if [ $? -eq 0 ]; then
+
+ # Create a soft link to mounted partitions
+ rm $path_prefix* &> /dev/null
+ config_foreach link_mount mount
+else
+ echo "No SD Card detected"
+fi
diff --git a/target/linux/mmp/base-files/sbin/mrvl_init b/target/linux/mmp/base-files/sbin/mrvl_init
new file mode 100755
index 0000000..8c515b1
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/mrvl_init
@@ -0,0 +1,19 @@
+#!/bin/sh
+# mrvl_init script
+
+echo "Starting Marvell Specific Boot Script"
+
+# trigger panic at oom, and dump memory info
+echo 2 > /proc/sys/vm/panic_on_oom
+echo 1 > /proc/sys/vm/oom_dump_tasks
+# Default Kernel signal handler print-only=1 or ramdump=0xF
+echo 0xF > /proc/sys/kernel/print-fatal-signals
+# constantly clearing cache in background without freezing the application
+echo 2 > /proc/sys/vm/dirty_background_ratio
+# increse the tendency of reclaiming memory used for caching of directory and inode objects
+echo 500 > /proc/sys/vm/vfs_cache_pressure
+#app aslr
+echo 2 > /proc/sys/kernel/randomize_va_space
+echo 1 > /proc/sys/kernel/panic_on_rcu_stall
+
+
diff --git a/target/linux/mmp/base-files/sbin/mrvl_init_aquila b/target/linux/mmp/base-files/sbin/mrvl_init_aquila
new file mode 100755
index 0000000..1b3bb7b
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/mrvl_init_aquila
@@ -0,0 +1,52 @@
+#!/bin/sh
+# mrvl_init script
+
+echo "Starting Marvell Specific Boot Script"
+
+#Set low memory value to 1024K
+echo 2 > /proc/sys/vm/panic_on_oom
+echo 1 > /proc/sys/vm/oom_dump_tasks
+# Default Kernel signal handler print-only=1 or ramdump=0xF
+echo 0xF > /proc/sys/kernel/print-fatal-signals
+echo 1024 > /proc/sys/vm/min_free_kbytes
+echo 3 > /proc/sys/vm/min_free_order_shift
+
+#load modem image
+/bin/sulog &
+/bin/cp_load
+/bin/diag &
+
+#Enable USB configurations
+echo 0 > /sys/class/android_usb/android0/enable
+echo 1286 > /sys/class/android_usb/android0/idVendor
+echo 4e28 > /sys/class/android_usb/android0/idProduct
+echo Marvell > /sys/class/android_usb/android0/iManufacturer
+echo 123456789ABCD > /sys/class/android_usb/android0/iSerial
+
+# iProduct will displayed on Windows
+echo Marvell > /sys/class/android_usb/android0/iProduct
+echo marvell_diag,marvell_debug > /sys/class/android_usb/android0/functions
+echo 239 > /sys/class/android_usb/android0/bDeviceClass
+#echo 1 > /sys/class/android_usb/android0/enable
+
+#Enable USB configurations
+echo 0 > /sys/class/android_usbtel/android0/enable
+echo 1286 > /sys/class/android_usbtel/android0/idVendor
+echo 4e5a > /sys/class/android_usbtel/android0/idProduct
+echo Marvell > /sys/class/android_usbtel/android0/iManufacturer
+echo 123456789ABCD > /sys/class/android_usbtel/android0/iSerial
+
+# iProduct will displayed on Windows
+echo Marvell > /sys/class/android_usbtel/android0/iProduct
+echo usbtel > /sys/class/android_usbtel/android0/win7
+echo usbtel > /sys/class/android_usbtel/android0/win8
+echo usbtel > /sys/class/android_usbtel/android0/apple
+echo win7 > /sys/class/android_usbtel/android0/os
+echo 239 > /sys/class/android_usbtel/android0/bDeviceClass
+echo 1 > /sys/class/android_usbtel/android0/enable
+
+#init usb3 10s later to avoid catstudio waiting too long to get CP image id
+sleep 10
+u3start
+#fot SAAR HAWK - light green led to know board is ON (since we dont have a screen)
+#echo 255 > /sys/devices/soc.0/d4000000.apb/pxa2xx-i2c.0/i2c-0/0-0024/subsystem/drivers/leds-pca963x/0-0070/leds/pca963x\:green/brightness
diff --git a/target/linux/mmp/base-files/sbin/prod_usb_init b/target/linux/mmp/base-files/sbin/prod_usb_init
new file mode 100755
index 0000000..a89e184
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/prod_usb_init
@@ -0,0 +1,84 @@
+#!/bin/sh
+# usb_init script
+
+#wait for telephony ready
+#sleep 5
+#Enable USB configurations
+echo 0 > /sys/class/android_usb/android0/enable
+echo 2ecc > /sys/class/android_usb/android0/idVendor
+echo 3012 > /sys/class/android_usb/android0/idProduct
+echo 0100 > /sys/class/android_usb/android0/bcdDevice
+echo Asrmicro > /sys/class/android_usb/android0/iManufacturer
+
+atdl_mode=`cat /proc/cmdline | grep "LDTA="`
+if [ -n "$atdl_mode" ]; then
+ echo "!!!ATDL mode" > /dev/kmsg
+ #wait for atcmd ready
+ loop_atcmdsrv=0
+ while [ $loop_atcmdsrv -le 20 ]
+ do
+ if [ -e /tmp/atcmdsrv_ok ]; then
+ break
+ else
+ loop_atcmdsrv=$((loop_atcmdsrv+1))
+ sleep 1
+ fi
+ done
+
+ serial_atcmd AT*MRD_SN=R > /tmp/usb_mrd_sn1
+ sed -n '/MRD_SN/p' /tmp/usb_mrd_sn1 > /tmp/usb_mrd_sn2
+ MRD_SNUM=`awk -F ',' '{print $3}' /tmp/usb_mrd_sn2`
+ if [ -n "$MRD_SNUM" ]; then
+ echo "USB_MRD_SN: $MRD_SNUM" > /dev/kmsg
+ echo $MRD_SNUM > /sys/class/android_usb/android0/iSerial
+ else
+ echo 123456789ABCD > /sys/class/android_usb/android0/iSerial
+ fi
+else
+ echo 123456789ABCD > /sys/class/android_usb/android0/iSerial
+fi
+
+# iProduct will displayed on Windows
+echo Asrmicro > /sys/class/android_usb/android0/iProduct
+# store function in node functions if os detect is not compiled,
+# otherwise the functions are stored in win7/win8/apple
+echo rndis,acm,marvell_diag,marvell_debug,adb > /sys/class/android_usb/android0/functions
+echo rndis,acm,marvell_diag,marvell_debug,adb > /sys/class/android_usb/android0/win7
+echo rndis,acm,marvell_diag,marvell_debug,adb > /sys/class/android_usb/android0/win8
+
+#PIPE mode use rndis, router mode use ncm
+pipemode=`cat /proc/cmdline | grep "PIPE=1"`
+if [ -n $pipemode ]; then
+ echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/olinux
+else
+ echo ncm,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/olinux
+fi
+
+echo ncm > /sys/class/android_usb/android0/apple
+
+#below items are for enumeraton stage2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/win7_s2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/win8_s2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/olinux_s2
+echo ncm > /sys/class/android_usb/android0/apple_s2
+echo win7 > /sys/class/android_usb/android0/os
+echo 239 > /sys/class/android_usb/android0/bDeviceClass
+echo Asrmicro > /sys/class/android_usb/android0/f_rndis/manufacturer
+echo 0bb4 > /sys/class/android_usb/android0/f_rndis/vendorID
+echo 1 > /sys/class/android_usb/android0/f_rndis/wceis
+echo 1 > /sys/class/android_usb/android0/f_acm/instances
+echo 1 > /sys/class/android_usb/android0/enable
+
+#start mbim early to connect with PC, otherwise AT com port will
+#be blocked for tens of seconds
+[ -e /sys/class/android_usb/android0/win8 ] && {
+ mbim_enabled=`cat /sys/class/android_usb/android0/win8 | grep mbim`
+ if [ -n "$mbim_enabled" ]; then
+ /bin/mbim &
+ fi
+}
+
+if cat /proc/cmdline | grep "CPLOG=1" > /dev/null
+then
+ /bin/sulog &
+fi
diff --git a/target/linux/mmp/base-files/sbin/rdp_transfer b/target/linux/mmp/base-files/sbin/rdp_transfer
new file mode 100755
index 0000000..6bde6fa
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/rdp_transfer
@@ -0,0 +1,580 @@
+#!/bin/sh
+# Set variable upload_over: DUMP media sequence
+# 1: SD -> USB, try usb no matter SD pass or fail for internal auto tool flow
+# 2: SD -> FLASH -> USB, reboot on any success
+# 3: SD->FLASH, reboot on any success, stall on final fail
+# 4: SD->FLASH, reboot on any success, reboot on final fail
+# 5: USB Only
+
+upload_over=5 #default mode
+
+if [ ! -e /dev/rdr ]; then
+ echo No RAMDUMP found > /dev/kmsg
+ exit 0
+fi
+
+echo =========================================== > /dev/kmsg
+echo RAMDUMP prepared by U-boot in RAM found > /dev/kmsg
+echo Script $0 is running > /dev/kmsg
+echo upload_over == $upload_over > /dev/kmsg
+
+# Use fixed File-Name:
+# RDNAME=RAMDUMP0000
+# Use File-Name with RAMDUMP_YYMMDD-HHMM:
+RDNAME=RAMDUMP_$(date +%y%m%d-%H%M)
+CPDUMPNAME=cpdump_$(date +%y%m%d-%H%M)
+COMDDRNAME=COM_DDR_$(date +%y%m%d-%H%M)
+DSPDDRNAME=DSP_DDR_$(date +%y%m%d-%H%M)
+BMBUFFNAME=bm_buffer_$(date +%y%m%d-%H%M)
+ADSPSHMNAME=adsp_shm_$(date +%y%m%d-%H%M)
+ADSPDTCMNAME=adsp_dtcm_$(date +%y%m%d-%H%M)
+ADSPDDRNAME=adsp_ddr_$(date +%y%m%d-%H%M)
+ADSPSQUNAME=adsp_squ_$(date +%y%m%d-%H%M)
+
+#flash dump name should be fixed name
+AP_DUMPTXT=ap_dump.txt
+AP_DUMPGZ=ap_dump.gz
+COM_CP_DUMP=com_RW_DDR.bin
+COM_DSP_DUMP=com_dsp_ddr.bin
+
+FBMBUFFNAME=bm_buffer
+FADSPSHMNAME=adsp_shm
+FADSPDTCMNAME=adsp_dtcm
+FADSPDDRNAME=adsp_ddr
+FADSPSQUNAME=adsp_squ
+
+SD_DUMP_DIR=/sdcard/modem_dump/
+FLASH_DUMP_DIR=/data/modem_dump/
+
+iscpdump=`cat /proc/cmdline | grep "cpdump"`
+
+function no_usbdump_reboot {
+ echo "=========NO usbdump rboot" > /dev/kmsg
+ sync
+ sleep 3
+ sync
+ echo "reboot" > /dev/kmsg
+ # Clear ramdump descriptor before restart
+ echo c > /dev/rdr
+ ifconfig usbnet0 down
+ echo 0 > /sys/class/android_usb/android0/enable
+ reboot
+ exit 0
+}
+
+function sd_dump {
+ /etc/init.d/sdcard_mount start
+ sleep 5
+
+ if [ ! -e /sdcard ]; then
+ echo "no /sdcard directory" > /dev/kmsg
+ return 1
+ fi
+
+ if [ ! -e "$SD_DUMP_DIR" ]; then
+ echo "mkdir /sdcard/modem_dump" > /dev/kmsg
+ mkdir -p $SD_DUMP_DIR
+ fi
+
+ if [ ! -e "$SD_DUMP_DIR" ]; then
+ echo "!!!!!no /sdcard/modem_dump directory" > /dev/kmsg
+ return 1
+ fi
+
+ if [ -n "$iscpdump" ]; then
+ echo t > /dev/rdr
+ cp /dev/rdr $SD_DUMP_DIR/$COMDDRNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "sd dump CP image failed" > /dev/kmsg
+ return 1
+ fi
+
+ echo d > /dev/rdr
+ cp /dev/rdr $SD_DUMP_DIR/$DSPDDRNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "sd dump DSP image failed" > /dev/kmsg
+ return 1
+ fi
+
+ if [ -e /sys/kernel/debug/adsp/adsp_shm ]; then
+ echo "sd dump adsp_shm" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_shm $SD_DUMP_DIR/$ADSPSHMNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "sd dump adsp_shm failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ if [ -e /sys/kernel/debug/adsp/adsp_dtcm ]; then
+ echo "sd dump adsp_dtcm" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_dtcm $SD_DUMP_DIR/$ADSPDTCMNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "sd dump adsp_dtcm failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ if [ -e /sys/kernel/debug/adsp/adsp_ddr ]; then
+ echo "sd dump adsp_ddr" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_ddr $SD_DUMP_DIR/$ADSPDDRNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "sd dump adsp_ddr failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+
+ if [ -e /sys/kernel/debug/adsp/adsp_squ ]; then
+ echo "sd dump adsp_squ" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_squ $SD_DUMP_DIR/$ADSPSQUNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "sd dump adsp_squ failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ if [ -e /sys/kernel/debug/bm/buffer ]; then
+ echo "sd dump bm_buffer" > /dev/kmsg
+ cp /sys/kernel/debug/bm/buffer $SD_DUMP_DIR/$BMBUFFNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "sd dump bm_buffer failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+ else
+ echo t > /dev/rdr
+ cp /dev/rdr $SD_DUMP_DIR/$RDNAME.txt
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "!!!!!!!!!!sd dump txt image failed" > /dev/kmsg
+ return 1
+ fi
+
+ echo d > /dev/rdr
+ cp /dev/rdr $SD_DUMP_DIR/$RDNAME.gz
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "!!!!!!!!!!sd dump GZ image failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ return 0
+}
+
+function flash_dump {
+ if [ ! -e "$FLASH_DUMP_DIR" ]; then
+ echo "mkdir $FLASH_DUMP_DIR" > /dev/kmsg
+ mkdir -p $FLASH_DUMP_DIR
+ fi
+
+ if [ ! -e "$FLASH_DUMP_DIR" ]; then
+ echo "!!!!!no $FLASH_DUMP_DIR" > /dev/kmsg
+ return 1
+ fi
+
+ #remove the old dump files, as flash space is limited
+ rm $FLASH_DUMP_DIR/*
+
+ if [ -n "$iscpdump" ]; then
+ echo t > /dev/rdr
+ cp /dev/rdr $FLASH_DUMP_DIR/$COM_CP_DUMP
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "flash dump CP image failed" > /dev/kmsg
+ rm $FLASH_DUMP_DIR/$COM_CP_DUMP
+ return 1
+ fi
+
+ echo d > /dev/rdr
+ cp /dev/rdr $FLASH_DUMP_DIR/$COM_DSP_DUMP
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "flash dump DSP image failed" > /dev/kmsg
+ rm $COM_DSP_DUMP
+ return 1
+ fi
+
+ if [ -e /sys/kernel/debug/adsp/adsp_shm ]; then
+ echo "flash dump adsp_shm" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_shm $FLASH_DUMP_DIR/$FADSPSHMNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "flash dump adsp_shm failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ if [ -e /sys/kernel/debug/adsp/adsp_dtcm ]; then
+ echo "flash dump adsp_dtcm" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_dtcm $FLASH_DUMP_DIR/$FADSPDTCMNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "flash dump adsp_dtcm failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ if [ -e /sys/kernel/debug/adsp/adsp_ddr ]; then
+ echo "flash dump adsp_ddr" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_ddr $FLASH_DUMP_DIR/$FADSPDDRNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "flash dump adsp_ddr failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ if [ -e /sys/kernel/debug/adsp/adsp_squ ]; then
+ echo "flash dump adsp_squ" > /dev/kmsg
+ cp /sys/kernel/debug/adsp/adsp_squ $FLASH_DUMP_DIR/$FADSPSQUNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "flash dump adsp_squ failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+
+ if [ -e /sys/kernel/debug/bm/buffer ]; then
+ echo "flash dump bm_buffer" > /dev/kmsg
+ cp /sys/kernel/debug/bm/buffer $FLASH_DUMP_DIR/$FBMBUFFNAME.bin
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "flash dump bm_buffer failed" > /dev/kmsg
+ return 1
+ fi
+ fi
+ else
+ echo t > /dev/rdr
+ cp /dev/rdr $FLASH_DUMP_DIR/$AP_DUMPTXT
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "!!!!!!!!!!flash dump txt image failed" > /dev/kmsg
+ rm $FLASH_DUMP_DIR/$AP_DUMPTXT
+ return 1
+ fi
+
+ echo d > /dev/rdr
+ cp /dev/rdr $FLASH_DUMP_DIR/$AP_DUMPGZ
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "!!!!!!!!!!flash dump GZ image failed" > /dev/kmsg
+ rm $FLASH_DUMP_DIR/$AP_DUMPGZ
+ return 1
+ fi
+ fi
+
+ return 0
+}
+
+
+# 1: SD -> USB, try usb no matter SD pass or fail for internal auto tool flow
+# 2: SD -> FLASH -> USB, reboot on any success
+# 3: SD->FLASH, reboot on any success, stall on final fail
+# 4: SD->FLASH, reboot on any success, reboot on final fail
+if [ $upload_over -eq 1 ]; then
+ sd_dump
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "=========sd dump success" > /dev/kmsg
+ fi
+elif [ $upload_over -eq 2 ]; then
+ sd_dump
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "=========sd dump success" > /dev/kmsg
+ no_usbdump_reboot
+ fi
+ flash_dump
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "=========flash dump success" > /dev/kmsg
+ no_usbdump_reboot
+ fi
+elif [ $upload_over -eq 3 ]; then
+ sd_dump
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "=========sd dump success" > /dev/kmsg
+ no_usbdump_reboot
+ fi
+ flash_dump
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "=========flash dump success" > /dev/kmsg
+ no_usbdump_reboot
+ fi
+ #stall on fail
+ while [ 1 ]
+ do
+ sleep 100
+ done
+elif [ $upload_over -eq 4 ]; then
+ sd_dump
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "=========sd dump success" > /dev/kmsg
+ no_usbdump_reboot
+ fi
+ flash_dump
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "=========flash dump success" > /dev/kmsg
+ no_usbdump_reboot
+ fi
+ no_usbdump_reboot
+else
+ echo "don't check storage media" > /dev/kmsg
+fi
+
+FTP_SERV_IP=""
+loop_net=0
+#leave 3 days(for weekend test, 259200 secs) to check network on
+while [ $loop_net -le 259200 -a -z $FTP_SERV_IP ]
+do
+ if [ -z "$1" ]; then
+ cat /proc/net/arp > /tmp/tmp_arp1
+ sed -n '/br-lan/p' /tmp/tmp_arp1 > /tmp/tmp_arp2
+ sed -n '/0x2/p' /tmp/tmp_arp2 > /tmp/sed_arp_output
+ sed -n '1p' /tmp/sed_arp_output > /tmp/ip_string1
+ sed -n '2p' /tmp/sed_arp_output > /tmp/ip_string2
+ FTP_SERV_IP=`awk '{print $1}' /tmp/ip_string1`
+ echo $FTP_SERV_IP > /dev/kmsg
+ local_ip=`echo $FTP_SERV_IP |grep 192.168`
+ if [ -n "$local_ip" ]; then
+ break
+ fi
+ FTP_SERV_IP=`awk '{print $1}' /tmp/ip_string2`
+ local_ip=`echo $FTP_SERV_IP |grep 192.168`
+ echo $FTP_SERV_IP > /dev/kmsg
+ if [ -n "$local_ip" ]; then
+ break
+ fi
+ else
+ FTP_SERV_IP=$1
+ fi
+ loop_net=$((loop_net+1))
+ echo Searching PC SRV to dump image ... > /dev/kmsg
+ sleep 1
+done
+
+if [ -z "$FTP_SERV_IP" ]; then
+ echo "!!!!!!!!!!!!! Can't find any SRV PC to dump image" > /dev/kmsg
+ exit 0
+else
+ echo FTP_SERV_IP $FTP_SERV_IP > /dev/kmsg
+fi
+
+#if [ $upload_over -eq 1 ]; then
+# echo ...Upload to SD /sdcard/$RDNAME.* > /dev/kmsg
+# #echo t > /dev/rdr - default
+# cp /dev/rdr /sdcard/$RDNAME.txt
+# echo d > /dev/rdr
+# cp /dev/rdr /sdcard/$RDNAME.gz
+# result=$?
+#fi
+
+if [ 1 ]; then
+ echo ...Upload to TFTP $FTP_SERV_IP > /dev/kmsg
+ loop=0
+ #wait for enough time to prepare the PC server
+ #the timeout is for weekend time(3 days)
+ while [ $loop -le 259200 ]
+ do
+ echo t > /dev/rdr
+
+ if [ -n "$iscpdump" ]; then
+ tftp -p -l /dev/rdr -r $COMDDRNAME.bin $FTP_SERV_IP
+ else
+ tftp -p -l /dev/rdr -r $RDNAME.txt $FTP_SERV_IP
+ fi
+
+ result=$?
+ if [ $result -eq 0 ]; then
+ echo "======dump text ok" > /dev/kmsg
+ echo d > /dev/rdr
+ if [ -n "$iscpdump" ]; then
+ busybox tftp -p -l /dev/rdr -r $DSPDDRNAME.bin $FTP_SERV_IP
+ else
+ busybox tftp -p -l /dev/rdr -r $RDNAME.gz $FTP_SERV_IP
+ fi
+ result=$?
+ fi
+
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======dump gz ok" > /dev/kmsg
+ if [ -n "$iscpdump" ]; then
+ if [ ! -e /log/cp_dump.tar.gz ]; then
+ echo ================= cpdump image does not exsit > /dev/kmsg
+ loop=400000
+ else
+ tftp -p -l /log/cp_dump.tar.gz -r $CPDUMPNAME.tar.gz $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======cp dump transfer ok" > /dev/kmsg
+ loop=400000
+ else
+ # No answer from server or error. Try again
+ loop=$((loop+1))
+ echo TFTP uploading cpdump retry ... > /dev/kmsg
+ sleep 2
+ fi
+ fi
+ else
+ echo "======no cp assert dump done" > /dev/kmsg
+ loop=400000
+ fi
+ else
+ # No answer from server or error. Try again
+ loop=$((loop+1))
+ echo TFTP uploading RDP retry ... > /dev/kmsg
+ sleep 2
+ fi
+ done
+fi
+
+if [ -n "$iscpdump" ]; then
+ if [ ! -e /sys/kernel/debug/bm/buffer ]; then
+ echo ================= no bm_buffer to be dump > /dev/kmsg
+ else
+ tftp -p -l /sys/kernel/debug/bm/buffer -r $BMBUFFNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======bm buffer dump ok" > /dev/kmsg
+ else
+ #try again
+ echo "======retry to dump bm buffer" > /dev/kmsg
+ tftp -p -l /sys/kernel/debug/bm/buffer -r $BMBUFFNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======bm buffer dump ok" > /dev/kmsg
+ else
+ echo "======bm buffer dump failed" > /dev/kmsg
+ fi
+ fi
+ fi
+fi
+
+#dump ADSP bins
+if [ -n "$iscpdump" ]; then
+ if [ ! -e /sys/kernel/debug/adsp/adsp_shm ]; then
+ echo ================= no adsp_shm to dump > /dev/kmsg
+ else
+ tftp -p -l /sys/kernel/debug/adsp/adsp_shm -r $ADSPSHMNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_shm dump ok" > /dev/kmsg
+ else
+ #try again
+ echo "======retry to dump adsp_shm" > /dev/kmsg
+ tftp -p -l /sys/kernel/debug/adsp/adsp_shm -r $ADSPSHMNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_shm dump ok" > /dev/kmsg
+ else
+ echo "======dump adsp_shm failed" > /dev/kmsg
+ fi
+ fi
+ fi
+
+ if [ ! -e /sys/kernel/debug/adsp/adsp_dtcm ]; then
+ echo ================= no adsp_dtcm to dump > /dev/kmsg
+ else
+ tftp -p -l /sys/kernel/debug/adsp/adsp_dtcm -r $ADSPDTCMNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_dtcm dump ok" > /dev/kmsg
+ else
+ #try again
+ echo "======retry to dump adsp_dtcm" > /dev/kmsg
+ tftp -p -l /sys/kernel/debug/adsp/adsp_dtcm -r $ADSPDTCMNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_dtcm dump ok" > /dev/kmsg
+ else
+ echo "======dump adsp_dtcm failed" > /dev/kmsg
+ fi
+ fi
+ fi
+
+ if [ ! -e /sys/kernel/debug/adsp/adsp_ddr ]; then
+ echo ================= no adsp_ddr to dump > /dev/kmsg
+ else
+ tftp -p -l /sys/kernel/debug/adsp/adsp_ddr -r $ADSPDDRNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_ddr dump ok" > /dev/kmsg
+ else
+ #try again
+ echo "======retry to dump adsp_ddr" > /dev/kmsg
+ tftp -p -l /sys/kernel/debug/adsp/adsp_ddr -r $ADSPDDRNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_ddr dump ok" > /dev/kmsg
+ else
+ echo "======dump adsp_ddr failed" > /dev/kmsg
+ fi
+ fi
+ fi
+
+ if [ ! -e /sys/kernel/debug/adsp/adsp_squ ]; then
+ echo ================= no adsp_squ to dump > /dev/kmsg
+ else
+ tftp -p -l /sys/kernel/debug/adsp/adsp_squ -r $ADSPSQUNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_squ dump ok" > /dev/kmsg
+ else
+ #try again
+ echo "======retry to dump adsp_squ" > /dev/kmsg
+ tftp -p -l /sys/kernel/debug/adsp/adsp_squ -r $ADSPSQUNAME.bin $FTP_SERV_IP
+ result=$?
+ if [ $result -eq 0 ]; then
+ # Uploaded with ok. Exit loop
+ echo "======adsp_squ dump ok" > /dev/kmsg
+ else
+ echo "======dump adsp_squ failed" > /dev/kmsg
+ fi
+ fi
+ fi
+fi
+
+if [ $loop -ne 400000 ]; then
+ echo "!!!!!!!!!!!!!!!!!ramdump failed, please check tftp server or firewall" > /dev/kmsg
+ exit 0
+fi
+
+echo RAMDUMP upload finished with $result ----- Re-Start ---- > /dev/kmsg
+# Clear ramdump descriptor before restart
+echo c > /dev/rdr
+
+echo "sending rdp_ok.txt to server" > /dev/kmsg
+echo "rdp_ok" > /tmp/rdp_ok.txt
+tftp -p -l /tmp/rdp_ok.txt -r rdp_ok.txt $FTP_SERV_IP
+
+echo "sleep 15s for auto test" > /dev/kmsg
+sleep 15
+
+ifconfig usbnet0 down
+echo 0 > /sys/class/android_usb/android0/enable
+
+reboot
+
diff --git a/target/linux/mmp/base-files/sbin/rdp_usb_init b/target/linux/mmp/base-files/sbin/rdp_usb_init
new file mode 100755
index 0000000..56f238f
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/rdp_usb_init
@@ -0,0 +1,53 @@
+#!/bin/sh
+# rdp_usb_init script
+
+#wait for telephony ready
+#sleep 5
+#Enable USB configurations
+echo 0 > /sys/class/android_usb/android0/enable
+echo 2ecc > /sys/class/android_usb/android0/idVendor
+echo 2004 > /sys/class/android_usb/android0/idProduct
+echo 0100 > /sys/class/android_usb/android0/bcdDevice
+echo Asrmicro > /sys/class/android_usb/android0/iManufacturer
+
+atdl_mode=`cat /proc/cmdline | grep "LDTA="`
+if [ -n "$atdl_mode" ]; then
+ echo "!!!ATDL mode" > /dev/kmsg
+ #wait for atcmd ready
+ sleep 5
+
+ serial_atcmd AT*MRD_SN=R > /tmp/usb_mrd_sn1
+ sed -n '/MRD_SN/p' /tmp/usb_mrd_sn1 > /tmp/usb_mrd_sn2
+ MRD_SNUM=`awk -F ',' '{print $3}' /tmp/usb_mrd_sn2`
+ if [ -n "$MRD_SNUM" ]; then
+ echo "USB_MRD_SN: $MRD_SNUM" > /dev/kmsg
+ echo $MRD_SNUM > /sys/class/android_usb/android0/iSerial
+ else
+ echo 123456789ABCD > /sys/class/android_usb/android0/iSerial
+ fi
+else
+ echo 123456789ABCD > /sys/class/android_usb/android0/iSerial
+fi
+# iProduct will displayed on Windows
+echo Asrmicro > /sys/class/android_usb/android0/iProduct
+# store function in node functions if os detect is not compiled,
+# otherwise the functions are stored in win7/win8/apple
+echo rndis,adb > /sys/class/android_usb/android0/functions
+echo rndis,adb > /sys/class/android_usb/android0/win7
+echo rndis,adb > /sys/class/android_usb/android0/win8
+echo rndis,adb > /sys/class/android_usb/android0/olinux
+echo ecm > /sys/class/android_usb/android0/apple
+
+#below items are for enumeraton stage2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/win7_s2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/win8_s2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/olinux_s2
+echo ncm > /sys/class/android_usb/android0/apple_s2
+echo win7 > /sys/class/android_usb/android0/os
+echo 239 > /sys/class/android_usb/android0/bDeviceClass
+echo Asrmicro > /sys/class/android_usb/android0/f_rndis/manufacturer
+echo 0bb4 > /sys/class/android_usb/android0/f_rndis/vendorID
+echo 1 > /sys/class/android_usb/android0/f_rndis/wceis
+echo 1 > /sys/class/android_usb/android0/f_acm/instances
+echo 1 > /sys/class/android_usb/android0/enable
+
diff --git a/target/linux/mmp/base-files/sbin/run_ims.sh b/target/linux/mmp/base-files/sbin/run_ims.sh
new file mode 100755
index 0000000..95288f7
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/run_ims.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# run IMS on spesific APN
+# CID7 must be free for MO PDP used by IMS
+# If IMS use MT PDP on ccinet4 instead wsetup script must be called before
+#
+
+APN=$1
+CID=7
+
+## check AT channel
+status=`serial_atcmd "AT" | grep OK`
+if [ -z "$status" ]; then
+ echo "AT CHANNEL ERROR"
+ exit 1
+fi
+
+status=`serial_atcmd "AT+CGPIAF=0,0,0,0" | grep OK`
+if [ -z "$status" ]; then
+ echo "AT CHANNEL ERROR"
+ exit 1
+fi
+
+if [ -n "$APN" ]; then
+ ## configure IMS APN
+ status=`serial_atcmd "AT*IMSCFG=KEY_IMS_PDP_APN,$APN" | grep OK`
+ if [ -z "$status" ]; then
+ echo "AT CHANNEL ERROR"
+ exit 1
+ fi
+fi
+
+ifup wan6$CID
+
+## enable IMS
+status=`serial_atcmd "AT*IMSCFG=KEY_IMS_SUPPORT,true" | grep OK`
+if [ -z "$status" ]; then
+ echo "AT CHANNEL ERROR"
+ exit 1
+fi
diff --git a/target/linux/mmp/base-files/sbin/stresstest.sh b/target/linux/mmp/base-files/sbin/stresstest.sh
new file mode 100755
index 0000000..79682eb
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/stresstest.sh
@@ -0,0 +1,167 @@
+#!/bin/sh
+
+#NOTE: dvc_update_volt.sh is set as root-only executable in read only directory /sbin/
+#NOTE: better to move dvc_update_volt.sh to writtable directory, such /data
+#NOTE: better to remove dvc_update_volt.sh after doing system test
+#NOTE: be careful to check if dvc_update_volt.sh is executed correctly from dmesg log
+#NOTE: dvc_update_volt.sh is to reduce voltage before doing stress test
+#NOTE: default is reduce 25mv in dvc_update_volt.sh, can change it to other value if needed
+
+
+#reduce_volt=1
+
+trap 'onCtrlC' INT
+function onCtrlC () {
+ echo strestestcpu > /sys/power/cpu_freq_max_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_min_pm_unqos
+ echo strestestcpu > /sys/power/cpu_freq_min_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_max_pm_unqos
+ [ -e /data/stresstfile ] && rm /data/stresstfile
+ echo "Exit 0 on Ctrl+C" > /dev/kmsg
+ exit 0
+}
+
+if [ -z $1 -o -z $2 ]; then
+ echo "!!!!!!!!no runtime_sec and test idx specified" > /dev/kmsg
+ exit 1
+fi
+
+echo "runtime " $1 > /dev/kmsg
+echo "stress test " $2 > /dev/kmsg
+result=0
+# $2: 0 - mem test 1 - mem+flash test
+if [ $2 -eq 0 ]; then
+ # set cpufreq max to 416000 and ddrfreq min to 2000000
+ echo strestestcpu 416000 > /sys/power/cpu_freq_max_pm_qos
+ echo strestestcpu 416000 > /sys/power/cpu_freq_min_pm_qos
+ echo strestestddr 2000000 > /sys/power/ddr_devfreq_max_pm_qos
+ echo strestestddr 2000000 > /sys/power/ddr_devfreq_min_pm_qos
+
+ if [ "$reduce_volt" == "1" ]
+ then
+ serial_atcmd at+cfun=0
+ sync
+ echo 3 > /proc/sys/vm/drop_caches
+ [ -e "/sbin/dvc_update_volt.sh" ] && /sbin/dvc_update_volt.sh sub
+ fi
+
+ free_mem_kbytes=`sed -n '2p' /proc/meminfo | awk '{print $(NF-1)}'`
+ echo "Free_KB:" $free_mem_kbytes > /dev/kmsg
+ #larger than 11MB
+ if [ $free_mem_kbytes -gt 11264 ]; then
+ stresstest -s $1 -C 1 -m 4 -i 2 -M 8 --max_errors 1 --stop_on_errors -l /tmp/stress_log > /dev/kmsg
+ result=$?
+ else
+ stresstest -s $1 -C 1 -m 1 -i 1 -M 4 --max_errors 1 --stop_on_errors -l /tmp/stress_log > /dev/kmsg
+ result=$?
+ fi
+ echo strestestcpu > /sys/power/cpu_freq_max_pm_unqos
+ echo strestestcpu > /sys/power/cpu_freq_min_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_max_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_min_pm_unqos
+ if [ "$reduce_volt" == "1" ]
+ then
+ [ -e "/sbin/dvc_update_volt.sh" ] && /sbin/dvc_update_volt.sh restore
+ fi
+elif [ $2 -eq 1 ]; then
+ stresstest -s $1 -C 1 -m 1 -i 1 --max_errors 1 -M 8 --stop_on_errors -l /tmp/stress_log -f /data/stresstfile --filesize 0x200000
+ result=$?
+elif [ $2 -eq 2 ]; then
+ loop=1
+ while [ $loop -le $1 ]
+ do
+ [ -e /log/fs_test.bin0 ] && rm /log/fs_test.bin0
+ fs_test 0 7 0
+ result=$?
+ if [ $result -ne 0 ]; then
+ echo "==== FLASH TEST FAILED ON LOOP" $loop > /dev/kmsg
+ [ -e /log/fs_test.bin0 ] && rm /log/fs_test.bin0
+ exit 1
+ fi
+ loop=$((loop+1))
+ echo "##FLASH test loop" $loop "done" > /dev/kmsg
+ [ -e /log/fs_test.bin0 ] && rm /log/fs_test.bin0
+ done
+ [ -e /log/fs_test.bin0 ] && rm /log/fs_test.bin0
+ echo "==== ALL FLASH TEST DONE, PASS" > /dev/kmsg
+ exit 0
+elif [ $2 -eq 3 ]; then
+ if [ "$reduce_volt" == "1" ]
+ then
+ serial_atcmd at+cfun=0
+ sync
+ echo 3 > /proc/sys/vm/drop_caches
+ [ -e "/sbin/dvc_update_volt.sh" ] && /sbin/dvc_update_volt.sh sub
+ fi
+ # set cpufreq max to 2000000 and ddrfreq min to 2000000
+ echo strestestcpu 2000000 > /sys/power/cpu_freq_max_pm_qos
+ echo strestestcpu 2000000 > /sys/power/cpu_freq_min_pm_qos
+ echo strestestddr 2000000 > /sys/power/ddr_devfreq_max_pm_qos
+ echo strestestddr 2000000 > /sys/power/ddr_devfreq_min_pm_qos
+ free_mem_kbytes=`sed -n '2p' /proc/meminfo | awk '{print $(NF-1)}'`
+ echo "Free_KB:" $free_mem_kbytes > /dev/kmsg
+ #larger than 11MB
+ if [ $free_mem_kbytes -gt 11264 ]; then
+ stresstest -s $1 -C 1 -m 4 -i 2 -M 8 --max_errors 1 --stop_on_errors -l /tmp/stress_log > /dev/kmsg
+ result=$?
+ else
+ stresstest -s $1 -C 1 -m 1 -i 1 -M 4 --max_errors 1 --stop_on_errors -l /tmp/stress_log > /dev/kmsg
+ result=$?
+ fi
+ echo strestestcpu > /sys/power/cpu_freq_max_pm_unqos
+ echo strestestcpu > /sys/power/cpu_freq_min_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_max_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_min_pm_unqos
+
+ if [ "$reduce_volt" == "1" ]
+ then
+ [ -e "/sbin/dvc_update_volt.sh" ] && /sbin/dvc_update_volt.sh restore
+ fi
+elif [ $2 -eq 4 ]; then
+ if [ "$reduce_volt" == "1" ]
+ then
+ serial_atcmd at+cfun=0
+ sync
+ echo 3 > /proc/sys/vm/drop_caches
+ [ -e "/sbin/dvc_update_volt.sh" ] && /sbin/dvc_update_volt.sh sub
+ fi
+ # set cpufreq max to 416000 and ddrfreq min to 266000
+ echo strestestcpu 416000 > /sys/power/cpu_freq_max_pm_qos
+ echo strestestcpu 416000 > /sys/power/cpu_freq_min_pm_qos
+ echo strestestddr 266000 > /sys/power/ddr_devfreq_max_pm_qos
+ echo strestestddr 266000 > /sys/power/ddr_devfreq_min_pm_qos
+ free_mem_kbytes=`sed -n '2p' /proc/meminfo | awk '{print $(NF-1)}'`
+ echo "Free_KB:" $free_mem_kbytes > /dev/kmsg
+ #larger than 11MB
+ if [ $free_mem_kbytes -gt 11264 ]; then
+ stresstest -s $1 -C 1 -m 4 -i 2 -M 8 --max_errors 1 --stop_on_errors -l /tmp/stress_log > /dev/kmsg
+ result=$?
+ else
+ stresstest -s $1 -C 1 -m 1 -i 1 -M 4 --max_errors 1 --stop_on_errors -l /tmp/stress_log > /dev/kmsg
+ result=$?
+ fi
+ echo strestestcpu > /sys/power/cpu_freq_max_pm_unqos
+ echo strestestcpu > /sys/power/cpu_freq_min_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_max_pm_unqos
+ echo strestestddr > /sys/power/ddr_devfreq_min_pm_unqos
+
+ if [ "$reduce_volt" == "1" ]
+ then
+ [ -e "/sbin/dvc_update_volt.sh" ] && /sbin/dvc_update_volt.sh restore
+ fi
+else
+ echo "==== unsupported test" > /dev/kmsg
+ $result=1
+fi
+
+if [ $result -eq 0 ]; then
+ echo "======stress test " $2 " ok" > /dev/kmsg
+ [ -e /data/stresstfile ] && rm /data/stresstfile
+ exit 0
+else
+ echo "======stress test " $2 " fail" > /dev/kmsg
+ [ -e /data/stresstfile ] && rm /data/stresstfile
+ exit 1
+fi
+
+
diff --git a/target/linux/mmp/base-files/sbin/switch2jffs b/target/linux/mmp/base-files/sbin/switch2jffs
new file mode 100755
index 0000000..b79b9ae
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/switch2jffs
@@ -0,0 +1,121 @@
+#!/bin/sh
+SYSCFG_UBIFS_MNT=/tmp/syscfg
+. /lib/functions.sh
+
+# mtdpart: the ubifs syscfg partition
+# rom: the read-only rootfs mount point
+# overlay: the overlay upper directory
+# ramoverlay: if ramoverlay is activated, ramoverlay=1
+pre_check() {
+ # return 1 on failed
+ grep -qs ubifs /proc/filesystems || return 1
+ grep -qs overlayfs /proc/filesystems || return 1
+ [ ! -e $SYSCFG_UBIFS_MNT ] && mkdir -p $SYSCFG_UBIFS_MNT
+
+ mtdpart="$(find_mtd_part syscfg)"
+ [ -z "$mtdpart" ] && return 1
+ mtdpart_idx="$(echo $mtdpart | tr -d "/dev/mtdblock")"
+
+ rom=$(awk '/jffs2 ro/ {print $2}' /proc/mounts)
+ overlay=$(awk '/ubifs/ {print $2}' /proc/mounts | tail -n 1)
+ ramoverlay=1
+ grep -qs 'overlayfs:/tmp/root' /proc/mounts || ramoverlay=0
+ return 0
+}
+
+try_ubifs_syscfg_mount() {
+ overlay_mountpoint=$1
+ if [ -z $overlay_mountpoint ]
+ then
+ overlay_mountpoint=/overlay
+ fi
+ recover_ubifs=0
+ [ ! -e /dev/ubi0 ] && ubiattach -m $mtdpart_idx /dev/ubi_ctrl || recover_ubifs=1
+ if [ $recover_ubifs -eq 0 ]
+ then
+ ubi0_nod_id=`cat /sys/class/ubi/ubi0/dev | tr -s ":" " "`
+ [ ! -e /dev/ubi0 ] && mknod /dev/ubi0 c ${ubi0_nod_id}
+ if [ ! -e /sys/class/ubi/ubi0_0/dev ]
+ then
+ # no volume
+ recover_ubifs=1
+ else
+ # check for "syscfg" volume
+ ubi0_0_nod_id=`cat /sys/class/ubi/ubi0_0/dev | tr -s ":" " "`
+ [ ! -e /dev/ubi0_0 ] && mknod /dev/ubi0_0 c ${ubi0_0_nod_id}
+ { ubinfo /dev/ubi0_0 | grep Name | grep -qs "syscfg" ; } || \
+ recover_ubifs=1
+ fi
+ fi
+ if [ $recover_ubifs -eq 1 ]
+ then
+ echo "ubifs syscfg partition is damaged"
+ echo "try to recover by formatting $mtdpart..."
+ [ -e /dev/ubi0 ] && ubidetach -m $mtdpart_idx
+ ubiformat -y -q /dev/mtd$mtdpart_idx
+ ubiattach -m $mtdpart_idx /dev/ubi_ctrl
+ ubi0_nod_id=`cat /sys/class/ubi/ubi0/dev | tr -s ":" " "`
+ [ ! -e /dev/ubi0 ] && mknod /dev/ubi0 c ${ubi0_nod_id}
+ ubimkvol /dev/ubi0 -n 0 -N syscfg -t dynamic --maxavsize
+ fi
+ # finally mount the ubifs
+ mount -t ubifs -o noatime ubi0:syscfg $SYSCFG_UBIFS_MNT || return 1
+ [ ! -d $SYSCFG_UBIFS_MNT/openwrt_overlay ] && mkdir -p $SYSCFG_UBIFS_MNT/openwrt_overlay
+ mount -o bind $SYSCFG_UBIFS_MNT/openwrt_overlay $overlay_mountpoint
+ return 0
+}
+
+with_fo_cleanup() {
+ # try to get rid of /tmp/root
+ # this will almost always fail
+ # unmount overlay
+ umount -l /tmp/root 2>&-
+ # umount ramfs
+ umount -l /tmp/root 2>&-
+ grep -q overlay /proc/filesystems && {
+ cd $overlay
+ (
+ find -type l
+ ) | while read FILE; do
+ [ -z "$FILE" ] && break
+ if ls -la "$FILE" 2>&- | grep -q '(overlay-whiteout)'; then
+ rm -f "$FILE"
+ fi
+ done
+ }
+}
+
+pre_check
+if [ ! -z "$overlay" ]
+then
+ echo "overlayfs is mounted"
+else
+ if [ "$ramoverlay" -eq 1 ]
+ then
+ echo "switch from ramoverlay to ubifs overlay"
+ overlay=/rom/overlay
+ try_ubifs_syscfg_mount $overlay || exit 1
+ # try to avoid fs changing while copying
+ mount -o remount,ro none / 2>&-
+ # copy ramoverlay to ubifs overlay
+ echo -n "copying files ... "
+ cp -a /tmp/root/* $overlay 2>&-
+ echo "done"
+ # switch back to ro rootfs (temporarily)
+ # and park the ramdisk ontop of /tmp/root
+ pivot /rom /mnt
+ # after pivot to rom, $overlay may change
+ overlay=$(awk '/ubifs/ {print $2}' /proc/mounts | tail -n 1)
+ mount -o move /mnt /tmp/root
+
+ # /overlay is the overlay
+ # /rom is the readonly
+ fopivot $overlay /rom
+ with_fo_cleanup
+ else
+ echo "try to mount overlayfs"
+ overlay=/overlay
+ try_ubifs_syscfg_mount $overlay || exit 1
+ fopivot $overlay /rom
+ fi
+fi
diff --git a/target/linux/mmp/base-files/sbin/u3start b/target/linux/mmp/base-files/sbin/u3start
new file mode 100755
index 0000000..2a95c94
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/u3start
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo 0 > /sys/class/android_usb/android0/enable
+echo 1 > /sys/class/android_usb/android0/enable
+
diff --git a/target/linux/mmp/base-files/sbin/u3stop b/target/linux/mmp/base-files/sbin/u3stop
new file mode 100755
index 0000000..5370e65
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/u3stop
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo 0 > /sys/class/android_usb/android0/enable
+
diff --git a/target/linux/mmp/base-files/sbin/usb_init b/target/linux/mmp/base-files/sbin/usb_init
new file mode 100755
index 0000000..ebd37f1
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/usb_init
@@ -0,0 +1,85 @@
+#!/bin/sh
+# usb_init script
+
+#wait for telephony ready
+#sleep 5
+#Enable USB configurations
+echo 0 > /sys/class/android_usb/android0/enable
+echo 2ecc > /sys/class/android_usb/android0/idVendor
+echo 3012 > /sys/class/android_usb/android0/idProduct
+echo 0100 > /sys/class/android_usb/android0/bcdDevice
+echo Asrmicro > /sys/class/android_usb/android0/iManufacturer
+
+atdl_mode=`cat /proc/cmdline | grep "LDTA="`
+if [ -n "$atdl_mode" ]; then
+ echo "!!!ATDL mode" > /dev/kmsg
+ #wait for atcmd ready
+ loop_atcmdsrv=0
+ while [ $loop_atcmdsrv -le 20 ]
+ do
+ if [ -e /tmp/atcmdsrv_ok ]; then
+ break
+ else
+ loop_atcmdsrv=$((loop_atcmdsrv+1))
+ sleep 1
+ fi
+ done
+
+ serial_atcmd AT*MRD_SN=R > /tmp/usb_mrd_sn1
+ sed -n '/MRD_SN/p' /tmp/usb_mrd_sn1 > /tmp/usb_mrd_sn2
+ MRD_SNUM=`awk -F ',' '{print $3}' /tmp/usb_mrd_sn2`
+ if [ -n "$MRD_SNUM" ]; then
+ echo "USB_MRD_SN: $MRD_SNUM" > /dev/kmsg
+ echo $MRD_SNUM > /sys/class/android_usb/android0/iSerial
+ else
+ echo 123456789ABCD > /sys/class/android_usb/android0/iSerial
+ fi
+else
+ echo 123456789ABCD > /sys/class/android_usb/android0/iSerial
+fi
+
+# iProduct will displayed on Windows
+echo Asrmicro > /sys/class/android_usb/android0/iProduct
+# store function in node functions if os detect is not compiled,
+# otherwise the functions are stored in win7/win8/apple
+echo rndis,acm,marvell_diag,marvell_debug,adb > /sys/class/android_usb/android0/functions
+echo rndis,acm,marvell_diag,marvell_debug,adb > /sys/class/android_usb/android0/win7
+echo rndis,acm,marvell_diag,marvell_debug,adb > /sys/class/android_usb/android0/win8
+
+#PIPE mode use rndis, router mode use ncm
+pipemode=`cat /proc/cmdline | grep "PIPE=1"`
+if [ -n "$pipemode" ]; then
+ echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/olinux
+else
+ echo ncm,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/olinux
+fi
+
+echo ncm > /sys/class/android_usb/android0/apple
+
+#below items are for enumeraton stage2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/win7_s2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/win8_s2
+echo rndis,acm,marvell_diag,marvell_debug > /sys/class/android_usb/android0/olinux_s2
+echo ncm > /sys/class/android_usb/android0/apple_s2
+echo win7 > /sys/class/android_usb/android0/os
+echo 239 > /sys/class/android_usb/android0/bDeviceClass
+echo Asrmicro > /sys/class/android_usb/android0/f_rndis/manufacturer
+echo 0bb4 > /sys/class/android_usb/android0/f_rndis/vendorID
+echo 1 > /sys/class/android_usb/android0/f_rndis/wceis
+echo 1 > /sys/class/android_usb/android0/f_acm/instances
+echo 1 > /sys/class/android_usb/android0/enable
+
+#start mbim early to connect with PC, otherwise AT com port will
+#be blocked for tens of seconds
+[ -e /sys/class/android_usb/android0/win8 ] && {
+ mbim_enabled=`cat /sys/class/android_usb/android0/win8 | grep mbim`
+ if [ -n "$mbim_enabled" ]; then
+ /bin/mbim &
+ fi
+}
+
+if grep -q "CPLOG=1" /proc/cmdline && [ ! -e "/NVM/sulog_auto_enable" ]
+then
+ /bin/sulog &
+fi
+
diff --git a/target/linux/mmp/base-files/sbin/wlan-del-mac b/target/linux/mmp/base-files/sbin/wlan-del-mac
new file mode 100755
index 0000000..81fb8fd
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/wlan-del-mac
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Copyright (C) 2010-2018 OpenWrt.org
+. /lib/functions.sh
+
+wlan_remove_macaddr() {
+ local macaddr
+
+ config_get macaddr $1 macaddr
+ [ -n "$macaddr" ] && {
+ uci_remove wireless $1 macaddr
+ }
+}
+
+[ -s /etc/config/wireless ] || return 0
+
+config_load wireless
+config_foreach wlan_remove_macaddr wifi-iface
+uci_commit wireless
diff --git a/target/linux/mmp/base-files/sbin/wsetup b/target/linux/mmp/base-files/sbin/wsetup
new file mode 100755
index 0000000..9314e49
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/wsetup
@@ -0,0 +1,269 @@
+#!/bin/sh
+#
+# wan setup: dial and setup ip/dns/route
+#
+##usage:
+#parameters:
+# CID=$1 ,cid for the pdp - optional parameter
+# if empty than for LTE: cid=4, 3G: cid=1
+# APN=$2 ,APN name - optional parameter
+# IP_TYPE=$3 ,IP type (IP, IPV6, IPV4V6)
+# AUTO=$4 ,optional parameter, AUTO=0/1
+# if auto is set than wsetup will wait upon attach
+# max waiting time is 3 sec * 40 MAX_TRY = 120 sec
+
+deactive_if_active(){
+status=`serial_atcmd "AT+CGACT?"`
+error=`echo $status | grep -i ERROR`
+if [ "$error" != "" ]; then
+ echo "CGDACT? READ ERROR"
+ exit 3
+fi
+
+configured=`echo "$status" | grep "$(($CID+1)),1"`
+if [ -z "$configured" ]; then
+ return
+fi
+
+status=`serial_atcmd "AT+CGACT=0,$(($CID+1))"`
+error=`echo $status | grep -i ERROR`
+if [ "$error" != "" ]; then
+ echo "CGDACT DEACTIVATE ERROR"
+ exit 3
+fi
+}
+
+configure_pdp(){
+status=`serial_atcmd "AT+CGDCONT=$(($CID+1)),\"$IP_TYPE\",\"$APN\",\"\",0,0"`
+error=`echo $status | grep -i ERROR`
+if [ "$error" != "" ]; then
+ echo "CGDCONT SET ERROR"
+ exit 3
+fi
+}
+
+activate_pdp(){
+status=`serial_atcmd "AT+CGACT=1,$(($CID+1))"`
+error=`echo $status | grep -i ERROR`
+if [ "$error" != "" ]; then
+ echo "CGACT SET ERROR"
+ exit 3
+fi
+}
+
+set_and_activate_pdp(){
+deactive_if_active
+configure_pdp
+activate_pdp
+}
+
+cleanup_cid()
+{
+ uci delete network.wan$CID.ipaddr > /dev/null 2>&1
+ uci delete network.wan$CID.netmask > /dev/null 2>&1
+ uci delete network.wan$CID.gateway > /dev/null 2>&1
+ uci delete network.wan$CID.ip6addr > /dev/null 2>&1
+ uci delete network.wan$CID.dns > /dev/null 2>&1
+}
+
+set_dns(){
+# Configure DNS
+DNS_PRIMARY=`echo "$status" | awk -F "," '{print $6}' | tr -d '"'`
+DNS_SECOND=`echo "$status" | awk -F "," '{print $7}' | tr -d '"'`
+
+if [ -n "$DNS_PRIMARY" ]; then
+ uci add_list network.wan$CID.dns=$DNS_PRIMARY
+fi
+
+if [ -n "$DNS_SECOND" ]; then
+ uci add_list network.wan$CID.dns=$DNS_SECOND
+fi
+}
+
+check_success(){
+status=`serial_atcmd "AT+CGACT?"`
+error=`echo $status | grep -i ERROR`
+if [ "$error" != "" ]; then
+ echo "CGDACT? READ ERROR"
+ exit 3
+fi
+
+configured=`echo "$status" | grep "$(($CID+1)),1"`
+if [ -z "$configured" ]; then
+ echo "wsetup: connect failed!"
+ exit 3
+else
+ ERR_STAT=0
+ echo "wsetup connect success CID=$CID APN=$APN"
+fi
+}
+
+#################
+# main entrance #
+#################
+
+CID=$1
+APN=$2
+IP_TYPE=$3
+AUTO=$4
+
+ERR_STAT=1
+logfile="./wsetup.log"
+TRY=0
+MAX_TRY=40
+
+if [ "$AUTO" == "1" ]; then
+ echo "AUTO MODE LOG" > $logfile
+fi
+
+if [ -z "$IP_TYPE" ]; then
+ IP_TYPE="IP"
+fi
+
+while [ $ERR_STAT -eq 1 ]; do
+ if [ "$AUTO" == "1" ]; then
+ echo "TRY=$TRY" >> $logfile
+ let TRY+=1
+ sleep 3
+ if [ $TRY -eq $MAX_TRY ]; then
+ exit 1
+ fi
+ fi
+
+ ## check AT channel
+ status=`serial_atcmd "AT" | grep OK`
+ if [ -z "$status" ]; then
+ if [ "$AUTO" == "1" ]; then
+ echo "AT CHANNEL ERROR" >> $logfile
+ continue
+ else
+ echo "AT CHANNEL ERROR"
+ exit 1
+ fi
+ fi
+
+ ## check SIM avilable
+ status=`serial_atcmd "AT+CPIN?" | grep READY`
+ if [ -z "$status" ]; then
+ if [ "$AUTO" == "1" ]; then
+ echo "SIM CARD NOT AVAILABLE" >> $logfile
+ continue
+ else
+ echo "SIM CARD NOT AVAILABLE"
+ exit 1
+ fi
+ fi
+
+ ## check registration
+ rat=`serial_atcmd "AT+COPS?" | grep COPS | awk -F "," '{print $NF}'`
+
+ if [ -z "$rat" ]; then
+ if [ "$AUTO" == "1" ]; then
+ echo "COPS READ ERROR" >> $logfile
+ continue
+ else
+ echo "COPS READ ERROR"
+ exit 3
+ fi
+ fi
+
+ if [ $rat != 7 ]; then
+ ## check registration 2G/3G
+ status=`serial_atcmd "AT+CGREG?" | grep CGREG | awk -F "," '{print $2}'`
+ if [ "$status" != "1" ] && [ "$status" != "5" ]; then
+ if [ "$AUTO" == "1" ]; then
+ echo "REGISTERATION FAILED" >> $logfile
+ continue
+ else
+ echo "REGISTERATION FAILED"
+ exit 1
+ fi
+ fi
+ #in case of 3G cid=0 is the default case
+ if [ -z "$CID" ]; then
+ CID=0
+ fi
+ set_and_activate_pdp
+ else
+ ## check registration 4G
+ status=`serial_atcmd "AT+CEREG?" | grep CEREG | awk -F "," '{print $2}'`
+ if [ "$status" != "1" ] && [ "$status" != "5" ]; then
+ if [ "$AUTO" == "1" ]; then
+ echo "REGISTERATION FAILED" >> $logfile
+ let TRY+=1
+ continue
+ else
+ echo "REGISTERATION FAILED"
+ exit 1
+ fi
+ fi
+ if [ -z "$CID" ]; then
+ #in case of LTE cid=4 is the default case
+ CID=4
+ fi
+ if [ $CID -ne 4 ]; then
+ #Activate PDP only for MO case
+ set_and_activate_pdp
+ fi
+ fi
+
+ # Configure WAN
+ status=`serial_atcmd "AT+CGPIAF=1,0,0,1"`
+ error=`echo $status | grep -i ERROR`
+ if [ "$error" != "" ]; then
+ echo "CGPIAF READ ERROR"
+ exit 3
+ fi
+
+ status=`serial_atcmd "AT+CGDCONT?"`
+ error=`echo $status | grep -i ERROR`
+ if [ "$error" != "" ]; then
+ echo "CGDCONT? READ ERROR"
+ exit 3
+ fi
+
+ PROTO=`echo "$status" | grep "CGDCONT: $(($CID+1))" | awk -F "," '{print $2}' | tr -d '"'`
+ IPV6=`echo "$PROTO" | grep 6`
+ IPV4=`echo "$PROTO" | grep -v "IPV6"`
+ WAN_IP=`echo "$status" | grep "CGDCONT: $(($CID+1))" | awk -F "," '{print $4}' | tr -d '"'`
+
+ cleanup_cid
+ uci set network.wan$CID.ifname=ccinet$CID
+ uci set network.wan$CID.proto=static
+ if [ -n "$IPV4" ]; then
+ WAN_IP4_IP=`echo $WAN_IP | cut -d " " -f1`
+ WAN_IP=`echo $WAN_IP | cut -d " " -f2`
+ uci set network.wan$CID.ipaddr=$WAN_IP4_IP
+ uci set network.wan$CID.netmask=255.255.255.255
+ uci set network.wan$CID.gateway=$WAN_IP4_IP
+ fi
+ if [ -n "$IPV6" ]; then
+ uci set network.wan$CID.ip6addr=$WAN_IP/64
+ fi
+
+ status=`serial_atcmd "AT+CGCONTRDP=$(($CID+1))"`
+ error=`echo $status | grep -i ERROR`
+ if [ "$error" != "" ]; then
+ echo "CGCONTRDP READ ERROR"
+ exit 3
+ fi
+
+ status=`echo $status | grep CGCONTRDP`
+ set_dns
+
+ status=`echo $status | awk -F "CGCONTRDP:" '{print $3}'`
+ if [ -n "$status" ]; then
+ #IPv6 DNS again for Ipv6
+ set_dns
+ fi
+
+ # Save changes
+ uci commit network
+ /etc/init.d/network reload
+
+ ifup wan$CID
+ if [ -n "$IPV6" ]; then
+ ifup wan6$CID
+ fi
+ check_success
+done
diff --git a/target/linux/mmp/base-files/sbin/zippass.sh b/target/linux/mmp/base-files/sbin/zippass.sh
new file mode 100755
index 0000000..baf6430
--- /dev/null
+++ b/target/linux/mmp/base-files/sbin/zippass.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+pipe=$1
+pipe_now=`uci get cmdline.PIPE 2> /dev/null`
+
+if [ "$pipe" == "get" ]; then
+ if [ "$pipe_now" == "1" ]; then
+ echo 1
+ else
+ echo 0
+ fi
+ exit 0
+fi
+
+if [ "$pipe" != "0" ] && [ "$pipe" != "1" ]; then
+ echo "invaild pipe mode parameter" > /dev/kmsg
+ exit 0
+fi
+
+if [ "$pipe_now" == "1" ]; then
+ if [ "1" == "$pipe" ]; then
+ exit 0
+ fi
+else
+ if [ "0" == "$pipe" ]; then
+ exit 0
+ fi
+fi
+
+if [ "$pipe" == "1" ]; then
+ cp -fp /etc/config/network /etc/config/network_mifi
+ cp -fp /etc/config/dhcp /etc/config/dhcp_mifi
+ cp -fp /rom/etc/config/network /etc/config/network
+ /etc/init.d/forwarder stop
+ uci set cmdline.PIPE=1
+ uci commit cmdline
+ sync
+ /etc/init.d/network restart
+ /etc/init.d/cm.init restart
+ /etc/init.d/forwarder start
+else
+ cp -fp /etc/config/network_mifi /etc/config/network
+ cp -fp /etc/config/dhcp_mifi /etc/config/dhcp
+ /etc/init.d/forwarder stop
+ uci del cmdline.PIPE
+ uci commit cmdline
+ sync
+ /etc/init.d/network restart
+ /etc/init.d/cm.init restart
+ /etc/init.d/forwarder start
+fi