Skip to content

Commit ed406cf

Browse files
committed
ipq50xx: Add WiFi support for Redmi AX3000
1 parent 424da1e commit ed406cf

File tree

7 files changed

+209
-1
lines changed

7 files changed

+209
-1
lines changed

package/firmware/ipq-wifi/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ ALLWIFIBOARDS:= \
3636
netgear_wax218 \
3737
prpl_haze \
3838
qnap_301w \
39+
redmi_ax3000 \
3940
redmi_ax6 \
4041
wallys_dr40x9 \
4142
xiaomi_ax3600 \
@@ -129,6 +130,7 @@ $(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800))
129130
$(eval $(call generate-ipq-wifi-package,netgear_wax218,Netgear WAX218))
130131
$(eval $(call generate-ipq-wifi-package,qnap_301w,QNAP 301w))
131132
$(eval $(call generate-ipq-wifi-package,prpl_haze,prpl Haze))
133+
$(eval $(call generate-ipq-wifi-package,redmi_ax3000,Redmi AX3000))
132134
$(eval $(call generate-ipq-wifi-package,redmi_ax6,Redmi AX6))
133135
$(eval $(call generate-ipq-wifi-package,wallys_dr40x9,Wallys DR40X9))
134136
$(eval $(call generate-ipq-wifi-package,xiaomi_ax3600,Xiaomi AX3600))
256 KB
Binary file not shown.
128 KB
Binary file not shown.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/sh
2+
3+
[ -e /lib/firmware/$FIRMWARE ] && exit 0
4+
5+
set_board_id() {
6+
echo "$1" >/lib/firmware/$FIRMWARE
7+
}
8+
9+
board=$(board_name)
10+
11+
case "$FIRMWARE" in
12+
"ath11k/IPQ5018/hw1.0/board_id-ahb-c000000.wifi")
13+
case "$board" in
14+
redmi,ax3000)
15+
case "$(strings /dev/mtdblock15 | grep wl_pa_type= | cut -d= -f2)" in
16+
epa) set_board_id 0x24 ;;
17+
ipa|*) set_board_id 0x10 ;;
18+
esac
19+
;;
20+
esac
21+
;;
22+
"ath11k/qcn6122/hw1.0/board_id-ahb-soc:wifi1@c000000")
23+
case "$board" in
24+
redmi,ax3000)
25+
set_board_id 0x60
26+
;;
27+
esac
28+
;;
29+
*)
30+
exit 1
31+
;;
32+
esac
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/bin/sh
2+
3+
[ -e /lib/firmware/$FIRMWARE ] && exit 0
4+
5+
. /lib/functions/caldata.sh
6+
7+
board=$(board_name)
8+
9+
case "$FIRMWARE" in
10+
"ath11k/IPQ5018/hw1.0/caldata.bin")
11+
case "$board" in
12+
redmi,ax3000)
13+
caldata_extract "0:ART" 0x1000 0x20000
14+
;;
15+
esac
16+
;;
17+
"ath11k/qcn6122/hw1.0/caldata_1.bin")
18+
case "$board" in
19+
redmi,ax3000)
20+
caldata_extract "0:ART" 0x26800 0x20000
21+
;;
22+
esac
23+
;;
24+
*)
25+
exit 1
26+
;;
27+
esac

target/linux/ipq50xx/files/arch/arm64/boot/dts/qcom/ipq5000-ax3000.dts

Lines changed: 144 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,25 @@
2828

2929
chosen {
3030
// Override the root parameter from u-boot
31-
bootargs-append = " root=/dev/ubiblock0_1";
31+
// Increase coherent_pool size for WiFi
32+
bootargs-append = " root=/dev/ubiblock0_1 coherent_pool=2M";
3233
stdout-path = "serial0:115200n8";
3334
};
3435

