From 956a31db8fdbf5407071b0ca0a348236cd24b5ca Mon Sep 17 00:00:00 2001 From: Simon Kinane Date: Wed, 14 Sep 2022 16:00:57 +0100 Subject: [PATCH 01/12] uspot: Improve HTML for captive portal UI Signed-off-by: Simon Kinane --- .../uspot/files/usr/share/uspot/credentials.uc | 14 +++++++++----- .../ucentral/uspot/files/usr/share/uspot/error.uc | 3 ++- .../ucentral/uspot/files/usr/share/uspot/radius.uc | 14 +++++++++----- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/feeds/ucentral/uspot/files/usr/share/uspot/credentials.uc b/feeds/ucentral/uspot/files/usr/share/uspot/credentials.uc index a193e77f4..147a0da6b 100644 --- a/feeds/ucentral/uspot/files/usr/share/uspot/credentials.uc +++ b/feeds/ucentral/uspot/files/usr/share/uspot/credentials.uc @@ -3,14 +3,18 @@ Content-Type: text/html {{ header }} {% if (error): %} -

Invalid credentials

+

Invalid credentials

{% endif %}
- -
- - + + + + + + + +
diff --git a/feeds/ucentral/uspot/files/usr/share/uspot/error.uc b/feeds/ucentral/uspot/files/usr/share/uspot/error.uc index f4107f4d1..3ef3f4ecb 100644 --- a/feeds/ucentral/uspot/files/usr/share/uspot/error.uc +++ b/feeds/ucentral/uspot/files/usr/share/uspot/error.uc @@ -3,6 +3,7 @@ Content-Type: text/html {{ header }} -

An Error occured, please try again

+

An Error occured

+

Please try again

{{ footer }} diff --git a/feeds/ucentral/uspot/files/usr/share/uspot/radius.uc b/feeds/ucentral/uspot/files/usr/share/uspot/radius.uc index 997eb1497..6b67ce7e7 100644 --- a/feeds/ucentral/uspot/files/usr/share/uspot/radius.uc +++ b/feeds/ucentral/uspot/files/usr/share/uspot/radius.uc @@ -3,14 +3,18 @@ Content-Type: text/html {{ header }} {% if (error): %} -

Invalid credentials

+

Invalid credentials

