openwrt/package/utils/nvram/files/nvram-bcm47xx.init
Arınç ÜNAL f4e219fd5e packages: nvram: add NVRAM quirks for bcm53xx target
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>
2022-05-04 21:51:20 +02:00

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
}