From 2972abf7e3946f8353dc02b41aa9a8ffdece7b14 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Fri, 4 Feb 2022 07:58:37 +0100 Subject: [PATCH] ipq807x: add cybertan eww622-a1 Fixes: WIFI-7054 Signed-off-by: John Crispin --- .github/workflows/build-dev.yml | 2 +- .../ipq807x/base-files/etc/board.d/02_network | 8 + .../etc/hotplug.d/firmware/10-ath11k-caldata | 10 + .../base-files/lib/upgrade/platform.sh | 2 + .../arm/boot/dts/qcom-ipq5018-eww622-a1.dts | 26 + .../boot/dts/qcom/qcom-ipq5018-eww622-a1.dts | 909 ++++++++++++++++++ feeds/ipq807x/ipq807x/image/ipq50xx.mk | 18 + feeds/ipq807x/ipq807x/ipq50xx/config-default | 1 + feeds/ipq807x/ipq807x/modules.mk | 36 + feeds/wifi-ax/ath11k-wifi/Makefile | 8 + .../board-cybertan-eww622-a1.bin.IPQ5018 | Bin 0 -> 131072 bytes .../board-cybertan-eww622-a1.bin.QCN9074 | Bin 0 -> 131072 bytes profiles/cybertan_eww622-a1.yml | 12 + 13 files changed, 1031 insertions(+), 1 deletion(-) create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-eww622-a1.dts create mode 100755 feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww622-a1.dts create mode 100644 feeds/wifi-ax/ath11k-wifi/board-cybertan-eww622-a1.bin.IPQ5018 create mode 100644 feeds/wifi-ax/ath11k-wifi/board-cybertan-eww622-a1.bin.QCN9074 create mode 100644 profiles/cybertan_eww622-a1.yml diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml index 640b40863..4f78b5f78 100644 --- a/.github/workflows/build-dev.yml +++ b/.github/workflows/build-dev.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - target: ['cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf160d', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ] + target: ['cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf160d', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ] steps: - uses: actions/checkout@v2 diff --git a/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network b/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network index 6e8dc9b01..bdeb9eff0 100755 --- a/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network +++ b/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network @@ -55,6 +55,14 @@ qcom_setup_interfaces() ucidef_set_interface_lan "eth1 eth2 eth3 eth4" ucidef_set_interface_wan "eth0" ;; + cybertan,eww622-a1|\ + qcom,ipq5018-mp03.1) + ucidef_set_interface_lan "eth1" + ucidef_set_interface_wan "eth0" + ucidef_add_switch "switch1" + ucidef_add_switch_attr "switch1" "enable" "false" + ucidef_add_switch_attr "switch1" "reset" "true" + ;; esac } diff --git a/feeds/ipq807x/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata b/feeds/ipq807x/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata index 327ba8546..1aeab22c9 100755 --- a/feeds/ipq807x/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata +++ b/feeds/ipq807x/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata @@ -80,9 +80,19 @@ case "$FIRMWARE" in ;; esac ;; +ath11k/IPQ5018/hw1.0/caldata.bin) + case "$board" in + cybertan,eww622-a1|\ + qcom,ipq5018-mp03.1) + caldata_extract "0:ART" 0x1000 0x20000 + ;; + esac + ;; ath11k/QCN9074/hw1.0/caldata_1.bin) case "$board" in cig,wf196|\ + cybertan,eww622-a1|\ + qcom,ipq5018-mp03.1|\ qcom,ipq807x-hk14) caldata_extract "0:ART" 0x26800 0x20000 ;; diff --git a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh index 1cd40b29f..4b4ec4411 100755 --- a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh +++ b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh @@ -24,6 +24,7 @@ platform_check_image() { cig,wf188n|\ cig,wf194c|\ cig,wf194c4|\ + cybertan,eww622-a1|\ wallys,dr6018|\ wallys,dr6018-v4|\ edgecore,eap101|\ @@ -56,6 +57,7 @@ platform_do_upgrade() { cig,wf188n|\ cig,wf194c|\ cig,wf194c4|\ + cybertan,eww622-a1|\ hfcl,ion4xi|\ hfcl,ion4xe|\ qcom,ipq6018-cp01|\ diff --git a/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-eww622-a1.dts b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-eww622-a1.dts new file mode 100644 index 000000000..449a7ef5c --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-eww622-a1.dts @@ -0,0 +1,26 @@ +/* + * 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-eww622-a1.dts" + +/ { + model = "CyberTan EWW622-A1"; + compatible = "cybertan,eww622-a1", "qcom,ipq5018"; + + pmuv8: pmu { + compatible = "arm,cortex-a7-pmu"; + }; +}; diff --git a/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww622-a1.dts b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww622-a1.dts new file mode 100755 index 000000000..bcc6e72fe --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-eww622-a1.dts @@ -0,0 +1,909 @@ +/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 = "Qualcomm Technologies, Inc. IPQ5018/AP-MP03.1"; + compatible = "qcom,ipq5018-mp03.1", "qcom,ipq5018"; + interrupt-parent = <&intc>; + #ifdef __IPQ_MEM_PROFILE_256_MB__ + AUTO_MOUNT; + #endif + + 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 | 0x4B000000 | 23MB | + * | | | | + * | | | | + * | | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4C700000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4C800000 | 1MB | + * +--------+--------------+-------------------------+ + * | | | | + * |QCN9000 | 0x4C900000 | 17MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | | | + * | MHI1 | 0x4DA00000 | 16MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +=================================================+ + */ + q6_region: wcnss@4b000000 { + no-map; + reg = <0x0 0x4b000000 0x0 0x01700000>; + }; + + m3_dump@4c700000 { + no-map; + reg = <0x0 0x4C700000 0x0 0x100000>; + }; + + q6_etr_region:q6_etr_dump@4c800000 { + no-map; + reg = <0x0 0x4c800000 0x0 0x100000>; + }; + + qcn9000_pcie0@4c900000 { + no-map; + reg = <0x0 0x4C900000 0x0 0x01100000>; + }; + + mhi_region1: dma_pool1@4da00000 { + compatible = "shared-dma-pool"; + no-map; + reg = <0x0 0x4da00000 0x0 0x01000000>; + }; + #elif __IPQ_MEM_PROFILE_512_MB__ + /* 512 MB Profile + * +=========+==============+========================+ + * | | | | + * | 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 | 0x4B000000 | 24MB | + * | | | | + * | | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4C800000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4C900000 | 1MB | + * +--------+--------------+-------------------------+ + * | caldb | 0x4CA00000 | 2MB | + * +--------+--------------+-------------------------+ + * | | | | + * |QCN9000 | 0x4CC00000 | 30MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | | | + * | MHI1 | 0x4EA00000 | 16MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +=================================================+ + */ + q6_region: wcnss@4b000000 { + no-map; + reg = <0x0 0x4b000000 0x0 0x01800000>; + }; + + 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@4cc00000 { + no-map; + reg = <0x0 0x4CC00000 0x0 0x01E00000>; + }; + + mhi_region1: dma_pool1@4ea00000 { + compatible = "shared-dma-pool"; + no-map; + reg = <0x0 0x4ea00000 0x0 0x01000000>; + }; + #else + /* 1G Profile + * +=========+==============+========================+ + * | | | | + * | 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 | 0x4B000000 | 24MB | + * | | | | + * | | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4C800000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4C900000 | 1MB | + * +--------+--------------+-------------------------+ + * | caldb | 0x4CA00000 | 2MB | + * +--------+--------------+-------------------------+ + * | | | | + * |QCN9000 | 0x4CC00000 | 45MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | | | + * | MHI1 | 0x4F900000 | 24MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +=================================================+ + */ + q6_region: wcnss@4b000000 { + no-map; + reg = <0x0 0x4b000000 0x0 0x01800000>; + }; + + 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@4cc00000 { + no-map; + reg = <0x0 0x4CC00000 0x0 0x02D00000>; + }; + + mhi_region1: dma_pool1@4F900000 { + compatible = "shared-dma-pool"; + no-map; + reg = <0x0 0x4F900000 0x0 0x01800000>; + }; + #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 = <0>; + }; + + ethernet-phy@1 { + reg = <1>; + }; + + ethernet-phy@2 { + reg = <2>; + }; + + ethernet-phy@3 { + reg = <3>; + }; + + ethernet-phy@4 { + reg = <4>; + }; + }; + + ess-instance { + num_devices = <0x2>; + ess-switch@0x39c00000 { + compatible = "qcom,ess-switch-ipq50xx"; + device_id = <0>; + 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>; + }; + port@1 { + port_id = <2>; + forced-speed = <1000>; + forced-duplex = <1>; + }; + }; + led_source@0 { + source = <2>; + mode = "normal"; + speed = "1000M"; + blink_en = "enable"; + active = "high"; + }; + led_source@1 { + source = <0>; + mode = "normal"; + speed = "100M"; + 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 = <0x27>; + switch_cpu_bmp = <0x40>; /* cpu port bitmap */ + switch_lan_bmp = <0x3c>; /* 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 = <0>; + }; + port@1 { + port_id = <2>; + phy_address = <1>; + }; + port@2 { + port_id = <3>; + phy_address = <2>; + }; + port@3 { + port_id = <4>; + phy_address = <3>; + }; + port@4 { + port_id = <5>; + phy_address = <4>; + }; + }; + }; + }; + + wifi0: wifi@c000000 { + qcom,bdf-addr = <0x4BA00000 0x4BA00000 0x4BA00000 + 0x0 0x0>; + qcom,caldb-addr = <0x4CA00000 0x4CA00000 0x4CA00000 + 0x0 0x0>; + qcom,caldb-size = <0x200000>; + status = "ok"; + }; + + ess-uniphy@98000 { + status = "disabled"; + }; + + qcom,sps { + status = "ok"; + }; + + qcom,usbbam@8B04000 { + status = "ok"; + }; + + qcom,diag@0 { + status = "ok"; + }; + + 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>; + local-mac-address = [000000000000]; + phy-mode = "sgmii"; + }; + + rpm_etm0 { + status = "disabled"; + }; + }; + + thermal-zones { + status = "ok"; + }; +}; + +&tlmm { + pinctrl-0 = <&blsp0_uart_pins &phy_led_pins>; + pinctrl-names = "default"; + + blsp0_uart_pins: blsp0_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; + }; + }; + + 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_1g { + pins = "gpio30"; + function = "led2"; + drive-strength = <8>; + bias-pull-down; + }; + gephy_led_pin_100 { + 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 = "gpio27"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + + reset_button { + pins = "gpio28"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + leds_pins: leds_pinmux { + sys_blue { + pins = "gpio1"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + sys_green { + pins = "gpio35"; + function = "gpio"; + drive-strength = <8>; + bias-disable; + }; + sys_red { + pins = "gpio31"; + function = "gpio"; + drive-strength = <8>; + bias-disable; + }; + }; + +}; + +&soc { + gpio_keys { + compatible = "gpio-keys"; + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + button@1 { + label = "wps"; + linux,code = ; + gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + + button@2 { + label = "reset"; + linux,code = ; + gpios = <&tlmm 28 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + }; + gpio_leds { + compatible = "gpio-leds"; + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led@1 { + label = "sys:blue"; + gpios = <&tlmm 1 GPIO_ACTIVE_HIGH>; /* GPIO_1 */ + /* default-state="on"; */ + linux,default-trigger = "timer"; + active-delay = <700>; + inactive-delay = <700>; + default-state="on"; + }; + led@35 { + label = "sys:green"; + gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; /* GPIO_35 */ + default-state="off"; + /* linux,default-trigger = "timer"; + active-delay = <700>; + inactive-delay = <700>; + default-state="on"; */ + }; + led@31 { + label = "sys:red"; + gpios = <&tlmm 31 GPIO_ACTIVE_HIGH>; /* GPIO_31 */ + default-state="off"; + /* linux,default-trigger = "timer"; + active-delay = <700>; + inactive-delay = <700>; + default-state="on"; */ + }; + }; +}; + +&usb3 { + qcom,multiplexed-phy; + qcom,phy-mux-regs = <&tcsr_q6_block 0x2540>; + device-power-gpio = <&tlmm 24 1>; + status = "ok"; +}; + +&eud { + status = "ok"; +}; + +&pcie_x1 { + status = "disabled"; + perst-gpio = <&tlmm 18 1>; +}; + +&pcie_x2 { + status = "ok"; + perst-gpio = <&tlmm 15 1>; +}; + +&bt { + status = "ok"; +}; + +&wcss { + status = "ok"; +}; + +&q6v5_wcss { + status = "disabled"; +}; + +&q6v5_m3 { + status = "disabled"; +}; + +&tcsr_mutex_block { + status = "ok"; +}; + +&tcsr_mutex { + status = "ok"; +}; + +&smem { + status = "ok"; +}; + +&apcs_glb { + status = "ok"; +}; + +&tcsr_q6_block { + status = "ok"; +}; + +&qcom_q6v5_wcss { + #ifdef __IPQ_MEM_PROFILE_256_MB__ + memory-region = <&q6_region>, <&q6_etr_region>; + #else + memory-region = <&q6_region>, <&q6_etr_region>, + <&q6_caldb_region>; + #endif + /* 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; + }; +}; + +&i2c_0 { + pinctrl-0 = <&i2c_pins>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&dbm_1p5 { + status = "ok"; +}; + +&msm_imem { + status = "ok"; +}; + +&blsp1_uart1 { + status = "ok"; +}; + +&ssuniphy_0 { + status = "ok"; +}; + +&hs_m31phy_0 { + status = "ok"; +}; + +&pcie_x1phy { + status = "disabled"; +}; + +&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>; + #address-cells = <0x2>; + #size-cells = <0x2>; + memory-region = <&mhi_region1>; +#if !defined(__CNSS2__) + base-addr = <0x4CC00000>; + m3-dump-addr = <0x4E000000>; + etr-addr = <0x4E100000>; + qcom,caldb-addr = <0x4E200000>; + qcom,tgt-mem-mode = <0x1>; + mhi,max-channels = <30>; + mhi,timeout = <10000>; +#endif + }; +}; + +&wifi0 { + /* IPQ5018 */ + qcom,board_id = <0x24>; + status = "ok"; +}; + +&wifi3 { + /* QCN9000 5G */ + board_id = <0xa0>; + status = "ok"; +}; + +&qfprom { + status = "ok"; +}; + +&tsens { + status = "ok"; +}; diff --git a/feeds/ipq807x/ipq807x/image/ipq50xx.mk b/feeds/ipq807x/ipq807x/image/ipq50xx.mk index f20d54190..d48b33984 100644 --- a/feeds/ipq807x/ipq807x/image/ipq50xx.mk +++ b/feeds/ipq807x/ipq807x/image/ipq50xx.mk @@ -1,5 +1,23 @@ KERNEL_LOADADDR := 0x41208000 +define Device/cybertan_eww622_a1 + DEVICE_TITLE := CyberTan EWW622-A1 + DEVICE_DTS := qcom-ipq5018-eww622-a1 + SUPPORTED_DEVICES := cybertan,eww622-a1 + DEVICE_PACKAGES := ath11k-wifi-cybertan-eww622-a1 ath11k-firmware-ipq50xx ath11k-firmware-qcn9000 + DEVICE_DTS_CONFIG := config@mp03.1 +endef +TARGET_DEVICES += cybertan_eww622_a1 + +define Device/qcom_mp03_1 + DEVICE_TITLE := Qualcomm Maple 03.1 + DEVICE_DTS := qcom-ipq5018-mp03.1 + SUPPORTED_DEVICES := qcom,ipq5018-mp03.1 + DEVICE_PACKAGES := ath11k-wifi-qcom-ipq5018 + DEVICE_DTS_CONFIG := config@mp03.1 +endef +TARGET_DEVICES += qcom_mp03_1 + define Device/qcom_mp03_3 DEVICE_TITLE := Qualcomm Maple 03.3 DEVICE_DTS := qcom-ipq5018-mp03.3 diff --git a/feeds/ipq807x/ipq807x/ipq50xx/config-default b/feeds/ipq807x/ipq807x/ipq50xx/config-default index b8e202c87..ebf414081 100644 --- a/feeds/ipq807x/ipq807x/ipq50xx/config-default +++ b/feeds/ipq807x/ipq807x/ipq50xx/config-default @@ -82,3 +82,4 @@ CONFIG_RMNET_CTL_DEBUG=y CONFIG_SND_SOC_IPQ_LPASS=y CONFIG_SND_SOC_IPQ_LPASS_PCM_RAW=y # CONFIG_SND_SOC_IPQ_PCM_RAW is not set +CONFIG_QCOM_RESTART_REASON=y diff --git a/feeds/ipq807x/ipq807x/modules.mk b/feeds/ipq807x/ipq807x/modules.mk index 0223ff259..658581085 100644 --- a/feeds/ipq807x/ipq807x/modules.mk +++ b/feeds/ipq807x/ipq807x/modules.mk @@ -59,3 +59,39 @@ Kernel configs for ath11k support specific to ipq807x and IPQ60xx endef $(eval $(call KernelPackage,qrtr_mproc)) + +define KernelPackage/bt_tty + TITLE:= BT Inter-processor Communication + DEPENDS+= @TARGET_ipq807x + KCONFIG:= \ + CONFIG_QTI_BT_TTY=y \ + CONFIG_QCOM_MDT_LOADER=y + FILES:= $(LINUX_DIR)/drivers/soc/qcom/bt/bt_rproc.ko + AUTOLOAD:=$(call AutoLoad,53,bt_rproc,1) +endef + +define KernelPackage/bt_tty/description +BT Interprocessor Communication support specific to IPQ50xx +endef + +$(eval $(call KernelPackage,bt_tty)) + +define KernelPackage/usb-phy-ipq5018 + TITLE:=DWC3 USB PHY driver for IPQ5018 + DEPENDS:=@TARGET_ipq807x_ipq50xx + KCONFIG:= \ + CONFIG_USB_QCA_M31_PHY \ + CONFIG_PHY_IPQ_UNIPHY_USB + FILES:= \ + $(LINUX_DIR)/drivers/usb/phy/phy-qca-m31.ko \ + $(LINUX_DIR)/drivers/phy/phy-qca-uniphy.ko + AUTOLOAD:=$(call AutoLoad,45,phy-qca-m31 phy-qca-uniphy,1) + $(call AddDepends/usb) +endef + +define KernelPackage/usb-phy-ipq5018/description + This driver provides support for the USB PHY drivers + within the IPQ5018 SoCs. +endef + +$(eval $(call KernelPackage,usb-phy-ipq5018)) diff --git a/feeds/wifi-ax/ath11k-wifi/Makefile b/feeds/wifi-ax/ath11k-wifi/Makefile index b2e0f0e36..ef8d04423 100644 --- a/feeds/wifi-ax/ath11k-wifi/Makefile +++ b/feeds/wifi-ax/ath11k-wifi/Makefile @@ -29,6 +29,7 @@ ALLWIFIBOARDS:= \ cig-wf194c \ cig-wf194c4 \ cig-wf196 \ + cybertan-eww622-a1 \ edgecore-eap101 \ sercomm-wallaby \ edgecore-eap102 \ @@ -78,12 +79,18 @@ define ath11k-wifi-install-one-to endef define ath11k-wifi-install-one + $(if $(filter $(suffix $(1)),.IPQ5018),\ + $(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/IPQ5018/hw1.0/),\ + ) $(if $(filter $(suffix $(1)),.IPQ6018),\ $(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/IPQ6018/hw1.0/),\ ) $(if $(filter $(suffix $(1)),.IPQ8074),\ $(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/IPQ8074/hw2.0/),\ ) + $(if $(filter $(suffix $(1)),.QCN9074),\ + $(call ath11k-wifi-install-one-to,$(1),$(2),ath11k/QCN9074/hw1.0/),\ + ) endef # Blank line required at end of above define due to foreach context @@ -145,6 +152,7 @@ $(eval $(call generate-ath11k-wifi-package,cig-wf188n,Cigtech WF188n)) $(eval $(call generate-ath11k-wifi-package,cig-wf194c,Cigtech WF194c)) $(eval $(call generate-ath11k-wifi-package,cig-wf194c4,Cigtech WF194c4)) $(eval $(call generate-ath11k-wifi-package,cig-wf196,Cigtech WF196)) +$(eval $(call generate-ath11k-wifi-package,cybertan-eww622-a1,CyberTan EWW622 A1)) $(eval $(call generate-ath11k-wifi-package,sercomm-wallaby,Sercomm Kiwi)) $(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018)) $(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4)) diff --git a/feeds/wifi-ax/ath11k-wifi/board-cybertan-eww622-a1.bin.IPQ5018 b/feeds/wifi-ax/ath11k-wifi/board-cybertan-eww622-a1.bin.IPQ5018 new file mode 100644 index 0000000000000000000000000000000000000000..ec97bdaf433c388985fcb0ee706cd2cc05ed96d4 GIT binary patch literal 131072 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 N0xkkB0%s!v{|8j-S2_Ry literal 0 HcmV?d00001 diff --git a/profiles/cybertan_eww622-a1.yml b/profiles/cybertan_eww622-a1.yml new file mode 100644 index 000000000..95f02b2ca --- /dev/null +++ b/profiles/cybertan_eww622-a1.yml @@ -0,0 +1,12 @@ +--- +profile: cybertan_eww622_a1 +target: ipq807x +subtarget: ipq50xx +description: Build image for the CyberTan EWW622-A1 +image: bin/targets/ipq807x/ipq50xx/openwrt-ipq807x-cybertan_eww622_a1-squashfs-sysupgrade.tar +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax + - ucentral-ap