mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 22:47:56 +00:00
f4e219fd5e
Add NVRAM quirks script for the bcm53xx target. Split NVRAM quirks for the bcm47xx and bcm53xx targets. Move clear partialboot NVRAM quirk for Linksys EA9500 here. Add set wireless LED behaviour quirk for Asus RT-AC88U. Use boot() instead of start() as nvram commands are meant to be executed only once, at boot. Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
99 lines
2.9 KiB
Bash
Executable File
99 lines
2.9 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
# NVRAM setup
|
|
#
|
|
# This file handles the NVRAM quirks of various hardware of the bcm47xx target.
|
|
|
|
START=02
|
|
alias debug=${DEBUG:-:}
|
|
|
|
nvram_default() {
|
|
[ -z "$(nvram get $1)" ] && nvram set "$1=$2"
|
|
}
|
|
|
|
nvram_set() { # for the linksys fixup part
|
|
[ "$(nvram get "$1")" = "$2" -a "$2" != "" ] || {
|
|
COMMIT=1
|
|
/usr/sbin/nvram set "$1=$2"
|
|
}
|
|
}
|
|
|
|
fixup_linksys() {
|
|
# work around braindead CFE defaults in linksys routers
|
|
boardtype=$(nvram get boardtype)
|
|
boardnum=$(nvram get boardnum)
|
|
boardflags=$(($(nvram get boardflags)))
|
|
adm_switch="$(( ($boardflags & 0x80) >> 7 ))"
|
|
|
|
[ -n "$(nvram get vxkilled)" ] && boardtype=0 # don't mess with the ram settings on the hacked cfe
|
|
case "$(( $boardtype ))" in
|
|
"1800") #0x708
|
|
if [ "$adm_switch" = 0 ]; then
|
|
nvram_set sdram_init "$(printf 0x%04x $(( $(/usr/sbin/nvram get sdram_init) | 0x0100 )))"
|
|
[ "$COMMIT" = 1 ] && {
|
|
nvram_set clkfreq 216
|
|
nvram_set sdram_ncdl 0x0
|
|
nvram_set pa0itssit 62
|
|
nvram_set pa0b0 0x15eb
|
|
nvram_set pa0b1 0xfa82
|
|
nvram_set pa0b2 0xfe66
|
|
nvram_set pa0maxpwr 0x4e
|
|
}
|
|
fi
|
|
;;
|
|
"1127") #0x467
|
|
nvram_set sdram_init "$(printf 0x%04x $(( $(/usr/sbin/nvram get sdram_init) | 0x0100 )))"
|
|
[ "$COMMIT" = 1 ] && {
|
|
nvram_set sdram_ncdl 0x0
|
|
nvram_set pa0itssit 62
|
|
nvram_set pa0b0 0x168b
|
|
nvram_set pa0b1 0xfabf
|
|
nvram_set pa0b2 0xfeaf
|
|
nvram_set pa0maxpwr 0x4e
|
|
}
|
|
;;
|
|
"1071") #0x042f
|
|
# do sanity check first! max 0x0011 = 128mb
|
|
SDRAM_INIT=$(printf %d $(/usr/sbin/nvram get sdram_init))
|
|
[ "$SDRAM_INIT" -lt "9" -o "$SDRAM_INIT" -gt "17" ] && {
|
|
# set this to default: 0x09 only if value is invaild like 16MB on Asus WL-500GP
|
|
echo "sdram_init is invaild: $(printf 0x%04x $SDRAM_INIT), force to default!"
|
|
nvram_set sdram_init 0x0009
|
|
}
|
|
# on WRT54G3GV2 set flag, so checksum errors of firmware image 2 don't stop the boot process
|
|
noset_try_flag=$(nvram get noset_try_flag)
|
|
[ "$noset_try_flag" = 0 ] && {
|
|
echo "setting noset_try_flag to 1."
|
|
nvram_set noset_try_flag 1
|
|
}
|
|
[ "$COMMIT" = 1 ] && {
|
|
nvram_set sdram_ncdl 0x0
|
|
}
|
|
esac
|
|
}
|
|
|
|
boot() {
|
|
# Don't do any fixups on the WGT634U
|
|
[ "$(cat /proc/diag/model)" = "Netgear WGT634U" ] && return
|
|
|
|
fixup_linksys
|
|
|
|
# OFDM Power Offset is set incorrectly on many boards.
|
|
# Setting it to 0 will increase the tx power to normal levels.
|
|
nvram_set opo 0x0
|
|
|
|
[ "$(nvram get il0macaddr)" = "00:90:4c:5f:00:2a" ] && {
|
|
# if default wifi mac, set two higher than the lan mac
|
|
nvram set il0macaddr=$(nvram get et0macaddr|
|
|
awk '{OFS=FS=":";for(x=7,y=2;--x;){$x=sprintf("%02x",(y+="0x"$x)%256);y/=256}print}')
|
|
}
|
|
|
|
[ "$(nvram get et0macaddr)" = "00:90:4c:c0:00:08" ] && {
|
|
# OvisLink WL-1600GL mac workaround
|
|
nvram set et0macaddr=$(hexdump -n 6 -s 130976 -e '5/1 "%02x:" "%02x" ' /dev/mtd/0)
|
|
nvram set il0macaddr=$(nvram get et0macaddr|
|
|
awk '{OFS=FS=":";for(x=7,y=2;--x;){$x=sprintf("%02x",(y+="0x"$x)%256);y/=256}print}')
|
|
}
|
|
|
|
[ "$COMMIT" = "1" ] && nvram commit
|
|
}
|