From 89c9ccc3b241d8f07c22a1c271211322c4703f7b Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 19 Jun 2021 12:16:49 +0200 Subject: [PATCH 01/31] mac80211: fix an issue with wds links on 802.11ax devices Signed-off-by: Felix Fietkau --- ...iwlwifi-specific-workaround-that-bro.patch | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 package/kernel/mac80211/patches/subsys/378-mac80211-remove-iwlwifi-specific-workaround-that-bro.patch diff --git a/package/kernel/mac80211/patches/subsys/378-mac80211-remove-iwlwifi-specific-workaround-that-bro.patch b/package/kernel/mac80211/patches/subsys/378-mac80211-remove-iwlwifi-specific-workaround-that-bro.patch new file mode 100644 index 0000000000..a5ad377e6f --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/378-mac80211-remove-iwlwifi-specific-workaround-that-bro.patch @@ -0,0 +1,51 @@ +From: Felix Fietkau +Date: Sat, 19 Jun 2021 12:10:14 +0200 +Subject: [PATCH] mac80211: remove iwlwifi specific workaround that broke sta + NDP tx + +Sending nulldata packets is important for sw AP link probing and detecting +4-address mode links. The checks that dropped these packets were apparently +added to work around an iwlwifi firmware bug with multi-TID aggregation. + +Fixes: 41cbb0f5a295 ("mac80211: add support for HE") +Cc: stable@vger.kernel.org +Signed-off-by: Felix Fietkau +--- + +--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c ++++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c +@@ -1085,6 +1085,9 @@ static int iwl_mvm_tx_mpdu(struct iwl_mv + if (WARN_ON_ONCE(mvmsta->sta_id == IWL_MVM_INVALID_STA)) + return -1; + ++ if (unlikely(ieee80211_is_any_nullfunc(fc)) && sta->he_cap.has_he) ++ return -1; ++ + if (unlikely(ieee80211_is_probe_resp(fc))) + iwl_mvm_probe_resp_set_noa(mvm, skb); + +--- a/net/mac80211/mlme.c ++++ b/net/mac80211/mlme.c +@@ -1094,11 +1094,6 @@ void ieee80211_send_nullfunc(struct ieee + struct ieee80211_hdr_3addr *nullfunc; + struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; + +- /* Don't send NDPs when STA is connected HE */ +- if (sdata->vif.type == NL80211_IFTYPE_STATION && +- !(ifmgd->flags & IEEE80211_STA_DISABLE_HE)) +- return; +- + skb = ieee80211_nullfunc_get(&local->hw, &sdata->vif, + !ieee80211_hw_check(&local->hw, DOESNT_SUPPORT_QOS_NDP)); + if (!skb) +@@ -1130,10 +1125,6 @@ static void ieee80211_send_4addr_nullfun + if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) + return; + +- /* Don't send NDPs when connected HE */ +- if (!(sdata->u.mgd.flags & IEEE80211_STA_DISABLE_HE)) +- return; +- + skb = dev_alloc_skb(local->hw.extra_tx_headroom + 30); + if (!skb) + return; From 90338370d18bec7844d25096c277b64139c721c7 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 17 Jun 2021 22:55:38 -0700 Subject: [PATCH 02/31] tools/ccache: update to 4.3 Remove BUILD_PARALLEL as it's default now. Signed-off-by: Rosen Penev --- tools/ccache/Makefile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tools/ccache/Makefile b/tools/ccache/Makefile index 3db6cc0818..7c85d549e9 100644 --- a/tools/ccache/Makefile +++ b/tools/ccache/Makefile @@ -8,13 +8,11 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/target.mk PKG_NAME:=ccache -PKG_VERSION:=4.2.1 +PKG_VERSION:=4.3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://github.com/ccache/ccache/releases/download/v$(PKG_VERSION) -PKG_HASH:=9d6ba1cdefdc690401f404b747d81a9a1802b17af4235815866b7620d980477e - -HOST_BUILD_PARALLEL:=1 +PKG_HASH:=504a0f2184465c306826f035b4bc00bae7500308d6af4abbfb50e33a694989b4 include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk From 04589cb5490be1a4e33e12eb3cbdb97901685002 Mon Sep 17 00:00:00 2001 From: Paul Fertser Date: Wed, 16 Jun 2021 17:15:59 +0300 Subject: [PATCH 03/31] build: Config-images: fix unit of partition sizes The code interprets these config values as Mebibytes rather than Megabytes so modify the description accordingly. Signed-off-by: Paul Fertser [fix commit title prefix] Signed-off-by: Adrian Schmutzler --- config/Config-images.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/Config-images.in b/config/Config-images.in index 26917267cf..715ba21284 100644 --- a/config/Config-images.in +++ b/config/Config-images.in @@ -280,14 +280,14 @@ menu "Target Images" source "target/linux/*/image/Config.in" config TARGET_KERNEL_PARTSIZE - int "Kernel partition size (in MB)" + int "Kernel partition size (in MiB)" depends on USES_BOOT_PART default 8 if TARGET_apm821xx_sata default 64 if TARGET_bcm27xx default 16 config TARGET_ROOTFS_PARTSIZE - int "Root filesystem partition size (in MB)" + int "Root filesystem partition size (in MiB)" depends on USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_omap || TARGET_sunxi || TARGET_uml default 104 help From b6245fbd58712e0c790fda07db02d39be491dbb4 Mon Sep 17 00:00:00 2001 From: Stijn Segers Date: Wed, 16 Jun 2021 14:47:06 +0200 Subject: [PATCH 04/31] firmware-utils: tplink-safeloader: support Archer A6 v3 CA The Canadian edition of the TP-Link Archer A6 v3 uses a different header, but otherwise it's identical to the already supported EU/US editions. Signed-off-by: Stijn Segers Tested-by: Brian Lee Reviewed-by: Philip Prindeville --- tools/firmware-utils/src/tplink-safeloader.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c index 86d51db269..fd154e7e0a 100644 --- a/tools/firmware-utils/src/tplink-safeloader.c +++ b/tools/firmware-utils/src/tplink-safeloader.c @@ -1097,6 +1097,7 @@ static struct device_info boards[] = { .vendor = "", .support_list = "SupportList:\n" + "{product_name:Archer A6,product_ver:3.0.0,special_id:43410000}\n" "{product_name:Archer A6,product_ver:3.0.0,special_id:55530000}\n" "{product_name:Archer A6,product_ver:3.0.0,special_id:54570000}\n", .part_trail = 0x00, From 2e745e9be653626d37248c4f0a88ce9a5f90d183 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Fri, 18 Jun 2021 20:35:14 -0700 Subject: [PATCH 05/31] treewide: remove BUILD_PARALLEL from CMake packages It's already default. The only exception is mt76 which has Ninja disabled. Found with: git grep BUILD_PARALLEL | cut -d ':' -f 1 | sort -u > par git grep cmake.mk | cut -d ':' -f 1 > cmake comm -1 -2 par cmake Signed-off-by: Rosen Penev --- package/libs/libjson-c/Makefile | 1 - package/libs/libpcap/Makefile | 1 - package/libs/mbedtls/Makefile | 1 - package/network/config/netifd/Makefile | 2 -- package/network/utils/umbim/Makefile | 2 -- package/network/utils/uqmi/Makefile | 2 -- package/system/opkg/Makefile | 2 -- package/system/rpcd/Makefile | 1 - package/system/uci/Makefile | 1 - package/system/urngd/Makefile | 2 -- tools/zstd/Makefile | 1 - 11 files changed, 16 deletions(-) diff --git a/package/libs/libjson-c/Makefile b/package/libs/libjson-c/Makefile index 0ea3fe80b5..d4a16f36cb 100644 --- a/package/libs/libjson-c/Makefile +++ b/package/libs/libjson-c/Makefile @@ -21,7 +21,6 @@ PKG_LICENSE_FILES:=COPYING PKG_CPE_ID:=cpe:/a:json-c_project:json-c PKG_FLAGS := nonshared -PKG_BUILD_PARALLEL:=1 HOST_BUILD_PREFIX:=$(STAGING_DIR_HOST) include $(INCLUDE_DIR)/package.mk diff --git a/package/libs/libpcap/Makefile b/package/libs/libpcap/Makefile index 6168d4c459..8c08259055 100644 --- a/package/libs/libpcap/Makefile +++ b/package/libs/libpcap/Makefile @@ -21,7 +21,6 @@ PKG_LICENSE:=BSD-3-Clause PKG_LICENSE_FILES:=LICENSE PKG_ASLR_PIE_REGULAR:=1 -PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk diff --git a/package/libs/mbedtls/Makefile b/package/libs/mbedtls/Makefile index 7f6bf4e4c0..6add1f401a 100644 --- a/package/libs/mbedtls/Makefile +++ b/package/libs/mbedtls/Makefile @@ -16,7 +16,6 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)? PKG_HASH:=96257bb03b30300b2f35f861ffe204ed957e9fd0329d80646fe57fc49f589b29 -PKG_BUILD_PARALLEL:=1 PKG_LICENSE:=GPL-2.0-or-later PKG_LICENSE_FILES:=gpl-2.0.txt PKG_CPE_ID:=cpe:/a:arm:mbed_tls diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile index aaffb57df7..fb0e470995 100644 --- a/package/network/config/netifd/Makefile +++ b/package/network/config/netifd/Makefile @@ -13,8 +13,6 @@ PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:= -PKG_BUILD_PARALLEL:=1 - include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk diff --git a/package/network/utils/umbim/Makefile b/package/network/utils/umbim/Makefile index 984f8354de..a0f5e4756b 100644 --- a/package/network/utils/umbim/Makefile +++ b/package/network/utils/umbim/Makefile @@ -13,8 +13,6 @@ PKG_MAINTAINER:=John Crispin PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:= -PKG_BUILD_PARALLEL:=1 - PKG_FLAGS:=nonshared include $(INCLUDE_DIR)/package.mk diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile index da54ba0f46..53ca67230b 100644 --- a/package/network/utils/uqmi/Makefile +++ b/package/network/utils/uqmi/Makefile @@ -13,8 +13,6 @@ PKG_MAINTAINER:=Matti Laakso PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:= -PKG_BUILD_PARALLEL:=1 - PKG_FLAGS:=nonshared include $(INCLUDE_DIR)/package.mk diff --git a/package/system/opkg/Makefile b/package/system/opkg/Makefile index 65bdf6dba9..9f352e83c0 100644 --- a/package/system/opkg/Makefile +++ b/package/system/opkg/Makefile @@ -26,8 +26,6 @@ PKG_CONFIG_DEPENDS += \ CONFIG_SIGNATURE_CHECK \ CONFIG_TARGET_INIT_PATH -PKG_BUILD_PARALLEL:=1 -HOST_BUILD_PARALLEL:=1 PKG_INSTALL:=1 HOST_BUILD_DEPENDS:=libubox/host diff --git a/package/system/rpcd/Makefile b/package/system/rpcd/Makefile index 7c99267b67..e9040500b5 100644 --- a/package/system/rpcd/Makefile +++ b/package/system/rpcd/Makefile @@ -20,7 +20,6 @@ PKG_MIRROR_HASH:=69d9588a5a910676252eabcd2815af318806cae8316777e8b6eb00b26bdc42c PKG_LICENSE:=ISC PKG_LICENSE_FILES:= -PKG_BUILD_PARALLEL:=1 PKG_ASLR_PIE_REGULAR:=1 include $(INCLUDE_DIR)/package.mk diff --git a/package/system/uci/Makefile b/package/system/uci/Makefile index 3d9fdf7391..2036f92a7e 100644 --- a/package/system/uci/Makefile +++ b/package/system/uci/Makefile @@ -22,7 +22,6 @@ PKG_LICENSE_FILES:= PKG_MAINTAINER:=Felix Fietkau -PKG_BUILD_PARALLEL:=0 PKG_FLAGS := nonshared include $(INCLUDE_DIR)/package.mk diff --git a/package/system/urngd/Makefile b/package/system/urngd/Makefile index 54a1f457d2..8350f7ceb9 100644 --- a/package/system/urngd/Makefile +++ b/package/system/urngd/Makefile @@ -12,8 +12,6 @@ PKG_MIRROR_HASH:=2d31025b79fe130c579d6c3f4bf4dc12abc43a7319b20a5cdca24ae363ec70f PKG_LICENSE:=GPL-2.0 BSD-3-Clause PKG_LICENSE_FILES:= -PKG_BUILD_PARALLEL:=1 - include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk diff --git a/tools/zstd/Makefile b/tools/zstd/Makefile index a0106f15f2..9138ae98f2 100644 --- a/tools/zstd/Makefile +++ b/tools/zstd/Makefile @@ -12,7 +12,6 @@ PKG_LICENSE_FILES:=LICENSE PKG_CPE_ID:=cpe:/a:facebook:zstandard CMAKE_SOURCE_SUBDIR:=build/cmake -HOST_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk From 3dabb62581ccff92e51cadb05f15de4ba8000e1b Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Fri, 18 Jun 2021 20:43:28 -0700 Subject: [PATCH 06/31] treewide: remove PKG_INSTALL from CMake packages It's already default with cmake.mk Found with: git grep PKG_INSTALL\: | cut -d ':' -f 1 | sort -u > ins git grep cmake.mk | cut -d ':' -f 1 > cmake comm -1 -2 ins cmake Signed-off-by: Rosen Penev --- package/libs/mbedtls/Makefile | 2 -- package/network/services/odhcpd/Makefile | 1 - package/system/opkg/Makefile | 2 -- 3 files changed, 5 deletions(-) diff --git a/package/libs/mbedtls/Makefile b/package/libs/mbedtls/Makefile index 6add1f401a..2bac22b6ac 100644 --- a/package/libs/mbedtls/Makefile +++ b/package/libs/mbedtls/Makefile @@ -87,8 +87,6 @@ This package contains mbedtls helper programs for private key and CSR generation (gen_key, cert_req) endef -PKG_INSTALL:=1 - TARGET_CFLAGS += -ffunction-sections -fdata-sections TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) diff --git a/package/network/services/odhcpd/Makefile b/package/network/services/odhcpd/Makefile index d9a320d17a..05174a5092 100644 --- a/package/network/services/odhcpd/Makefile +++ b/package/network/services/odhcpd/Makefile @@ -19,7 +19,6 @@ PKG_MIRROR_HASH:=a0644d31f99f20e5c2cee74153b81a0c2eae9ebeb644662cc76b0984b44dd49 PKG_MAINTAINER:=Hans Dedecker PKG_LICENSE:=GPL-2.0 -PKG_INSTALL:=1 PKG_CONFIG_DEPENDS:=CONFIG_PACKAGE_odhcpd_$(BUILD_VARIANT)_ext_cer_id PKG_ASLR_PIE_REGULAR:=1 diff --git a/package/system/opkg/Makefile b/package/system/opkg/Makefile index 9f352e83c0..bd9fab474c 100644 --- a/package/system/opkg/Makefile +++ b/package/system/opkg/Makefile @@ -26,8 +26,6 @@ PKG_CONFIG_DEPENDS += \ CONFIG_SIGNATURE_CHECK \ CONFIG_TARGET_INIT_PATH -PKG_INSTALL:=1 - HOST_BUILD_DEPENDS:=libubox/host include $(INCLUDE_DIR)/package.mk From 2001c0ca9fd2bf95827e23ba867fa06fc3b0a3e7 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Sun, 20 Jun 2021 17:11:09 +0200 Subject: [PATCH 07/31] ramips: reorganize DTSI files for D-Link DIR-8xx * Remove micro-DTSI mt7621_dlink_dir-882-x1.dtsi to ease reading config without too much inheritance * Use "separate" partitioning DTSIs so we can use the partitioning without a complete match on the other settings (i.e. without the former parent DTSI) * Rename files to express the new organization Signed-off-by: Adrian Schmutzler --- .../ramips/dts/mt7621_dlink_dir-867-a1.dts | 3 ++- .../ramips/dts/mt7621_dlink_dir-878-a1.dts | 3 ++- .../ramips/dts/mt7621_dlink_dir-882-a1.dts | 20 +++++++++++++++++-- .../ramips/dts/mt7621_dlink_dir-882-r1.dts | 20 +++++++++++++++++-- .../ramips/dts/mt7621_dlink_dir-882-x1.dtsi | 17 ---------------- ...-8xx-x1.dtsi => mt7621_dlink_dir-8xx.dtsi} | 0 ...a1.dtsi => mt7621_dlink_flash-16m-a1.dtsi} | 2 -- ...r1.dtsi => mt7621_dlink_flash-16m-r1.dtsi} | 2 -- 8 files changed, 40 insertions(+), 27 deletions(-) delete mode 100644 target/linux/ramips/dts/mt7621_dlink_dir-882-x1.dtsi rename target/linux/ramips/dts/{mt7621_dlink_dir-8xx-x1.dtsi => mt7621_dlink_dir-8xx.dtsi} (100%) rename target/linux/ramips/dts/{mt7621_dlink_dir-8xx-a1.dtsi => mt7621_dlink_flash-16m-a1.dtsi} (94%) rename target/linux/ramips/dts/{mt7621_dlink_dir-8xx-r1.dtsi => mt7621_dlink_flash-16m-r1.dtsi} (94%) diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-867-a1.dts b/target/linux/ramips/dts/mt7621_dlink_dir-867-a1.dts index b2ba5ecaa9..e02eb9eebf 100644 --- a/target/linux/ramips/dts/mt7621_dlink_dir-867-a1.dts +++ b/target/linux/ramips/dts/mt7621_dlink_dir-867-a1.dts @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT -#include "mt7621_dlink_dir-8xx-a1.dtsi" +#include "mt7621_dlink_dir-8xx.dtsi" +#include "mt7621_dlink_flash-16m-a1.dtsi" / { compatible = "dlink,dir-867-a1", "mediatek,mt7621-soc"; diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-878-a1.dts b/target/linux/ramips/dts/mt7621_dlink_dir-878-a1.dts index 4bfe5ca43c..1f1d5824f2 100644 --- a/target/linux/ramips/dts/mt7621_dlink_dir-878-a1.dts +++ b/target/linux/ramips/dts/mt7621_dlink_dir-878-a1.dts @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT -#include "mt7621_dlink_dir-8xx-a1.dtsi" +#include "mt7621_dlink_dir-8xx.dtsi" +#include "mt7621_dlink_flash-16m-a1.dtsi" / { compatible = "dlink,dir-878-a1", "mediatek,mt7621-soc"; diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-882-a1.dts b/target/linux/ramips/dts/mt7621_dlink_dir-882-a1.dts index cef0705393..01739fc258 100644 --- a/target/linux/ramips/dts/mt7621_dlink_dir-882-a1.dts +++ b/target/linux/ramips/dts/mt7621_dlink_dir-882-a1.dts @@ -1,9 +1,25 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT -#include "mt7621_dlink_dir-8xx-a1.dtsi" -#include "mt7621_dlink_dir-882-x1.dtsi" +#include "mt7621_dlink_dir-8xx.dtsi" +#include "mt7621_dlink_flash-16m-a1.dtsi" / { compatible = "dlink,dir-882-a1", "mediatek,mt7621-soc"; model = "D-Link DIR-882 A1"; }; + +&leds { + usb2 { + label = "green:usb2"; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + trigger-sources = <&ehci_port2>; + linux,default-trigger = "usbport"; + }; + + usb3 { + label = "green:usb3"; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + trigger-sources = <&xhci_ehci_port1>; + linux,default-trigger = "usbport"; + }; +}; diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-882-r1.dts b/target/linux/ramips/dts/mt7621_dlink_dir-882-r1.dts index 26b6f34707..9b0cd8e7be 100644 --- a/target/linux/ramips/dts/mt7621_dlink_dir-882-r1.dts +++ b/target/linux/ramips/dts/mt7621_dlink_dir-882-r1.dts @@ -1,9 +1,25 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT -#include "mt7621_dlink_dir-8xx-r1.dtsi" -#include "mt7621_dlink_dir-882-x1.dtsi" +#include "mt7621_dlink_dir-8xx.dtsi" +#include "mt7621_dlink_flash-16m-r1.dtsi" / { compatible = "dlink,dir-882-r1", "mediatek,mt7621-soc"; model = "D-Link DIR-882 R1"; }; + +&leds { + usb2 { + label = "green:usb2"; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + trigger-sources = <&ehci_port2>; + linux,default-trigger = "usbport"; + }; + + usb3 { + label = "green:usb3"; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + trigger-sources = <&xhci_ehci_port1>; + linux,default-trigger = "usbport"; + }; +}; diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-882-x1.dtsi b/target/linux/ramips/dts/mt7621_dlink_dir-882-x1.dtsi deleted file mode 100644 index cafb1df964..0000000000 --- a/target/linux/ramips/dts/mt7621_dlink_dir-882-x1.dtsi +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later OR MIT - -&leds { - usb2 { - label = "green:usb2"; - gpios = <&gpio 13 GPIO_ACTIVE_LOW>; - trigger-sources = <&ehci_port2>; - linux,default-trigger = "usbport"; - }; - - usb3 { - label = "green:usb3"; - gpios = <&gpio 14 GPIO_ACTIVE_LOW>; - trigger-sources = <&xhci_ehci_port1>; - linux,default-trigger = "usbport"; - }; -}; diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-8xx-x1.dtsi b/target/linux/ramips/dts/mt7621_dlink_dir-8xx.dtsi similarity index 100% rename from target/linux/ramips/dts/mt7621_dlink_dir-8xx-x1.dtsi rename to target/linux/ramips/dts/mt7621_dlink_dir-8xx.dtsi diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-8xx-a1.dtsi b/target/linux/ramips/dts/mt7621_dlink_flash-16m-a1.dtsi similarity index 94% rename from target/linux/ramips/dts/mt7621_dlink_dir-8xx-a1.dtsi rename to target/linux/ramips/dts/mt7621_dlink_flash-16m-a1.dtsi index 95ef0afcd9..911de595d0 100644 --- a/target/linux/ramips/dts/mt7621_dlink_dir-8xx-a1.dtsi +++ b/target/linux/ramips/dts/mt7621_dlink_flash-16m-a1.dtsi @@ -1,7 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT -#include "mt7621_dlink_dir-8xx-x1.dtsi" - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-8xx-r1.dtsi b/target/linux/ramips/dts/mt7621_dlink_flash-16m-r1.dtsi similarity index 94% rename from target/linux/ramips/dts/mt7621_dlink_dir-8xx-r1.dtsi rename to target/linux/ramips/dts/mt7621_dlink_flash-16m-r1.dtsi index e93a06d9fe..3f71ab971c 100644 --- a/target/linux/ramips/dts/mt7621_dlink_dir-8xx-r1.dtsi +++ b/target/linux/ramips/dts/mt7621_dlink_flash-16m-r1.dtsi @@ -1,7 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT -#include "mt7621_dlink_dir-8xx-x1.dtsi" - &spi0 { status = "okay"; From 881fdb811f39d445fb00b4c1f38427fada883fe2 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Sun, 20 Jun 2021 17:20:40 +0200 Subject: [PATCH 08/31] ramips: clean up dlink_dir-8xx-r1 recipe * only add factory.bin when it's defined * fix check-size vs. append-metadata * whitespace/line break cleanup Signed-off-by: Adrian Schmutzler --- target/linux/ramips/image/mt7621.mk | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index ee5ebaa8b2..ae9b4757de 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -300,9 +300,8 @@ define Device/dlink_dir-8xx-r1 DEVICE_VENDOR := D-Link DEVICE_PACKAGES := kmod-mt7615e kmod-mt7615-firmware KERNEL_INITRAMFS := $$(KERNEL) - IMAGES += factory.bin - IMAGE/sysupgrade.bin := append-kernel | append-rootfs |\ - pad-rootfs | append-metadata | check-size + IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | \ + check-size | append-metadata endef define Device/dlink_dir-xx60-a1 @@ -387,9 +386,10 @@ define Device/dlink_dir-882-r1 DEVICE_MODEL := DIR-882 DEVICE_VARIANT := R1 DEVICE_PACKAGES += kmod-usb3 kmod-usb-ledtrig-usbport + IMAGES += factory.bin IMAGE/factory.bin := append-kernel | append-rootfs | check-size | \ - sign-dlink-ru 57c5375741c30ca9ebcb36713db4ba51 \ - ab0dff19af8842cdb70a86b4b68d23f7 + sign-dlink-ru 57c5375741c30ca9ebcb36713db4ba51 \ + ab0dff19af8842cdb70a86b4b68d23f7 endef TARGET_DEVICES += dlink_dir-882-r1 From 5876d6a62fc0ae5799e7d9c896356f75c99a6f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=9B=BD?= Date: Sat, 25 Jul 2020 04:04:05 +0000 Subject: [PATCH 09/31] grub2: make grub2-bios-setup as a separate package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The grub2 and grub2-efi packages should only contain boot-related code. grub-bios-setup is the same as grub-editenv, they are both grub2 tools and should be placed in a separate package. Signed-off-by: 李国 [use AUTORELEASE and update to SPDX] Signed-off-by: Paul Spooren --- config/Config-images.in | 2 ++ package/boot/grub2/Makefile | 31 +++++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/config/Config-images.in b/config/Config-images.in index 715ba21284..4a7f08824b 100644 --- a/config/Config-images.in +++ b/config/Config-images.in @@ -200,6 +200,7 @@ menu "Target Images" depends on TARGET_x86 depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS select PACKAGE_grub2 + select PACKAGE_grub2-bios-setup default y config GRUB_EFI_IMAGES @@ -208,6 +209,7 @@ menu "Target Images" depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS select PACKAGE_grub2 select PACKAGE_grub2-efi + select PACKAGE_grub2-bios-setup select PACKAGE_kmod-fs-vfat default y diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile index a57486b91d..709253a935 100644 --- a/package/boot/grub2/Makefile +++ b/package/boot/grub2/Makefile @@ -1,9 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0-only # -# Copyright (C) 2006-2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# +# Copyright (C) 2006-2021 OpenWrt.org include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk @@ -11,7 +8,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=grub PKG_CPE_ID:=cpe:/a:gnu:grub2 PKG_VERSION:=2.06~rc1 -PKG_RELEASE:=2 +PKG_RELEASE:=$(AUTORELEASE) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://alpha.gnu.org/gnu/grub @@ -54,6 +51,20 @@ define Package/grub2-editenv/description Edit grub2 environment files. endef +define Package/grub2-bios-setup + CATEGORY:=Utilities + SECTION:=utils + SUBMENU:=Boot Loaders + TITLE:=Grub2 BIOS boot setup tool + URL:=http://www.gnu.org/software/grub/ + DEPENDS:=@TARGET_x86 + VARIANT:=pc +endef + +define Package/grub2-bios-setup/description + Set up images to bootable. +endef + HOST_BUILD_PREFIX := $(STAGING_DIR_HOST) CONFIGURE_VARS += \ @@ -93,8 +104,6 @@ define Host/Configure endef define Package/grub2/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-bios-setup $(1)/usr/sbin/ $(INSTALL_DIR) $(STAGING_DIR_IMAGE)/grub2 $(CP) $(PKG_BUILD_DIR)/grub-core/boot.img $(STAGING_DIR_IMAGE)/grub2/ $(CP) $(PKG_BUILD_DIR)/grub-core/cdboot.img $(STAGING_DIR_IMAGE)/grub2/ @@ -152,7 +161,13 @@ define Package/grub2-editenv/install $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-editenv $(1)/usr/sbin/ endef +define Package/grub2-bios-setup/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-bios-setup $(1)/usr/sbin/ +endef + $(eval $(call HostBuild)) $(eval $(call BuildPackage,grub2)) $(eval $(call BuildPackage,grub2-efi)) $(eval $(call BuildPackage,grub2-editenv)) +$(eval $(call BuildPackage,grub2-bios-setup)) From ca941041366602d4da0bf2c04bb0d3c25ed4fa21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=9B=BD?= Date: Sat, 25 Jul 2020 04:48:36 +0000 Subject: [PATCH 10/31] grub2: make grub2 tools built in a separate variant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit grub2 boot-related code and tools-related code may require different compilation parameters. We split them into different variants for compilation, so that we can accurately pass the required parameters and avoid causing problems. Signed-off-by: 李国 --- package/boot/grub2/Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile index 709253a935..0610d96e90 100644 --- a/package/boot/grub2/Makefile +++ b/package/boot/grub2/Makefile @@ -44,7 +44,7 @@ define Package/grub2-editenv TITLE:=Grub2 Environment editor URL:=http://www.gnu.org/software/grub/ DEPENDS:=@TARGET_x86 - VARIANT:=pc + VARIANT:=none endef define Package/grub2-editenv/description @@ -58,7 +58,7 @@ define Package/grub2-bios-setup TITLE:=Grub2 BIOS boot setup tool URL:=http://www.gnu.org/software/grub/ DEPENDS:=@TARGET_x86 - VARIANT:=pc + VARIANT:=none endef define Package/grub2-bios-setup/description @@ -98,6 +98,10 @@ HOST_MAKE_FLAGS += \ TARGET_CFLAGS := $(filter-out -O2 -O3 -fno-plt,$(TARGET_CFLAGS)) +ifneq ($(BUILD_VARIANT),none) + MAKE_PATH := grub-core +endif + define Host/Configure $(SED) 's,(RANLIB),(TARGET_RANLIB),' $(HOST_BUILD_DIR)/grub-core/Makefile.in $(Host/Configure/Default) From e4723755f237a0e5fab132ab870d00ea82e7fb82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=9B=BD?= Date: Sat, 25 Jul 2020 05:14:52 +0000 Subject: [PATCH 11/31] grub2: pass compilation parameters more accurately MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In order for the grub2 boot-related code to compile normally, we have made many adjustments to the compilation parameters. These adjustments are not necessary for tools-related code. We apply these parameter adjustments only to the boot-related code. Signed-off-by: 李国 --- package/boot/grub2/Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile index 0610d96e90..3cdb608cbf 100644 --- a/package/boot/grub2/Makefile +++ b/package/boot/grub2/Makefile @@ -17,8 +17,10 @@ PKG_HASH:=2c87f1f21e2ab50043e6cd9163c08f1b6c3a6171556bf23ff9ed65b074145484 HOST_BUILD_PARALLEL:=1 PKG_BUILD_DEPENDS:=grub2/host -PKG_ASLR_PIE:=0 -PKG_SSP:=0 +ifneq ($(BUILD_VARIANT),none) + PKG_ASLR_PIE:=0 + PKG_SSP:=0 +endif PKG_FLAGS:=nonshared @@ -96,9 +98,9 @@ HOST_MAKE_FLAGS += \ TARGET_RANLIB=$(TARGET_RANLIB) \ LIBLZMA=$(STAGING_DIR_HOST)/lib/liblzma.a -TARGET_CFLAGS := $(filter-out -O2 -O3 -fno-plt,$(TARGET_CFLAGS)) ifneq ($(BUILD_VARIANT),none) + TARGET_CFLAGS := $(filter-out -O2 -O3 -fno-plt,$(TARGET_CFLAGS)) MAKE_PATH := grub-core endif From 2c6c1501af664490ec9b701b46a201e21c670b96 Mon Sep 17 00:00:00 2001 From: Martin Schiller Date: Mon, 4 May 2020 16:13:13 +0200 Subject: [PATCH 12/31] uhttpd: make organization (O=) of the cert configurable via uci Make the organization (O=) of the cert configurable via uci. If not configured, use a combination of "OpenWrt" and an unique id like it was done before. Signed-off-by: Martin Schiller --- package/network/services/uhttpd/Makefile | 2 +- package/network/services/uhttpd/files/uhttpd.init | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package/network/services/uhttpd/Makefile b/package/network/services/uhttpd/Makefile index 8f58271127..781512bd99 100644 --- a/package/network/services/uhttpd/Makefile +++ b/package/network/services/uhttpd/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uhttpd -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/uhttpd.git diff --git a/package/network/services/uhttpd/files/uhttpd.init b/package/network/services/uhttpd/files/uhttpd.init index 869f79bea2..e7709941c2 100755 --- a/package/network/services/uhttpd/files/uhttpd.init +++ b/package/network/services/uhttpd/files/uhttpd.init @@ -35,13 +35,14 @@ generate_keys() { local cfg="$1" local key="$2" local crt="$3" - local days bits country state location commonname + local days bits country state location organization commonname config_get days "$cfg" days config_get bits "$cfg" bits config_get country "$cfg" country config_get state "$cfg" state config_get location "$cfg" location + config_get organization "$cfg" organization config_get commonname "$cfg" commonname config_get key_type "$cfg" key_type config_get ec_curve "$cfg" ec_curve @@ -56,7 +57,7 @@ generate_keys() { [ -n "$GENKEY_CMD" ] && { $GENKEY_CMD \ -days ${days:-730} -newkey ${KEY_OPTS} -keyout "${UHTTPD_KEY}.new" -out "${UHTTPD_CERT}.new" \ - -subj /C="${country:-ZZ}"/ST="${state:-Somewhere}"/L="${location:-Unknown}"/O="${commonname:-OpenWrt}$UNIQUEID"/CN="${commonname:-OpenWrt}" + -subj /C="${country:-ZZ}"/ST="${state:-Somewhere}"/L="${location:-Unknown}"/O="${organization:-OpenWrt$UNIQUEID}"/CN="${commonname:-OpenWrt}" sync mv "${UHTTPD_KEY}.new" "${UHTTPD_KEY}" mv "${UHTTPD_CERT}.new" "${UHTTPD_CERT}" From bb2ac5a33be4c85c47f0f27e9ecb9e2c5f6c0a8f Mon Sep 17 00:00:00 2001 From: Dobroslaw Kijowski Date: Sun, 3 Jan 2021 13:46:21 +0100 Subject: [PATCH 13/31] hostapd: stop advertising 11w feature This is a follow up of 1a9b896d ("treewide: nuke DRIVER_11W_SUPPORT"). LuCI commit ab010406 ("luci-mod-network: skip check for 802.11w feature") skips check of the 11w feature [1]. Now advertising it in hostapd is superfluous so stop doing it. [1]: https://github.com/openwrt/luci/pull/4689 Signed-off-by: Dobroslaw Kijowski [remove outdated PKG_RELEASE bump and update to SPDX] Signed-off-by: Paul Spooren --- package/network/services/hostapd/Makefile | 6 ++---- .../network/services/hostapd/src/src/utils/build_features.h | 2 -- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index 3c521b485d..fee6889b40 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -1,8 +1,6 @@ -# Copyright (C) 2006-2014 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. +# SPDX-License-Identifier: GPL-2.0-only # +# Copyright (C) 2006-2021 OpenWrt.org include $(TOPDIR)/rules.mk diff --git a/package/network/services/hostapd/src/src/utils/build_features.h b/package/network/services/hostapd/src/src/utils/build_features.h index c7fccad413..3ab5246c78 100644 --- a/package/network/services/hostapd/src/src/utils/build_features.h +++ b/package/network/services/hostapd/src/src/utils/build_features.h @@ -23,8 +23,6 @@ static inline int has_feature(const char *feat) if (!strcmp(feat, "11r")) return 1; #endif - if (!strcmp(feat, "11w")) - return 1; #ifdef CONFIG_ACS if (!strcmp(feat, "acs")) return 1; From bffee5ea192386ffeac81e7b40e9d58a93b85db8 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Sun, 20 Jun 2021 23:38:37 +0300 Subject: [PATCH 14/31] busybox: disable bzip2 bzip2 adds about 8kb of size. For tiny builds it's often disabled. It's not directly used by stock OpenWrt programs. Kernel images compressed with bzip2 are also not fully supported. Signed-off-by: Sergey Ponomarev [fix \ indention] Signed-off-by: Paul Spooren --- package/base-files/files/lib/upgrade/common.sh | 1 - package/base-files/files/lib/upgrade/stage2 | 2 +- package/utils/busybox/Config-defaults.in | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index b0a482821d..b59a404565 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -96,7 +96,6 @@ get_image() { # [ ] local magic="$(dd if="$from" bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')" case "$magic" in 1f8b) cmd="zcat";; - 425a) cmd="bzcat";; *) cmd="cat";; esac fi diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 index b00d0c079a..cb42c956c5 100755 --- a/package/base-files/files/lib/upgrade/stage2 +++ b/package/base-files/files/lib/upgrade/stage2 @@ -39,7 +39,7 @@ switch_to_ramfs() { for binary in \ /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \ pivot_root mount_root reboot sync kill sleep \ - md5sum hexdump cat zcat bzcat dd tar \ + md5sum hexdump cat zcat dd tar \ ls basename find cp mv rm mkdir rmdir mknod touch chmod \ '[' printf wc grep awk sed cut \ mtd partx losetup mkfs.ext4 nandwrite flash_erase \ diff --git a/package/utils/busybox/Config-defaults.in b/package/utils/busybox/Config-defaults.in index f9028620a1..d078a39954 100644 --- a/package/utils/busybox/Config-defaults.in +++ b/package/utils/busybox/Config-defaults.in @@ -351,10 +351,10 @@ config BUSYBOX_DEFAULT_FEATURE_GUNZIP_LONG_OPTIONS default n config BUSYBOX_DEFAULT_BUNZIP2 bool - default y + default n config BUSYBOX_DEFAULT_BZCAT bool - default y + default n config BUSYBOX_DEFAULT_UNLZMA bool default n From d374e2cdb499b2a4282d84f95709b9a40d88a995 Mon Sep 17 00:00:00 2001 From: Chuck Fan Date: Tue, 9 Mar 2021 17:42:57 +0800 Subject: [PATCH 15/31] base-files: upgrade: use zcat command provided by busybox Calling `switch_to_ramfs()` will not copy the gzip executable (/bin/gzip) to ramfs, but `/bin/zcat` will call `/bin/gzip` when package gzip is installed, instead of the busybox-supplied zcat. This will cause `zcat` to fail to find `gzip`, then cause the sysupgrade to fail. Adding the `busybox` prefix here will solve the problem. Signed-off-by: Chuck Fan --- package/base-files/files/lib/upgrade/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index b59a404565..b8ae2ecb7e 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -95,7 +95,7 @@ get_image() { # [ ] if [ -z "$cmd" ]; then local magic="$(dd if="$from" bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')" case "$magic" in - 1f8b) cmd="zcat";; + 1f8b) cmd="busybox zcat";; *) cmd="cat";; esac fi From bb2b7156a4b55a5599ac45adbe46b2d6bd046036 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Mon, 1 Feb 2021 11:02:30 +0100 Subject: [PATCH 16/31] base-files: add syslog logging for v function The logging output should not only be displayed in the calling shell session but also in the syslog. A sysupgrade and a configuration import, export can thus be traced in the syslog. Signed-off-by: Florian Eckert --- package/base-files/files/lib/upgrade/common.sh | 1 + package/base-files/files/lib/upgrade/stage2 | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index b8ae2ecb7e..5c85d986f9 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -71,6 +71,7 @@ _vn() { v() { _v "$(date) upgrade: $@" + logger -p info -t upgrade "$@" } vn() { diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 index cb42c956c5..ba728004e9 100755 --- a/package/base-files/files/lib/upgrade/stage2 +++ b/package/base-files/files/lib/upgrade/stage2 @@ -45,7 +45,7 @@ switch_to_ramfs() { mtd partx losetup mkfs.ext4 nandwrite flash_erase \ ubiupdatevol ubiattach ubiblock ubiformat \ ubidetach ubirsvol ubirmvol ubimkvol \ - snapshot snapshot_tool date \ + snapshot snapshot_tool date logger \ $RAMFS_COPY_LOSETUP $RAMFS_COPY_LVM \ $RAMFS_COPY_BIN do From 42d78fedfb039b7ffd623c910cd946480c75bb26 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 2 Feb 2021 11:26:28 +0100 Subject: [PATCH 17/31] base-files: change logging for upgrade on stage2 Remove vn call in favour of v call. This commit serves as preparation for removing the vn function call. Signed-off-by: Florian Eckert --- package/base-files/files/lib/upgrade/stage2 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 index ba728004e9..f2f3cd439a 100755 --- a/package/base-files/files/lib/upgrade/stage2 +++ b/package/base-files/files/lib/upgrade/stage2 @@ -85,7 +85,7 @@ kill_remaining() { # [ [ ] ] local stat local proc_ppid=$(cut -d' ' -f4 /proc/$$/stat) - vn "Sending $sig to remaining processes ..." + v "Sending $sig to remaining processes ..." while $run; do run=false @@ -105,7 +105,7 @@ kill_remaining() { # [ [ ] ] # Skip kernel threads [ -n "$cmdline" ] || continue - _vn " $name" + v "Sending signal $sig to $name ($pid)" kill -$sig $pid 2>/dev/null [ $loop -eq 1 ] && run=true @@ -113,12 +113,10 @@ kill_remaining() { # [ [ ] ] let loop_limit-- [ $loop_limit -eq 0 ] && { - _v v "Failed to kill all processes." exit 1 } done - _v } indicate_upgrade From d8bfcc59b03ea1ad2af5ee7ca99688815e386bcb Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 3 Feb 2021 10:25:38 +0100 Subject: [PATCH 18/31] base-files: remove unused vn and _vn function The remaining vn calls have been ported to v. Therefore, these functions are no longer needed and will be removed. Signed-off-by: Florian Eckert --- package/base-files/files/lib/upgrade/common.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index 5c85d986f9..2b152a3dfa 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -65,19 +65,11 @@ _v() { [ -n "$VERBOSE" ] && [ "$VERBOSE" -ge 1 ] && echo "$*" >&2 } -_vn() { - [ -n "$VERBOSE" ] && [ "$VERBOSE" -ge 1 ] && echo -n "$*" >&2 -} - v() { _v "$(date) upgrade: $@" logger -p info -t upgrade "$@" } -vn() { - _vn "$(date) upgrade: $@" -} - json_string() { local v="$1" v="${v//\\/\\\\}" From 40f533b73e6cfd7376cc6a0bbef9af46c8fbed86 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 9 Feb 2021 16:10:10 +0100 Subject: [PATCH 19/31] base-files: redirect kill ouptut for ash, telnetd and dropbear If one of the programmes is not running, then we see the following output in the logs. `killall: telnetd: no process killed` To ensure that the log is clean, redirect the output to /dev/null Signed-off-by: Florian Eckert --- package/base-files/files/lib/upgrade/stage2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 index f2f3cd439a..13c3622f38 100755 --- a/package/base-files/files/lib/upgrade/stage2 +++ b/package/base-files/files/lib/upgrade/stage2 @@ -137,9 +137,9 @@ for service in /etc/init.d/*; do ubus call service delete '{ "name": "'"$service"'" }' 2>/dev/null done -killall -9 telnetd -killall -9 dropbear -killall -9 ash +killall -9 telnetd 2>/dev/null +killall -9 dropbear 2>/dev/null +killall -9 ash 2>/dev/null kill_remaining TERM sleep 4 From bf4dbbb55e2b8e23f186e1334f1e9ce6a3a8ddfe Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sat, 19 Jun 2021 14:45:11 -0700 Subject: [PATCH 20/31] tools/libressl: update to 3.3.3 Fix wrong FPIC variable usage. Fixes compilation under sparc64 host. Signed-off-by: Rosen Penev --- tools/libressl/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/libressl/Makefile b/tools/libressl/Makefile index 2b5a33450c..e25b5661ee 100644 --- a/tools/libressl/Makefile +++ b/tools/libressl/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libressl -PKG_VERSION:=3.3.1 -PKG_HASH:=a6d331865e0164a13ac85a228e52517f7cf8f8488f2f95f34e7857302f97cfdb +PKG_VERSION:=3.3.3 +PKG_HASH:=a471565b36ccd1a70d0bd7d37c6e95c43a26a62829b487d9d2cdebfe58be3066 PKG_RELEASE:=1 PKG_CPE_ID:=cpe:/a:openbsd:libressl @@ -25,7 +25,7 @@ include $(INCLUDE_DIR)/host-build.mk HOSTCC := $(HOSTCC_NOCACHE) HOST_CONFIGURE_ARGS += --enable-static --disable-shared --disable-tests -HOST_CFLAGS += $(FPIC) +HOST_CFLAGS += $(HOST_FPIC) ifeq ($(GNU_HOST_NAME),x86_64-linux-gnux32) HOST_CONFIGURE_ARGS += --disable-asm From b9b4aef4f2403766a1a3321b0ef095c2728a3139 Mon Sep 17 00:00:00 2001 From: Michael Yartys Date: Wed, 2 Jun 2021 19:48:43 +0200 Subject: [PATCH 21/31] hostapd: add support for setting sae_pwe Make it possible to specify the SAE mechanism for PWE derivation. The following values are possible: 0 = hunting-and-pecking loop only 1 = hash-to-element only 2 = both hunting-and-pecking loop and hash-to-element enabled hostapd currently defaults to hunting-and-pecking loop only. Signed-off-by: Michael Yartys --- package/network/services/hostapd/files/hostapd.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index cf85019d56..8a6c904c58 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -319,6 +319,7 @@ hostapd_common_add_bss_config() { config_add_array supported_rates config_add_boolean sae_require_mfp + config_add_int sae_pwe config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string' @@ -520,7 +521,7 @@ hostapd_set_bss_options() { macfilter ssid utf8_ssid wmm uapsd hidden short_preamble rsn_preauth \ iapp_interface eapol_version dynamic_vlan ieee80211w nasid \ acct_server acct_secret acct_port acct_interval \ - bss_load_update_period chan_util_avg_period sae_require_mfp \ + bss_load_update_period chan_util_avg_period sae_require_mfp sae_pwe \ multi_ap multi_ap_backhaul_ssid multi_ap_backhaul_key skip_inactivity_poll \ airtime_bss_weight airtime_bss_limit airtime_sta_weight \ multicast_to_unicast proxy_arp per_sta_vif \ @@ -604,6 +605,7 @@ hostapd_set_bss_options() { ;; esac [ -n "$sae_require_mfp" ] && append bss_conf "sae_require_mfp=$sae_require_mfp" "$N" + [ -n "$sae_pwe" ] && append bss_conf "sae_pwe=$sae_pwe" "$N" local vlan_possible="" From b154a2f8d37097e51099ed816a0f8142120405e6 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sat, 19 Jun 2021 15:11:23 -0700 Subject: [PATCH 22/31] tools/e2fsprogs: update to 1.46.2 Fix wrong FPIC flag to fix compilation under sparc64 Signed-off-by: Rosen Penev --- tools/e2fsprogs/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/e2fsprogs/Makefile b/tools/e2fsprogs/Makefile index d7c994c338..408097f740 100644 --- a/tools/e2fsprogs/Makefile +++ b/tools/e2fsprogs/Makefile @@ -9,8 +9,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=e2fsprogs PKG_CPE_ID:=cpe:/a:e2fsprogs_project:e2fsprogs -PKG_VERSION:=1.45.6 -PKG_HASH:=ffa7ae6954395abdc50d0f8605d8be84736465afc53b8938ef473fcf7ff44256 +PKG_VERSION:=1.46.2 +PKG_HASH:=23aa093295c94e71ef1be490c4004871c5b01d216a8cb4d111fa6c0aac354168 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz @@ -23,7 +23,7 @@ include $(INCLUDE_DIR)/host-build.mk ifneq ($(shell $(HOSTCC) --version | grep clang),) HOST_CFLAGS += -D__GNUC_PREREQ\(...\)=0 -Dloff_t=off_t endif -HOST_CFLAGS += $(FPIC) +HOST_CFLAGS += $(HOST_FPIC) HOST_CONFIGURE_ARGS += \ --disable-elf-shlibs \ From 3cbdc13bc1367a6fdc9bc2afadfae21b74d7c781 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sat, 19 Jun 2021 21:31:35 -0500 Subject: [PATCH 23/31] tools/squashfskit4: fix compilation under big endian The macro used is for the wrong struct. Just byte swap manually. Refreshed patches. Tested on sparc64. Signed-off-by: Rosen Penev --- tools/squashfskit4/Makefile | 2 +- .../0002-fix-build-failure-against-gcc-10.patch | 8 +++----- tools/squashfskit4/patches/0020-big-endian.patch | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 tools/squashfskit4/patches/0020-big-endian.patch diff --git a/tools/squashfskit4/Makefile b/tools/squashfskit4/Makefile index 9ed10ecef9..1800306d33 100644 --- a/tools/squashfskit4/Makefile +++ b/tools/squashfskit4/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=squashfskit4 PKG_VERSION:=4.14 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=squashfskit-v$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://github.com/squashfskit/squashfskit/releases/download/v$(PKG_VERSION)/ PKG_HASH:=5761aaa3aedc4f7112b708367d891c9abdc1ffea972e3fe47923ddba23984d95 diff --git a/tools/squashfskit4/patches/0002-fix-build-failure-against-gcc-10.patch b/tools/squashfskit4/patches/0002-fix-build-failure-against-gcc-10.patch index 46c6a5ea0f..de77299978 100644 --- a/tools/squashfskit4/patches/0002-fix-build-failure-against-gcc-10.patch +++ b/tools/squashfskit4/patches/0002-fix-build-failure-against-gcc-10.patch @@ -28,16 +28,14 @@ Signed-off-by: Sergei Trofimovich squashfs-tools/mksquashfs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/squashfs-tools/mksquashfs.h b/squashfs-tools/mksquashfs.h -index 1beefef7..b6503063 100644 --- a/squashfs-tools/mksquashfs.h +++ b/squashfs-tools/mksquashfs.h -@@ -143,7 +143,7 @@ struct append_file { - #endif +@@ -133,7 +133,7 @@ struct append_file { + #define BLOCK_OFFSET 2 extern struct cache *reader_buffer, *fragment_buffer, *reserve_cache; -struct cache *bwriter_buffer, *fwriter_buffer; +extern struct cache *bwriter_buffer, *fwriter_buffer; extern struct queue *to_reader, *to_deflate, *to_writer, *from_writer, - *to_frag, *locked_fragment, *to_process_frag; + *locked_fragment, *to_process_frag; extern struct append_file **file_mapping; diff --git a/tools/squashfskit4/patches/0020-big-endian.patch b/tools/squashfskit4/patches/0020-big-endian.patch new file mode 100644 index 0000000000..b388cb4d12 --- /dev/null +++ b/tools/squashfskit4/patches/0020-big-endian.patch @@ -0,0 +1,14 @@ +--- a/squashfs-tools/xz_wrapper.c ++++ b/squashfs-tools/xz_wrapper.c +@@ -192,7 +192,10 @@ static void xz_display_options(void *buf + if(size != sizeof(struct comp_opts)) + goto failed; + +- SQUASHFS_INSWAP_LZMA_COMP_OPTS(comp_opts); ++#if __BYTE_ORDER == __BIG_ENDIAN ++ comp_opts->dictionary_size = inswap_le32(comp_opts->dictionary_size); ++ comp_opts->flags = inswap_le32(comp_opts->flags); ++#endif + + dictionary_size = comp_opts->dictionary_size; + flags = comp_opts->flags; From 5cff6c1abbcb134395bbe032cb5ea9d1c74ec891 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 17 Jun 2021 23:08:50 -0700 Subject: [PATCH 24/31] tools/cmake: update to 3.20.3 + build with Ninja Compile with Ninja. Ninja compiles faster and is more stable with parallel builds. Routines copied from cmake.mk. Speed improves from: Executed in 127.47 secs fish external usr time 17.02 mins 446.00 micros 17.02 mins sys time 1.18 mins 40.00 micros 1.18 mins to: Executed in 118.91 secs fish external usr time 17.28 mins 499.00 micros 17.28 mins sys time 1.13 mins 45.00 micros 1.13 mins Signed-off-by: Rosen Penev --- tools/cmake/Makefile | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tools/cmake/Makefile b/tools/cmake/Makefile index 006934466a..fc7926fda5 100644 --- a/tools/cmake/Makefile +++ b/tools/cmake/Makefile @@ -7,14 +7,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=cmake -PKG_VERSION:=3.19.1 +PKG_VERSION:=3.20.3 PKG_RELEASE:=1 PKG_CPE_ID:=cpe:/a:kitware:cmake PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/Kitware/CMake/releases/download/v$(PKG_VERSION)/ \ https://cmake.org/files/v3.19/ -PKG_HASH:=1d266ea3a76ef650cdcf16c782a317cb4a7aa461617ee941e389cb48738a3aba +PKG_HASH:=4d008ac3461e271fcfac26a05936f77fc7ab64402156fb371d41284851a651b8 HOST_BUILD_PARALLEL:=1 HOST_CONFIGURE_PARALLEL:=1 @@ -29,7 +29,20 @@ HOST_CONFIGURE_VARS += \ HOST_CONFIGURE_ARGS := \ $(if $(MAKE_JOBSERVER),--parallel="$(MAKE_JOBSERVER)") \ - --prefix=$(STAGING_DIR_HOST) + --prefix="$(STAGING_DIR_HOST)" \ + --generator=Ninja + +define Host/Compile/Default + +$(NINJA) -C $(HOST_BUILD_DIR) $(1) +endef + +define Host/Install/Default + +$(NINJA) -C $(HOST_BUILD_DIR) install +endef + +define Host/Uninstall/Default + +$(NINJA) -C $(HOST_BUILD_DIR) uninstall +endef ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) HOST_MAKE_FLAGS += VERBOSE=1 From fcfa60408c37a129b143e4928b6d86e383c2c8f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Mon, 21 Jun 2021 08:49:03 +0200 Subject: [PATCH 25/31] bcm4908: add kmod-gpio-button-hotplug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All bcm4908 devices are expected to have GPIO buttons to make relevant package selected by default. This "fixes" triggering failsafe mode. Signed-off-by: Rafał Miłecki --- target/linux/bcm4908/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/target/linux/bcm4908/Makefile b/target/linux/bcm4908/Makefile index ce5f230ca6..bbe5030b65 100644 --- a/target/linux/bcm4908/Makefile +++ b/target/linux/bcm4908/Makefile @@ -22,6 +22,7 @@ KERNELNAME:=Image dtbs DEFAULT_PACKAGES += \ bcm4908img \ + kmod-gpio-button-hotplug \ kmod-usb-ohci kmod-usb2 kmod-usb3 $(eval $(call BuildTarget)) From 23c3bab9209f984692f8206c0d97758ee223a26f Mon Sep 17 00:00:00 2001 From: Perry Melange Date: Mon, 19 Apr 2021 11:17:10 +0200 Subject: [PATCH 26/31] qos-scripts: add ifbN device before setting the link up commit 50413e1ec83dedaea44558d5f37af5454156a46a replaced ifconfig with ip. In order to set a link state to up, the interface needs to be added first. Fixes: FS#3754 Signed-off-by: Perry Melange [Add Fixes tag] Signed-off-by: Baptiste Jonglez --- package/network/config/qos-scripts/Makefile | 2 +- .../network/config/qos-scripts/files/usr/lib/qos/generate.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package/network/config/qos-scripts/Makefile b/package/network/config/qos-scripts/Makefile index 7d282b2db5..d6e7df1467 100644 --- a/package/network/config/qos-scripts/Makefile +++ b/package/network/config/qos-scripts/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=qos-scripts PKG_VERSION:=1.3.1 -PKG_RELEASE:=2 +PKG_RELEASE:=$(AUTORELEASE) PKG_LICENSE:=GPL-2.0 PKG_MAINTAINER:=Felix Fietkau diff --git a/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh b/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh index 32f15581f8..62e7283633 100755 --- a/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh +++ b/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh @@ -326,7 +326,8 @@ start_interface() { append cstr "$classnr:$prio:$avgrate:$pktsize:$pktdelay:$maxrate:$qdisc:$filter" "$N" done append ${prefix}q "$(tcrules)" "$N" - export dev_${dir}="ip link set $dev up >&- 2>&- + export dev_${dir}="ip link add ${dev} type ifb >&- 2>&- +ip link set $dev up >&- 2>&- tc qdisc del dev $dev root >&- 2>&- tc qdisc add dev $dev root handle 1: hfsc default ${class_default}0 tc class add dev $dev parent 1: classid 1:1 hfsc sc rate ${rate}kbit ul rate ${rate}kbit" From fd0d9909bf50f114d5e7f7cedf53e542de878a2c Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Sun, 20 Jun 2021 20:23:45 -1000 Subject: [PATCH 27/31] build,json: fix generation with empty profiles If the image generation doesn't add any profiles to the output the *profile merge* will fail. To avoid that set an empty profile as fallback. Signed-off-by: Paul Spooren --- scripts/json_overview_image_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/json_overview_image_info.py b/scripts/json_overview_image_info.py index 45c05012b1..db47fd9e42 100755 --- a/scripts/json_overview_image_info.py +++ b/scripts/json_overview_image_info.py @@ -42,7 +42,7 @@ for json_file in work_dir.glob("*.json"): output["profiles"][device_id]["images"].extend(profile["images"]) # make image lists unique by name, keep last/latest -for device_id, profile in output["profiles"].items(): +for device_id, profile in output.get("profiles", {}).items(): profile["images"] = list({e["name"]: e for e in profile["images"]}.values()) From 7b8931678c36c8d8c333b446258a653b1358bf70 Mon Sep 17 00:00:00 2001 From: Denis Kalashnikov Date: Thu, 27 May 2021 11:16:44 +0300 Subject: [PATCH 28/31] ath79: add gpio-latch driver for MikroTik RouterBOARDs This is a slighty modified version of ar71xx gpio-latch driver written by Gabor Juhos . Changes: * DTS support, * New gpio API (gpiod_*). Reviewed-by: Sergey Ryazanov Signed-off-by: Denis Kalashnikov --- .../ath79/files/drivers/gpio/gpio-latch.c | 203 ++++++++++++++++++ .../patches-5.10/939-mikrotik-rb91x.patch | 26 +++ .../patches-5.4/939-mikrotik-rb91x.patch | 23 ++ 3 files changed, 252 insertions(+) create mode 100644 target/linux/ath79/files/drivers/gpio/gpio-latch.c create mode 100644 target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch create mode 100644 target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch diff --git a/target/linux/ath79/files/drivers/gpio/gpio-latch.c b/target/linux/ath79/files/drivers/gpio/gpio-latch.c new file mode 100644 index 0000000000..f3545a663e --- /dev/null +++ b/target/linux/ath79/files/drivers/gpio/gpio-latch.c @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * GPIO latch driver + * + * Copyright (C) 2014 Gabor Juhos + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GPIO_LATCH_DRIVER_NAME "gpio-latch" +#define GPIO_LATCH_LINES 9 + +struct gpio_latch_chip { + struct gpio_chip gc; + struct mutex mutex; + struct mutex latch_mutex; + bool latch_enabled; + int le_gpio; + bool le_active_low; + struct gpio_desc *gpios[GPIO_LATCH_LINES]; +}; + +static inline struct gpio_latch_chip *to_gpio_latch_chip(struct gpio_chip *gc) +{ + return container_of(gc, struct gpio_latch_chip, gc); +} + +static void gpio_latch_lock(struct gpio_latch_chip *glc, bool enable) +{ + mutex_lock(&glc->mutex); + + if (enable) + glc->latch_enabled = true; + + if (glc->latch_enabled) + mutex_lock(&glc->latch_mutex); +} + +static void gpio_latch_unlock(struct gpio_latch_chip *glc, bool disable) +{ + if (glc->latch_enabled) + mutex_unlock(&glc->latch_mutex); + + if (disable) + glc->latch_enabled = true; + + mutex_unlock(&glc->mutex); +} + +static int +gpio_latch_get(struct gpio_chip *gc, unsigned offset) +{ + struct gpio_latch_chip *glc = to_gpio_latch_chip(gc); + int ret; + + gpio_latch_lock(glc, false); + ret = gpiod_get_value(glc->gpios[offset]); + gpio_latch_unlock(glc, false); + + return ret; +} + +static void +gpio_latch_set(struct gpio_chip *gc, unsigned offset, int value) +{ + struct gpio_latch_chip *glc = to_gpio_latch_chip(gc); + bool enable_latch = false; + bool disable_latch = false; + + if (offset == glc->le_gpio) { + enable_latch = value ^ glc->le_active_low; + disable_latch = !enable_latch; + } + + gpio_latch_lock(glc, enable_latch); + gpiod_set_raw_value(glc->gpios[offset], value); + gpio_latch_unlock(glc, disable_latch); +} + +static int +gpio_latch_direction_output(struct gpio_chip *gc, unsigned offset, int value) +{ + struct gpio_latch_chip *glc = to_gpio_latch_chip(gc); + bool enable_latch = false; + bool disable_latch = false; + int ret; + + if (offset == glc->le_gpio) { + enable_latch = value ^ glc->le_active_low; + disable_latch = !enable_latch; + } + + gpio_latch_lock(glc, enable_latch); + ret = gpiod_direction_output_raw(glc->gpios[offset], value); + gpio_latch_unlock(glc, disable_latch); + + return ret; +} + +static int gpio_latch_probe(struct platform_device *pdev) +{ + struct gpio_latch_chip *glc; + struct gpio_chip *gc; + struct device *dev = &pdev->dev; + struct device_node *of_node = dev->of_node; + int i, n; + + glc = devm_kzalloc(dev, sizeof(*glc), GFP_KERNEL); + if (!glc) + return -ENOMEM; + + mutex_init(&glc->mutex); + mutex_init(&glc->latch_mutex); + + n = gpiod_count(dev, NULL); + if (n <= 0) { + dev_err(dev, "failed to get gpios: %d\n", n); + return n; + } else if (n != GPIO_LATCH_LINES) { + dev_err(dev, "expected %d gpios\n", GPIO_LATCH_LINES); + return -EINVAL; + } + + for (i = 0; i < n; i++) { + glc->gpios[i] = devm_gpiod_get_index_optional(dev, NULL, i, + GPIOD_OUT_LOW); + if (IS_ERR(glc->gpios[i])) { + dev_err(dev, "failed to get gpio %d: %d\n", i, + PTR_ERR(glc->gpios[i])); + return PTR_ERR(glc->gpios[i]); + } + } + + glc->le_gpio = 8; + glc->le_active_low = gpiod_is_active_low(glc->gpios[glc->le_gpio]); + + if (!glc->gpios[glc->le_gpio]) { + dev_err(dev, "missing required latch-enable gpio %d\n", + glc->le_gpio); + return -EINVAL; + } + + gc = &glc->gc; + gc->label = GPIO_LATCH_DRIVER_NAME; + gc->can_sleep = true; + gc->base = -1; + gc->ngpio = GPIO_LATCH_LINES; + gc->get = gpio_latch_get; + gc->set = gpio_latch_set; + gc->direction_output = gpio_latch_direction_output; + gc->of_node = of_node; + + platform_set_drvdata(pdev, glc); + + i = gpiochip_add(&glc->gc); + if (i) { + dev_err(dev, "gpiochip_add() failed: %d\n", i); + return i; + } + + return 0; +} + +static int gpio_latch_remove(struct platform_device *pdev) +{ + struct gpio_latch_chip *glc = platform_get_drvdata(pdev); + + gpiochip_remove(&glc->gc); + return 0; +} + +static const struct of_device_id gpio_latch_match[] = { + { .compatible = GPIO_LATCH_DRIVER_NAME }, + {}, +}; + +MODULE_DEVICE_TABLE(of, gpio_latch_match); + +static struct platform_driver gpio_latch_driver = { + .probe = gpio_latch_probe, + .remove = gpio_latch_remove, + .driver = { + .name = GPIO_LATCH_DRIVER_NAME, + .owner = THIS_MODULE, + .of_match_table = gpio_latch_match, + }, +}; + +module_platform_driver(gpio_latch_driver); + +MODULE_DESCRIPTION("GPIO latch driver"); +MODULE_AUTHOR("Gabor Juhos "); +MODULE_AUTHOR("Denis Kalashnikov "); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" GPIO_LATCH_DRIVER_NAME); diff --git a/target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch b/target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch new file mode 100644 index 0000000000..477993c8bf --- /dev/null +++ b/target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch @@ -0,0 +1,26 @@ +--- a/drivers/gpio/Kconfig ++++ b/drivers/gpio/Kconfig +@@ -341,6 +341,13 @@ config GPIO_IXP4XX + IXP4xx series of chips. + + If unsure, say N. ++ ++config GPIO_LATCH ++ tristate "MikroTik RouterBOARD GPIO latch support" ++ depends on ATH79 ++ help ++ GPIO driver for latch on some MikroTik RouterBOARDs. ++ + config GPIO_LOGICVC + tristate "Xylon LogiCVC GPIO support" + depends on MFD_SYSCON && OF +--- a/drivers/gpio/Makefile ++++ b/drivers/gpio/Makefile +@@ -72,6 +72,7 @@ obj-$(CONFIG_GPIO_IT87) += gpio-it87.o + obj-$(CONFIG_GPIO_IXP4XX) += gpio-ixp4xx.o + obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz-ttl.o + obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o ++obj-$(CONFIG_GPIO_LATCH) += gpio-latch.o + obj-$(CONFIG_GPIO_LOGICVC) += gpio-logicvc.o + obj-$(CONFIG_GPIO_LOONGSON1) += gpio-loongson1.o + obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o diff --git a/target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch b/target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch new file mode 100644 index 0000000000..baeaab4611 --- /dev/null +++ b/target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch @@ -0,0 +1,23 @@ +--- a/drivers/gpio/Kconfig ++++ b/drivers/gpio/Kconfig +@@ -130,6 +130,10 @@ config GPIO_ATH79 + Select this option to enable GPIO driver for + Atheros AR71XX/AR724X/AR913X SoC devices. + ++config GPIO_LATCH ++ tristate "MikroTik RouterBOARD GPIO latch support" ++ depends on ATH79 ++ + config GPIO_RASPBERRYPI_EXP + tristate "Raspberry Pi 3 GPIO Expander" + default RASPBERRYPI_FIRMWARE +--- a/drivers/gpio/Makefile ++++ b/drivers/gpio/Makefile +@@ -67,6 +67,7 @@ obj-$(CONFIG_GPIO_IT87) += gpio-it87.o + obj-$(CONFIG_GPIO_IXP4XX) += gpio-ixp4xx.o + obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz-ttl.o + obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o ++obj-$(CONFIG_GPIO_LATCH) += gpio-latch.o + obj-$(CONFIG_GPIO_LOONGSON1) += gpio-loongson1.o + obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o + obj-$(CONFIG_GPIO_LP3943) += gpio-lp3943.o From 820e660cd7463aa6d5ed9d31baf0f3c35596ce57 Mon Sep 17 00:00:00 2001 From: Denis Kalashnikov Date: Thu, 27 May 2021 11:16:45 +0300 Subject: [PATCH 29/31] ath79: add NAND driver for MikroTik RB91xG series Main part is copied from ar71xx original driver rb91x_nand written by Gabor Juhos . What is done: * Support of kernel 5.4 and 5.10, * DTS support, * New gpio API (gpiod_*) support. Reviewed-by: Sergey Ryazanov Signed-off-by: Denis Kalashnikov --- .../files/drivers/mtd/nand/raw/rb91x_nand.c | 375 ++++++++++++++++++ target/linux/ath79/mikrotik/config-default | 1 + .../patches-5.10/939-mikrotik-rb91x.patch | 23 ++ .../patches-5.4/939-mikrotik-rb91x.patch | 21 + 4 files changed, 420 insertions(+) create mode 100644 target/linux/ath79/files/drivers/mtd/nand/raw/rb91x_nand.c diff --git a/target/linux/ath79/files/drivers/mtd/nand/raw/rb91x_nand.c b/target/linux/ath79/files/drivers/mtd/nand/raw/rb91x_nand.c new file mode 100644 index 0000000000..e231944519 --- /dev/null +++ b/target/linux/ath79/files/drivers/mtd/nand/raw/rb91x_nand.c @@ -0,0 +1,375 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * MikroTik RB91x NAND flash driver + * + * Main part is copied from original driver written by Gabor Juhos. + * + * Copyright (C) 2013-2014 Gabor Juhos + */ + +/* + * WARNING: to speed up NAND reading/writing we are working with SoC GPIO + * controller registers directly -- not through standard GPIO API. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* Bit masks for NAND data lines in ath79 gpio 32-bit register */ +#define RB91X_NAND_NRW_BIT BIT(12) +#define RB91X_NAND_DATA_BITS (BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(4) \ + | BIT(13) | BIT(14) | BIT(15)) +#define RB91X_NAND_LOW_DATA_MASK 0x1f +#define RB91X_NAND_HIGH_DATA_MASK 0xe0 +#define RB91X_NAND_HIGH_DATA_SHIFT 8 + +enum rb91x_nand_gpios { + RB91X_NAND_READ,/* Read */ + RB91X_NAND_RDY, /* NAND Ready */ + RB91X_NAND_NCE, /* Chip Enable. Active low */ + RB91X_NAND_CLE, /* Command Latch Enable */ + RB91X_NAND_ALE, /* Address Latch Enable */ + RB91X_NAND_NRW, /* Read/Write. Active low */ + RB91X_NAND_NLE, /* Latch Enable. Active low */ + + RB91X_NAND_GPIOS, +}; + +struct rb91x_nand_drvdata { + struct nand_chip chip; + struct device *dev; + struct gpio_desc **gpio; + void __iomem *ath79_gpio_base; +}; + +static inline void rb91x_nand_latch_lock(struct rb91x_nand_drvdata *drvdata, + int lock) +{ + gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_NLE], lock); +} + +static int rb91x_ooblayout_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + switch (section) { + case 0: + oobregion->offset = 8; + oobregion->length = 3; + return 0; + case 1: + oobregion->offset = 13; + oobregion->length = 3; + return 0; + default: + return -ERANGE; + } +} + +static int rb91x_ooblayout_free(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + switch (section) { + case 0: + oobregion->offset = 0; + oobregion->length = 4; + return 0; + case 1: + oobregion->offset = 4; + oobregion->length = 1; + return 0; + case 2: + oobregion->offset = 6; + oobregion->length = 2; + return 0; + case 3: + oobregion->offset = 11; + oobregion->length = 2; + return 0; + default: + return -ERANGE; + } +} + +static const struct mtd_ooblayout_ops rb91x_nand_ecclayout_ops = { + .ecc = rb91x_ooblayout_ecc, + .free = rb91x_ooblayout_free, +}; + +static void rb91x_nand_write(struct rb91x_nand_drvdata *drvdata, + const u8 *buf, + unsigned len) +{ + void __iomem *base = drvdata->ath79_gpio_base; + u32 oe_reg; + u32 out_reg; + u32 out; + unsigned i; + + rb91x_nand_latch_lock(drvdata, 1); + + oe_reg = __raw_readl(base + AR71XX_GPIO_REG_OE); + out_reg = __raw_readl(base + AR71XX_GPIO_REG_OUT); + + /* Set data lines to output mode */ + __raw_writel(oe_reg & ~(RB91X_NAND_DATA_BITS | RB91X_NAND_NRW_BIT), + base + AR71XX_GPIO_REG_OE); + + out = out_reg & ~(RB91X_NAND_DATA_BITS | RB91X_NAND_NRW_BIT); + for (i = 0; i != len; i++) { + u32 data; + + data = (buf[i] & RB91X_NAND_HIGH_DATA_MASK) << + RB91X_NAND_HIGH_DATA_SHIFT; + data |= buf[i] & RB91X_NAND_LOW_DATA_MASK; + data |= out; + __raw_writel(data, base + AR71XX_GPIO_REG_OUT); + + /* Deactivate WE line */ + data |= RB91X_NAND_NRW_BIT; + __raw_writel(data, base + AR71XX_GPIO_REG_OUT); + /* Flush write */ + __raw_readl(base + AR71XX_GPIO_REG_OUT); + } + + /* Restore registers */ + __raw_writel(out_reg, base + AR71XX_GPIO_REG_OUT); + __raw_writel(oe_reg, base + AR71XX_GPIO_REG_OE); + /* Flush write */ + __raw_readl(base + AR71XX_GPIO_REG_OUT); + + rb91x_nand_latch_lock(drvdata, 0); +} + +static void rb91x_nand_read(struct rb91x_nand_drvdata *drvdata, + u8 *read_buf, + unsigned len) +{ + void __iomem *base = drvdata->ath79_gpio_base; + u32 oe_reg; + u32 out_reg; + unsigned i; + + /* Enable read mode */ + gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_READ], 1); + + rb91x_nand_latch_lock(drvdata, 1); + + /* Save registers */ + oe_reg = __raw_readl(base + AR71XX_GPIO_REG_OE); + out_reg = __raw_readl(base + AR71XX_GPIO_REG_OUT); + + /* Set data lines to input mode */ + __raw_writel(oe_reg | RB91X_NAND_DATA_BITS, + base + AR71XX_GPIO_REG_OE); + + for (i = 0; i < len; i++) { + u32 in; + u8 data; + + /* Activate RE line */ + __raw_writel(RB91X_NAND_NRW_BIT, base + AR71XX_GPIO_REG_CLEAR); + /* Flush write */ + __raw_readl(base + AR71XX_GPIO_REG_CLEAR); + + /* Read input lines */ + in = __raw_readl(base + AR71XX_GPIO_REG_IN); + + /* Deactivate RE line */ + __raw_writel(RB91X_NAND_NRW_BIT, base + AR71XX_GPIO_REG_SET); + + data = (in & RB91X_NAND_LOW_DATA_MASK); + data |= (in >> RB91X_NAND_HIGH_DATA_SHIFT) & + RB91X_NAND_HIGH_DATA_MASK; + + read_buf[i] = data; + } + + /* Restore registers */ + __raw_writel(out_reg, base + AR71XX_GPIO_REG_OUT); + __raw_writel(oe_reg, base + AR71XX_GPIO_REG_OE); + /* Flush write */ + __raw_readl(base + AR71XX_GPIO_REG_OUT); + + rb91x_nand_latch_lock(drvdata, 0); + + /* Disable read mode */ + gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_READ], 0); +} + +static int rb91x_nand_dev_ready(struct nand_chip *chip) +{ + struct rb91x_nand_drvdata *drvdata = (struct rb91x_nand_drvdata *)(chip->priv); + + return gpiod_get_value_cansleep(drvdata->gpio[RB91X_NAND_RDY]); +} + +static void rb91x_nand_cmd_ctrl(struct nand_chip *chip, int cmd, + unsigned int ctrl) +{ + struct rb91x_nand_drvdata *drvdata = chip->priv; + + if (ctrl & NAND_CTRL_CHANGE) { + gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_CLE], + (ctrl & NAND_CLE) ? 1 : 0); + gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_ALE], + (ctrl & NAND_ALE) ? 1 : 0); + gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_NCE], + (ctrl & NAND_NCE) ? 1 : 0); + } + + if (cmd != NAND_CMD_NONE) { + u8 t = cmd; + + rb91x_nand_write(drvdata, &t, 1); + } +} + +static u8 rb91x_nand_read_byte(struct nand_chip *chip) +{ + u8 data = 0xff; + + rb91x_nand_read(chip->priv, &data, 1); + + return data; +} + +static void rb91x_nand_read_buf(struct nand_chip *chip, u8 *buf, int len) +{ + rb91x_nand_read(chip->priv, buf, len); +} + +static void rb91x_nand_write_buf(struct nand_chip *chip, const u8 *buf, int len) +{ + rb91x_nand_write(chip->priv, buf, len); +} + +static void rb91x_nand_release(struct rb91x_nand_drvdata *drvdata) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0) + mtd_device_unregister(nand_to_mtd(&drvdata->chip)); + nand_cleanup(&drvdata->chip); +#else + nand_release(&drvdata->chip); +#endif +} + +static int rb91x_nand_probe(struct platform_device *pdev) +{ + struct rb91x_nand_drvdata *drvdata; + struct mtd_info *mtd; + int r; + struct device *dev = &pdev->dev; + struct gpio_descs *gpios; + + drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; + + platform_set_drvdata(pdev, drvdata); + + gpios = gpiod_get_array(dev, NULL, GPIOD_OUT_LOW); + if (IS_ERR(gpios)) { + dev_err(dev, "failed to get gpios: %d\n", (int)gpios); + return -EINVAL; + } + + if (gpios->ndescs != RB91X_NAND_GPIOS) { + dev_err(dev, "expected %d gpios\n", RB91X_NAND_GPIOS); + return -EINVAL; + } + + drvdata->gpio = gpios->desc; + + gpiod_direction_input(drvdata->gpio[RB91X_NAND_RDY]); + + drvdata->ath79_gpio_base = ioremap(AR71XX_GPIO_BASE, AR71XX_GPIO_SIZE); + + drvdata->dev = dev; + + drvdata->chip.priv = drvdata; + + drvdata->chip.legacy.cmd_ctrl = rb91x_nand_cmd_ctrl; + drvdata->chip.legacy.dev_ready = rb91x_nand_dev_ready; + drvdata->chip.legacy.read_byte = rb91x_nand_read_byte; + drvdata->chip.legacy.write_buf = rb91x_nand_write_buf; + drvdata->chip.legacy.read_buf = rb91x_nand_read_buf; + + drvdata->chip.legacy.chip_delay = 25; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0) + drvdata->chip.ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT; + drvdata->chip.ecc.algo = NAND_ECC_ALGO_HAMMING; +#else + drvdata->chip.ecc.mode = NAND_ECC_SOFT; + drvdata->chip.ecc.algo = NAND_ECC_HAMMING; +#endif + drvdata->chip.options = NAND_NO_SUBPAGE_WRITE; + + r = nand_scan(&drvdata->chip, 1); + if (r) { + dev_err(dev, "nand_scan() failed: %d\n", r); + return r; + } + + mtd = nand_to_mtd(&drvdata->chip); + mtd->dev.parent = dev; + mtd_set_of_node(mtd, dev->of_node); + mtd->owner = THIS_MODULE; + if (mtd->writesize == 512) + mtd_set_ooblayout(mtd, &rb91x_nand_ecclayout_ops); + + r = mtd_device_register(mtd, NULL, 0); + if (r) { + dev_err(dev, "mtd_device_register() failed: %d\n", + r); + goto err_release_nand; + } + + return 0; + +err_release_nand: + rb91x_nand_release(drvdata); + return r; +} + +static int rb91x_nand_remove(struct platform_device *pdev) +{ + struct rb91x_nand_drvdata *drvdata = platform_get_drvdata(pdev); + + rb91x_nand_release(drvdata); + + return 0; +} + +static const struct of_device_id rb91x_nand_match[] = { + { .compatible = "mikrotik,rb91x-nand" }, + {}, +}; + +MODULE_DEVICE_TABLE(of, rb91x_nand_match); + +static struct platform_driver rb91x_nand_driver = { + .probe = rb91x_nand_probe, + .remove = rb91x_nand_remove, + .driver = { + .name = "rb91x-nand", + .owner = THIS_MODULE, + .of_match_table = rb91x_nand_match, + }, +}; + +module_platform_driver(rb91x_nand_driver); + +MODULE_DESCRIPTION("MikrotTik RB91x NAND flash driver"); +MODULE_VERSION(DRV_VERSION); +MODULE_AUTHOR("Gabor Juhos "); +MODULE_AUTHOR("Denis Kalashnikov "); +MODULE_LICENSE("GPL v2"); diff --git a/target/linux/ath79/mikrotik/config-default b/target/linux/ath79/mikrotik/config-default index 1e637bdfd3..efea74a239 100644 --- a/target/linux/ath79/mikrotik/config-default +++ b/target/linux/ath79/mikrotik/config-default @@ -15,6 +15,7 @@ CONFIG_MTD_NAND_AR934X=y CONFIG_MTD_NAND_CORE=y CONFIG_MTD_NAND_ECC=y CONFIG_MTD_NAND_RB4XX=y +CONFIG_MTD_NAND_RB91X=y CONFIG_MTD_RAW_NAND=y CONFIG_MTD_ROUTERBOOT_PARTS=y CONFIG_MTD_SPI_NAND=y diff --git a/target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch b/target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch index 477993c8bf..5bbab93c51 100644 --- a/target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch +++ b/target/linux/ath79/patches-5.10/939-mikrotik-rb91x.patch @@ -24,3 +24,26 @@ obj-$(CONFIG_GPIO_LOGICVC) += gpio-logicvc.o obj-$(CONFIG_GPIO_LOONGSON1) += gpio-loongson1.o obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o +--- a/drivers/mtd/nand/raw/Kconfig ++++ b/drivers/mtd/nand/raw/Kconfig +@@ -571,4 +571,10 @@ config MTD_NAND_RB4XX + Enables support for the NAND flash chip on Mikrotik Routerboard + RB4xx series. + ++config MTD_NAND_RB91X ++ tristate "MikroTik RB91x NAND driver support" ++ depends on ATH79 && MTD_RAW_NAND ++ help ++ Enables support for the NAND flash chip on MikroTik RB91x series. ++ + endif # MTD_RAW_NAND +--- a/drivers/mtd/nand/raw/Makefile ++++ b/drivers/mtd/nand/raw/Makefile +@@ -60,6 +60,7 @@ obj-$(CONFIG_MTD_NAND_CADENCE) += caden + obj-$(CONFIG_MTD_NAND_ARASAN) += arasan-nand-controller.o + obj-$(CONFIG_MTD_NAND_AR934X) += ar934x_nand.o + obj-$(CONFIG_MTD_NAND_RB4XX) += nand_rb4xx.o ++obj-$(CONFIG_MTD_NAND_RB91X) += rb91x_nand.o + + nand-objs := nand_base.o nand_legacy.o nand_bbt.o nand_timings.o nand_ids.o + nand-objs += nand_onfi.o diff --git a/target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch b/target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch index baeaab4611..6d84443945 100644 --- a/target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch +++ b/target/linux/ath79/patches-5.4/939-mikrotik-rb91x.patch @@ -1,3 +1,24 @@ +--- a/drivers/mtd/nand/raw/Kconfig ++++ b/drivers/mtd/nand/raw/Kconfig +@@ -559,4 +559,8 @@ config MTD_NAND_RB4XX + Enables support for the NAND flash chip on Mikrotik Routerboard + RB4xx series. + ++config MTD_NAND_RB91X ++ tristate "MikroTik RB91x NAND driver support" ++ depends on ATH79 && MTD_RAW_NAND ++ + endif # MTD_RAW_NAND +--- a/drivers/mtd/nand/raw/Makefile ++++ b/drivers/mtd/nand/raw/Makefile +@@ -59,6 +59,7 @@ obj-$(CONFIG_MTD_NAND_STM32_FMC2) += stm + obj-$(CONFIG_MTD_NAND_MESON) += meson_nand.o + obj-$(CONFIG_MTD_NAND_AR934X) += ar934x_nand.o + obj-$(CONFIG_MTD_NAND_RB4XX) += nand_rb4xx.o ++obj-$(CONFIG_MTD_NAND_RB91X) += rb91x_nand.o + + nand-objs := nand_base.o nand_legacy.o nand_bbt.o nand_timings.o nand_ids.o + nand-objs += nand_onfi.o --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -130,6 +130,10 @@ config GPIO_ATH79 From 695a1cd53ca52c678b3f837deb1bf30204285360 Mon Sep 17 00:00:00 2001 From: Denis Kalashnikov Date: Thu, 27 May 2021 11:16:46 +0300 Subject: [PATCH 30/31] ath79: add support for MikroTik RouterBOARD 912UAG-2HPnD This board has been supported in the ar71xx. Links: * https://mikrotik.com/product/RB912UAG-2HPnD * https://openwrt.org/toh/hwdata/mikrotik/mikrotik_rb912uag-2hpnd This also supports the 5GHz flavour of the board. Hardware: * SoC: Atheros AR9342, * RAM: DDR 64MB, * SPI NOR: 64KB, * NAND: 128MB, * Ethernet: x1 10/100/1000 port with passive POE in, * Wi-Fi: 802.11 b/g/n, * PCIe, * USB: 2.0 EHCI controller, connected to mPCIe slot and a Type-A port -- both can be used for LTE modem, but only one can be used at any time. * LEDs: 5 general purpose LEDs (led1..led5), power LED, user LED, Ethernet phy LED, * Button, * Beeper. Not working: * Button: it shares gpio line 15 with NAND ALE and NAND IO7, and current drivers doesn't easily support this configuration, * Beeper: it is connected to bit 5 of a serial shift register (tested with sysfs led trigger timer). But kmod-gpio-beeper doesn't work -- we left this as is for now. Flashing: * Use the RouterBOARD Reset button to enable TFTP netboot, boot kernel and initramfs and then perform sysupgrade. * From ar71xx OpenWrt firmware run: $ sysupgrade -F /tmp/ For more info see: https://openwrt.org/toh/mikrotik/common. Co-Developed-by: Koen Vandeputte Reviewed-by: Sergey Ryazanov Signed-off-by: Denis Kalashnikov --- ...9342_mikrotik_routerboard-912uag-2hpnd.dts | 212 ++++++++++++++++++ target/linux/ath79/image/mikrotik.mk | 9 + .../base-files/etc/board.d/02_network | 2 + .../etc/hotplug.d/firmware/10-ath9k-eeprom | 1 + .../base-files/lib/upgrade/platform.sh | 1 + 5 files changed, 225 insertions(+) create mode 100644 target/linux/ath79/dts/ar9342_mikrotik_routerboard-912uag-2hpnd.dts diff --git a/target/linux/ath79/dts/ar9342_mikrotik_routerboard-912uag-2hpnd.dts b/target/linux/ath79/dts/ar9342_mikrotik_routerboard-912uag-2hpnd.dts new file mode 100644 index 0000000000..cc5553acda --- /dev/null +++ b/target/linux/ath79/dts/ar9342_mikrotik_routerboard-912uag-2hpnd.dts @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "ar9344.dtsi" + +#include +#include + +/ { + compatible = "mikrotik,routerboard-912uag-2hpnd", "qca,ar9342"; + model = "MikroTik RouterBOARD 912UAG-2HPnD"; + + aliases { + led-boot = &led_power; + led-failsafe = &led_power; + led-running = &led_power; + led-upgrade = &led_power; + }; + + gpio_latch: gpio_latch { + compatible = "gpio-latch"; + gpio-controller; + #gpio-cells = <2>; + gpios = <&gpio 0 GPIO_ACTIVE_HIGH>, + <&gpio 1 GPIO_ACTIVE_HIGH>, + <&gpio 2 GPIO_ACTIVE_HIGH>, + <&gpio 3 GPIO_ACTIVE_HIGH>, + <0>, /* Not connected */ + <&gpio 13 GPIO_ACTIVE_HIGH>, + <&gpio 14 GPIO_ACTIVE_HIGH>, + <&gpio 15 GPIO_ACTIVE_HIGH>, + <&gpio 11 GPIO_ACTIVE_LOW>; /* Latch Enable */ + }; + + nand_gpio { + compatible = "mikrotik,rb91x-nand"; + + gpios = <&gpio_latch 3 GPIO_ACTIVE_HIGH>, /* Read */ + <&gpio 4 GPIO_ACTIVE_HIGH>, /* Ready (RDY) */ + <&gpio_latch 5 GPIO_ACTIVE_LOW>, /* Chip Enable (nCE) */ + <&gpio_latch 6 GPIO_ACTIVE_HIGH>, /* Command Latch Enable (CLE) */ + <&gpio_latch 7 GPIO_ACTIVE_HIGH>, /* Address Latch Enable (ALE) */ + <&gpio 12 GPIO_ACTIVE_LOW>, /* Read/Write Enable (nRW) */ + <&gpio_latch 8 GPIO_ACTIVE_LOW>; /* Latch Enable (nLE) */ + + partitions { + compatible = "fixed-partitions"; + #size-cells = <1>; + + partition@0 { + label = "booter"; + reg = <0x0 0x0040000>; + read-only; + }; + + partition@40000 { + label = "kernel"; + reg = <0x0040000 0x03c0000>; + }; + + partition@400000 { + label = "ubi"; + reg = <0x0400000 0x7c00000>; + }; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_power: power { + label = "green:power"; + gpios = <&gpio_latch 1 GPIO_ACTIVE_HIGH>; + default-state = "on"; + }; + + user { + label = "green:user"; + gpios = <&gpio_latch 2 GPIO_ACTIVE_HIGH>; + }; + + led1 { + label = "green:led1"; + gpios = <&ssr 0 GPIO_ACTIVE_HIGH>; + }; + + led2 { + label = "green:led2"; + gpios = <&ssr 1 GPIO_ACTIVE_HIGH>; + }; + + led3 { + label = "green:led3"; + gpios = <&ssr 2 GPIO_ACTIVE_HIGH>; + }; + + led4 { + label = "green:led4"; + gpios = <&ssr 3 GPIO_ACTIVE_HIGH>; + }; + + led5 { + label = "green:led5"; + gpios = <&ssr 4 GPIO_ACTIVE_HIGH>; + }; + }; + + gpio-export { + compatible = "gpio-export"; + + usb_power { + gpio-export,name = "power-usb"; + gpio-export,output = <1>; + gpios = <&ssr 6 GPIO_ACTIVE_HIGH>; + }; + + pcie_power { + gpio-export,name = "power-pcie"; + gpio-export,output = <0>; + gpios = <&ssr 7 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&spi { + status = "okay"; + + compatible = "qca,ar7100-spi"; + + cs-gpios = <0>, <&gpio_latch 0 GPIO_ACTIVE_LOW>; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <50000000>; + + partitions { + compatible = "mikrotik,routerboot-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "routerboot"; + reg = <0x0 0x0>; + read-only; + }; + + hard_config: hard_config { + read-only; + }; + + bios { + size = <0x1000>; + read-only; + }; + + soft_config { + }; + }; + }; + + ssr: ssr@1 { + compatible = "fairchild,74hc595"; + gpio-controller; + #gpio-cells = <2>; + registers-number = <1>; + reg = <1>; + spi-max-frequency = <50000000>; + }; +}; + +&mdio0 { + status = "okay"; + + phy-mask = <0>; + + phy0: ethernet-phy@0 { + reg = <0>; + }; +}; + +ð0 { + status = "okay"; + + phy-mode = "rgmii-id"; + phy-handle = <&phy0>; + pll-data = <0x02000000 0x00000101 0x00001313>; + + gmac-config { + device = <&gmac>; + rgmii-gmac0 = <1>; + rgmii-enabled = <1>; + rxd-delay = <1>; + txd-delay = <1>; + }; +}; + +&wmac { + status = "okay"; + qca,no-eeprom; +}; + +&pcie { + status = "okay"; +}; + +&usb { + status = "okay"; +}; + +&usb_phy { + status = "okay"; +}; diff --git a/target/linux/ath79/image/mikrotik.mk b/target/linux/ath79/image/mikrotik.mk index 74f8603b5a..96a94793a9 100644 --- a/target/linux/ath79/image/mikrotik.mk +++ b/target/linux/ath79/image/mikrotik.mk @@ -9,6 +9,15 @@ define Device/mikrotik_routerboard-493g endef TARGET_DEVICES += mikrotik_routerboard-493g +define Device/mikrotik_routerboard-912uag-2hpnd + $(Device/mikrotik_nand) + SOC := ar9342 + DEVICE_MODEL := RouterBOARD 912UAG-2HPnD + DEVICE_PACKAGES += kmod-usb-ehci kmod-usb2 kmod-gpio-beeper + SUPPORTED_DEVICES += rb-912uag-2hpnd +endef +TARGET_DEVICES += mikrotik_routerboard-912uag-2hpnd + define Device/mikrotik_routerboard-921gs-5hpacd-15s $(Device/mikrotik_nand) SOC := qca9558 diff --git a/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network b/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network index 4ffe82588c..d4a32c1e1a 100644 --- a/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network +++ b/target/linux/ath79/mikrotik/base-files/etc/board.d/02_network @@ -14,6 +14,7 @@ ath79_setup_interfaces() ucidef_add_switch "switch1" \ "0@eth1" "1:lan:4" "2:lan:1" "3:lan:2" "4:lan:3" ;; + mikrotik,routerboard-912uag-2hpnd|\ mikrotik,routerboard-921gs-5hpacd-15s|\ mikrotik,routerboard-lhg-2nd|\ mikrotik,routerboard-sxt-5nd-r2|\ @@ -36,6 +37,7 @@ ath79_setup_macs() local mac_base="$(cat /sys/firmware/mikrotik/hard_config/mac_base)" case "$board" in + mikrotik,routerboard-912uag-2hpnd|\ mikrotik,routerboard-921gs-5hpacd-15s|\ mikrotik,routerboard-lhg-2nd|\ mikrotik,routerboard-sxt-5nd-r2|\ diff --git a/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index d9425d4437..78aa35dc69 100644 --- a/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/mikrotik/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -23,6 +23,7 @@ board=$(board_name) case "$FIRMWARE" in "ath9k-eeprom-ahb-18100000.wmac.bin") case $board in + mikrotik,routerboard-912uag-2hpnd|\ mikrotik,routerboard-lhg-2nd|\ mikrotik,routerboard-sxt-5nd-r2|\ mikrotik,routerboard-wapr-2nd) diff --git a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh index 97d388168f..6962c6fdcc 100644 --- a/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh +++ b/target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh @@ -32,6 +32,7 @@ platform_do_upgrade() { case "$board" in mikrotik,routerboard-493g|\ + mikrotik,routerboard-912uag-2hpnd|\ mikrotik,routerboard-921gs-5hpacd-15s|\ mikrotik,routerboard-922uags-5hpacd|\ mikrotik,routerboard-sxt-5nd-r2) From 6561ca1fa510003a19ea7f8800535f12e5098ce2 Mon Sep 17 00:00:00 2001 From: Koen Vandeputte Date: Mon, 17 May 2021 17:52:53 +0200 Subject: [PATCH 31/31] ath79: ar934x: fix mounting issues if subpage is not supported Currently, the option to disable subpage writing is only set when a HW ECC engine is used. Some boards lack a HW ECC engine and use software for that. In this case, this NAND option does not get set when the NAND chip does not support it, resulting in mounting errors. Move the setting of this option to a generic init location so it gets set for all types where required. While at it, also OR the option instead of just setting it so we don't overwrite potential flags being set somewhere else. Before: [ 1.681273] UBI: auto-attach mtd2 [ 1.684669] ubi0: attaching mtd2 [ 1.688877] ubi0 error: validate_ec_hdr: bad VID header offset 2048, expected 512 [ 1.696469] ubi0 error: validate_ec_hdr: bad EC header [ 1.701712] Erase counter header dump: [ 1.705512] magic 0x55424923 [ 1.709322] version 1 [ 1.712330] ec 1 [ 1.715331] vid_hdr_offset 2048 [ 1.718610] data_offset 4096 [ 1.721880] image_seq 1462320675 [ 1.725680] hdr_crc 0x12255a15 After: 1.680917] UBI: auto-attach mtd2 [ 1.684308] ubi0: attaching mtd2 [ 2.954504] random: crng init done [ 3.142813] ubi0: scanning is finished [ 3.163455] ubi0: attached mtd2 (name "ubi", size 124 MiB) [ 3.169069] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes [ 3.176037] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048 [ 3.182942] ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096 [ 3.190013] ubi0: good PEBs: 992, bad PEBs: 0, corrupted PEBs: 0 [ 3.196102] ubi0: user volume: 3, internal volumes: 1, max. volumes count: 128 [ 3.203434] ubi0: max/mean erase counter: 2/0, WL threshold: 4096, image sequence number: 1462320675 [ 3.212700] ubi0: available PEBs: 0, total reserved PEBs: 992, PEBs reserved for bad PEB handling: 20 [ 3.222124] ubi0: background thread "ubi_bgt0d" started, PID 317 [ 3.230246] block ubiblock0_1: created from ubi0:1(rootfs) [ 3.235819] ubiblock: device ubiblock0_1 (rootfs) set to be root filesystem [ 3.256830] VFS: Mounted root (squashfs filesystem) readonly on device 254:0. Signed-off-by: Koen Vandeputte --- target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c b/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c index ddc6d6d882..e040726f44 100644 --- a/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c +++ b/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c @@ -1273,7 +1273,6 @@ static int ar934x_nfc_setup_hwecc(struct ar934x_nfc *nfc) * Writing a subpage separately is not supported, because * the controller only does ECC on full-page accesses. */ - nand->options = NAND_NO_SUBPAGE_WRITE; nand->ecc.size = 512; nand->ecc.bytes = 7; @@ -1332,6 +1331,9 @@ static int ar934x_nfc_attach_chip(struct nand_chip *nand) if (ret) return ret; + if (mtd->writesize == 2048) + nand->options |= NAND_NO_SUBPAGE_WRITE; + #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0) if (nand->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST) { #else