{% endif %}
- -
- - + + + + + + + +
From b8f5e17e386d408a5fe98ca9567934bb3854dfe3 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Mon, 19 Sep 2022 09:17:54 +0200 Subject: [PATCH 02/12] uspot: fix a typo causing config to not load correctly Signed-off-by: John Crispin --- feeds/ucentral/uspot/files/usr/share/uspot/handler.uc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feeds/ucentral/uspot/files/usr/share/uspot/handler.uc b/feeds/ucentral/uspot/files/usr/share/uspot/handler.uc index 6b09ed312..5a7d444e5 100644 --- a/feeds/ucentral/uspot/files/usr/share/uspot/handler.uc +++ b/feeds/ucentral/uspot/files/usr/share/uspot/handler.uc @@ -55,7 +55,7 @@ function request_click(ctx) { // delegate a local username/password authentication function request_credentials(ctx) { // make sure this is the right auth_mode - if (portal/config?.config?.auth_mode != 'credentials') { + if (portal.config?.config?.auth_mode != 'credentials') { include('error.uc', ctx); return; } From e74e22e1847340fed681ac4e2ded8dbe8ed0bcb9 Mon Sep 17 00:00:00 2001 From: Jaspreet Sachdev Date: Mon, 19 Sep 2022 20:52:56 -0400 Subject: [PATCH 03/12] .github/workflows: Removed deprecated targets Signed-off-by: Jaspreet Sachdev --- .github/workflows/build-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml index a1ee12628..744784040 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_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf196', 'cig_wf610d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', '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', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'meshpp_s618_cp03', 'meshpp_s618_cp01', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'x64_vm' ] + target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf196', 'cig_wf610d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', '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', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'meshpp_s618_cp03', 'meshpp_s618_cp01', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'x64_vm' ] steps: - uses: actions/checkout@v2 From bf6abd80dd320f73d040f1f33d17e7a805911949 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Wed, 21 Sep 2022 09:45:05 +0200 Subject: [PATCH 04/12] mac80211: fix multiple bssid mac addresses Fixes: WIFI-10596 Signed-off-by: John Crispin --- feeds/wifi-ax/mac80211/files/lib/netifd/wireless/mac80211.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feeds/wifi-ax/mac80211/files/lib/netifd/wireless/mac80211.sh b/feeds/wifi-ax/mac80211/files/lib/netifd/wireless/mac80211.sh index 8660376c2..984b2a271 100644 --- a/feeds/wifi-ax/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/feeds/wifi-ax/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -533,7 +533,7 @@ mac80211_generate_mac() { local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)" local mask="$(cat /sys/class/ieee80211/${phy}/address_mask)" - [ "$mask" = "00:00:00:00:00:00" ] && { + [ "$mask" = "00:00:00:00:00:00" -a "$multiple_bssid" -neq 1 ] && { mask="ff:ff:ff:ff:ff:ff"; [ "$(wc -l < /sys/class/ieee80211/${phy}/addresses)" -gt $id ] && { From daaed910daa2c456696630ebe0f117f0bba52be0 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 21 Sep 2022 16:50:10 +0200 Subject: [PATCH 05/12] wifi-ax: backport mac80211 WME classification fix Signed-off-by: Felix Fietkau --- ...eck-for-DONT_REORDER-in-__ieee80211_.patch | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 feeds/wifi-ax/mac80211/patches/pending/100-mac80211-drop-check-for-DONT_REORDER-in-__ieee80211_.patch diff --git a/feeds/wifi-ax/mac80211/patches/pending/100-mac80211-drop-check-for-DONT_REORDER-in-__ieee80211_.patch b/feeds/wifi-ax/mac80211/patches/pending/100-mac80211-drop-check-for-DONT_REORDER-in-__ieee80211_.patch new file mode 100644 index 000000000..d9d89e864 --- /dev/null +++ b/feeds/wifi-ax/mac80211/patches/pending/100-mac80211-drop-check-for-DONT_REORDER-in-__ieee80211_.patch @@ -0,0 +1,39 @@ +From: Felix Fietkau +Date: Wed, 10 Nov 2021 22:22:01 +0100 +Subject: [PATCH] mac80211: drop check for DONT_REORDER in + __ieee80211_select_queue + +When __ieee80211_select_queue is called, skb->cb has not been cleared yet, +which means that info->control.flags can contain garbage. +In some cases this leads to IEEE80211_TX_CTRL_DONT_REORDER being set, causing +packets marked for other queues to randomly end up in BE instead. + +This flag only needs to be checked in ieee80211_select_queue_80211, since +the radiotap parser is the only piece of code that sets it + +Fixes: 66d06c84730c ("mac80211: adhere to Tx control flag that prevents frame reordering") +Cc: stable@vger.kernel.org +Signed-off-by: Felix Fietkau +Link: https://lore.kernel.org/r/20211110212201.35452-1-nbd@nbd.name +Signed-off-by: Johannes Berg +--- + +--- a/net/mac80211/wme.c ++++ b/net/mac80211/wme.c +@@ -143,7 +143,6 @@ u16 ieee80211_select_queue_80211(struct + u16 __ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, + struct sta_info *sta, struct sk_buff *skb) + { +- struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); + struct mac80211_qos_map *qos_map; + bool qos; + +@@ -156,7 +155,7 @@ u16 __ieee80211_select_queue(struct ieee + else + qos = false; + +- if (!qos || (info->control.flags & IEEE80211_TX_CTRL_DONT_REORDER)) { ++ if (!qos) { + skb->priority = 0; /* required for correct WPA/11i MIC */ + return IEEE80211_AC_BE; + } From 39053d366dfb1ff0f7da3bb6b83c3681d38c8b84 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 21 Sep 2022 19:43:17 +0200 Subject: [PATCH 06/12] qosify: update to the latest version fixes classification on linux 4.4 Signed-off-by: Felix Fietkau --- feeds/ucentral/qosify/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feeds/ucentral/qosify/Makefile b/feeds/ucentral/qosify/Makefile index be0bc6657..96bb28f1c 100644 --- a/feeds/ucentral/qosify/Makefile +++ b/feeds/ucentral/qosify/Makefile @@ -11,9 +11,9 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=qosify PKG_SOURCE_URL=$(PROJECT_GIT)/project/qosify.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2022-04-08 -PKG_SOURCE_VERSION:=ef82defaae26619e5b2ebddfdd86e9de61c399f1 -PKG_MIRROR_HASH:=8e4ca65d23a85aad774af51dc62cfaa4615111ffd2c7922258ac8f026a62b013 +PKG_SOURCE_DATE:=2022-09-21 +PKG_SOURCE_VERSION:=ca4509cf84d285d4d097e1ba8b0146faaeca05f4 +PKG_MIRROR_HASH:=fc9f8dba77f4b7cb69fa5b9f1c521b5792b381f3e14374a16afeffed418ae6e4 PKG_RELEASE:=$(AUTORELEASE) PKG_LICENSE:=GPL-2.0 From 86948e1052016aa5d206e762074963d26b8ba126 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Thu, 22 Sep 2022 15:11:45 +0200 Subject: [PATCH 07/12] ucentral-schema: update to latest HEAD 55b8272 add support for overriding country codes Signed-off-by: John Crispin --- feeds/ucentral/ucentral-schema/Makefile | 4 +-- .../files/etc/board.d/04-regdm | 22 ++++++++++++++ ...se-files-add-ucidef_set_wifi_country.patch | 30 +++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100755 feeds/ucentral/ucentral-schema/files/etc/board.d/04-regdm create mode 100644 patches/base/0056-base-files-add-ucidef_set_wifi_country.patch diff --git a/feeds/ucentral/ucentral-schema/Makefile b/feeds/ucentral/ucentral-schema/Makefile index 5212d40b2..997f66d72 100644 --- a/feeds/ucentral/ucentral-schema/Makefile +++ b/feeds/ucentral/ucentral-schema/Makefile @@ -4,10 +4,10 @@ PKG_NAME:=ucentral-schema PKG_RELEASE:=1 PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git -PKG_MIRROR_HASH:=16cac9b483aa0ab14b2f1d5ab450307b8357baf351c18695046078c9f52661bf +PKG_MIRROR_HASH:=7f11e36e1cb10104bcde0ba0e288f2487fb894a6471605d4dee1460b5be379e0 PKG_SOURCE_PROTO:=git PKG_SOURCE_DATE:=2022-05-29 -PKG_SOURCE_VERSION:=b27df6432c75b05f1721a8afde36f3181362e55b +PKG_SOURCE_VERSION:=55b8272c9cc4500f813f5f1cccdcbb14725b595b PKG_MAINTAINER:=John Crispin PKG_LICENSE:=BSD-3-Clause diff --git a/feeds/ucentral/ucentral-schema/files/etc/board.d/04-regdm b/feeds/ucentral/ucentral-schema/files/etc/board.d/04-regdm new file mode 100755 index 000000000..e5bf5e45c --- /dev/null +++ b/feeds/ucentral/ucentral-schema/files/etc/board.d/04-regdm @@ -0,0 +1,22 @@ +#!/bin/sh + +. /lib/functions/uci-defaults.sh + +board_config_update + +board=$(board_name) + +case "$board" in +cig,wf188n|\ +cig,wf194c4|\ +cig,wf194c|\ +cig,wf610d|\ +cig,wf808|\ +cig,wf196) + ucidef_set_wifi_country 'US' + ;; +esac + +board_config_flush + +exit 0 diff --git a/patches/base/0056-base-files-add-ucidef_set_wifi_country.patch b/patches/base/0056-base-files-add-ucidef_set_wifi_country.patch new file mode 100644 index 000000000..5e3de1aaa --- /dev/null +++ b/patches/base/0056-base-files-add-ucidef_set_wifi_country.patch @@ -0,0 +1,30 @@ +From aa0404504cff8bcdac40d8e9b3ec708d2079d705 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Thu, 22 Sep 2022 15:12:20 +0200 +Subject: [PATCH] base-files: add ucidef_set_wifi_country + +Signed-off-by: John Crispin +--- + package/base-files/files/lib/functions/uci-defaults.sh | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh +index ff3433a0a2..3bc8e6bb1c 100644 +--- a/package/base-files/files/lib/functions/uci-defaults.sh ++++ b/package/base-files/files/lib/functions/uci-defaults.sh +@@ -627,6 +627,12 @@ ucidef_set_wifi_scanning() { + json_select .. + } + ++ucidef_set_wifi_country() { ++ json_select_object wifi ++ json_add_string country $1 ++ json_select .. ++} ++ + ucidef_set_ntpserver() { + local server + +-- +2.25.1 + From 854c8a44d4112e93655af5de8ab88b63e75b27fd Mon Sep 17 00:00:00 2001 From: John Crispin Date: Fri, 23 Sep 2022 10:12:48 +0200 Subject: [PATCH 08/12] ucentral-client: update to latest HEAD update wifi-scan timeout to 120s Signed-off-by: John Crispin --- feeds/ucentral/ucentral-client/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feeds/ucentral/ucentral-client/Makefile b/feeds/ucentral/ucentral-client/Makefile index eaa27354d..6d1a3932f 100644 --- a/feeds/ucentral/ucentral-client/Makefile +++ b/feeds/ucentral/ucentral-client/Makefile @@ -4,10 +4,10 @@ PKG_NAME:=ucentral-client PKG_RELEASE:=1 PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git -PKG_MIRROR_HASH:=cc453333a37f79a42d036187f8c23dc977ff2467dd7b7ae24d025b560076288c +PKG_MIRROR_HASH:=c2f41ed2506e3cc1a31c9180d567e68a39c30cae0c4421ca1dc8b58e82ab3ed1 PKG_SOURCE_PROTO:=git PKG_SOURCE_DATE:=2022-06-22 -PKG_SOURCE_VERSION:=90d276feb03bcda38c48f114021b78e7d62b7a6f +PKG_SOURCE_VERSION:=154e31dfffba8733895ed2cf87433809b0d19b03 PKG_LICENSE:=BSD-3-Clause PKG_MAINTAINER:=John Crispin From 47468145c62a28f6cebd683ecf99c7ca9c0a4bcc Mon Sep 17 00:00:00 2001 From: John Crispin Date: Fri, 23 Sep 2022 10:35:52 +0200 Subject: [PATCH 09/12] spotfilter: add a maissing v5.4 kernel backport fixes an off-by-one bug in the validator Signed-off-by: John Crispin --- ...ackport-5.4-add-a-BPF-off-by-one-fix.patch | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 patches/backports/0037-backport-5.4-add-a-BPF-off-by-one-fix.patch diff --git a/patches/backports/0037-backport-5.4-add-a-BPF-off-by-one-fix.patch b/patches/backports/0037-backport-5.4-add-a-BPF-off-by-one-fix.patch new file mode 100644 index 000000000..9875010ed --- /dev/null +++ b/patches/backports/0037-backport-5.4-add-a-BPF-off-by-one-fix.patch @@ -0,0 +1,33 @@ +From 1ac3763815e804eacc0977afb420f015a78f8d72 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Fri, 23 Sep 2022 08:48:38 +0200 +Subject: [PATCH] backport-5.4: add a BPF off-by-one fix + +Signed-off-by: John Crispin +--- + .../backport-5.4/999-bpf-off-by-one-backport.patch | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + create mode 100644 target/linux/generic/backport-5.4/999-bpf-off-by-one-backport.patch + +diff --git a/target/linux/generic/backport-5.4/999-bpf-off-by-one-backport.patch b/target/linux/generic/backport-5.4/999-bpf-off-by-one-backport.patch +new file mode 100644 +index 0000000000..271eac67da +--- /dev/null ++++ b/target/linux/generic/backport-5.4/999-bpf-off-by-one-backport.patch +@@ -0,0 +1,13 @@ ++Index: linux-5.4.158/kernel/bpf/verifier.c ++=================================================================== ++--- linux-5.4.158.orig/kernel/bpf/verifier.c +++++ linux-5.4.158/kernel/bpf/verifier.c ++@@ -5372,7 +5372,7 @@ static void find_good_pkt_pointers(struc ++ ++ new_range = dst_reg->off; ++ if (range_right_open) ++- new_range--; +++ new_range++; ++ ++ /* Examples for register markings: ++ * +-- +2.25.1 + From fb617ea1360b34d1c05a33bf8d77ee3adfb0927f Mon Sep 17 00:00:00 2001 From: Arif Alam Date: Fri, 5 Aug 2022 11:27:08 -0400 Subject: [PATCH 10/12] ipq807x: Fix EAP104 upgrade Signed-off-by: Arif Alam --- feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh index 993474981..2ab5c4ad7 100755 --- a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh +++ b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh @@ -118,7 +118,6 @@ platform_do_upgrade() { cig,wf194c4|\ cig,wf196|\ cybertan,eww622-a1|\ - edgecore,eap104|\ glinet,ax1800|\ glinet,axt1800|\ qcom,ipq6018-cp01|\ @@ -145,6 +144,7 @@ platform_do_upgrade() { fi nand_upgrade_tar "$1" ;; + edgecore,eap104|\ edgecore,eap106) CI_UBIPART="rootfs1" [ "$(find_mtd_chardev rootfs)" ] && CI_UBIPART="rootfs" From 84d31765db3a6ec50578e0a1be768ef2483092b8 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 26 Sep 2022 14:44:41 +0200 Subject: [PATCH 11/12] qosify: update to the latest version Signed-off-by: Felix Fietkau --- feeds/ucentral/qosify/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feeds/ucentral/qosify/Makefile b/feeds/ucentral/qosify/Makefile index 96bb28f1c..eebec2830 100644 --- a/feeds/ucentral/qosify/Makefile +++ b/feeds/ucentral/qosify/Makefile @@ -11,9 +11,9 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=qosify PKG_SOURCE_URL=$(PROJECT_GIT)/project/qosify.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2022-09-21 -PKG_SOURCE_VERSION:=ca4509cf84d285d4d097e1ba8b0146faaeca05f4 -PKG_MIRROR_HASH:=fc9f8dba77f4b7cb69fa5b9f1c521b5792b381f3e14374a16afeffed418ae6e4 +PKG_SOURCE_DATE:=2022-09-26 +PKG_SOURCE_VERSION:=9c625ae96f2d204f7417d6c9b7092b9e4ac653a8 +PKG_MIRROR_HASH:=f7cd52b6749d0dc81d6d710ee5f85597a3ff084a78e2622336c16dc138fdc854 PKG_RELEASE:=$(AUTORELEASE) PKG_LICENSE:=GPL-2.0 From c56b7adea8b9ffce20b7a17a44584e54d3abb2e5 Mon Sep 17 00:00:00 2001 From: Sohail Ahmad Date: Wed, 7 Sep 2022 12:28:15 +0000 Subject: [PATCH 12/12] ipq807x: Support for Indio WiFi6 AP -indoor and outdoor models based on IPQ6000 Fixes: WIFI-10802 Signed-off-by: Sohail Ahmad --- .../ipq807x/base-files/etc/board.d/02_network | 6 + .../etc/hotplug.d/firmware/10-ath11k-caldata | 6 + .../base-files/lib/upgrade/platform.sh | 6 + .../dts/qcom-ipq6018-indio-um-310ax-v1.dts | 18 + .../dts/qcom-ipq6018-indio-um-510axm-v1.dts | 18 + .../dts/qcom-ipq6018-indio-um-510axp-v1.dts | 18 + .../qcom/qcom-ipq6018-indio-um-310ax-v1.dts | 379 ++++++++++++++++++ .../qcom/qcom-ipq6018-indio-um-510axm-v1.dts | 379 ++++++++++++++++++ .../qcom/qcom-ipq6018-indio-um-510axp-v1.dts | 379 ++++++++++++++++++ feeds/ipq807x/ipq807x/image/ipq60xx.mk | 27 ++ feeds/wifi-ax/ath11k-wifi/Makefile | 6 + .../board-indio-um-310ax-v1.bin.IPQ6018 | Bin 0 -> 65536 bytes .../board-indio-um-510axm-v1.bin.IPQ6018 | Bin 0 -> 65536 bytes .../board-indio-um-510axp-v1.bin.IPQ6018 | Bin 0 -> 65536 bytes profiles/indio_um-310ax-v1.yml | 12 + profiles/indio_um-510axm-v1.yml | 12 + profiles/indio_um-510axp-v1.yml | 12 + 17 files changed, 1278 insertions(+) create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-310ax-v1.dts create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axm-v1.dts create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axp-v1.dts create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-310ax-v1.dts create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axm-v1.dts create mode 100644 feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axp-v1.dts create mode 100644 feeds/wifi-ax/ath11k-wifi/board-indio-um-310ax-v1.bin.IPQ6018 create mode 100644 feeds/wifi-ax/ath11k-wifi/board-indio-um-510axm-v1.bin.IPQ6018 create mode 100644 feeds/wifi-ax/ath11k-wifi/board-indio-um-510axp-v1.bin.IPQ6018 create mode 100644 profiles/indio_um-310ax-v1.yml create mode 100644 profiles/indio_um-510axm-v1.yml create mode 100644 profiles/indio_um-510axp-v1.yml 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 14c932a04..61b3d77b6 100755 --- a/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network +++ b/feeds/ipq807x/ipq807x/base-files/etc/board.d/02_network @@ -31,6 +31,9 @@ qcom_setup_interfaces() cig,wf194c|\ cig,wf194c4|\ edgecore,eap106|\ + indio,um-310ax-v1|\ + indio,um-510axp-v1|\ + indio,um-510axm-v1|\ qcom,ipq5018-mp03.3|\ yuncore,ax840|\ motorola,q14|\ @@ -99,6 +102,9 @@ qcom_setup_macs() ucidef_set_network_device_mac eth1 $lan_mac ucidef_set_label_macaddr $wan_mac ;; + indio,um-310ax-v1|\ + indio,um-510axp-v1|\ + indio,um-510axm-v1|\ yuncore,ax840) wan_mac=$(cat /sys/class/net/eth1/address) 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 d61be8bcb..a39bf0cbd 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 @@ -86,6 +86,9 @@ case "$FIRMWARE" in cig,wf196|\ edgecore,eap102 |\ edgecore,eap106 |\ + indio,um-310ax-v1|\ + indio,um-510axp-v1|\ + indio,um-510axm-v1|\ qcom,ipq807x-hk01|\ qcom,ipq807x-hk14|\ tplink,ex227|\ @@ -173,6 +176,9 @@ ath11k-macs) yuncore,ax840|\ edgecore,eap102|\ edgecore,eap106|\ + indio,um-310ax-v1|\ + indio,um-510axp-v1|\ + indio,um-510axm-v1|\ cig,wf188n) ath11k_generate_macs ;; diff --git a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh index 2ab5c4ad7..22531c43b 100755 --- a/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh +++ b/feeds/ipq807x/ipq807x/base-files/lib/upgrade/platform.sh @@ -76,6 +76,9 @@ platform_check_image() { cybertan,eww622-a1|\ glinet,ax1800|\ glinet,axt1800|\ + indio,um-310ax-v1|\ + indio,um-510axp-v1|\ + indio,um-510axm-v1|\ wallys,dr6018|\ wallys,dr6018-v4|\ edgecore,eap101|\ @@ -120,6 +123,9 @@ platform_do_upgrade() { cybertan,eww622-a1|\ glinet,ax1800|\ glinet,axt1800|\ + indio,um-310ax-v1|\ + indio,um-510axp-v1|\ + indio,um-510axm-v1|\ qcom,ipq6018-cp01|\ qcom,ipq807x-hk01|\ qcom,ipq807x-hk14|\ diff --git a/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-310ax-v1.dts b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-310ax-v1.dts new file mode 100644 index 000000000..991f45c0f --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-310ax-v1.dts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2019, 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-ipq6018-indio-um-310ax-v1.dts" +#include "qcom-ipq6018.dtsi" diff --git a/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axm-v1.dts b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axm-v1.dts new file mode 100644 index 000000000..1305e0442 --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axm-v1.dts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2019, 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-ipq6018-indio-um-510axm-v1.dts" +#include "qcom-ipq6018.dtsi" diff --git a/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axp-v1.dts b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axp-v1.dts new file mode 100644 index 000000000..6e6a1397e --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm/boot/dts/qcom-ipq6018-indio-um-510axp-v1.dts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2019, 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-ipq6018-indio-um-510axp-v1.dts" +#include "qcom-ipq6018.dtsi" diff --git a/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-310ax-v1.dts b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-310ax-v1.dts new file mode 100644 index 000000000..6fbd596b4 --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-310ax-v1.dts @@ -0,0 +1,379 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "qcom-ipq6018.dtsi" +#include "qcom-ipq6018-rpm-regulator.dtsi" +#include "qcom-ipq6018-cpr-regulator.dtsi" +#include "qcom-ipq6018-cp-cpu.dtsi" +#include +#include + +/ { + model = "Indio UM-310AX V1"; + compatible = "indio,um-310ax-v1", "qcom,ipq6018-cp03", "qcom,ipq6018"; + + #address-cells = <0x2>; + #size-cells = <0x2>; + interrupt-parent = <&intc>; + + aliases { + /* Aliases as required by u-boot to patch MAC addresses */ + ethernet0 = "/soc/dp2"; + ethernet1 = "/soc/dp1"; + + serial0 = &blsp1_uart3; + serial1 = &blsp1_uart2; + + led-boot = &led_system; + led-failsafe = &led_system; + led-running = &led_system; + led-upgrade = &led_system; + }; + + chosen { + bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; + bootargs-append = " swiotlb=1 coherent_pool=2M"; + }; + +/* TZAPP is enabled only in default memory profile */ +#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) + reserved-memory { + tzapp:tzapp@49B00000 { /* TZAPPS */ + no-map; + reg = <0x0 0x49B00000 0x0 0x00600000>; + }; + }; +#endif +}; + +&tlmm { + uart_pins: uart_pins { + mux { + pins = "gpio44", "gpio45"; + function = "blsp2_uart"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + spi_0_pins: spi_0_pins { + mux { + pins = "gpio38", "gpio39", "gpio40", "gpio41"; + function = "blsp0_spi"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + qpic_pins: qpic_pins { + data_0 { + pins = "gpio15"; + function = "qpic_pad0"; + drive-strength = <8>; + bias-pull-down; + }; + + data_1 { + pins = "gpio12"; + function = "qpic_pad1"; + drive-strength = <8>; + bias-pull-down; + }; + + data_2 { + pins = "gpio13"; + function = "qpic_pad2"; + drive-strength = <8>; + bias-pull-down; + }; + + data_3 { + pins = "gpio14"; + function = "qpic_pad3"; + drive-strength = <8>; + bias-pull-down; + }; + + data_4 { + pins = "gpio5"; + function = "qpic_pad4"; + drive-strength = <8>; + bias-pull-down; + }; + + data_5 { + pins = "gpio6"; + function = "qpic_pad5"; + drive-strength = <8>; + bias-pull-down; + }; + + data_6 { + pins = "gpio7"; + function = "qpic_pad6"; + drive-strength = <8>; + bias-pull-down; + }; + + data_7 { + pins = "gpio8"; + function = "qpic_pad7"; + drive-strength = <8>; + bias-pull-down; + }; + + qpic_pad { + pins = "gpio1", "gpio3", "gpio4", + "gpio10", "gpio11", "gpio17"; + function = "qpic_pad"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + button_pins: button_pins { + rst_button { + pins = "gpio19"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + mdio_pins: mdio_pinmux { + mux_0 { + pins = "gpio64"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mux_1 { + pins = "gpio65"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + + mux_2 { + pins = "gpio75"; + function = "gpio"; + bias-pull-up; + }; + }; + + modem_power_pins { + mux { + pins = "gpio27"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + output-high; + }; + }; + + leds_pins: leds_pins { + led_blue { + pins = "gpio35"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + + led_green { + pins = "gpio37"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + + led_red { + pins = "gpio32"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + }; +}; + +&soc { + mdio: mdio@90000 { + status = "ok"; + + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + phy-reset-gpio = <&tlmm 75 0>; + + ethernet-phy@0 { + reg = <0x03>; + }; + + ethernet-phy@1 { + reg = <0x04>; + }; + }; + + ess-switch@3a000000 { + switch_cpu_bmp = <0x01>; /* cpu port bitmap */ + switch_lan_bmp = <0x10>; /* lan port bitmap */ + switch_wan_bmp = <0x20>; /* wan port bitmap */ + switch_inner_bmp = <0x80>; /*inner port bitmap*/ + switch_mac_mode = <0x00>; /* mac mode for uniphy instance0*/ + switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ + switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ + + qcom,port_phyinfo { + port@3 { + port_id = <0x04>; + phy_address = <0x03>; + }; + + port@4 { + port_id = <0x05>; + phy_address = <0x04>; + }; + }; + }; + + dp1 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <0x04>; + reg = <0x3a001600 0x200>; + qcom,mactype = <0x00>; + local-mac-address = [00 00 00 00 00 00]; + qcom,link-poll = <0x01>; + qcom,phy-mdio-addr = <0x03>; + phy-mode = "sgmii"; + }; + + dp2 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <0x05>; + reg = <0x3a001800 0x200>; + qcom,mactype = <0x00>; + local-mac-address = [00 00 00 00 00 00]; + qcom,link-poll = <0x01>; + qcom,phy-mdio-addr = <0x04>; + phy-mode = "sgmii"; + }; + + gpio_keys { + compatible = "gpio-keys"; + + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&tlmm 19 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led_system: system { + label = "green:system"; + gpio = <&tlmm 37 GPIO_ACTIVE_HIGH>; + }; + + wlan2g { + label = "blue:wlan2g"; + gpio = <&tlmm 35 GPIO_ACTIVE_HIGH>; + }; + + wlan5g { + label = "red:wlan5g"; + gpio = <&tlmm 32 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&blsp1_uart3 { + pinctrl-0 = <&uart_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&spi_0 { + pinctrl-0 = <&spi_0_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; + }; +}; + +&qpic_bam { + status = "ok"; +}; + +&nand { + pinctrl-0 = <&qpic_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&nss_crypto { + status = "ok"; +}; + +&cpu0_opp_table { + compatible = "operating-points-v2"; + opp-shared; + + opp03 { + opp-hz = /bits/ 64 <1200000000>; + opp-microvolt = <3>; + clock-latency-ns = <200000>; + }; + + /delete-node/ opp04; + /delete-node/ opp05; + /delete-node/ opp06; +}; + +/* TZAPP is enabled in default memory profile only */ +#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +&qseecom { + mem-start = <0x49B00000>; + mem-size = <0x600000>; + status = "ok"; +}; +#endif + +&ssphy_0 { + status = "ok"; +}; + +&qusb_phy_0 { + status = "ok"; +}; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +}; + +&usb3 { + status = "ok"; +}; diff --git a/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axm-v1.dts b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axm-v1.dts new file mode 100644 index 000000000..ef6764f67 --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axm-v1.dts @@ -0,0 +1,379 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "qcom-ipq6018.dtsi" +#include "qcom-ipq6018-rpm-regulator.dtsi" +#include "qcom-ipq6018-cpr-regulator.dtsi" +#include "qcom-ipq6018-cp-cpu.dtsi" +#include +#include + +/ { + model = "Indio UM-510AXM V1"; + compatible = "indio,um-510axm-v1", "qcom,ipq6018-cp03", "qcom,ipq6018"; + + #address-cells = <0x2>; + #size-cells = <0x2>; + interrupt-parent = <&intc>; + + aliases { + /* Aliases as required by u-boot to patch MAC addresses */ + ethernet0 = "/soc/dp2"; + ethernet1 = "/soc/dp1"; + + serial0 = &blsp1_uart3; + serial1 = &blsp1_uart2; + + led-boot = &led_system; + led-failsafe = &led_system; + led-running = &led_system; + led-upgrade = &led_system; + }; + + chosen { + bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; + bootargs-append = " swiotlb=1 coherent_pool=2M"; + }; + +/* TZAPP is enabled only in default memory profile */ +#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) + reserved-memory { + tzapp:tzapp@49B00000 { /* TZAPPS */ + no-map; + reg = <0x0 0x49B00000 0x0 0x00600000>; + }; + }; +#endif +}; + +&tlmm { + uart_pins: uart_pins { + mux { + pins = "gpio44", "gpio45"; + function = "blsp2_uart"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + spi_0_pins: spi_0_pins { + mux { + pins = "gpio38", "gpio39", "gpio40", "gpio41"; + function = "blsp0_spi"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + qpic_pins: qpic_pins { + data_0 { + pins = "gpio15"; + function = "qpic_pad0"; + drive-strength = <8>; + bias-pull-down; + }; + + data_1 { + pins = "gpio12"; + function = "qpic_pad1"; + drive-strength = <8>; + bias-pull-down; + }; + + data_2 { + pins = "gpio13"; + function = "qpic_pad2"; + drive-strength = <8>; + bias-pull-down; + }; + + data_3 { + pins = "gpio14"; + function = "qpic_pad3"; + drive-strength = <8>; + bias-pull-down; + }; + + data_4 { + pins = "gpio5"; + function = "qpic_pad4"; + drive-strength = <8>; + bias-pull-down; + }; + + data_5 { + pins = "gpio6"; + function = "qpic_pad5"; + drive-strength = <8>; + bias-pull-down; + }; + + data_6 { + pins = "gpio7"; + function = "qpic_pad6"; + drive-strength = <8>; + bias-pull-down; + }; + + data_7 { + pins = "gpio8"; + function = "qpic_pad7"; + drive-strength = <8>; + bias-pull-down; + }; + + qpic_pad { + pins = "gpio1", "gpio3", "gpio4", + "gpio10", "gpio11", "gpio17"; + function = "qpic_pad"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + button_pins: button_pins { + rst_button { + pins = "gpio19"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + mdio_pins: mdio_pinmux { + mux_0 { + pins = "gpio64"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mux_1 { + pins = "gpio65"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + + mux_2 { + pins = "gpio75"; + function = "gpio"; + bias-pull-up; + }; + }; + + modem_power_pins { + mux { + pins = "gpio27"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + output-high; + }; + }; + + leds_pins: leds_pins { + led_blue { + pins = "gpio35"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + + led_green { + pins = "gpio37"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + + led_red { + pins = "gpio32"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + }; +}; + +&soc { + mdio: mdio@90000 { + status = "ok"; + + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + phy-reset-gpio = <&tlmm 75 0>; + + ethernet-phy@0 { + reg = <0x03>; + }; + + ethernet-phy@1 { + reg = <0x04>; + }; + }; + + ess-switch@3a000000 { + switch_cpu_bmp = <0x01>; /* cpu port bitmap */ + switch_lan_bmp = <0x10>; /* lan port bitmap */ + switch_wan_bmp = <0x20>; /* wan port bitmap */ + switch_inner_bmp = <0x80>; /*inner port bitmap*/ + switch_mac_mode = <0x00>; /* mac mode for uniphy instance0*/ + switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ + switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ + + qcom,port_phyinfo { + port@3 { + port_id = <0x04>; + phy_address = <0x03>; + }; + + port@4 { + port_id = <0x05>; + phy_address = <0x04>; + }; + }; + }; + + dp1 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <0x04>; + reg = <0x3a001600 0x200>; + qcom,mactype = <0x00>; + local-mac-address = [00 00 00 00 00 00]; + qcom,link-poll = <0x01>; + qcom,phy-mdio-addr = <0x03>; + phy-mode = "sgmii"; + }; + + dp2 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <0x05>; + reg = <0x3a001800 0x200>; + qcom,mactype = <0x00>; + local-mac-address = [00 00 00 00 00 00]; + qcom,link-poll = <0x01>; + qcom,phy-mdio-addr = <0x04>; + phy-mode = "sgmii"; + }; + + gpio_keys { + compatible = "gpio-keys"; + + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&tlmm 19 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led_system: system { + label = "green:system"; + gpio = <&tlmm 37 GPIO_ACTIVE_HIGH>; + }; + + wlan2g { + label = "blue:wlan2g"; + gpio = <&tlmm 35 GPIO_ACTIVE_HIGH>; + }; + + wlan5g { + label = "red:wlan5g"; + gpio = <&tlmm 32 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&blsp1_uart3 { + pinctrl-0 = <&uart_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&spi_0 { + pinctrl-0 = <&spi_0_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; + }; +}; + +&qpic_bam { + status = "ok"; +}; + +&nand { + pinctrl-0 = <&qpic_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&nss_crypto { + status = "ok"; +}; + +&cpu0_opp_table { + compatible = "operating-points-v2"; + opp-shared; + + opp03 { + opp-hz = /bits/ 64 <1200000000>; + opp-microvolt = <3>; + clock-latency-ns = <200000>; + }; + + /delete-node/ opp04; + /delete-node/ opp05; + /delete-node/ opp06; +}; + +/* TZAPP is enabled in default memory profile only */ +#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +&qseecom { + mem-start = <0x49B00000>; + mem-size = <0x600000>; + status = "ok"; +}; +#endif + +&ssphy_0 { + status = "ok"; +}; + +&qusb_phy_0 { + status = "ok"; +}; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +}; + +&usb3 { + status = "ok"; +}; diff --git a/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axp-v1.dts b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axp-v1.dts new file mode 100644 index 000000000..03c688e6a --- /dev/null +++ b/feeds/ipq807x/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-indio-um-510axp-v1.dts @@ -0,0 +1,379 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "qcom-ipq6018.dtsi" +#include "qcom-ipq6018-rpm-regulator.dtsi" +#include "qcom-ipq6018-cpr-regulator.dtsi" +#include "qcom-ipq6018-cp-cpu.dtsi" +#include +#include + +/ { + model = "Indio UM-510AXP V1"; + compatible = "indio,um-510axp-v1", "qcom,ipq6018-cp03", "qcom,ipq6018"; + + #address-cells = <0x2>; + #size-cells = <0x2>; + interrupt-parent = <&intc>; + + aliases { + /* Aliases as required by u-boot to patch MAC addresses */ + ethernet0 = "/soc/dp2"; + ethernet1 = "/soc/dp1"; + + serial0 = &blsp1_uart3; + serial1 = &blsp1_uart2; + + led-boot = &led_system; + led-failsafe = &led_system; + led-running = &led_system; + led-upgrade = &led_system; + }; + + chosen { + bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; + bootargs-append = " swiotlb=1 coherent_pool=2M"; + }; + +/* TZAPP is enabled only in default memory profile */ +#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) + reserved-memory { + tzapp:tzapp@49B00000 { /* TZAPPS */ + no-map; + reg = <0x0 0x49B00000 0x0 0x00600000>; + }; + }; +#endif +}; + +&tlmm { + uart_pins: uart_pins { + mux { + pins = "gpio44", "gpio45"; + function = "blsp2_uart"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + spi_0_pins: spi_0_pins { + mux { + pins = "gpio38", "gpio39", "gpio40", "gpio41"; + function = "blsp0_spi"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + qpic_pins: qpic_pins { + data_0 { + pins = "gpio15"; + function = "qpic_pad0"; + drive-strength = <8>; + bias-pull-down; + }; + + data_1 { + pins = "gpio12"; + function = "qpic_pad1"; + drive-strength = <8>; + bias-pull-down; + }; + + data_2 { + pins = "gpio13"; + function = "qpic_pad2"; + drive-strength = <8>; + bias-pull-down; + }; + + data_3 { + pins = "gpio14"; + function = "qpic_pad3"; + drive-strength = <8>; + bias-pull-down; + }; + + data_4 { + pins = "gpio5"; + function = "qpic_pad4"; + drive-strength = <8>; + bias-pull-down; + }; + + data_5 { + pins = "gpio6"; + function = "qpic_pad5"; + drive-strength = <8>; + bias-pull-down; + }; + + data_6 { + pins = "gpio7"; + function = "qpic_pad6"; + drive-strength = <8>; + bias-pull-down; + }; + + data_7 { + pins = "gpio8"; + function = "qpic_pad7"; + drive-strength = <8>; + bias-pull-down; + }; + + qpic_pad { + pins = "gpio1", "gpio3", "gpio4", + "gpio10", "gpio11", "gpio17"; + function = "qpic_pad"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + button_pins: button_pins { + rst_button { + pins = "gpio19"; + function = "gpio"; + drive-strength = <8>; + bias-pull-up; + }; + }; + + mdio_pins: mdio_pinmux { + mux_0 { + pins = "gpio64"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + + mux_1 { + pins = "gpio65"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + + mux_2 { + pins = "gpio75"; + function = "gpio"; + bias-pull-up; + }; + }; + + modem_power_pins { + mux { + pins = "gpio27"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + output-high; + }; + }; + + leds_pins: leds_pins { + led_blue { + pins = "gpio35"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + + led_green { + pins = "gpio37"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + + led_red { + pins = "gpio32"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + }; +}; + +&soc { + mdio: mdio@90000 { + status = "ok"; + + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + phy-reset-gpio = <&tlmm 75 0>; + + ethernet-phy@0 { + reg = <0x03>; + }; + + ethernet-phy@1 { + reg = <0x04>; + }; + }; + + ess-switch@3a000000 { + switch_cpu_bmp = <0x01>; /* cpu port bitmap */ + switch_lan_bmp = <0x10>; /* lan port bitmap */ + switch_wan_bmp = <0x20>; /* wan port bitmap */ + switch_inner_bmp = <0x80>; /*inner port bitmap*/ + switch_mac_mode = <0x00>; /* mac mode for uniphy instance0*/ + switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ + switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ + + qcom,port_phyinfo { + port@3 { + port_id = <0x04>; + phy_address = <0x03>; + }; + + port@4 { + port_id = <0x05>; + phy_address = <0x04>; + }; + }; + }; + + dp1 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <0x04>; + reg = <0x3a001600 0x200>; + qcom,mactype = <0x00>; + local-mac-address = [00 00 00 00 00 00]; + qcom,link-poll = <0x01>; + qcom,phy-mdio-addr = <0x03>; + phy-mode = "sgmii"; + }; + + dp2 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <0x05>; + reg = <0x3a001800 0x200>; + qcom,mactype = <0x00>; + local-mac-address = [00 00 00 00 00 00]; + qcom,link-poll = <0x01>; + qcom,phy-mdio-addr = <0x04>; + phy-mode = "sgmii"; + }; + + gpio_keys { + compatible = "gpio-keys"; + + pinctrl-0 = <&button_pins>; + pinctrl-names = "default"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&tlmm 19 GPIO_ACTIVE_LOW>; + linux,input-type = <1>; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led_system: system { + label = "green:system"; + gpio = <&tlmm 37 GPIO_ACTIVE_HIGH>; + }; + + wlan2g { + label = "blue:wlan2g"; + gpio = <&tlmm 35 GPIO_ACTIVE_HIGH>; + }; + + wlan5g { + label = "red:wlan5g"; + gpio = <&tlmm 32 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&blsp1_uart3 { + pinctrl-0 = <&uart_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&spi_0 { + pinctrl-0 = <&spi_0_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; + }; +}; + +&qpic_bam { + status = "ok"; +}; + +&nand { + pinctrl-0 = <&qpic_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&nss_crypto { + status = "ok"; +}; + +&cpu0_opp_table { + compatible = "operating-points-v2"; + opp-shared; + + opp03 { + opp-hz = /bits/ 64 <1200000000>; + opp-microvolt = <3>; + clock-latency-ns = <200000>; + }; + + /delete-node/ opp04; + /delete-node/ opp05; + /delete-node/ opp06; +}; + +/* TZAPP is enabled in default memory profile only */ +#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +&qseecom { + mem-start = <0x49B00000>; + mem-size = <0x600000>; + status = "ok"; +}; +#endif + +&ssphy_0 { + status = "ok"; +}; + +&qusb_phy_0 { + status = "ok"; +}; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +}; + +&usb3 { + status = "ok"; +}; diff --git a/feeds/ipq807x/ipq807x/image/ipq60xx.mk b/feeds/ipq807x/ipq807x/image/ipq60xx.mk index f998944f3..ff4fbd6e9 100644 --- a/feeds/ipq807x/ipq807x/image/ipq60xx.mk +++ b/feeds/ipq807x/ipq807x/image/ipq60xx.mk @@ -38,6 +38,33 @@ define Device/edgecore_eap101 endef TARGET_DEVICES += edgecore_eap101 +define Device/indio_um-310ax-v1 + DEVICE_TITLE := Indio UM-310AX V1 + DEVICE_DTS := qcom-ipq6018-indio-um-310ax-v1 + DEVICE_DTS_CONFIG := config@cp03-c1 + SUPPORTED_DEVICES := indio,um-310ax-v1 + DEVICE_PACKAGES := ath11k-wifi-indio-um-310ax-v1 uboot-env +endef +TARGET_DEVICES += indio_um-310ax-v1 + +define Device/indio_um-510axp-v1 + DEVICE_TITLE := Indio UM-510AXP V1 + DEVICE_DTS := qcom-ipq6018-indio-um-510axp-v1 + DEVICE_DTS_CONFIG := config@cp03-c1 + SUPPORTED_DEVICES := indio,um-510axp-v1 + DEVICE_PACKAGES := ath11k-wifi-indio-um-510axp-v1 uboot-env +endef +TARGET_DEVICES += indio_um-510axp-v1 + +define Device/indio_um-510axm-v1 + DEVICE_TITLE := Indio UM-510AXM V1 + DEVICE_DTS := qcom-ipq6018-indio-um-510axm-v1 + DEVICE_DTS_CONFIG := config@cp03-c1 + SUPPORTED_DEVICES := indio,um-510axm-v1 + DEVICE_PACKAGES := ath11k-wifi-indio-um-510axm-v1 uboot-env +endef +TARGET_DEVICES += indio_um-510axm-v1 + define Device/wallys_dr6018 DEVICE_TITLE := Wallys DR6018 DEVICE_DTS := qcom-ipq6018-wallys-dr6018 diff --git a/feeds/wifi-ax/ath11k-wifi/Makefile b/feeds/wifi-ax/ath11k-wifi/Makefile index 9d8751044..3798680d9 100644 --- a/feeds/wifi-ax/ath11k-wifi/Makefile +++ b/feeds/wifi-ax/ath11k-wifi/Makefile @@ -36,6 +36,9 @@ ALLWIFIBOARDS:= \ sercomm-wallaby \ edgecore-eap102 \ edgecore-eap104 \ + indio-um-310ax-v1 \ + indio-um-510axp-v1 \ + indio-um-510axm-v1 \ plasmacloud-pax1800 \ wallys-dr6018 \ wallys-dr6018-v4 \ @@ -240,6 +243,9 @@ $(eval $(call generate-ath11k-wifi-package,wallys-dr6018-v4,Wallys DR6018 V4)) $(eval $(call generate-ath11k-wifi-package,edgecore-eap101,EdgeCore EAP101)) $(eval $(call generate-ath11k-wifi-package,edgecore-eap102,Edgecore EAP102)) $(eval $(call generate-ath11k-wifi-package,edgecore-eap104,Edgecore EAP104)) +$(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,tplink-ex227,TP-Link EX227)) $(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447)) $(eval $(call generate-ath11k-wifi-package,yuncore-ax840,YunCore AX840)) diff --git a/feeds/wifi-ax/ath11k-wifi/board-indio-um-310ax-v1.bin.IPQ6018 b/feeds/wifi-ax/ath11k-wifi/board-indio-um-310ax-v1.bin.IPQ6018 new file mode 100644 index 0000000000000000000000000000000000000000..349d35304e7200ccadf7e368e074acf5e7fa1105 GIT binary patch literal 65536 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 yDWDWk3Md7X0!jg;fKosypcGIFC