From cb30d9e20a44b34e63ea5331b7301fcdced2374c Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sun, 22 May 2022 16:58:37 +0200 Subject: [PATCH] ipq807x: add motorola q14 support Fixes: WIFI-8040 Signed-off-by: John Crispin --- .../arch/arm/boot/dts/qcom-ipq5018-q14.dts | 23 + .../arm64/boot/dts/qcom/qcom-ipq5018-q14.dts | 886 ++++++++++++++++++ feeds/ipq807x/ipq807x/image/ipq50xx.mk | 2 +- feeds/wifi-ax/ath11k-wifi/Makefile | 13 + .../board-2-motorol-q14.bin.QCN6122 | Bin 0 -> 262292 bytes .../ath11k-wifi/board-motorol-q14.bin.IPQ5018 | Bin 0 -> 131072 bytes 6 files changed, 923 insertions(+), 1 deletion(-) create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-q14.dts create mode 100755 feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-q14.dts create mode 100644 feeds/wifi-ax/ath11k-wifi/board-2-motorol-q14.bin.QCN6122 create mode 100644 feeds/wifi-ax/ath11k-wifi/board-motorol-q14.bin.IPQ5018 diff --git a/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-q14.dts b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-q14.dts new file mode 100644 index 000000000..23cff9101 --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-q14.dts @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../../../arm64/boot/dts/qcom/qcom-ipq5018-q14.dts" + +/ { + pmuv8: pmu { + compatible = "arm,cortex-a7-pmu"; + }; +}; diff --git a/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-q14.dts b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-q14.dts new file mode 100755 index 000000000..97fe96388 --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-q14.dts @@ -0,0 +1,886 @@ +/dts-v1/; +/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "qcom-ipq5018.dtsi" + +/ { + #address-cells = <0x2>; + #size-cells = <0x2>; + model = "Motorola Q14"; + compatible = "motorola,q14", "qcom,ipq5018-mp03.5-c1", "qcom,ipq5018"; + interrupt-parent = <&intc>; + + aliases { + sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ + serial0 = &blsp1_uart1; + serial1 = &blsp1_uart2; + ethernet0 = "/soc/dp1"; + ethernet1 = "/soc/dp2"; + }; + + chosen { + bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; + #ifdef __IPQ_MEM_PROFILE_256_MB__ + bootargs-append = " swiotlb=1"; + #else + bootargs-append = " swiotlb=1 coherent_pool=2M"; + #endif + stdout-path = "serial0"; + }; + + reserved-memory { + #ifdef __IPQ_MEM_PROFILE_256_MB__ + /* 256 MB Profile + * +==========+==============+=========================+ + * | | | | + * | Region | Start Offset | Size | + * | | | | + * +----------+--------------+-------------------------+ + * | NSS | 0x40000000 | 8MB | + * +----------+--------------+-------------------------+ + * | Linux | 0x40800000 | Depends on total memory | + * +----------+--------------+-------------------------+ + * | uboot | 0x4A600000 | 4MB | + * +----------+--------------+-------------------------+ + * | SBL | 0x4AA00000 | 1MB | + * +----------+--------------+-------------------------+ + * | smem | 0x4AB00000 | 1MB | + * +----------+--------------+-------------------------+ + * | TZ | 0x4AC00000 | 4MB | + * +----------+--------------+-------------------------+ + * | Q6 | | | + * | code/ | 0x4B000000 | 20MB | + * | data | | | + * +----------+--------------+-------------------------+ + * | IPQ5018 | | | + * | data | 0x4C400000 | 13MB | + * +----------+--------------+-------------------------+ + * | IPQ5018 | | | + * | M3 Dump | 0x4D100000 | 1MB | + * +----------+--------------+-------------------------+ + * | IPQ5018 | | | + * | QDSS | 0x4D200000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_1| | | + * | data | 0x4D300000 | 15MB | + * +----------+--------------+-------------------------+ + * | QCN6122_1| | | + * | M3 Dump | 0x4E200000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_1| | | + * | QDSS | 0x4E300000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_2| | | + * | data | 0x4E400000 | 15MB | + * +----------+--------------+-------------------------+ + * | QCN6122_2| | | + * | M3 Dump | 0x4F300000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_2| | | + * | QDSS | 0x4F400000 | 1MB | + * +----------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +===================================================+ + */ + q6_mem_regions: q6_mem_regions@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 0x4500000>; + }; + + q6_code_data: q6_code_data@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 0x1400000>; + }; + + q6_ipq5018_data: q6_ipq5018_data@4C400000 { + no-map; + reg = <0x0 0x4C400000 0x0 0xD00000>; + }; + + m3_dump: m3_dump@4D100000 { + no-map; + reg = <0x0 0x4D100000 0x0 0x100000>; + }; + + q6_etr_region: q6_etr_dump@4D200000 { + no-map; + reg = <0x0 0x4D200000 0x0 0x100000>; + }; + + q6_qcn6122_data1: q6_qcn6122_data1@4D300000 { + no-map; + reg = <0x0 0x4D300000 0x0 0xF00000>; + }; + + m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E200000 { + no-map; + reg = <0x0 0x4E200000 0x0 0x100000>; + }; + + q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E300000 { + no-map; + reg = <0x0 0x4E300000 0x0 0x100000>; + }; + + q6_qcn6122_data2: q6_qcn6122_data2@4E400000 { + no-map; + reg = <0x0 0x4E400000 0x0 0xF00000>; + }; + + m3_dump_qcn6122_2: m3_dump_qcn6122_2@4F300000 { + no-map; + reg = <0x0 0x4F300000 0x0 0x100000>; + }; + + q6_qcn6122_etr_2: q6_qcn6122_etr_2@4F400000 { + no-map; + reg = <0x0 0x4F400000 0x0 0x100000>; + }; + #else + /* 512MB/1GB Profiles + * +==========+==============+=========================+ + * | | | | + * | Region | Start Offset | Size | + * | | | | + * +----------+--------------+-------------------------+ + * | NSS | 0x40000000 | 16MB | + * +----------+--------------+-------------------------+ + * | Linux | 0x41000000 | Depends on total memory | + * +----------+--------------+-------------------------+ + * | uboot | 0x4A600000 | 4MB | + * +----------+--------------+-------------------------+ + * | SBL | 0x4AA00000 | 1MB | + * +----------+--------------+-------------------------+ + * | smem | 0x4AB00000 | 1MB | + * +----------+--------------+-------------------------+ + * | TZ | 0x4AC00000 | 4MB | + * +----------+--------------+-------------------------+ + * | Q6 | | | + * | code/ | 0x4B000000 | 20MB | + * | data | | | + * +----------+--------------+-------------------------+ + * | IPQ5018 | | | + * | data | 0x4C400000 | 14MB | + * +----------+--------------+-------------------------+ + * | IPQ5018 | | | + * | M3 Dump | 0x4D200000 | 1MB | + * +----------+--------------+-------------------------+ + * | IPQ5018 | | | + * | QDSS | 0x4D300000 | 1MB | + * +----------+--------------+-------------------------+ + * | IPQ5018 | | | + * | Caldb | 0x4D400000 | 2MB | + * +----------+--------------+-------------------------+ + * | QCN6122_1| | | + * | data | 0x4D600000 | 16MB | + * +----------+--------------+-------------------------+ + * | QCN6122_1| | | + * | M3 Dump | 0x4E600000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_1| | | + * | QDSS | 0x4E700000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_1| | | + * | Caldb | 0x4E800000 | 5MB | + * +----------+--------------+-------------------------+ + * | QCN6122_2| | | + * | data | 0x4ED00000 | 16MB | + * +----------+--------------+-------------------------+ + * | QCN6122_2| | | + * | M3 Dump | 0x4FD00000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_2| | | + * | QDSS | 0x4FE00000 | 1MB | + * +----------+--------------+-------------------------+ + * | QCN6122_2| | | + * | Caldb | 0x4FF00000 | 5MB | + * +----------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +===================================================+ + */ + q6_mem_regions: q6_mem_regions@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 0x5400000>; + }; + + q6_code_data: q6_code_data@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 01400000>; + }; + + q6_ipq5018_data: q6_ipq5018_data@4C400000 { + no-map; + reg = <0x0 0x4C400000 0x0 0xE00000>; + }; + + m3_dump: m3_dump@4D200000 { + no-map; + reg = <0x0 0x4D200000 0x0 0x100000>; + }; + + q6_etr_region: q6_etr_dump@4D300000 { + no-map; + reg = <0x0 0x4D300000 0x0 0x100000>; + }; + + q6_caldb_region: q6_caldb_region@4D400000 { + no-map; + reg = <0x0 0x4D400000 0x0 0x200000>; + }; + + q6_qcn6122_data1: q6_qcn6122_data1@4D600000 { + no-map; + reg = <0x0 0x4D600000 0x0 0x1000000>; + }; + + m3_dump_qcn6122_1: m3_dump_qcn6122_1@4E600000 { + no-map; + reg = <0x0 0x4E600000 0x0 0x100000>; + }; + + q6_qcn6122_etr_1: q6_qcn6122_etr_1@4E700000 { + no-map; + reg = <0x0 0x4E700000 0x0 0x100000>; + }; + + q6_qcn6122_caldb_1: q6_qcn6122_caldb_1@4E800000 { + no-map; + reg = <0x0 0x4E800000 0x0 0x500000>; + }; + + q6_qcn6122_data2: q6_qcn6122_data2@4E900000 { + no-map; + reg = <0x0 0x4ED00000 0x0 0x1000000>; + }; + + m3_dump_qcn6122_2: m3_dump_qcn6122_2@4FD00000 { + no-map; + reg = <0x0 0x4FD00000 0x0 0x100000>; + }; + + q6_qcn6122_etr_2: q6_qcn6122_etr_2@4FE00000 { + no-map; + reg = <0x0 0x4FE00000 0x0 0x100000>; + }; + + q6_qcn6122_caldb_2: q6_qcn6122_caldb_2@4FF00000 { + no-map; + reg = <0x0 0x4FF00000 0x0 0x500000>; + }; + + #endif + }; + + soc { + serial@78af000 { + status = "ok"; + }; + + blsp1_uart2: serial@78b0000 { + pinctrl-0 = <&blsp1_uart_pins>; + pinctrl-names = "default"; + }; + + qpic_bam: dma@7984000{ + status = "ok"; + }; + + nand: qpic-nand@79b0000 { + status = "disabled"; + }; + + spi_0: spi@78b5000 { /* BLSP1 QUP0 */ + pinctrl-0 = <&blsp0_spi_pins>; + pinctrl-names = "default"; + cs-select = <0>; + status = "ok"; + + m25p80@0 { + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + compatible = "n25q128a11"; + linux,modalias = "m25p80", "n25q128a11"; + spi-max-frequency = <50000000>; + use-default-sizes; + }; + }; + + mdio0: mdio@88000 { + status = "ok"; + + ethernet-phy@0 { + reg = <7>; + }; + }; + + mdio1: mdio@90000 { + status = "ok"; + pinctrl-0 = <&mdio1_pins>; + pinctrl-names = "default"; + phy-reset-gpio = <&tlmm 39 0>; + + ethernet-phy@0 { + reg = <28>; + }; + }; + + ess-instance { + num_devices = <0x1>; + ess-switch@0x39c00000 { + switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/ + cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/ + qcom,port_phyinfo { + port@0 { + port_id = <1>; + phy_address = <7>; + mdiobus = <&mdio0>; + }; + port@1 { + port_id = <2>; + phy_address = <0x1c>; + mdiobus = <&mdio1>; + port_mac_sel = "QGMAC_PORT"; + }; + }; + led_source@0 { + source = <0>; + mode = "normal"; + speed = "all"; + blink_en = "enable"; + active = "high"; + }; + }; + }; + + dp1 { + device_type = "network"; + compatible = "qcom,nss-dp"; + clocks = <&gcc GCC_SNOC_GMAC0_AXI_CLK>; + clock-names = "nss-snoc-gmac-axi-clk"; + qcom,id = <1>; + reg = <0x39C00000 0x10000>; + interrupts = ; + qcom,mactype = <2>; + qcom,link-poll = <1>; + qcom,phy-mdio-addr = <7>; + mdio-bus = <&mdio0>; + local-mac-address = [000000000000]; + phy-mode = "sgmii"; + }; + + dp2 { + device_type = "network"; + compatible = "qcom,nss-dp"; + clocks = <&gcc GCC_SNOC_GMAC1_AXI_CLK>; + clock-names = "nss-snoc-gmac-axi-clk"; + qcom,id = <2>; + reg = <0x39D00000 0x10000>; + interrupts = ; + qcom,mactype = <2>; + qcom,link-poll = <1>; + qcom,phy-mdio-addr = <28>; + mdio-bus = <&mdio1>; + local-mac-address = [000000000000]; + phy-mode = "sgmii"; + }; + + qcom,test@0 { + status = "ok"; + }; + + nss-macsec1 { + compatible = "qcom,nss-macsec"; + phy_addr = <0x1c>; + mdiobus = <&mdio1>; + }; + + lpass: lpass@0xA000000{ + status = "disabled"; + }; + + pcm: pcm@0xA3C0000{ + pinctrl-0 = <&audio_pins>; + pinctrl-names = "default"; + status = "disabled"; + }; + + pcm_lb: pcm_lb@0 { + status = "disabled"; + }; + }; + + thermal-zones { + status = "ok"; + }; +}; + +&sdhc_1 { + pinctrl-0 = <&emmc_pins>; + pinctrl-names = "default"; + qcom,clk-rates = <400000 25000000 50000000 100000000 \ + 192000000 384000000>; + qcom,bus-speed-mode = "HS200_1p8v", "DDR_1p8v"; + qcom,nonremovable; + status = "ok"; +}; + +&tlmm { + pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>; + pinctrl-names = "default"; + + blsp0_uart_pins: uart_pins { + blsp0_uart_rx_tx { + pins = "gpio20", "gpio21"; + function = "blsp0_uart0"; + bias-disable; + }; + }; + + blsp1_uart_pins: blsp1_uart_pins { + blsp1_uart_rx_tx { + pins = "gpio23", "gpio25", "gpio24", "gpio26"; + function = "blsp1_uart2"; + bias-disable; + }; + }; + + blsp0_spi_pins: blsp0_spi_pins { + mux { + pins = "gpio10", "gpio11", "gpio12", "gpio13"; + function = "blsp0_spi"; + drive-strength = <2>; + bias-disable; + }; + }; + + emmc_pins: emmc_pins { + emmc_clk { + pins = "gpio9"; + function = "sdc1_clk"; + drive-strength = <8>; + bias-disable; + }; + emmc_cmd { + pins = "gpio8"; + function = "sdc1_cmd"; + drive-strength = <8>; + bias-pull-up; + }; + emmc_data_0 { + pins = "gpio7"; + function = "sdc10"; + drive-strength = <8>; + bias-disable; + }; + emmc_data_1 { + pins = "gpio6"; + function = "sdc11"; + drive-strength = <8>; + bias-disable; + }; + emmc_data_2 { + pins = "gpio5"; + function = "sdc12"; + drive-strength = <8>; + bias-disable; + }; + emmc_data_3 { + pins = "gpio4"; + function = "sdc13"; + drive-strength = <8>; + bias-disable; + }; + }; + + mdio1_pins: mdio_pinmux { + mux_0 { + pins = "gpio36"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mux_1 { + pins = "gpio37"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + phy_led_pins: phy_led_pins { + gephy_led_pin { + pins = "gpio46"; + function = "led0"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + i2c_pins: i2c_pins { + i2c_scl { + pins = "gpio25"; + function = "blsp2_i2c1"; + drive-strength = <8>; + bias-disable; + }; + + i2c_sda { + pins = "gpio26"; + function = "blsp2_i2c1"; + drive-strength = <8>; + bias-disable; + }; + }; + + button_pins: button_pins { + wps_button { + pins = "gpio38"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + + reset_button { + pins = "gpio31"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + + }; + + audio_pins: audio_pinmux { + mux_1 { + pins = "gpio24"; + function = "audio_rxbclk"; + drive-strength = <8>; + bias-pull-down; + }; + + mux_2 { + pins = "gpio25"; + function = "audio_rxfsync"; + drive-strength = <8>; + bias-pull-down; + }; + + mux_3 { + pins = "gpio26"; + function = "audio_rxd"; + drive-strength = <8>; + bias-pull-down; + }; + + mux_4 { + pins = "gpio27"; + function = "audio_txmclk"; + drive-strength = <8>; + bias-pull-down; + }; + + mux_5 { + pins = "gpio28"; + function = "audio_txbclk"; + drive-strength = <8>; + bias-pull-down; + }; + + mux_6 { + pins = "gpio29"; + function = "audio_txfsync"; + drive-strength = <8>; + bias-pull-down; + }; + + mux_7 { + pins = "gpio30"; + function = "audio_txd"; + drive-strength = <8>; + bias-pull-down; + }; + }; + +}; + +&soc { + gpio_keys { + compatible = "gpio-keys"; + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + button@1 { + label = "wps"; + linux,code = ; + gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + + button@2 { + label = "reset"; + linux,code = ; + gpios = <&tlmm 31 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + + }; +}; + +&usb3 { + status = "ok"; + device-power-gpio = <&tlmm 24 1>; +}; + +&eud { + status = "ok"; +}; + +&pcie_x1 { + status = "ok"; + perst-gpio = <&tlmm 18 1>; +}; + +&pcie_x2 { + status = "ok"; + perst-gpio = <&tlmm 15 1>; +}; + +&dwc_0 { + /delete-property/ #phy-cells; + /delete-property/ phys; + /delete-property/ phy-names; +}; + +&hs_m31phy_0 { + status = "ok"; +}; + +&pcie_x1phy { + status = "ok"; +}; + +&pcie_x2phy { + status = "ok"; +}; + +&pcie_x1_rp { + status = "ok"; + + mhi_0: qcom,mhi@0 { + reg = <0 0 0 0 0 >; + }; +}; + +&pcie_x2_rp { + status = "ok"; + + mhi_1: qcom,mhi@1 { + reg = <0 0 0 0 0 >; + + }; +}; + +&qfprom { + status = "ok"; +}; + +&tsens { + status = "ok"; +}; + +&qcom_q6v5_wcss { + qcom,multipd_arch; + 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>; + + /* IPQ5018 */ + q6v5_wcss_userpd1 { + m3_firmware = "IPQ5018/m3_fw.mdt"; + interrupts-extended = <&wcss_smp2p_in 8 0>, + <&wcss_smp2p_in 9 0>, + <&wcss_smp2p_in 12 0>, + <&wcss_smp2p_in 11 0>; + interrupt-names ="fatal", + "ready", + "spawn_ack", + "stop-ack"; + qcom,smem-states = <&wcss_smp2p_out 8>, + <&wcss_smp2p_out 9>, + <&wcss_smp2p_out 10>; + qcom,smem-state-names = "shutdown", + "stop", + "spawn"; + qca,asid = <1>; + qca,auto-restart; + qca,int_radio; + #ifdef __IPQ_MEM_PROFILE_256_MB__ + memory-region = <&q6_ipq5018_data>, <&m3_dump>, + <&q6_etr_region>; + #else + memory-region = <&q6_ipq5018_data>, <&m3_dump>, + <&q6_etr_region>, <&q6_caldb_region>; + #endif + }; + + /* QCN6122 6G */ + q6v5_wcss_userpd2 { + m3_firmware = "qcn6122/m3_fw.mdt"; + interrupts-extended = <&wcss_smp2p_in 16 0>, + <&wcss_smp2p_in 17 0>, + <&wcss_smp2p_in 20 0>, + <&wcss_smp2p_in 19 0>; + interrupt-names ="fatal", + "ready", + "spawn_ack", + "stop-ack"; + qcom,smem-states = <&wcss_smp2p_out 16>, + <&wcss_smp2p_out 17>, + <&wcss_smp2p_out 18>; + qcom,smem-state-names = "shutdown", + "stop", + "spawn"; + qca,asid = <2>; + qca,auto-restart; + #ifdef __IPQ_MEM_PROFILE_256_MB__ + memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, + <&q6_qcn6122_etr_1>; + #else + memory-region = <&q6_qcn6122_data1>, <&m3_dump_qcn6122_1>, + <&q6_qcn6122_etr_1>, <&q6_qcn6122_caldb_1>; + #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 { + pinctrl-0 = <&i2c_pins>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&qgic_msi_0 { + status = "ok"; +}; + +&qgic_msi_1 { + status = "ok"; +}; + +&wifi0 { + /* IPQ5018 */ + qcom,multipd_arch; + qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; +#ifdef __IPQ_MEM_PROFILE_256_MB__ + qcom,tgt-mem-mode = <2>; +#else + qcom,tgt-mem-mode = <1>; +#endif + qcom,board_id = <0x24>; + qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; +#ifdef __CNSS2__ + qcom,caldb-addr = <0x4D400000 0x4D400000 0 0 0>; +#else + qcom,caldb-addr = <0x4D400000>; + m3-dump-addr = <0x4D200000>; + nss-radio-priority = <0>; +#endif + mem-region = <&q6_ipq5018_data>; + qcom,caldb-size = <0x200000>; + status = "ok"; +}; + +&wifi1 { + /* QCN6122 5G */ + qcom,multipd_arch; + qcom,userpd-subsys-name = "q6v5_wcss_userpd2"; +#ifdef __IPQ_MEM_PROFILE_256_MB__ + qcom,tgt-mem-mode = <2>; +#else + qcom,tgt-mem-mode = <1>; +#endif + qcom,board_id = <0x60>; + qcom,bdf-addr = <0x4D600000 0x4D600000 0x4D300000 0x0 0x0>; +#ifdef __CNSS2__ + qcom,caldb-addr = <0x4E800000 0x4E800000 0 0 0>; +#else + qcom,caldb-addr = <0x4E800000>; + m3-dump-addr = <0x4E600000>; + nss-radio-priority = <1>; +#endif + mem-region = <&q6_qcn6122_data1>; + 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"; +}; diff --git a/feeds/ipq807x/ipq807x/image/ipq50xx.mk b/feeds/ipq807x/ipq807x/image/ipq50xx.mk index 80ae3e849..87b599c5f 100644 --- a/feeds/ipq807x/ipq807x/image/ipq50xx.mk +++ b/feeds/ipq807x/ipq807x/image/ipq50xx.mk @@ -27,7 +27,7 @@ define Device/motorola_q14 IMAGES := sysupgrade.tar mmc-factory.bin IMAGE/mmc-factory.bin := append-ubi | qsdk-ipq-factory-mmc endef -#TARGET_DEVICES += motorola_q14 +TARGET_DEVICES += motorola_q14 define Device/qcom_mp03_1 DEVICE_TITLE := Qualcomm Maple 03.1 diff --git a/feeds/wifi-ax/ath11k-wifi/Makefile b/feeds/wifi-ax/ath11k-wifi/Makefile index 10f407f3c..5ba9775f4 100644 --- a/feeds/wifi-ax/ath11k-wifi/Makefile +++ b/feeds/wifi-ax/ath11k-wifi/Makefile @@ -86,6 +86,11 @@ $(call Package/ath11k-wifi-default) TITLE:=gl-ax1800 bdf endef +define Package/ath11k-wifi-motorola-q14 +$(call Package/ath11k-wifi-default) + TITLE:=motorola q14 bdf +endef + define ath11k-wifi-install-one-to $(INSTALL_DIR) $(2)/lib/firmware/$(3)/ $(INSTALL_DATA) $(1) $(2)/lib/firmware/$(3)/board.bin @@ -173,6 +178,13 @@ define Package/ath11k-wifi-gl-ax1800/install $(INSTALL_DATA) ./board-gl-ax1800.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board-2.bin endef +define Package/ath11k-wifi-motorola-q14/install + $(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/ + $(INSTALL_DIR) $(1)/lib/firmware/ath11k/qcn6122/hw1.0/ + $(INSTALL_DATA) ./board-motorol-q14.bin.IPQ5018 $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/board.bin + $(INSTALL_DATA) ./board-2-motorol-q14.bin.QCN6122 $(1)/lib/firmware/ath11k/qcn6122/hw1.0/board-2.bin +endef + $(eval $(call generate-ath11k-wifi-package,cig-wf188,Cigtech WF188)) $(eval $(call generate-ath11k-wifi-package,cig-wf188n,Cigtech WF188n)) $(eval $(call generate-ath11k-wifi-package,cig-wf194c,Cigtech WF194c)) @@ -196,3 +208,4 @@ $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq8074)) $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq6018)) $(eval $(call BuildPackage,ath11k-wifi-qcom-qcn9000)) $(eval $(call BuildPackage,ath11k-wifi-cig-wf196_6g)) +$(eval $(call BuildPackage,ath11k-wifi-motorola-q14)) diff --git a/feeds/wifi-ax/ath11k-wifi/board-2-motorol-q14.bin.QCN6122 b/feeds/wifi-ax/ath11k-wifi/board-2-motorol-q14.bin.QCN6122 new file mode 100644 index 0000000000000000000000000000000000000000..75d77130bc51b7594ad2d5908ded4ab7f0faf499 GIT binary patch literal 262292 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

J{P?! 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 BM-2b~ literal 0 HcmV?d00001 diff --git a/feeds/wifi-ax/ath11k-wifi/board-motorol-q14.bin.IPQ5018 b/feeds/wifi-ax/ath11k-wifi/board-motorol-q14.bin.IPQ5018 new file mode 100644 index 0000000000000000000000000000000000000000..5f5924b0359ca0bada5035355fc5f97260782d41 GIT binary patch literal 131072 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