IPQ5018是內建一個Wi-Fi 2.4G的SoC。客戶的硬體設計是在PCIE0上掛載一個QCN6122來充當Wi-Fi 5G來使用。
查一下參考設計列表
同時使用IPQ5018以及QCN6122的有MP03.3、MP03.5這2個。考慮到QCN6122是與PCIE0介面通訊。
所以,採用MP03.5來當基礎。然後打上以下的patch
Index: qsdk/qca/src/linux-4.4/arch/arm64/boot/dts/qcom/qcom-ipq5018-mp03.5-c1.dts
===================================================================
--- qsdk.orig/qca/src/linux-4.4/arch/arm64/boot/dts/qcom/qcom-ipq5018-mp03.5-c1.dts
+++ qsdk/qca/src/linux-4.4/arch/arm64/boot/dts/qcom/qcom-ipq5018-mp03.5-c1.dts
@@ -435,7 +435,7 @@
};
&tlmm {
- pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>;
+ pinctrl-0 = <&blsp0_uart_pins &phy_led_pins &pcie_x2_perst>;
pinctrl-names = "default";
blsp0_uart_pins: uart_pins {
@@ -526,6 +526,12 @@
bias-pull-down;
};
};
+
+ pcie_x2_perst: pcie_x2_perst {
+ pins = "gpio15";
+ function = "gpio";
+ drive-strength = <8>;
+ };
i2c_pins: i2c_pins {
i2c_scl {
@@ -622,7 +628,7 @@
};
&usb3 {
- status = "ok";
+ status = "disabled";
device-power-gpio = <&tlmm 24 1>;
};
@@ -636,7 +642,7 @@
};
&pcie_x2 {
- status = "disabled";
+ status = "ok";
perst-gpio = <&tlmm 15 1>;
};
@@ -655,7 +661,7 @@
};
&pcie_x2phy {
- status = "disabled";
+ status = "ok";
};
&pcie_x1_rp {
@@ -667,7 +673,7 @@
};
&pcie_x2_rp {
- status = "disabled";
+ status = "ok";
mhi_1: qcom,mhi@1 {
reg = <0 0 0 0 0 >;
@@ -688,8 +694,7 @@
memory-region = <&q6_mem_regions>;
qcom,share_bootargs;
qcom,bootargs_smem = <507>;
- boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>,
- <0x2 0x4 0x2 0x12 0x0 0x0>;
+ boot-args = <0x1 0x4 0x2 0x0F 0x0 0x0>;
/* IPQ5018 */
q6v5_wcss_userpd1 {
m3_firmware = "IPQ5018/m3_fw.mdt";
@@ -747,33 +752,6 @@
#endif
};
- /* QCN6122 5G */
- q6v5_wcss_userpd3 {
- m3_firmware = "qcn6122/m3_fw.mdt";
- interrupts-extended = <&wcss_smp2p_in 24 0>,
- <&wcss_smp2p_in 25 0>,
- <&wcss_smp2p_in 28 0>,
- <&wcss_smp2p_in 27 0>;
- interrupt-names ="fatal",
- "ready",
- "spawn_ack",
- "stop-ack";
- qcom,smem-states = <&wcss_smp2p_out 24>,
- <&wcss_smp2p_out 25>,
- <&wcss_smp2p_out 26>;
- qcom,smem-state-names = "shutdown",
- "stop",
- "spawn";
- qca,asid = <3>;
- qca,auto-restart;
- #ifdef __IPQ_MEM_PROFILE_256_MB__
- memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>,
- <&q6_qcn6122_etr_2>;
- #else
- memory-region = <&q6_qcn6122_data2>, <&m3_dump_qcn6122_2>,
- <&q6_qcn6122_etr_2>, <&q6_qcn6122_caldb_2>;
- #endif
- };
};
&i2c_0 {
@@ -835,26 +813,3 @@
qcom,caldb-size = <0x500000>;
status = "ok";
};
-
-&wifi2 {
- /* QCN6122 6G */
- qcom,multipd_arch;
- qcom,userpd-subsys-name = "q6v5_wcss_userpd3";
-#ifdef __IPQ_MEM_PROFILE_256_MB__
- qcom,tgt-mem-mode = <2>;
-#else
- qcom,tgt-mem-mode = <1>;
-#endif
- qcom,board_id = <0xb0>;
- qcom,bdf-addr = <0x4ED00000 0x4ED00000 0x4E400000 0x0 0x0>;
-#ifdef __CNSS2__
- qcom,caldb-addr = <0x4FF00000 0x4FF00000 0 0 0>;
-#else
- qcom,caldb-addr = <0x4FF00000>;
- m3-dump-addr = <0x4FD00000>;
- nss-radio-priority = <1>;
-#endif
- mem-region = <&q6_qcn6122_data2>;
- qcom,caldb-size = <0x500000>;
- status = "ok";
-}; 這樣,就可以看到wifi0 , wifi1 這2個 net node被建立起來了。
這就是簡單把QCN6122 改到PCIE0上當作5G使用的方法。原來6G的部分就一起閹割掉了(沒有wifi2)。
延伸思考:
MP02.1 參考設計跟MP03.5也一樣使用到2個QCN6122。我們是否也可以利用MP02.1來做修改,以符合客人的HW修改呢? 這就留給大家去燒惱了。
想了解更多,請關注大大通。