mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-23 12:58:23 +00:00
93d4439454
I-O DATA WN-AC1600DGR is a 2.4/5 GHz band 11ac router, based on Qualcomm Atheros QCA9557. Specification: - SoC: Qualcomm Atheros QCA9557 - RAM: 128 MB - Flash: 16 MB - WLAN: 2.4/5 GHz - 2.4 GHz: 2T2R (SoC internal) - 5 GHz: 3T3R (QCA9880) - Ethernet: 5x 10/100/1000 Mbps - Switch: QCA8337N - LED/key: 6x/6x(4x buttons, 1x slide switch) - UART: through-hole on PCB - Vcc, GND, TX, RX from ethernet port side - 115200n8 Flash instruction using factory image: 1. Connect the computer to the LAN port of WN-AC1600DGR 2. Connect power cable to WN-AC1600DGR and turn on it 3. Access to "http://192.168.0.1/" and open firmware update page ("ファームウェア") 4. Select the OpenWrt factory image and click update ("更新") button 5. Wait ~150 seconds to complete flashing Alternative flash instruction using initramfs image: 1. Prepare a computer and TFTP server software with the IP address "192.168.99.8" and renamed OpenWrt initramfs image "uImageWN-AC1600DGR" 2. Connect between WN-AC1600DGR and the computer with UART 3. Connect power cable to WN-AC1600DGR, press "4" on the serial console and enter the U-Boot console 4. execute "tftpboot" command on the console and download initramfs image from the TFTP server 5. execute "bootm" command and boot OpenWrt 6. On initramfs image, download the sysupgrade image to the device and perform sysupgrade with it 7. Wait ~150 seconds to complete flashing This commit also removes unnecessary "qca,no-eeprom" property from the ath10k wifi node. Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
222 lines
4.9 KiB
Bash
222 lines
4.9 KiB
Bash
#!/bin/sh
|
|
|
|
[ -e /lib/firmware/$FIRMWARE ] && exit 0
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/system.sh
|
|
|
|
ath9k_eeprom_die() {
|
|
echo "ath9k eeprom: " "$*"
|
|
exit 1
|
|
}
|
|
|
|
ath9k_eeprom_extract() {
|
|
local part=$1
|
|
local offset=$2
|
|
local count=$3
|
|
local mtd
|
|
|
|
mtd=$(find_mtd_chardev $part)
|
|
[ -n "$mtd" ] || \
|
|
ath9k_eeprom_die "no mtd device found for partition $part"
|
|
|
|
dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
|
|
ath9k_eeprom_die "failed to extract from $mtd"
|
|
}
|
|
|
|
ath9k_eeprom_extract_reverse() {
|
|
local part=$1
|
|
local offset=$2
|
|
local count=$3
|
|
local mtd
|
|
local reversed
|
|
local caldata
|
|
|
|
mtd=$(find_mtd_chardev "$part")
|
|
reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd)
|
|
|
|
for byte in $reversed; do
|
|
caldata="\x${byte}${caldata}"
|
|
done
|
|
|
|
printf "%b" "$caldata" > /lib/firmware/$FIRMWARE
|
|
}
|
|
|
|
xor() {
|
|
local val
|
|
local ret="0x$1"
|
|
local retlen=${#1}
|
|
|
|
shift
|
|
while [ -n "$1" ]; do
|
|
val="0x$1"
|
|
ret=$((ret ^ val))
|
|
shift
|
|
done
|
|
|
|
printf "%0${retlen}x" "$ret"
|
|
}
|
|
|
|
ath9k_patch_fw_mac() {
|
|
local mac=$1
|
|
local mac_offset=$2
|
|
local chksum_offset=$3
|
|
local xor_mac
|
|
local xor_fw_mac
|
|
local xor_fw_chksum
|
|
|
|
[ -z "$mac" -o -z "$mac_offset" ] && return
|
|
|
|
[ -n "$chksum_offset" ] && {
|
|
xor_mac=${mac//:/}
|
|
xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}"
|
|
|
|
xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
|
|
xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}"
|
|
|
|
xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
|
|
xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac)
|
|
|
|
printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \
|
|
dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2
|
|
}
|
|
|
|
macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$mac_offset count=6
|
|
}
|
|
|
|
ath9k_patch_fw_mac_crc() {
|
|
local mac=$1
|
|
local mac_offset=$2
|
|
local chksum_offset=$((mac_offset - 10))
|
|
|
|
ath9k_patch_fw_mac "${mac}" "${mac_offset}" "${chksum_offset}"
|
|
}
|
|
|
|
board=$(board_name)
|
|
|
|
case "$FIRMWARE" in
|
|
"ath9k-eeprom-ahb-18100000.wmac.bin")
|
|
case $board in
|
|
avm,fritz4020)
|
|
ath9k_eeprom_extract_reverse "urlader" 5441 1088
|
|
;;
|
|
dlink,dir-825-c1|\
|
|
dlink,dir-835-a1)
|
|
ath9k_eeprom_extract "art" 4096 1088
|
|
ath9k_patch_fw_mac_crc $(mtd_get_mac_text "mac" 4) 2
|
|
;;
|
|
dlink,dir-859-a1)
|
|
ath9k_eeprom_extract "art" 4096 1088
|
|
ath9k_patch_fw_mac $(mtd_get_mac_ascii devdata "wlan24mac") 2
|
|
;;
|
|
iodata,wn-ac1167dgr|\
|
|
iodata,wn-ac1600dgr|\
|
|
iodata,wn-ac1600dgr2|\
|
|
iodata,wn-ag300dgr)
|
|
ath9k_eeprom_extract "art" 4096 1088
|
|
ath9k_patch_fw_mac $(mtd_get_mac_ascii u-boot-env ethaddr) 2
|
|
;;
|
|
nec,wg800hp)
|
|
ath9k_eeprom_extract "art" 4096 1088
|
|
ath9k_patch_fw_mac $(mtd_get_mac_text board_data 1664) 2
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
"ath9k-eeprom-pci-0000:00:00.0.bin")
|
|
case $board in
|
|
avm,fritz300e)
|
|
ath9k_eeprom_extract_reverse "urloader" 5441 1088
|
|
;;
|
|
buffalo,whr-g301n|\
|
|
buffalo,wzr-hp-g302h-a1a0|\
|
|
tplink,tl-wr841-v5|\
|
|
tplink,tl-wr941-v4)
|
|
ath9k_eeprom_extract "art" 4096 3768
|
|
;;
|
|
buffalo,wzr-hp-g450h)
|
|
ath9k_eeprom_extract "ART" 4096 1088
|
|
;;
|
|
dlink,dir-825-c1|\
|
|
dlink,dir-835-a1)
|
|
ath9k_eeprom_extract "art" 20480 1088
|
|
ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "mac" 24) 1) 2
|
|
;;
|
|
ocedo,raccoon|\
|
|
tplink,tl-wdr3600|\
|
|
tplink,tl-wdr4300|\
|
|
tplink,tl-wdr4900-v2|\
|
|
winchannel,wb2000)
|
|
ath9k_eeprom_extract "art" 20480 1088
|
|
;;
|
|
netgear,wnr612-v2|\
|
|
on,n150r|\
|
|
pcs,cap324|\
|
|
tplink,tl-mr3220-v1|\
|
|
tplink,tl-mr3420-v1|\
|
|
tplink,tl-wr2543-v1|\
|
|
tplink,tl-wr740n-v1|\
|
|
tplink,tl-wr740n-v3|\
|
|
tplink,tl-wr741-v1|\
|
|
tplink,tl-wr743nd-v1|\
|
|
tplink,tl-wr841-v7|\
|
|
tplink,tl-wr842n-v1|\
|
|
ubnt,airrouter|\
|
|
ubnt,bullet-m|\
|
|
ubnt,nano-m|\
|
|
ubnt,rocket-m)
|
|
ath9k_eeprom_extract "art" 4096 4096
|
|
;;
|
|
pqi,air-pen)
|
|
ath9k_eeprom_extract "art" 4096 2002
|
|
;;
|
|
ubnt,unifi)
|
|
ath9k_eeprom_extract "art" 4096 2048
|
|
;;
|
|
wd,mynet-wifi-rangeextender)
|
|
ath9k_eeprom_extract "art" 4096 4096
|
|
ath9k_patch_fw_mac_crc $(nvram get wl0_hwaddr) "$mac" 2
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
"ath9k-eeprom-pci-0000:00:11.0.bin")
|
|
case $board in
|
|
buffalo,wzr-hp-ag300h|\
|
|
netgear,wndr3700|\
|
|
netgear,wndr3700v2|\
|
|
netgear,wndr3800)
|
|
ath9k_eeprom_extract "art" 4096 3768
|
|
;;
|
|
dlink,dir-825-b1)
|
|
ath9k_eeprom_extract "caldata" 4096 3768
|
|
ath9k_patch_fw_mac_crc $(mtd_get_mac_text "caldata" 65440) 524
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
"ath9k-eeprom-pci-0000:00:12.0.bin")
|
|
case $board in
|
|
buffalo,wzr-hp-ag300h|\
|
|
netgear,wndr3700|\
|
|
netgear,wndr3700v2|\
|
|
netgear,wndr3800)
|
|
ath9k_eeprom_extract "art" 20480 3768
|
|
;;
|
|
dlink,dir-825-b1)
|
|
ath9k_eeprom_extract "caldata" 20480 3768
|
|
ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "caldata" 65460) 1) 524
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|