From ad73a911c8df9db10d78118e969352d5d697b801 Mon Sep 17 00:00:00 2001 From: Vignesh Viswanathan Date: Wed, 25 Aug 2021 18:34:38 +0530 Subject: [PATCH] ARM: dts: qcom: Add Support for QCN9000 for MTP CPE Add the following changes to support QCN9000 in MTP CPE 1x Pine platform: 1. Add sdxlemur-qcn9000.dtsi to have all QCN9000 related configs. 2. Add memory reservation of 2x52 MB for 2 QCN9000 in sdxlemur-qcn9000.dtsi but in disabled state. 3. Enable reserved memory for 1 QCN9000 in sdxlemur-mtp-cpe-pine1x.dtsi. 4. Add wifi node with all QCN9000 related configs. 5. Enable pcie0_bus2_dev1_fn0 node with QCN9000 memory configs. 6. Enable GPIO 102 to power on QCN9000. Change-Id: Ieaa7e6fb567581f6d82ae6edfc2f664adf3ef4cc --- bindings/cnss/cnss-wlan.txt | 1 + qcom/sdxlemur-mtp-cpe-pine1x.dtsi | 43 ++- qcom/sdxlemur-qcn9000.dtsi | 590 ++++++++++++++++++++++++++++++ 3 files changed, 633 insertions(+), 1 deletion(-) create mode 100644 qcom/sdxlemur-qcn9000.dtsi diff --git a/bindings/cnss/cnss-wlan.txt b/bindings/cnss/cnss-wlan.txt index 284ef3b1d350..0309934b1cda 100644 --- a/bindings/cnss/cnss-wlan.txt +++ b/bindings/cnss/cnss-wlan.txt @@ -17,6 +17,7 @@ Required properties: "qcom,cnss-qca6390" for QCA6390 device "qcom,cnss-qca6490" for QCA6490 device "qcom,cnss-wcn7850" for WCN7850 device + "qcom,cnss-qcn9000" for QCN9000 device "qcom,cnss-qca-converged" for converged QCA devices - wlan-en-gpio: WLAN_EN GPIO signal specified by the chip specifications - vdd-wlan-supply: phandle to the regulator device tree node diff --git a/qcom/sdxlemur-mtp-cpe-pine1x.dtsi b/qcom/sdxlemur-mtp-cpe-pine1x.dtsi index a7373e1f2622..22600ce00a35 100644 --- a/qcom/sdxlemur-mtp-cpe-pine1x.dtsi +++ b/qcom/sdxlemur-mtp-cpe-pine1x.dtsi @@ -1,4 +1,45 @@ +#include "sdxlemur-qcn9000.dtsi" + &soc { - + pine_vreg: pine_vreg { + compatible = "regulator-fixed"; + regulator-name = "pine_vreg"; + gpio = <&tlmm 102 GPIO_ACTIVE_HIGH>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + enable-active-high; + regulator-enable-ramp-delay = <200000>; + }; +}; + +&ntn3_vreg { + vin-supply = <&pine_vreg>; +}; + +&pcie0 { + qcom,no-l0s-supported; + qcom,no-l1-supported; + qcom,no-l1ss-supported; + qcom,no-aux-clk-sync; +}; + +&pcie0_bus2_dev1_fn0 { + cnss_pci1: cnss_pci1 { + reg = <0 0 0 0 0>; + qcom,iommu-group = <&qcn9000_pci_iommu_group_0>; + memory-region = <&qcn9000_0_mem>; + qrtr_instance_id = <0x0>; + + #address-cells = <1>; + #size-cells = <1>; + }; +}; + +&wifi0 { + status = "ok"; +}; + +&qcn9000_0_mem { + status = "ok"; }; diff --git a/qcom/sdxlemur-qcn9000.dtsi b/qcom/sdxlemur-qcn9000.dtsi new file mode 100644 index 000000000000..98ab99e0af31 --- /dev/null +++ b/qcom/sdxlemur-qcn9000.dtsi @@ -0,0 +1,590 @@ + +&reserved_memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + qcn9000_0_mem: qcn9000_0_mem { + compatible = "shared-dma-pool"; + alloc-ranges = <0x00000000 0xffffffff>; + reusable; + alignment = <0x400000>; + size = <0x3400000>; + status = "disabled"; + }; + + qcn9000_1_mem: qcn9000_1_mem { + compatible = "shared-dma-pool"; + alloc-ranges = <0x00000000 0xffffffff>; + reusable; + alignment = <0x400000>; + size = <0x3400000>; + status = "disabled"; + }; +}; + +&soc { + wifi0: qcom,cnss-qcn9000@a0000000 { + status = "disabled"; + compatible = "qcom,cnss-qcn9000"; + memory-region = <&qcn9000_0_mem>; + qcom,wlan-ramdump-dynamic = <0x400000>; + qrtr_node_id = <0x0>; + qca,auto-restart; + tgt-mem-mode = <0x1>; + board_id = <0xa4>; + + mhi,max-channels = <30>; + mhi,timeout = <10000>; + + mhi_channels { + #address-cells = <1>; + #size-cells = <0>; + + mhi_chan@0 { + reg = <0>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@1 { + reg = <1>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@4 { + reg = <4>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@5 { + reg = <5>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@20 { + reg = <20>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <1>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-start; + }; + + mhi_chan@21 { + reg = <21>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-queue; + mhi,auto-start; + }; + }; + + mhi_events { + #address-cells = <1>; + #size-cells = <0>; + mhi_event@0 { + mhi,num-elements = <32>; + mhi,intmod = <0>; + mhi,msi = <1>; + mhi,priority = <0>; + mhi,brstmode = <2>; + mhi,data-type = <1>; + }; + + mhi_event@1 { + mhi,num-elements = <256>; + mhi,intmod = <0>; + mhi,msi = <2>; + mhi,priority = <1>; + mhi,brstmode = <2>; + }; + + mhi_event@2 { + status = "disabled"; + }; + }; + + mhi_devices { + #address-cells = <1>; + #size-cells = <0>; + mhi_qrtr { + mhi,chan = "IPCR"; + qcom,net-id = <0>; + }; + }; + }; + + wifi1: qcom,cnss-qcn9000@b0000000 { + status = "disabled"; + compatible = "qcom,cnss-qcn9000"; + memory-region = <&qcn9000_1_mem>; + qcom,wlan-ramdump-dynamic = <0x400000>; + qrtr_node_id = <0x0>; + qca,auto-restart; + tgt-mem-mode = <0x1>; + board_id = <0xa4>; + + mhi,max-channels = <30>; + mhi,timeout = <10000>; + + mhi_channels { + #address-cells = <1>; + #size-cells = <0>; + + mhi_chan@0 { + reg = <0>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@1 { + reg = <1>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@4 { + reg = <4>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@5 { + reg = <5>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@20 { + reg = <20>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <1>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-start; + }; + + mhi_chan@21 { + reg = <21>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-queue; + mhi,auto-start; + }; + }; + + mhi_events { + #address-cells = <1>; + #size-cells = <0>; + mhi_event@0 { + mhi,num-elements = <32>; + mhi,intmod = <0>; + mhi,msi = <1>; + mhi,priority = <0>; + mhi,brstmode = <2>; + mhi,data-type = <1>; + }; + + mhi_event@1 { + mhi,num-elements = <256>; + mhi,intmod = <0>; + mhi,msi = <2>; + mhi,priority = <1>; + mhi,brstmode = <2>; + }; + + mhi_event@2 { + status = "disabled"; + }; + }; + + mhi_devices { + #address-cells = <1>; + #size-cells = <0>; + mhi_qrtr { + mhi,chan = "IPCR"; + qcom,net-id = <0>; + }; + }; + }; +}; + +&pcie0_rp { + #address-cells = <5>; + #size-cells = <0>; + + cnss_pci: cnss_pci { + reg = <0 0 0 0 0>; + #address-cells = <1>; + #size-cells = <1>; + + qcn9000_pci_iommu_group_0: qcn9000_pci_iommu_group_0 { + qcom,iommu-dma-addr-pool = <0xa0000000 0x10000000>; + qcom,iommu-dma = "fastmap"; + qcom,iommu-faults = "stall-disable", "HUPCF", "no-CFRE", + "non-fatal"; + }; + + qcn9000_pci_iommu_group_1: qcn9000_pci_iommu_group_1 { + qcom,iommu-dma-addr-pool = <0xb0000000 0x10000000>; + qcom,iommu-dma = "fastmap"; + qcom,iommu-faults = "stall-disable", "HUPCF", "no-CFRE", + "non-fatal"; + }; + }; +}; + +&reserved_memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + qcn9000_0_mem: qcn9000_0_mem { + compatible = "shared-dma-pool"; + alloc-ranges = <0x00000000 0xffffffff>; + reusable; + alignment = <0x400000>; + size = <0x3400000>; + status = "disabled"; + }; + + qcn9000_1_mem: qcn9000_1_mem { + compatible = "shared-dma-pool"; + alloc-ranges = <0x00000000 0xffffffff>; + reusable; + alignment = <0x400000>; + size = <0x3400000>; + status = "disabled"; + }; +}; + +&soc { + wifi0: qcom,cnss-qcn9000@a0000000 { + status = "disabled"; + compatible = "qcom,cnss-qcn9000"; + memory-region = <&qcn9000_0_mem>; + qcom,wlan-ramdump-dynamic = <0x400000>; + qrtr_node_id = <0x0>; + qca,auto-restart; + tgt-mem-mode = <0x1>; + board_id = <0xa4>; + + mhi,max-channels = <30>; + mhi,timeout = <10000>; + + mhi_channels { + #address-cells = <1>; + #size-cells = <0>; + + mhi_chan@0 { + reg = <0>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@1 { + reg = <1>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@4 { + reg = <4>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@5 { + reg = <5>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@20 { + reg = <20>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <1>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-start; + }; + + mhi_chan@21 { + reg = <21>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-queue; + mhi,auto-start; + }; + }; + + mhi_events { + #address-cells = <1>; + #size-cells = <0>; + mhi_event@0 { + mhi,num-elements = <32>; + mhi,intmod = <0>; + mhi,msi = <1>; + mhi,priority = <0>; + mhi,brstmode = <2>; + mhi,data-type = <1>; + }; + + mhi_event@1 { + mhi,num-elements = <256>; + mhi,intmod = <0>; + mhi,msi = <2>; + mhi,priority = <1>; + mhi,brstmode = <2>; + }; + + mhi_event@2 { + status = "disabled"; + }; + }; + + mhi_devices { + #address-cells = <1>; + #size-cells = <0>; + mhi_qrtr { + mhi,chan = "IPCR"; + qcom,net-id = <0>; + }; + }; + }; + + wifi1: qcom,cnss-qcn9000@b0000000 { + status = "disabled"; + compatible = "qcom,cnss-qcn9000"; + memory-region = <&qcn9000_1_mem>; + qcom,wlan-ramdump-dynamic = <0x400000>; + qrtr_node_id = <0x0>; + qca,auto-restart; + tgt-mem-mode = <0x1>; + board_id = <0xa4>; + + mhi,max-channels = <30>; + mhi,timeout = <10000>; + + mhi_channels { + #address-cells = <1>; + #size-cells = <0>; + + mhi_chan@0 { + reg = <0>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@1 { + reg = <1>; + label = "LOOPBACK"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@4 { + reg = <4>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@5 { + reg = <5>; + label = "DIAG"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + }; + + mhi_chan@20 { + reg = <20>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <1>; + mhi,data-type = <1>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-start; + }; + + mhi_chan@21 { + reg = <21>; + label = "IPCR"; + mhi,num-elements = <32>; + mhi,event-ring = <1>; + mhi,chan-dir = <2>; + mhi,data-type = <0>; + mhi,doorbell-mode = <2>; + mhi,ee = <0x14>; + mhi,auto-queue; + mhi,auto-start; + }; + }; + + mhi_events { + #address-cells = <1>; + #size-cells = <0>; + mhi_event@0 { + mhi,num-elements = <32>; + mhi,intmod = <0>; + mhi,msi = <1>; + mhi,priority = <0>; + mhi,brstmode = <2>; + mhi,data-type = <1>; + }; + + mhi_event@1 { + mhi,num-elements = <256>; + mhi,intmod = <0>; + mhi,msi = <2>; + mhi,priority = <1>; + mhi,brstmode = <2>; + }; + + mhi_event@2 { + status = "disabled"; + }; + }; + + mhi_devices { + #address-cells = <1>; + #size-cells = <0>; + mhi_qrtr { + mhi,chan = "IPCR"; + qcom,net-id = <0>; + }; + }; + }; +}; + +&pcie0_rp { + #address-cells = <5>; + #size-cells = <0>; + + cnss_pci: cnss_pci { + reg = <0 0 0 0 0>; + #address-cells = <1>; + #size-cells = <1>; + + qcn9000_pci_iommu_group_0: qcn9000_pci_iommu_group_0 { + qcom,iommu-dma-addr-pool = <0xa0000000 0x10000000>; + qcom,iommu-dma = "fastmap"; + qcom,iommu-faults = "stall-disable", "HUPCF", "no-CFRE", + "non-fatal"; + }; + + qcn9000_pci_iommu_group_1: qcn9000_pci_iommu_group_1 { + qcom,iommu-dma-addr-pool = <0xb0000000 0x10000000>; + qcom,iommu-dma = "fastmap"; + qcom,iommu-faults = "stall-disable", "HUPCF", "no-CFRE", + "non-fatal"; + }; + }; +};