茶凳淺談 如何在IPQ5018上帶起QCN6122 給Wi-Fi 5G使用

IPQ5018是內建一個Wi-Fi 2.4G的SoC。客戶的硬體設計是在PCIE0上掛載一個QCN6122來充當Wi-Fi 5G來使用。
查一下參考設計列表

list2

同時使用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被建立起來了。

wifi-iface

這就是簡單把QCN6122 改到PCIE0上當作5G使用的方法。原來6G的部分就一起閹割掉了(沒有wifi2)。

延伸思考:

MP02.1 參考設計跟MP03.5也一樣使用到2個QCN6122。我們是否也可以利用MP02.1來做修改,以符合客人的HW修改呢? 這就留給大家去燒惱了。 

想了解更多,請關注大大通。 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能