ar71xx: fix 5 GHz Wi-Fi on NBG6716
authorMatti Laakso <matti.laakso@outlook.com>
Sun, 14 Jan 2018 15:39:53 +0000 (17:39 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Fri, 22 Jun 2018 20:15:52 +0000 (22:15 +0200)
Some NBG6716 do not have ath10k calibration data in flash, only in chip
OTP. To determine if flash has a valid calibration data, the first two
bytes telling the length of the calibration data are checked against the
requested length. If the lengths match, calibration data is valid and
read from flash.

Signed-off-by: Matti Laakso <matti.laakso@outlook.com>
target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata

index b3e23c9a8f8c56870ef36fb55ae52e6b5ea61134..96ca65e694bb5ed449dcae8dbca1930d25612602 100644 (file)
@@ -18,12 +18,18 @@ ath10kcal_extract() {
        local part=$1
        local offset=$2
        local count=$3
-       local mtd
+       local mtd cal_size
 
        mtd=$(find_mtd_chardev $part)
        [ -n "$mtd" ] || \
                ath10kcal_die "no mtd device found for partition $part"
 
+       # Check that the calibration data size in header equals the desired size
+       cal_size=$(dd if=$mtd bs=2 count=1 skip=$(( $offset / 2 )) conv=swab 2>/dev/null | hexdump -ve '1/2 "%d"')
+
+       [ "$count" = "$cal_size" ] || \
+               ath10kcal_die "no calibration data found in $part"
+
        dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
                ath10kcal_die "failed to extract calibration data from $mtd"
 }