From 6ed93db422ad5d4ed46dda13b3b521b6f72f6ca4 Mon Sep 17 00:00:00 2001 From: Shubham Vishwakarma Date: Tue, 23 Sep 2025 10:58:04 +0530 Subject: [PATCH] ipq5018: add support for indio um-335ax MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Specifications:** SOC: Qualcomm IPQ5018 (64-bit dual-core ARM Cortex-A53 @ 1.0Ghz) Flash: SPI NOR 8MB (Winbond W25Q64DW) + NAND 128MB (Winbond W25N01GWZEIG) Memory: 512MB DDR3L Standard: 802.11ax/ac/b/g/n 2.4G Frequency: 2.4GHz - 2.484GHz 2.4G Wi-Fi standard: 802.11b/g/n/ax 5G Chipset: QCN9074 5G Frequency: 5.150GHz~5.850GHz 5G Wi-Fi Standard: 802.11 a/n/ac/ax Buttons: 1 * Reset button, press 10 seconds to revert to default setting 2.4G Antenna: 2*2.4GHz/5.8GHz dual band antenna: 4dBi 5G Antenna: 2*5.8G antenna: 4dBi Data Rate: 2.4GHz: 574Mbps, 5GHz:4800Mbps Power: PoE 802.3at,DC2.0 12V/2A Max Power Consumption: < 22W LED Light: WAN, LAN, tricolor LED(sys-red, 2.4G-green, 5.8G-blue) **BACKUP YOUR STOCK FIRMWARE:** - Put openwrt-*-initramfs-kernel.bin to your TFTP server and rename it to initramfs.bin - Enable serial console and enter to u-boot cli and exec these commands: ``` tftpboot :initramfs.bin bootm ``` - Once boot completed and you get the openwrt shell execute below commands: ``` device=um335ax mkdir -p /tmp/fw_backup; cd /tmp/fw_backup rootfs=$(cat /proc/mtd | grep \"rootfs\" | cut -d: -f1) rootfs_1=$(cat /proc/mtd | grep \"rootfs_1\" | cut -d: -f1) dd if=/dev/${rootfs} of=rootfs_${rootfs} bs=1M dd if=/dev/${rootfs_1} of=rootfs_1_${rootfs_1} bs=1M cp /sys/firmware/fdt fdt.dtb md5sum * > md5sum tar -cvzf /tmp/${device}.tar.gz . sum=$(md5sum /tmp/${device}.tar.gz | cut -d' ' -f1) mv /tmp/${device}.tar.gz /tmp/${device}_${sum}.tar.gz echo "stock fw backup saved to: /tmp/${device}_${sum}.tar.gz" ``` - Upload/save your backup to a safe place. **STOCK FIRMWARE RECOVERY:** - Boot initramfs image - Upload your backed-up stock fw tarball to the device using scp or download it from the device using wget. - Enter device ssh cli or tty and exec: ``` cd /tmp && wget /${stock_fw_backup}.tar.gz` tar -xpzf ${stock_fw_backup}.tar.gz rootfs=$(cat /proc/mtd | grep \"rootfs\" | cut -d: -f1) rootfs_1=$(cat /proc/mtd | grep \"rootfs_1\" | cut -d: -f1) ubiformat /dev/${rootfs} -y -f /tmp/rootfs_${rootfs} ubiformat /dev/${rootfs_1} -y -f /tmp/rootfs_1_${rootfs_1} reboot ``` **INSTALLATION:** 1. initramfs method - Put openwrt-*-initramfs-kernel.bin to your TFTP server and rename it to initramfs.bin - Enable serial console and enter to u-boot cli and exec these commands: ``` tftpboot :initramfs.bin bootm ``` - Once boot completed and you get the openwrt shell execute below commands: ``` cd /tmp && wget /factory.ubi` export rootfs=$(cat /proc/mtd | grep rootfs | cut -d: -f1) export rootfs_1=$(cat /proc/mtd | grep rootfs_1 | cut -d: -f1) ubiformat /dev/${rootfs} -y -f factory.ubi ubiformat /dev/${rootfs_1} -y -f factory.ubi reboot ``` 2. u-boot nand-factory.bin image method - Put openwrt-*-squashfs-nand-factory.bin to your TFTP server and enter u-boot cli and exec these commands: ``` tftpboot :factory.bin #After downloading is finished: imxtract 0x44000000 ubi flash rootfs flash rootfs_1 reset ``` Signed-off-by: Shubham Vishwakarma --- feeds/ipq807x_v5.4/ath11k-wifi/Makefile | 2 + .../board-indio-um-335ax.bin.IPQ5018 | Bin 0 -> 131072 bytes .../board-indio-um-335ax.bin.QCN9074 | Bin 0 -> 131072 bytes .../ipq50xx/base-files/etc/board.d/01_leds | 8 +- .../ipq50xx/base-files/etc/board.d/02_network | 1 + .../etc/hotplug.d/firmware/10-ath11k-caldata | 2 + .../base-files/lib/upgrade/platform.sh | 2 + .../dts/qcom/qcom-ipq5018-indio-um-335ax.dts | 731 ++++++++++++++++++ feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk | 9 + profiles/indio_um-335ax.yml | 18 + 10 files changed, 769 insertions(+), 4 deletions(-) create mode 100644 feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.IPQ5018 create mode 100644 feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.QCN9074 create mode 100644 feeds/ipq807x_v5.4/ipq50xx/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-indio-um-335ax.dts create mode 100644 profiles/indio_um-335ax.yml diff --git a/feeds/ipq807x_v5.4/ath11k-wifi/Makefile b/feeds/ipq807x_v5.4/ath11k-wifi/Makefile index fd1fd7382..439830621 100755 --- a/feeds/ipq807x_v5.4/ath11k-wifi/Makefile +++ b/feeds/ipq807x_v5.4/ath11k-wifi/Makefile @@ -48,6 +48,7 @@ ALLWIFIBOARDS:= \ indio-um-510axp-v1 \ indio-um-510axm-v1 \ indio-um-325ax-v2 \ + indio-um-335ax \ indio-um-525axp \ muxi-ap3220l \ plasmacloud-pax1800 \ @@ -444,6 +445,7 @@ $(eval $(call generate-ath11k-wifi-package,indio-um-310ax-v1,Indio UM-310AX V1)) $(eval $(call generate-ath11k-wifi-package,indio-um-510axp-v1,Indio UM-510AXP V1)) $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1)) $(eval $(call generate-ath11k-wifi-package,indio-um-325ax-v2,Indio UM-325AX V2)) +$(eval $(call generate-ath11k-wifi-package,indio-um-335ax,Indio UM-335AX)) $(eval $(call generate-ath11k-wifi-package,indio-um-525axp,Indio UM-525AXP)) $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630c-311g,Sonicfi RAP630C 311G)) $(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-311g,Sonicfi RAP630W 311G)) diff --git a/feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.IPQ5018 b/feeds/ipq807x_v5.4/ath11k-wifi/board-indio-um-335ax.bin.IPQ5018 new file mode 100644 index 0000000000000000000000000000000000000000..dcbe27fe0dd225dbcaf2ff0a2df8ae97ae8853ad GIT binary patch literal 131072 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. + * + * 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 "ipq5018.dtsi" +#include + +/ { + #address-cells = <0x2>; + #size-cells = <0x2>; + model = "Indio UM-335AX"; + compatible = "indio,um-335ax", "qcom,ipq5018-ap-mp03.1", "qcom,ipq5018-mp03.1", "qcom,ipq5018"; + interrupt-parent = <&intc>; + + aliases { + sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ + serial0 = &blsp1_uart1; + serial1 = &blsp1_uart2; + ethernet0 = "/soc/dp1"; + ethernet1 = "/soc/dp2"; + led-boot = &led_red; + led-failsafe = &led_red; + led-running = &led_red; + led-upgrade = &led_red; + + }; + + chosen { + bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; + bootargs-append = " swiotlb=1 coherent_pool=2M"; + stdout-path = "serial0"; + }; + + gpio-watchdog { + compatible = "linux,wdt-gpio"; + gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; + hw_algo = "toggle"; + hw_margin_ms = <5000>; + always-running; + }; + + reserved-memory { + q6_mem_regions: q6_mem_regions@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 0x1800000>; + }; + + q6_ipq5018_data: q6_ipq5018_data@4C400000 { + no-map; + reg = <0x0 0x4C400000 0x0 0xE00000>; + }; + + m3_dump: m3_dump@4C800000 { + no-map; + reg = <0x0 0x4C800000 0x0 0x100000>; + }; + + q6_etr_region: q6_etr_dump@4C900000 { + no-map; + reg = <0x0 0x4C900000 0x0 0x100000>; + }; + + q6_caldb_region: q6_caldb_region@4CA00000 { + no-map; + reg = <0x0 0x4CA00000 0x0 0x200000>; + }; + + qcn9000_pcie0: qcn9000_pcie0@4cc00000 { + no-map; + reg = <0x0 0x4CC00000 0x0 0x2600000>; + }; + + #if defined(__CNSS2__) + mhi_region1: dma_pool1@4F200000 { + compatible = "shared-dma-pool"; + no-map; + reg = <0x0 0x4F200000 0x0 0x900000>; + }; + #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 { + pinctrl-0 = <&qspi_nand_pins>; + pinctrl-names = "default"; + status = "ok"; + }; + + 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"; + }; + }; + ess-switch1@1 { + compatible = "qcom,ess-switch-qca83xx"; + device_id = <1>; + switch_access_mode = "mdio"; + mdio-bus = <&mdio1>; + reset_gpio = <0x28>; + switch_cpu_bmp = <0x40>; /* cpu port bitmap */ + switch_lan_bmp = <0x1e>; /* lan port bitmap */ + switch_wan_bmp = <0x0>; /* wan port bitmap */ + qca,ar8327-initvals = < + 0x00004 0x7600000 /* PAD0_MODE */ + 0x00008 0x1000000 /* PAD5_MODE */ + 0x0000c 0x80 /* PAD6_MODE */ + 0x00010 0x2613a0 /* PORT6 FORCE MODE*/ + 0x000e4 0xaa545 /* MAC_POWER_SEL */ + 0x000e0 0xc74164de /* SGMII_CTRL */ + 0x0007c 0x4e /* PORT0_STATUS */ + 0x00094 0x4e /* PORT6_STATUS */ + >; + qcom,port_phyinfo { + port@0 { + port_id = <1>; + phy_address = <28>; + }; + }; + }; + }; + + 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"; + }; + +}; + +&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 = "gpio22", "gpio24", "gpio23", "gpio25"; + 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; + }; + }; + + qspi_nand_pins: qspi_nand_pins { + qspi_clock { + pins = "gpio9"; + function = "qspi_clk"; + drive-strength = <8>; + bias-disable; + }; + qspi_cs { + pins = "gpio8"; + function = "qspi_cs"; + drive-strength = <8>; + bias-disable; + }; + qspi_data_0 { + pins = "gpio7"; + function = "qspi0"; + drive-strength = <8>; + bias-disable; + }; + qspi_data_1 { + pins = "gpio6"; + function = "qspi1"; + drive-strength = <8>; + bias-disable; + }; + qspi_data_2 { + pins = "gpio5"; + function = "qspi2"; + drive-strength = <8>; + bias-disable; + }; + qspi_data_3 { + pins = "gpio4"; + function = "qspi3"; + 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 { + reset_button { + pins = "gpio38"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + audio_pins: audio_pinmux { + }; + + leds_pins: leds_pins { + led_blue: led_5g { + label = "led_5g"; + pins = "gpio34"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + + led_green: led_2g { + label = "led_2g"; + pins = "gpio33"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + + led_red: led_sys { + label = "led_sys"; + pins = "gpio26"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + + led_onekey { + pins = "gpio28"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + }; +}; + +&soc { + gpio_keys { + compatible = "gpio-keys"; + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + button@1 { + label = "reset"; + linux,code = ; + gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led@33 { + label = "led_5g"; + gpios = <&tlmm 34 GPIO_ACTIVE_LOW>; + linux,default-trigger = "led_5g"; + default-state = "off"; + }; + led@34 { + label = "led_2g"; + gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; + linux,default-trigger = "led_2g"; + default-state = "off"; + }; + led@26 { + label = "led_sys"; + gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; + linux,default-trigger = "led_sys"; + default-state = "on"; + }; + led@28 { + label = "led_onekey"; + gpios = <&tlmm 28 GPIO_ACTIVE_LOW>; + linux,default-trigger = "led_onekey"; + default-state = "off"; + }; + }; +}; + +&q6v5_wcss { + compatible = "qcom,ipq5018-q6-mpd"; + #address-cells = <1>; + #size-cells = <1>; + ranges; + firmware = "IPQ5018/q6_fw.mdt"; + reg = <0x0cd00000 0x4040>, + <0x1938000 0x8>, + <0x193d204 0x4>; + reg-names = "qdsp6", + "tcsr-msip", + "tcsr-q6"; + resets = <&gcc GCC_WCSSAON_RESET>, + <&gcc GCC_WCSS_Q6_BCR>; + + reset-names = "wcss_aon_reset", + "wcss_q6_reset"; + + clocks = <&gcc GCC_Q6_AXIS_CLK>, + <&gcc GCC_WCSS_ECAHB_CLK>, + <&gcc GCC_Q6_AXIM_CLK>, + <&gcc GCC_Q6_AXIM2_CLK>, + <&gcc GCC_Q6_AHB_CLK>, + <&gcc GCC_Q6_AHB_S_CLK>, + <&gcc GCC_WCSS_AXI_S_CLK>; + clock-names = "gcc_q6_axis_clk", + "gcc_wcss_ecahb_clk", + "gcc_q6_axim_clk", + "gcc_q6_axim2_clk", + "gcc_q6_ahb_clk", + "gcc_q6_ahb_s_clk", + "gcc_wcss_axi_s_clk"; + + memory-region = <&q6_mem_regions>, <&q6_etr_region>, + <&q6_caldb_region>; + + qcom,rproc = <&q6v5_wcss>; + qcom,bootargs_smem = <507>; + boot-args = <0x1 0x4 0x3 0x0F 0x0 0x0>, + <0x2 0x4 0x2 0x12 0x0 0x0>; + status = "ok"; + q6_wcss_pd1: remoteproc_pd1@4ab000 { + compatible = "qcom,ipq5018-wcss-ahb-mpd"; + reg = <0x4ab000 0x20>; + reg-names = "rmb"; + firmware = "IPQ5018/q6_fw.mdt"; + 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"; + + resets = <&gcc GCC_WCSSAON_RESET>, + <&gcc GCC_WCSS_BCR>, + <&gcc GCC_CE_BCR>; + reset-names = "wcss_aon_reset", + "wcss_reset", + "ce_reset"; + + clocks = <&gcc GCC_WCSS_AHB_S_CLK>, + <&gcc GCC_WCSS_ACMT_CLK>, + <&gcc GCC_WCSS_AXI_M_CLK>; + clock-names = "gcc_wcss_ahb_s_clk", + "gcc_wcss_acmt_clk", + "gcc_wcss_axi_m_clk"; + + qcom,halt-regs = <&tcsr_q6_block 0xa000 0xd000 0x0>; + + qcom,smem-states = <&wcss_smp2p_out 8>, + <&wcss_smp2p_out 9>, + <&wcss_smp2p_out 10>; + qcom,smem-state-names = "shutdown", + "stop", + "spawn"; + memory-region = <&q6_ipq5018_data>, <&m3_dump>, + <&q6_etr_region>, <&q6_caldb_region>; + }; +}; + +&i2c_0 { + pinctrl-0 = <&i2c_pins>; + pinctrl-names = "default"; + // status = "disabled"; +}; + +&usb3 { + status = "ok"; + device-power-gpio = <&tlmm 24 1>; +}; + +&dwc_0 { + /delete-property/ #phy-cells; + /delete-property/ phys; + /delete-property/ phy-names; +}; + +&blsp1_uart1 { + status = "ok"; +}; + +&ssuniphy_0 { + status = "ok"; +}; + +&hs_m31phy_0 { + status = "ok"; +}; + +&eud { + status = "ok"; +}; + +&pcie_x1 { + perst-gpio = <&tlmm 18 GPIO_ACTIVE_LOW>; +}; + +&pcie_x2 { + status = "ok"; + perst-gpio = <&tlmm 15 GPIO_ACTIVE_LOW>; +}; + +&wcss { + status = "ok"; +}; + +&pcie_x2phy { + status = "ok"; +}; + +&pcie_x1_rp { + status = "disabled"; + + 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 >; + qrtr_instance_id = <0x20>; + qti,disable-rddm-prealloc; + qti,rddm-seg-len = <0x1000>; + #address-cells = <0x2>; + #size-cells = <0x2>; +#if defined(__CNSS2__) + memory-region = <0>,<&mhi_region1>; +#else + base-addr = <0x4CB00000>; + m3-dump-addr = <0x4DF00000>; + etr-addr = <0x4E000000>; + qcom,caldb-addr = <0x4E100000>; + pageable-addr = <0x4E900000>; + qcom,tgt-mem-mode = <0x1>; +#endif + }; +}; + +&wifi0 { + /* IPQ5018 */ + qcom,multipd_arch; + qcom,rproc = <&q6_wcss_pd1>; + qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; + qcom,tgt-mem-mode = <1>; + qcom,board_id = <0x24>; +#ifdef __CNSS2__ + qcom,bdf-addr = <0x4C400000 0x4C400000 0x4C400000 0x0 0x0>; + qcom,caldb-addr = <0x4D400000 0x4D400000 0 0 0>; + qcom,caldb-size = <0x200000>; + mem-region = <&q6_ipq5018_data>; +#else + memory-region = <&q6_ipq5018_data>; +#endif + status = "ok"; +}; + +&wifi3 { + /* QCN9000 5G */ + board_id = <0xa0>; + hremote_node = <&qcn9000_pcie0>; +#ifdef __IPQ_MEM_PROFILE_256_MB__ + /* QCN9000 tgt-mem-mode=2 layout - 17MB + * +=========+==============+=========+ + * | Region | Start Offset | Size | + * +---------+--------------+---------+ + * | HREMOTE | 0x4C900000 | 11MB | + * +---------+--------------+---------+ + * | M3 Dump | 0x4D400000 | 1MB | + * +---------+--------------+---------+ + * | ETR | 0x4D500000 | 1MB | + * +---------+--------------+---------+ + * | Pageable| 0x4D600000 | 4MB | + * +==================================+ + */ + base-addr = <0x4C900000>; + m3-dump-addr = <0x4D400000>; + etr-addr = <0x4D500000>; + caldb-addr = <0>; + pageable-addr = <0x4D600000>; + caldb-size = <0>; + hremote-size = <0xB00000>; + tgt-mem-mode = <0x2>; + pageable-size = <0x400000>; +#elif __IPQ_MEM_PROFILE_512_MB__ + /* QCN9000 tgt-mem-mode=1 layout - 26MB + * +=========+==============+=========+ + * | Region | Start Offset | Size | + * +---------+--------------+---------+ + * | HREMOTE | 0x4CB00000 | 12MB | + * +---------+--------------+---------+ + * | M3 Dump | 0x4D700000 | 1MB | + * +---------+--------------+---------+ + * | ETR | 0x4D800000 | 1MB | + * +---------+--------------+---------+ + * | Caldb | 0x4D900000 | 8MB | + * +---------+--------------+---------+ + * | Pageable| 0x4E100000 | 4MB | + * +==================================+ + */ + base-addr = <0x4CB00000>; + m3-dump-addr = <0x4D700000>; + etr-addr = <0x4D800000>; + caldb-addr = <0x4D900000>; + pageable-addr = <0x4E100000>; + caldb-size = <0x800000>; + hremote-size = <0xC00000>; + tgt-mem-mode = <0x1>; + pageable-size = <0x400000>; +#else + /* QCN9000 tgt-mem-mode=0 layout - 53MB + * +=========+==============+=========+ + * | Region | Start Offset | Size | + * +---------+--------------+---------+ + * | HREMOTE | 0x4CB00000 | 35MB | + * +---------+--------------+---------+ + * | M3 Dump | 0x4EE00000 | 1MB | + * +---------+--------------+---------+ + * | ETR | 0x4EF00000 | 1MB | + * +---------+--------------+---------+ + * | Caldb | 0x4F000000 | 8MB | + * +---------+--------------+---------+ + * | Pageable| 0x4F800000 | 8MB | + * +==================================+ + */ + base-addr = <0x4CB00000>; + m3-dump-addr = <0x4EE00000>; + etr-addr = <0x4EF00000>; + caldb-addr = <0x4F000000>; + pageable-addr = <0x4F800000>; + hremote-size = <0x2300000>; + caldb-size = <0x800000>; + tgt-mem-mode = <0x0>; + pageable-size = <0x800000>; +#endif + status = "ok"; +}; diff --git a/feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk b/feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk index 417247e01..afbfe0b5b 100755 --- a/feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk +++ b/feeds/ipq807x_v5.4/ipq50xx/image/ipq50xx.mk @@ -102,6 +102,15 @@ define Device/indio_um-325ax-v2 endef TARGET_DEVICES += indio_um-325ax-v2 +define Device/indio_um-335ax + DEVICE_TITLE := Indio UM-335ax + DEVICE_DTS := qcom-ipq5018-indio-um-335ax + SUPPORTED_DEVICES := indio,um-335ax + DEVICE_PACKAGES := ath11k-wifi-indio-um-335ax ath11k-firmware-qcn9000 ath11k-firmware-ipq50xx-spruce + DEVICE_DTS_CONFIG := config@mp03.1 +endef +TARGET_DEVICES += indio_um-335ax + define Device/indio_um-525axp DEVICE_TITLE := Indio UM-525axp DEVICE_DTS := qcom-ipq5018-indio-um-525axp diff --git a/profiles/indio_um-335ax.yml b/profiles/indio_um-335ax.yml new file mode 100644 index 000000000..3223ed560 --- /dev/null +++ b/profiles/indio_um-335ax.yml @@ -0,0 +1,18 @@ +--- +profile: indio_um-335ax +target: ipq50xx +subtarget: generic +description: Build image for the Indio um-335ax +image: bin/targets/ipq50xx/generic/openwrt-ipq50xx-indio_um-335ax-squashfs-sysupgrade.tar +feeds: + - name: ipq807x + path: ../../feeds/ipq807x_v5.4 +include: + - ucentral-ap +packages: + - ipq50xx +diffconfig: | + CONFIG_KERNEL_IPQ_MEM_PROFILE=512 + CONFIG_BUSYBOX_CUSTOM=y + CONFIG_BUSYBOX_CONFIG_STTY=y +