From 2ddb2057cdf4a08fd2abb8c09d02e28a2d14f406 Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Tue, 11 Jan 2022 00:50:37 +0100 Subject: [PATCH] ipq807x: Add Xiaomi AX9000 Xiaomi AX9000 is a premium 802.11ax "tri"-band router/AP. Specifications: * CPU: Qualcomm IPQ8072A Quad core Cortex-A53 2.2GHz * RAM: 1024MB of DDR3 * Storage: 256MB of parallel NAND * Ethernet: * 4x1G RJ45 ports (QCA8075) with 1x status LED per port * 1x2.5G RJ45 port (QCA8081) with 1x status LED * WLAN: * PCI based Qualcomm QCA9889 1x1 802.11ac Wawe 2 for IoT * 2.4GHz: Qualcomm QCN5024 4x4@40MHz 802.11b/g/n/ax 1147 Mbps PHY rate * 5.8GHz: Qualcomm QCN5054 4x4@80MHz or 2x2@160MHz 802.11a/b/g/n/ac/ax 2402Mbps PHY rate * 5GHz: PCI based Qualcomm QCN9024 4x4@160MHz 802.11a/b/g/n/ac/ax 4804Mbps PHY rate * USB: 1x USB3.0 Type-A port * LED-s: * System (Blue and Yellow) * Network (Blue and Yellow) * RGB light bar on top in X shape * Buttons: * 1x Power switch * 1x Soft reset * 1x Mesh button * Power: 12V DC Jack Installation instructions: Obtaining SSH access is mandatory https://openwrt.org/inbox/toh/xiaomi/ax9000#obtain_ssh_access Installation is done by the ubiformat method, through SSH: 1. Open an SSH shell to the router 2. Copy the file openwrt-ipq807x-generic-xiaomi_ax9000-initramfs-factory.ubi to the /tmp directory 3. Check which rootfs partition is your router booted in (0 = rootfs | 1 = rootfs_1): nvram get flag_boot_rootfs 4. Find the rootfs and rootfs_1 mtd indexes respectively: cat /proc/mtd Please confirm if mtd21 and mtd22 are the correct indexes from above! 5. Use the command ubiformat to flash the opposite mtd with UBI image: If nvram get flag_boot_rootfs returned 0: ubiformat /dev/mtd22 -y -f /tmp/openwrt-ipq807x-generic-xiaomi_ax9000-initramfs-factory.ubi && nvram set flag_boot_rootfs=1 && nvram set flag_last_success=1 && nvram commit otherwise: ubiformat /dev/mtd21 -y -f /tmp/openwrt-ipq807x-generic-xiaomi_ax9000-initramfs-factory.ubi && nvram set flag_boot_rootfs=0 && nvram set flag_last_success=0 && nvram commit 6. Reboot the device by: reboot Previous commands flashed an ubinized OpenWrt initramfs that will serve as the intermediate step since OpenWrt uses unified rootfs in order to fully utilize NAND and provide enough space for packages. Continue in order to pernamently flash OpenWrt: 7. SSH into OpenWrt from one of the LAN ports 8. Copy the file openwrt-ipq807x-generic-xiaomi_ax9000-squashfs-sysupgrade.bin to the /tmp directory 9. Sysupgrade the device: sysupgrade -n /tmp/openwrt-ipq807x-generic-xiaomi_ax9000-squashfs-sysupgrade.bin Device will reboot with OpenWrt, and then sysupgrade can be used to upgrade the device when desired. Signed-off-by: Robert Marko --- package/boot/uboot-envtools/files/ipq807x | 3 +- package/firmware/ipq-wifi/Makefile | 6 +- .../ipq-wifi/board-xiaomi_ax9000.ipq8074 | Bin 0 -> 131176 bytes .../ipq-wifi/board-xiaomi_ax9000.qca9889 | Bin 0 -> 2260 bytes .../ipq-wifi/board-xiaomi_ax9000.qcn9074 | Bin 0 -> 131176 bytes .../ipq807x/base-files/etc/board.d/02_network | 3 + .../etc/hotplug.d/firmware/11-ath11k-caldata | 10 +- .../base-files/lib/upgrade/platform.sh | 6 +- .../arm64/boot/dts/qcom/ipq8072-ax9000.dts | 522 ++++++++++++++++++ target/linux/ipq807x/image/generic.mk | 19 + 10 files changed, 564 insertions(+), 5 deletions(-) create mode 100644 package/firmware/ipq-wifi/board-xiaomi_ax9000.ipq8074 create mode 100644 package/firmware/ipq-wifi/board-xiaomi_ax9000.qca9889 create mode 100644 package/firmware/ipq-wifi/board-xiaomi_ax9000.qcn9074 create mode 100644 target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-ax9000.dts diff --git a/package/boot/uboot-envtools/files/ipq807x b/package/boot/uboot-envtools/files/ipq807x index 3961d4124e..e7057945b8 100644 --- a/package/boot/uboot-envtools/files/ipq807x +++ b/package/boot/uboot-envtools/files/ipq807x @@ -14,7 +14,8 @@ edimax,cax1800) ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x20000" ;; redmi,ax6|\ -xiaomi,ax3600) +xiaomi,ax3600|\ +xiaomi,ax9000) idx="$(find_mtd_index 0:appsblenv)" [ -n "$idx" ] && \ ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x20000" diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile index dbc2b4e227..02e1c8af48 100644 --- a/package/firmware/ipq-wifi/Makefile +++ b/package/firmware/ipq-wifi/Makefile @@ -45,6 +45,7 @@ ALLWIFIBOARDS:= \ sony_ncp-hg100-cellular \ teltonika_rutx \ xiaomi_ax3600 \ + xiaomi_ax9000 \ zte_mf18a \ zte_mf289f @@ -81,8 +82,10 @@ define ipq-wifi-install-one $(call ipq-wifi-install-one-to,$(1),$(2),QCA99X0/hw2.0),\ $(if $(filter $(suffix $(1)),.IPQ8074 .ipq8074),\ $(call ipq-wifi-install-ath11-one-to,$(1),$(2),IPQ8074/hw2.0),\ + $(if $(filter $(suffix $(1)),.QCN9074 .qcn9074),\ + $(call ipq-wifi-install-ath11-one-to,$(1),$(2),QCN9074/hw1.0),\ $(error Unrecognized board-file suffix '$(suffix $(1))' for '$(1)')\ - )))))) + ))))))) endef # Blank line required at end of above define due to foreach context @@ -138,6 +141,7 @@ $(eval $(call generate-ipq-wifi-package,redmi_ax6,Redmi AX6)) $(eval $(call generate-ipq-wifi-package,sony_ncp-hg100-cellular,Sony NCP-HG100/Cellular)) $(eval $(call generate-ipq-wifi-package,teltonika_rutx,Teltonika RUTX)) $(eval $(call generate-ipq-wifi-package,xiaomi_ax3600,Xiaomi AX3600)) +$(eval $(call generate-ipq-wifi-package,xiaomi_ax9000,Xiaomi AX9000)) $(eval $(call generate-ipq-wifi-package,zte_mf18a,ZTE MF18A)) $(eval $(call generate-ipq-wifi-package,zte_mf289f,ZTE MF289F)) diff --git a/package/firmware/ipq-wifi/board-xiaomi_ax9000.ipq8074 b/package/firmware/ipq-wifi/board-xiaomi_ax9000.ipq8074 new file mode 100644 index 0000000000000000000000000000000000000000..052bb0516ab0487d0441aa624f1dd7ef8ae4dac3 GIT binary patch literal 131176 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 literal 0 HcmV?d00001 diff --git a/package/firmware/ipq-wifi/board-xiaomi_ax9000.qcn9074 b/package/firmware/ipq-wifi/board-xiaomi_ax9000.qcn9074 new file mode 100644 index 0000000000000000000000000000000000000000..5d5c2061a7d48c0d768c6dfe01c6bafd61aac2e3 GIT binary patch literal 131176 zcmeHw33y!9mFB5ePjbl!t0a}GBw4m4S(~jA5ys#JFWM#BT1ty;NikSpr;X=>1PBer zHo~UCn1rwzFwh}}W^oJ&j$<3I7!yL1Nv0AyXu38(t?UuC_t8Q9*YsK2t^D9NV@e4QHzM91uS6>~y^M>2k-thT5=6A2X z;R~o)-94wWveGB57~~_382r@+Bx{_|oO)YTp9+xz;yVeir&>$yx;Wamod4RZO29#UoS8kbKxn+Lkmid)i=2vc+U%6#|wGJQoe94Z$v+QRf zl%BYxXBP_s2K}4N{L)DSN0dfs123FLvN97Yym*>Qqg3Rl)OdHJ)TB0}2#gv6zU&nL z>G;z+GAYlxAAec}@7I04KOuo9*t_NhS#w6{Ls^WR(s&a%xcQWo^r9kgz9W!C?Kv5bq^e?TB$5FQR1cl%Cp7>7M!YQtU{y1(Nk(*ba06b|prs80v zeB+XH?c<^YERWZ6u^eb2hj#>2tz-eF`NPY4Cw#D zgZ|H;|28mq8Ty!mAnVV9egyjeFtq+444gR}4hA2>evBa-&yu0dzySMBsa3EcA2$5+ z&^8qO*fo!T0SvB#KF?zq`oA7pKOg;1I*fUQA7r8b;0ox^h5kh7|9)uwQN;i@48q`l z4sAmL=5Z4IC>OC1pU2r4Lk`C9yP@^-5leZPgB<8*A(n!Dz`%*ck3H!BE%X_~S4R*F zC;LIK%MUzYkdIiHbO<)=fDM~42KJ+2%wxVY1}C23%i}9;KlG4~;`)pMFihioFdzDP zn1la5G=`&*5Au;u#Fr6EabLdHw&4#$+aO~=PRj;{l8-P4N@E6;RqnY*rNO$6&R z=XmZbtNRyxzF>J)qjQDmscn7t&%dMeb6Ks4YdgNyzNPBkf;C~R&79-O?Vo+{+I1y2 zWxLwj{9wmjv)2~(gcmur@QnXR?4Ig73;V)tiEEpmZr@UUZ{eD-OZWL_`?fAvU%EC2 z>rdzS@|Sxy%)6!dy6hI`3elsF_iUc`#gbLoor!DrKhwEo*1Cc1J%{!dqP*(i?MJeSGzqRa<7>T6kmFb?t$tx*nKySK*(z@%!@j?g!`GU38OsKAwJj<>sm{ zmaWQhjqR)3S8bhnTj8p(>)PgR?e|x2Ecjg3a>o*VRRqQs0cX!@kQFBeUC|4QfFLk0 z)EinC+78$@<^bh?4=ucXOJpkxu2GRe&46R>|=YHw`b-RD) z=gflrtnXppfY&yH!8;?s0Q$P* z_@ZM2`;rG628`iBjNt~@aJ7x$iJ`|Z9kEz?jHn10=3^f7RzQEY9SdGC#2l1jPo4D( zzU0zRhyDM1=>FpvAfDs#$QU4=GPw;eHZX>)k9d@LcJw{Qvm1i~_)#8wIUBy5316Pz zA)crI7xa%yWl#6l7Fg9l;gF&|7vJPD4DFX5RY?gt)X zLB;?-5Da(>4hCMwfLJJDUuF!E6DOko2x2J{@jSsxEd71L4>*=4t%m&^OYBEpG2nP| zVuABA#=!BM$vMe`FHQR}VFSlw+>baGJj4?FQR#Pp!A{$cR-*rFZ9no73-ANU>Ffvh zqkqJb+}nq7Uy%Frdx&S)P{272Hsr7kmtzbbaGdVOkoAEf>&yDW%RK&9U|{=lKE@Ew z2b_;Q_+dF>xeR_(!s`Rfp|d^-!Tz9!Ih1_h;P@IacmQL#-o_C*CC$V8GjeZw2N)tJ z6~Yf>eQ*udNMVm_B+f_2p#KK?cl-$Yp$Pi-aBq$x7N)%m3}F9M>A-+cQFor1n$ibix_Qx?mK1=s72jU0LJf0L!;>*LC2gJfujs@hT+&RF&qYdTA z2PdynC7*CCddP{M4>`CmWZ~ZC z#h0VViPI3zB`>>dKrCg!1~2mvU+cn`3lY!p^*-lB5BVsHIh@8h(e8gT{8%vHeBc2? z#z4kk$5SEla@?0WA9%2#0_%(E$VsKRuS`Wwoq}~@F5)?idCc(ON98}Z=U^8waOHKG z0}uM~{xOGBF^5xDq5oOvKMVbP$Y+cJUE&90u}OXAwzZ}-32{&e}K@S4Q6 zLkBi~z2({R2g0s;``+HTyY0n_hr?e?)H`x`{p+#6jBX8oA#rX0zW$x<&sN-@?XvIS z!Mk_Go{w%BQ196KZ^d4MeRn2wj~>1I8*MK{zZAYbaqaMdyLZN(E5Co>csIV$_SN#O zk=qjWb|3BE)AmyIEAIC89=ZFQv9CqHl;x_o@2w3OTg4W4dxsC-{YERs;cjp5(e=AK zUWyJF@6qFT?(TXy`bhZC6aDTx)c?)SuK|P4C$8;3zHU$Z%jJ)RU1NLmoeg{2UWq;y zS(m7H=sW%UI$piviHOVFzjgSYH``$IfVq5k)4ujsqmPB%bNSx7eX-Xno`|eZwD;}f z>-V<5a>e8B_Vyjw_|5hm}#&)(Q8<&V1C`}Vu{>}z|a;&FF-hrYXUf9tE$ z9}m0xc)R~wZ7)V2j<_(`4_i8RRy-Nmkg(;*ch~Qay%rsC?Z9`}?eF+{^oi_y67}{S z?f(|z9JwQL?XCAVA830m`b1=7;@a-_`VYi*Mz^`I?R)R8eeFA=Pq^*d1N>UQcE!U3 zeCWM<_jkM&eLU>K`K|Z+4|ME`ZVS8mIQT*Tq1dkIQxTVahv28}Y@chqd*9!1Ft)4W zsmQ$v`}TeBo+GhuRBX?_FLCYQ`~3%FUq?MxdwY&<-qW_D;w$d<4!ytOEsX6+H!erN zx8YFi^@?W(^zi}ucq6(!vMJHW-s2m-9ea78U+w$g?nAAwPk$=xvhT=$>Oa=LJNkS! z?g!4X?|c16Ve_+*&CV5~{omQNzY~6y?V8I2-|Iip`bNcecfGfMaL=)}H!Gfx;Qn;B zj$Z7&K9}`z*4*%;VcvNi@;ITNrXLa`t)K{uG6DnN6&Wl=e`v3XU&DG5`G?ok*)yzt ziV43NI<9#=T6ze3H80^A9qUovcZ^(xwItT`sUAKPKK(@oZm+JFtRcRC+!;JLud-s!X- zVGKtw2IvnOgNM&EmjT0KJeL&WnP4*JfIr6&!We>?7=wp3Iq$a>AA~+*h&6pKV+i|$ zJO>`1YsxW((gVQpMa(0f(Ph8sT5BG?>>KiaSqc1r=aKhrWgceQ^Wb3~%g}!@=CKg- zI2q6A{8Ico2pj_RAy|Fa~}vi1*NW|9B#g;YwhDd6?kE7olHr41R!loC5va9_Y`(7{+4^ z9zKs;#=h*t0x%q|9|#7(u<#XNaG$M@ISi(wf3Fz82Hra@f-jv(EX3m(7)<6dz>nhb z?8T4Je;h;jVJ`dOF#Jd`U_V4GPDVbVeeMv5q>216|66YyFL(o*gusqL@dT*$zwiZ49bB4=L7kS z0Q`XOjk3mJ96hXYI3D@lG!;2ja$+wqnB(0S-55;SWMjaw=y8oCYb=f>#IoCuGIC+R zhxJJu1KgjBF$R7wh~J}+%zzCXPk-+rA20^cKVu9&EgyKr0QdG1IR7?6+R zYph}9!~tt%?M;}`-Ir0h=}$KX-?9sN>%KEZfSKZXw;?ww(cAvJ!m-E`tJ@iC-M z2xf!^!XF>O`85yIrj?bIlsI!ybYfb33^FGDb;bx36-@;d7ZwyuEi5Q3I7vhVoaOT3 z;vx|G&YxO<{!bF|%yE&II}>MEha;Zr*U9b<@n}0%hcBF(pI^d9IGo4FK&d1ThWY*e zq@<*Pq~Wo$^Q`wfp3DIQg4Fu2s*vy8x%V|<+D;c4@VfFf`P z2&9sUcT1e3&pOC{{nVH4?yjz?DyP^j@p*Ieym_Z8>+3szY7VqzfaHL23BK~IU4Q+G zZu@1>Ye&c8#WL?)sXH$9tyt0A+|aOK!R*#hRO&nyRX1&pwsZ)KphD zb7nMpJ$hTwy=+-5#&(`cTD-Wfj_o{E*+9MF*R;%R!eQG9qX$cFJ9%6QJ1xu{%T6Wn z{Pe*u`9UGG9fFhs>C<2OrB5=VWa5??qNjBPV;JZkSRG-f0jyE<_`#C#Fv zi!fh=`6A304KZJY`6A30VZI3SMLJ(2@+1TE1;#t5sU|pp6UclZ6=18f>Y&Ew#Z zIPDb!^A0w^COBZg2f&cgFZ=*(fK6j4e>iO~g9{D#57+>k;D7;N0z*c>@F%bVHjN?t zYH-V^zoL0#L~g3e9uV*&mcan@ESO!Bzzlde90XF@k9Lsm6Y#VT|zw@Lu!O60RsnaT> zfWYZ9@cCal3J{EH6KTjNU;}J|18K-7V8}jS8uAI)0Gnx}oKMn_PrwG)1P9WPPr#7T zFY*c40Gnx}oKMn_PrwG)1P9WPPr#7TFY*c40Gnx}oKJLZFsg2=jhzC4AYvJ8fK6~9 zh*$&>*h-I(=Ho<`)Vi^n> z{UVmZ2G|U0ET6(#^wRl^KssU>Y=BL0ARVy`hV1jDBbLDi*i0YgSWZVQgAK3=4x}TN z!I04}Vi|0J&Gb=@<#fa{*Z`a0KssU>3>p0*mca(tOxIXGpWRk%I|Tyg|5M3Xwh*~& zSo_7pH3vCsSo_PvZ6CR5IQ!AVZGK+p;m~d2+Q|1O4p(zv{du8{S#|io1tUGUo$gU+ z=M{WE#^!D*}pu zBA^H;0*Zhlpa>`eioh5kFjk)hJk#gJk?M`rXAnnf_nGRC)n^~i)ZUTmHH4lHZ3wqS zzHx@{gEWM;WR;BIeGAra9fAHBqyX(w5l{pa0YyL&Py`eKML-d_U=c9!IWe#SHo*b> zu_|N(vd?GYGp}F+Y~l~!d?S6>k#YdcnB zH}N?-umLu~0TZ9`1w+Po@flyR0XEH1{*3QfjhDX{`qA(Wk>ehpXM5#aq`h0q_2&-b zdG&%#3~IO{pa>`eihv@Z2wX4-Bx5}f#=m??#j-XvfTb;D{QDQI=aaFX2OD5B`65}* zCu2PiHozu0kc@$XA!EE)&w~xHnS7C~=aaFX2OD4$97x7`9t;`d#d;oWfX(EKWIcah z=%L7>Q>^9h3%!ePd>wpz+Vu-2fYne%KoK}^5Ez_c^vZ>ZzEF2{ZeyVwOe^s)M1oafRf-F=PK{{VH{a4yfs>VJ=(%Q3q9 z8tLcxowi2$xqf#$Bl)6NB%T-0bqKoL*`6ahs*5l{pa0YyL&xTp~rtM3DFo|De? z>sWmc!MPr%)8ANq|AEv0xqcn#e!@ui5%m89T-51O2d4-q0*Zhlpa>`eihv?;o*^(+ z--&gupL3l4#_GGcoc_=C>sWmU*ts63)8BBPXNUXzI^5^g^DNxe97RA8Py`eKML-d_ z2oZ4BLHeo)Tnq?IATz+@_+)o#$S_ya%_$G0u#7K1C6fa542~CZ@HIXT;26oZPyQw~ zWTKyWq2ACs{I9XI)(^(R{mhBv9 zKoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`g7*7_ii9Gd2q*%IfFhs>TzUwk z)6M5}&>7Sv-`eihv@Z2%P5#U>#7#CYm&hsJelv zYzO2&(Y27fnM4jqc{5cvTXHJ(64muGNqLawqJAfn$RVj;N7Z$fyv^YD7cohBp0wXc z)s2>%Pq(1FgGtJ-q8i98Od@BA{&K2bZplS773E8rq`XY}>!Ru|OP)fNDDP#G@+kLL z)5#=qCG|jVViI`@?IvXKacUK zX<-t%O6qq}jcs2Y;iKj?ZA?<$Am!CmQ*Fu3gf(AH2a}ZdN&Qx;X|?3lQooUEZ2Xq_ zd3+5_QvVJvU(&=R@;a7lTbM-NNFm78Od@Y(e3tYuiTp6jwGB*V>>%4%zpIW(%D2;x zD5wQQNNW*%3l)wZmPBYXP3xrRBMm-fXGXzc8OL0h{zpOYmax6kNaQ5 zB<&sJ{+l|OM9wr;qI@}%$nSA^Z4Z;k-xs-;YVG;>AGLhrI34=L~dsNrY$uk^iGF2XYUS$baMeEaYWO zBL7V4cTtPoUy}iUXlY`S@{gpvom%Yq__@d()MESVFGXHTEw+7ca{TmkF^T?f_?fz; zn@QwGZoi?0N#uVK{W@x~{rjIpuB8?`ADoc!wo;4jFMpKsdTO!f<6lMYq!t^`KlzY9 zTB@0({hRoH)6&8uvT6L5sI{6&^W7{Ir+kxAq_!81lJcKcVb+`5QK%I8XZOR3eyZ-IgMYi(eX@){{`qgH#q ziRHEyCMjQRAf97Om_%O0?Z=igiQH!V4stb<$jc1)Pppwi>tHQOut2JEi{)irN0L-k3(zUd<%+`?-EcJ(I}yiQGmV_W1t7 z!2P{rDHF=`X$$w?v7AZjKg{)Onwdm?gyqgACXt`y`_+hChHgj~%e@;43SpUze$ zk$1CxM<T+Af$38`OColbnQT-(GX*{(YDW8k>{EamPl6>9d50h_cCxJw+H^R_wVUqg2{sPE7Od_vf z`%~kn5R5en-k%X&J`D_p=T^@LINr$!d@D(g5l$S|KcydZMLX=El8b>*lf=nBMj2%pr4&Zyj3Aq28;dE&SVFl*2Teq_pO{ondB!rzORA>4+U1 zDW3zcrmF&fMl%Cz!E0z{%1z+^0KOTVLgS2&DV6>}m*XksG6R1B{E70ZF}N{hX9_?6 zO$IyXcyf%N7s>e^sbgKY&aL{^xw}rpuFrLupH2BjN(laHo$raC?@D5@r~PL89NCjz&HQ!z`i#(hA@KcSl1`obsU?W`c_|7om^KtR$r}QjD;-S zpJg%rR((EqY_`rB!`rjol{%IU8Lsh`$hl>Yb#Ar)@A3K>;TywF`_{SDzH`p)uL*x2 zb*wpc&bcq=oZENK+0U(W3uos#+wYtw+O+)2x^7{RN=&+g`Pn#vJ|o#r{&YO)$YIIm0NJE*k%IO_x!c|#8OgxIQ76_< zq6v{J=UA6mHYwSyj}-}ITf-_J7rDCHZXcsJDVSU2l#864kbPV}z#gkT+rCP}z-*1r z!;_vIl|~Y`kZy~_Z<1#$gBr|KO-Crd#8|3r~+n!2eJmi$gMXY;a_@ zCuMTUJhwbPuXvGLHq%QN50s0WZ5h@Wbh%xd#6A=Dm(?fAeZ0?XAC;)>qgF?Rf3d!4 z_ipL?DJf%tT_Y&t4aFO%O5*u2)8qEa{FtF>*t+7QQt-WOQnb;Q1y6Hknz@&v(m7VQE}qliFFXZi691-TB**0Barm8t`b1X!L5=B!^8$f6 zk)KZ7fm@VsViNw>kbR!@iTvLoTqobebh;!us7>pth) z@P*>HShT9grG`KdX?cfh(2$KCWW*O@R=K1WsZ}ZUUF$B96ZZwHJhASwWF#H?u;j!t z>*R8$p1vvqiomH6;FXde_i%n*!WtR(^ULvM6vER_7M=vh9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy z1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9U@Q^Hqgd@&_OE>_0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*#<69WGq DH2=xt literal 0 HcmV?d00001 diff --git a/target/linux/ipq807x/base-files/etc/board.d/02_network b/target/linux/ipq807x/base-files/etc/board.d/02_network index a6ff418a19..273547dc22 100644 --- a/target/linux/ipq807x/base-files/etc/board.d/02_network +++ b/target/linux/ipq807x/base-files/etc/board.d/02_network @@ -21,6 +21,9 @@ ipq807x_setup_interfaces() xiaomi,ax3600) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan" ;; + xiaomi,ax9000) + ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan" + ;; *) echo "Unsupported hardware. Network interfaces not initialized" ;; diff --git a/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata index fd431d07da..7ac05f2992 100644 --- a/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata +++ b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata @@ -12,11 +12,19 @@ case "$FIRMWARE" in edimax,cax1800|\ qnap,301w|\ redmi,ax6|\ - xiaomi,ax3600) + xiaomi,ax3600|\ + xiaomi,ax9000) caldata_extract "0:art" 0x1000 0x20000 ;; esac ;; +"ath11k/QCN9074/hw1.0/cal-pci-0000:01:00.0.bin") + case "$board" in + xiaomi,ax9000) + caldata_extract "0:art" 0x26800 0x20000 + ;; + esac + ;; *) exit 1 ;; diff --git a/target/linux/ipq807x/base-files/lib/upgrade/platform.sh b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh index 9e8f4796cf..fe20412083 100644 --- a/target/linux/ipq807x/base-files/lib/upgrade/platform.sh +++ b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh @@ -34,7 +34,8 @@ platform_check_image() { platform_pre_upgrade() { case "$(board_name)" in redmi,ax6|\ - xiaomi,ax3600) + xiaomi,ax3600|\ + xiaomi,ax9000) xiaomi_initramfs_prepare ;; esac @@ -51,7 +52,8 @@ platform_do_upgrade() { mmc_do_upgrade "$1" ;; redmi,ax6|\ - xiaomi,ax3600) + xiaomi,ax3600|\ + xiaomi,ax9000) # Make sure that UART is enabled fw_setenv boot_wait on fw_setenv uart_en 1 diff --git a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-ax9000.dts b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-ax9000.dts new file mode 100644 index 0000000000..801aa05604 --- /dev/null +++ b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-ax9000.dts @@ -0,0 +1,522 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* Copyright (c) 2021, Robert Marko */ + +/dts-v1/; + +#include "ipq8074.dtsi" +#include "ipq8074-hk-cpu.dtsi" +#include "ipq8074-ess.dtsi" +#include +#include +#include + +/ { + model = "Xiaomi AX9000"; + compatible = "xiaomi,ax9000", "qcom,ipq8074"; + + aliases { + serial0 = &blsp1_uart5; + led-boot = &led_system_yellow; + led-failsafe = &led_system_yellow; + led-running = &led_system_blue; + led-upgrade = &led_system_yellow; + label-mac-device = &dp5; + }; + + chosen { + stdout-path = "serial0:115200n8"; + bootargs-append = " root=/dev/ubiblock0_0"; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&tlmm 47 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + + wps { + label = "wps"; /* Labeled Mesh on the device */ + gpios = <&tlmm 46 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_system_blue: system-blue { + label = "blue:system"; + gpios = <&tlmm 48 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led_system_yellow: system-yellow { + label = "yellow:system"; + gpios = <&tlmm 52 GPIO_ACTIVE_HIGH>; + color = ; + }; + + network-yellow { + label = "yellow:network"; + gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; + color = ; + }; + + network-blue { + label = "blue:network"; + gpios = <&tlmm 51 GPIO_ACTIVE_HIGH>; + color = ; + }; + + top-red { + label = "red:top"; + gpios = <&tlmm 63 GPIO_ACTIVE_HIGH>; + color = ; + default-state = "keep"; + }; + + top-green { + label = "green:top"; + gpios = <&tlmm 64 GPIO_ACTIVE_HIGH>; + color = ; + default-state = "keep"; + }; + + top-blue { + label = "blue:top"; + gpios = <&tlmm 66 GPIO_ACTIVE_HIGH>; + color = ; + default-state = "keep"; + }; + }; +}; + +&tlmm { + mdio_pins: mdio-pins { + mdc { + pins = "gpio68"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mdio { + pins = "gpio69"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + i2c_pins: i2c-pins { + pins = "gpio0", "gpio2"; + function = "blsp5_i2c"; + drive-strength = <8>; + bias-disable; + }; +}; + +&blsp1_uart5 { + status = "okay"; +}; + +&blsp1_i2c6 { + status = "okay"; + + pinctrl-0 = <&i2c_pins>; + pinctrl-names = "default"; +}; + +&prng { + status = "okay"; +}; + +&cryptobam { + status = "okay"; +}; + +&crypto { + status = "okay"; +}; + +&qpic_bam { + status = "okay"; +}; + +&qpic_nand { + status = "okay"; + + /* + * Bootloader will find the NAND DT node by the compatible and + * then "fixup" it by adding the partitions from the SMEM table + * using the legacy bindings thus making it impossible for us + * to change the partition table or utilize NVMEM for calibration. + * So add a dummy partitions node that bootloader will populate + * and set it as disabled so the kernel ignores it instead of + * printing warnings due to the broken way bootloader adds the + * partitions. + */ + partitions { + status = "disabled"; + }; + + nand@0 { + reg = <0>; + nand-ecc-strength = <4>; + nand-ecc-step-size = <512>; + nand-bus-width = <8>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "0:sbl1"; + reg = <0x0 0x100000>; + read-only; + }; + + partition@100000 { + label = "0:mibib"; + reg = <0x100000 0x100000>; + read-only; + }; + + partition@200000 { + label = "0:bootconfig"; + reg = <0x200000 0x80000>; + read-only; + }; + + partition@280000 { + label = "0:bootconfig1"; + reg = <0x280000 0x80000>; + read-only; + }; + + partition@300000 { + label = "0:qsee"; + reg = <0x300000 0x300000>; + read-only; + }; + + partition@600000 { + label = "0:qsee_1"; + reg = <0x600000 0x300000>; + read-only; + }; + + partition@900000 { + label = "0:devcfg"; + reg = <0x900000 0x80000>; + read-only; + }; + + partition@980000 { + label = "0:devcfg_1"; + reg = <0x980000 0x80000>; + read-only; + }; + + partition@a00000 { + label = "0:apdp"; + reg = <0xa00000 0x80000>; + read-only; + }; + + partition@a80000 { + label = "0:apdp_1"; + reg = <0xa80000 0x80000>; + read-only; + }; + + partition@b00000 { + label = "0:rpm"; + reg = <0xb00000 0x80000>; + read-only; + }; + + partition@b80000 { + label = "0:rpm_1"; + reg = <0xb80000 0x80000>; + read-only; + }; + + partition@c00000 { + label = "0:cdt"; + reg = <0xc00000 0x80000>; + read-only; + }; + + partition@c80000 { + label = "0:cdt_1"; + reg = <0xc80000 0x80000>; + read-only; + }; + + partition@d00000 { + label = "0:appsblenv"; + reg = <0xd00000 0x80000>; + }; + + partition@d80000 { + label = "0:appsbl"; + reg = <0xd80000 0x100000>; + read-only; + }; + + partition@e80000 { + label = "0:appsbl_1"; + reg = <0xe80000 0x100000>; + read-only; + }; + + partition@f80000 { + label = "0:art"; + reg = <0xf80000 0x80000>; + read-only; + + compatible = "nvmem-cells"; + #address-cells = <1>; + #size-cells = <1>; + + macaddr_dp1: macaddr@0 { + reg = <0x0 0x6>; + }; + + macaddr_dp2: macaddr@6 { + reg = <0x6 0x6>; + }; + + macaddr_dp3: macaddr@c { + reg = <0xc 0x6>; + }; + + macaddr_dp4: macaddr@12 { + reg = <0x12 0x6>; + }; + + macaddr_dp5: macaddr@18 { + reg = <0x18 0x6>; + }; + + caldata_qca9889: caldata@4d000 { + reg = <0x4d000 0x844>; + }; + }; + + partition@1000000 { + label = "bdata"; + reg = <0x1000000 0x80000>; + }; + + partition@1080000 { + /* This is crash + crash_syslog parts combined */ + label = "pstore"; + reg = <0x1080000 0x100000>; + }; + + partition@1180000 { + label = "ubi_kernel"; + reg = <0x1180000 0x3800000>; + }; + + partition@4980000 { + label = "rootfs"; + reg = <0x4980000 0xb680000>; + }; + }; + }; +}; + +&qusb_phy_0 { + status = "okay"; +}; + +&ssphy_0 { + status = "okay"; +}; + +&usb_0 { + status = "okay"; +}; + +&mdio { + status = "okay"; + + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + reset-gpios = <&tlmm 37 GPIO_ACTIVE_LOW>; + + qca8075_0: ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0>; + }; + + qca8075_1: ethernet-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <1>; + }; + + qca8075_2: ethernet-phy@2 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <2>; + }; + + qca8075_3: ethernet-phy@3 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <3>; + }; + + qca8081: ethernet-phy@24 { + compatible = "ethernet-phy-id004d.d101"; + reg = <24>; + reset-gpios = <&tlmm 44 GPIO_ACTIVE_LOW>; + }; +}; + +&switch { + status = "okay"; + + switch_cpu_bmp = <0x1>; /* cpu port bitmap */ + switch_lan_bmp = <0x1e>; /* lan port bitmap */ + switch_wan_bmp = <0x20>; /* wan port bitmap */ + switch_mac_mode = <0xb>; /* mac mode for uniphy instance0*/ + switch_mac_mode1 = <0xc>; /* mac mode for uniphy instance1*/ + switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ + bm_tick_mode = <0>; /* bm tick mode */ + tm_tick_mode = <0>; /* tm tick mode */ + + qcom,port_phyinfo { + port@0 { + port_id = <1>; + phy_address = <0>; + }; + port@1 { + port_id = <2>; + phy_address = <1>; + }; + port@2 { + port_id = <3>; + phy_address = <2>; + }; + port@3 { + port_id = <4>; + phy_address = <3>; + }; + port@4 { + port_id = <5>; + phy_address = <24>; + port_mac_sel = "QGMAC_PORT"; + }; + }; +}; + +&edma { + status = "okay"; +}; + +&dp1 { + status = "okay"; + phy-handle = <&qca8075_0>; + label = "lan4"; + nvmem-cells = <&macaddr_dp1>; + nvmem-cell-names = "mac-address"; +}; + +&dp2 { + status = "okay"; + phy-handle = <&qca8075_1>; + label = "lan3"; + nvmem-cells = <&macaddr_dp2>; + nvmem-cell-names = "mac-address"; +}; + +&dp3 { + status = "okay"; + phy-handle = <&qca8075_2>; + label = "lan2"; + nvmem-cells = <&macaddr_dp3>; + nvmem-cell-names = "mac-address"; +}; + +&dp4 { + status = "okay"; + phy-handle = <&qca8075_3>; + label = "lan1"; + nvmem-cells = <&macaddr_dp4>; + nvmem-cell-names = "mac-address"; +}; + +&dp5 { + status = "okay"; + phy-handle = <&qca8081>; + label = "wan"; + nvmem-cells = <&macaddr_dp5>; + nvmem-cell-names = "mac-address"; +}; + +&pcie_qmp0 { + status = "okay"; +}; + +&pcie0 { + status = "okay"; + + perst-gpio = <&tlmm 58 GPIO_ACTIVE_LOW>; + + bridge@0,0 { + reg = <0x00000000 0 0 0 0>; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + wifi@1,0 { + status = "okay"; + + /* ath11k has no DT compatible for PCI cards */ + compatible = "pci17cb,1104"; + reg = <0x00010000 0 0 0 0>; + + qcom,ath11k-calibration-variant = "Xiaomi-AX9000"; + }; + }; +}; + +&pcie_qmp1 { + status = "okay"; +}; + +&pcie1 { + status = "okay"; + + perst-gpio = <&tlmm 62 GPIO_ACTIVE_HIGH>; + + bridge@1,0 { + reg = <0x00010000 0 0 0 0>; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + wifi@1,0 { + status = "okay"; + + compatible = "qcom,ath10k"; + reg = <0x00010000 0 0 0 0>; + + qcom,ath10k-calibration-variant = "Xiaomi-AX9000"; + nvmem-cell-names = "calibration"; + nvmem-cells = <&caldata_qca9889>; + }; + }; +}; + +&wifi { + status = "okay"; + + qcom,ath11k-calibration-variant = "Xiaomi-AX9000"; +}; diff --git a/target/linux/ipq807x/image/generic.mk b/target/linux/ipq807x/image/generic.mk index 7bf659f80f..ae0d6d2ad0 100644 --- a/target/linux/ipq807x/image/generic.mk +++ b/target/linux/ipq807x/image/generic.mk @@ -70,3 +70,22 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) endif endef TARGET_DEVICES += xiaomi_ax3600 + +define Device/xiaomi_ax9000 + $(call Device/FitImage) + $(call Device/UbiFit) + DEVICE_VENDOR := Xiaomi + DEVICE_MODEL := AX9000 + BLOCKSIZE := 128k + PAGESIZE := 2048 + DEVICE_DTS_CONFIG := config@hk14 + SOC := ipq8072 + KERNEL_SIZE := 57344k + DEVICE_PACKAGES := ipq-wifi-xiaomi_ax9000 kmod-ath11k-pci ath11k-firmware-qcn9074 \ + kmod-ath10k-ct ath10k-firmware-qca9887-ct +ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) + ARTIFACTS := initramfs-factory.ubi + ARTIFACT/initramfs-factory.ubi := append-image-stage initramfs-uImage.itb | ubinize-kernel +endif +endef +TARGET_DEVICES += xiaomi_ax9000 -- 2.30.2