From 7e4030c0bcf540d132a1cf5010fda81d0d2700fd Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sun, 4 Jun 2023 12:32:58 +0200 Subject: [PATCH] ipq807x: add yuncore fap655 support Signed-off-by: John Crispin --- .github/workflows/build-dev.yml | 2 +- .../ipq807x/base-files/etc/board.d/01_leds | 1 + .../ipq807x/base-files/etc/board.d/02_network | 8 + .../etc/hotplug.d/firmware/10-ath11k-caldata | 3 + .../base-files/lib/upgrade/platform.sh | 4 +- .../boot/dts/qcom-ipq5018-yuncore-fap655.dts | 23 + .../dts/qcom/qcom-ipq5018-yuncore-fap655.dts | 1147 +++++++++++++++++ feeds/ipq807x/ipq807x/image/ipq50xx.mk | 9 + .../ipq807x/patches/120-dwc3-gpio-opps.patch | 13 + feeds/wifi-ax/ath11k-wifi/Makefile | 2 + .../board-yuncore-fap655.bin.IPQ5018 | Bin 0 -> 131072 bytes .../board-yuncore-fap655.bin.QCN6122 | Bin 0 -> 131072 bytes profiles/yuncore_fap655.yml | 14 + 13 files changed, 1224 insertions(+), 2 deletions(-) create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-yuncore-fap655.dts create mode 100755 feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-yuncore-fap655.dts create mode 100644 feeds/ipq807x/ipq807x/patches/120-dwc3-gpio-opps.patch create mode 100755 feeds/wifi-ax/ath11k-wifi/board-yuncore-fap655.bin.IPQ5018 create mode 100644 feeds/wifi-ax/ath11k-wifi/board-yuncore-fap655.bin.QCN6122 create mode 100644 profiles/yuncore_fap655.yml diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml index e6c13f509..c002bdb68 100644 --- a/.github/workflows/build-dev.yml +++ b/.github/workflows/build-dev.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - target: ['actiontec_web7200', 'cig_wf186w', 'cig_wf188n', 'cig_wf194c4', 'cig_wf196-us', 'cig_wf196-ca', 'cig_wf196-ca-ath12', 'cig_wf610d', 'cig_wf660a', 'cig_wf660a', 'cig_wf808', 'cybertan_eww622-a1', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'edgecore_eap101', 'edgecore_eap101-ath12', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap104-ath12', 'liteon_wpx8324', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_oap101_6e', 'edgecore_oap101e', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4','hfcl_ion4xi_wp', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'indio_um-305ac', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'indio_um-310ax-v1', 'indio_um-510axp-v1', 'indio_um-510axm-v1', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'meshpp_s618_cp03', 'meshpp_s618_cp01', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4', 'x64_vm', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650' ] + target: ['actiontec_web7200', 'cig_wf186w', 'cig_wf188n', 'cig_wf194c4', 'cig_wf196-us', 'cig_wf196-ca', 'cig_wf196-ca-ath12', 'cig_wf610d', 'cig_wf660a', 'cig_wf660a', 'cig_wf808', 'cybertan_eww622-a1', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'edgecore_eap101', 'edgecore_eap101-ath12', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap104-ath12', 'liteon_wpx8324', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_oap101_6e', 'edgecore_oap101e', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4','hfcl_ion4xi_wp', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'indio_um-305ac', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'indio_um-310ax-v1', 'indio_um-510axp-v1', 'indio_um-510axm-v1', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'meshpp_s618_cp03', 'meshpp_s618_cp01', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4', 'x64_vm', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ] steps: - uses: actions/checkout@v3 diff --git a/feeds/ipq807x/ipq807x/base-files/etc/board.d/01_leds b/feeds/ipq807x/ipq807x/base-files/etc/board.d/01_leds index 5ab3301c7..167dbaea4 100755 --- a/feeds/ipq807x/ipq807x/base-files/etc/board.d/01_leds +++ b/feeds/ipq807x/ipq807x/base-files/etc/board.d/01_leds @@ -52,6 +52,7 @@ glinet,axt1800) ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth0" "tx rx link" ;; yuncore,fap650|\ +yuncore,fap655|\ muxi,ap3220l) ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy0tpt" ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy1tpt" 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 b01032246..106059a4e 100755 --- a/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network +++ b/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network @@ -112,6 +112,10 @@ qcom_setup_interfaces() ucidef_add_switch_attr "switch1" "enable" "false" ucidef_add_switch_attr "switch1" "reset" "true" ;; + yuncore,fap655) + ucidef_add_switch "switch1" \ + "6@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" + ;; esac } @@ -198,6 +202,10 @@ qcom_setup_macs() wan_mac=$(cat /sys/class/net/eth4/address) lan_mac=$(macaddr_add "$wan_mac" 1) ;; + yuncore,fap655) + wan_mac=$(cat /sys/class/net/eth0/address) + lan_mac=$(macaddr_add "$wan_mac" 1) + ;; muxi,ap3220l) wan_mac=$(mtd_get_mac_binary 0:Product_Info 0x5b) lan_mac=$(macaddr_add "$wan_mac" 1) 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 47f477b95..764656655 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 @@ -162,6 +162,7 @@ ath11k/IPQ5018/hw1.0/caldata.bin) cybertan,eww631-a1|\ cybertan,eww631-b1|\ edgecore,eap104|\ + yuncore,fap655|\ liteon,wpx8324|\ motorola,q14|\ muxi,ap3220l|\ @@ -175,6 +176,7 @@ ath11k/qcn6122/hw1.0/caldata_1.bin) cig,wf186w|\ cybertan,eww631-a1|\ cybertan,eww631-b1|\ + yuncore,fap655|\ motorola,q14) caldata_extract "0:ART" 0x26800 0x20000 ;; @@ -226,6 +228,7 @@ ath11k-macs) ath11k_generate_macs_eap101 ;; yuncore,ax840|\ + yuncore,fap655|\ edgecore,eap102|\ edgecore,eap104|\ edgecore,eap106|\ diff --git a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh index 0966160bf..721c31742 100755 --- a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh +++ b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh @@ -144,6 +144,7 @@ platform_check_image() { tplink,ex447|\ yuncore,ax840|\ yuncore,fap650|\ + yuncore,fap655|\ motorola,q14|\ muxi,ap3220l|\ qcom,ipq6018-cp01|\ @@ -256,7 +257,8 @@ platform_do_upgrade() { PART_NAME="inactive" platform_do_upgrade_dualboot_datachk "$1" ;; - yuncore,ax840) + yuncore,ax840|\ + yuncore,fap655) [ -f /proc/boot_info/rootfs/upgradepartition ] && { CI_UBIPART="$(cat /proc/boot_info/rootfs/upgradepartition)" CI_BOOTCFG=1 diff --git a/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-yuncore-fap655.dts b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-yuncore-fap655.dts new file mode 100644 index 000000000..8942e99aa --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq5018-yuncore-fap655.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-yuncore-fap655.dts" + +/ { + pmuv8: pmu { + compatible = "arm,cortex-a7-pmu"; + }; +}; diff --git a/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-yuncore-fap655.dts b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-yuncore-fap655.dts new file mode 100755 index 000000000..7cd884463 --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq5018-yuncore-fap655.dts @@ -0,0 +1,1147 @@ +/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 = "Yuncore FAP655"; + compatible = "yuncore,fap655", "qcom,ipq5018-mp03.3", "qcom,ipq5018"; + interrupt-parent = <&intc>; + + aliases { + sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ + serial0 = &blsp1_uart1; + serial1 = &blsp1_uart2; + ethernet1 = "/soc/dp1"; + led-boot = &led_power; + led-failsafe = &led_power; + led-running = &led_power; + led-upgrade = &led_power; + }; + + 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 | 16MB | + * | code/ | | | + * | data | | | + * +--------+--------------+-------------------------+ + * | | | | + * |IPQ5018 | 0x4C000000 | 13MB | + * | data | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4CD00000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4CE00000 | 1MB | + * +--------+--------------+-------------------------+ + * |QCN6122 | 0x4CF00000 | 15MB | + * | data | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4DE00000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4DF00000 | 1MB | + * +--------+--------------+-------------------------+ + * | | | | + * |QCN9000 | 0x4E000000 | 17MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | | | + * | MHI1 | 0x4F100000 | 16MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +=================================================+ + */ + + q6_mem_regions: q6_mem_regions@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 0x3000000>; + }; + + q6_code_data: q6_code_data@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 01000000>; + }; + + q6_ipq5018_data: q6_ipq5018_data@4c000000 { + no-map; + reg = <0x0 0x4c000000 0x0 0xD00000>; + }; + + m3_dump: m3_dump@4CD00000 { + no-map; + reg = <0x0 0x4CD00000 0x0 0x100000>; + }; + + q6_etr_region:q6_etr_dump@4CE00000 { + no-map; + reg = <0x0 0x4CE00000 0x0 0x100000>; + }; + + q6_qcn6122_data1: q6_qcn6122_data1@4CF00000 { + no-map; + reg = <0x0 0x4CF00000 0x0 0xF00000>; + }; + + m3_dump_qcn6122_1: m3_dump_qcn6122_1@4DE00000 { + no-map; + reg = <0x0 0x4DE00000 0x0 0x100000>; + }; + + q6_qcn6122_etr_1: q6_qcn6122_etr_1@4DF00000 { + no-map; + reg = <0x0 0x4DF00000 0x0 0x100000>; + }; + + q6_qcn9000_region: qcn9000_pcie0@4E000000 { + no-map; + reg = <0x0 0x4E000000 0x0 0x01100000>; + }; + + mhi_region1: dma_pool1@4F100000 { + compatible = "shared-dma-pool"; + no-map; + reg = <0x0 0x4F100000 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 | 16MB | + * | code/ | | | + * | data | | | + * +--------+--------------+-------------------------+ + * | | | | + * |IPQ5018 | 0x4C000000 | 14MB | + * | data | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4CE00000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4CF00000 | 1MB | + * +--------+--------------+-------------------------+ + * | caldb | 0x4D000000 | 2MB | + * +--------+--------------+-------------------------+ + * |QCN6122 | 0x4D200000 | 16MB | + * | data | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4E200000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4E300000 | 1MB | + * +--------+--------------+-------------------------+ + * | caldb | 0x4E400000 | 5MB | + * +--------+--------------+-------------------------+ + * | | | | + * |QCN9000 | 0x4E900000 | 30MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | | | + * | MHI1 | 0x50700000 | 16MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +=================================================+ + */ + + q6_mem_regions: q6_mem_regions@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 0x3900000>; + }; + + q6_code_data: q6_code_data@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 01000000>; + }; + + q6_ipq5018_data: q6_ipq5018_data@4C000000 { + no-map; + reg = <0x0 0x4C000000 0x0 0xE00000>; + }; + + m3_dump: m3_dump@4CE00000 { + no-map; + reg = <0x0 0x4CE00000 0x0 0x100000>; + }; + + q6_etr_region: q6_etr_dump@4CF00000 { + no-map; + reg = <0x0 0x4CF00000 0x0 0x100000>; + }; + + q6_caldb_region: q6_caldb_region@4D000000 { + no-map; + reg = <0x0 0x4D000000 0x0 0x200000>; + }; + + q6_qcn6122_data1: q6_qcn6122_data1@4D200000 { + no-map; + reg = <0x0 0x4D200000 0x0 0x1000000>; + }; + + 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_caldb_1: q6_qcn6122_caldb_1@4E400000 { + no-map; + reg = <0x0 0x4E400000 0x0 0x500000>; + }; + + q6_qcn9000_region: qcn9000_pcie0@4E900000 { + no-map; + reg = <0x0 0x4E900000 0x0 0x01E00000>; + }; + + mhi_region1: dma_pool1@50700000 { + compatible = "shared-dma-pool"; + no-map; + reg = <0x0 0x50700000 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 | 16MB | + * | code/ | | | + * | data | | | + * +--------+--------------+-------------------------+ + * | | | | + * |IPQ5018 | 0x4C000000 | 14MB | + * | data | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4CE00000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4CF00000 | 1MB | + * +--------+--------------+-------------------------+ + * | caldb | 0x4D000000 | 2MB | + * +--------+--------------+-------------------------+ + * |QCN6122 | 0x4D200000 | 16MB | + * | data | | | + * +--------+--------------+-------------------------+ + * | M3 Dump| 0x4E200000 | 1MB | + * +--------+--------------+-------------------------+ + * | QDSS | 0x4E300000 | 1MB | + * +--------+--------------+-------------------------+ + * | caldb | 0x4E400000 | 5MB | + * +--------+--------------+-------------------------+ + * | | | | + * |QCN9000 | 0x4E900000 | 45MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | | | + * | MHI1 | 0x51600000 | 24MB | + * | | | | + * +--------+--------------+-------------------------+ + * | | + * | Rest of the memory for Linux | + * | | + * +=================================================+ + */ + + q6_mem_regions: q6_mem_regions@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 0x3900000>; + }; + + q6_code_data: q6_code_data@4B000000 { + no-map; + reg = <0x0 0x4B000000 0x0 01000000>; + }; + + q6_ipq5018_data: q6_ipq5018_data@4C000000 { + no-map; + reg = <0x0 0x4C000000 0x0 0xE00000>; + }; + + m3_dump: m3_dump@4CE00000 { + no-map; + reg = <0x0 0x4CE00000 0x0 0x100000>; + }; + + q6_etr_region: q6_etr_dump@4CF00000 { + no-map; + reg = <0x0 0x4CF00000 0x0 0x100000>; + }; + + q6_caldb_region: q6_caldb_region@4D000000 { + no-map; + reg = <0x0 0x4D000000 0x0 0x200000>; + }; + + q6_qcn6122_data1: q6_qcn6122_data1@4D200000 { + no-map; + reg = <0x0 0x4D200000 0x0 0x1000000>; + }; + + 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_caldb_1: q6_qcn6122_caldb_1@4E400000 { + no-map; + reg = <0x0 0x4E400000 0x0 0x500000>; + }; + + q6_qcn9000_region: qcn9000_pcie0@4E900000 { + no-map; + reg = <0x0 0x4E900000 0x0 0x02D00000>; + }; + + mhi_region1: dma_pool1@51600000 { + compatible = "shared-dma-pool"; + no-map; + reg = <0x0 0x51600000 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 16 0>; + + ethernet-phy@0 { + reg = <0x00>; + }; + + ethernet-phy@1 { + reg = <0x01>; + }; + + ethernet-phy@2 { + reg = <0x02>; + }; + + ethernet-phy@3 { + reg = <0x03>; + }; + + ethernet-phy@4 { + reg = <0x04>; + }; + }; + + 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 { + mdio-bus = <&mdio0>; + port_id = <1>; + phy_dac = <0x10 0x10>; + phy_address = <7>; + }; + port@1 { + mdio-bus = <&mdio0>; + port_id = <2>; + forced-speed = <1000>; + forced-duplex = <1>; + }; + }; + + 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 = <0x27>; + switch_cpu_bmp = <0x40>; /* cpu port bitmap */ + switch_lan_bmp = <0x3e>; /* 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 { + 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"; + };*/ + + dp1 { + 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>; + 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 = "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 { + 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; + }; + }; + leds_pins: leds_pins { + linux,phandle = <0x4d>; + phandle = <0x4d>; + + led_sys { + pins = "gpio24"; + function = "gpio"; + bias-pull-down; + drive-strength = <0x08>; + }; + + led_5g { + pins = "gpio22"; + function = "gpio"; + bias-pull-down; + drive-strength = <0x08>; + }; + + led_2g { + pins = "gpio23"; + function = "gpio"; + bias-pull-down; + drive-strength = <0x08>; + }; + }; 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 = "restart"; + 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_power: led@32 { + label = "green:power"; + gpios = <&tlmm 24 GPIO_ACTIVE_LOW>; + default-state = "on"; + }; + + led@35 { + label = "green:wifi5"; + gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + + led@37 { + label = "green:wifi2"; + gpios = <&tlmm 23 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + }; + + + +}; + +&usb3 { + status = "ok"; + device-power-gpio = <&tlmm 24 1>; +}; + +&eud { + status = "ok"; +}; + +&pcie_x1 { + status = "disabled"; + 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 = "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 = <0x21>; + #address-cells = <0x2>; + #size-cells = <0x2>; + memory-region = <&mhi_region1>; +#if !defined(__CNSS2__) + base-addr = <0x4E900000>; + m3-dump-addr = <0x4FD00000>; + etr-addr = <0x4FE00000>; + qcom,caldb-addr = <0x4FF00000>; + qcom,tgt-mem-mode = <0x1>; + mhi,max-channels = <30>; + mhi,timeout = <10000>; + qcom,board_id = <0xa4>; +#endif + }; +}; + +&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 = <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 5G */ + 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 + }; +}; + +&i2c_0 { + pinctrl-0 = <&i2c_pins>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&qgic_msi_0 { + status = "ok"; +}; + +&wifi0 { + /* IPQ5018 */ + qcom,multipd_arch; +#ifdef __IPQ_MEM_PROFILE_256_MB__ + qcom,tgt-mem-mode = <2>; +#else + qcom,tgt-mem-mode = <1>; +#endif + qcom,board_id = <0x23>; + qcom,bdf-addr = <0x0 0x4C000000 0x4C000000 0x0 0x0>; +#ifdef __CNSS2__ + qcom,caldb-addr = <0x0 0x4D000000 0 0 0>; +#else + qcom,caldb-addr = <0x4D000000>; + m3-dump-addr = <0x4CE00000>; +#endif + qcom,caldb-size = <0x200000>; + qcom,userpd-subsys-name = "q6v5_wcss_userpd1"; + status = "ok"; +}; + +&wifi1 { + /* QCN6122 5G */ + qcom,multipd_arch; +#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 = <0x0 0x4D200000 0x4CF00000 0x0 0x0>; +#ifdef __CNSS2__ + qcom,caldb-addr = <0x0 0x4E400000 0 0 0>; +#else + qcom,caldb-addr = <0x4E400000>; + m3-dump-addr = <0x4E200000>; +#endif + qcom,caldb-size = <0x500000>; + qcom,userpd-subsys-name = "q6v5_wcss_userpd2"; + status = "ok"; +}; + +&wifi3 { + /* QCN9000 6G */ + compatible = "qcom,cnss-qcn9000"; + board_id = <0xa4>; + status = "disabled"; + qrtr_node_id = <0x21>; +#ifdef __IPQ_MEM_PROFILE_256_MB__ + /* QCN9000 tgt-mem-mode=2 layout - 17MB + * +=========+==============+=========+ + * | Region | Start Offset | Size | + * +---------+--------------+---------+ + * | HREMOTE | 0x4E000000 | 15MB | + * +---------+--------------+---------+ + * | M3 Dump | 0x4EF00000 | 1MB | + * +---------+--------------+---------+ + * | ETR | 0x4F000000 | 1MB | + * +==================================+ + */ + base-addr = <0x4E000000>; + m3-dump-addr = <0x4EF00000>; + etr-addr = <0x4F000000>; + caldb-addr = <0>; + caldb-size = <0>; + hremote-size = <0xF00000>; + tgt-mem-mode = <0x2>; +#elif __IPQ_MEM_PROFILE_512_MB__ + /* QCN9000 tgt-mem-mode=1 layout - 30MB + * +=========+==============+=========+ + * | Region | Start Offset | Size | + * +---------+--------------+---------+ + * | HREMOTE | 0x4E900000 | 20MB | + * +---------+--------------+---------+ + * | M3 Dump | 0x4FD00000 | 1MB | + * +---------+--------------+---------+ + * | ETR | 0x4FE00000 | 1MB | + * +---------+--------------+---------+ + * | Caldb | 0x4FF00000 | 8MB | + * +==================================+ + */ + base-addr = <0x4E900000>; + m3-dump-addr = <0x4FD00000>; + etr-addr = <0x4FE00000>; + caldb-addr = <0x4FF00000>; + caldb-size = <0x800000>; + hremote-size = <0x1400000>; + tgt-mem-mode = <0x1>; +#else + /* QCN9000 tgt-mem-mode=0 layout - 45MB + * +=========+==============+=========+ + * | Region | Start Offset | Size | + * +---------+--------------+---------+ + * | HREMOTE | 0x4E900000 | 35MB | + * +---------+--------------+---------+ + * | M3 Dump | 0x50C00000 | 1MB | + * +---------+--------------+---------+ + * | ETR | 0x50D00000 | 1MB | + * +---------+--------------+---------+ + * | Caldb | 0x50E00000 | 8MB | + * +==================================+ + */ + base-addr = <0x4E900000>; + m3-dump-addr = <0x50C00000>; + etr-addr = <0x50D00000>; + caldb-addr = <0x50E00000>; + hremote-size = <0x2300000>; + caldb-size = <0x800000>; + tgt-mem-mode = <0x0>; +#endif +}; diff --git a/feeds/ipq807x/ipq807x/image/ipq50xx.mk b/feeds/ipq807x/ipq807x/image/ipq50xx.mk index 505d57b9a..d245913c4 100644 --- a/feeds/ipq807x/ipq807x/image/ipq50xx.mk +++ b/feeds/ipq807x/ipq807x/image/ipq50xx.mk @@ -91,3 +91,12 @@ define Device/qcom_mp03_3 DEVICE_DTS_CONFIG := config@mp03.3 endef TARGET_DEVICES += qcom_mp03_3 + +define Device/yuncore_fap655 + DEVICE_TITLE := Yuncore FAP650 + DEVICE_DTS := qcom-ipq5018-yuncore-fap655 + SUPPORTED_DEVICES := yuncore,fap655 + DEVICE_PACKAGES := ath11k-wifi-yuncore-fap655 ath11k-firmware-ipq50xx-map-spruce -kmod-usb-dwc3-of-simple kmod-usb-dwc3-qcom kmod-usb3 + DEVICE_DTS_CONFIG := config@mp03.3 +endef +TARGET_DEVICES += yuncore_fap655 diff --git a/feeds/ipq807x/ipq807x/patches/120-dwc3-gpio-opps.patch b/feeds/ipq807x/ipq807x/patches/120-dwc3-gpio-opps.patch new file mode 100644 index 000000000..5df4bf7d1 --- /dev/null +++ b/feeds/ipq807x/ipq807x/patches/120-dwc3-gpio-opps.patch @@ -0,0 +1,13 @@ +Index: linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016/drivers/usb/dwc3/dwc3-qcom.c +=================================================================== +--- linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016.orig/drivers/usb/dwc3/dwc3-qcom.c ++++ linux-4.4.60-qsdk-11f09717303ecd83c3a64e9efe23f25921dc1016/drivers/usb/dwc3/dwc3-qcom.c +@@ -669,7 +669,7 @@ static int dwc3_qcom_probe(struct platfo + /* enable vbus override for device mode */ + if (qcom->mode == USB_DR_MODE_PERIPHERAL) + dwc3_qcom_vbus_overrride_enable(qcom, true); +- else if (qcom->device_power_gpio) ++ else if (!IS_ERR(qcom->device_power_gpio)) + gpiod_set_value(qcom->device_power_gpio, 0); + + #if defined(CONFIG_IPQ_DWC3_QTI_EXTCON) diff --git a/feeds/wifi-ax/ath11k-wifi/Makefile b/feeds/wifi-ax/ath11k-wifi/Makefile index 07ab7f4e2..522fab159 100644 --- a/feeds/wifi-ax/ath11k-wifi/Makefile +++ b/feeds/wifi-ax/ath11k-wifi/Makefile @@ -53,6 +53,7 @@ ALLWIFIBOARDS:= \ tplink-ex447 \ yuncore-ax840 \ yuncore-fap650 \ + yuncore-fap655 \ meshpp-s618 ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ath11k-wifi-$(BOARD)) @@ -289,6 +290,7 @@ $(eval $(call generate-ath11k-wifi-package,yuncore-ax840,YunCore AX840)) $(eval $(call generate-ath11k-wifi-package,meshpp-s618,Mesh++ S618)) $(eval $(call generate-ath11k-wifi-package,muxi-ap3220l,MUXI AP3220L)) $(eval $(call generate-ath11k-wifi-package,yuncore-fap650,YunCore FAP650)) +$(eval $(call generate-ath11k-wifi-package,yuncore-fap655,YunCore FAP655)) $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq5018)) diff --git a/feeds/wifi-ax/ath11k-wifi/board-yuncore-fap655.bin.IPQ5018 b/feeds/wifi-ax/ath11k-wifi/board-yuncore-fap655.bin.IPQ5018 new file mode 100755 index 0000000000000000000000000000000000000000..a34ce419294b79d0e65f635567307b8064e1c853 GIT binary patch literal 131072 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 literal 0 HcmV?d00001 diff --git a/feeds/wifi-ax/ath11k-wifi/board-yuncore-fap655.bin.QCN6122 b/feeds/wifi-ax/ath11k-wifi/board-yuncore-fap655.bin.QCN6122 new file mode 100644 index 0000000000000000000000000000000000000000..4dbf2f56cb678a4404663fca020dba525ae12706 GIT binary patch literal 131072 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