Skip to content

Commit a78d204

Browse files
committed
ipq50xx: Add WiFi support for Redmi AX3000
1 parent cabde4d commit a78d204

File tree

7 files changed

+215
-1
lines changed

7 files changed

+215
-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/dts/ipq5000-ax3000.dts

Lines changed: 150 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,26 @@
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+
reg = <0x0 0x4b000000 0x0 0x3000000>;
48+
};
49+
};
50+
3551
thermal-zones {
3652
status = "ok";
3753
};
@@ -401,3 +417,136 @@
401417
reg = <4>;
402418
};
403419
};
420+
421+
&q6v5_wcss {
422+
memory-region = <&q6_mem_regions>;
423+
424+
qcom,rproc = <&q6v5_wcss>;
425+
firmware = "IPQ5018/q6_fw.mdt";
426+
427+
qcom,bootargs_smem = <507>;
428+
boot-args = <0x2 0x4 0x2 0x1B 0x0 0x0>;
429+
430+
status = "ok";
431+
432+
// IPQ5018
433+
q6_wcss_pd1: remoteproc_pd1@4ab000 {
434+
compatible = "qcom,ipq5018-wcss-ahb-mpd";
435+
436+
resets =
437+
<&gcc GCC_WCSSAON_RESET>,
438+
<&gcc GCC_WCSS_BCR>,
439+
<&gcc GCC_CE_BCR>;
440+
reset-names =
441+
"wcss_aon_reset",
442+
"wcss_reset",
443+
"ce_reset";
444+
445+
clocks =
446+
<&gcc GCC_WCSS_AHB_S_CLK>,
447+
<&gcc GCC_WCSS_ACMT_CLK>,
448+
<&gcc GCC_WCSS_AXI_M_CLK>;
449+
clock-names =
450+
"gcc_wcss_ahb_s_clk",
451+
"gcc_wcss_acmt_clk",
452+
"gcc_wcss_axi_m_clk";
453+
454+
reg = <0x4ab000 0x20>;
455+
reg-names = "rmb";
456+
457+
// qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>;
458+
459+
interrupts-extended =
460+
<&wcss_smp2p_in 8 0>,
461+
<&wcss_smp2p_in 9 0>,
462+
<&wcss_smp2p_in 12 0>,
463+
<&wcss_smp2p_in 11 0>;
464+
interrupt-names =
465+
"fatal",
466+
"ready",
467+
"spawn-ack",
468+
"stop-ack";
469+
470+
qcom,smem-states =
471+
<&wcss_smp2p_out 8>,
472+
<&wcss_smp2p_out 9>,
473+
<&wcss_smp2p_out 10>;
474+
qcom,smem-state-names =
475+
"shutdown",
476+
"stop",
477+
"spawn";
478+
479+
firmware = "IPQ5018/q6_fw.mdt";
480+
m3_firmware = "IPQ5018/m3_fw.mdt";
481+
};
482+
483+
// QCN6102
484+
q6_wcss_pd2: remoteproc_pd2 {
485+
compatible = "qcom,ipq5018-wcss-pcie-mpd";
486+
487+
interrupts-extended =
488+
<&wcss_smp2p_in 16 0>,
489+
<&wcss_smp2p_in 17 0>,
490+
<&wcss_smp2p_in 20 0>,
491+
<&wcss_smp2p_in 19 0>;
492+
interrupt-names =
493+
"fatal",
494+
"ready",
495+
"spawn-ack",
496+
"stop-ack";
497+
498+
qcom,smem-states =
499+
<&wcss_smp2p_out 16>,
500+
<&wcss_smp2p_out 17>,
501+
<&wcss_smp2p_out 18>;
502+
qcom,smem-state-names =
503+
"shutdown",
504+
"stop",
505+
"spawn";
506+
507+
firmware = "IPQ5018/q6_fw.mdt";
508+
m3_firmware = "qcn6122/m3_fw.mdt";
509+
};
510+
};
511+
512+
&wifi0 {
513+
// IPQ5000
514+
qcom,multipd_arch;
515+
qcom,rproc = <&q6_wcss_pd1>;
516+
qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
517+
518+
// Be overridden by /etc/hotplug.d/firmware/10-ath11k-board_id
519+
// M79: 0x10
520+
// M81: 0x24
521+
qcom,board_id = <0x24>;
522+
523+
// qcom,ath11k-fw-memory-mode = <0>;
524+
// qcom,bdf-addr = <0x4c400000>;
525+
// qcom,caldb-addr = <0x4d200000>;
526+
// qcom,m3-dump-addr = <0x4d400000>;
527+
528+
qcom,ath11k-fw-memory-mode = <2>;
529+
qcom,bdf-addr = <0x4c400000>;
530+
531+
status = "ok";
532+
};
533+
534+
&wifi1 {
535+
// QCN6102
536+
qcom,multipd_arch;
537+
qcom,rproc = <&q6_wcss_pd2>;
538+
qcom,userpd-subsys-name = "q6v5_wcss_userpd2";
539+
540+
qcom,board_id = <0x60>;
541+
542+
// qcom,ath11k-fw-memory-mode = <0>;
543+
// qcom,bdf-addr = <0x4d500000>;
544+
// qcom,caldb-addr = <0x4e500000>;
545+
// qcom,m3-dump-addr = <0x4ea00000>;
546+
547+
qcom,ath11k-fw-memory-mode = <2>;
548+
qcom,bdf-addr = <0x4d100000>;
549+
qcom,m3-dump-addr = <0x4df00000>;
550+
551+
status = "ok";
552+
};

target/linux/ipq50xx/image/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ define Device/redmi_ax3000
4747
PAGESIZE := 2048
4848
DEVICE_DTS_CONFIG := config@mp02.1
4949
IMAGES := nand-factory.ubi
50+
DEVICE_PACKAGES := \
51+
ath11k-firmware-ipq5018 \
52+
ath11k-firmware-qcn6122 \
53+
ipq-wifi-redmi_ax3000
5054
endef
5155
TARGET_DEVICES += redmi_ax3000
5256

0 commit comments

Comments
 (0)