36+
reserved-memory {
37+
// Not sure why but without this, WiFi will crash
38+
tz_apps@4a400000 {
39+
no-map;
40+
// The size is incorrent, but it works
41+
reg = <0x0 0x4a400000 0x0 0x700000>;
42+
};
43+
44+
q6_mem_regions: q6_mem_regions@4B000000 {
45+
no-map;
46+
reg = <0x0 0x4B000000 0x0 0x3B00000>;
47+
};
48+
};
49+
3550
thermal-zones {
3651
status = "ok";
3752
};
@@ -401,3 +416,131 @@
401416
reg = <4>;
402417
};
403418
};
419+
420+
&q6v5_wcss {
421+
memory-region = <&q6_mem_regions>;
422+
423+
qcom,rproc = <&q6v5_wcss>;
424+
firmware = "IPQ5018/q6_fw.mdt";
425+
426+
qcom,bootargs_smem = <507>;
427+
boot-args = <0x2 0x4 0x2 0x1B 0x0 0x0>;
428+
429+
status = "ok";
430+
431+
// IPQ5018
432+
q6_wcss_pd1: remoteproc_pd1@4ab000 {
433+
compatible = "qcom,ipq5018-wcss-ahb-mpd";
434+
435+
resets =
436+
<&gcc GCC_WCSSAON_RESET>,
437+
<&gcc GCC_WCSS_BCR>,
438+
<&gcc GCC_CE_BCR>;
439+
reset-names =
440+
"wcss_aon_reset",
441+
"wcss_reset",
442+
"ce_reset";
443+
444+
clocks =
445+
<&gcc GCC_WCSS_AHB_S_CLK>,
446+
<&gcc GCC_WCSS_ACMT_CLK>,
447+
<&gcc GCC_WCSS_AXI_M_CLK>;
448+
clock-names =
449+
"gcc_wcss_ahb_s_clk",
450+
"gcc_wcss_acmt_clk",
451+
"gcc_wcss_axi_m_clk";
452+
453+
reg = <0x4ab000 0x20>;
454+
reg-names = "rmb";
455+
456+
// qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>;
457+
458+
interrupts-extended =
459+
<&wcss_smp2p_in 8 0>,
460+
<&wcss_smp2p_in 9 0>,
461+
<&wcss_smp2p_in 12 0>,
462+
<&wcss_smp2p_in 11 0>;
463+
interrupt-names =
464+
"fatal",
465+
"ready",
466+
"spawn-ack",
467+
"stop-ack";
468+
469+
qcom,smem-states =
470+
<&wcss_smp2p_out 8>,
471+
<&wcss_smp2p_out 9>,
472+
<&wcss_smp2p_out 10>;
473+
qcom,smem-state-names =
474+
"shutdown",
475+
"stop",
476+
"spawn";
477+
478+
firmware = "IPQ5018/q6_fw.mdt";
479+
m3_firmware = "IPQ5018/m3_fw.mdt";
480+
};
481+
482+
// QCN6102
483+
q6_wcss_pd2: remoteproc_pd2 {
484+
compatible = "qcom,ipq5018-wcss-pcie-mpd";
485+
486+
interrupts-extended =
487+
<&wcss_smp2p_in 16 0>,
488+
<&wcss_smp2p_in 17 0>,
489+
<&wcss_smp2p_in 20 0>,
490+
<&wcss_smp2p_in 19 0>;
491+
interrupt-names =
492+
"fatal",
493+
"ready",
494+
"spawn-ack",
495+
"stop-ack";
496+
497+
qcom,smem-states =
498+
<&wcss_smp2p_out 16>,
499+
<&wcss_smp2p_out 17>,
500+
<&wcss_smp2p_out 18>;
501+
qcom,smem-state-names =
502+
"shutdown",
503+
"stop",
504+
"spawn";
505+
506+
firmware = "IPQ5018/q6_fw.mdt";
507+
m3_firmware = "qcn6122/m3_fw.mdt";
508+
};
509+
};
510+
511+
&wifi0 {
512+
// IPQ5000
513+
qcom,multipd_arch;
514+
qcom,rproc = <&q6_wcss_pd1>;
515+
qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
516+
517+
// Be overridden by /etc/hotplug.d/firmware/10-ath11k-board_id
518+
// M79: 0x10
519+
// M81: 0x24
520+
qcom,board_id = <0x24>;
521+
522+
qcom,ath11k-fw-memory-mode = <0>;
523+
qcom,bdf-addr = <0x4C400000>;
524+
qcom,caldb-addr = <0x4D200000>;
525+
// qcom,m3-dump-addr = <0x4D400000>;
526+
527+
status = "ok";
528+
};
529+
530+
&wifi1 {
531+
// QCN6102
532+
qcom,multipd_arch;
533+
qcom,rproc = <&q6_wcss_pd2>;
534+
qcom,userpd-subsys-name = "q6v5_wcss_userpd2";
535+
536+
qcom,board_id = <0x60>;
537+
538+
// qcom,ath11k-fw-memory-mode = <2>;
539+
// qcom,bdf-addr = <0x4D300000>;
540+
qcom,ath11k-fw-memory-mode = <0>;
541+
qcom,bdf-addr = <0x4D600000>;
542+
qcom,caldb-addr = <0x4E600000>;
543+
qcom,m3-dump-addr = <0x4D400000>;
544+
545+
status = "ok";
546+
};

target/linux/ipq50xx/image/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ define Device/redmi_ax3000
4545
PAGESIZE := 2048
4646
DEVICE_DTS_CONFIG := config@mp02.1
4747
IMAGES := nand-factory.ubi
48+
DEVICE_PACKAGES := \
49+
ath11k-firmware-ipq5018 \
50+
ath11k-firmware-qcn6122 \
51+
ipq-wifi-redmi_ax3000
4852
endef
4953
TARGET_DEVICES += redmi_ax3000
5054

0 commit comments

Comments
 (0)