mpc85xx: add user-space support for the TL-WDR4900 v1

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 35733
lede-17.01
Gabor Juhos 2013-02-21 19:20:34 +00:00
parent bd2c77b264
commit 4da13625d5
9 changed files with 320 additions and 0 deletions

View File

@ -0,0 +1,5 @@
define Package/base-files/install-target
rm -f $(1)/etc/config/network
endef

View File

@ -0,0 +1,35 @@
#!/bin/sh
# Copyright (C) 2013 OpenWrt.org
. /lib/functions/leds.sh
. /lib/mpc85xx.sh
get_status_led() {
case $(mpc85xx_board_name) in
tl-wdr4900-v1)
status_led="tp-link:blue:system"
;;
esac
}
set_state() {
get_status_led
case "$1" in
preinit)
insmod leds-gpio
insmod ledtrig-default-on
insmod ledtrig-timer
status_led_blink_preinit
;;
failsafe)
status_led_blink_failsafe
;;
done)
status_led_on
;;
esac
}

View File

@ -0,0 +1,69 @@
#!/bin/sh
FW_FILE="/lib/firmware/$FIRMWARE"
ath9k_eeprom_die() {
echo "ath9k eeprom: " "$*" >&2
exit 1
}
ath9k_eeprom_extract() {
local part=$1
local offset=$2
local count=$3
local mtd
. /lib/functions.sh
mtd=$(find_mtd_chardev $part)
[ -n "$mtd" ] || \
ath9k_eeprom_die "no mtd device found for partition $part"
dd if=$mtd bs=$offset skip=1 count=1 2>/dev/null | dd of=$FW_FILE bs=$count count=1 2>/dev/null || \
ath9k_eeprom_die "failed to extract from $mtd"
}
tpl_set_wireless_mac()
{
local offset=$1
local mac
. /lib/functions.sh
mac=$(mtd_get_mac_binary u-boot 326656)
mac=$(macaddr_add $mac $offset)
macaddr_2bin $mac | dd bs=1 count=6 seek=2 conv=notrunc of=$FW_FILE 2>/dev/null
}
[ -e $FW_FILE ] && exit 0
. /lib/mpc85xx.sh
board=$(mpc85xx_board_name)
case "$FIRMWARE" in
"pci_wmac0.eeprom")
case $board in
tl-wdr4900-v1)
ath9k_eeprom_extract "caldata" 4096 2048
tpl_set_wireless_mac 0
;;
*)
ath9k_eeprom_die "board $board is not supported yet"
;;
esac
;;
"pci_wmac1.eeprom")
case $board in
tl-wdr4900-v1)
ath9k_eeprom_extract "caldata" 20480 2048
tpl_set_wireless_mac -1
;;
*)
ath9k_eeprom_die "board $board is not supported yet"
;;
esac
;;
esac

View File

@ -0,0 +1,2 @@
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown

View File

@ -0,0 +1,27 @@
#!/bin/sh
#
# Copyright (C) 2011 OpenWrt.org
#
enable_console_login() {
local cons=$1
local initline="$cons::askfirst:/bin/ash --login"
grep -qs "^$initline" /etc/inittab || {
echo "$initline" >> /etc/inittab
sync
kill -HUP 1
}
}
inittab_console_fixup() {
for cons in ttyS0 ttyS1; do
grep -qs "console=$cons" /proc/cmdline && {
enable_console_login $cons
}
done
}
inittab_console_fixup
exit 0

View File

@ -0,0 +1,49 @@
#!/bin/sh
#
# Copyright (C) 2013 OpenWrt.org
#
tplink_set_mac()
{
local cfg=$1
local offset=$2
local mac
. /lib/functions.sh
mac=$(mtd_get_mac_binary u-boot 326656)
mac=$(macaddr_add $mac $offset)
ucidef_set_interface_macaddr $cfg $mac
}
[ -e /etc/config/network ] && exit 0
touch /etc/config/network
. /lib/functions/uci-defaults.sh
. /lib/mpc85xx.sh
ucidef_set_interface_loopback
board=$(mpc85xx_board_name)
case "$board" in
tl-wdr4900-v1)
ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
ucidef_add_switch "switch0" "1" "1"
ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5"
ucidef_add_switch_vlan "switch0" "2" "0t 1"
tplink_set_mac lan -2
tplink_set_mac wan 1
;;
*)
ucidef_set_interfaces_lan_wan "eth0" "eth1"
;;
esac
uci commit network
exit 0

View File

@ -0,0 +1,39 @@
#!/bin/sh
#
# Copyright (C) 2013 OpenWrt.org
#
MPC85XX_BOARD_NAME=
MPC85XX_MODEL=
mpc85xx_board_detect() {
local model
local name
model=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /model/ {print $2}' /proc/cpuinfo)
case "$model" in
*"TL-WDR4900 v1")
name="tl-wdr4900-v1"
;;
esac
[ -z "$name" ] && name="unknown"
[ -z "$MPC85XX_BOARD_NAME" ] && MPC85XX_BOARD_NAME="$name"
[ -z "$MPC85XX_MODEL" ] && MPC85XX_MODEL="$model"
[ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/"
echo "$MPC85XX_BOARD_NAME" > /tmp/sysinfo/board_name
echo "$MPC85XX_MODEL" > /tmp/sysinfo/model
}
mpc85xx_board_name() {
local name
[ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name)
[ -z "$name" ] && name="unknown"
echo "$name"
}

View File

@ -0,0 +1,9 @@
#!/bin/sh
do_mpc85xx() {
. /lib/mpc85xx.sh
mpc85xx_board_detect
}
boot_hook_add preinit_main do_mpc85xx

View File

@ -0,0 +1,85 @@
#
# Copyright (C) 2011 OpenWrt.org
#
. /lib/mpc85xx.sh
PART_NAME=firmware
RAMFS_COPY_DATA=/lib/mpc85xx.sh
tplink_get_hwid() {
local part
part=$(find_mtd_part u-boot)
[ -z "$part" ] && return 1
dd if=$part bs=4 count=1 skip=81728 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
tplink_get_image_hwid() {
get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
tplink_get_image_boot_size() {
get_image "$@" | dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
}
platform_check_image() {
local board=$(mpc85xx_board_name)
local magic="$(get_magic_long "$1")"
[ "$ARGC" -gt 1 ] && return 1
case $board in
tl-wdr4900-v1)
[ "$magic" != "01000000" ] && {
echo "Invalid image type."
return 1
}
local hwid
local imageid
hwid=$(tplink_get_hwid)
imageid=$(tplink_get_image_hwid "$1")
[ "$hwid" != "$imageid" ] && {
echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid."
return 1
}
local boot_size
boot_size=$(tplink_get_image_boot_size "$1")
[ "$boot_size" != "00000000" ] && {
echo "Invalid image, it contains a bootloader."
return 1
}
return 0
;;
esac
echo "Sysupgrade is not yet supported on $board."
return 1
}
platform_do_upgrade() {
local board=$(mpc85xx_board_name)
case "$board" in
*)
default_do_upgrade "$ARGV"
;;
esac
}
disable_watchdog() {
killall watchdog
( ps | grep -v 'grep' | grep '/dev/watchdog' ) && {
echo 'Could not disable watchdog'
return 1
}
}
append sysupgrade_pre_upgrade disable_watchdog