summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Lamparter2022-02-06 00:42:01 +0000
committerChristian Lamparter2022-02-14 20:12:36 +0000
commit52f3407d94da62b99ba6c09f3663464cccd29b4f (patch)
treea5dc621d7f591b6e261ad3f553379027a8c7a99f
parent9e174d3ab0da907af48a0686d8e4f52b107b9c6c (diff)
downloadchunkeey-52f3407d94da62b99ba6c09f3663464cccd29b4f.tar.gz
ipq40xx: dynamically build board-2.bin for Mikrotikmikrotik
Mikrotik devices ship with the boardfile data right on the board itself. This script takes the data from the sysfs firmware "wlan_data" to generate a custom board-2.bin for the ath10k driver to work with. The qcom,ath10k-calibration-variant in each device's device-tree file are being removed as well. Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-rw-r--r--target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata50
-rw-r--r--target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-cap-ac.dts4
-rw-r--r--target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-hap-ac2.dts4
-rw-r--r--target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-sxtsq-5-ac.dts2
-rw-r--r--target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-hap-ac3.dts4
5 files changed, 50 insertions, 14 deletions
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index 2c56e53f9c..57c8d7a610 100644
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -6,6 +6,46 @@
board=$(board_name)
+board2_add_entry()
+{
+ local file="$1"
+ local offset="$(($2))"
+ local size="$(($3))"
+
+ local id=$(dd iflag=skip_bytes if="$file" bs=1 count=1 skip=$((offset+32)) | hexdump -e '1/1 "%02d"')
+
+ # Qualcomm IDs are in the range of 16 to 30 it seems - taken from the board-2.bin
+ # This is there to skip the missing 2G on the SXTSQ 5 AC
+ [ "$id" -ge 16 -a "$id" -le 30 ] || return 0
+
+ printf "\x00\x00\x00\x00\x58\x2f\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00"
+ printf "bus=ahb,bmi-chip-id=0,bmi-board-id=${id}\x00\x00\x00"
+ printf "\x01\x00\x00\x00\x20\x2f\x00\x00"
+
+ dd iflag=skip_bytes,fullblock if="$file" bs="$size" count=1 skip="$offset" >> "/lib/firmware/$FIRMWARE"
+}
+
+board2_create_for_mikrotik()
+{
+ wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
+
+ [ -f "$wlan_data" ] && {
+ (
+ printf "QCA-ATH10K-BOARD\x00\x00\x00\x00"
+ board2_add_entry "$wlan_data" 0x2f20 0x2f20
+ board2_add_entry "$wlan_data" 0xaf20 0x2f20
+ ) >> "/lib/firmware/$FIRMWARE"
+ } || true
+
+ [ -d "$wlan_data" ] && {
+ (
+ printf "QCA-ATH10K-BOARD\x00\x00\x00\x00"
+ board2_add_entry "$wlan_data/data_0" 0x2f20 0x2f20
+ board2_add_entry "$wlan_data/data_2" 0x2f20 0x2f20
+ ) >> "/lib/firmware/$FIRMWARE"
+ } || true
+}
+
case "$FIRMWARE" in
"ath10k/cal-pci-0000:01:00.0.bin")
case "$board" in
@@ -213,6 +253,16 @@ case "$FIRMWARE" in
;;
esac
;;
+"ath10k/QCA4019/hw1.0/board-2.bin")
+case "$board" in
+ mikrotik,cap-ac |\
+ mikrotik,hap-ac2 |\
+ mikrotik,hap-ac3 |\
+ mikrotik,sxtsq-5-ac)
+ board2_create_for_mikrotik
+ ;;
+ esac
+ ;;
*)
exit 1
;;
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-cap-ac.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-cap-ac.dts
index 1afbf97f39..3ebcb3ba5f 100644
--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-cap-ac.dts
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-cap-ac.dts
@@ -239,12 +239,8 @@
&wifi0 {
status = "okay";
-
- qcom,ath10k-calibration-variant = "MikroTik-cAP-ac";
};
&wifi1 {
status = "okay";
-
- qcom,ath10k-calibration-variant = "MikroTik-cAP-ac";
};
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-hap-ac2.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-hap-ac2.dts
index d03409b556..829028b527 100644
--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-hap-ac2.dts
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-hap-ac2.dts
@@ -262,12 +262,8 @@
&wifi0 {
status = "okay";
-
- qcom,ath10k-calibration-variant = "MikroTik-hAP-ac2";
};
&wifi1 {
status = "okay";
-
- qcom,ath10k-calibration-variant = "MikroTik-hAP-ac2";
};
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-sxtsq-5-ac.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-sxtsq-5-ac.dts
index fd11229dbb..f777295177 100644
--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-sxtsq-5-ac.dts
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-sxtsq-5-ac.dts
@@ -225,8 +225,6 @@
&wifi1 {
status = "okay";
-
- qcom,ath10k-calibration-variant = "MikroTik-SXTsq-5-ac";
};
&gmac0 {
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-hap-ac3.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-hap-ac3.dts
index 9aa58ffcb4..ebf169d032 100644
--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-hap-ac3.dts
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-hap-ac3.dts
@@ -317,12 +317,8 @@
&wifi0 {
status = "okay";
-
- qcom,ath10k-calibration-variant = "MikroTik-hAP-ac3";
};
&wifi1 {
status = "okay";
-
- qcom,ath10k-calibration-variant = "MikroTik-hAP-ac3";
};