From c3b2efaf24b5ce9b27dfbeafc131e07d033ea53d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Wed, 25 Nov 2020 11:33:55 +0100 Subject: [PATCH 01/41] linux-firmware: ath10k: add board firmware packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Split ath10k firmwares into board and firmware packages. This way we can add dependencies to ath10k-ct firmware packages. Signed-off-by: Álvaro Fernández Rojas --- package/firmware/linux-firmware/Makefile | 3 +- package/firmware/linux-firmware/qca_ath10k.mk | 59 ++++++++++++++----- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/package/firmware/linux-firmware/Makefile b/package/firmware/linux-firmware/Makefile index 877a58d3d6..7fb99dd2ce 100644 --- a/package/firmware/linux-firmware/Makefile +++ b/package/firmware/linux-firmware/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=linux-firmware PKG_VERSION:=20201118 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz @@ -26,6 +26,7 @@ define Package/firmware-default CATEGORY:=Firmware URL:=http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git TITLE:=$(1) + DEPENDS:=$(2) endef define Build/Compile diff --git a/package/firmware/linux-firmware/qca_ath10k.mk b/package/firmware/linux-firmware/qca_ath10k.mk index a7c5b13b84..bd5d21916a 100644 --- a/package/firmware/linux-firmware/qca_ath10k.mk +++ b/package/firmware/linux-firmware/qca_ath10k.mk @@ -9,48 +9,68 @@ define Download/qca99x0-board endef $(eval $(call Download,qca99x0-board)) -Package/ath10k-firmware-qca4019 = $(call Package/firmware-default,ath10k qca4019 firmware) -define Package/ath10k-firmware-qca4019/install +Package/ath10k-board-qca4019 = $(call Package/firmware-default,ath10k qca4019 board firmware) +define Package/ath10k-board-qca4019/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA4019/hw1.0/board-2.bin \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ +endef +$(eval $(call BuildPackage,ath10k-board-qca4019)) +Package/ath10k-firmware-qca4019 = $(call Package/firmware-default,ath10k qca4019 firmware,+ath10k-board-qca4019) +define Package/ath10k-firmware-qca4019/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA4019/hw1.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca4019)) -Package/ath10k-firmware-qca9887 = $(call Package/firmware-default,ath10k qca9887 firmware) +Package/ath10k-board-qca9887 = $(call Package/firmware-default,ath10k qca9887 board firmware) +define Package/ath10k-board-qca9887/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 + $(INSTALL_DATA) \ + $(PKG_BUILD_DIR)/ath10k/QCA9887/hw1.0/board.bin \ + $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca9887)) +Package/ath10k-firmware-qca9887 = $(call Package/firmware-default,ath10k qca9887 firmware,+ath10k-board-qca9887) define Package/ath10k-firmware-qca9887/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9887/hw1.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-5.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/ath10k/QCA9887/hw1.0/board.bin \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca9887)) -Package/ath10k-firmware-qca9888 = $(call Package/firmware-default,ath10k qca9888 firmware) -define Package/ath10k-firmware-qca9888/install +Package/ath10k-board-qca9888 = $(call Package/firmware-default,ath10k qca9888 board firmware) +define Package/ath10k-board-qca9888/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9888/hw2.0/board-2.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca9888)) +Package/ath10k-firmware-qca9888 = $(call Package/firmware-default,ath10k qca9888 firmware,+ath10k-board-qca9888) +define Package/ath10k-firmware-qca9888/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9888/hw2.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca9888)) -Package/ath10k-firmware-qca988x = $(call Package/firmware-default,ath10k qca988x firmware) -define Package/ath10k-firmware-qca988x/install +Package/ath10k-board-qca988x = $(call Package/firmware-default,ath10k qca988x board firmware) +define Package/ath10k-board-qca988x/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA988X/hw2.0/board.bin \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ +endef +$(eval $(call BuildPackage,ath10k-board-qca988x)) +Package/ath10k-firmware-qca988x = $(call Package/firmware-default,ath10k qca988x firmware,+ath10k-board-qca988x) +define Package/ath10k-firmware-qca988x/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA988X/hw2.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin @@ -76,8 +96,8 @@ define Package/ath10k-firmware-qca6174/install endef $(eval $(call BuildPackage,ath10k-firmware-qca6174)) -Package/ath10k-firmware-qca99x0 = $(call Package/firmware-default,ath10k qca99x0 firmware) -define Package/ath10k-firmware-qca99x0/install +Package/ath10k-board-qca99x0 = $(call Package/firmware-default,ath10k qca99x0 board firmware) +define Package/ath10k-board-qca99x0/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 $(INSTALL_DATA) \ $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ @@ -85,21 +105,30 @@ define Package/ath10k-firmware-qca99x0/install $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA99X0/hw2.0/board.bin \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca99x0)) +Package/ath10k-firmware-qca99x0 = $(call Package/firmware-default,ath10k qca99x0 firmware,+ath10k-board-qca99x0) +define Package/ath10k-firmware-qca99x0/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA99X0/hw2.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca99x0)) -Package/ath10k-firmware-qca9984 = $(call Package/firmware-default,ath10k qca9984 firmware) -define Package/ath10k-firmware-qca9984/install +Package/ath10k-board-qca9984 = $(call Package/firmware-default,ath10k qca9984 board firmware) +define Package/ath10k-board-qca9984/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9984/hw1.0/board-2.bin \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin +endef +$(eval $(call BuildPackage,ath10k-board-qca9984)) +Package/ath10k-firmware-qca9984 = $(call Package/firmware-default,ath10k qca9984 firmware,+ath10k-board-qca9984) +define Package/ath10k-firmware-qca9984/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/ath10k/QCA9984/hw1.0/firmware-5.bin \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin endef $(eval $(call BuildPackage,ath10k-firmware-qca9984)) - From 655091ec454a2cfe255bf0ae8e34490d641f8f50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Wed, 25 Nov 2020 11:37:01 +0100 Subject: [PATCH 02/41] ath10k-ct-firmware: switch to linux-firmware board binaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of duplicating board firmware binaries, which are exactly the same as the ones from linux-firmware, add dependencies and remove duplicated downloads. Runtime-tested on ath79 (TP-Link Archer C7 v2) and ipq806x (Netgear R7800). Signed-off-by: Álvaro Fernández Rojas --- package/firmware/ath10k-ct-firmware/Makefile | 172 ++++--------------- 1 file changed, 37 insertions(+), 135 deletions(-) diff --git a/package/firmware/ath10k-ct-firmware/Makefile b/package/firmware/ath10k-ct-firmware/Makefile index cdfd3fb940..83e5563e64 100644 --- a/package/firmware/ath10k-ct-firmware/Makefile +++ b/package/firmware/ath10k-ct-firmware/Makefile @@ -2,77 +2,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ath10k-ct-firmware PKG_VERSION:=2020-07-02 -PKG_RELEASE:=2 +PKG_RELEASE:=3 include $(INCLUDE_DIR)/package.mk -ATH10K_FIRMWARE_REV:=d622d160e9f552ead68d9ae81b715422892dc2ef -ATH10K_FIRMWARE_URL:=@GITHUB/kvalo/ath10k-firmware/$(ATH10K_FIRMWARE_REV) - -QCA9887_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9887-board.bin -define Download/qca9887-board - FILE:=$(QCA9887_BOARD_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA9887/hw1.0 - URL_FILE:=board.bin - HASH:=cf4df099f6ee05c181f55ce17297a1d32c61d725eb96246fd315ad5587c42426 -endef -$(eval $(call Download,qca9887-board)) - -QCA988X_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca988x-board.bin -define Download/qca988x-board - FILE:=$(QCA988X_BOARD_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA988X/hw2.0 - URL_FILE:=board.bin - HASH:=5b5b380333c2dd3b6ce67f30e2f7008f4020bf594970d3b464fd8d4a80fcd880 -endef -$(eval $(call Download,qca988x-board)) - -QCA99X0_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca99x0-board.bin -define Download/qca99x0-board - FILE:=$(QCA99X0_BOARD_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA99X0/hw2.0 - URL_FILE:=boardData_AR900B_CUS239_5G_v2_001.bin - HASH:=3bf7561ee373b369025dcd366d276d038a97d3397ccae41ce841d98a58b30aff -endef -$(eval $(call Download,qca99x0-board)) - -QCA99X0_BOARD2_REV:=ddcec9efd245da9365c474f513a855a55f3ac7fe -QCA99X0_BOARD2_FILE:=ath10k-firmware-$(QCA99X0_BOARD2_REV)-qca99x0-board-2.bin -define Download/qca99x0-board2 - FILE:=$(QCA99X0_BOARD2_FILE) - URL:=https://source.codeaurora.org/quic/qsdk/oss/firmware/ath10k-firmware/plain/ath10k/QCA99X0/hw2.0 - URL_FILE:=board-2.bin?id=$(QCA99X0_BOARD2_REV) - HASH:=03711ac21e60ef59d3815e235eb721c0c22851b5410299411085aa6f2af45401 -endef -$(eval $(call Download,qca99x0-board2)) - -QCA9984_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9984-board-2.bin -define Download/qca9984-board2 - FILE:=$(QCA9984_BOARD2_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA9984/hw1.0 - URL_FILE:=board-2.bin - HASH:=0d6d46cf0467185e3959ce3cb69e2415be6e48ab8a4bee3eb400edbe48cb9c25 -endef -$(eval $(call Download,qca9984-board2)) - -QCA4019_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca4019-board-2.bin -define Download/qca4019-board2 - FILE:=$(QCA4019_BOARD2_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA4019/hw1.0 - URL_FILE:=board-2.bin - HASH:=94b66aa4ddbed5110a96364d3c7b4ebcb320e3ac4e8697660b277e76077bc338 -endef -$(eval $(call Download,qca4019-board2)) - -QCA9888_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9888-board-2.bin -define Download/qca9888-board2 - FILE:=$(QCA9888_BOARD2_FILE) - URL:=$(ATH10K_FIRMWARE_URL)/QCA9888/hw2.0 - URL_FILE:=board-2.bin - HASH:=5b871bb567f64525ca45adb88063211de472015d09e0f9aa3fa61ab71c8fdfd3 -endef -$(eval $(call Download,qca9888-board2)) - CT_FIRMWARE_FILE = $(1)-$($(1)_FIRMWARE_FILE_CT) CT_FIRMWARE_FILE_FULL_HTT = $(1)-$($(1)_FIRMWARE_FILE_CT_FULL_HTT) CT_FIRMWARE_FILE_HTT = $(1)-$($(1)_FIRMWARE_FILE_CT_HTT) @@ -227,6 +160,7 @@ $(Package/ath10k-ct-firmware-default) CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca988x CONFLICTS:=ath10k-firmware-qca988x + DEPENDS:=+ath10k-board-qca988x endef define Package/ath10k-firmware-qca988x-ct-full-htt $(Package/ath10k-ct-firmware-default) @@ -239,7 +173,9 @@ $(Package/ath10k-ct-firmware-default) CONFLICTS:=\ ath10k-firmware-qca988x \ ath10k-firmware-qca988x-ct - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca988x \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9887-ct @@ -249,6 +185,7 @@ $(Package/ath10k-ct-firmware-default) CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca9887 CONFLICTS:=ath10k-firmware-qca9887 + DEPENDS:=+ath10k-board-qca9887 endef define Package/ath10k-firmware-qca9887-ct-full-htt $(Package/ath10k-ct-firmware-default) @@ -261,7 +198,9 @@ $(Package/ath10k-ct-firmware-default) CONFLICTS:=\ ath10k-firmware-qca9887 \ ath10k-firmware-qca9887-ct - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca9887 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca99x0-ct @@ -271,6 +210,7 @@ $(Package/ath10k-ct-firmware-default) CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca99x0 CONFLICTS:=ath10k-firmware-qca99x0 + DEPENDS:=+ath10k-board-qca99x0 endef define Package/ath10k-firmware-qca99x0-ct-full-htt $(Package/ath10k-ct-firmware-default) @@ -284,7 +224,9 @@ $(Package/ath10k-ct-firmware-default) ath10k-firmware-qca99x0 \ ath10k-firmware-qca99x0-ct \ ath10k-firmware-qca99x0-ct-htt - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca99x0 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca99x0-ct-htt $(Package/ath10k-firmware-default) @@ -297,7 +239,9 @@ $(Package/ath10k-firmware-default) CONFLICTS:=\ ath10k-firmware-qca99x0 \ ath10k-firmware-qca99x0-ct - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca99x0 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9984-ct @@ -307,6 +251,7 @@ $(Package/ath10k-ct-firmware-default) CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca9984 CONFLICTS:=ath10k-firmware-qca9984 + DEPENDS:=+ath10k-board-qca9984 endef define Package/ath10k-firmware-qca9984-ct-full-htt $(Package/ath10k-ct-firmware-default) @@ -320,7 +265,9 @@ $(Package/ath10k-ct-firmware-default) ath10k-firmware-qca9984 \ ath10k-firmware-qca9984-ct \ ath10k-firmware-qca9984-ct-htt - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca9984 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9984-ct-htt $(Package/ath10k-firmware-default) @@ -333,7 +280,9 @@ $(Package/ath10k-firmware-default) CONFLICTS:=\ ath10k-firmware-qca9984 \ ath10k-firmware-qca9984-ct - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca9984 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca4019-ct @@ -343,6 +292,7 @@ $(Package/ath10k-ct-firmware-default) CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca4019 CONFLICTS:=ath10k-firmware-qca4019 + DEPENDS:=+ath10k-board-qca4019 endef define Package/ath10k-firmware-qca4019-ct-full-htt $(Package/ath10k-ct-firmware-default) @@ -356,7 +306,9 @@ $(Package/ath10k-ct-firmware-default) ath10k-firmware-qca4019 \ ath10k-firmware-qca4019-ct \ ath10k-firmware-qca4019-ct-htt - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca4019 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca4019-ct-htt $(Package/ath10k-firmware-default) @@ -369,7 +321,9 @@ $(Package/ath10k-firmware-default) CONFLICTS:=\ ath10k-firmware-qca4019 \ ath10k-firmware-qca4019-ct - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca4019 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9888-ct @@ -379,6 +333,7 @@ $(Package/ath10k-ct-firmware-default) CATEGORY:=Firmware PROVIDES:=ath10k-firmware-qca9888 CONFLICTS:=ath10k-firmware-qca9888 + DEPENDS:=+ath10k-board-qca9888 endef define Package/ath10k-firmware-qca9888-ct-full-htt $(Package/ath10k-ct-firmware-default) @@ -392,7 +347,9 @@ $(Package/ath10k-ct-firmware-default) ath10k-firmware-qca9888 \ ath10k-firmware-qca9888-ct \ ath10k-firmware-qca9888-ct-htt - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca9888 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef define Package/ath10k-firmware-qca9888-ct-htt $(Package/ath10k-firmware-default) @@ -405,7 +362,9 @@ $(Package/ath10k-firmware-default) CONFLICTS:=\ ath10k-firmware-qca9888 \ ath10k-firmware-qca9888-ct - DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + DEPENDS:=\ + +ath10k-board-qca9888 \ + +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct endef @@ -555,34 +514,22 @@ define Package/ath10k-firmware-qca9887-ct/install $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9887) \ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9887_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin endef define Package/ath10k-firmware-qca9887-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9887) \ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/ct-firmware-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9887_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin endef define Package/ath10k-firmware-qca988x-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA988X_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA988X) \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-2.bin endef define Package/ath10k-firmware-qca988x-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA988X_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA988X) \ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ct-firmware-2.bin @@ -590,36 +537,18 @@ endef define Package/ath10k-firmware-qca99x0-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA99X0) \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/firmware-5.bin endef define Package/ath10k-firmware-qca99x0-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA99X0) \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/ct-firmware-5.bin endef define Package/ath10k-firmware-qca99x0-ct-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA99X0) \ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/ct-firmware-5.bin @@ -627,27 +556,18 @@ endef define Package/ath10k-firmware-qca9984-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9984) \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin endef define Package/ath10k-firmware-qca9984-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9984) \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/ct-firmware-5.bin endef define Package/ath10k-firmware-qca9984-ct-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9984) \ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/ct-firmware-5.bin @@ -655,27 +575,18 @@ endef define Package/ath10k-firmware-qca4019-ct/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA4019) \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin endef define Package/ath10k-firmware-qca4019-ct-full-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA4019) \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ct-firmware-5.bin endef define Package/ath10k-firmware-qca4019-ct-htt/install $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA4019) \ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ct-firmware-5.bin @@ -686,9 +597,6 @@ define Package/ath10k-firmware-qca9888-ct/install ln -s \ ../../cal-pci-0000:01:00.0.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9888) \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin @@ -698,9 +606,6 @@ define Package/ath10k-firmware-qca9888-ct-full-htt/install ln -s \ ../../cal-pci-0000:01:00.0.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9888) \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/ct-firmware-5.bin @@ -710,9 +615,6 @@ define Package/ath10k-firmware-qca9888-ct-htt/install ln -s \ ../../cal-pci-0000:01:00.0.bin \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin $(INSTALL_DATA) \ $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9888) \ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/ct-firmware-5.bin From 61e381d3228ab49635319bbbc36e2d49611e0860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Wed, 25 Nov 2020 11:39:57 +0100 Subject: [PATCH 03/41] ath10k-firmware: remove unused package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All firmwares were added to linux-firmware, so there's no need to keep this package definitions. Signed-off-by: Álvaro Fernández Rojas --- package/firmware/ath10k-firmware/Makefile | 182 ---------------------- 1 file changed, 182 deletions(-) delete mode 100644 package/firmware/ath10k-firmware/Makefile diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile deleted file mode 100644 index 52c974e9f8..0000000000 --- a/package/firmware/ath10k-firmware/Makefile +++ /dev/null @@ -1,182 +0,0 @@ -# -# Copyright (C) 2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=ath10k-firmware -PKG_SOURCE_DATE:=2019-10-03 -PKG_SOURCE_VERSION:=d622d160e9f552ead68d9ae81b715422892dc2ef -PKG_MIRROR_HASH:=2e504e071c3f896d629c4cfffe7ff4b5f1acdb4fecd3f01e8ff8c73e87a67cc7 -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/kvalo/ath10k-firmware.git - -PKG_MAINTAINER:=Felix Fietkau - -include $(INCLUDE_DIR)/package.mk - -define Package/ath10k-firmware-default - SECTION:=firmware - CATEGORY:=Firmware - URL:=$(PKG_SOURCE_URL) - DEPENDS:= -endef - -define Package/ath10k-firmware-qca9887 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA9887 devices -endef - -define Package/ath10k-firmware-qca9888 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA9888 devices -endef - -define Package/ath10k-firmware-qca988x -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA988x devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca99x0 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA99x0 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca99x0/description -Standard ath10k firmware for QCA99x0 from QCA -This firmware conflicts with the CT 99x0 firmware, so select only -one. -endef - -define Package/ath10k-firmware-qca9984 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA9984 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca4019 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for IPQ/QCA4019 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -define Package/ath10k-firmware-qca6174 -$(Package/ath10k-firmware-default) - TITLE:=ath10k firmware for QCA6174 devices - SECTION:=firmware - CATEGORY:=Firmware -endef - -QCA99X0_BOARD_REV:=ddcec9efd245da9365c474f513a855a55f3ac7fe -QCA99X0_BOARD_FILE:=board-2.bin.$(QCA99X0_BOARD_REV) - -define Download/qca99x0-board - URL:=https://source.codeaurora.org/quic/qsdk/oss/firmware/ath10k-firmware/plain/ath10k/QCA99X0/hw2.0 - URL_FILE:=board-2.bin?id=$(QCA99X0_BOARD_REV) - FILE:=$(QCA99X0_BOARD_FILE) - HASH:=03711ac21e60ef59d3815e235eb721c0c22851b5410299411085aa6f2af45401 -endef -$(eval $(call Download,qca99x0-board)) - -define Build/Compile - -endef - -define Package/ath10k-firmware-qca4019/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA4019/hw1.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA4019/hw1.0/3.5.3/firmware-5.bin_10.4-3.5.3-00057 \ - $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca9887/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9887/hw1.0/10.2.4-1.0/firmware-5.bin_10.2.4-1.0-00047 \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-5.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9887/hw1.0/board.bin \ - $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin -endef - -define Package/ath10k-firmware-qca9888/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9888/hw2.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9888/hw2.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9888/hw2.0/3.5.3/firmware-5.bin_10.4-3.5.3-00053 \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca988x/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA988X/hw2.0/board.bin \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA988X/hw2.0/10.2.4-1.0/firmware-5.bin_10.2.4-1.0-00047 \ - $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca6174/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA6174/hw2.1 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw2.1/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA6174/hw2.1/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw2.1/firmware-5.bin_SW_RM.1.1.1-00157-QCARMSWPZ-1 \ - $(1)/lib/firmware/ath10k/QCA6174/hw2.1/firmware-5.bin - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA6174/hw3.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw3.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA6174/hw3.0/ - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA6174/hw3.0/4.4.1.c1/firmware-6.bin_RM.4.4.1.c1-00042-QCARMSWP-1 \ - $(1)/lib/firmware/ath10k/QCA6174/hw3.0/firmware-6.bin -endef - -define Package/ath10k-firmware-qca99x0/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 - $(INSTALL_DATA) \ - $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA99X0/hw2.0/boardData_AR900B_CUS239_5G_v2_001.bin \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA99X0/hw2.0/firmware-5.bin_10.4.1.00030-1 \ - $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/firmware-5.bin -endef - -define Package/ath10k-firmware-qca9984/install - $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9984/hw1.0/board-2.bin \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9984/hw1.0/3.5.3/firmware-5.bin_10.4-3.5.3-00053 \ - $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin -endef - -#$(eval $(call BuildPackage,ath10k-firmware-qca9887)) -#$(eval $(call BuildPackage,ath10k-firmware-qca9888)) -#$(eval $(call BuildPackage,ath10k-firmware-qca988x)) -#$(eval $(call BuildPackage,ath10k-firmware-qca99x0)) -#$(eval $(call BuildPackage,ath10k-firmware-qca6174)) -#$(eval $(call BuildPackage,ath10k-firmware-qca9984)) -#$(eval $(call BuildPackage,ath10k-firmware-qca4019)) From 6d98c098e48414b0da8aa6c25aa9044a201c1ba6 Mon Sep 17 00:00:00 2001 From: Pavel Chervontsev Date: Mon, 2 Nov 2020 14:50:01 +0300 Subject: [PATCH 04/41] ramips: add support for ASUS RT-N56U B1 Specifications: SoC: MediaTek MT7621ST (880 MHz) FLASH: 16 MiB (Macronix MX25L12835FM2I-10G) RAM: 128 MiB (Nanya NT5CB64M16FP-DH) WiFi: MediaTek MT7603EN bgn 2x2:2 WiFi: MediaTek MT7612EN an 2x2:2 BTN: Reset, WPS LED: - Power - WiFi 2.4 GHz - WiFi 5 GHz - WAN - LAN {1-4} - USB {1-2} UART: UART is present as pin hole next to the aluminium capacitor. 3V3 - RX - GND - TX / 115200-8N1 3V3 is the nearest on the aluminium capacitor and nut hole (pin1). USB: 2 ports POWER: 12VDC, 1.5A (Barrel 5.5x2.1) Installation: Via TFTP: Set your computers IP-Address to 192.168.1.75 Power up the Router with the Reset button pressed. Release the Reset button after 5 seconds. Upload OpenWRT sysupgrade image via TFTP: tftp -4 -v -m binary 192.168.1.1 -c put IMAGE MAC addresses: 0x4 *:98 2g/wan, label 0x22 *:9c 0x28 *:98 0x8004 *:9c 5g/lan Though addresses are written to 0x22 and 0x28, it appears that the vendor firmware actually only uses 0x4 and 0x8004. Thus, we do the same here. Signed-off-by: Pavel Chervontsev [add MAC address overview, add label-mac-device, fix IMAGE_SIZE] Signed-off-by: Adrian Schmutzler --- .../ramips/dts/mt7621_asus_rt-n56u-b1.dts | 181 ++++++++++++++++++ target/linux/ramips/image/mt7621.mk | 11 ++ .../mt7621/base-files/etc/board.d/01_leds | 4 + 3 files changed, 196 insertions(+) create mode 100644 target/linux/ramips/dts/mt7621_asus_rt-n56u-b1.dts diff --git a/target/linux/ramips/dts/mt7621_asus_rt-n56u-b1.dts b/target/linux/ramips/dts/mt7621_asus_rt-n56u-b1.dts new file mode 100644 index 0000000000..b78e594ffd --- /dev/null +++ b/target/linux/ramips/dts/mt7621_asus_rt-n56u-b1.dts @@ -0,0 +1,181 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "mt7621.dtsi" + +#include +#include + +/ { + compatible = "asus,rt-n56u-b1", "mediatek,mt7621-soc"; + model = "ASUS RT-N56U B1"; + + aliases { + label-mac-device = &wan; + led-boot = &led_power; + led-failsafe = &led_power; + led-running = &led_power; + led-upgrade = &led_power; + }; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + leds { + compatible = "gpio-leds"; + + led_power: power { + label = "blue:power"; + gpios = <&gpio 12 GPIO_ACTIVE_LOW>; + }; + + wlan2g { + label = "blue:wlan2g"; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; + + wlan5g { + label = "blue:wlan5g"; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy1tpt"; + }; + + wan { + label = "blue:wan"; + gpios = <&gpio 7 GPIO_ACTIVE_LOW>; + }; + + lan { + label = "blue:lan"; + gpios = <&gpio 16 GPIO_ACTIVE_LOW>; + }; + + usb { + label = "blue:usb"; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + trigger-sources = <&xhci_ehci_port1>, <&ehci_port2>; + linux,default-trigger = "usbport"; + }; + }; + + keys { + compatible = "gpio-keys"; + + wps { + label = "wps"; + gpios = <&gpio 18 GPIO_ACTIVE_HIGH>; + linux,code = ; + debounce-interval = <60>; + }; + + reset { + label = "reset"; + gpios = <&gpio 6 GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <60>; + }; + }; +}; + +&spi0 { + status = "okay"; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <50000000>; + m25p,fast-read; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x30000>; + read-only; + }; + + partition@30000 { + label = "config"; + reg = <0x30000 0x10000>; + read-only; + }; + + factory: partition@40000 { + label = "factory"; + reg = <0x40000 0x10000>; + read-only; + }; + + partition@50000 { + compatible = "denx,uimage"; + label = "firmware"; + reg = <0x50000 0xfb0000>; + }; + }; + }; +}; + +&pcie { + status = "okay"; +}; + +&pcie0 { + wifi@0,0 { + compatible = "mediatek,mt76"; + reg = <0x0000 0 0 0 0>; + mediatek,mtd-eeprom = <&factory 0x8000>; + }; +}; + +&pcie1 { + wifi@0,0 { + compatible = "mediatek,mt76"; + reg = <0x0000 0 0 0 0>; + mediatek,mtd-eeprom = <&factory 0x0000>; + }; +}; + +&gmac0 { + mtd-mac-address = <&factory 0x8004>; +}; + +&switch0 { + ports { + port@0 { + status = "okay"; + label = "lan4"; + }; + + port@1 { + status = "okay"; + label = "lan3"; + }; + + port@2 { + status = "okay"; + label = "lan2"; + }; + + port@3 { + status = "okay"; + label = "lan1"; + }; + + wan: port@4 { + status = "okay"; + label = "wan"; + mtd-mac-address = <&factory 0x4>; + }; + }; +}; + +&state_default { + gpio { + groups = "uart3", "uart2", "jtag", "wdt"; + function = "gpio"; + }; +}; diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index ce9a3ae3d2..7b8a73c1bd 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -188,6 +188,17 @@ define Device/asus_rt-ac85p endef TARGET_DEVICES += asus_rt-ac85p +define Device/asus_rt-n56u-b1 + $(Device/dsa-migration) + DEVICE_VENDOR := ASUS + DEVICE_MODEL := RT-N56U + DEVICE_VARIANT := B1 + IMAGE_SIZE := 16064k + DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 kmod-usb3 \ + kmod-usb-ledtrig-usbport +endef +TARGET_DEVICES += asus_rt-n56u-b1 + define Device/buffalo_wsr-1166dhp $(Device/dsa-migration) $(Device/uimage-lzma-loader) diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds index 3dd2a218b9..cd1814cc2b 100755 --- a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds @@ -8,6 +8,10 @@ board=$(board_name) board_config_update case $board in +asus,rt-n56u-b1) + ucidef_set_led_netdev "lan" "LAN link" "blue:lan" "br-lan" + ucidef_set_led_netdev "wan" "WAN link" "blue:wan" "wan" + ;; d-team,newifi-d2) ucidef_set_led_netdev "internet" "internet" "amber:internet" "wan" ucidef_set_led_netdev "wlan2g" "WiFi 2.4GHz" "blue:wlan2g" "wlan0" From fcea027df6951a9a4b352019a324b6decb3beb51 Mon Sep 17 00:00:00 2001 From: Aleksander Jan Bajkowski Date: Sat, 28 Nov 2020 22:57:06 +0100 Subject: [PATCH 05/41] lantiq: fix build of squashfs images This patch fixes build of squashfs image on lantiq. Currently the FEATURE variable is overwritten by the subtarget. Fixes: FS#3480 Fixes: f1c652337628 ("lantiq: clean up target/subtarget features") Signed-off-by: Aleksander Jan Bajkowski [reformat Fixes:] Signed-off-by: Adrian Schmutzler --- target/linux/lantiq/ase/target.mk | 2 +- target/linux/lantiq/falcon/target.mk | 2 +- target/linux/lantiq/xrx200/target.mk | 2 +- target/linux/lantiq/xway/target.mk | 2 +- target/linux/lantiq/xway_legacy/target.mk | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/target/linux/lantiq/ase/target.mk b/target/linux/lantiq/ase/target.mk index 82a162bbb1..daabbfc74a 100644 --- a/target/linux/lantiq/ase/target.mk +++ b/target/linux/lantiq/ase/target.mk @@ -7,7 +7,7 @@ ARCH:=mips SUBTARGET:=ase BOARDNAME:=Amazon-SE -FEATURES:=atm mips16 small_flash +FEATURES+=atm mips16 small_flash CPU_TYPE:=mips32 DEFAULT_PACKAGES+=kmod-leds-gpio kmod-gpio-button-hotplug \ diff --git a/target/linux/lantiq/falcon/target.mk b/target/linux/lantiq/falcon/target.mk index ddab198849..90f81d25ca 100644 --- a/target/linux/lantiq/falcon/target.mk +++ b/target/linux/lantiq/falcon/target.mk @@ -1,7 +1,7 @@ ARCH:=mips SUBTARGET:=falcon BOARDNAME:=Falcon -FEATURES:=nand +FEATURES+=nand CPU_TYPE:=24kc DEFAULT_PACKAGES+= kmod-leds-gpio \ diff --git a/target/linux/lantiq/xrx200/target.mk b/target/linux/lantiq/xrx200/target.mk index 8497db51ba..f7dc8ac1c7 100644 --- a/target/linux/lantiq/xrx200/target.mk +++ b/target/linux/lantiq/xrx200/target.mk @@ -1,7 +1,7 @@ ARCH:=mips SUBTARGET:=xrx200 BOARDNAME:=XRX200 -FEATURES:=atm nand ramdisk +FEATURES+=atm nand ramdisk CPU_TYPE:=24kc DEFAULT_PACKAGES+=kmod-leds-gpio \ diff --git a/target/linux/lantiq/xway/target.mk b/target/linux/lantiq/xway/target.mk index 9ad240e8ca..cb2a446dea 100644 --- a/target/linux/lantiq/xway/target.mk +++ b/target/linux/lantiq/xway/target.mk @@ -1,7 +1,7 @@ ARCH:=mips SUBTARGET:=xway BOARDNAME:=XWAY -FEATURES:=atm nand ramdisk +FEATURES+=atm nand ramdisk CPU_TYPE:=24kc DEFAULT_PACKAGES+=kmod-leds-gpio kmod-gpio-button-hotplug swconfig diff --git a/target/linux/lantiq/xway_legacy/target.mk b/target/linux/lantiq/xway_legacy/target.mk index 641c590d48..653698d6d7 100644 --- a/target/linux/lantiq/xway_legacy/target.mk +++ b/target/linux/lantiq/xway_legacy/target.mk @@ -1,7 +1,7 @@ ARCH:=mips SUBTARGET:=xway_legacy BOARDNAME:=XWAY Legacy -FEATURES:=atm ramdisk small_flash +FEATURES+=atm ramdisk small_flash CPU_TYPE:=24kc DEFAULT_PACKAGES+=kmod-leds-gpio kmod-gpio-button-hotplug swconfig From 451c1eb8c2a87bbf486f2883518bbb8c1c06848f Mon Sep 17 00:00:00 2001 From: Huangbin Zhan Date: Fri, 27 Nov 2020 19:02:47 +0800 Subject: [PATCH 06/41] base-files: fix alias more to properly detect /usr/bin/more Package more is installed to /usr/bin rather than /bin. Signed-off-by: Huangbin Zhan --- package/base-files/files/etc/shinit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/base-files/files/etc/shinit b/package/base-files/files/etc/shinit index 6b715c1ef9..dccba34b69 100644 --- a/package/base-files/files/etc/shinit +++ b/package/base-files/files/etc/shinit @@ -1,4 +1,4 @@ -[ -x /bin/more ] || alias more=less +[ -x /bin/more ] || [ -x /usr/bin/more ] || alias more=less [ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi alias ll='ls -alF --color=auto' From 81ff23fc91dbbedc374e58afdb4b0b13146c0f15 Mon Sep 17 00:00:00 2001 From: Nick Lowe Date: Wed, 28 Oct 2020 11:04:32 +0000 Subject: [PATCH 07/41] hostapd: Add cell_density data rates option Add a cell_density option to configure data rates for normal, high and very high cell density wireless deployments. The purpose of using a minimum basic/mandatory data rate that is higher than 6 Mb/s, or 5.5 Mb/s (802.11b compatible), in high cell density environments is to transmit broadcast/multicast data frames using less airtime or to reduce management overheads where significant co-channel interference (CCI) exists and cannot be avoided. Caution: Without careful design and validation, configuration of a too high minimum basic/mandatory data rate can sacrifice connection stability or disrupt the ability to reliably connect and authenticate for little to no capacity benefit. This is because this configuration affects the ability of clients to hear and demodulate management, control and broadcast/multicast data frames. Deployments that have not been specifically designed and validated are usually best suited to use 6, 12 and 24 Mb/s as basic/mandatory data rates. Only usually seek to configure a 12 Mb/s, or 11 Mb/s (802.11b compatible), minimum basic/mandatory rate in high cell density deployments that have been designed and validated for this. For many deployments, the minimum basic/mandatory data rate should not be configured above 12 Mb/s to 18 Mb/s, 24 Mb/s or higher. Such a configuration is only appropriate for use in very high cell density deployment scenarios. A cell_density of Very High (3) should only be used where a deployment has a valid use case and has been designed and validated specifically for this use, nearly always with highly directional antennas - an example would be stadium deployments. For example, with a 24 Mb/s OFDM minimum basic/mandatory data rate, approximately a -73 dBm RSSI is required to decode frames. Many clients will not have roamed elsewhere by the time that they experience -73 dBm and, where they do, they frequently may not hear and be able to demodulate beacon, control or broadcast/multicast data frames causing connectivity issues. There is a myth that disabling lower basic/mandatory data rates will improve roaming and avoid sticky clients. For 802.11n, 802.11ac and 802.11ax clients this is not correct as clients will shift to and use lower MCS rates and not to the 802.11b or 802.11g/802.11a rates that are able to be used as basic/mandatory data rates. There is a myth that disabling lower basic/mandatory data rates will ensure that clients only use higher data rates and that better performance is assured. For 802.11n, 802.11ac and 802.11ax clients this is not correct as clients will shift around and use MCS rates and not the 802.11b or 802.11g/802.11a rates that able to be used as basic/mandatory data rates. Cell Density 0 - Disabled (Default) Setting cell_density to 0 does not configure data rates. This is the default. 1 - Normal Cell Density Setting cell_density to 1 configures the basic/mandatory rates to 6, 12 and 24 Mb/s OFDM rates where legacy_rates is 0. Supported rates lower than the minimum basic/mandatory rate are not offered. Setting cell_density to 1 configures the basic/mandatory rates to the 5.5 and 11 Mb/s DSSS rates where legacy_rates is 1. Supported rates lower than the minimum basic/mandatory rate are not offered. 2 - High Cell Density Setting the cell_density to 2 configures the basic/mandatory rates to the 12 and 24 Mb/s OFDM rates where legacy_rates is 0. Supported rates lower than the minimum basic/mandatory rate are not offered. Setting the cell_density to 2 configures the basic/mandatory rates to the 11 Mb/s DSSS rate where legacy_rates is 1. Supported rates lower than the minimum basic/mandatory rate are not offered. 3 - Very High Cell Density Setting the cell_density to 3 configures the basic/mandatory rates to the 24 Mb/s OFDM rate where legacy_rates is 0. Supported rates lower than the minimum basic/mandatory rate are not offered. Setting the cell_density to 3 only has effect where legacy_rates is 0, else this has the same effect as being configured with a cell_density of 2. Where specified, the basic_rate and supported_rates options continue to override both the cell_density and legacy_rates options. Signed-off-by: Nick Lowe --- .../network/services/hostapd/files/hostapd.sh | 67 +++++++++++++++---- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index 5f45ba2e26..a41254d6db 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -98,6 +98,7 @@ hostapd_common_add_device_config() { config_add_int local_pwr_constraint config_add_string require_mode config_add_boolean legacy_rates + config_add_int cell_density config_add_string acs_chan_bias config_add_array hostapd_options @@ -115,7 +116,7 @@ hostapd_prepare_device_config() { local base_cfg= json_get_vars country country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \ - acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode + acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density hostapd_set_log_options base_cfg @@ -124,8 +125,7 @@ hostapd_prepare_device_config() { set_default doth 1 set_default legacy_rates 1 set_default airtime_mode 0 - - [ "$hwmode" = "b" ] && legacy_rates=1 + set_default cell_density 0 [ -n "$country" ] && { append base_cfg "country_code=$country" "$N" @@ -146,16 +146,57 @@ hostapd_prepare_device_config() { json_get_values rate_list supported_rates [ -n "$hwmode" ] && append base_cfg "hw_mode=$hwmode" "$N" - [ "$legacy_rates" -eq 0 ] && set_default require_mode g - - [ "$hwmode" = "g" ] && { - [ "$legacy_rates" -eq 0 ] && set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000" - [ -n "$require_mode" ] && set_default basic_rate_list "6000 12000 24000" - } - - case "$require_mode" in - n) append base_cfg "require_ht=1" "$N";; - ac) append base_cfg "require_vht=1" "$N";; + if [ "$hwmode" = "g" ] || [ "$hwmode" = "a" ]; then + [ -n "$require_mode" ] && legacy_rates=0 + case "$require_mode" in + n) append base_cfg "require_ht=1" "$N";; + ac) append base_cfg "require_vht=1" "$N";; + esac + fi + case "$hwmode" in + b) + if [ "$cell_density" -eq 1 ]; then + set_default rate_list "5500 11000" + set_default basic_rate_list "5500 11000" + elif [ "$cell_density" -ge 2 ]; then + set_default rate_list "11000" + set_default basic_rate_list "11000" + fi + ;; + g) + if [ "$cell_density" -eq 0 ] || [ "$cell_density" -eq 1 ]; then + if [ "$legacy_rates" -eq 0 ]; then + set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "6000 12000 24000" + elif [ "$cell_density" -eq 1 ]; then + set_default rate_list "5500 6000 9000 11000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "5500 11000" + fi + elif [ "$cell_density" -ge 3 ] && [ "$legacy_rates" -ne 0 ] || [ "$cell_density" -eq 2 ]; then + if [ "$legacy_rates" -eq 0 ]; then + set_default rate_list "12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "12000 24000" + else + set_default rate_list "11000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "11000" + fi + elif [ "$cell_density" -ge 3 ]; then + set_default rate_list "24000 36000 48000 54000" + set_default basic_rate_list "24000" + fi + ;; + a) + if [ "$cell_density" -eq 1 ]; then + set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "6000 12000 24000" + elif [ "$cell_density" -eq 2 ]; then + set_default rate_list "12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "12000 24000" + elif [ "$cell_density" -ge 3 ]; then + set_default rate_list "24000 36000 48000 54000" + set_default basic_rate_list "24000" + fi + ;; esac for r in $rate_list; do From f64496f30f2ef97124dc4e13a48ee0de9d51832e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Sun, 29 Nov 2020 19:14:05 +0100 Subject: [PATCH 08/41] generic: ipeth: fix iOS 14 tethering This fixes tethering with devices using iOS 14. Prior to this patch, connections to remote endpoints were not possible while data transfers between the OpenWrt device and the iOS endpoints worked fine. Signed-off-by: David Bauer --- ...t-ipeth-fix-connectivity-with-ios-14.patch | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 target/linux/generic/backport-5.4/315-v5.10-usbnet-ipeth-fix-connectivity-with-ios-14.patch diff --git a/target/linux/generic/backport-5.4/315-v5.10-usbnet-ipeth-fix-connectivity-with-ios-14.patch b/target/linux/generic/backport-5.4/315-v5.10-usbnet-ipeth-fix-connectivity-with-ios-14.patch new file mode 100644 index 0000000000..bb572b3f21 --- /dev/null +++ b/target/linux/generic/backport-5.4/315-v5.10-usbnet-ipeth-fix-connectivity-with-ios-14.patch @@ -0,0 +1,44 @@ +From: Yves-Alexis Perez +Subject: [PATCH] usbnet: ipheth: fix connectivity with iOS 14 +Date: Thu, 19 Nov 2020 18:24:39 +0100 +Archived-At: +List-Post: + +Starting with iOS 14 released in September 2020, connectivity using the +personal hotspot USB tethering function of iOS devices is broken. + +Communication between the host and the device (for example ICMP traffic +or DNS resolution using the DNS service running in the device itself) +works fine, but communication to endpoints further away doesn't work. + +Investigation on the matter shows that UDP and ICMP traffic from the +tethered host is reaching the Internet at all. For TCP traffic there are +exchanges between tethered host and server but packets are modified in +transit leading to impossible communication. + +After some trials Matti Vuorela discovered that reducing the URB buffer +size by two bytes restored the previous behavior. While a better +solution might exist to fix the issue, since the protocol is not +publicly documented and considering the small size of the fix, let's do +that. + +Tested-by: Matti Vuorela +Signed-off-by: Yves-Alexis Perez +Link: https://lore.kernel.org/linux-usb/CAAn0qaXmysJ9vx3ZEMkViv_B19ju-_ExN8Yn_uSefxpjS6g4Lw@mail.gmail.com/ +Link: https://github.com/libimobiledevice/libimobiledevice/issues/1038 +Cc: stable@vger.kernel.org +--- + drivers/net/usb/ipheth.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/usb/ipheth.c ++++ b/drivers/net/usb/ipheth.c +@@ -59,7 +59,7 @@ + #define IPHETH_USBINTF_SUBCLASS 253 + #define IPHETH_USBINTF_PROTO 1 + +-#define IPHETH_BUF_SIZE 1516 ++#define IPHETH_BUF_SIZE 1514 + #define IPHETH_IP_ALIGN 2 /* padding at front of URB */ + #define IPHETH_TX_TIMEOUT (5 * HZ) + From 520403cd4978fd2e3cca389e5009ca5c0ac26db9 Mon Sep 17 00:00:00 2001 From: Jan Pavlinec Date: Fri, 27 Nov 2020 14:49:43 +0100 Subject: [PATCH 09/41] umdns: add check for seccomp list This should fix an issue when user have a router with enabled seccomp and tries to run umdns package which was build with SDK with disabled seccomp support. Signed-off-by: Jan Pavlinec --- package/network/services/umdns/Makefile | 2 +- package/network/services/umdns/files/umdns.init | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package/network/services/umdns/Makefile b/package/network/services/umdns/Makefile index dc032af31b..41945ce007 100644 --- a/package/network/services/umdns/Makefile +++ b/package/network/services/umdns/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=umdns -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_SOURCE_URL=$(PROJECT_GIT)/project/mdnsd.git PKG_SOURCE_PROTO:=git diff --git a/package/network/services/umdns/files/umdns.init b/package/network/services/umdns/files/umdns.init index c0b8cedd79..1ae1cccb03 100644 --- a/package/network/services/umdns/files/umdns.init +++ b/package/network/services/umdns/files/umdns.init @@ -33,7 +33,7 @@ start_service() { procd_open_instance procd_set_param command "$PROG" - procd_set_param seccomp /etc/seccomp/umdns.json + [ -f /etc/seccomp/umdns.json ] && procd_set_param seccomp /etc/seccomp/umdns.json procd_set_param respawn procd_open_trigger procd_add_config_trigger "config.change" "umdns" /etc/init.d/umdns reload From aa6fe00a4804c782b2ad4afc894ea62109bc8d91 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Fri, 27 Nov 2020 23:45:54 +0000 Subject: [PATCH 10/41] busybox: add check for capabilities file Similar to the previous commit adding a check to the init script of umdns, do a similar change for sysntpd, just to be on the safe side. Inspired-by: 520403cd49 ("umdns: add check for seccomp list") Signed-off-by: Daniel Golle --- package/utils/busybox/Makefile | 2 +- package/utils/busybox/files/sysntpd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile index 71bd888c71..38ef4d33bd 100644 --- a/package/utils/busybox/Makefile +++ b/package/utils/busybox/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=busybox PKG_VERSION:=1.31.1 -PKG_RELEASE:=6 +PKG_RELEASE:=7 PKG_FLAGS:=essential PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 diff --git a/package/utils/busybox/files/sysntpd b/package/utils/busybox/files/sysntpd index db5fc6c034..19571a2306 100755 --- a/package/utils/busybox/files/sysntpd +++ b/package/utils/busybox/files/sysntpd @@ -55,7 +55,7 @@ start_ntpd_instance() { procd_append_param command -p $peer done procd_set_param respawn - [ -x /sbin/ujail ] && { + [ -x /sbin/ujail -a -e /etc/capabilities/ntpd.json ] && { procd_add_jail ntpd procd_set_param capabilities /etc/capabilities/ntpd.json procd_set_param user ntp From c71500fd4555307f1d1810cdcfe5e9a0a4b6c469 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Mon, 30 Nov 2020 00:49:36 +0000 Subject: [PATCH 11/41] procd: update to git HEAD f3c3563 jail: improve seccomp BPF generator f67a66f jail: always call cgroups_free() 4625350 jail: seccomp: improve code readability Signed-off-by: Daniel Golle --- package/system/procd/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile index aa68b37f41..09aded15b5 100644 --- a/package/system/procd/Makefile +++ b/package/system/procd/Makefile @@ -12,9 +12,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git -PKG_SOURCE_DATE:=2020-11-27 -PKG_SOURCE_VERSION:=31e0a46ded22a517c03cb899f890207f0db75fb8 -PKG_MIRROR_HASH:=66014cf40e87f45b3dce23b10ed0218fc458ec620e6ab1fd33e4af0c2aca2442 +PKG_SOURCE_DATE:=2020-11-30 +PKG_SOURCE_VERSION:=4625350465744c2446ac0b0dc821699fa1695c81 +PKG_MIRROR_HASH:=f41b1b8e4b48e9f7103e179e9b35b04c55b9146f0aad88caf2e7c2c68844e841 CMAKE_INSTALL:=1 PKG_LICENSE:=GPL-2.0 From b5036569aa1839a75a365e694b1fe2f9cb1983e8 Mon Sep 17 00:00:00 2001 From: Tomasz Maciej Nowak Date: Tue, 1 Dec 2020 18:29:16 +0100 Subject: [PATCH 12/41] mvebu: sysupgrade: use v function for writing logs Sync with x86 target changes. Signed-off-by: Tomasz Maciej Nowak --- target/linux/mvebu/base-files/lib/upgrade/sdcard.sh | 12 ++++++------ .../mvebu/cortexa9/base-files/lib/upgrade/linksys.sh | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh b/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh index ed332bf3e3..0f95b1b659 100644 --- a/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh +++ b/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh @@ -3,7 +3,7 @@ platform_check_image_sdcard() { local diskdev partdev diff export_bootdevice && export_partdevice diskdev 0 || { - echo "Unable to determine upgrade device" + v "Unable to determine upgrade device" return 1 } @@ -20,7 +20,7 @@ platform_check_image_sdcard() { rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image if [ -n "$diff" ]; then - echo "Partition layout has changed. Full image will be written." + v "Partition layout has changed. Full image will be written." ask_bool 0 "Abort" && exit 1 return 0 fi @@ -31,7 +31,7 @@ platform_do_upgrade_sdcard() { local diskdev partdev diff export_bootdevice && export_partdevice diskdev 0 || { - echo "Unable to determine upgrade device" + v "Unable to determine upgrade device" return 1 } @@ -64,15 +64,15 @@ platform_do_upgrade_sdcard() { #iterate over each partition from the image and write it to the boot disk while read part start size; do if export_partdevice partdev $part; then - echo "Writing image to /dev/$partdev..." + v "Writing image to /dev/$partdev..." get_image_dd "$1" of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync else - echo "Unable to find partition $part device, skipped." + v "Unable to find partition $part device, skipped." fi done < /tmp/partmap.image #copy partition uuid - echo "Writing new UUID to /dev/$diskdev..." + v "Writing new UUID to /dev/$diskdev..." get_image_dd "$1" of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync fi diff --git a/target/linux/mvebu/cortexa9/base-files/lib/upgrade/linksys.sh b/target/linux/mvebu/cortexa9/base-files/lib/upgrade/linksys.sh index 6ccfdd0768..c5da471d76 100644 --- a/target/linux/mvebu/cortexa9/base-files/lib/upgrade/linksys.sh +++ b/target/linux/mvebu/cortexa9/base-files/lib/upgrade/linksys.sh @@ -57,7 +57,7 @@ platform_do_upgrade_linksys() { if [ ! -n "$part_label" ] then - echo "cannot find target partition" + v "cannot find target partition" exit 1 fi From 1ac3b53278f77049008ce0e5dcc18d87ef6b9f70 Mon Sep 17 00:00:00 2001 From: Tomasz Maciej Nowak Date: Tue, 1 Dec 2020 18:29:17 +0100 Subject: [PATCH 13/41] mvebu: sysupgrade: write additional information to log output This will explain what is actually occuring on dd invocations. Additionally remove comments for steps which are described by printed statements anyway. Signed-off-by: Tomasz Maciej Nowak --- target/linux/mvebu/base-files/lib/upgrade/sdcard.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh b/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh index 0f95b1b659..caa726b4d5 100644 --- a/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh +++ b/target/linux/mvebu/base-files/lib/upgrade/sdcard.sh @@ -9,7 +9,7 @@ platform_check_image_sdcard() { get_partitions "/dev/$diskdev" bootdisk - #extract the boot sector from the image + v "Extract boot sector from the image" get_image_dd "$1" of=/tmp/image.bs count=1 bs=512b get_partitions /tmp/image.bs image @@ -40,7 +40,7 @@ platform_do_upgrade_sdcard() { if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then get_partitions "/dev/$diskdev" bootdisk - #extract the boot sector from the image + v "Extract boot sector from the image" get_image_dd "$1" of=/tmp/image.bs count=1 bs=512b get_partitions /tmp/image.bs image @@ -59,7 +59,7 @@ platform_do_upgrade_sdcard() { partx -d - "/dev/$diskdev" partx -a - "/dev/$diskdev" else - #write uboot image + v "Writing bootloader to /dev/$diskdev" get_image_dd "$1" of="$diskdev" bs=512 skip=1 seek=1 count=2048 conv=fsync #iterate over each partition from the image and write it to the boot disk while read part start size; do @@ -71,7 +71,6 @@ platform_do_upgrade_sdcard() { fi done < /tmp/partmap.image - #copy partition uuid v "Writing new UUID to /dev/$diskdev..." get_image_dd "$1" of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync fi From 1f6bec228866639632f4d3f869c81ff729b1a28a Mon Sep 17 00:00:00 2001 From: Tomasz Maciej Nowak Date: Tue, 1 Dec 2020 18:29:13 +0100 Subject: [PATCH 14/41] tegra: sysupgrade: use v function for writing logs Sync with x86 target changes. Signed-off-by: Tomasz Maciej Nowak --- .../linux/tegra/base-files/lib/upgrade/platform.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/target/linux/tegra/base-files/lib/upgrade/platform.sh b/target/linux/tegra/base-files/lib/upgrade/platform.sh index 4dd049519c..4b39b3e182 100644 --- a/target/linux/tegra/base-files/lib/upgrade/platform.sh +++ b/target/linux/tegra/base-files/lib/upgrade/platform.sh @@ -6,7 +6,7 @@ platform_check_image() { [ "$#" -gt 1 ] && return 1 export_bootdevice && export_partdevice diskdev 0 || { - echo "Unable to determine upgrade device" + v "Unable to determine upgrade device" return 1 } @@ -23,7 +23,7 @@ platform_check_image() { rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image if [ -n "$diff" ]; then - echo "Partition layout has changed. Full image will be written." + v "Partition layout has changed. Full image will be written." ask_bool 0 "Abort" && exit 1 return 0 fi @@ -43,7 +43,7 @@ platform_do_upgrade() { local diskdev partdev diff export_bootdevice && export_partdevice diskdev 0 || { - echo "Unable to determine upgrade device" + v "Unable to determine upgrade device" return 1 } @@ -79,14 +79,14 @@ platform_do_upgrade() { #iterate over each partition from the image and write it to the boot disk while read part start size; do if export_partdevice partdev $part; then - echo "Writing image to /dev/$partdev..." + v "Writing image to /dev/$partdev..." get_image_dd "$1" of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync else - echo "Unable to find partition $part device, skipped." + v "Unable to find partition $part device, skipped." fi done < /tmp/partmap.image #copy partition uuid - echo "Writing new UUID to /dev/$diskdev..." + v "Writing new UUID to /dev/$diskdev..." get_image_dd "$1" of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync } From 59130180ec860d1b1f33362d64189bfb3a0cc77a Mon Sep 17 00:00:00 2001 From: Tomasz Maciej Nowak Date: Tue, 1 Dec 2020 18:29:15 +0100 Subject: [PATCH 15/41] tegra: sysupgrade: write additional information to log output This will explain what is actually occuring on dd invocations. Additionally remove comments for steps which are described by printed statements anyway. Signed-off-by: Tomasz Maciej Nowak --- target/linux/tegra/base-files/lib/upgrade/platform.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/target/linux/tegra/base-files/lib/upgrade/platform.sh b/target/linux/tegra/base-files/lib/upgrade/platform.sh index 4b39b3e182..3e6ea8a44f 100644 --- a/target/linux/tegra/base-files/lib/upgrade/platform.sh +++ b/target/linux/tegra/base-files/lib/upgrade/platform.sh @@ -12,7 +12,7 @@ platform_check_image() { get_partitions "/dev/$diskdev" bootdisk - #extract the boot sector from the image + v "Extract boot sector from the image" get_image_dd "$1" of=/tmp/image.bs count=1 bs=512b get_partitions /tmp/image.bs image @@ -52,7 +52,7 @@ platform_do_upgrade() { if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then get_partitions "/dev/$diskdev" bootdisk - #extract the boot sector from the image + v "Extract boot sector from the image" get_image_dd "$1" of=/tmp/image.bs count=1 bs=512b get_partitions /tmp/image.bs image @@ -74,7 +74,7 @@ platform_do_upgrade() { return 0 fi - #write uboot image + v "Writing bootloader to /dev/$diskdev" get_image_dd "$1" of="$diskdev" bs=512 skip=1 seek=1 count=4097 conv=fsync,notrunc #iterate over each partition from the image and write it to the boot disk while read part start size; do @@ -86,7 +86,6 @@ platform_do_upgrade() { fi done < /tmp/partmap.image - #copy partition uuid v "Writing new UUID to /dev/$diskdev..." get_image_dd "$1" of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync } From 474aa3237c1bac86b475c3b2955e9501353a87f5 Mon Sep 17 00:00:00 2001 From: Tomasz Maciej Nowak Date: Tue, 1 Dec 2020 18:29:57 +0100 Subject: [PATCH 16/41] ath79: wlr-7100: remove device variant indicator As reported by user, the same image works on both device variants which are v1 001 and v1 002. Signed-off-by: Tomasz Maciej Nowak --- target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts | 2 +- target/linux/ath79/image/generic.mk | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts b/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts index 787b516056..2669db783e 100644 --- a/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts +++ b/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts @@ -6,7 +6,7 @@ #include / { - model = "Sitecom WLR-7100 v1 002 (X7 AC1200)"; + model = "Sitecom WLR-7100 (X7 AC1200)"; compatible = "sitecom,wlr-7100", "qca,ar9344"; aliases { diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index a0d5e7ab01..6ac8691f19 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -1659,7 +1659,6 @@ define Device/sitecom_wlr-7100 SOC := ar1022 DEVICE_VENDOR := Sitecom DEVICE_MODEL := WLR-7100 - DEVICE_VARIANT := v1 002 DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct-smallbuffers kmod-usb2 IMAGES += factory.dlf IMAGE/factory.dlf := append-kernel | pad-to $$$$(BLOCKSIZE) | \ From 760952ad022561931846b02ddfe69c21afead0fe Mon Sep 17 00:00:00 2001 From: Tomasz Maciej Nowak Date: Tue, 1 Dec 2020 18:30:27 +0100 Subject: [PATCH 17/41] ath79: restore sysupgrade support for ja76pf2 and routerstations Because the bug described in FS#2428 has been fixed with bf2870c1d9e1 ("kernel: fix mtd partition erase < parent_erasesize writes") these devices can now safely do sysupgrade. Restore sysupgrade support disabled in: 0cc87b3bacee ("ath79: image: disable sysupgrade images for routerstations and ja76pf2") cc5256a8bfa0 ("ath79: base-files: disable sysupgrade for routerstations and ja76pf2") Signed-off-by: Tomasz Maciej Nowak [move Build block, remove check-size argument, wrap sysupgrade line, make commit message easier to read] Signed-off-by: Adrian Schmutzler --- .../ath79/generic/base-files/lib/upgrade/platform.sh | 4 ++-- target/linux/ath79/image/Makefile | 8 ++++++++ target/linux/ath79/image/generic-ubnt.mk | 4 +++- target/linux/ath79/image/generic.mk | 4 +++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh b/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh index 10756abbaf..f4fca06384 100644 --- a/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh +++ b/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh @@ -45,11 +45,11 @@ platform_do_upgrade() { redboot_fis_do_upgrade "$1" vmlinux_2 ;; jjplus,ja76pf2) - echo "Sysupgrade disabled due bug FS#2428" + redboot_fis_do_upgrade "$1" linux ;; ubnt,routerstation|\ ubnt,routerstation-pro) - echo "Sysupgrade disabled due bug FS#2428" + redboot_fis_do_upgrade "$1" kernel ;; *) default_do_upgrade "$1" diff --git a/target/linux/ath79/image/Makefile b/target/linux/ath79/image/Makefile index 4b4a67fd4d..9bec159cf0 100644 --- a/target/linux/ath79/image/Makefile +++ b/target/linux/ath79/image/Makefile @@ -5,6 +5,14 @@ KERNEL_LOADADDR = 0x80060000 DEVICE_VARS += LOADER_FLASH_OFFS LOADER_TYPE +define Build/combined-image + sh $(TOPDIR)/scripts/combined-image.sh \ + "$(IMAGE_KERNEL)" \ + "$@" \ + "$@.new" + @mv $@.new $@ +endef + define Build/loader-common rm -rf $@.src $(MAKE) -C lzma-loader \ diff --git a/target/linux/ath79/image/generic-ubnt.mk b/target/linux/ath79/image/generic-ubnt.mk index 6e12c34d85..c347bd1cf1 100644 --- a/target/linux/ath79/image/generic-ubnt.mk +++ b/target/linux/ath79/image/generic-ubnt.mk @@ -310,9 +310,11 @@ define Device/ubnt_routerstation_common DEVICE_VENDOR := Ubiquiti SOC := ar7161 IMAGE_SIZE := 16128k - IMAGES := factory.bin + IMAGES += factory.bin IMAGE/factory.bin := append-rootfs | pad-rootfs | mkubntimage | \ check-size + IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | combined-image | \ + append-metadata | check-size KERNEL := kernel-bin | append-dtb | lzma | pad-to $$(BLOCKSIZE) KERNEL_INITRAMFS := kernel-bin | append-dtb endef diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 6ac8691f19..614f9ff0b2 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -1144,9 +1144,11 @@ define Device/jjplus_ja76pf2 DEVICE_VENDOR := jjPlus DEVICE_MODEL := JA76PF2 DEVICE_PACKAGES += -kmod-ath9k -swconfig -wpad-basic-wolfssl -uboot-envtools fconfig - IMAGES := kernel.bin rootfs.bin + IMAGES += kernel.bin rootfs.bin IMAGE/kernel.bin := append-kernel IMAGE/rootfs.bin := append-rootfs | pad-rootfs + IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | combined-image | \ + append-metadata | check-size KERNEL := kernel-bin | append-dtb | lzma | pad-to $$(BLOCKSIZE) KERNEL_INITRAMFS := kernel-bin | append-dtb IMAGE_SIZE := 16000k From f281aca97821ece3990b3082bfb14b6fa63ddec4 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Thu, 26 Nov 2020 23:23:41 -1000 Subject: [PATCH 18/41] README: mv logo.svg include/logo.{png,svg} Some Git hoster (e.g. sr.ht) disable hosting of svg images (xml) to avoid XSS attacks. To show the logo correctly on all code hosters use a "safe" PNG image. Also move logo(s) to include/ folder to lower autocomplete churn with the `logs/` folder. While at it, replace absolute logo path and make it relative, as this may break other code hosters as well. Signed-off-by: Paul Spooren --- README.md | 2 +- include/logo.png | Bin 0 -> 80437 bytes logo.svg => include/logo.svg | 0 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 include/logo.png rename logo.svg => include/logo.svg (100%) diff --git a/README.md b/README.md index 652fe9cd44..8d9a616ac5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![OpenWrt logo](/logo.svg) +![OpenWrt logo](include/logo.png) OpenWrt Project is a Linux operating system targeting embedded devices. Instead of trying to create a single, static firmware, OpenWrt provides a fully diff --git a/include/logo.png b/include/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..de2a2bd097eab3dfb82af6d1e3cb46943a031eab GIT binary patch literal 80437 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⋙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%0Al4s~`d)Z*DLpEqQ0E{mEyIieC zBT}%tR%<~IAE>3Vdn$|C!CZ5QUeNQa1_}NFfBQTlc!o!bqD2Pt1yimT;sE6zmff{ z8DZ`@9uVLER54aROn&T#UnvUW?>L3MmkGp-Lnb6ag}hTC3n!<9^4YJeVJqvb z{hdazcO3_f+SNpHt0vBH1su;PZiIN{cvS1*{8*HDJ<$Tk~b6QFEtIv}m?FtTSECa}_ydJ$c62#>Y=OC&C>SJ515kDE|1Dd!X$|;69juO zFEoJLo~ShDR~z`ujPF|D#mm2?t?WYU{p?ZuGjCM=D{NvC>MfV)s2gz-y|^bqGvetA z{5YOKebuE))I|IKR|BUz_UP>0{uscHh1B2r5Y;=r&1pk`q#mq6qsT?YbJ=9}nfw$* w2i}vcL<{0p`BX@p63YgxQ4;EFL#?`Q@Uvde)e8uubb)|N9i{~>Q!)?z9|A!LMgRZ+ literal 0 HcmV?d00001 diff --git a/logo.svg b/include/logo.svg similarity index 100% rename from logo.svg rename to include/logo.svg From f3926d233dba451831f4dd587fb3d01cc126df5b Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sat, 28 Nov 2020 11:46:47 +0100 Subject: [PATCH 19/41] uboot-envtools: add support for the realtek target On most boards the MAC is located inside the u-boot-env. Signed-off-by: John Crispin --- package/boot/uboot-envtools/files/realtek | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 package/boot/uboot-envtools/files/realtek diff --git a/package/boot/uboot-envtools/files/realtek b/package/boot/uboot-envtools/files/realtek new file mode 100644 index 0000000000..cce0628ffc --- /dev/null +++ b/package/boot/uboot-envtools/files/realtek @@ -0,0 +1,29 @@ +[ -e /etc/config/ubootenv ] && exit 0 + +touch /etc/config/ubootenv + +. /lib/uboot-envtools.sh +. /lib/functions.sh + +board=$(board_name) + +case "$board" in +d-link,dgs-1210-16|\ +d-link,dgs-1210-28|\ +d-link,dgs-1210-10p|\ +zyxel,gs1900-10hp) + idx="$(find_mtd_index u-boot-env)" + [ -n "$idx" ] && \ + ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x400" "0x10000" + ;; +*) + idx="$(find_mtd_index u-boot-env)" + [ -n "$idx" ] && \ + ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x10000" + ;; +esac + +config_load ubootenv +config_foreach ubootenv_add_app_config ubootenv + +exit 0 From 9290539ca9c7b296891b1b386052c0fe308e9a62 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sat, 28 Nov 2020 11:43:47 +0100 Subject: [PATCH 20/41] base-files: allow setting device and bridge macs Add code for setting mac addresses inside board.json and rendering them out to uci. On switches we want to have a unique MAC on each port. With 48 port switches that would require 48 device sections in /etc/config/network. Doing so via board.json is easier. Signed-off-by: John Crispin --- package/base-files/files/bin/config_generate | 33 ++++++++++++++----- .../files/lib/functions/uci-defaults.sh | 18 +++++++++- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate index 79386d41b5..ee3958e733 100755 --- a/package/base-files/files/bin/config_generate +++ b/package/base-files/files/bin/config_generate @@ -9,11 +9,17 @@ CFG=/etc/board.json generate_bridge() { local name=$1 + local macaddr=$2 uci -q batch <<-EOF set network.$name=device set network.$name.name=$name set network.$name.type=bridge EOF + if [ -n "$macaddr" ]; then + uci -q batch <<-EOF + set network.$name.macaddr=$macaddr + EOF + fi } bridge_vlan_id=0 @@ -21,11 +27,11 @@ generate_bridge_vlan() { local name=$1_vlan local device=$2 local ports="$3" - bridge_vlan_id=$((bridge_vlan_id + 1)) + local vlan="$4" uci -q batch <<-EOF set network.$name=bridge-vlan set network.$name.device='$device' - set network.$name.vlan='$bridge_vlan_id' + set network.$name.vlan='$vlan' set network.$name.ports='$ports' EOF } @@ -85,12 +91,12 @@ generate_static_network() { addr_offset=2 generate_network() { - local ifname macaddr protocol type ipaddr netmask + local ifname macaddr protocol type ipaddr netmask vlan local bridge=$2 json_select network json_select "$1" - json_get_vars ifname macaddr protocol ipaddr netmask + json_get_vars ifname macaddr protocol ipaddr netmask vlan json_select .. json_select .. @@ -102,8 +108,12 @@ generate_network() { esac [ -n "$bridge" ] && { - generate_bridge_vlan $1 $bridge "$ifname" - ifname=$bridge.$bridge_vlan_id + if [ -z "$vlan" ]; then + bridge_vlan_id=$((bridge_vlan_id + 1)) + vlan=$bridge_vlan_id + fi + generate_bridge_vlan $1 $bridge "$ifname" $vlan + ifname=$bridge.$vlan type="" } @@ -465,14 +475,21 @@ json_load "$(cat ${CFG})" umask 077 if [ ! -s /etc/config/network ]; then + bridge_name="" touch /etc/config/network generate_static_network json_get_vars bridge - [ -n "$bridge" ] && generate_bridge $bridge + [ -n "$bridge" ] && { + json_select bridge + json_get_vars name macaddr + generate_bridge "$name" "$macaddr" + json_select .. + bridge_name=$name + } json_get_keys keys network - for key in $keys; do generate_network $key $bridge; done + for key in $keys; do generate_network $key $bridge_name; done json_get_keys keys switch for key in $keys; do generate_switch $key; done diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh index 39bbeda24c..2f50cd6bfd 100755 --- a/package/base-files/files/lib/functions/uci-defaults.sh +++ b/package/base-files/files/lib/functions/uci-defaults.sh @@ -91,7 +91,23 @@ ucidef_set_interfaces_lan_wan() { } ucidef_set_bridge_device() { - json_add_string bridge "${1:switch0}" + json_select_object bridge + json_add_string name "${1:switch0}" + json_select .. +} + +ucidef_set_bridge_mac() { + json_select_object bridge + json_add_string macaddr "${1}" + json_select .. +} + +ucidef_set_network_device_mac() { + json_select_object "network-device" + json_select_object "${1}" + json_add_string macaddr "${2}" + json_select .. + json_select .. } _ucidef_add_switch_port() { From 9aa449050297b58a41843bceaff6179458b64003 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sat, 28 Nov 2020 11:44:44 +0100 Subject: [PATCH 21/41] realtek: clean up board.json generation In this new setup the switch is treated as wan, lan1.100 is used as our mgmt vlan. The board mac is applied to eth0, switch and switch.1 The board mac is assigned with the LA bit set to all lan ports while incrementing it. Signed-off-by: John Crispin --- .../realtek/base-files/etc/board.d/02_network | 78 +++++++++++-------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/target/linux/realtek/base-files/etc/board.d/02_network b/target/linux/realtek/base-files/etc/board.d/02_network index dc1465661b..84980c8982 100755 --- a/target/linux/realtek/base-files/etc/board.d/02_network +++ b/target/linux/realtek/base-files/etc/board.d/02_network @@ -4,40 +4,56 @@ . /lib/functions/uci-defaults.sh . /lib/functions/system.sh -rtl838x_setup_switch() -{ - local lan lan_list - - for lan in /sys/class/net/lan*; do - lan_list="$lan_list $(basename $lan)" - done - ucidef_set_bridge_device switch - ucidef_set_interface_lan "$lan_list" +ucidef_set_poe() { + json_select_object poe + json_add_string "budget" "$1" + json_select_array ports + for port in $2; do + json_add_string "" "$port" + done + json_select .. + json_select .. } -rtl838x_setup_macs() -{ - local board="$1" - local lan_mac - local wan_mac - local label_mac - - case $board in - allnet,all-sg8208m|\ - netgear,gs110tpp-v1) - lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr) - label_mac=$lan_mac - esac - - [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac - [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" $wan_mac - [ -n "$label_mac" ] && ucidef_set_label_macaddr $label_mac -} - -board_config_update board=$(board_name) -rtl838x_setup_switch -rtl838x_setup_macs $board +board_config_update + +lan_list="" +for lan in /sys/class/net/lan*; do + lan_list="$lan_list $(basename $lan)" +done +ucidef_set_bridge_device switch +ucidef_set_interface_wan "$lan_list" +ucidef_set_interface "lan" ifname "lan1:t" protocol "static" vlan 100 + +lan_mac="" +wan_mac="" +label_mac="" +case $board in +*) + wan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr) + label_mac=$lan_mac + ;; +esac + +lan_mac=$(macaddr_setbit_la $wan_mac) + +ucidef_set_interface_macaddr "lan" $lan_mac +ucidef_set_interface_macaddr "wan" $wan_mac +ucidef_set_bridge_mac "$wan_mac" +ucidef_set_network_device_mac eth0 $wan_mac +for lan in $lan_list; do + ucidef_set_network_device_mac $lan $lan_mac + lan_mac=$(macaddr_add $lan_mac 1) +done +[ -n "$label_mac" ] && ucidef_set_label_macaddr $label_mac + +case $board in +netgear,gs110tpp-v1) + ucidef_set_poe 130 "$lan_list" + ;; +esac + board_config_flush exit 0 From 1dc5d56ca0d5aba6e4661f6027c4dec68c79b8dd Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sat, 28 Nov 2020 11:50:43 +0100 Subject: [PATCH 22/41] realtek: cleanup package selection Signed-off-by: John Crispin --- target/linux/realtek/Makefile | 3 ++- target/linux/realtek/image/Makefile | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/target/linux/realtek/Makefile b/target/linux/realtek/Makefile index 98fcaf3968..02eefe26fb 100644 --- a/target/linux/realtek/Makefile +++ b/target/linux/realtek/Makefile @@ -22,6 +22,7 @@ include $(INCLUDE_DIR)/target.mk FEATURES := $(filter-out mips16,$(FEATURES)) DEFAULT_PACKAGES += uboot-envtools ethtool kmod-gpio-button-hotplug \ - dnsmasq firewall ip6tables iptables odhcp6c odhcpd-ipv6only + dnsmasq firewall ip6tables iptables odhcp6c odhcpd-ipv6only \ + ip-full ip-bridge tc $(eval $(call BuildTarget)) diff --git a/target/linux/realtek/image/Makefile b/target/linux/realtek/image/Makefile index 4e9dbc350d..51356b3518 100644 --- a/target/linux/realtek/image/Makefile +++ b/target/linux/realtek/image/Makefile @@ -26,7 +26,6 @@ define Device/allnet_all-sg8208m DEVICE_MODEL := ALL-SG8208M UIMAGE_MAGIC := 0x00000006 UIMAGE_NAME := 2.2.2.0 - DEVICE_PACKAGES := ip-full ip-bridge kmod-gpio-button-hotplug tc endef TARGET_DEVICES += allnet_all-sg8208m @@ -34,7 +33,6 @@ define Device/d-link_dgs-1210 SOC := rtl8382 IMAGE_SIZE := 13824k DEVICE_VENDOR := D-Link - DEVICE_PACKAGES := ip-full ip-bridge ethtool tc endef define Device/d-link_dgs-1210-10p @@ -64,7 +62,6 @@ define Device/netgear_gs110tpp-v1 DEVICE_VENDOR := NETGEAR DEVICE_MODEL := GS110TP DEVICE_VARIANT := v1 - DEVICE_PACKAGES := ip-full ip-bridge ethtool tc endef TARGET_DEVICES += netgear_gs110tpp-v1 From cfbda6627956af0cab380d03fd9275574e67921e Mon Sep 17 00:00:00 2001 From: John Crispin Date: Tue, 1 Dec 2020 17:13:39 +0100 Subject: [PATCH 23/41] realtek: add zyxel_gs1900-10hp support Signed-off-by: John Crispin --- target/linux/realtek/config-5.4 | 6 + .../realtek/dts/rtl8380_zyxel_gs1900-10hp.dts | 282 ++++++++++++++++++ target/linux/realtek/image/Makefile | 8 + 3 files changed, 296 insertions(+) create mode 100644 target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dts diff --git a/target/linux/realtek/config-5.4 b/target/linux/realtek/config-5.4 index 0d459237c7..170bcb7632 100644 --- a/target/linux/realtek/config-5.4 +++ b/target/linux/realtek/config-5.4 @@ -81,6 +81,10 @@ CONFIG_HAS_IOPORT_MAP=y CONFIG_HZ=250 CONFIG_HZ_250=y CONFIG_HZ_PERIODIC=y +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_GPIO=y CONFIG_INITRAMFS_SOURCE="" CONFIG_IRQCHIP=y CONFIG_IRQ_DOMAIN=y @@ -95,6 +99,7 @@ CONFIG_LIBFDT=y CONFIG_LOCK_DEBUGGING_SUPPORT=y CONFIG_MDIO_BUS=y CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_I2C=y CONFIG_MEMFD_CREATE=y CONFIG_MFD_SYSCON=y CONFIG_MIGRATION=y @@ -156,6 +161,7 @@ CONFIG_RESET_CONTROLLER=y CONFIG_RTL838X=y CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SFP=y CONFIG_SPI=y CONFIG_SPI_MASTER=y CONFIG_SPI_MEM=y diff --git a/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dts b/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dts new file mode 100644 index 0000000000..4458acee2e --- /dev/null +++ b/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dts @@ -0,0 +1,282 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/dts-v1/; + +#include "rtl838x.dtsi" + +#include +#include + +/ { + compatible = "zyxel,gs1900-10hp", "realtek,rtl838x-soc"; + model = "Zyxel GS1900-10HP Switch"; + + aliases { + led-boot = &led_sys; + led-failsafe = &led_sys; + led-running = &led_sys; + led-upgrade = &led_sys; + }; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + gpio1: rtl8231-gpio { + status = "okay"; + + poe_enable { + gpio-hog; + gpios = <13 0>; + output-high; + }; + }; + + keys { + compatible = "gpio-keys-polled"; + poll-interval = <20>; + + reset { + label = "reset"; + gpios = <&gpio1 3 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_sys: sys { + label = "gs1900:green:sys"; + gpios = <&gpio0 47 GPIO_ACTIVE_HIGH>; + }; + }; + + /* i2c of the left SFP cage: port 9 */ + i2c0: i2c-gpio-0 { + compatible = "i2c-gpio"; + sda-gpios = <&gpio1 24 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + scl-gpios = <&gpio1 25 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + i2c-gpio,delay-us = <2>; + #address-cells = <1>; + #size-cells = <0>; + }; + + sfp0: sfp-p9 { + compatible = "_sff,sfp"; + i2c-bus = <&i2c0>; + los-gpio = <&gpio1 27 GPIO_ACTIVE_HIGH>; + tx-fault-gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 26 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 23 GPIO_ACTIVE_HIGH>; + }; + + /* i2c of the right SFP cage: port 10 */ + i2c1: i2c-gpio-1 { + compatible = "i2c-gpio"; + sda-gpios = <&gpio1 30 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + scl-gpios = <&gpio1 31 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + i2c-gpio,delay-us = <2>; + #address-cells = <1>; + #size-cells = <0>; + }; + + sfp1: sfp-p10 { + compatible = "_sff,sfp"; + i2c-bus = <&i2c1>; + los-gpio = <&gpio1 33 GPIO_ACTIVE_HIGH>; + tx-fault-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 32 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 29 GPIO_ACTIVE_HIGH>; + }; + +}; + +&spi0 { + status = "okay"; + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <10000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x40000>; + read-only; + }; + partition@40000 { + label = "u-boot-env"; + reg = <0x40000 0x10000>; + read-only; + }; + partition@50000 { + label = "u-boot-env2"; + reg = <0x50000 0x10000>; + read-only; + }; + partition@60000 { + label = "jffs"; + reg = <0x60000 0x100000>; + }; + partition@160000 { + label = "jffs2"; + reg = <0x160000 0x100000>; + }; + partition@b260000 { + label = "firmware"; + reg = <0x260000 0x6d0000>; + compatible = "denx,uimage"; + }; + partition@930000 { + label = "runtime2"; + reg = <0x930000 0x6d0000>; + }; + }; + }; +}; + +ðernet0 { + mdio: mdio-bus { + compatible = "realtek,rtl838x-mdio"; + regmap = <ðernet0>; + #address-cells = <1>; + #size-cells = <0>; + + /* Internal phy */ + phy8: ethernet-phy@8 { + reg = <8>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy9: ethernet-phy@9 { + reg = <9>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy10: ethernet-phy@10 { + reg = <10>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy11: ethernet-phy@11 { + reg = <11>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy12: ethernet-phy@12 { + reg = <12>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy13: ethernet-phy@13 { + reg = <13>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy14: ethernet-phy@14 { + reg = <14>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy15: ethernet-phy@15 { + reg = <15>; + compatible = "ethernet-phy-ieee802.3-c22"; + }; + phy24: ethernet-phy@24 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <24>; + }; + phy26: ethernet-phy@26 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <26>; + }; + }; +}; + +&switch0 { + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <8>; + label = "lan1"; + phy-handle = <&phy8>; + phy-mode = "internal"; + }; + port@1 { + reg = <9>; + label = "lan2"; + phy-handle = <&phy9>; + phy-mode = "internal"; + }; + port@2 { + reg = <10>; + label = "lan3"; + phy-handle = <&phy10>; + phy-mode = "internal"; + }; + port@3 { + reg = <11>; + label = "lan4"; + phy-handle = <&phy11>; + phy-mode = "internal"; + }; + port@4 { + reg = <12>; + label = "lan5"; + phy-handle = <&phy12>; + phy-mode = "internal"; + }; + port@5 { + reg = <13>; + label = "lan6"; + phy-handle = <&phy13>; + phy-mode = "internal"; + }; + port@6 { + reg = <14>; + label = "lan7"; + phy-handle = <&phy14>; + phy-mode = "internal"; + }; + port@7 { + reg = <15>; + label = "lan8"; + phy-handle = <&phy15>; + phy-mode = "internal"; + }; + port@24 { + reg = <24>; + label = "lan9"; + phy-mode = "rgmii-id"; + phy-handle = <&phy24>; + sfp = <&sfp0>; + + fixed-link { + speed = <1000>; + full-duplex; + pause; + }; + }; + port@26 { + reg = <26>; + label = "lan10"; + phy-mode = "rgmii-id"; + phy-handle = <&phy26>; + sfp = <&sfp1>; + + fixed-link { + speed = <1000>; + full-duplex; + pause; + }; + }; + port@28 { + ethernet = <ðernet0>; + reg = <28>; + phy-mode = "internal"; + fixed-link { + speed = <1000>; + full-duplex; + }; + }; + }; +}; diff --git a/target/linux/realtek/image/Makefile b/target/linux/realtek/image/Makefile index 51356b3518..85b30aae1e 100644 --- a/target/linux/realtek/image/Makefile +++ b/target/linux/realtek/image/Makefile @@ -65,4 +65,12 @@ define Device/netgear_gs110tpp-v1 endef TARGET_DEVICES += netgear_gs110tpp-v1 +define Device/zyxel_gs1900-10hp + SOC := rtl8380 + IMAGE_SIZE := 6976k + DEVICE_VENDOR := Zyxel + DEVICE_MODEL := GS1900-10HP +endef +TARGET_DEVICES += zyxel_gs1900-10hp + $(eval $(call BuildImage)) From 9aabd934a98ca894dc178d875f6ca6ea14ce427d Mon Sep 17 00:00:00 2001 From: John Crispin Date: Wed, 2 Dec 2020 10:41:19 +0100 Subject: [PATCH 24/41] realtek: fix SFP ports on the dlink 10port switch Signed-off-by: John Crispin --- .../realtek/dts/rtl8382_d-link_dgs-1210-10p.dts | 4 ++-- target/linux/realtek/dts/rtl838x.dtsi | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/target/linux/realtek/dts/rtl8382_d-link_dgs-1210-10p.dts b/target/linux/realtek/dts/rtl8382_d-link_dgs-1210-10p.dts index 9987316c21..05010ffc0d 100644 --- a/target/linux/realtek/dts/rtl8382_d-link_dgs-1210-10p.dts +++ b/target/linux/realtek/dts/rtl8382_d-link_dgs-1210-10p.dts @@ -132,8 +132,8 @@ SWITCH_PORT(13, 6, internal) SWITCH_PORT(14, 7, internal) SWITCH_PORT(15, 8, internal) - SWITCH_PORT(24, 9, internal) - SWITCH_PORT(26, 10, internal) + SWITCH_SFP_PORT(24, 9, rgmii-id) + SWITCH_SFP_PORT(26, 10, rgmii-id) port@28 { ethernet = <ðernet0>; diff --git a/target/linux/realtek/dts/rtl838x.dtsi b/target/linux/realtek/dts/rtl838x.dtsi index f48d759a10..15d518578b 100644 --- a/target/linux/realtek/dts/rtl838x.dtsi +++ b/target/linux/realtek/dts/rtl838x.dtsi @@ -35,6 +35,18 @@ phy-mode = #m ; \ }; +#define SWITCH_SFP_PORT(n, s, m) \ + port@##n { \ + reg = <##n>; \ + label = SWITCH_PORT_LABEL(s) ; \ + phy-handle = <&phy##n>; \ + phy-mode = #m ; \ + fixed-link { \ + speed = <1000>; \ + full-duplex; \ + }; \ + }; + / { #address-cells = <1>; #size-cells = <1>; From 36db12b883e581c9cdbb79395c2d9316d820cbbd Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 2 Dec 2020 12:08:17 +0100 Subject: [PATCH 25/41] netifd: update to the latest version d6bd1047d004 vlandev: dump vlan id in device status e0c838bd06a6 vlandev: support bridge-vlan aliases in the vid config parameter 574dc4a17105 system-dummy: print configured mac address 14f0e8ff928f system-linux: simplify mask check in system_if_apply_settings 524310276f20 system-linux: move device settings handling to device.c 42c48866f1c1 config: parse default mac address from board.json Signed-off-by: Felix Fietkau --- package/network/config/netifd/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile index c66f43b050..32aa350a21 100644 --- a/package/network/config/netifd/Makefile +++ b/package/network/config/netifd/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git -PKG_SOURCE_DATE:=2020-11-23 -PKG_SOURCE_VERSION:=3abe1fc87151fae570fc1232053c73d1a5505664 -PKG_MIRROR_HASH:=323221cbcc7ee57e6a38e979bdebfbf13cdfddf82ea51bbc30004c07b658bb8a +PKG_SOURCE_DATE:=2020-11-30 +PKG_SOURCE_VERSION:=42c48866f1c1fce068f41536baa8dd2e80fc08d7 +PKG_MIRROR_HASH:=7eeec56364f1e6de8f0917f16ae933ca9bd0298e6a68e330025282164ea9af63 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 From f330f991c1dcb483a1966d2d194afc2a40cd30fd Mon Sep 17 00:00:00 2001 From: Thomas Huehn Date: Wed, 2 Dec 2020 11:24:07 +0100 Subject: [PATCH 26/41] ath79: enable LNA for all ar9344 TPLink CPE devices The TPLink CPE devices CPE210/CPE510 based on ar9344 have a build-in Low Noise Amplifier on both of the 2x2 mimo rx chains. This patch activates those two LNAs in the respective receiving chains and hence improves the RX sensitivity by about 20dB. Tested on CPE510 v2 & v3. Signed-off-by: Thomas Huehn Acked-by: Robert Marko --- target/linux/ath79/dts/ar9344_tplink_cpe.dtsi | 16 ++++++++++++++++ .../linux/ath79/dts/ar9344_tplink_cpe_2port.dtsi | 16 ---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi b/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi index 6917e5e955..4e9401e60b 100644 --- a/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi +++ b/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi @@ -114,3 +114,19 @@ ð1 { status = "okay"; }; + +&gpio { + gpio_ext_lna0 { + gpio-hog; + gpios = <18 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "tp-link:ext:lna0"; + }; + + gpio_ext_lna1 { + gpio-hog; + gpios = <19 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "tp-link:ext:lna1"; + }; +}; diff --git a/target/linux/ath79/dts/ar9344_tplink_cpe_2port.dtsi b/target/linux/ath79/dts/ar9344_tplink_cpe_2port.dtsi index 1fce869160..e7d33ab22b 100644 --- a/target/linux/ath79/dts/ar9344_tplink_cpe_2port.dtsi +++ b/target/linux/ath79/dts/ar9344_tplink_cpe_2port.dtsi @@ -44,22 +44,6 @@ }; }; -&gpio { - gpio_ext_lna0 { - gpio-hog; - gpios = <18 0>; - output-high; - line-name = "tp-link:ext:lna0"; - }; - - gpio_ext_lna1 { - gpio-hog; - gpios = <19 0>; - output-high; - line-name = "tp-link:ext:lna1"; - }; -}; - ð1 { mtd-mac-address = <&info 0x8>; From eefbcf2915243bdedca37ba3df6bc505ffbc2e58 Mon Sep 17 00:00:00 2001 From: Sieng Piaw Liew Date: Mon, 30 Nov 2020 11:32:18 +0800 Subject: [PATCH 27/41] bcm63xx: batch process RX path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use netif_receive_skb_list to batch process skb in RX. Tested on BCM6328 320 MHz using iperf3 -M 512, increasing performance by 12.5%. Before: [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-30.00 sec 120 MBytes 33.7 Mbits/sec 277 sender [ 4] 0.00-30.00 sec 120 MBytes 33.5 Mbits/sec receiver After: [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-30.00 sec 136 MBytes 37.9 Mbits/sec 203 sender [ 4] 0.00-30.00 sec 135 MBytes 37.7 Mbits/sec receiver Signed-off-by: Sieng Piaw Liew [Amend commit description] Signed-off-by: Álvaro Fernández Rojas --- ...0-bcm63xx_enet-batch_process_RX_path.patch | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 target/linux/bcm63xx/patches-5.4/440-bcm63xx_enet-batch_process_RX_path.patch diff --git a/target/linux/bcm63xx/patches-5.4/440-bcm63xx_enet-batch_process_RX_path.patch b/target/linux/bcm63xx/patches-5.4/440-bcm63xx_enet-batch_process_RX_path.patch new file mode 100644 index 0000000000..0a22d8c651 --- /dev/null +++ b/target/linux/bcm63xx/patches-5.4/440-bcm63xx_enet-batch_process_RX_path.patch @@ -0,0 +1,53 @@ +From 1606f78dc82e4f311ca5844a0605a62cd141a072 Mon Sep 17 00:00:00 2001 +From: Sieng Piaw Liew +Date: Mon, 30 Nov 2020 11:07:47 +0800 +Subject: [PATCH] bcm63xx: batch process RX path + +Use netif_receive_skb_list to batch process skb in RX. +Tested on BCM6328 320 MHz using iperf3 -M 512, increasing performance +by 12.5%. + +Before: +[ ID] Interval Transfer Bandwidth Retr +[ 4] 0.00-30.00 sec 120 MBytes 33.7 Mbits/sec 277 sender +[ 4] 0.00-30.00 sec 120 MBytes 33.5 Mbits/sec receiver + +After: +[ ID] Interval Transfer Bandwidth Retr +[ 4] 0.00-30.00 sec 136 MBytes 37.9 Mbits/sec 203 sender +[ 4] 0.00-30.00 sec 135 MBytes 37.7 Mbits/sec receiver + +Signed-off-by: Sieng Piaw Liew +--- + drivers/net/ethernet/broadcom/bcm63xx_enet.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c ++++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c +@@ -301,10 +301,12 @@ static int bcm_enet_receive_queue(struct + struct bcm_enet_priv *priv; + struct device *kdev; + int processed; ++ struct list_head rx_list; + + priv = netdev_priv(dev); + kdev = &priv->pdev->dev; + processed = 0; ++ INIT_LIST_HEAD(&rx_list); + + /* don't scan ring further than number of refilled + * descriptor */ +@@ -393,10 +395,12 @@ static int bcm_enet_receive_queue(struct + skb->protocol = eth_type_trans(skb, dev); + dev->stats.rx_packets++; + dev->stats.rx_bytes += len; +- netif_receive_skb(skb); ++ list_add_tail(&skb->list, &rx_list); + + } while (--budget > 0); + ++ netif_receive_skb_list(&rx_list); ++ + if (processed || !priv->rx_desc_count) { + bcm_enet_refill_rx(dev); + From ba74da5b99a1e8239af896378fbbc68f8761cd15 Mon Sep 17 00:00:00 2001 From: Sieng Piaw Liew Date: Mon, 2 Nov 2020 11:12:19 +0800 Subject: [PATCH 28/41] bcm63xx: enetsw: switch to netdev_alloc_skb_ip_align MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Increases packet processing performance by 30%. Tested on BCM6328 320 MHz and iperf3 -M 512 for packet/sec performance. Before: [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-30.00 sec 120 MBytes 33.7 Mbits/sec 277 sender [ 4] 0.00-30.00 sec 120 MBytes 33.5 Mbits/sec receiver After: [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-30.00 sec 155 MBytes 43.3 Mbits/sec 354 sender [ 4] 0.00-30.00 sec 154 MBytes 43.1 Mbits/sec receiver Signed-off-by: Sieng Piaw Liew [Merge patches, amend commit and add patch description] Signed-off-by: Álvaro Fernández Rojas --- ...1-bcm63xx_enet-alloc_rx_skb_ip_align.patch | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 target/linux/bcm63xx/patches-5.4/441-bcm63xx_enet-alloc_rx_skb_ip_align.patch diff --git a/target/linux/bcm63xx/patches-5.4/441-bcm63xx_enet-alloc_rx_skb_ip_align.patch b/target/linux/bcm63xx/patches-5.4/441-bcm63xx_enet-alloc_rx_skb_ip_align.patch new file mode 100644 index 0000000000..ade99beacc --- /dev/null +++ b/target/linux/bcm63xx/patches-5.4/441-bcm63xx_enet-alloc_rx_skb_ip_align.patch @@ -0,0 +1,37 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Sieng Piaw Liew +Date: Mon, 30 Nov 2020 11:07:47 +0800 +Subject: [PATCH] bcm63xx: enetsw: switch to netdev_alloc_skb_ip_align + +Increases packet processing performance by 30%. +Tested on BCM6328 320 MHz and iperf3 -M 512 for packet/sec performance. + +Before: +[ ID] Interval Transfer Bandwidth Retr +[ 4] 0.00-30.00 sec 120 MBytes 33.7 Mbits/sec 277 sender +[ 4] 0.00-30.00 sec 120 MBytes 33.5 Mbits/sec receiver + +After: +[ ID] Interval Transfer Bandwidth Retr +[ 4] 0.00-30.00 sec 155 MBytes 43.3 Mbits/sec 354 sender +[ 4] 0.00-30.00 sec 154 MBytes 43.1 Mbits/sec receiver + +Signed-off-by: Sieng Piaw Liew +--- + drivers/net/ethernet/broadcom/bcm63xx_enet.c | 6 +++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c ++++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c +@@ -239,7 +239,10 @@ static int bcm_enet_refill_rx(struct net + desc = &priv->rx_desc_cpu[desc_idx]; + + if (!priv->rx_skb[desc_idx]) { +- skb = netdev_alloc_skb(dev, priv->rx_skb_size); ++ if (priv->enet_is_sw) ++ skb = netdev_alloc_skb_ip_align(dev, priv->rx_skb_size); ++ else ++ skb = netdev_alloc_skb(dev, priv->rx_skb_size); + if (!skb) + break; + priv->rx_skb[desc_idx] = skb; From cea169702c33b472eeade5f084c74ac6ed01440e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Sun, 29 Nov 2020 14:48:15 +0100 Subject: [PATCH 29/41] ath79: remove ar934x MDIO reset from MAC node Remove the MDIO reset from the MAC mode for the AR934x SoC family. The reset is currently also defined for the MDIO node, where the reset is acquired exclusively. In case the ethernet node is enabled, this triggers a warning, as the reset is already acquired by the MAC. Signed-off-by: David Bauer --- target/linux/ath79/dts/ar934x.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/linux/ath79/dts/ar934x.dtsi b/target/linux/ath79/dts/ar934x.dtsi index b1339ab36a..aa1003cdb5 100644 --- a/target/linux/ath79/dts/ar934x.dtsi +++ b/target/linux/ath79/dts/ar934x.dtsi @@ -272,8 +272,8 @@ ð1 { compatible = "qca,ar9340-eth", "syscon"; - resets = <&rst 13>, <&rst 23>; - reset-names = "mac", "mdio"; + resets = <&rst 13>; + reset-names = "mac"; clocks = <&pll ATH79_CLK_AHB>, <&pll ATH79_CLK_AHB>; clock-names = "eth", "mdio"; phy-mode = "gmii"; From a44a2f9e93a92304ee1b457aaa63ba8172a1135a Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Wed, 2 Dec 2020 22:06:34 +0100 Subject: [PATCH 30/41] toolchain: musl: refresh patches Refresh the musl patches Signed-off-by: Hauke Mehrtens --- ...00-nftw-support-common-gnu-extension.patch | 19 ++++++------------- .../700-wcsnrtombs-cve-2020-28928.diff | 2 -- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/toolchain/musl/patches/600-nftw-support-common-gnu-extension.patch b/toolchain/musl/patches/600-nftw-support-common-gnu-extension.patch index 13914efcba..81c96ad76c 100644 --- a/toolchain/musl/patches/600-nftw-support-common-gnu-extension.patch +++ b/toolchain/musl/patches/600-nftw-support-common-gnu-extension.patch @@ -9,8 +9,6 @@ Signed-off-by: Tony Ambardar src/misc/nftw.c | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 5 deletions(-) -diff --git a/include/ftw.h b/include/ftw.h -index b15c062a..ce85deac 100644 --- a/include/ftw.h +++ b/include/ftw.h @@ -21,6 +21,14 @@ extern "C" { @@ -28,17 +26,15 @@ index b15c062a..ce85deac 100644 struct FTW { int base; int level; -diff --git a/src/misc/nftw.c b/src/misc/nftw.c -index 8dcff7fe..0bb7b601 100644 --- a/src/misc/nftw.c +++ b/src/misc/nftw.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include - #include -@@ -72,8 +73,20 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, - if (!fd_limit) close(dfd); + #include +@@ -63,8 +64,20 @@ static int do_nftw(char *path, int (*fn) + lev.base = k; } - if (!(flags & FTW_DEPTH) && (r=fn(path, &st, type, &lev))) @@ -60,7 +56,7 @@ index 8dcff7fe..0bb7b601 100644 for (; h; h = h->chain) if (h->dev == st.st_dev && h->ino == st.st_ino) -@@ -101,7 +114,10 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, +@@ -88,7 +101,10 @@ static int do_nftw(char *path, int (*fn) strcpy(path+j+1, de->d_name); if ((r=do_nftw(path, fn, fd_limit-1, flags, &new))) { closedir(d); @@ -72,7 +68,7 @@ index 8dcff7fe..0bb7b601 100644 } } closedir(d); -@@ -112,8 +128,16 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, +@@ -98,8 +114,16 @@ static int do_nftw(char *path, int (*fn) } path[l] = 0; @@ -91,12 +87,9 @@ index 8dcff7fe..0bb7b601 100644 return 0; } -@@ -139,4 +163,5 @@ int nftw(const char *path, int (*fn)(const char *, const struct stat *, int, str +@@ -125,4 +149,5 @@ int nftw(const char *path, int (*fn)(con return r; } +#undef nftw64 weak_alias(nftw, nftw64); --- -2.17.1 - diff --git a/toolchain/musl/patches/700-wcsnrtombs-cve-2020-28928.diff b/toolchain/musl/patches/700-wcsnrtombs-cve-2020-28928.diff index 8465f9422a..5840dc1aac 100644 --- a/toolchain/musl/patches/700-wcsnrtombs-cve-2020-28928.diff +++ b/toolchain/musl/patches/700-wcsnrtombs-cve-2020-28928.diff @@ -1,5 +1,3 @@ -diff --git a/src/multibyte/wcsnrtombs.c b/src/multibyte/wcsnrtombs.c -index 676932b5..95e25e70 100644 --- a/src/multibyte/wcsnrtombs.c +++ b/src/multibyte/wcsnrtombs.c @@ -1,41 +1,33 @@ From d346beb08c3a7867497000dc382635ee8ea0eedb Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Wed, 23 Sep 2020 03:25:30 +0200 Subject: [PATCH 31/41] build: Extract trusted-firmware-a.mk The include/trusted-firmware-a.mk file is based on the include/u-boot.mk file and should be used to build a Trusted Firmware-A (TFA) which was previously named Arm trusted firmware. This is useful for targets where the TFA is board specific like for Marvell SoCs and probably also NXP Layerscape SoCs. This also makes use of this abstraction in the arm-trusted-firmware-mvebu package to build board specific ATF binaries. The ATF binaries will be automatically activated and build when the board is selected in the normal build or all boards are selected. This should also activate the build when build bot creates images. Signed-off-by: Hauke Mehrtens --- include/trusted-firmware-a.mk | 93 +++++++++++ .../boot/arm-trusted-firmware-mvebu/Makefile | 158 ++++++++---------- 2 files changed, 164 insertions(+), 87 deletions(-) create mode 100644 include/trusted-firmware-a.mk diff --git a/include/trusted-firmware-a.mk b/include/trusted-firmware-a.mk new file mode 100644 index 0000000000..b89014b249 --- /dev/null +++ b/include/trusted-firmware-a.mk @@ -0,0 +1,93 @@ +PKG_NAME ?= trusted-firmware-a + +ifndef PKG_SOURCE_PROTO +PKG_SOURCE = trusted-firmware-a-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/snapshot +endif + +PKG_BUILD_DIR = $(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) + +PKG_TARGETS := bin +PKG_FLAGS:=nonshared + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=docs/license.rst + +PKG_BUILD_PARALLEL:=1 + +export GCC_HONOUR_COPTS=s + +define Package/trusted-firmware-a/install/default + $(CP) $(patsubst %,$(PKG_BUILD_DIR)/build/$(PLAT)/release/%,$(TFA_IMAGE)) $(1)/ +endef + +Package/trusted-firmware-a/install = $(Package/trusted-firmware-a/install/default) + +define Trusted-Firmware-A/Init + BUILD_TARGET:= + BUILD_SUBTARGET:= + BUILD_DEVICES:= + NAME:= + DEPENDS:= + HIDDEN:= + DEFAULT:= + PLAT:= + VARIANT:=$(1) + TFA_IMAGE:= +endef + +TARGET_DEP = TARGET_$(BUILD_TARGET)$(if $(BUILD_SUBTARGET),_$(BUILD_SUBTARGET)) + +define Build/Trusted-Firmware-A/Target + $(eval $(call Trusted-Firmware-A/Init,$(1))) + $(eval $(call Trusted-Firmware-A/Default,$(1))) + $(eval $(call Trusted-Firmware-A/$(1),$(1))) + + define Package/trusted-firmware-a-$(1) + SECTION:=boot + CATEGORY:=Boot Loaders + TITLE:=Trusted-Firmware-A for $(NAME) + VARIANT:=$(VARIANT) + DEPENDS:=@!IN_SDK $(DEPENDS) + HIDDEN:=$(HIDDEN) + ifneq ($(BUILD_TARGET),) + DEPENDS += @$(TARGET_DEP) + ifneq ($(BUILD_DEVICES),) + DEFAULT := y if ($(TARGET_DEP)_Default \ + $(patsubst %,|| $(TARGET_DEP)_DEVICE_%,$(BUILD_DEVICES)) \ + $(patsubst %,|| $(patsubst TARGET_%,TARGET_DEVICE_%,$(TARGET_DEP))_DEVICE_%,$(BUILD_DEVICES))) + endif + endif + $(if $(DEFAULT),DEFAULT:=$(DEFAULT)) + URL:=https://www.trustedfirmware.org/projects/tf-a/ + endef + + define Package/trusted-firmware-a-$(1)/install + $$(Package/trusted-firmware-a/install) + endef +endef + + +define Build/Compile/Trusted-Firmware-A + +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ + CROSS_COMPILE=$(TARGET_CROSS) \ + OPENSSL_DIR=$(STAGING_DIR_HOST) \ + PLAT=$(PLAT) \ + $(TFA_MAKE_FLAGS) +endef + +define BuildPackage/Trusted-Firmware-A/Defaults + Build/Configure/Default = $$$$(Build/Configure/Trusted-Firmware-A) + Build/Compile/Default = $$$$(Build/Compile/Trusted-Firmware-A) +endef + +define BuildPackage/Trusted-Firmware-A + $(eval $(call BuildPackage/Trusted-Firmware-A/Defaults)) + $(foreach type,$(if $(DUMP),$(TFA_TARGETS),$(BUILD_VARIANT)), \ + $(eval $(call Build/Trusted-Firmware-A/Target,$(type))) + ) + $(eval $(call Build/DefaultTargets)) + $(foreach type,$(if $(DUMP),$(TFA_TARGETS),$(BUILD_VARIANT)), \ + $(call BuildPackage,trusted-firmware-a-$(type)) + ) +endef diff --git a/package/boot/arm-trusted-firmware-mvebu/Makefile b/package/boot/arm-trusted-firmware-mvebu/Makefile index 38dd9d1635..1f84b8eb19 100644 --- a/package/boot/arm-trusted-firmware-mvebu/Makefile +++ b/package/boot/arm-trusted-firmware-mvebu/Makefile @@ -7,149 +7,170 @@ include $(TOPDIR)/rules.mk -PKG_NAME:=arm-trusted-firmware-mvebu PKG_VERSION:=2.3 PKG_RELEASE:=1 - -PKG_SOURCE:=trusted-firmware-a-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/snapshot PKG_HASH:=37f917922bcef181164908c470a2f941006791c0113d738c498d39d95d543b21 -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/trusted-firmware-a-$(PKG_VERSION) - -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILES:=docs/license.rst PKG_MAINTAINER:=Vladimir Vid +include $(INCLUDE_DIR)/trusted-firmware-a.mk include $(INCLUDE_DIR)/package.mk -define Package/arm-trusted-firmware-mvebu - SECTION:=boot - CATEGORY:=Boot Loaders - DEPENDS:=@TARGET_mvebu_cortexa53 - VARIANT:=$(subst arm-trusted-firmware-mvebu-,,$(1)) +define Trusted-Firmware-A/Default + BUILD_TARGET:=mvebu + BUILD_SUBTARGET:=cortexa53 + TFA_IMAGE:=flash-image.bin uart-images.tgz + UBOOT:= + DDR_TOPOLOGY:= + CLOCKSPRESET:= endef -define Package/arm-trusted-firmware-mvebu-espressobin-512mb - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin (512MB) + +define Trusted-Firmware-A/espressobin-512mb + NAME:=Marvell ESPRESSObin (512MB) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin UBOOT:=espressobin DDR_TOPOLOGY:=0 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-1cs - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V3-V5 (1GB 1CS) +define Trusted-Firmware-A/espressobin-v3-v5-1gb-1cs + NAME:=Marvell ESPRESSObin V3-V5 (1GB 1CS) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin UBOOT:=espressobin DDR_TOPOLOGY:=4 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-1cs-emmc - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V3-V5 (1GB 1CS, eMMC) +define Trusted-Firmware-A/espressobin-v3-v5-1gb-1cs-emmc + NAME:=Marvell ESPRESSObin V3-V5 (1GB 1CS, eMMC) DEPENDS:=+u-boot-espressobin-emmc + BUILD_DEVICES:=globalscale_espressobin-emmc UBOOT:=espressobin-emmc DDR_TOPOLOGY:=4 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-2cs - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V3-V5 (1GB, 2CS) +define Trusted-Firmware-A/espressobin-v3-v5-1gb-2cs + NAME:=Marvell ESPRESSObin V3-V5 (1GB, 2CS) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin UBOOT:=espressobin DDR_TOPOLOGY:=2 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-2cs-emmc - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V3-V5 (1GB 2CS, eMMC) +define Trusted-Firmware-A/espressobin-v3-v5-1gb-2cs-emmc + NAME:=Marvell ESPRESSObin V3-V5 (1GB 2CS, eMMC) DEPENDS:=+u-boot-espressobin-emmc + BUILD_DEVICES:=globalscale_espressobin-emmc UBOOT:=espressobin-emmc DDR_TOPOLOGY:=2 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v3-v5-2gb - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V3-V5 (2GB) +define Trusted-Firmware-A/espressobin-v3-v5-2gb + NAME:=Marvell ESPRESSObin V3-V5 (2GB) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin UBOOT:=espressobin DDR_TOPOLOGY:=7 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v3-v5-2gb-emmc - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V3-V5 (2GB, eMMC) +define Trusted-Firmware-A/espressobin-v3-v5-2gb-emmc + NAME:=Marvell ESPRESSObin V3-V5 (2GB, eMMC) DEPENDS:=+u-boot-espressobin-emmc + BUILD_DEVICES:=globalscale_espressobin-emmc UBOOT:=espressobin-emmc DDR_TOPOLOGY:=7 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v7-1gb - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V7 (1GB) +define Trusted-Firmware-A/espressobin-v7-1gb + NAME:=Marvell ESPRESSObin V7 (1GB) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin-v7 UBOOT:=espressobin DDR_TOPOLOGY:=5 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v7-1gb-emmc - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V7 (1GB, eMMC) +define Trusted-Firmware-A/espressobin-v7-1gb-emmc + NAME:=Marvell ESPRESSObin V7 (1GB, eMMC) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin-v7-emmc UBOOT:=espressobin-emmc DDR_TOPOLOGY:=5 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v7-2gb - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V7 (2GB) +define Trusted-Firmware-A/espressobin-v7-2gb + NAME:=Marvell ESPRESSObin V7 (2GB) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin-v7 UBOOT:=espressobin DDR_TOPOLOGY:=6 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-espressobin-v7-2gb-emmc - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Marvell ESPRESSObin V7 (2GB, eMMC) +define Trusted-Firmware-A/espressobin-v7-2gb-emmc + NAME:=Marvell ESPRESSObin V7 (2GB, eMMC) DEPENDS:=+u-boot-espressobin + BUILD_DEVICES:=globalscale_espressobin-v7-emmc UBOOT:=espressobin-emmc DDR_TOPOLOGY:=6 CLOCKSPRESET:=CPU_800_DDR_800 PLAT:=a3700 endef -define Package/arm-trusted-firmware-mvebu-udpu - $(Package/arm-trusted-firmware-mvebu) - TITLE:=ARM Trusted Firmware for Methode uDPU +define Trusted-Firmware-A/udpu + NAME:=Methode uDPU DEPENDS:=+u-boot-uDPU + BUILD_DEVICES:=methode_udpu UBOOT:=uDPU DDR_TOPOLOGY:=0 CLOCKSPRESET:=CPU_1000_DDR_800 PLAT:=a3700 endef + +TFA_TARGETS:= \ + espressobin-512mb \ + espressobin-v3-v5-1gb-1cs \ + espressobin-v3-v5-1gb-1cs-emmc \ + espressobin-v3-v5-1gb-2cs \ + espressobin-v3-v5-1gb-2cs-emmc \ + espressobin-v3-v5-2gb \ + espressobin-v3-v5-2gb-emmc \ + espressobin-v7-1gb \ + espressobin-v7-1gb-emmc \ + espressobin-v7-2gb \ + espressobin-v7-2gb-emmc \ + udpu + +TFA_MAKE_FLAGS += \ + CROSS_CM3=$(STAGING_DIR_IMAGE)/$(LINARO_NAME)-$(LINARO_RELEASE).$(LINARO_VERSION)/bin/arm-linux-gnueabi- \ + BL33=$(STAGING_DIR_IMAGE)/$(UBOOT)-u-boot.bin \ + MV_DDR_PATH=$(STAGING_DIR_IMAGE)/$(MV_DDR_NAME) \ + WTP=$(STAGING_DIR_IMAGE)/$(A3700_UTILS_NAME) \ + DDR_TOPOLOGY=$(DDR_TOPOLOGY) \ + CLOCKSPRESET=$(CLOCKSPRESET) \ + all \ + fip + A3700_UTILS_NAME:=a3700-utils A3700_UTILS_RELEASE:=09679790 A3700_UTILS_SOURCE=$(A3700_UTILS_NAME)-$(A3700_UTILS_RELEASE).tar.bz2 @@ -201,41 +222,4 @@ define Build/Prepare $(TAR) -C $(STAGING_DIR_IMAGE) -xf $(DL_DIR)/$(LINARO_SOURCE) endef -export GCC_HONOUR_COPTS=s - -TARGET_CFLAGS = "" - -define Build/Compile - $(eval $(Package/arm-trusted-firmware-mvebu-$(BUILD_VARIANT))) \ - $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ - CROSS_COMPILE=$(TARGET_CROSS) \ - OPENSSL_DIR=$(STAGING_DIR_HOST) \ - CROSS_CM3=$(STAGING_DIR_IMAGE)/$(LINARO_NAME)-$(LINARO_RELEASE).$(LINARO_VERSION)/bin/arm-linux-gnueabi- \ - BL33=$(STAGING_DIR_IMAGE)/$(UBOOT)-u-boot.bin \ - MV_DDR_PATH=$(STAGING_DIR_IMAGE)/$(MV_DDR_NAME) \ - WTP=$(STAGING_DIR_IMAGE)/$(A3700_UTILS_NAME) \ - DDR_TOPOLOGY=$(DDR_TOPOLOGY) \ - CLOCKSPRESET=$(CLOCKSPRESET) \ - PLAT=$(PLAT) \ - all \ - fip -endef - -define Build/InstallDev - $(INSTALL_DIR) $(BIN_DIR)/flash-image-$(BUILD_VARIANT) - $(CP) $(PKG_BUILD_DIR)/build/$(PLAT)/release/flash-image.bin $(BIN_DIR)/flash-image-$(BUILD_VARIANT)/ - $(CP) $(PKG_BUILD_DIR)/build/$(PLAT)/release/uart-images.tgz $(BIN_DIR)/flash-image-$(BUILD_VARIANT)/ -endef - -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-512mb)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-1cs)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-1cs-emmc)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-2cs)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v3-v5-1gb-2cs-emmc)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v3-v5-2gb)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v3-v5-2gb-emmc)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v7-1gb)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v7-1gb-emmc)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v7-2gb)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-espressobin-v7-2gb-emmc)) -$(eval $(call BuildPackage,arm-trusted-firmware-mvebu-udpu)) +$(eval $(call BuildPackage/Trusted-Firmware-A)) From 9e7a0f45d8c4e8ccde67f80c24c7145be0130105 Mon Sep 17 00:00:00 2001 From: Daniele Castro Date: Mon, 14 Sep 2020 03:49:30 +0200 Subject: [PATCH 32/41] brcm63xx: add USB status LED in 01_leds for ADP P.DG A4001N Add a status LED in 01_leds for USB 2-1 connected devices. Signed-off-by: Daniele Castro --- target/linux/bcm63xx/base-files/etc/board.d/01_leds | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/linux/bcm63xx/base-files/etc/board.d/01_leds b/target/linux/bcm63xx/base-files/etc/board.d/01_leds index b84009313f..cfd4cf3c31 100755 --- a/target/linux/bcm63xx/base-files/etc/board.d/01_leds +++ b/target/linux/bcm63xx/base-files/etc/board.d/01_leds @@ -29,7 +29,8 @@ adb,pdg-a4001n-a-000-1a1-ax) ucidef_set_led_netdev "lan" "LAN" "green:internet" "eth0.1" ucidef_set_led_netdev "wan" "WAN" "green:adsl" "eth0.2" ucidef_set_led_netdev "wlan0" "WIFI" "green:wifi" "wlan0" - ucidef_set_led_usbdev "usb" "USB" "green:service" "1-1" + ucidef_set_led_usbdev "usb1" "USB1" "green:service" "1-1" + ucidef_set_led_usbdev "usb2" "USB2" "red:service" "2-1" ;; adb,av4202n) ucidef_set_led_netdev "wlan0" "WLAN" "blue:wifi" "wlan0" From b4f1f9c9e42fbf9008d165fc32728996b417c599 Mon Sep 17 00:00:00 2001 From: Stan Grishin Date: Mon, 12 Oct 2020 22:03:15 +0000 Subject: [PATCH 33/41] base-files: informative service command in /etc/shinit. service command shows services enabled/disabled and running status, when the service command is invoked with no/invalid arguments, like this: Usage: service [command] The following services are available: /etc/init.d/acme enabled stopped /etc/init.d/boot enabled stopped /etc/init.d/cron enabled running /etc/init.d/dnsmasq enabled running ... Signed-off-by: Stan Grishin --- package/base-files/Makefile | 2 +- package/base-files/files/etc/shinit | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/package/base-files/Makefile b/package/base-files/Makefile index c06b534bea..0c612b73ca 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk include $(INCLUDE_DIR)/feeds.mk PKG_NAME:=base-files -PKG_RELEASE:=238 +PKG_RELEASE:=239 PKG_FLAGS:=nonshared PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ diff --git a/package/base-files/files/etc/shinit b/package/base-files/files/etc/shinit index dccba34b69..8c64e81563 100644 --- a/package/base-files/files/etc/shinit +++ b/package/base-files/files/etc/shinit @@ -9,12 +9,24 @@ alias ll='ls -alF --color=auto' [ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; } service() { - [ -f "/etc/init.d/$1" ] || { - echo "service "'"'"$1"'"'" not found, the following services are available:" - ls "/etc/init.d" + if [ -f "/etc/init.d/$1" ]; then + /etc/init.d/$@ + else + echo "Usage: service [command]" + if [ -n "$1" ]; then + echo "Service "'"'"$1"'"'" not found, the following services are available:" + else + echo "The following services are available:" + fi + for F in /etc/init.d/* ; do + printf "%-30s\t%10s\t%10s\n" "$F" \ + $( $($F enabled) && echo "enabled" || echo "disabled" ) \ + $( [ "$(ubus call service list "{ 'verbose': true, 'name': '$(basename $F)' }" \ + | jsonfilter -q -e "@.$(basename $F).instances[*].running")" = "true" ] \ + && echo "running" || echo "stopped" ) + done; return 1 - } - /etc/init.d/$@ + fi } [ -n "$KSH_VERSION" -o \! -s "$HOME/.shinit" ] || . "$HOME/.shinit" From 9c13513ce1fdfbd4adc8bc7bce54f34b3689e940 Mon Sep 17 00:00:00 2001 From: Mengyang Li Date: Fri, 23 Oct 2020 17:07:18 -0700 Subject: [PATCH 34/41] x86: enable CONFIG_MMC_SDHCI_ACPI for x86_64 Some x86_64 single board computer (including Atomic Pi) has onboard emmc, but requires CONFIG_MMC_SDHCI_ACPI driver to use or boot from it. Here is boot message for the mmc device [ 2.838008] mmc0: SDHCI controller on ACPI [80860F14:00] using ADMA [ 2.857536] mmc1: SDHCI controller on ACPI [80860F14:01] using ADMA [ 2.950019] mmc0: new HS200 MMC card at address 0001 [ 3.158271] mmcblk0: mmc0:0001 M52516 14.6 GiB [ 3.170290] mmcblk0boot0: mmc0:0001 M52516 partition 1 4.00 MiB [ 3.177191] mmcblk0boot1: mmc0:0001 M52516 partition 2 4.00 MiB [ 3.183963] mmcblk0rpmb: mmc0:0001 M52516 partition 3 4.00 MiB, \ chardev (248:0) Other lines changed in this config file are introduced by menuconfig. Signed-off-by: Mengyang Li --- target/linux/x86/64/config-5.4 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/linux/x86/64/config-5.4 b/target/linux/x86/64/config-5.4 index 3954abfd4f..f09deca5b0 100644 --- a/target/linux/x86/64/config-5.4 +++ b/target/linux/x86/64/config-5.4 @@ -115,6 +115,7 @@ CONFIG_CRYPTO_SIMD=y # CONFIG_CRYPTO_TWOFISH_X86_64_3WAY is not set CONFIG_CRYPTO_XTS=y # CONFIG_DEBUG_HOTPLUG_CPU0 is not set +CONFIG_DMA_ACPI=y CONFIG_DMA_SHARED_BUFFER=y # CONFIG_DPTF_POWER is not set CONFIG_DRM=y @@ -295,6 +296,7 @@ CONFIG_MMC_CQHCI=y CONFIG_MMC_RICOH_MMC=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_IO_ACCESSORS=y +CONFIG_MMC_SDHCI_ACPI=y CONFIG_MMC_SDHCI_PCI=y # CONFIG_MMC_SDHCI_PLTFM is not set # CONFIG_MMC_TIFM_SD is not set From 533895e05e62db8cd3e7d12eb384a08058088388 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Fri, 4 Dec 2020 14:38:24 +0000 Subject: [PATCH 35/41] ubus: make sure ubusd starts in case user 'ubus' doesn't exist d1d9ddf ubusd: attempt to create socket folder Signed-off-by: Daniel Golle --- package/system/ubus/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/system/ubus/Makefile b/package/system/ubus/Makefile index fd2ccace6b..1eb7da007e 100644 --- a/package/system/ubus/Makefile +++ b/package/system/ubus/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/ubus.git -PKG_SOURCE_DATE:=2020-10-25 -PKG_SOURCE_VERSION:=ad0cd117db74934385d81605514e041b1a9cdda9 -PKG_MIRROR_HASH:=8f6908bd826a342ed8e925dfec4744dbf24616f20d20d1af342a18419a3b14de +PKG_SOURCE_DATE:=2020-12-04 +PKG_SOURCE_VERSION:=d1d9ddf98d39b0bdc055060fb962335439445690 +PKG_MIRROR_HASH:=6fbdda5144cfef14d314d421ce801e9c89a2266428346f531a57c28e731a059c CMAKE_INSTALL:=1 PKG_LICENSE:=LGPL-2.1 From 4dc5b647602dc33be9bc940e91e5b849fdc98015 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Fri, 4 Dec 2020 14:39:40 +0000 Subject: [PATCH 36/41] procd: output warning if user 'ubus' doesn't exist 6acc48c early: fall-back to run ubus as root if user can't be found Signed-off-by: Daniel Golle --- package/system/procd/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile index 09aded15b5..a0e6285ca1 100644 --- a/package/system/procd/Makefile +++ b/package/system/procd/Makefile @@ -12,9 +12,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git -PKG_SOURCE_DATE:=2020-11-30 -PKG_SOURCE_VERSION:=4625350465744c2446ac0b0dc821699fa1695c81 -PKG_MIRROR_HASH:=f41b1b8e4b48e9f7103e179e9b35b04c55b9146f0aad88caf2e7c2c68844e841 +PKG_SOURCE_DATE:=2020-12-04 +PKG_SOURCE_VERSION:=6acc48c7a2faac48c534b8a5516500c270550a9e +PKG_MIRROR_HASH:=ee1a238a54fff4c71a6e52f092394b94dbcc488581e6fd3a1bb6da515ce1cbaf CMAKE_INSTALL:=1 PKG_LICENSE:=GPL-2.0 From 1ed18edaec669e0377e8710486da8d202a6a5e86 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Sun, 29 Nov 2020 17:07:17 +0100 Subject: [PATCH 37/41] ath79: remove num-chipselects from SPI controller The num-chipselects property is only valid for bit-banged spi-gpio [1]. For the generic SPI controller bindings, num-cs would be the correct property [2]. Since num-cs is not required on ath79 either, just drop the lines. [1] https://www.kernel.org/doc/Documentation/devicetree/bindings/spi/spi-gpio.yaml [2] https://www.kernel.org/doc/Documentation/devicetree/bindings/spi/spi-controller.yaml Signed-off-by: Adrian Schmutzler --- target/linux/ath79/dts/ar9330_dlink_dir-505.dts | 1 - target/linux/ath79/dts/ar9330_glinet_gl-ar150.dts | 2 -- target/linux/ath79/dts/ar9331_8dev_carambola2.dts | 1 - target/linux/ath79/dts/ar9331_embeddedwireless_dorin.dts | 2 -- target/linux/ath79/dts/ar9331_etactica_eg200.dts | 1 - target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts | 2 -- target/linux/ath79/dts/ar9331_tplink_tl-mr3020-v1.dts | 2 -- target/linux/ath79/dts/ar9331_tplink_tl-mr3040-v2.dts | 2 -- target/linux/ath79/dts/ar9344_zbtlink_zbt-wd323.dts | 1 - 9 files changed, 14 deletions(-) diff --git a/target/linux/ath79/dts/ar9330_dlink_dir-505.dts b/target/linux/ath79/dts/ar9330_dlink_dir-505.dts index 15e29f552e..574165b748 100644 --- a/target/linux/ath79/dts/ar9330_dlink_dir-505.dts +++ b/target/linux/ath79/dts/ar9330_dlink_dir-505.dts @@ -88,7 +88,6 @@ }; &spi { - num-chipselects = <1>; status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/ar9330_glinet_gl-ar150.dts b/target/linux/ath79/dts/ar9330_glinet_gl-ar150.dts index 26b3b3f04c..20c9a8fdd4 100644 --- a/target/linux/ath79/dts/ar9330_glinet_gl-ar150.dts +++ b/target/linux/ath79/dts/ar9330_glinet_gl-ar150.dts @@ -79,8 +79,6 @@ &spi { status = "okay"; - num-chipselects = <1>; - flash@0 { compatible = "jedec,spi-nor"; spi-max-frequency = <50000000>; diff --git a/target/linux/ath79/dts/ar9331_8dev_carambola2.dts b/target/linux/ath79/dts/ar9331_8dev_carambola2.dts index 85e70495fc..42193f857c 100644 --- a/target/linux/ath79/dts/ar9331_8dev_carambola2.dts +++ b/target/linux/ath79/dts/ar9331_8dev_carambola2.dts @@ -63,7 +63,6 @@ }; &spi { - num-chipselects = <0>; status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/ar9331_embeddedwireless_dorin.dts b/target/linux/ath79/dts/ar9331_embeddedwireless_dorin.dts index 9303121408..12f1e93d44 100644 --- a/target/linux/ath79/dts/ar9331_embeddedwireless_dorin.dts +++ b/target/linux/ath79/dts/ar9331_embeddedwireless_dorin.dts @@ -59,8 +59,6 @@ &spi { status = "okay"; - num-chipselects = <1>; - flash@0 { compatible = "jedec,spi-nor"; spi-max-frequency = <50000000>; diff --git a/target/linux/ath79/dts/ar9331_etactica_eg200.dts b/target/linux/ath79/dts/ar9331_etactica_eg200.dts index 0d7b7cfb84..e6feb54fcd 100644 --- a/target/linux/ath79/dts/ar9331_etactica_eg200.dts +++ b/target/linux/ath79/dts/ar9331_etactica_eg200.dts @@ -83,7 +83,6 @@ }; &spi { - num-chipselects = <1>; status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts b/target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts index d62bdd9d67..67b587ab6e 100644 --- a/target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts +++ b/target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts @@ -87,8 +87,6 @@ &spi { status = "okay"; - num-chipselects = <1>; - flash@0 { compatible = "jedec,spi-nor"; spi-max-frequency = <33000000>; diff --git a/target/linux/ath79/dts/ar9331_tplink_tl-mr3020-v1.dts b/target/linux/ath79/dts/ar9331_tplink_tl-mr3020-v1.dts index 7c52ae1617..e9533553a1 100644 --- a/target/linux/ath79/dts/ar9331_tplink_tl-mr3020-v1.dts +++ b/target/linux/ath79/dts/ar9331_tplink_tl-mr3020-v1.dts @@ -110,8 +110,6 @@ &spi { status = "okay"; - num-chipselects = <1>; - /* Spansion S25FL032PIF SPI flash */ flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar9331_tplink_tl-mr3040-v2.dts b/target/linux/ath79/dts/ar9331_tplink_tl-mr3040-v2.dts index da04aad6cb..c5f7a4fe76 100644 --- a/target/linux/ath79/dts/ar9331_tplink_tl-mr3040-v2.dts +++ b/target/linux/ath79/dts/ar9331_tplink_tl-mr3040-v2.dts @@ -106,8 +106,6 @@ &spi { status = "okay"; - num-chipselects = <1>; - flash@0 { compatible = "jedec,spi-nor"; spi-max-frequency = <50000000>; diff --git a/target/linux/ath79/dts/ar9344_zbtlink_zbt-wd323.dts b/target/linux/ath79/dts/ar9344_zbtlink_zbt-wd323.dts index f2cb35eae9..5f24bf23d6 100644 --- a/target/linux/ath79/dts/ar9344_zbtlink_zbt-wd323.dts +++ b/target/linux/ath79/dts/ar9344_zbtlink_zbt-wd323.dts @@ -97,7 +97,6 @@ }; &spi { - num-chipselects = <1>; status = "okay"; flash@0 { From 72bd92bea0aacf9a008782bea9e015c3ac0a2888 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Sun, 29 Nov 2020 18:03:48 +0100 Subject: [PATCH 38/41] ath79: drop num-cs for SPI controller None of the spi drivers on ath79 uses the num-cs property. Cc: Chuanhong Guo Signed-off-by: Adrian Schmutzler Acked-by: Chuanhong Guo --- target/linux/ath79/dts/ar1022_iodata_wn-ag300dgr.dts | 2 -- target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts | 2 -- target/linux/ath79/dts/ar7161_adtran_bsap1880.dtsi | 2 -- target/linux/ath79/dts/ar7161_aruba_ap-105.dts | 2 -- target/linux/ath79/dts/ar7161_buffalo_wzr-hp-ag300h.dtsi | 1 - target/linux/ath79/dts/ar7161_dlink_dir-825-b1.dts | 2 -- target/linux/ath79/dts/ar7161_jjplus_ja76pf2.dts | 2 -- target/linux/ath79/dts/ar7161_meraki_mr16.dts | 1 - target/linux/ath79/dts/ar7161_netgear_wndr.dtsi | 2 -- target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts | 2 -- target/linux/ath79/dts/ar7161_ubnt_routerstation.dtsi | 1 - target/linux/ath79/dts/ar7240_buffalo_whr-g301n.dts | 2 -- target/linux/ath79/dts/ar7240_dlink_dir-615-e4.dts | 2 -- target/linux/ath79/dts/ar7240_engenius_enh202-v1.dts | 2 -- target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts | 2 -- target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi | 2 -- target/linux/ath79/dts/ar7240_tplink.dtsi | 2 -- target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts | 2 -- target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi | 1 - target/linux/ath79/dts/ar7241_tplink.dtsi | 2 -- target/linux/ath79/dts/ar7241_tplink_tl-wr842n-v1.dts | 2 -- target/linux/ath79/dts/ar7241_ubnt_unifi.dts | 2 -- target/linux/ath79/dts/ar7242_avm_fritz300e.dts | 2 -- target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi | 1 - target/linux/ath79/dts/ar7242_buffalo_wzr-hp-g302h-a1a0.dts | 1 - target/linux/ath79/dts/ar7242_tplink_tl-wr2543-v1.dts | 2 -- target/linux/ath79/dts/ar7242_ubnt_sw.dtsi | 2 -- target/linux/ath79/dts/ar724x_ubnt_xm.dtsi | 2 -- target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts | 2 -- target/linux/ath79/dts/ar9132_tplink_tl-wr1043nd-v1.dts | 2 -- target/linux/ath79/dts/ar9330_pqi_air-pen.dts | 2 -- target/linux/ath79/dts/ar9331_alfa-network_ap121f.dtsi | 2 -- target/linux/ath79/dts/ar9331_arduino_yun.dts | 2 -- target/linux/ath79/dts/ar9331_glinet_6408.dts | 2 -- target/linux/ath79/dts/ar9331_glinet_6416.dts | 2 -- target/linux/ath79/dts/ar9331_hak5_lan-turtle.dtsi | 2 -- target/linux/ath79/dts/ar9331_hak5_wifi-pineapple-nano.dts | 2 -- target/linux/ath79/dts/ar9331_pisen_wmm003n.dts | 1 - target/linux/ath79/dts/ar9331_tplink_tl-wr703n_tl-mr10u.dtsi | 2 -- target/linux/ath79/dts/ar9331_tplink_tl-wr710n-8m.dtsi | 2 -- target/linux/ath79/dts/ar9331_tplink_tl-wr741nd-v4.dtsi | 2 -- target/linux/ath79/dts/ar9341_engenius_eap300-v2.dts | 2 -- target/linux/ath79/dts/ar9341_engenius_ens202ext-v1.dts | 2 -- target/linux/ath79/dts/ar9341_pcs_cr3000.dts | 2 -- target/linux/ath79/dts/ar9341_pisen_wmb001n.dts | 2 -- target/linux/ath79/dts/ar9341_tplink_tl-mr3420-v2.dts | 2 -- target/linux/ath79/dts/ar9341_tplink_tl-wa.dtsi | 2 -- target/linux/ath79/dts/ar9341_tplink_tl-wr841-v8.dts | 2 -- target/linux/ath79/dts/ar9341_tplink_tl-wr842n-v2.dts | 2 -- target/linux/ath79/dts/ar9342_iodata_etg3-r.dts | 2 -- target/linux/ath79/dts/ar9342_ubnt_wa.dtsi | 1 - target/linux/ath79/dts/ar9342_ubnt_xw.dtsi | 1 - target/linux/ath79/dts/ar9344_aerohive_hiveap-121.dts | 2 -- target/linux/ath79/dts/ar9344_alfa-network_n5q.dts | 2 -- target/linux/ath79/dts/ar9344_comfast_cf-e120a-v3.dts | 2 -- target/linux/ath79/dts/ar9344_compex_wpj344-16m.dts | 2 -- target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts | 2 -- target/linux/ath79/dts/ar9344_dlink_dir-8x5.dtsi | 1 - target/linux/ath79/dts/ar9344_enterasys_ws-ap3705i.dts | 1 - .../linux/ath79/dts/ar9344_mikrotik_routerboard-sxt-5n.dtsi | 2 -- target/linux/ath79/dts/ar9344_ocedo_raccoon.dts | 2 -- target/linux/ath79/dts/ar9344_pcs_cap324.dts | 2 -- target/linux/ath79/dts/ar9344_pcs_cr5000.dts | 2 -- target/linux/ath79/dts/ar9344_qihoo_c301.dts | 5 ++--- target/linux/ath79/dts/ar9344_qxwlan_e750x.dtsi | 2 -- target/linux/ath79/dts/ar9344_samsung_wam250.dts | 2 -- target/linux/ath79/dts/ar9344_teltonika_rut955.dts | 1 - target/linux/ath79/dts/ar9344_teltonika_rut9xx.dtsi | 2 +- target/linux/ath79/dts/ar9344_tplink_cpe.dtsi | 2 -- target/linux/ath79/dts/ar9344_tplink_tl-wdrxxxx.dtsi | 2 -- target/linux/ath79/dts/ar9344_ubnt_unifi-ap-pro.dts | 2 -- target/linux/ath79/dts/ar9344_wd_mynet-n750.dts | 2 -- .../linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts | 2 -- target/linux/ath79/dts/ar9344_winchannel_wb2000.dts | 2 -- target/linux/ath79/dts/qca9531_8dev_lima.dts | 2 -- target/linux/ath79/dts/qca9531_alfa-network_r36a.dtsi | 2 -- target/linux/ath79/dts/qca9531_comfast_cf-e130n-v2.dts | 2 -- target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts | 1 - target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts | 1 - target/linux/ath79/dts/qca9531_comfast_cf-e5.dts | 1 - target/linux/ath79/dts/qca9531_comfast_cf-e560ac.dts | 2 -- target/linux/ath79/dts/qca9531_comfast_cf-ew72.dts | 2 -- target/linux/ath79/dts/qca9531_comfast_cf-wr752ac-v1.dts | 2 -- target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts | 2 -- target/linux/ath79/dts/qca9531_engenius_ews511ap.dts | 2 -- target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi | 2 -- target/linux/ath79/dts/qca9531_glinet_gl-ar750.dts | 1 - target/linux/ath79/dts/qca9531_glinet_gl-e750.dts | 1 - target/linux/ath79/dts/qca9531_glinet_gl-x750.dts | 1 - target/linux/ath79/dts/qca9531_telco_t1.dts | 1 - target/linux/ath79/dts/qca9531_tplink_tl-mr3420-v3.dts | 2 -- target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts | 2 -- target/linux/ath79/dts/qca9531_wallys_dr531.dts | 2 -- target/linux/ath79/dts/qca9531_yuncore_a770.dts | 2 -- target/linux/ath79/dts/qca9533_comfast_cf-e110n-v2.dts | 2 -- target/linux/ath79/dts/qca9533_dlink_dap-13xx.dtsi | 2 -- target/linux/ath79/dts/qca9533_mikrotik_routerboard-16m.dtsi | 2 -- target/linux/ath79/dts/qca9533_tplink_cpexxx.dtsi | 2 -- target/linux/ath79/dts/qca9533_tplink_tl-wa801nd.dtsi | 2 -- target/linux/ath79/dts/qca9533_tplink_tl-wa850re-v2.dts | 2 -- target/linux/ath79/dts/qca9533_tplink_tl-wr802n.dtsi | 2 -- target/linux/ath79/dts/qca9533_tplink_tl-wr841.dtsi | 2 -- target/linux/ath79/dts/qca9533_tplink_tl-wr842n-v3.dts | 2 -- target/linux/ath79/dts/qca9533_ubnt_aircube-isp.dts | 1 - target/linux/ath79/dts/qca953x_tplink_tl-wr810n.dtsi | 2 -- target/linux/ath79/dts/qca9556_avm_fritz-repeater.dtsi | 1 - .../dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts | 2 -- target/linux/ath79/dts/qca9557_buffalo_bhr-4grv2.dts | 2 -- target/linux/ath79/dts/qca9557_iodata_wn-ac-dgr.dtsi | 2 -- target/linux/ath79/dts/qca9557_zyxel_nbg6616.dts | 2 -- target/linux/ath79/dts/qca9558_allnet_all-wap02860ac.dts | 2 -- target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts | 1 - target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts | 1 - target/linux/ath79/dts/qca9558_devolo_dvl1xxx.dtsi | 2 -- target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts | 1 - target/linux/ath79/dts/qca9558_domywifi_dw33d.dts | 2 -- target/linux/ath79/dts/qca9558_engenius_ecb1750.dts | 2 -- target/linux/ath79/dts/qca9558_engenius_epg5000.dts | 2 -- .../linux/ath79/dts/qca9558_librerouter_librerouter-v1.dts | 2 -- target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi | 2 -- target/linux/ath79/dts/qca9558_ocedo_koala.dts | 1 - target/linux/ath79/dts/qca9558_ocedo_ursus.dts | 1 - target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts | 1 - target/linux/ath79/dts/qca9558_qxwlan_e558.dtsi | 1 - target/linux/ath79/dts/qca9558_sitecom_wlr-8100.dts | 2 -- target/linux/ath79/dts/qca9558_tplink_archer-c.dtsi | 2 -- target/linux/ath79/dts/qca9558_tplink_archer-d7-v1.dts | 2 -- target/linux/ath79/dts/qca9558_tplink_archer-d7b-v1.dts | 2 -- target/linux/ath79/dts/qca9558_tplink_re350k-v1.dts | 2 -- target/linux/ath79/dts/qca9558_tplink_rex5x.dtsi | 1 - target/linux/ath79/dts/qca9558_tplink_tl-wdr4900-v2.dts | 2 -- target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd.dtsi | 1 - target/linux/ath79/dts/qca9558_tplink_tl-wr941n-v7-cn.dts | 1 - target/linux/ath79/dts/qca9558_trendnet_tew-823dru.dts | 2 -- target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts | 2 -- target/linux/ath79/dts/qca955x_ubnt_xc.dtsi | 1 - target/linux/ath79/dts/qca9561_avm_fritz4020.dts | 2 -- target/linux/ath79/dts/qca9561_tplink_archer-c25-v1.dts | 2 -- target/linux/ath79/dts/qca9561_tplink_archer-c58-v1.dts | 1 - target/linux/ath79/dts/qca9561_tplink_archer-c59-v1.dts | 1 - target/linux/ath79/dts/qca9561_tplink_archer-c59-v2.dts | 1 - target/linux/ath79/dts/qca9561_tplink_archer-c60-v1.dts | 1 - target/linux/ath79/dts/qca9561_tplink_archer-c60-v2.dts | 1 - target/linux/ath79/dts/qca9561_tplink_archer-c60-v3.dts | 2 -- target/linux/ath79/dts/qca9561_tplink_eap225-wall-v2.dts | 1 - target/linux/ath79/dts/qca9561_xiaomi_mi-router-4q.dts | 1 - target/linux/ath79/dts/qca9563_compex_wpj563.dts | 2 -- target/linux/ath79/dts/qca9563_dlink_dir-842-c.dtsi | 2 -- target/linux/ath79/dts/qca9563_dlink_dir-859-a1.dts | 2 -- target/linux/ath79/dts/qca9563_elecom_wrc-ghbk2-i.dtsi | 1 - target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi | 2 -- target/linux/ath79/dts/qca9563_nec_wg1200cr.dts | 2 -- target/linux/ath79/dts/qca9563_nec_wg800hp.dts | 1 - target/linux/ath79/dts/qca9563_netgear_wndr.dtsi | 2 -- target/linux/ath79/dts/qca9563_phicomm_k2t.dts | 2 -- target/linux/ath79/dts/qca9563_qxwlan_e1700ac.dtsi | 2 -- target/linux/ath79/dts/qca9563_rosinson_wr818.dts | 2 -- target/linux/ath79/dts/qca9563_tplink_archer-c2-v3.dts | 2 -- target/linux/ath79/dts/qca9563_tplink_archer-c6-v2-us.dts | 2 -- target/linux/ath79/dts/qca9563_tplink_archer-c6-v2.dts | 2 -- target/linux/ath79/dts/qca9563_tplink_archer-c7-v4.dts | 2 -- target/linux/ath79/dts/qca9563_tplink_archer-x7-v5.dtsi | 2 -- target/linux/ath79/dts/qca9563_tplink_eap245-v3.dts | 1 - target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi | 1 - target/linux/ath79/dts/qca9563_tplink_re450.dtsi | 2 -- target/linux/ath79/dts/qca9563_tplink_tl-wpa8630.dtsi | 2 -- target/linux/ath79/dts/qca9563_tplink_tl-wr1043n-v5.dts | 1 - target/linux/ath79/dts/qca9563_tplink_tl-wr1043nd-v4.dts | 2 -- target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi | 1 - target/linux/ath79/dts/qca9563_yuncore_xd4200.dtsi | 2 -- target/linux/ath79/dts/tp9343_tplink_tl-wx.dtsi | 2 -- 171 files changed, 3 insertions(+), 297 deletions(-) diff --git a/target/linux/ath79/dts/ar1022_iodata_wn-ag300dgr.dts b/target/linux/ath79/dts/ar1022_iodata_wn-ag300dgr.dts index f0d262c847..2186d13667 100644 --- a/target/linux/ath79/dts/ar1022_iodata_wn-ag300dgr.dts +++ b/target/linux/ath79/dts/ar1022_iodata_wn-ag300dgr.dts @@ -109,8 +109,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts b/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts index 2669db783e..e2481ad70c 100644 --- a/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts +++ b/target/linux/ath79/dts/ar1022_sitecom_wlr-7100.dts @@ -101,8 +101,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7161_adtran_bsap1880.dtsi b/target/linux/ath79/dts/ar7161_adtran_bsap1880.dtsi index 344241a322..ab868846ff 100644 --- a/target/linux/ath79/dts/ar7161_adtran_bsap1880.dtsi +++ b/target/linux/ath79/dts/ar7161_adtran_bsap1880.dtsi @@ -79,8 +79,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7161_aruba_ap-105.dts b/target/linux/ath79/dts/ar7161_aruba_ap-105.dts index 45f77f7891..3ad2486873 100644 --- a/target/linux/ath79/dts/ar7161_aruba_ap-105.dts +++ b/target/linux/ath79/dts/ar7161_aruba_ap-105.dts @@ -147,8 +147,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7161_buffalo_wzr-hp-ag300h.dtsi b/target/linux/ath79/dts/ar7161_buffalo_wzr-hp-ag300h.dtsi index 053c91557b..3b6eaf5cc8 100644 --- a/target/linux/ath79/dts/ar7161_buffalo_wzr-hp-ag300h.dtsi +++ b/target/linux/ath79/dts/ar7161_buffalo_wzr-hp-ag300h.dtsi @@ -223,7 +223,6 @@ &spi { status = "okay"; - num-cs = <2>; cs-gpios = <0>, <0>; flash0: flash@0 { diff --git a/target/linux/ath79/dts/ar7161_dlink_dir-825-b1.dts b/target/linux/ath79/dts/ar7161_dlink_dir-825-b1.dts index 85fd54b396..a7115ff7e6 100644 --- a/target/linux/ath79/dts/ar7161_dlink_dir-825-b1.dts +++ b/target/linux/ath79/dts/ar7161_dlink_dir-825-b1.dts @@ -170,8 +170,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7161_jjplus_ja76pf2.dts b/target/linux/ath79/dts/ar7161_jjplus_ja76pf2.dts index 8a27452eb8..145aba7d8e 100644 --- a/target/linux/ath79/dts/ar7161_jjplus_ja76pf2.dts +++ b/target/linux/ath79/dts/ar7161_jjplus_ja76pf2.dts @@ -105,8 +105,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7161_meraki_mr16.dts b/target/linux/ath79/dts/ar7161_meraki_mr16.dts index afc49ce865..f541a00841 100644 --- a/target/linux/ath79/dts/ar7161_meraki_mr16.dts +++ b/target/linux/ath79/dts/ar7161_meraki_mr16.dts @@ -128,7 +128,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi b/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi index 9e41b61357..61097f9679 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi +++ b/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi @@ -194,8 +194,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts b/target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts index 3c1d97f25e..39bc318b17 100644 --- a/target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts +++ b/target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts @@ -111,8 +111,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7161_ubnt_routerstation.dtsi b/target/linux/ath79/dts/ar7161_ubnt_routerstation.dtsi index cd0e5015a9..7768bf4c44 100644 --- a/target/linux/ath79/dts/ar7161_ubnt_routerstation.dtsi +++ b/target/linux/ath79/dts/ar7161_ubnt_routerstation.dtsi @@ -55,7 +55,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar7240_buffalo_whr-g301n.dts b/target/linux/ath79/dts/ar7240_buffalo_whr-g301n.dts index e93c5ca652..4f284ed900 100644 --- a/target/linux/ath79/dts/ar7240_buffalo_whr-g301n.dts +++ b/target/linux/ath79/dts/ar7240_buffalo_whr-g301n.dts @@ -109,8 +109,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7240_dlink_dir-615-e4.dts b/target/linux/ath79/dts/ar7240_dlink_dir-615-e4.dts index b632d3b8a8..9e44420048 100644 --- a/target/linux/ath79/dts/ar7240_dlink_dir-615-e4.dts +++ b/target/linux/ath79/dts/ar7240_dlink_dir-615-e4.dts @@ -99,8 +99,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7240_engenius_enh202-v1.dts b/target/linux/ath79/dts/ar7240_engenius_enh202-v1.dts index 4752ad1edd..aeb1e9e424 100644 --- a/target/linux/ath79/dts/ar7240_engenius_enh202-v1.dts +++ b/target/linux/ath79/dts/ar7240_engenius_enh202-v1.dts @@ -95,8 +95,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts b/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts index d67af04d1c..d700ea73fa 100644 --- a/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts +++ b/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts @@ -134,8 +134,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi b/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi index 44dbe9c55e..382529b32d 100644 --- a/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi +++ b/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi @@ -67,8 +67,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7240_tplink.dtsi b/target/linux/ath79/dts/ar7240_tplink.dtsi index 23d12e4edf..48849ccbcb 100644 --- a/target/linux/ath79/dts/ar7240_tplink.dtsi +++ b/target/linux/ath79/dts/ar7240_tplink.dtsi @@ -63,8 +63,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts index 1b124f3f2e..2e7ea746df 100644 --- a/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts +++ b/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts @@ -137,8 +137,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi index 62614166db..c61e188e32 100644 --- a/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi +++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi @@ -137,7 +137,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar7241_tplink.dtsi b/target/linux/ath79/dts/ar7241_tplink.dtsi index 62884f0902..49908066d6 100644 --- a/target/linux/ath79/dts/ar7241_tplink.dtsi +++ b/target/linux/ath79/dts/ar7241_tplink.dtsi @@ -50,8 +50,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7241_tplink_tl-wr842n-v1.dts b/target/linux/ath79/dts/ar7241_tplink_tl-wr842n-v1.dts index b0f6c3695a..d83f4cd2a8 100644 --- a/target/linux/ath79/dts/ar7241_tplink_tl-wr842n-v1.dts +++ b/target/linux/ath79/dts/ar7241_tplink_tl-wr842n-v1.dts @@ -95,8 +95,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7241_ubnt_unifi.dts b/target/linux/ath79/dts/ar7241_ubnt_unifi.dts index ce59463d9e..bdb4c61a48 100644 --- a/target/linux/ath79/dts/ar7241_ubnt_unifi.dts +++ b/target/linux/ath79/dts/ar7241_ubnt_unifi.dts @@ -59,8 +59,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7242_avm_fritz300e.dts b/target/linux/ath79/dts/ar7242_avm_fritz300e.dts index 3a002aaedf..3cc7198ca1 100644 --- a/target/linux/ath79/dts/ar7242_avm_fritz300e.dts +++ b/target/linux/ath79/dts/ar7242_avm_fritz300e.dts @@ -96,8 +96,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi b/target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi index 2840f91ec1..d1a251441e 100644 --- a/target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi +++ b/target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi @@ -108,7 +108,6 @@ status = "okay"; cs-gpios = <0>, <0>; - num-cs = <2>; flash0: flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar7242_buffalo_wzr-hp-g302h-a1a0.dts b/target/linux/ath79/dts/ar7242_buffalo_wzr-hp-g302h-a1a0.dts index f035f86c7c..bf570b6ea5 100644 --- a/target/linux/ath79/dts/ar7242_buffalo_wzr-hp-g302h-a1a0.dts +++ b/target/linux/ath79/dts/ar7242_buffalo_wzr-hp-g302h-a1a0.dts @@ -164,7 +164,6 @@ status = "okay"; cs-gpios = <0>, <0>; - num-cs = <2>; flash0: flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar7242_tplink_tl-wr2543-v1.dts b/target/linux/ath79/dts/ar7242_tplink_tl-wr2543-v1.dts index dd4cbf03eb..a07f80f55f 100644 --- a/target/linux/ath79/dts/ar7242_tplink_tl-wr2543-v1.dts +++ b/target/linux/ath79/dts/ar7242_tplink_tl-wr2543-v1.dts @@ -102,8 +102,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar7242_ubnt_sw.dtsi b/target/linux/ath79/dts/ar7242_ubnt_sw.dtsi index 52e83ea8d0..c5122dbd9f 100644 --- a/target/linux/ath79/dts/ar7242_ubnt_sw.dtsi +++ b/target/linux/ath79/dts/ar7242_ubnt_sw.dtsi @@ -66,8 +66,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar724x_ubnt_xm.dtsi b/target/linux/ath79/dts/ar724x_ubnt_xm.dtsi index ad216116a9..81a1aba47d 100644 --- a/target/linux/ath79/dts/ar724x_ubnt_xm.dtsi +++ b/target/linux/ath79/dts/ar724x_ubnt_xm.dtsi @@ -22,8 +22,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts b/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts index c8697d193d..772c874cdd 100644 --- a/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts +++ b/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts @@ -73,8 +73,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9132_tplink_tl-wr1043nd-v1.dts b/target/linux/ath79/dts/ar9132_tplink_tl-wr1043nd-v1.dts index e17303a0fb..f575990894 100644 --- a/target/linux/ath79/dts/ar9132_tplink_tl-wr1043nd-v1.dts +++ b/target/linux/ath79/dts/ar9132_tplink_tl-wr1043nd-v1.dts @@ -105,8 +105,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9330_pqi_air-pen.dts b/target/linux/ath79/dts/ar9330_pqi_air-pen.dts index 7d04b01377..5f2aa3b03c 100644 --- a/target/linux/ath79/dts/ar9330_pqi_air-pen.dts +++ b/target/linux/ath79/dts/ar9330_pqi_air-pen.dts @@ -66,8 +66,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; spi-max-frequency = <50000000>; diff --git a/target/linux/ath79/dts/ar9331_alfa-network_ap121f.dtsi b/target/linux/ath79/dts/ar9331_alfa-network_ap121f.dtsi index 50605bf685..47133cdf5d 100644 --- a/target/linux/ath79/dts/ar9331_alfa-network_ap121f.dtsi +++ b/target/linux/ath79/dts/ar9331_alfa-network_ap121f.dtsi @@ -74,8 +74,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_arduino_yun.dts b/target/linux/ath79/dts/ar9331_arduino_yun.dts index 8ce5beb059..6a5aca0541 100644 --- a/target/linux/ath79/dts/ar9331_arduino_yun.dts +++ b/target/linux/ath79/dts/ar9331_arduino_yun.dts @@ -162,8 +162,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_glinet_6408.dts b/target/linux/ath79/dts/ar9331_glinet_6408.dts index 8bf5d4390e..658fa1aa5e 100644 --- a/target/linux/ath79/dts/ar9331_glinet_6408.dts +++ b/target/linux/ath79/dts/ar9331_glinet_6408.dts @@ -10,8 +10,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_glinet_6416.dts b/target/linux/ath79/dts/ar9331_glinet_6416.dts index 2039ce6eac..189563aaf9 100644 --- a/target/linux/ath79/dts/ar9331_glinet_6416.dts +++ b/target/linux/ath79/dts/ar9331_glinet_6416.dts @@ -10,8 +10,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_hak5_lan-turtle.dtsi b/target/linux/ath79/dts/ar9331_hak5_lan-turtle.dtsi index c5770a7512..e7ca002038 100644 --- a/target/linux/ath79/dts/ar9331_hak5_lan-turtle.dtsi +++ b/target/linux/ath79/dts/ar9331_hak5_lan-turtle.dtsi @@ -55,8 +55,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_hak5_wifi-pineapple-nano.dts b/target/linux/ath79/dts/ar9331_hak5_wifi-pineapple-nano.dts index 6bc0773b9b..bbc0f1c711 100644 --- a/target/linux/ath79/dts/ar9331_hak5_wifi-pineapple-nano.dts +++ b/target/linux/ath79/dts/ar9331_hak5_wifi-pineapple-nano.dts @@ -75,8 +75,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_pisen_wmm003n.dts b/target/linux/ath79/dts/ar9331_pisen_wmm003n.dts index cdc92f697d..16f88c3273 100644 --- a/target/linux/ath79/dts/ar9331_pisen_wmm003n.dts +++ b/target/linux/ath79/dts/ar9331_pisen_wmm003n.dts @@ -49,7 +49,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar9331_tplink_tl-wr703n_tl-mr10u.dtsi b/target/linux/ath79/dts/ar9331_tplink_tl-wr703n_tl-mr10u.dtsi index 4ea658713d..ecd795580f 100644 --- a/target/linux/ath79/dts/ar9331_tplink_tl-wr703n_tl-mr10u.dtsi +++ b/target/linux/ath79/dts/ar9331_tplink_tl-wr703n_tl-mr10u.dtsi @@ -47,8 +47,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_tplink_tl-wr710n-8m.dtsi b/target/linux/ath79/dts/ar9331_tplink_tl-wr710n-8m.dtsi index ffc98e6e1c..759e765294 100644 --- a/target/linux/ath79/dts/ar9331_tplink_tl-wr710n-8m.dtsi +++ b/target/linux/ath79/dts/ar9331_tplink_tl-wr710n-8m.dtsi @@ -5,8 +5,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9331_tplink_tl-wr741nd-v4.dtsi b/target/linux/ath79/dts/ar9331_tplink_tl-wr741nd-v4.dtsi index c1d88f4812..a542fae739 100644 --- a/target/linux/ath79/dts/ar9331_tplink_tl-wr741nd-v4.dtsi +++ b/target/linux/ath79/dts/ar9331_tplink_tl-wr741nd-v4.dtsi @@ -88,8 +88,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9341_engenius_eap300-v2.dts b/target/linux/ath79/dts/ar9341_engenius_eap300-v2.dts index d41a6e7a75..e299c8529d 100644 --- a/target/linux/ath79/dts/ar9341_engenius_eap300-v2.dts +++ b/target/linux/ath79/dts/ar9341_engenius_eap300-v2.dts @@ -79,8 +79,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9341_engenius_ens202ext-v1.dts b/target/linux/ath79/dts/ar9341_engenius_ens202ext-v1.dts index da1e59d4c3..94b079f94d 100644 --- a/target/linux/ath79/dts/ar9341_engenius_ens202ext-v1.dts +++ b/target/linux/ath79/dts/ar9341_engenius_ens202ext-v1.dts @@ -89,8 +89,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9341_pcs_cr3000.dts b/target/linux/ath79/dts/ar9341_pcs_cr3000.dts index 7eafd1acd4..28076716b7 100644 --- a/target/linux/ath79/dts/ar9341_pcs_cr3000.dts +++ b/target/linux/ath79/dts/ar9341_pcs_cr3000.dts @@ -89,8 +89,6 @@ }; &spi { - num-cs = <1>; - status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/ar9341_pisen_wmb001n.dts b/target/linux/ath79/dts/ar9341_pisen_wmb001n.dts index 7057c3b1ad..3d9c6cb781 100644 --- a/target/linux/ath79/dts/ar9341_pisen_wmb001n.dts +++ b/target/linux/ath79/dts/ar9341_pisen_wmb001n.dts @@ -134,8 +134,6 @@ }; &spi { - num-cs = <1>; - status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/ar9341_tplink_tl-mr3420-v2.dts b/target/linux/ath79/dts/ar9341_tplink_tl-mr3420-v2.dts index 750522ded1..9adc9a1faf 100644 --- a/target/linux/ath79/dts/ar9341_tplink_tl-mr3420-v2.dts +++ b/target/linux/ath79/dts/ar9341_tplink_tl-mr3420-v2.dts @@ -44,8 +44,6 @@ }; &spi { - num-cs = <1>; - status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/ar9341_tplink_tl-wa.dtsi b/target/linux/ath79/dts/ar9341_tplink_tl-wa.dtsi index 70c2909870..8f40675d91 100644 --- a/target/linux/ath79/dts/ar9341_tplink_tl-wa.dtsi +++ b/target/linux/ath79/dts/ar9341_tplink_tl-wa.dtsi @@ -19,8 +19,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9341_tplink_tl-wr841-v8.dts b/target/linux/ath79/dts/ar9341_tplink_tl-wr841-v8.dts index 9f2e680b63..cd7532d27a 100644 --- a/target/linux/ath79/dts/ar9341_tplink_tl-wr841-v8.dts +++ b/target/linux/ath79/dts/ar9341_tplink_tl-wr841-v8.dts @@ -27,8 +27,6 @@ }; &spi { - num-cs = <1>; - status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/ar9341_tplink_tl-wr842n-v2.dts b/target/linux/ath79/dts/ar9341_tplink_tl-wr842n-v2.dts index cb6b25e664..8c27fe1971 100644 --- a/target/linux/ath79/dts/ar9341_tplink_tl-wr842n-v2.dts +++ b/target/linux/ath79/dts/ar9341_tplink_tl-wr842n-v2.dts @@ -47,8 +47,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9342_iodata_etg3-r.dts b/target/linux/ath79/dts/ar9342_iodata_etg3-r.dts index 58845f4cb6..f11d3952a3 100644 --- a/target/linux/ath79/dts/ar9342_iodata_etg3-r.dts +++ b/target/linux/ath79/dts/ar9342_iodata_etg3-r.dts @@ -50,8 +50,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9342_ubnt_wa.dtsi b/target/linux/ath79/dts/ar9342_ubnt_wa.dtsi index 3a4fc80b75..d141d48dae 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_wa.dtsi +++ b/target/linux/ath79/dts/ar9342_ubnt_wa.dtsi @@ -35,7 +35,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar9342_ubnt_xw.dtsi b/target/linux/ath79/dts/ar9342_ubnt_xw.dtsi index ff4e177ca8..c5fbdb94c4 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_xw.dtsi +++ b/target/linux/ath79/dts/ar9342_ubnt_xw.dtsi @@ -63,7 +63,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar9344_aerohive_hiveap-121.dts b/target/linux/ath79/dts/ar9344_aerohive_hiveap-121.dts index aed25e2f67..0ef5f1b7b9 100644 --- a/target/linux/ath79/dts/ar9344_aerohive_hiveap-121.dts +++ b/target/linux/ath79/dts/ar9344_aerohive_hiveap-121.dts @@ -118,8 +118,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_alfa-network_n5q.dts b/target/linux/ath79/dts/ar9344_alfa-network_n5q.dts index 75893a5e33..dd50d2bc20 100644 --- a/target/linux/ath79/dts/ar9344_alfa-network_n5q.dts +++ b/target/linux/ath79/dts/ar9344_alfa-network_n5q.dts @@ -107,8 +107,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_comfast_cf-e120a-v3.dts b/target/linux/ath79/dts/ar9344_comfast_cf-e120a-v3.dts index 95f798cc0f..11cc2dadfd 100644 --- a/target/linux/ath79/dts/ar9344_comfast_cf-e120a-v3.dts +++ b/target/linux/ath79/dts/ar9344_comfast_cf-e120a-v3.dts @@ -81,8 +81,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_compex_wpj344-16m.dts b/target/linux/ath79/dts/ar9344_compex_wpj344-16m.dts index a6a4811053..de8a4d5fd7 100644 --- a/target/linux/ath79/dts/ar9344_compex_wpj344-16m.dts +++ b/target/linux/ath79/dts/ar9344_compex_wpj344-16m.dts @@ -68,8 +68,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts b/target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts index a35c177b3c..d2f385c571 100644 --- a/target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts +++ b/target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts @@ -75,8 +75,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_dlink_dir-8x5.dtsi b/target/linux/ath79/dts/ar9344_dlink_dir-8x5.dtsi index 8f6859185d..4c2177bfad 100644 --- a/target/linux/ath79/dts/ar9344_dlink_dir-8x5.dtsi +++ b/target/linux/ath79/dts/ar9344_dlink_dir-8x5.dtsi @@ -69,7 +69,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar9344_enterasys_ws-ap3705i.dts b/target/linux/ath79/dts/ar9344_enterasys_ws-ap3705i.dts index 26e98f8711..7fb794f21c 100644 --- a/target/linux/ath79/dts/ar9344_enterasys_ws-ap3705i.dts +++ b/target/linux/ath79/dts/ar9344_enterasys_ws-ap3705i.dts @@ -119,7 +119,6 @@ status = "okay"; cs-gpios = <0>, <0>; - num-cs = <2>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/ar9344_mikrotik_routerboard-sxt-5n.dtsi b/target/linux/ath79/dts/ar9344_mikrotik_routerboard-sxt-5n.dtsi index 789069632b..013a998a02 100644 --- a/target/linux/ath79/dts/ar9344_mikrotik_routerboard-sxt-5n.dtsi +++ b/target/linux/ath79/dts/ar9344_mikrotik_routerboard-sxt-5n.dtsi @@ -87,8 +87,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts b/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts index 443f0c6724..3260d6b32d 100644 --- a/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts +++ b/target/linux/ath79/dts/ar9344_ocedo_raccoon.dts @@ -73,8 +73,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_pcs_cap324.dts b/target/linux/ath79/dts/ar9344_pcs_cap324.dts index c5919b5ef8..de75b8e0b4 100644 --- a/target/linux/ath79/dts/ar9344_pcs_cap324.dts +++ b/target/linux/ath79/dts/ar9344_pcs_cap324.dts @@ -80,8 +80,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_pcs_cr5000.dts b/target/linux/ath79/dts/ar9344_pcs_cr5000.dts index 3ab1cb34b3..7f74ba6351 100644 --- a/target/linux/ath79/dts/ar9344_pcs_cr5000.dts +++ b/target/linux/ath79/dts/ar9344_pcs_cr5000.dts @@ -72,8 +72,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_qihoo_c301.dts b/target/linux/ath79/dts/ar9344_qihoo_c301.dts index dff2644b11..b05d673137 100644 --- a/target/linux/ath79/dts/ar9344_qihoo_c301.dts +++ b/target/linux/ath79/dts/ar9344_qihoo_c301.dts @@ -101,11 +101,10 @@ }; &spi { - pinctrl-names = "default"; - pinctrl-0 = <&pmx_spi_cs1>; status = "okay"; - num-cs = <2>; + pinctrl-names = "default"; + pinctrl-0 = <&pmx_spi_cs1>; flash@0 { #address-cells = <1>; diff --git a/target/linux/ath79/dts/ar9344_qxwlan_e750x.dtsi b/target/linux/ath79/dts/ar9344_qxwlan_e750x.dtsi index 2cd7b446c6..16e20b7498 100644 --- a/target/linux/ath79/dts/ar9344_qxwlan_e750x.dtsi +++ b/target/linux/ath79/dts/ar9344_qxwlan_e750x.dtsi @@ -59,8 +59,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_samsung_wam250.dts b/target/linux/ath79/dts/ar9344_samsung_wam250.dts index 8a04af2973..a7cea7c2b6 100644 --- a/target/linux/ath79/dts/ar9344_samsung_wam250.dts +++ b/target/linux/ath79/dts/ar9344_samsung_wam250.dts @@ -97,8 +97,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_teltonika_rut955.dts b/target/linux/ath79/dts/ar9344_teltonika_rut955.dts index 98ad19cdeb..7914928aa0 100644 --- a/target/linux/ath79/dts/ar9344_teltonika_rut955.dts +++ b/target/linux/ath79/dts/ar9344_teltonika_rut955.dts @@ -141,7 +141,6 @@ &spi { status = "okay"; - num-cs = <3>; pinctrl-names = "default"; pinctrl-0 = <&pmx_spi>, <&pmx_spi_ext>; diff --git a/target/linux/ath79/dts/ar9344_teltonika_rut9xx.dtsi b/target/linux/ath79/dts/ar9344_teltonika_rut9xx.dtsi index 5e1d810b1f..116d797eb2 100644 --- a/target/linux/ath79/dts/ar9344_teltonika_rut9xx.dtsi +++ b/target/linux/ath79/dts/ar9344_teltonika_rut9xx.dtsi @@ -60,7 +60,7 @@ &spi { status = "okay"; - num-cs = <2>; + pinctrl-names = "default"; pinctrl-0 = <&pmx_spi>; diff --git a/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi b/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi index 4e9401e60b..39d4bd6ea9 100644 --- a/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi +++ b/target/linux/ath79/dts/ar9344_tplink_cpe.dtsi @@ -32,8 +32,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_tplink_tl-wdrxxxx.dtsi b/target/linux/ath79/dts/ar9344_tplink_tl-wdrxxxx.dtsi index e7430988ad..ea7dfeac93 100644 --- a/target/linux/ath79/dts/ar9344_tplink_tl-wdrxxxx.dtsi +++ b/target/linux/ath79/dts/ar9344_tplink_tl-wdrxxxx.dtsi @@ -73,8 +73,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_ubnt_unifi-ap-pro.dts b/target/linux/ath79/dts/ar9344_ubnt_unifi-ap-pro.dts index da3b0c63aa..8c62272897 100644 --- a/target/linux/ath79/dts/ar9344_ubnt_unifi-ap-pro.dts +++ b/target/linux/ath79/dts/ar9344_ubnt_unifi-ap-pro.dts @@ -53,8 +53,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_wd_mynet-n750.dts b/target/linux/ath79/dts/ar9344_wd_mynet-n750.dts index c440d71721..992bbf6bc1 100644 --- a/target/linux/ath79/dts/ar9344_wd_mynet-n750.dts +++ b/target/linux/ath79/dts/ar9344_wd_mynet-n750.dts @@ -86,8 +86,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts b/target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts index 6bacee4b4d..d04d517b19 100644 --- a/target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts +++ b/target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts @@ -88,8 +88,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = /* "s25fl064k", */ "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/ar9344_winchannel_wb2000.dts b/target/linux/ath79/dts/ar9344_winchannel_wb2000.dts index cd2e389ccd..68d3d6a881 100644 --- a/target/linux/ath79/dts/ar9344_winchannel_wb2000.dts +++ b/target/linux/ath79/dts/ar9344_winchannel_wb2000.dts @@ -87,8 +87,6 @@ }; &spi { - num-cs = <1>; - status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/qca9531_8dev_lima.dts b/target/linux/ath79/dts/qca9531_8dev_lima.dts index d13ae66a1c..1adfe15b5f 100644 --- a/target/linux/ath79/dts/qca9531_8dev_lima.dts +++ b/target/linux/ath79/dts/qca9531_8dev_lima.dts @@ -45,8 +45,6 @@ &spi { status = "okay"; - num-cs = <1>; - /* Winbond W25Q256 SPI flash */ flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_alfa-network_r36a.dtsi b/target/linux/ath79/dts/qca9531_alfa-network_r36a.dtsi index 697b20e999..f0d3e0b617 100644 --- a/target/linux/ath79/dts/qca9531_alfa-network_r36a.dtsi +++ b/target/linux/ath79/dts/qca9531_alfa-network_r36a.dtsi @@ -60,8 +60,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-e130n-v2.dts b/target/linux/ath79/dts/qca9531_comfast_cf-e130n-v2.dts index 749acedcda..c3097bf93b 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-e130n-v2.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-e130n-v2.dts @@ -74,8 +74,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts b/target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts index 7e2ff5d0ee..ac387040bf 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts @@ -72,7 +72,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts b/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts index 723c9eda13..842ed970a6 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-e314n-v2.dts @@ -87,7 +87,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-e5.dts b/target/linux/ath79/dts/qca9531_comfast_cf-e5.dts index 5c69a9bde0..45416089b7 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-e5.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-e5.dts @@ -82,7 +82,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-e560ac.dts b/target/linux/ath79/dts/qca9531_comfast_cf-e560ac.dts index 46b08da838..5065069863 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-e560ac.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-e560ac.dts @@ -83,8 +83,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-ew72.dts b/target/linux/ath79/dts/qca9531_comfast_cf-ew72.dts index f52467c4e2..7114df5cbc 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-ew72.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-ew72.dts @@ -67,8 +67,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "winbond,w25q128", "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-wr752ac-v1.dts b/target/linux/ath79/dts/qca9531_comfast_cf-wr752ac-v1.dts index 2fbdc8fd07..d57c943810 100644 --- a/target/linux/ath79/dts/qca9531_comfast_cf-wr752ac-v1.dts +++ b/target/linux/ath79/dts/qca9531_comfast_cf-wr752ac-v1.dts @@ -67,8 +67,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts b/target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts index dafce16a2a..9f9dd44812 100644 --- a/target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts +++ b/target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts @@ -90,8 +90,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_engenius_ews511ap.dts b/target/linux/ath79/dts/qca9531_engenius_ews511ap.dts index eb91d7e0b4..736ebf2dd3 100644 --- a/target/linux/ath79/dts/qca9531_engenius_ews511ap.dts +++ b/target/linux/ath79/dts/qca9531_engenius_ews511ap.dts @@ -91,8 +91,6 @@ &spi { status = "okay"; - num-cs = <0>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi b/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi index 86c895fc6a..6422dc60f5 100644 --- a/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi +++ b/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi @@ -74,8 +74,6 @@ &spi { status = "okay"; - num-cs = <2>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_glinet_gl-ar750.dts b/target/linux/ath79/dts/qca9531_glinet_gl-ar750.dts index 57a7ed1a0c..f3d62b36a8 100644 --- a/target/linux/ath79/dts/qca9531_glinet_gl-ar750.dts +++ b/target/linux/ath79/dts/qca9531_glinet_gl-ar750.dts @@ -90,7 +90,6 @@ &spi { status = "okay"; - num-cs = <0>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_glinet_gl-e750.dts b/target/linux/ath79/dts/qca9531_glinet_gl-e750.dts index b463be0ec4..de7d5f577a 100644 --- a/target/linux/ath79/dts/qca9531_glinet_gl-e750.dts +++ b/target/linux/ath79/dts/qca9531_glinet_gl-e750.dts @@ -61,7 +61,6 @@ &spi { status = "okay"; - num-cs = <2>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_glinet_gl-x750.dts b/target/linux/ath79/dts/qca9531_glinet_gl-x750.dts index acb458f7ec..f32cb6e39a 100644 --- a/target/linux/ath79/dts/qca9531_glinet_gl-x750.dts +++ b/target/linux/ath79/dts/qca9531_glinet_gl-x750.dts @@ -80,7 +80,6 @@ &spi { status = "okay"; - num-cs = <0>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_telco_t1.dts b/target/linux/ath79/dts/qca9531_telco_t1.dts index 455bfb336f..252d9073c8 100644 --- a/target/linux/ath79/dts/qca9531_telco_t1.dts +++ b/target/linux/ath79/dts/qca9531_telco_t1.dts @@ -79,7 +79,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9531_tplink_tl-mr3420-v3.dts b/target/linux/ath79/dts/qca9531_tplink_tl-mr3420-v3.dts index 2f6c4147c9..d163a73228 100644 --- a/target/linux/ath79/dts/qca9531_tplink_tl-mr3420-v3.dts +++ b/target/linux/ath79/dts/qca9531_tplink_tl-mr3420-v3.dts @@ -139,8 +139,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts b/target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts index bd3858e59a..751a69154f 100644 --- a/target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts +++ b/target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts @@ -96,8 +96,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_wallys_dr531.dts b/target/linux/ath79/dts/qca9531_wallys_dr531.dts index 777a55b6f3..2375a054ce 100644 --- a/target/linux/ath79/dts/qca9531_wallys_dr531.dts +++ b/target/linux/ath79/dts/qca9531_wallys_dr531.dts @@ -94,8 +94,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9531_yuncore_a770.dts b/target/linux/ath79/dts/qca9531_yuncore_a770.dts index aaa9e1f908..a6738c7d9a 100644 --- a/target/linux/ath79/dts/qca9531_yuncore_a770.dts +++ b/target/linux/ath79/dts/qca9531_yuncore_a770.dts @@ -57,8 +57,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_comfast_cf-e110n-v2.dts b/target/linux/ath79/dts/qca9533_comfast_cf-e110n-v2.dts index 961caa8ade..c4918205fd 100644 --- a/target/linux/ath79/dts/qca9533_comfast_cf-e110n-v2.dts +++ b/target/linux/ath79/dts/qca9533_comfast_cf-e110n-v2.dts @@ -92,8 +92,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "winbond,w25q128", "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_dlink_dap-13xx.dtsi b/target/linux/ath79/dts/qca9533_dlink_dap-13xx.dtsi index 5002079940..cd095c1559 100644 --- a/target/linux/ath79/dts/qca9533_dlink_dap-13xx.dtsi +++ b/target/linux/ath79/dts/qca9533_dlink_dap-13xx.dtsi @@ -67,8 +67,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_mikrotik_routerboard-16m.dtsi b/target/linux/ath79/dts/qca9533_mikrotik_routerboard-16m.dtsi index 539c07c322..effa2d3619 100644 --- a/target/linux/ath79/dts/qca9533_mikrotik_routerboard-16m.dtsi +++ b/target/linux/ath79/dts/qca9533_mikrotik_routerboard-16m.dtsi @@ -21,8 +21,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_tplink_cpexxx.dtsi b/target/linux/ath79/dts/qca9533_tplink_cpexxx.dtsi index 7c64dcc24f..f663a1fcd7 100644 --- a/target/linux/ath79/dts/qca9533_tplink_cpexxx.dtsi +++ b/target/linux/ath79/dts/qca9533_tplink_cpexxx.dtsi @@ -56,8 +56,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { #address-cells = <1>; #size-cells = <1>; diff --git a/target/linux/ath79/dts/qca9533_tplink_tl-wa801nd.dtsi b/target/linux/ath79/dts/qca9533_tplink_tl-wa801nd.dtsi index c45280aff0..28e74d5ced 100644 --- a/target/linux/ath79/dts/qca9533_tplink_tl-wa801nd.dtsi +++ b/target/linux/ath79/dts/qca9533_tplink_tl-wa801nd.dtsi @@ -70,8 +70,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_tplink_tl-wa850re-v2.dts b/target/linux/ath79/dts/qca9533_tplink_tl-wa850re-v2.dts index 7d8519ef9b..e723587a0b 100644 --- a/target/linux/ath79/dts/qca9533_tplink_tl-wa850re-v2.dts +++ b/target/linux/ath79/dts/qca9533_tplink_tl-wa850re-v2.dts @@ -98,8 +98,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { #address-cells = <1>; #size-cells = <1>; diff --git a/target/linux/ath79/dts/qca9533_tplink_tl-wr802n.dtsi b/target/linux/ath79/dts/qca9533_tplink_tl-wr802n.dtsi index b6349e5371..26edbb2cd0 100644 --- a/target/linux/ath79/dts/qca9533_tplink_tl-wr802n.dtsi +++ b/target/linux/ath79/dts/qca9533_tplink_tl-wr802n.dtsi @@ -41,8 +41,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_tplink_tl-wr841.dtsi b/target/linux/ath79/dts/qca9533_tplink_tl-wr841.dtsi index b68cd87e98..842815d683 100644 --- a/target/linux/ath79/dts/qca9533_tplink_tl-wr841.dtsi +++ b/target/linux/ath79/dts/qca9533_tplink_tl-wr841.dtsi @@ -76,8 +76,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_tplink_tl-wr842n-v3.dts b/target/linux/ath79/dts/qca9533_tplink_tl-wr842n-v3.dts index 269ca03645..f0b42a6e4c 100644 --- a/target/linux/ath79/dts/qca9533_tplink_tl-wr842n-v3.dts +++ b/target/linux/ath79/dts/qca9533_tplink_tl-wr842n-v3.dts @@ -116,8 +116,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9533_ubnt_aircube-isp.dts b/target/linux/ath79/dts/qca9533_ubnt_aircube-isp.dts index b74b0756fe..8b9469ebc0 100644 --- a/target/linux/ath79/dts/qca9533_ubnt_aircube-isp.dts +++ b/target/linux/ath79/dts/qca9533_ubnt_aircube-isp.dts @@ -27,7 +27,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca953x_tplink_tl-wr810n.dtsi b/target/linux/ath79/dts/qca953x_tplink_tl-wr810n.dtsi index 091d6696a3..53e5fe9bcc 100644 --- a/target/linux/ath79/dts/qca953x_tplink_tl-wr810n.dtsi +++ b/target/linux/ath79/dts/qca953x_tplink_tl-wr810n.dtsi @@ -58,8 +58,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9556_avm_fritz-repeater.dtsi b/target/linux/ath79/dts/qca9556_avm_fritz-repeater.dtsi index 400f8eb974..befb933483 100644 --- a/target/linux/ath79/dts/qca9556_avm_fritz-repeater.dtsi +++ b/target/linux/ath79/dts/qca9556_avm_fritz-repeater.dtsi @@ -23,7 +23,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts b/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts index 572dc02205..a3f9ec28a4 100644 --- a/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts +++ b/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts @@ -60,8 +60,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9557_buffalo_bhr-4grv2.dts b/target/linux/ath79/dts/qca9557_buffalo_bhr-4grv2.dts index 33053771ad..8d437a6792 100644 --- a/target/linux/ath79/dts/qca9557_buffalo_bhr-4grv2.dts +++ b/target/linux/ath79/dts/qca9557_buffalo_bhr-4grv2.dts @@ -64,8 +64,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9557_iodata_wn-ac-dgr.dtsi b/target/linux/ath79/dts/qca9557_iodata_wn-ac-dgr.dtsi index f19e186796..2f6bf4dbee 100644 --- a/target/linux/ath79/dts/qca9557_iodata_wn-ac-dgr.dtsi +++ b/target/linux/ath79/dts/qca9557_iodata_wn-ac-dgr.dtsi @@ -90,8 +90,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9557_zyxel_nbg6616.dts b/target/linux/ath79/dts/qca9557_zyxel_nbg6616.dts index d56fab120b..fff23dcf2b 100644 --- a/target/linux/ath79/dts/qca9557_zyxel_nbg6616.dts +++ b/target/linux/ath79/dts/qca9557_zyxel_nbg6616.dts @@ -61,8 +61,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_allnet_all-wap02860ac.dts b/target/linux/ath79/dts/qca9558_allnet_all-wap02860ac.dts index 1cca39de38..aee8bbff56 100644 --- a/target/linux/ath79/dts/qca9558_allnet_all-wap02860ac.dts +++ b/target/linux/ath79/dts/qca9558_allnet_all-wap02860ac.dts @@ -91,8 +91,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts index 240d20ff1f..639c877177 100644 --- a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts +++ b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts @@ -9,7 +9,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts index 1b20c3b615..5dda5f1869 100644 --- a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts +++ b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts @@ -9,7 +9,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_devolo_dvl1xxx.dtsi b/target/linux/ath79/dts/qca9558_devolo_dvl1xxx.dtsi index f41d8985a2..a1b019a7ad 100644 --- a/target/linux/ath79/dts/qca9558_devolo_dvl1xxx.dtsi +++ b/target/linux/ath79/dts/qca9558_devolo_dvl1xxx.dtsi @@ -47,8 +47,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts b/target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts index f0cf22511a..b8429fed45 100644 --- a/target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts +++ b/target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts @@ -50,7 +50,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { #address-cells = <1>; diff --git a/target/linux/ath79/dts/qca9558_domywifi_dw33d.dts b/target/linux/ath79/dts/qca9558_domywifi_dw33d.dts index 4af1860aca..fae0853922 100644 --- a/target/linux/ath79/dts/qca9558_domywifi_dw33d.dts +++ b/target/linux/ath79/dts/qca9558_domywifi_dw33d.dts @@ -108,8 +108,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_engenius_ecb1750.dts b/target/linux/ath79/dts/qca9558_engenius_ecb1750.dts index 5e38f2e459..9f2c9c048b 100644 --- a/target/linux/ath79/dts/qca9558_engenius_ecb1750.dts +++ b/target/linux/ath79/dts/qca9558_engenius_ecb1750.dts @@ -65,8 +65,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_engenius_epg5000.dts b/target/linux/ath79/dts/qca9558_engenius_epg5000.dts index 9d37664306..5e4d224d3e 100644 --- a/target/linux/ath79/dts/qca9558_engenius_epg5000.dts +++ b/target/linux/ath79/dts/qca9558_engenius_epg5000.dts @@ -99,8 +99,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_librerouter_librerouter-v1.dts b/target/linux/ath79/dts/qca9558_librerouter_librerouter-v1.dts index c4a73f2563..5788623025 100644 --- a/target/linux/ath79/dts/qca9558_librerouter_librerouter-v1.dts +++ b/target/linux/ath79/dts/qca9558_librerouter_librerouter-v1.dts @@ -102,8 +102,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi b/target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi index 04abb8717e..40a4ead19d 100644 --- a/target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi +++ b/target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi @@ -131,8 +131,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_ocedo_koala.dts b/target/linux/ath79/dts/qca9558_ocedo_koala.dts index dbefa40dcf..a3a3cc3e31 100644 --- a/target/linux/ath79/dts/qca9558_ocedo_koala.dts +++ b/target/linux/ath79/dts/qca9558_ocedo_koala.dts @@ -69,7 +69,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_ocedo_ursus.dts b/target/linux/ath79/dts/qca9558_ocedo_ursus.dts index 8c7a7af91b..79ed751d66 100644 --- a/target/linux/ath79/dts/qca9558_ocedo_ursus.dts +++ b/target/linux/ath79/dts/qca9558_ocedo_ursus.dts @@ -40,7 +40,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts b/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts index eb196eb2e5..fabfe14cf8 100644 --- a/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts +++ b/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts @@ -91,7 +91,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_qxwlan_e558.dtsi b/target/linux/ath79/dts/qca9558_qxwlan_e558.dtsi index 99f37ac025..aa4bd75f2f 100644 --- a/target/linux/ath79/dts/qca9558_qxwlan_e558.dtsi +++ b/target/linux/ath79/dts/qca9558_qxwlan_e558.dtsi @@ -62,7 +62,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_sitecom_wlr-8100.dts b/target/linux/ath79/dts/qca9558_sitecom_wlr-8100.dts index 412a6e7b33..ccc08c39f1 100644 --- a/target/linux/ath79/dts/qca9558_sitecom_wlr-8100.dts +++ b/target/linux/ath79/dts/qca9558_sitecom_wlr-8100.dts @@ -63,8 +63,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_tplink_archer-c.dtsi b/target/linux/ath79/dts/qca9558_tplink_archer-c.dtsi index d59d87b5e6..87dbdd0a5f 100644 --- a/target/linux/ath79/dts/qca9558_tplink_archer-c.dtsi +++ b/target/linux/ath79/dts/qca9558_tplink_archer-c.dtsi @@ -118,8 +118,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_tplink_archer-d7-v1.dts b/target/linux/ath79/dts/qca9558_tplink_archer-d7-v1.dts index 689e478e19..fd1717b668 100644 --- a/target/linux/ath79/dts/qca9558_tplink_archer-d7-v1.dts +++ b/target/linux/ath79/dts/qca9558_tplink_archer-d7-v1.dts @@ -14,8 +14,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_tplink_archer-d7b-v1.dts b/target/linux/ath79/dts/qca9558_tplink_archer-d7b-v1.dts index 2273298226..d2ef7e82a7 100644 --- a/target/linux/ath79/dts/qca9558_tplink_archer-d7b-v1.dts +++ b/target/linux/ath79/dts/qca9558_tplink_archer-d7b-v1.dts @@ -14,8 +14,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_tplink_re350k-v1.dts b/target/linux/ath79/dts/qca9558_tplink_re350k-v1.dts index 11ebbdacea..b0a3293d4f 100644 --- a/target/linux/ath79/dts/qca9558_tplink_re350k-v1.dts +++ b/target/linux/ath79/dts/qca9558_tplink_re350k-v1.dts @@ -119,8 +119,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_tplink_rex5x.dtsi b/target/linux/ath79/dts/qca9558_tplink_rex5x.dtsi index 55f4edf19e..225af82c93 100644 --- a/target/linux/ath79/dts/qca9558_tplink_rex5x.dtsi +++ b/target/linux/ath79/dts/qca9558_tplink_rex5x.dtsi @@ -106,7 +106,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_tplink_tl-wdr4900-v2.dts b/target/linux/ath79/dts/qca9558_tplink_tl-wdr4900-v2.dts index 9f241ebc2f..8f525d57bc 100644 --- a/target/linux/ath79/dts/qca9558_tplink_tl-wdr4900-v2.dts +++ b/target/linux/ath79/dts/qca9558_tplink_tl-wdr4900-v2.dts @@ -141,8 +141,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd.dtsi b/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd.dtsi index 476162a00e..66059b890b 100644 --- a/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd.dtsi +++ b/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd.dtsi @@ -93,7 +93,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_tplink_tl-wr941n-v7-cn.dts b/target/linux/ath79/dts/qca9558_tplink_tl-wr941n-v7-cn.dts index bbbf69fa59..bb1993516e 100644 --- a/target/linux/ath79/dts/qca9558_tplink_tl-wr941n-v7-cn.dts +++ b/target/linux/ath79/dts/qca9558_tplink_tl-wr941n-v7-cn.dts @@ -63,7 +63,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9558_trendnet_tew-823dru.dts b/target/linux/ath79/dts/qca9558_trendnet_tew-823dru.dts index 871b69af78..e3f3643b37 100644 --- a/target/linux/ath79/dts/qca9558_trendnet_tew-823dru.dts +++ b/target/linux/ath79/dts/qca9558_trendnet_tew-823dru.dts @@ -104,8 +104,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts b/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts index 94991a8f49..9aee8c362c 100644 --- a/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts +++ b/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts @@ -82,8 +82,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca955x_ubnt_xc.dtsi b/target/linux/ath79/dts/qca955x_ubnt_xc.dtsi index 569ba3a720..7e022e46a1 100644 --- a/target/linux/ath79/dts/qca955x_ubnt_xc.dtsi +++ b/target/linux/ath79/dts/qca955x_ubnt_xc.dtsi @@ -15,7 +15,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9561_avm_fritz4020.dts b/target/linux/ath79/dts/qca9561_avm_fritz4020.dts index e7e421c076..13e6eb1673 100644 --- a/target/linux/ath79/dts/qca9561_avm_fritz4020.dts +++ b/target/linux/ath79/dts/qca9561_avm_fritz4020.dts @@ -102,8 +102,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9561_tplink_archer-c25-v1.dts b/target/linux/ath79/dts/qca9561_tplink_archer-c25-v1.dts index 6659bbe688..8776299080 100644 --- a/target/linux/ath79/dts/qca9561_tplink_archer-c25-v1.dts +++ b/target/linux/ath79/dts/qca9561_tplink_archer-c25-v1.dts @@ -114,8 +114,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9561_tplink_archer-c58-v1.dts b/target/linux/ath79/dts/qca9561_tplink_archer-c58-v1.dts index 464bc40b44..ea86b8f35e 100644 --- a/target/linux/ath79/dts/qca9561_tplink_archer-c58-v1.dts +++ b/target/linux/ath79/dts/qca9561_tplink_archer-c58-v1.dts @@ -9,7 +9,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9561_tplink_archer-c59-v1.dts b/target/linux/ath79/dts/qca9561_tplink_archer-c59-v1.dts index 4430d05247..07e8379172 100644 --- a/target/linux/ath79/dts/qca9561_tplink_archer-c59-v1.dts +++ b/target/linux/ath79/dts/qca9561_tplink_archer-c59-v1.dts @@ -33,7 +33,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9561_tplink_archer-c59-v2.dts b/target/linux/ath79/dts/qca9561_tplink_archer-c59-v2.dts index c407dc3cde..c1321f5d20 100644 --- a/target/linux/ath79/dts/qca9561_tplink_archer-c59-v2.dts +++ b/target/linux/ath79/dts/qca9561_tplink_archer-c59-v2.dts @@ -33,7 +33,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9561_tplink_archer-c60-v1.dts b/target/linux/ath79/dts/qca9561_tplink_archer-c60-v1.dts index 2a6bea30f2..a3bbf3e49c 100644 --- a/target/linux/ath79/dts/qca9561_tplink_archer-c60-v1.dts +++ b/target/linux/ath79/dts/qca9561_tplink_archer-c60-v1.dts @@ -21,7 +21,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9561_tplink_archer-c60-v2.dts b/target/linux/ath79/dts/qca9561_tplink_archer-c60-v2.dts index afef276db2..2bcab77dbf 100644 --- a/target/linux/ath79/dts/qca9561_tplink_archer-c60-v2.dts +++ b/target/linux/ath79/dts/qca9561_tplink_archer-c60-v2.dts @@ -21,7 +21,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9561_tplink_archer-c60-v3.dts b/target/linux/ath79/dts/qca9561_tplink_archer-c60-v3.dts index cda2a3615b..c1a0a8c2e5 100644 --- a/target/linux/ath79/dts/qca9561_tplink_archer-c60-v3.dts +++ b/target/linux/ath79/dts/qca9561_tplink_archer-c60-v3.dts @@ -16,8 +16,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9561_tplink_eap225-wall-v2.dts b/target/linux/ath79/dts/qca9561_tplink_eap225-wall-v2.dts index 21203451cb..4dea09f429 100644 --- a/target/linux/ath79/dts/qca9561_tplink_eap225-wall-v2.dts +++ b/target/linux/ath79/dts/qca9561_tplink_eap225-wall-v2.dts @@ -66,7 +66,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9561_xiaomi_mi-router-4q.dts b/target/linux/ath79/dts/qca9561_xiaomi_mi-router-4q.dts index a403877c89..22bd8c941d 100644 --- a/target/linux/ath79/dts/qca9561_xiaomi_mi-router-4q.dts +++ b/target/linux/ath79/dts/qca9561_xiaomi_mi-router-4q.dts @@ -58,7 +58,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_compex_wpj563.dts b/target/linux/ath79/dts/qca9563_compex_wpj563.dts index 913155a0bd..74b6da9468 100644 --- a/target/linux/ath79/dts/qca9563_compex_wpj563.dts +++ b/target/linux/ath79/dts/qca9563_compex_wpj563.dts @@ -65,8 +65,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_dlink_dir-842-c.dtsi b/target/linux/ath79/dts/qca9563_dlink_dir-842-c.dtsi index 02a3e3e44a..3b45681bc0 100644 --- a/target/linux/ath79/dts/qca9563_dlink_dir-842-c.dtsi +++ b/target/linux/ath79/dts/qca9563_dlink_dir-842-c.dtsi @@ -61,8 +61,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_dlink_dir-859-a1.dts b/target/linux/ath79/dts/qca9563_dlink_dir-859-a1.dts index 572a0bc6ea..49805ec319 100644 --- a/target/linux/ath79/dts/qca9563_dlink_dir-859-a1.dts +++ b/target/linux/ath79/dts/qca9563_dlink_dir-859-a1.dts @@ -80,8 +80,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_elecom_wrc-ghbk2-i.dtsi b/target/linux/ath79/dts/qca9563_elecom_wrc-ghbk2-i.dtsi index 7efdfa62af..90d91a6d8e 100644 --- a/target/linux/ath79/dts/qca9563_elecom_wrc-ghbk2-i.dtsi +++ b/target/linux/ath79/dts/qca9563_elecom_wrc-ghbk2-i.dtsi @@ -51,7 +51,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi index 24b0860d7c..75103afdd7 100644 --- a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi +++ b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi @@ -70,8 +70,6 @@ &spi { status = "okay"; - num-cs = <2>; - flash_nor: flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_nec_wg1200cr.dts b/target/linux/ath79/dts/qca9563_nec_wg1200cr.dts index 0f77cfa5f1..a224ddbd5f 100644 --- a/target/linux/ath79/dts/qca9563_nec_wg1200cr.dts +++ b/target/linux/ath79/dts/qca9563_nec_wg1200cr.dts @@ -70,8 +70,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_nec_wg800hp.dts b/target/linux/ath79/dts/qca9563_nec_wg800hp.dts index befd1620e9..8a4226f35c 100644 --- a/target/linux/ath79/dts/qca9563_nec_wg800hp.dts +++ b/target/linux/ath79/dts/qca9563_nec_wg800hp.dts @@ -94,7 +94,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi b/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi index ca29336147..e77298bbd9 100644 --- a/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi +++ b/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi @@ -95,8 +95,6 @@ &spi { status = "okay"; - num-cs = <2>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_phicomm_k2t.dts b/target/linux/ath79/dts/qca9563_phicomm_k2t.dts index e89a4de1ee..b86289a3ab 100644 --- a/target/linux/ath79/dts/qca9563_phicomm_k2t.dts +++ b/target/linux/ath79/dts/qca9563_phicomm_k2t.dts @@ -55,8 +55,6 @@ }; &spi { - num-cs = <1>; - status = "okay"; flash@0 { diff --git a/target/linux/ath79/dts/qca9563_qxwlan_e1700ac.dtsi b/target/linux/ath79/dts/qca9563_qxwlan_e1700ac.dtsi index 0c397e7dd9..33d0095da4 100644 --- a/target/linux/ath79/dts/qca9563_qxwlan_e1700ac.dtsi +++ b/target/linux/ath79/dts/qca9563_qxwlan_e1700ac.dtsi @@ -56,8 +56,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_rosinson_wr818.dts b/target/linux/ath79/dts/qca9563_rosinson_wr818.dts index ce73d0838f..512d36bbe0 100644 --- a/target/linux/ath79/dts/qca9563_rosinson_wr818.dts +++ b/target/linux/ath79/dts/qca9563_rosinson_wr818.dts @@ -50,8 +50,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_archer-c2-v3.dts b/target/linux/ath79/dts/qca9563_tplink_archer-c2-v3.dts index 95ac123f48..6e7bd9986a 100644 --- a/target/linux/ath79/dts/qca9563_tplink_archer-c2-v3.dts +++ b/target/linux/ath79/dts/qca9563_tplink_archer-c2-v3.dts @@ -99,8 +99,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2-us.dts b/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2-us.dts index 399f410612..892e87ebaf 100644 --- a/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2-us.dts +++ b/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2-us.dts @@ -77,8 +77,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2.dts b/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2.dts index d00320ad02..c64402bcfe 100644 --- a/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2.dts +++ b/target/linux/ath79/dts/qca9563_tplink_archer-c6-v2.dts @@ -77,8 +77,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_archer-c7-v4.dts b/target/linux/ath79/dts/qca9563_tplink_archer-c7-v4.dts index 77ba6c4ffb..e0d03e1640 100644 --- a/target/linux/ath79/dts/qca9563_tplink_archer-c7-v4.dts +++ b/target/linux/ath79/dts/qca9563_tplink_archer-c7-v4.dts @@ -184,8 +184,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_archer-x7-v5.dtsi b/target/linux/ath79/dts/qca9563_tplink_archer-x7-v5.dtsi index 63c9977c6c..c13bafce0b 100644 --- a/target/linux/ath79/dts/qca9563_tplink_archer-x7-v5.dtsi +++ b/target/linux/ath79/dts/qca9563_tplink_archer-x7-v5.dtsi @@ -126,8 +126,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_eap245-v3.dts b/target/linux/ath79/dts/qca9563_tplink_eap245-v3.dts index 184c208f58..fdb3d8cdc1 100644 --- a/target/linux/ath79/dts/qca9563_tplink_eap245-v3.dts +++ b/target/linux/ath79/dts/qca9563_tplink_eap245-v3.dts @@ -54,7 +54,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi b/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi index 4c550fff6e..0be46301f0 100644 --- a/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi +++ b/target/linux/ath79/dts/qca9563_tplink_eap2x5-1port.dtsi @@ -32,7 +32,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_tplink_re450.dtsi b/target/linux/ath79/dts/qca9563_tplink_re450.dtsi index 85b9cf6a10..e09c1ba63f 100644 --- a/target/linux/ath79/dts/qca9563_tplink_re450.dtsi +++ b/target/linux/ath79/dts/qca9563_tplink_re450.dtsi @@ -115,8 +115,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_tl-wpa8630.dtsi b/target/linux/ath79/dts/qca9563_tplink_tl-wpa8630.dtsi index 0ce1da832c..1503bf4c8e 100644 --- a/target/linux/ath79/dts/qca9563_tplink_tl-wpa8630.dtsi +++ b/target/linux/ath79/dts/qca9563_tplink_tl-wpa8630.dtsi @@ -85,8 +85,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_tplink_tl-wr1043n-v5.dts b/target/linux/ath79/dts/qca9563_tplink_tl-wr1043n-v5.dts index 208a5ca88e..cba124aa85 100644 --- a/target/linux/ath79/dts/qca9563_tplink_tl-wr1043n-v5.dts +++ b/target/linux/ath79/dts/qca9563_tplink_tl-wr1043n-v5.dts @@ -9,7 +9,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_tplink_tl-wr1043nd-v4.dts b/target/linux/ath79/dts/qca9563_tplink_tl-wr1043nd-v4.dts index 2f2d59ebd3..ddb986ffdd 100644 --- a/target/linux/ath79/dts/qca9563_tplink_tl-wr1043nd-v4.dts +++ b/target/linux/ath79/dts/qca9563_tplink_tl-wr1043nd-v4.dts @@ -21,8 +21,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi b/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi index 7a5a957f7b..14532d3b7f 100644 --- a/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi +++ b/target/linux/ath79/dts/qca9563_ubnt_unifiac.dtsi @@ -49,7 +49,6 @@ &spi { status = "okay"; - num-cs = <1>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_yuncore_xd4200.dtsi b/target/linux/ath79/dts/qca9563_yuncore_xd4200.dtsi index a14cf48340..f8fdf5e27d 100644 --- a/target/linux/ath79/dts/qca9563_yuncore_xd4200.dtsi +++ b/target/linux/ath79/dts/qca9563_yuncore_xd4200.dtsi @@ -64,8 +64,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; diff --git a/target/linux/ath79/dts/tp9343_tplink_tl-wx.dtsi b/target/linux/ath79/dts/tp9343_tplink_tl-wx.dtsi index 30e2cb6439..3e591ec908 100644 --- a/target/linux/ath79/dts/tp9343_tplink_tl-wx.dtsi +++ b/target/linux/ath79/dts/tp9343_tplink_tl-wx.dtsi @@ -14,8 +14,6 @@ &spi { status = "okay"; - num-cs = <1>; - flash@0 { compatible = "jedec,spi-nor"; reg = <0>; From aafee2b3e9488028dcd538b2a7c10149ca243fdb Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Tue, 1 Dec 2020 14:14:59 +0100 Subject: [PATCH 39/41] ramips: drop redundant status for gpio/gpio0 The first gpio controller (gpio or gpio0) is always enabled by default in the SoC DTSI files. No need to set status=okay in the device DTS files a second time. Remove the redundant statements. Signed-off-by: Adrian Schmutzler --- target/linux/ramips/dts/mt7620a_alfa-network_tube-e4g.dts | 4 ---- target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts | 4 ---- target/linux/ramips/dts/mt7620a_dlink_dch-m225.dts | 4 ---- target/linux/ramips/dts/mt7620a_dlink_dir-510l.dts | 4 ---- target/linux/ramips/dts/mt7620a_dovado_tiny-ac.dts | 4 ---- target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts | 4 ---- target/linux/ramips/dts/mt7620a_glinet_gl-mt300n.dts | 4 ---- target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts | 4 ---- target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts | 4 ---- target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi | 4 ---- target/linux/ramips/dts/mt7620a_lava_lr-25g001.dts | 4 ---- target/linux/ramips/dts/mt7620a_lenovo_newifi-y1.dtsi | 4 ---- target/linux/ramips/dts/mt7620a_netgear_ex3x00_ex61xx.dtsi | 4 ---- target/linux/ramips/dts/mt7620a_phicomm_psg1218.dtsi | 4 ---- target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts | 4 ---- .../linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts | 4 ---- target/linux/ramips/dts/mt7620a_xiaomi_miwifi-mini.dts | 4 ---- target/linux/ramips/dts/mt7620a_youku_yk1.dts | 4 ---- target/linux/ramips/dts/mt7620a_yukai_bocco.dts | 4 ---- target/linux/ramips/dts/mt7620a_zbtlink_zbt-ape522ii.dts | 4 ---- target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi | 4 ---- target/linux/ramips/dts/mt7620a_zte_q7.dts | 4 ---- target/linux/ramips/dts/mt7620n_comfast_cf-wr800n.dts | 4 ---- target/linux/ramips/dts/mt7620n_kingston_mlw221.dts | 4 ---- target/linux/ramips/dts/mt7620n_kingston_mlwg2.dts | 4 ---- target/linux/ramips/dts/mt7620n_vonets_var11n-300.dts | 4 ---- target/linux/ramips/dts/mt7621_telco-electronics_x1.dts | 4 ---- target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi | 4 ---- target/linux/ramips/dts/rt2880_airlink101_ar670w.dts | 4 ---- target/linux/ramips/dts/rt2880_airlink101_ar725w.dts | 4 ---- target/linux/ramips/dts/rt2880_asus_rt-n15.dts | 4 ---- target/linux/ramips/dts/rt2880_belkin_f5d8235-v1.dts | 4 ---- target/linux/ramips/dts/rt2880_buffalo_wli-tx4-ag300n.dts | 4 ---- target/linux/ramips/dts/rt2880_buffalo_wzr-agl300nh.dts | 4 ---- target/linux/ramips/dts/rt2880_dlink_dap-1522-a1.dts | 4 ---- target/linux/ramips/dts/rt2880_ralink_v11st-fe.dts | 4 ---- target/linux/ramips/dts/rt3050_allnet_all0256n.dtsi | 4 ---- target/linux/ramips/dts/rt3050_alphanetworks_asl26555.dtsi | 4 ---- target/linux/ramips/dts/rt3352_allnet_all5002.dts | 4 ---- target/linux/ramips/dts/rt5350_airlive_air3gii.dts | 4 ---- target/linux/ramips/dts/rt5350_allnet_all5003.dts | 4 ---- target/linux/ramips/dts/rt5350_easyacc_wizard-8800.dts | 4 ---- target/linux/ramips/dts/rt5350_hootoo_ht-tm02.dts | 4 ---- target/linux/ramips/dts/rt5350_nixcore_x1.dtsi | 4 ---- target/linux/ramips/dts/rt5350_omnima_miniembplug.dts | 4 ---- 45 files changed, 180 deletions(-) diff --git a/target/linux/ramips/dts/mt7620a_alfa-network_tube-e4g.dts b/target/linux/ramips/dts/mt7620a_alfa-network_tube-e4g.dts index 42047390b0..30a0201c39 100644 --- a/target/linux/ramips/dts/mt7620a_alfa-network_tube-e4g.dts +++ b/target/linux/ramips/dts/mt7620a_alfa-network_tube-e4g.dts @@ -106,10 +106,6 @@ mtd-mac-address = <&factory 0x28>; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts b/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts index 07586f6922..fc2b74db2a 100644 --- a/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts +++ b/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts @@ -96,10 +96,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_dlink_dch-m225.dts b/target/linux/ramips/dts/mt7620a_dlink_dch-m225.dts index bbd193b4ac..63667da281 100644 --- a/target/linux/ramips/dts/mt7620a_dlink_dch-m225.dts +++ b/target/linux/ramips/dts/mt7620a_dlink_dch-m225.dts @@ -69,10 +69,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_dlink_dir-510l.dts b/target/linux/ramips/dts/mt7620a_dlink_dir-510l.dts index 6ad3f41560..f4db67648a 100644 --- a/target/linux/ramips/dts/mt7620a_dlink_dir-510l.dts +++ b/target/linux/ramips/dts/mt7620a_dlink_dir-510l.dts @@ -59,10 +59,6 @@ status = "okay"; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/mt7620a_dovado_tiny-ac.dts b/target/linux/ramips/dts/mt7620a_dovado_tiny-ac.dts index 4f25b34567..9450596f1b 100644 --- a/target/linux/ramips/dts/mt7620a_dovado_tiny-ac.dts +++ b/target/linux/ramips/dts/mt7620a_dovado_tiny-ac.dts @@ -45,10 +45,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio2 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts b/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts index f0ad9c3b4c..00153fab64 100644 --- a/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts +++ b/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts @@ -62,10 +62,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_glinet_gl-mt300n.dts b/target/linux/ramips/dts/mt7620a_glinet_gl-mt300n.dts index aea243617f..43dfa0d5f5 100644 --- a/target/linux/ramips/dts/mt7620a_glinet_gl-mt300n.dts +++ b/target/linux/ramips/dts/mt7620a_glinet_gl-mt300n.dts @@ -57,10 +57,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts b/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts index 603b2d884c..e3189a2f9b 100644 --- a/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts +++ b/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts @@ -57,10 +57,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts b/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts index d4e0a81e9f..a0ebe4fff5 100644 --- a/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts +++ b/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts @@ -96,10 +96,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi b/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi index 0676c6f84b..06f4054c50 100644 --- a/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi +++ b/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi @@ -38,10 +38,6 @@ ralink,wdtmux = <1>; }; -&gpio0 { - status = "okay"; -}; - &gpio2 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_lava_lr-25g001.dts b/target/linux/ramips/dts/mt7620a_lava_lr-25g001.dts index d5fb543a63..962ef3371d 100644 --- a/target/linux/ramips/dts/mt7620a_lava_lr-25g001.dts +++ b/target/linux/ramips/dts/mt7620a_lava_lr-25g001.dts @@ -61,10 +61,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/mt7620a_lenovo_newifi-y1.dtsi b/target/linux/ramips/dts/mt7620a_lenovo_newifi-y1.dtsi index ffa8747f4d..c7b7ea7b90 100644 --- a/target/linux/ramips/dts/mt7620a_lenovo_newifi-y1.dtsi +++ b/target/linux/ramips/dts/mt7620a_lenovo_newifi-y1.dtsi @@ -21,10 +21,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio2 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_netgear_ex3x00_ex61xx.dtsi b/target/linux/ramips/dts/mt7620a_netgear_ex3x00_ex61xx.dtsi index 0f0d9aee7e..11e8f7fce6 100644 --- a/target/linux/ramips/dts/mt7620a_netgear_ex3x00_ex61xx.dtsi +++ b/target/linux/ramips/dts/mt7620a_netgear_ex3x00_ex61xx.dtsi @@ -68,10 +68,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio2 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_phicomm_psg1218.dtsi b/target/linux/ramips/dts/mt7620a_phicomm_psg1218.dtsi index dbfec00f81..4163a9cd43 100644 --- a/target/linux/ramips/dts/mt7620a_phicomm_psg1218.dtsi +++ b/target/linux/ramips/dts/mt7620a_phicomm_psg1218.dtsi @@ -44,10 +44,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts b/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts index 089b74bbc6..e6374434ed 100644 --- a/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts +++ b/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts @@ -40,10 +40,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts b/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts index c4b5cdf30e..ae0d364d3e 100644 --- a/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts +++ b/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts @@ -24,10 +24,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/mt7620a_xiaomi_miwifi-mini.dts b/target/linux/ramips/dts/mt7620a_xiaomi_miwifi-mini.dts index 14cbc1830f..7d118e32b9 100644 --- a/target/linux/ramips/dts/mt7620a_xiaomi_miwifi-mini.dts +++ b/target/linux/ramips/dts/mt7620a_xiaomi_miwifi-mini.dts @@ -50,10 +50,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_youku_yk1.dts b/target/linux/ramips/dts/mt7620a_youku_yk1.dts index 64eac1df36..86e2031aa6 100644 --- a/target/linux/ramips/dts/mt7620a_youku_yk1.dts +++ b/target/linux/ramips/dts/mt7620a_youku_yk1.dts @@ -51,10 +51,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_yukai_bocco.dts b/target/linux/ramips/dts/mt7620a_yukai_bocco.dts index 29e77a058c..6ad52d21ba 100644 --- a/target/linux/ramips/dts/mt7620a_yukai_bocco.dts +++ b/target/linux/ramips/dts/mt7620a_yukai_bocco.dts @@ -54,10 +54,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-ape522ii.dts b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-ape522ii.dts index aaa35a72b2..aa26f4ea98 100644 --- a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-ape522ii.dts +++ b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-ape522ii.dts @@ -51,10 +51,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi index 3e612badc3..cf2ca1cd27 100644 --- a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi +++ b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi @@ -49,10 +49,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620a_zte_q7.dts b/target/linux/ramips/dts/mt7620a_zte_q7.dts index dd9a87d5af..1ec3ba2e33 100644 --- a/target/linux/ramips/dts/mt7620a_zte_q7.dts +++ b/target/linux/ramips/dts/mt7620a_zte_q7.dts @@ -39,10 +39,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620n_comfast_cf-wr800n.dts b/target/linux/ramips/dts/mt7620n_comfast_cf-wr800n.dts index 17d9a68623..c458f8724f 100644 --- a/target/linux/ramips/dts/mt7620n_comfast_cf-wr800n.dts +++ b/target/linux/ramips/dts/mt7620n_comfast_cf-wr800n.dts @@ -48,10 +48,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620n_kingston_mlw221.dts b/target/linux/ramips/dts/mt7620n_kingston_mlw221.dts index dcd38fc8d6..1186b83f06 100644 --- a/target/linux/ramips/dts/mt7620n_kingston_mlw221.dts +++ b/target/linux/ramips/dts/mt7620n_kingston_mlw221.dts @@ -45,10 +45,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio2 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620n_kingston_mlwg2.dts b/target/linux/ramips/dts/mt7620n_kingston_mlwg2.dts index 3410077ce5..eba7fabff6 100644 --- a/target/linux/ramips/dts/mt7620n_kingston_mlwg2.dts +++ b/target/linux/ramips/dts/mt7620n_kingston_mlwg2.dts @@ -45,10 +45,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio2 { status = "okay"; }; diff --git a/target/linux/ramips/dts/mt7620n_vonets_var11n-300.dts b/target/linux/ramips/dts/mt7620n_vonets_var11n-300.dts index 8fa05a0793..97ed206f56 100644 --- a/target/linux/ramips/dts/mt7620n_vonets_var11n-300.dts +++ b/target/linux/ramips/dts/mt7620n_vonets_var11n-300.dts @@ -34,10 +34,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/mt7621_telco-electronics_x1.dts b/target/linux/ramips/dts/mt7621_telco-electronics_x1.dts index fc9b4c6d2a..f597d0f63a 100644 --- a/target/linux/ramips/dts/mt7621_telco-electronics_x1.dts +++ b/target/linux/ramips/dts/mt7621_telco-electronics_x1.dts @@ -120,10 +120,6 @@ }; }; -&gpio { - status = "okay"; -}; - &gmac0 { mtd-mac-address = <&factory 0xe006>; }; diff --git a/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi b/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi index ae8f3a5e54..e9c4767b79 100644 --- a/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi +++ b/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi @@ -92,10 +92,6 @@ }; }; -&gpio { - status = "okay"; -}; - &sdhci { status = "okay"; }; diff --git a/target/linux/ramips/dts/rt2880_airlink101_ar670w.dts b/target/linux/ramips/dts/rt2880_airlink101_ar670w.dts index 213868db86..9d78ca142c 100644 --- a/target/linux/ramips/dts/rt2880_airlink101_ar670w.dts +++ b/target/linux/ramips/dts/rt2880_airlink101_ar670w.dts @@ -76,10 +76,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &state_default { gpio { groups = "i2c", "spi", "uartlite"; diff --git a/target/linux/ramips/dts/rt2880_airlink101_ar725w.dts b/target/linux/ramips/dts/rt2880_airlink101_ar725w.dts index fb3eeda8aa..7038fc6590 100644 --- a/target/linux/ramips/dts/rt2880_airlink101_ar725w.dts +++ b/target/linux/ramips/dts/rt2880_airlink101_ar725w.dts @@ -86,10 +86,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &state_default { gpio { groups = "i2c", "spi", "uartlite"; diff --git a/target/linux/ramips/dts/rt2880_asus_rt-n15.dts b/target/linux/ramips/dts/rt2880_asus_rt-n15.dts index 713c64cb56..4b832faaf1 100644 --- a/target/linux/ramips/dts/rt2880_asus_rt-n15.dts +++ b/target/linux/ramips/dts/rt2880_asus_rt-n15.dts @@ -86,10 +86,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &state_default { gpio { groups = "i2c", "uartlite", "mdio"; diff --git a/target/linux/ramips/dts/rt2880_belkin_f5d8235-v1.dts b/target/linux/ramips/dts/rt2880_belkin_f5d8235-v1.dts index bc146cf677..cbaa3e832f 100644 --- a/target/linux/ramips/dts/rt2880_belkin_f5d8235-v1.dts +++ b/target/linux/ramips/dts/rt2880_belkin_f5d8235-v1.dts @@ -187,10 +187,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &state_default { gpio { groups = "spi", "i2c", "jtag", "mdio", "uartlite"; diff --git a/target/linux/ramips/dts/rt2880_buffalo_wli-tx4-ag300n.dts b/target/linux/ramips/dts/rt2880_buffalo_wli-tx4-ag300n.dts index 3ec9140b18..a1f10ae45d 100644 --- a/target/linux/ramips/dts/rt2880_buffalo_wli-tx4-ag300n.dts +++ b/target/linux/ramips/dts/rt2880_buffalo_wli-tx4-ag300n.dts @@ -96,10 +96,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - ðernet { status = "okay"; mtd-mac-address = <&factory 0x4>; diff --git a/target/linux/ramips/dts/rt2880_buffalo_wzr-agl300nh.dts b/target/linux/ramips/dts/rt2880_buffalo_wzr-agl300nh.dts index 9c3a07059f..cd9e918404 100644 --- a/target/linux/ramips/dts/rt2880_buffalo_wzr-agl300nh.dts +++ b/target/linux/ramips/dts/rt2880_buffalo_wzr-agl300nh.dts @@ -107,10 +107,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &state_default { gpio { groups = "i2c", "uartlite", "mdio"; diff --git a/target/linux/ramips/dts/rt2880_dlink_dap-1522-a1.dts b/target/linux/ramips/dts/rt2880_dlink_dap-1522-a1.dts index c01424a1f0..3de9dc755c 100644 --- a/target/linux/ramips/dts/rt2880_dlink_dap-1522-a1.dts +++ b/target/linux/ramips/dts/rt2880_dlink_dap-1522-a1.dts @@ -107,10 +107,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio2 { status = "okay"; }; diff --git a/target/linux/ramips/dts/rt2880_ralink_v11st-fe.dts b/target/linux/ramips/dts/rt2880_ralink_v11st-fe.dts index 792a2e429f..39045bf026 100644 --- a/target/linux/ramips/dts/rt2880_ralink_v11st-fe.dts +++ b/target/linux/ramips/dts/rt2880_ralink_v11st-fe.dts @@ -71,10 +71,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - ðernet { status = "okay"; }; diff --git a/target/linux/ramips/dts/rt3050_allnet_all0256n.dtsi b/target/linux/ramips/dts/rt3050_allnet_all0256n.dtsi index 27d0eb3e4f..7458165bc4 100644 --- a/target/linux/ramips/dts/rt3050_allnet_all0256n.dtsi +++ b/target/linux/ramips/dts/rt3050_allnet_all0256n.dtsi @@ -37,10 +37,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &state_default { gpio { groups = "i2c", "jtag", "rgmii", "mdio", "uartf"; diff --git a/target/linux/ramips/dts/rt3050_alphanetworks_asl26555.dtsi b/target/linux/ramips/dts/rt3050_alphanetworks_asl26555.dtsi index b476fd4fa4..028238a3d2 100644 --- a/target/linux/ramips/dts/rt3050_alphanetworks_asl26555.dtsi +++ b/target/linux/ramips/dts/rt3050_alphanetworks_asl26555.dtsi @@ -77,10 +77,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &state_default { gpio { groups = "i2c", "jtag", "rgmii", "mdio", "uartf"; diff --git a/target/linux/ramips/dts/rt3352_allnet_all5002.dts b/target/linux/ramips/dts/rt3352_allnet_all5002.dts index b5bdd3cd81..3aa132a727 100644 --- a/target/linux/ramips/dts/rt3352_allnet_all5002.dts +++ b/target/linux/ramips/dts/rt3352_allnet_all5002.dts @@ -43,10 +43,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/rt5350_airlive_air3gii.dts b/target/linux/ramips/dts/rt5350_airlive_air3gii.dts index edd347b6e0..0a62c755e6 100644 --- a/target/linux/ramips/dts/rt5350_airlive_air3gii.dts +++ b/target/linux/ramips/dts/rt5350_airlive_air3gii.dts @@ -35,10 +35,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/rt5350_allnet_all5003.dts b/target/linux/ramips/dts/rt5350_allnet_all5003.dts index 4c3d441847..335a85dc00 100644 --- a/target/linux/ramips/dts/rt5350_allnet_all5003.dts +++ b/target/linux/ramips/dts/rt5350_allnet_all5003.dts @@ -43,10 +43,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/rt5350_easyacc_wizard-8800.dts b/target/linux/ramips/dts/rt5350_easyacc_wizard-8800.dts index 7549e457d0..336073f155 100644 --- a/target/linux/ramips/dts/rt5350_easyacc_wizard-8800.dts +++ b/target/linux/ramips/dts/rt5350_easyacc_wizard-8800.dts @@ -5,10 +5,6 @@ model = "EASYACC WI-STOR WIZARD 8800"; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/rt5350_hootoo_ht-tm02.dts b/target/linux/ramips/dts/rt5350_hootoo_ht-tm02.dts index a4c8c83f82..9d4de243aa 100644 --- a/target/linux/ramips/dts/rt5350_hootoo_ht-tm02.dts +++ b/target/linux/ramips/dts/rt5350_hootoo_ht-tm02.dts @@ -47,10 +47,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; diff --git a/target/linux/ramips/dts/rt5350_nixcore_x1.dtsi b/target/linux/ramips/dts/rt5350_nixcore_x1.dtsi index 191e3c6714..b837d5c67c 100644 --- a/target/linux/ramips/dts/rt5350_nixcore_x1.dtsi +++ b/target/linux/ramips/dts/rt5350_nixcore_x1.dtsi @@ -108,10 +108,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &gpio1 { status = "okay"; }; diff --git a/target/linux/ramips/dts/rt5350_omnima_miniembplug.dts b/target/linux/ramips/dts/rt5350_omnima_miniembplug.dts index 102132628e..b5583eb892 100644 --- a/target/linux/ramips/dts/rt5350_omnima_miniembplug.dts +++ b/target/linux/ramips/dts/rt5350_omnima_miniembplug.dts @@ -60,10 +60,6 @@ }; }; -&gpio0 { - status = "okay"; -}; - &spi0 { status = "okay"; From 2abc55b2e27269c1cabb3e8f71de715d13825f5e Mon Sep 17 00:00:00 2001 From: John Audia Date: Wed, 2 Dec 2020 06:45:04 -0500 Subject: [PATCH 40/41] kernel: bump 5.4 to 5.4.81 All modifications made by update_kernel.sh/no human intervention needed Build system: x86_64 Build-tested: ipq806x/R7800, ath79/generic, bcm27xx/bcm2711 Run-tested: ipq806x/R7800 No dmesg regressions, everything functional Signed-off-by: John Audia [another refresh] Signed-off-by: Adrian Schmutzler --- include/kernel-version.mk | 4 ++-- ...i-bcm2835-enable-shared-interrupt-support.patch | 2 +- ...-device-quirks-for-Freeway-Airmouse-T3-an.patch | 4 ++-- ...v88e6xxx-Split-monitor-port-configuration.patch | 10 +++++----- ...-mv88e6xxx-Add-support-for-port-mirroring.patch | 14 +++++++------- ...8e6xxx-fix-broken-if-statement-because-of.patch | 2 +- ...-dsa-mv88e6xxx-Fix-masking-of-egress-port.patch | 2 +- .../760-net-dsa-mv88e6xxx-fix-vlan-setup.patch | 2 +- ...upport-to-remap-kernel-cacheable-memory-t.patch | 2 +- ...le-add-support-to-map-cacheable-and-non-s.patch | 2 +- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/include/kernel-version.mk b/include/kernel-version.mk index f28543e2e5..11df16e9f5 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -6,9 +6,9 @@ ifdef CONFIG_TESTING_KERNEL KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER) endif -LINUX_VERSION-5.4 = .80 +LINUX_VERSION-5.4 = .81 -LINUX_KERNEL_HASH-5.4.80 = 49da425c1f3c530fd3ff31d85a0461f6b6dc6e459f7faf3eee23e49a98ce64c7 +LINUX_KERNEL_HASH-5.4.81 = 9470bde475726996202d845a5fc3bc8bd3bb546bbc6816fb663fa73df25d8427 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) diff --git a/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch b/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch index fb0a0699cd..35a4e71245 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch @@ -23,7 +23,7 @@ Signed-off-by: Martin Sperl /* Read as many bytes as possible from FIFO */ bcm2835_rd_fifo(bs); /* Write as many bytes as possible to FIFO */ -@@ -1334,7 +1338,8 @@ static int bcm2835_spi_probe(struct plat +@@ -1330,7 +1334,8 @@ static int bcm2835_spi_probe(struct plat bcm2835_wr(bs, BCM2835_SPI_CS, BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX); diff --git a/target/linux/bcm27xx/patches-5.4/950-0283-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch b/target/linux/bcm27xx/patches-5.4/950-0283-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch index 28f1c18c9a..2f8964a82d 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0283-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0283-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch @@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell #define USB_VENDOR_ID_BELKIN 0x050d #define USB_DEVICE_ID_FLIP_KVM 0x3201 -@@ -1245,6 +1248,9 @@ +@@ -1253,6 +1256,9 @@ #define USB_VENDOR_ID_XAT 0x2505 #define USB_DEVICE_ID_XAT_CSR 0x0220 @@ -53,7 +53,7 @@ Signed-off-by: Jonathan Bell { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL }, -@@ -184,6 +185,7 @@ static const struct hid_device_id hid_qu +@@ -189,6 +190,7 @@ static const struct hid_device_id hid_qu { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT }, diff --git a/target/linux/generic/backport-5.4/746-v5.5-net-dsa-mv88e6xxx-Split-monitor-port-configuration.patch b/target/linux/generic/backport-5.4/746-v5.5-net-dsa-mv88e6xxx-Split-monitor-port-configuration.patch index 73dbcbe352..21424a3e4d 100644 --- a/target/linux/generic/backport-5.4/746-v5.5-net-dsa-mv88e6xxx-Split-monitor-port-configuration.patch +++ b/target/linux/generic/backport-5.4/746-v5.5-net-dsa-mv88e6xxx-Split-monitor-port-configuration.patch @@ -19,7 +19,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -2378,7 +2378,14 @@ static int mv88e6xxx_setup_upstream_port +@@ -2380,7 +2380,14 @@ static int mv88e6xxx_setup_upstream_port if (chip->info->ops->set_egress_port) { err = chip->info->ops->set_egress_port(chip, @@ -62,7 +62,7 @@ Signed-off-by: David S. Miller #define MV88E6XXX_CASCADE_PORT_MULTIPLE 0xf --- a/drivers/net/dsa/mv88e6xxx/global1.c +++ b/drivers/net/dsa/mv88e6xxx/global1.c -@@ -263,7 +263,9 @@ int mv88e6250_g1_ieee_pri_map(struct mv8 +@@ -294,7 +294,9 @@ int mv88e6250_g1_ieee_pri_map(struct mv8 /* Offset 0x1a: Monitor Control */ /* Offset 0x1a: Monitor & MGMT Control on some devices */ @@ -73,7 +73,7 @@ Signed-off-by: David S. Miller { u16 reg; int err; -@@ -272,11 +274,20 @@ int mv88e6095_g1_set_egress_port(struct +@@ -303,11 +305,20 @@ int mv88e6095_g1_set_egress_port(struct if (err) return err; @@ -99,7 +99,7 @@ Signed-off-by: David S. Miller return mv88e6xxx_g1_write(chip, MV88E6185_G1_MONITOR_CTL, reg); } -@@ -310,17 +321,24 @@ static int mv88e6390_g1_monitor_write(st +@@ -341,17 +352,24 @@ static int mv88e6390_g1_monitor_write(st return mv88e6xxx_g1_write(chip, MV88E6390_G1_MONITOR_MGMT_CTL, reg); } @@ -132,7 +132,7 @@ Signed-off-by: David S. Miller return err; --- a/drivers/net/dsa/mv88e6xxx/global1.h +++ b/drivers/net/dsa/mv88e6xxx/global1.h -@@ -288,8 +288,12 @@ int mv88e6095_g1_stats_set_histogram(str +@@ -289,8 +289,12 @@ int mv88e6095_g1_stats_set_histogram(str int mv88e6390_g1_stats_set_histogram(struct mv88e6xxx_chip *chip); void mv88e6xxx_g1_stats_read(struct mv88e6xxx_chip *chip, int stat, u32 *val); int mv88e6xxx_g1_stats_clear(struct mv88e6xxx_chip *chip); diff --git a/target/linux/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch b/target/linux/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch index e3346c12b9..30ff8aeab6 100644 --- a/target/linux/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch +++ b/target/linux/generic/backport-5.4/747-v5.5-net-dsa-mv88e6xxx-Add-support-for-port-mirroring.patch @@ -25,7 +25,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -4920,6 +4920,80 @@ static int mv88e6xxx_port_mdb_del(struct +@@ -4922,6 +4922,80 @@ static int mv88e6xxx_port_mdb_del(struct return err; } @@ -106,7 +106,7 @@ Signed-off-by: David S. Miller static int mv88e6xxx_port_egress_floods(struct dsa_switch *ds, int port, bool unicast, bool multicast) { -@@ -4974,6 +5048,8 @@ static const struct dsa_switch_ops mv88e +@@ -4976,6 +5050,8 @@ static const struct dsa_switch_ops mv88e .port_mdb_prepare = mv88e6xxx_port_mdb_prepare, .port_mdb_add = mv88e6xxx_port_mdb_add, .port_mdb_del = mv88e6xxx_port_mdb_del, @@ -139,7 +139,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/dsa/mv88e6xxx/global1.c +++ b/drivers/net/dsa/mv88e6xxx/global1.c -@@ -267,6 +267,7 @@ int mv88e6095_g1_set_egress_port(struct +@@ -298,6 +298,7 @@ int mv88e6095_g1_set_egress_port(struct enum mv88e6xxx_egress_direction direction, int port) { @@ -147,7 +147,7 @@ Signed-off-by: David S. Miller u16 reg; int err; -@@ -276,11 +277,13 @@ int mv88e6095_g1_set_egress_port(struct +@@ -307,11 +308,13 @@ int mv88e6095_g1_set_egress_port(struct switch (direction) { case MV88E6XXX_EGRESS_DIR_INGRESS: @@ -161,7 +161,7 @@ Signed-off-by: David S. Miller reg &= MV88E6185_G1_MONITOR_CTL_EGRESS_DEST_MASK; reg |= port << __bf_shf(MV88E6185_G1_MONITOR_CTL_EGRESS_DEST_MASK); -@@ -289,7 +292,11 @@ int mv88e6095_g1_set_egress_port(struct +@@ -320,7 +323,11 @@ int mv88e6095_g1_set_egress_port(struct return -EINVAL; } @@ -174,7 +174,7 @@ Signed-off-by: David S. Miller } /* Older generations also call this the ARP destination. It has been -@@ -325,14 +332,17 @@ int mv88e6390_g1_set_egress_port(struct +@@ -356,14 +363,17 @@ int mv88e6390_g1_set_egress_port(struct enum mv88e6xxx_egress_direction direction, int port) { @@ -192,7 +192,7 @@ Signed-off-by: David S. Miller ptr = MV88E6390_G1_MONITOR_MGMT_CTL_PTR_EGRESS_DEST; break; default: -@@ -340,10 +350,10 @@ int mv88e6390_g1_set_egress_port(struct +@@ -371,10 +381,10 @@ int mv88e6390_g1_set_egress_port(struct } err = mv88e6390_g1_monitor_write(chip, ptr, port); diff --git a/target/linux/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch b/target/linux/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch index ce12227350..d8ec1240f7 100644 --- a/target/linux/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch +++ b/target/linux/generic/backport-5.4/748-v5.5-net-dsa-mv88e6xxx-fix-broken-if-statement-because-of.patch @@ -19,7 +19,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -4987,7 +4987,7 @@ static void mv88e6xxx_port_mirror_del(st +@@ -4989,7 +4989,7 @@ static void mv88e6xxx_port_mirror_del(st if (chip->info->ops->set_egress_port(chip, direction, dsa_upstream_port(ds, diff --git a/target/linux/generic/backport-5.4/749-v5.5-net-dsa-mv88e6xxx-Fix-masking-of-egress-port.patch b/target/linux/generic/backport-5.4/749-v5.5-net-dsa-mv88e6xxx-Fix-masking-of-egress-port.patch index 50f655c0d2..497a808511 100644 --- a/target/linux/generic/backport-5.4/749-v5.5-net-dsa-mv88e6xxx-Fix-masking-of-egress-port.patch +++ b/target/linux/generic/backport-5.4/749-v5.5-net-dsa-mv88e6xxx-Fix-masking-of-egress-port.patch @@ -16,7 +16,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/dsa/mv88e6xxx/global1.c +++ b/drivers/net/dsa/mv88e6xxx/global1.c -@@ -278,13 +278,13 @@ int mv88e6095_g1_set_egress_port(struct +@@ -309,13 +309,13 @@ int mv88e6095_g1_set_egress_port(struct switch (direction) { case MV88E6XXX_EGRESS_DIR_INGRESS: dest_port_chip = &chip->ingress_dest_port; diff --git a/target/linux/generic/pending-5.4/760-net-dsa-mv88e6xxx-fix-vlan-setup.patch b/target/linux/generic/pending-5.4/760-net-dsa-mv88e6xxx-fix-vlan-setup.patch index 535c753a7b..22cf41a8a7 100644 --- a/target/linux/generic/pending-5.4/760-net-dsa-mv88e6xxx-fix-vlan-setup.patch +++ b/target/linux/generic/pending-5.4/760-net-dsa-mv88e6xxx-fix-vlan-setup.patch @@ -17,7 +17,7 @@ Signed-off-by: DENG Qingfang --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -2657,6 +2657,7 @@ static int mv88e6xxx_setup(struct dsa_sw +@@ -2659,6 +2659,7 @@ static int mv88e6xxx_setup(struct dsa_sw chip->ds = ds; ds->slave_mii_bus = mv88e6xxx_default_mdio_bus(chip); diff --git a/target/linux/layerscape/patches-5.4/301-arch-0002-arm64-add-support-to-remap-kernel-cacheable-memory-t.patch b/target/linux/layerscape/patches-5.4/301-arch-0002-arm64-add-support-to-remap-kernel-cacheable-memory-t.patch index 282f8e9ffa..4c2c487ac0 100644 --- a/target/linux/layerscape/patches-5.4/301-arch-0002-arm64-add-support-to-remap-kernel-cacheable-memory-t.patch +++ b/target/linux/layerscape/patches-5.4/301-arch-0002-arm64-add-support-to-remap-kernel-cacheable-memory-t.patch @@ -13,7 +13,7 @@ Reviewed-by: Stuart Yoder --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h -@@ -414,6 +414,9 @@ static inline pmd_t pmd_mkdevmap(pmd_t p +@@ -422,6 +422,9 @@ static inline pmd_t pmd_mkdevmap(pmd_t p __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRnE) | PTE_PXN | PTE_UXN) #define pgprot_writecombine(prot) \ __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN) diff --git a/target/linux/layerscape/patches-5.4/301-arch-0003-arm64-pgtable-add-support-to-map-cacheable-and-non-s.patch b/target/linux/layerscape/patches-5.4/301-arch-0003-arm64-pgtable-add-support-to-map-cacheable-and-non-s.patch index 084f13a3be..63366ee221 100644 --- a/target/linux/layerscape/patches-5.4/301-arch-0003-arm64-pgtable-add-support-to-map-cacheable-and-non-s.patch +++ b/target/linux/layerscape/patches-5.4/301-arch-0003-arm64-pgtable-add-support-to-map-cacheable-and-non-s.patch @@ -11,7 +11,7 @@ Signed-off-by: Haiying Wang --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h -@@ -417,6 +417,8 @@ static inline pmd_t pmd_mkdevmap(pmd_t p +@@ -425,6 +425,8 @@ static inline pmd_t pmd_mkdevmap(pmd_t p #define pgprot_cached(prot) \ __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL) | \ PTE_PXN | PTE_UXN) From 33c27ccf4aef677d28246d30e815050ead68b434 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Fri, 14 Aug 2020 13:09:12 +0200 Subject: [PATCH 41/41] ath79: add support for TP-Link TL-WDR7500 v3 This ports support for the TP-Link TL-WDR7500 v3 from ar71xx to ath79. The basic features appear to be identical to the Archer C7 v1, however it has the (supported) QCA9880-BR4A chip of the C7 v2. Specifications: SoC: QCA9558 CPU: 720 MHz Flash: 8 MiB RAM: 128 MiB WLAN: 2.4 GHz b/g/n, 5 GHz a/n/ac Qualcomm Atheros QCA9880-BR4A Ethernet: 5x Gbit ports USB: 2x 2.0 ports Flashing instructions: Upload the factory image via the OEM firmware GUI. TFTP recovery appears to be available as well. Signed-off-by: Adrian Schmutzler --- .../dts/qca9558_tplink_tl-wdr7500-v3.dts | 45 +++++++++++++++++++ .../generic/base-files/etc/board.d/02_network | 3 +- .../etc/hotplug.d/firmware/11-ath10k-caldata | 3 +- target/linux/ath79/image/generic-tp-link.mk | 12 +++++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 target/linux/ath79/dts/qca9558_tplink_tl-wdr7500-v3.dts diff --git a/target/linux/ath79/dts/qca9558_tplink_tl-wdr7500-v3.dts b/target/linux/ath79/dts/qca9558_tplink_tl-wdr7500-v3.dts new file mode 100644 index 0000000000..04368b9244 --- /dev/null +++ b/target/linux/ath79/dts/qca9558_tplink_tl-wdr7500-v3.dts @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "qca9558_tplink_archer-c.dtsi" + +/ { + compatible = "tplink,tl-wdr7500-v3", "qca,qca9558"; + model = "TP-Link TL-WDR7500 v3"; +}; + +&keys { + rfkill { + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + linux,code = ; + linux,input-type = ; + debounce-interval = <60>; + }; +}; + +&leds { + wlan5g { + label = "green:wlan5g"; + gpios = <&gpio 17 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; +}; + +&mtdparts { + uboot: partition@0 { + label = "u-boot"; + reg = <0x000000 0x020000>; + read-only; + }; + + partition@20000 { + label = "firmware"; + compatible = "tplink,firmware"; + reg = <0x020000 0x7d0000>; + }; + + art: partition@7f0000 { + label = "art"; + reg = <0x7f0000 0x010000>; + read-only; + }; +}; diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network index 5c0195f6ff..149f7b1141 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network @@ -311,7 +311,8 @@ ath79_setup_interfaces() tplink,archer-c5-v1|\ tplink,archer-c7-v1|\ tplink,archer-c7-v2|\ - tplink,tl-wdr4900-v2) + tplink,tl-wdr4900-v2|\ + tplink,tl-wdr7500-v3) ucidef_add_switch "switch0" \ "0@eth1" "2:lan" "3:lan" "4:lan" "5:lan" "6@eth0" "1:wan" ;; diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index ff15414ead..0d09cd3140 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -109,7 +109,8 @@ case "$FIRMWARE" in ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary info 0x8) -1) ;; tplink,archer-c5-v1|\ - tplink,archer-c7-v2) + tplink,archer-c7-v2|\ + tplink,tl-wdr7500-v3) caldata_extract "art" 0x5000 0x844 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary u-boot 0x1fc00) -1) ;; diff --git a/target/linux/ath79/image/generic-tp-link.mk b/target/linux/ath79/image/generic-tp-link.mk index 5088510af0..0058d74f77 100644 --- a/target/linux/ath79/image/generic-tp-link.mk +++ b/target/linux/ath79/image/generic-tp-link.mk @@ -564,6 +564,18 @@ define Device/tplink_tl-wdr4900-v2 endef TARGET_DEVICES += tplink_tl-wdr4900-v2 +define Device/tplink_tl-wdr7500-v3 + $(Device/tplink-8mlzma) + SOC := qca9558 + DEVICE_MODEL := TL-WDR7500 + DEVICE_VARIANT := v3 + DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k-ct \ + ath10k-firmware-qca988x-ct + TPLINK_HWID := 0x75000003 + SUPPORTED_DEVICES += archer-c7 +endef +TARGET_DEVICES += tplink_tl-wdr7500-v3 + define Device/tplink_tl-wpa8630-v1 $(Device/tplink-8mlzma) SOC := qca9563