diff --git a/.gitignore b/.gitignore index ab2b03cf..ef039a49 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ *~ -/lede +/openwrt /output /site /tmp diff --git a/LICENSE b/LICENSE index a9adc369..8f3fcc3f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ The code of Project Gluon may be distributed under the following terms, unless noted otherwise in individual files or subtrees. -Copyright (c) 2013-2017, Project Gluon +Copyright (c) 2013-2018, Project Gluon All rights reserved. Redistribution and use in source and binary forms, with or without @@ -25,10 +25,11 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -LEDE and OpenWrt are licensed under the terms of the GNU General Public License -Version 2, which can be found at lede/LICENSE after the lede repository has been +OpenWrt is licensed under the terms of the GNU General Public License Version 2, +which can be found at openwrt/LICENSE after the OpenWrt repository has been obtained. This applies to the following repositories: - * lede + + * openwrt * packages/openwrt * packages/routing * packages/luci diff --git a/Makefile b/Makefile index 9593fd91..22f3eba4 100644 --- a/Makefile +++ b/Makefile @@ -67,13 +67,13 @@ define GluonTarget gluon_target := $(1)$$(if $(2),-$(2)) GLUON_TARGETS += $$(gluon_target) GLUON_TARGET_$$(gluon_target)_BOARD := $(1) -GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(if $(3),$(3),$(2)) +GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2) endef include targets/targets.mk -LEDEMAKE = $(MAKE) -C lede +OPENWRTMAKE = $(MAKE) -C openwrt BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD) SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET) @@ -86,15 +86,15 @@ GLUON_CONFIG_VARS := \ BOARD='$(BOARD)' \ SUBTARGET='$(SUBTARGET)' -LEDE_TARGET := $(BOARD)$(if $(SUBTARGET),-$(SUBTARGET)) +OPENWRT_TARGET := $(BOARD)$(if $(SUBTARGET),-$(SUBTARGET)) -export LEDE_TARGET +export OPENWRT_TARGET -CheckTarget := [ '$(LEDE_TARGET)' ] \ +CheckTarget := [ '$(OPENWRT_TARGET)' ] \ || (echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'; $(foreach target,$(GLUON_TARGETS),echo ' * $(target)';) false) -CheckExternal := test -d lede || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false) +CheckExternal := test -d openwrt || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false) define CheckSite @GLUON_SITEDIR='$(GLUON_SITEDIR)' GLUON_SITE_CONFIG='$(1).conf' $(LUA) scripts/site_config.lua \ @@ -126,21 +126,21 @@ config: FORCE @$(GLUON_CONFIG_VARS) \ scripts/target_config.sh '$(GLUON_TARGET)' '$(GLUON_PACKAGES)' \ - > lede/.config - +@$(LEDEMAKE) defconfig + > openwrt/.config + +@$(OPENWRTMAKE) defconfig @$(GLUON_CONFIG_VARS) \ scripts/target_config_check.sh '$(GLUON_TARGET)' '$(GLUON_PACKAGES)' -LUA := lede/staging_dir/hostpkg/bin/lua +LUA := openwrt/staging_dir/hostpkg/bin/lua $(LUA): @$(CheckExternal) - +@[ -e lede/.config ] || $(LEDEMAKE) defconfig - +@$(LEDEMAKE) tools/install - +@$(LEDEMAKE) package/lua/host/install + +@[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig + +@$(OPENWRTMAKE) tools/install + +@$(OPENWRTMAKE) package/lua/host/compile prepare-target: config $(LUA) ; @@ -148,15 +148,15 @@ all: prepare-target $(foreach conf,site $(patsubst $(GLUON_SITEDIR)/%.conf,%,$(wildcard $(GLUON_SITEDIR)/domains/*.conf)),$(call CheckSite,$(conf))) @scripts/clean_output.sh - +@$(LEDEMAKE) + +@$(OPENWRTMAKE) @GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/copy_output.sh '$(GLUON_TARGET)' clean download: config - +@$(LEDEMAKE) $@ + +@$(OPENWRTMAKE) $@ dirclean: FORCE - +@[ -e lede/.config ] || $(LEDEMAKE) defconfig - +@$(LEDEMAKE) dirclean + +@[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig + +@$(OPENWRTMAKE) dirclean @rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR) manifest: $(LUA) FORCE diff --git a/docs/dev/hardware.rst b/docs/dev/hardware.rst index aa0462a1..bde57f32 100644 --- a/docs/dev/hardware.rst +++ b/docs/dev/hardware.rst @@ -14,7 +14,7 @@ is a requirement. Adding profiles --------------- -The vast majority of devices with ath9k WLAN is based on the ar71xx target of LEDE. +The vast majority of devices with ath9k WLAN is based on the ar71xx target of OpenWrt. If the hardware you want to add support for is ar71xx, adding a new profile is sufficient. @@ -35,9 +35,9 @@ While porting Gluon to a new device, it might happen that the profile name is un known. Best practise is to generate an image first by using an arbitrary value and then executing the lua command on the device and use its output from then on. -The second parameter defines the name of the image files generated by LEDE. Usually, -it is also the LEDE profile name; for devices that still use the old image build -code, a third parameter with the LEDE profile name can be passed. The profile names +The second parameter defines the name of the image files generated by OpenWrt. Usually, +it is also the OpenWrt profile name; for devices that still use the old image build +code, a third parameter with the OpenWrt profile name can be passed. The profile names can be found in the image Makefiles in ``lede/target/linux//image/Makefile``. Examples:: @@ -49,7 +49,7 @@ Suffixes and extensions ''''''''''''''''''''''' By default, image files are expected to have the extension ``.bin``. In addition, -the images generated by LEDE have a suffix before the extension that defaults to +the images generated by OpenWrt have a suffix before the extension that defaults to ``-squashfs-factory`` and ``-squashfs-sysupgrade``. This can be changed using the ``factory`` and ``sysupgrade`` commands, either at @@ -66,14 +66,14 @@ are given, this signals that no factory (or sysupgrade) image exists. Aliases ''''''' -Sometimes multiple models use the same LEDE images. In this case, the ``alias`` +Sometimes multiple models use the same OpenWrt images. In this case, the ``alias`` command can be used to create symlinks and additional entries in the autoupdater manifest for the alternative models. Standalone images ''''''''''''''''' -On targets without *per-device rootfs* support in LEDE, the commands described above +On targets without *per-device rootfs* support in OpenWrt, the commands described above can't be used. Instead, ``factory_image`` and ``sysupgrade_image`` are used:: factory_image PROFILE IMAGE .EXT @@ -81,14 +81,14 @@ can't be used. Instead, ``factory_image`` and ``sysupgrade_image`` are used:: Again, the profile name must match the value printed by the aforementioned Lua command. The image name must match the part between the target name and the extension -as generated by LEDE and is to be omitted when no such part exists. +as generated by OpenWrt and is to be omitted when no such part exists. Packages '''''''' The ``packages`` command takes an arbitrary number of arguments. Each argument defines an additional package to include in the images in addition to the default -package sets defined by LEDE. When a package name is prefixed by a minus sign, the +package sets defined by OpenWrt. When a package name is prefixed by a minus sign, the packages are excluded instead. The ``packages`` command may be used at the top of a target definition to modify @@ -99,7 +99,7 @@ target supports *per-default rootfs*). Configuration ''''''''''''' -The ``config`` command allows to add arbitary target-specific LEDE configuration +The ``config`` command allows to add arbitary target-specific OpenWrt configuration to be emitted to ``.config``. Notes @@ -109,7 +109,7 @@ On devices with multiple WLAN adapters, care must also be taken that the primary configured correctly. ``/lib/gluon/core/sysconfig/primary_mac`` should contain the MAC address which can be found on a label on most hardware; if it does not, ``/lib/gluon/upgrade/010-primary-mac`` in ``gluon-core`` might need a fix. (There have also been cases in which the address was incorrect -even on devices with only one WLAN adapter, in these cases a LEDE bug was the cause). +even on devices with only one WLAN adapter, in these cases a OpenWrt bug was the cause). Adding support for new hardware targets @@ -137,8 +137,8 @@ Build system support A definition for the new target must be created under ``targets``, and it must be added to ``targets/targets.mk``. The ``GluonTarget`` macro takes one to three arguments: the target name, the Gluon subtarget name (if the target has subtargets), and the -LEDE subtarget name (if it differs from the Gluon subtarget). The third argument +OpenWrt subtarget name (if it differs from the Gluon subtarget). The third argument can be used to define multiple Gluon targets with different configuration for the -same LEDE target, like it is done for the ``ar71xx-tiny`` target. +same OpenWrt target, like it is done for the ``ar71xx-tiny`` target. After this, is should be sufficient to call ``make GLUON_TARGET=`` to build the images for the new target. diff --git a/docs/dev/web/i18n.rst b/docs/dev/web/i18n.rst index c85baaee..9cd4f1d9 100644 --- a/docs/dev/web/i18n.rst +++ b/docs/dev/web/i18n.rst @@ -58,7 +58,7 @@ script in the ``contrib`` directory: The same command can be run again to update the template. -In addition, the Makefile must be adjusted. Instead of LEDE's default *package.mk*, +In addition, the Makefile must be adjusted. Instead of OpenWrt's default *package.mk*, the Gluon version (``../gluon.mk`` for core packages) must be used. The i18n files must be installed and PKG_CONFIG_DEPENDS must be added:: diff --git a/docs/site-example/site.mk b/docs/site-example/site.mk index 9b84ccb0..c3967909 100644 --- a/docs/site-example/site.mk +++ b/docs/site-example/site.mk @@ -19,7 +19,7 @@ GLUON_FEATURES := \ web-wizard ## GLUON_SITE_PACKAGES -# Specify additional Gluon/LEDE packages to include here; +# Specify additional Gluon/OpenWrt packages to include here; # A minus sign may be prepended to remove a packages from the # selection that would be enabled by default or due to the # chosen feature flags diff --git a/docs/user/getting_started.rst b/docs/user/getting_started.rst index e6aad468..6ce190ac 100644 --- a/docs/user/getting_started.rst +++ b/docs/user/getting_started.rst @@ -94,7 +94,7 @@ You should generally reserve 5GB of disk space and additionally about 10GB for e The built images can be found in the directory `output/images`. Of these, the `factory` images are to be used when flashing from the original firmware a device came with, -and `sysupgrade` is to upgrade from other versions of Gluon or any other OpenWrt/LEDE-based +and `sysupgrade` is to upgrade from other versions of Gluon or any other OpenWrt-based system. **Note:** The images for some models are identical; to save disk space, symlinks are generated instead @@ -122,12 +122,12 @@ will clean the entire tree, so the toolchain will be rebuilt as well, which will opkg repositories ----------------- -Gluon is mostly compatible with LEDE, so the normal LEDE package repositories +Gluon is mostly compatible with OpenWrt, so the normal OpenWrt package repositories can be used for Gluon as well. This is not true for kernel modules; the Gluon kernel is incompatible with the -kernel of the default LEDE images. Therefore, Gluon will not only generate images, -but also an opkg repository containing all core packages provided by LEDE, +kernel of the default OpenWrt images. Therefore, Gluon will not only generate images, +but also an opkg repository containing all core packages provided by OpenWrt, including modules for the kernel of the generated images. Signing keys @@ -136,11 +136,11 @@ Signing keys Gluon does not support HTTPS for downloading packages; fortunately, opkg deploys public-key cryptography to ensure package integrity. -The Gluon images will contain public keys from two sources: the official LEDE keyring +The Gluon images will contain public keys from two sources: the official OpenWrt keyring (to allow installing userspace packages) and a Gluon-specific key (which is used to sign the generated package repository). -LEDE will handle the generation and handling of the keys itself. +OpenWrt will handle the generation and handling of the keys itself. When making firmware releases based on Gluon, it might make sense to store the keypair, so updating the module repository later is possible. diff --git a/docs/user/site.rst b/docs/user/site.rst index 94d6d181..96644350 100644 --- a/docs/user/site.rst +++ b/docs/user/site.rst @@ -67,8 +67,8 @@ opkg \: optional There are two optional fields in the ``opkg`` section: - - ``lede`` overrides the default LEDE repository URL. The default URL would - correspond to ``http://downloads.lede-project.org/snapshots/packages/%A`` + - ``openwrt`` overrides the default OpenWrt repository URL. The default URL would + correspond to ``http://downloads.openwrt.org/snapshots/packages/%A`` and usually doesn't need to be changed when nodes are expected to have IPv6 internet connectivity. - ``extra`` specifies a table of additional repositories (with arbitrary keys) @@ -76,7 +76,7 @@ opkg \: optional :: opkg = { - lede = 'http://opkg.services.ffac/lede/snapshots/packages/%A', + openwrt = 'http://opkg.services.ffac/openwrt/snapshots/packages/%A', extra = { gluon = 'http://opkg.services.ffac/modules/gluon-%GS-%GR/%S', }, @@ -84,8 +84,8 @@ opkg \: optional There are various patterns which can be used in the URLs: - - ``%n`` is replaced by the LEDE version codename - - ``%v`` is replaced by the LEDE version number (e.g. "17.01") + - ``%d`` is replaced by the OpenWrt distribution name ("openwrt") + - ``%v`` is replaced by the OpenWrt version number (e.g. "17.01") - ``%S`` is replaced by the target board (e.g. "ar71xx/generic") - ``%A`` is replaced by the target architecture (e.g. "mips_24kc") - ``%GS`` is replaced by the Gluon site code (as specified in ``site.conf``) diff --git a/modules b/modules index 6e660c5b..bc150255 100644 --- a/modules +++ b/modules @@ -1,20 +1,20 @@ -GLUON_FEEDS='openwrt gluon routing luci' +GLUON_FEEDS='packages routing luci gluon' -LEDE_REPO=https://git.openwrt.org/openwrt/openwrt.git -LEDE_BRANCH=lede-17.01 -LEDE_COMMIT=b6a1f43075f96b0028e33ed1af1fe31068791d24 +OPENWRT_REPO=https://git.openwrt.org/openwrt/openwrt.git +OPENWRT_BRANCH=openwrt-18.06 +OPENWRT_COMMIT=b84a07b3803bd39d0a1eb1b040718a023b8f7971 -PACKAGES_OPENWRT_REPO=https://github.com/openwrt/packages.git -PACKAGES_OPENWRT_BRANCH=lede-17.01 -PACKAGES_OPENWRT_COMMIT=338690b2f79e2c7090be4e9adbb19b452c9e3c36 - -PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git -PACKAGES_GLUON_COMMIT=be2c35785994e443d895225c7240474a46f64f5e +PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git +PACKAGES_PACKAGES_BRANCH=openwrt-18.06 +PACKAGES_PACKAGES_COMMIT=05b9aceb00725b69220defaaad11f24b63731ac3 PACKAGES_ROUTING_REPO=https://github.com/openwrt-routing/packages.git PACKAGES_ROUTING_BRANCH=openwrt-18.06 PACKAGES_ROUTING_COMMIT=1b9d1c419f0ecefda51922a7845ab2183d6acd76 PACKAGES_LUCI_REPO=https://github.com/openwrt/luci.git -PACKAGES_LUCI_BRANCH=lede-17.01 -PACKAGES_LUCI_COMMIT=1f014bd2180b364bec4c3f6457f72a0621884f9a +PACKAGES_LUCI_BRANCH=openwrt-18.06 +PACKAGES_LUCI_COMMIT=4ba85e3d82b684262c570e38a72d2dc3bb712a13 + +PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git +PACKAGES_GLUON_COMMIT=be2c35785994e443d895225c7240474a46f64f5e diff --git a/overlay/opkg.mk b/overlay/opkg.mk deleted file mode 100644 index ccbd2573..00000000 --- a/overlay/opkg.mk +++ /dev/null @@ -1,10 +0,0 @@ -# LEDE doesn't have a nice way to set the list of feeds in -# /etc/opkg/distfeeds.conf, so we use this overlay file (which is included by -# the opkg package Makefile though LEDE's IncludeOverlay mechanism). - -# The following definitions make /etc/opkg/distfeeds.conf match the one included -# in official LEDE builds (by default, FEEDS_DISABLED contains the original list -# of feeds (which are unused by Gluon), and FEEDS_ENABLED our own feed list). - -FEEDS_ENABLED := $(FEEDS_DISABLED) -FEEDS_DISABLED := diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua index 0977b086..7017af7e 100644 --- a/package/gluon-core/check_site.lua +++ b/package/gluon-core/check_site.lua @@ -23,7 +23,7 @@ end need_string_match(in_domain({'domain_seed'}), '^' .. ('%x'):rep(64) .. '$') -need_string({'opkg', 'lede'}, false) +need_string({'opkg', 'openwrt'}, false) need_table({'opkg', 'extra'}, function(extra_repo) need_alphanumeric_key(extra_repo) need_string(extra_repo) diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/500-opkg b/package/gluon-core/luasrc/lib/gluon/upgrade/500-opkg index 81e437b5..83e4d912 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/500-opkg +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/500-opkg @@ -14,8 +14,8 @@ local util = require 'gluon.util' local subst = {} -local f = io.popen('. /etc/openwrt_release; echo "$DISTRIB_CODENAME"; echo "$DISTRIB_RELEASE"; echo "$DISTRIB_TARGET"; echo "$DISTRIB_ARCH"') -subst['%%n'] = f:read() +local f = io.popen('. /etc/os-release; echo "$ID"; echo "$VERSION_ID"; echo "$LEDE_BOARD"; echo "$LEDE_ARCH"') +subst['%%d'] = f:read() subst['%%v'] = f:read():gsub('-SNAPSHOT', '') subst['%%S'] = f:read() subst['%%A'] = f:read() @@ -25,7 +25,7 @@ subst['%%GS'] = site.site_code() subst['%%GV'] = util.trim(fs.readfile('/lib/gluon/gluon-version')) subst['%%GR'] = util.trim(fs.readfile('/lib/gluon/release')) -local prefix = subst['%%n'] .. '_' +local prefix = subst['%%d'] .. '_' local function replace_patterns(url) @@ -37,7 +37,7 @@ local function replace_patterns(url) end -local lede = site.opkg.lede() +local openwrt = site.opkg.openwrt() local extra = site.opkg.extra({}) @@ -52,8 +52,8 @@ for _, line in ipairs(distfeeds) do local name = line:match('^src/gz%s' .. prefix .. '(%S+)%s') if name == 'core' then f:write('# ' .. line .. '\n') - elseif name and lede then - f:write(string.format('src/gz %s %s/%s\n', prefix .. name, replace_patterns(lede), name)) + elseif name and openwrt then + f:write(string.format('src/gz %s %s/%s\n', prefix .. name, replace_patterns(openwrt), name)) else f:write(line .. '\n') end diff --git a/patches/lede/0001-build-move-STAGING_DIR_HOSTPKG-and-BUILD_DIR_HOST-back-to-a-common-directory-for-all-targets.patch b/patches/lede/0001-build-move-STAGING_DIR_HOSTPKG-and-BUILD_DIR_HOST-back-to-a-common-directory-for-all-targets.patch deleted file mode 100644 index 4afacf54..00000000 --- a/patches/lede/0001-build-move-STAGING_DIR_HOSTPKG-and-BUILD_DIR_HOST-back-to-a-common-directory-for-all-targets.patch +++ /dev/null @@ -1,111 +0,0 @@ -From: Matthias Schiffer -Date: Sat, 14 Jan 2017 18:13:14 +0100 -Subject: build: move STAGING_DIR_HOSTPKG and BUILD_DIR_HOST back to a common directory for all targets - -$(STAGING_DIR)/host is kept in addition to $(STAGING_DIR_HOSTPKG) in most -places; it is still used as destination for host files in Build/InstallDev. - -Signed-off-by: Matthias Schiffer - -diff --git a/Makefile b/Makefile -index b220dfd3c56a11f3e27d70e3d6e58cc6448abd2f..c1a7285c83df310e987eaef8376500d2b614eafb 100644 ---- a/Makefile -+++ b/Makefile -@@ -55,7 +55,7 @@ clean: FORCE - rm -rf $(BUILD_DIR) $(STAGING_DIR) $(BIN_DIR) $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES) $(BUILD_LOG_DIR) $(TOPDIR)/staging_dir/packages - - dirclean: clean -- rm -rf $(STAGING_DIR_HOST) $(TOOLCHAIN_DIR) $(BUILD_DIR_HOST) $(BUILD_DIR_TOOLCHAIN) -+ rm -rf $(STAGING_DIR_HOST) $(STAGING_DIR_HOSTPKG) $(TOOLCHAIN_DIR) $(BUILD_DIR_BASE)/host $(BUILD_DIR_BASE)/hostpkg $(BUILD_DIR_TOOLCHAIN) - rm -rf $(TMP_DIR) - - ifndef DUMP_TARGET_DB -diff --git a/include/autotools.mk b/include/autotools.mk -index c6aa47e0bef311697b4def7a7183d1ac59dcf599..7bd400ab36d052b39fcb76a66873c8673eb189a0 100644 ---- a/include/autotools.mk -+++ b/include/autotools.mk -@@ -75,7 +75,7 @@ define autoreconf_target - $(strip $(call autoreconf, \ - $(PKG_BUILD_DIR), $(PKG_REMOVE_FILES), \ - $(PKG_AUTOMAKE_PATHS), $(PKG_LIBTOOL_PATHS), \ -- $(STAGING_DIR)/host/share/aclocal $(STAGING_DIR)/usr/share/aclocal $(PKG_MACRO_PATHS))) -+ $(STAGING_DIR)/host/share/aclocal $(STAGING_DIR_HOSTPKG)/share/aclocal $(STAGING_DIR)/usr/share/aclocal $(PKG_MACRO_PATHS))) - endef - - define patch_libtool_target -diff --git a/include/cmake.mk b/include/cmake.mk -index 5a403cbf41e2bbd6bdb843492639a01aff8cf75b..900dae1d4afc6007f8ac04179dd7f0922a07d4fa 100644 ---- a/include/cmake.mk -+++ b/include/cmake.mk -@@ -34,7 +34,7 @@ CMAKE_NM:=$(call cmake_tool,$(TARGET_NM)) - CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB)) - - CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_TOOLCHAIN),;$(CONFIG_TOOLCHAIN_ROOT)) --CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOST) -+CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOSTPKG);$(STAGING_DIR_HOST) - CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions - - define Build/Configure/Default -diff --git a/include/host-build.mk b/include/host-build.mk -index 5fcec7ebf48361100d29c5925beaae4f36d5ac7b..485f09a6b71b881692b5ee575927397259bbac24 100644 ---- a/include/host-build.mk -+++ b/include/host-build.mk -@@ -126,7 +126,7 @@ ifneq ($(if $(HOST_QUILT),,$(CONFIG_AUTOREBUILD)),) - endif - - define Host/Exports/Default -- $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-* $(if $(IS_PACKAGE_BUILD),$$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*)),-I $$(p)) -+ $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-* $(if $(IS_PACKAGE_BUILD),$$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*)),-I $$(p)) - $(1) : export STAGING_PREFIX=$$(HOST_BUILD_PREFIX) - $(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig:$$(HOST_BUILD_PREFIX)/lib/pkgconfig - $(1) : export PKG_CONFIG_LIBDIR=$$(HOST_BUILD_PREFIX)/lib/pkgconfig -diff --git a/include/package.mk b/include/package.mk -index e9989ab13ec81a8751ee7245639ee0b82b9a87b2..7f77c4e99b1e9b79503963c497c4c87d7af9d71a 100644 ---- a/include/package.mk -+++ b/include/package.mk -@@ -130,7 +130,7 @@ ifdef USE_SOURCE_DIR - endif - - define Build/Exports/Default -- $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p)) -+ $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p)) - $(1) : export STAGING_PREFIX=$$(STAGING_DIR)/usr - $(1) : export PATH=$$(TARGET_PATH_PKG) - $(1) : export CONFIG_SITE:=$$(CONFIG_SITE) -diff --git a/rules.mk b/rules.mk -index 5710a84fe7ad24e45acb2ef62ee29eab37e8de06..b678e9bea5bc146a3c515d93003415cd21882068 100644 ---- a/rules.mk -+++ b/rules.mk -@@ -147,9 +147,9 @@ STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD) - BUILD_LOG_DIR:=$(TOPDIR)/logs - PKG_INFO_DIR := $(STAGING_DIR)/pkginfo - --BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR)/host,$(BUILD_DIR_BASE)/host) -+BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR_BASE)/hostpkg,$(BUILD_DIR_BASE)/host) - STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host --STAGING_DIR_HOSTPKG:=$(STAGING_DIR)/host -+STAGING_DIR_HOSTPKG:=$(TOPDIR)/staging_dir/hostpkg - - TARGET_PATH:=$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH))))) - TARGET_INIT_PATH:=$(call qstrip,$(CONFIG_TARGET_INIT_PATH)) -@@ -208,7 +208,7 @@ ifndef DUMP - endif - endif - endif --TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH) -+TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(STAGING_DIR_HOSTPKG)/bin:$(TARGET_PATH) - - ifeq ($(CONFIG_SOFT_FLOAT),y) - SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft -@@ -234,9 +234,9 @@ export PKG_CONFIG - - HOSTCC:=gcc - HOSTCXX:=g++ --HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include -I$(STAGING_DIR_HOST)/usr/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR)/host/include) -+HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include -I$(STAGING_DIR_HOST)/usr/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include) - HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS) --HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib -L$(STAGING_DIR_HOST)/usr/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR)/host/lib) -+HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib -L$(STAGING_DIR_HOST)/usr/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib) - - ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - TARGET_AR:=$(TARGET_CROSS)gcc-ar diff --git a/patches/lede/0007-rules.mk-export-STAGING_DIR_HOSTPKG.patch b/patches/lede/0007-rules.mk-export-STAGING_DIR_HOSTPKG.patch deleted file mode 100644 index b6bedd95..00000000 --- a/patches/lede/0007-rules.mk-export-STAGING_DIR_HOSTPKG.patch +++ /dev/null @@ -1,19 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 19 Jan 2017 00:03:32 +0100 -Subject: rules.mk: export STAGING_DIR_HOSTPKG - -Signed-off-by: Matthias Schiffer - -diff --git a/rules.mk b/rules.mk -index b678e9bea5bc146a3c515d93003415cd21882068..16cab67d5d1b8b130a0ffddc81789e798cda338e 100644 ---- a/rules.mk -+++ b/rules.mk -@@ -225,7 +225,7 @@ else - endif - - export PATH:=$(TARGET_PATH) --export STAGING_DIR STAGING_DIR_HOST -+export STAGING_DIR STAGING_DIR_HOST STAGING_DIR_HOSTPKG - export SH_FUNC:=. $(INCLUDE_DIR)/shell.sh; - - PKG_CONFIG:=$(STAGING_DIR_HOST)/bin/pkg-config diff --git a/patches/lede/0008-gettext-full-fix-to-use-STAGING_DIR_HOSTPKG-instead-of-STAGING_DIR-host.patch b/patches/lede/0008-gettext-full-fix-to-use-STAGING_DIR_HOSTPKG-instead-of-STAGING_DIR-host.patch deleted file mode 100644 index 4aa04521..00000000 --- a/patches/lede/0008-gettext-full-fix-to-use-STAGING_DIR_HOSTPKG-instead-of-STAGING_DIR-host.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 19 Jan 2017 00:04:09 +0100 -Subject: gettext-full: fix to use $STAGING_DIR_HOSTPKG instead of $STAGING_DIR/host - -Signed-off-by: Matthias Schiffer - -diff --git a/package/libs/gettext-full/patches/000-relocatable.patch b/package/libs/gettext-full/patches/000-relocatable.patch -index c14be728367b57c08024d848cf8ff847cfe865be..a95c268f5bc94ed8ec3784ae2044aa77e0322491 100644 ---- a/package/libs/gettext-full/patches/000-relocatable.patch -+++ b/package/libs/gettext-full/patches/000-relocatable.patch -@@ -5,8 +5,8 @@ - # Set variables - # - gettext_datadir directory where the data files are stored. - -prefix="@prefix@" --+if [ -n "$STAGING_DIR" ]; then --+ prefix="$STAGING_DIR/host" -++if [ -n "$STAGING_DIR_HOSTPKG" ]; then -++ prefix="$STAGING_DIR_HOSTPKG" - +else - + prefix="@prefix@" - +fi -@@ -20,8 +20,8 @@ - # Set variables - # - gettext_datadir directory where the data files are stored. - -prefix="@prefix@" --+if [ -n "$STAGING_DIR" ]; then --+ prefix="$STAGING_DIR/host" -++if [ -n "$STAGING_DIR_HOSTPKG" ]; then -++ prefix="$STAGING_DIR_HOSTPKG" - +else - + prefix="@prefix@" - +fi diff --git a/patches/lede/0009-netifd-update-to-git-HEAD-version.patch b/patches/lede/0009-netifd-update-to-git-HEAD-version.patch deleted file mode 100644 index b03ee347..00000000 --- a/patches/lede/0009-netifd-update-to-git-HEAD-version.patch +++ /dev/null @@ -1,28 +0,0 @@ -From: Matthias Schiffer -Date: Fri, 10 Mar 2017 01:58:42 +0100 -Subject: netifd: update to git HEAD version - -91810ec system-linux: add VXLAN support -f107656 netifd: Add option to configure locktime for each device -cdc0e80 interface: add prefix assignment priority support -6397f5e device: add veth support -6228d0f wireless: fix _wireless_add_process -7cc2f10 treewide: fix white space errors - -diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile -index fb035864017df739a0d0b0c0451fe8488a40c77c..d6d91ba014c67f126176eba8acae5fd2c8b007ba 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=$(LEDE_GIT)/project/netifd.git --PKG_SOURCE_DATE:=2017-01-25 --PKG_SOURCE_VERSION:=650758b16e5185505a3fbc1307949340af70b611 --PKG_MIRROR_HASH:=d09c740bc1bf6269678bd75c9af52ecd4be3d1d59402a543ceb9d4459cecfa2b -+PKG_SOURCE_DATE:=2017-03-07 -+PKG_SOURCE_VERSION:=91810ecc13239f3b18c8299de265b4f3531c0017 -+PKG_MIRROR_HASH:=51d0a8866c6b004185f1fb83f37e7aed33fc94b72bd85954c773549a57c3c761 - PKG_MAINTAINER:=Felix Fietkau - - PKG_LICENSE:=GPL-2.0 diff --git a/patches/lede/0010-netifd-ubus-add-interface-method-to-trigger-renew-event.patch b/patches/lede/0010-netifd-ubus-add-interface-method-to-trigger-renew-event.patch deleted file mode 100644 index 18c432a3..00000000 --- a/patches/lede/0010-netifd-ubus-add-interface-method-to-trigger-renew-event.patch +++ /dev/null @@ -1,83 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 12 Apr 2017 02:31:12 +0200 -Subject: netifd: ubus: add interface method to trigger renew event - -diff --git a/package/network/config/netifd/patches/0001-ubus-add-interface-method-to-trigger-renew-event.patch b/package/network/config/netifd/patches/0001-ubus-add-interface-method-to-trigger-renew-event.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..1f59498d421b7e1d3e76a1a38f604181d11c4649 ---- /dev/null -+++ b/package/network/config/netifd/patches/0001-ubus-add-interface-method-to-trigger-renew-event.patch -@@ -0,0 +1,73 @@ -+From 8b39c2fce4c1da3f3dcd4c6fd305c124714839e8 Mon Sep 17 00:00:00 2001 -+Message-Id: <8b39c2fce4c1da3f3dcd4c6fd305c124714839e8.1491956920.git.mschiffer@universe-factory.net> -+From: Matthias Schiffer -+Date: Wed, 12 Apr 2017 02:25:33 +0200 -+Subject: [PATCH] ubus: add interface method to trigger renew event -+ -+proto-shell handlers may implement all kinds of renew handlers, there -+should be a way to explicitly trigger such a renew. -+ -+Signed-off-by: Matthias Schiffer -+--- -+ interface.c | 8 ++++++++ -+ interface.h | 1 + -+ ubus.c | 14 ++++++++++++++ -+ 3 files changed, 23 insertions(+) -+ -+--- a/interface.c -++++ b/interface.c -+@@ -1076,6 +1076,14 @@ interface_set_down(struct interface *ifa -+ return 0; -+ } -+ -++int interface_renew(struct interface *iface) -++{ -++ if (iface->state == IFS_TEARDOWN || iface->state == IFS_DOWN) -++ return -1; -++ -++ return interface_proto_event(iface->proto, PROTO_CMD_RENEW, false); -++} -++ -+ void -+ interface_start_pending(void) -+ { -+--- a/interface.h -++++ b/interface.h -+@@ -184,6 +184,7 @@ void interface_set_available(struct inte -+ int interface_set_up(struct interface *iface); -+ int interface_set_down(struct interface *iface); -+ void __interface_set_down(struct interface *iface, bool force); -++int interface_renew(struct interface *iface); -+ -+ void interface_set_main_dev(struct interface *iface, struct device *dev); -+ void interface_set_l3_dev(struct interface *iface, struct device *dev); -+--- a/ubus.c -++++ b/ubus.c -+@@ -376,6 +376,19 @@ netifd_handle_down(struct ubus_context * -+ return 0; -+ } -+ -++static int -++netifd_handle_renew(struct ubus_context *ctx, struct ubus_object *obj, -++ struct ubus_request_data *req, const char *method, -++ struct blob_attr *msg) -++{ -++ struct interface *iface; -++ -++ iface = container_of(obj, struct interface, ubus); -++ interface_renew(iface); -++ -++ return 0; -++} -++ -+ static void -+ netifd_add_interface_errors(struct blob_buf *b, struct interface *iface) -+ { -+@@ -912,6 +925,7 @@ netifd_handle_set_data(struct ubus_conte -+ static struct ubus_method iface_object_methods[] = { -+ { .name = "up", .handler = netifd_handle_up }, -+ { .name = "down", .handler = netifd_handle_down }, -++ { .name = "renew", .handler = netifd_handle_renew }, -+ { .name = "status", .handler = netifd_handle_status }, -+ { .name = "prepare", .handler = netifd_handle_iface_prepare }, -+ { .name = "dump", .handler = netifd_handle_dump }, diff --git a/patches/lede/0011-procd-switch-to-latest-master.patch b/patches/lede/0011-procd-switch-to-latest-master.patch deleted file mode 100644 index e16f6586..00000000 --- a/patches/lede/0011-procd-switch-to-latest-master.patch +++ /dev/null @@ -1,21 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 13 Jul 2017 17:15:21 +0200 -Subject: procd: switch to latest master - -diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile -index b905cb25aa02c4c3f82cbc288ef15648dfd66444..5b92d79332f2ea400041586b92b570d8b633218a 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=$(LEDE_GIT)/project/procd.git --PKG_SOURCE_DATE:=2018-01-22 --PKG_SOURCE_VERSION:=9a4036fb1b7412ab2ea4f360d2cc7e6a5e0fa6b5 --PKG_MIRROR_HASH:=669f062e9c5228ef9d09cc9904d8ce4651f0b8506a6c2fff27b21e83b26f0abb -+PKG_SOURCE_DATE:=2018-01-23 -+PKG_SOURCE_VERSION:=653629f19e591a0827ab39de07b4526bb119a57a -+PKG_MIRROR_HASH:=2e0c3ae45521eea456a8411c8d9ef19ed9a5ed6c0ab38b9496555625fb4ba6a2 - CMAKE_INSTALL:=1 - - PKG_LICENSE:=GPL-2.0 diff --git a/patches/lede/0012-procd-clean-up-trailing-whitespace-in-nand.sh.patch b/patches/lede/0012-procd-clean-up-trailing-whitespace-in-nand.sh.patch deleted file mode 100644 index 671b879d..00000000 --- a/patches/lede/0012-procd-clean-up-trailing-whitespace-in-nand.sh.patch +++ /dev/null @@ -1,28 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 3 May 2017 08:27:40 +0200 -Subject: procd: clean up trailing whitespace in nand.sh - -Signed-off-by: Matthias Schiffer - -diff --git a/package/system/procd/files/nand.sh b/package/system/procd/files/nand.sh -index ebaaf2aa16009cc1431dbb79ba9f689c8b636069..8a164ee08537014936a8608f5a60fe0e27dcabd6 100644 ---- a/package/system/procd/files/nand.sh -+++ b/package/system/procd/files/nand.sh -@@ -194,7 +194,7 @@ nand_upgrade_prepare_ubi() { - - nand_do_upgrade_success() { - local conf_tar="/tmp/sysupgrade.tgz" -- -+ - sync - [ -f "$conf_tar" ] && nand_restore_config "$conf_tar" - echo "sysupgrade successful" -@@ -231,7 +231,7 @@ nand_upgrade_ubifs() { - local rootfs_length=`(cat $1 | wc -c) 2> /dev/null` - - nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0" -- -+ - local ubidev="$( nand_find_ubi "$CI_UBIPART" )" - local root_ubivol="$(nand_find_volume $ubidev rootfs)" - ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1 diff --git a/patches/lede/0013-procd-prepare-NAND-sysupgrade-for-making-upgraded-dynamically-linked.patch b/patches/lede/0013-procd-prepare-NAND-sysupgrade-for-making-upgraded-dynamically-linked.patch deleted file mode 100644 index 3d3c5b4e..00000000 --- a/patches/lede/0013-procd-prepare-NAND-sysupgrade-for-making-upgraded-dynamically-linked.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 3 May 2017 08:28:05 +0200 -Subject: procd: prepare NAND sysupgrade for making upgraded dynamically linked - -Use install_bin to copy upgraded with all dependencies. The old name -/tmp/upgraded is temporarily retained as a symlink to avoid breaking -things. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/system/procd/files/nand.sh b/package/system/procd/files/nand.sh -index 8a164ee08537014936a8608f5a60fe0e27dcabd6..6bd2005344c081df20e5a330a69e49e37225c39f 100644 ---- a/package/system/procd/files/nand.sh -+++ b/package/system/procd/files/nand.sh -@@ -333,7 +333,7 @@ nand_upgrade_stage1() { - [ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] && - rm $CONF_TAR - -- ubus call system nandupgrade "{\"path\": \"$path\" }" -+ ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }" - exit 0 - } - } -@@ -370,6 +370,7 @@ nand_do_platform_check() { - # $(1): file to be used for upgrade - nand_do_upgrade() { - echo -n $1 > /tmp/sysupgrade-nand-path -- cp /sbin/upgraded /tmp/ -+ install_bin /sbin/upgraded -+ ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded - nand_upgrade_stage1 - } diff --git a/patches/lede/0014-procd-remove-procd-nand-package.patch b/patches/lede/0014-procd-remove-procd-nand-package.patch deleted file mode 100644 index e87d43d7..00000000 --- a/patches/lede/0014-procd-remove-procd-nand-package.patch +++ /dev/null @@ -1,934 +0,0 @@ -From: Matthias Schiffer -Date: Fri, 21 Apr 2017 20:37:58 +0200 -Subject: procd: remove procd-nand package - -We always want to support staged upgrades now, so it's better to include -upgraded into the main package. /lib/upgrade/nand.sh is moved to -base-files. - -The procd-nand-firstboot package is removed for now, it may return later -as a separate package. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/Makefile b/package/base-files/Makefile -index 4fbc9a265b535d850fe812085677b3f6aabf4e1f..c971de4deee7cd331ddcad6b87eb9fefd7af6a64 100644 ---- a/package/base-files/Makefile -+++ b/package/base-files/Makefile -@@ -19,7 +19,9 @@ PKG_BUILD_DEPENDS:=usign/host - PKG_LICENSE:=GPL-2.0 - - # Extend depends from version.mk --PKG_CONFIG_DEPENDS += CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE -+PKG_CONFIG_DEPENDS += \ -+ CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE \ -+ CONFIG_NAND_SUPPORT - - include $(INCLUDE_DIR)/package.mk - -@@ -31,7 +33,7 @@ endif - define Package/base-files - SECTION:=base - CATEGORY:=Base system -- DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +fstools +fwtool -+ DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +NAND_SUPPORT:ubi-utils +fstools +fwtool - TITLE:=Base filesystem for Lede - URL:=http://openwrt.org/ - VERSION:=$(PKG_RELEASE)-$(REVISION) -@@ -107,9 +109,16 @@ ifdef CONFIG_SIGNED_PACKAGES - endef - endif - -+ifeq ($(CONFIG_NAND_SUPPORT),) -+ define Package/base-files/nand-support -+ rm -f $(1)/lib/upgrade/nand.sh -+ endef -+endif -+ - define Package/base-files/install - $(CP) ./files/* $(1)/ - $(Package/base-files/install-key) -+ $(Package/base-files/nand-support) - if [ -d $(GENERIC_PLATFORM_DIR)/base-files/. ]; then \ - $(CP) $(GENERIC_PLATFORM_DIR)/base-files/* $(1)/; \ - fi -diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh -new file mode 100644 -index 0000000000000000000000000000000000000000..6bd2005344c081df20e5a330a69e49e37225c39f ---- /dev/null -+++ b/package/base-files/files/lib/upgrade/nand.sh -@@ -0,0 +1,376 @@ -+#!/bin/sh -+# Copyright (C) 2014 OpenWrt.org -+# -+ -+. /lib/functions.sh -+ -+# 'kernel' partition on NAND contains the kernel -+CI_KERNPART="kernel" -+ -+# 'ubi' partition on NAND contains UBI -+CI_UBIPART="ubi" -+ -+ubi_mknod() { -+ local dir="$1" -+ local dev="/dev/$(basename $dir)" -+ -+ [ -e "$dev" ] && return 0 -+ -+ local devid="$(cat $dir/dev)" -+ local major="${devid%%:*}" -+ local minor="${devid##*:}" -+ mknod "$dev" c $major $minor -+} -+ -+nand_find_volume() { -+ local ubidevdir ubivoldir -+ ubidevdir="/sys/devices/virtual/ubi/$1" -+ [ ! -d "$ubidevdir" ] && return 1 -+ for ubivoldir in $ubidevdir/${1}_*; do -+ [ ! -d "$ubivoldir" ] && continue -+ if [ "$( cat $ubivoldir/name )" = "$2" ]; then -+ basename $ubivoldir -+ ubi_mknod "$ubivoldir" -+ return 0 -+ fi -+ done -+} -+ -+nand_find_ubi() { -+ local ubidevdir ubidev mtdnum -+ mtdnum="$( find_mtd_index $1 )" -+ [ ! "$mtdnum" ] && return 1 -+ for ubidevdir in /sys/devices/virtual/ubi/ubi*; do -+ [ ! -d "$ubidevdir" ] && continue -+ cmtdnum="$( cat $ubidevdir/mtd_num )" -+ [ ! "$mtdnum" ] && continue -+ if [ "$mtdnum" = "$cmtdnum" ]; then -+ ubidev=$( basename $ubidevdir ) -+ ubi_mknod "$ubidevdir" -+ echo $ubidev -+ return 0 -+ fi -+ done -+} -+ -+nand_get_magic_long() { -+ dd if="$1" skip=$2 bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' -+} -+ -+get_magic_long_tar() { -+ ( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null -+} -+ -+identify_magic() { -+ local magic=$1 -+ case "$magic" in -+ "55424923") -+ echo "ubi" -+ ;; -+ "31181006") -+ echo "ubifs" -+ ;; -+ "68737173") -+ echo "squashfs" -+ ;; -+ "d00dfeed") -+ echo "fit" -+ ;; -+ "4349"*) -+ echo "combined" -+ ;; -+ *) -+ echo "unknown $magic" -+ ;; -+ esac -+} -+ -+ -+identify() { -+ identify_magic $(nand_get_magic_long "$1" "${2:-0}") -+} -+ -+identify_tar() { -+ identify_magic $(get_magic_long_tar "$1" "$2") -+} -+ -+nand_restore_config() { -+ sync -+ local ubidev=$( nand_find_ubi $CI_UBIPART ) -+ local ubivol="$( nand_find_volume $ubidev rootfs_data )" -+ [ ! "$ubivol" ] && -+ ubivol="$( nand_find_volume $ubidev rootfs )" -+ mkdir /tmp/new_root -+ if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then -+ echo "mounting ubifs $ubivol failed" -+ rmdir /tmp/new_root -+ return 1 -+ fi -+ mv "$1" "/tmp/new_root/sysupgrade.tgz" -+ umount /tmp/new_root -+ sync -+ rmdir /tmp/new_root -+} -+ -+nand_upgrade_prepare_ubi() { -+ local rootfs_length="$1" -+ local rootfs_type="$2" -+ local has_kernel="${3:-0}" -+ local has_env="${4:-0}" -+ -+ local mtdnum="$( find_mtd_index "$CI_UBIPART" )" -+ if [ ! "$mtdnum" ]; then -+ echo "cannot find ubi mtd partition $CI_UBIPART" -+ return 1 -+ fi -+ -+ local ubidev="$( nand_find_ubi "$CI_UBIPART" )" -+ if [ ! "$ubidev" ]; then -+ ubiattach -m "$mtdnum" -+ sync -+ ubidev="$( nand_find_ubi "$CI_UBIPART" )" -+ fi -+ -+ if [ ! "$ubidev" ]; then -+ ubiformat /dev/mtd$mtdnum -y -+ ubiattach -m "$mtdnum" -+ sync -+ ubidev="$( nand_find_ubi "$CI_UBIPART" )" -+ [ "$has_env" -gt 0 ] && { -+ ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB -+ ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB -+ } -+ fi -+ -+ local kern_ubivol="$( nand_find_volume $ubidev kernel )" -+ local root_ubivol="$( nand_find_volume $ubidev rootfs )" -+ local data_ubivol="$( nand_find_volume $ubidev rootfs_data )" -+ -+ # remove ubiblock device of rootfs -+ local root_ubiblk="ubiblock${root_ubivol:3}" -+ if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then -+ echo "removing $root_ubiblk" -+ if ! ubiblock -r /dev/$root_ubivol; then -+ echo "cannot remove $root_ubiblk" -+ return 1; -+ fi -+ fi -+ -+ # kill volumes -+ [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N kernel || true -+ [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true -+ [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true -+ -+ # update kernel -+ if [ "$has_kernel" = "1" ]; then -+ if ! ubimkvol /dev/$ubidev -N kernel -s $kernel_length; then -+ echo "cannot create kernel volume" -+ return 1; -+ fi -+ fi -+ -+ # update rootfs -+ local root_size_param -+ if [ "$rootfs_type" = "ubifs" ]; then -+ root_size_param="-m" -+ else -+ root_size_param="-s $rootfs_length" -+ fi -+ if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then -+ echo "cannot create rootfs volume" -+ return 1; -+ fi -+ -+ # create rootfs_data for non-ubifs rootfs -+ if [ "$rootfs_type" != "ubifs" ]; then -+ if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then -+ echo "cannot initialize rootfs_data volume" -+ return 1 -+ fi -+ fi -+ sync -+ return 0 -+} -+ -+nand_do_upgrade_success() { -+ local conf_tar="/tmp/sysupgrade.tgz" -+ -+ sync -+ [ -f "$conf_tar" ] && nand_restore_config "$conf_tar" -+ echo "sysupgrade successful" -+ umount -a -+ reboot -f -+} -+ -+# Flash the UBI image to MTD partition -+nand_upgrade_ubinized() { -+ local ubi_file="$1" -+ local mtdnum="$(find_mtd_index "$CI_UBIPART")" -+ -+ [ ! "$mtdnum" ] && { -+ CI_UBIPART="rootfs" -+ mtdnum="$(find_mtd_index "$CI_UBIPART")" -+ } -+ -+ if [ ! "$mtdnum" ]; then -+ echo "cannot find mtd device $CI_UBIPART" -+ umount -a -+ reboot -f -+ fi -+ -+ local mtddev="/dev/mtd${mtdnum}" -+ ubidetach -p "${mtddev}" || true -+ sync -+ ubiformat "${mtddev}" -y -f "${ubi_file}" -+ ubiattach -p "${mtddev}" -+ nand_do_upgrade_success -+} -+ -+# Write the UBIFS image to UBI volume -+nand_upgrade_ubifs() { -+ local rootfs_length=`(cat $1 | wc -c) 2> /dev/null` -+ -+ nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0" -+ -+ local ubidev="$( nand_find_ubi "$CI_UBIPART" )" -+ local root_ubivol="$(nand_find_volume $ubidev rootfs)" -+ ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1 -+ -+ nand_do_upgrade_success -+} -+ -+nand_board_name() { -+ if type 'platform_nand_board_name' >/dev/null 2>/dev/null; then -+ platform_nand_board_name -+ return -+ fi -+ -+ cat /tmp/sysinfo/board_name -+} -+ -+nand_upgrade_tar() { -+ local tar_file="$1" -+ local board_name="$(nand_board_name)" -+ local kernel_mtd="$(find_mtd_index $CI_KERNPART)" -+ -+ local kernel_length=`(tar xf $tar_file sysupgrade-$board_name/kernel -O | wc -c) 2> /dev/null` -+ local rootfs_length=`(tar xf $tar_file sysupgrade-$board_name/root -O | wc -c) 2> /dev/null` -+ -+ local rootfs_type="$(identify_tar "$tar_file" sysupgrade-$board_name/root)" -+ -+ local has_kernel=1 -+ local has_env=0 -+ -+ [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && { -+ tar xf $tar_file sysupgrade-$board_name/kernel -O | mtd write - $CI_KERNPART -+ } -+ [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0 -+ -+ nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env" -+ -+ local ubidev="$( nand_find_ubi "$CI_UBIPART" )" -+ [ "$has_kernel" = "1" ] && { -+ local kern_ubivol="$(nand_find_volume $ubidev kernel)" -+ tar xf $tar_file sysupgrade-$board_name/kernel -O | \ -+ ubiupdatevol /dev/$kern_ubivol -s $kernel_length - -+ } -+ -+ local root_ubivol="$(nand_find_volume $ubidev rootfs)" -+ tar xf $tar_file sysupgrade-$board_name/root -O | \ -+ ubiupdatevol /dev/$root_ubivol -s $rootfs_length - -+ -+ nand_do_upgrade_success -+} -+ -+# Recognize type of passed file and start the upgrade process -+nand_do_upgrade_stage2() { -+ local file_type=$(identify $1) -+ -+ if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then -+ platform_nand_pre_upgrade "$1" -+ fi -+ -+ [ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs" -+ -+ case "$file_type" in -+ "ubi") nand_upgrade_ubinized $1;; -+ "ubifs") nand_upgrade_ubifs $1;; -+ *) nand_upgrade_tar $1;; -+ esac -+} -+ -+nand_upgrade_stage2() { -+ [ $1 = "nand" ] && { -+ [ -f "$2" ] && { -+ touch /tmp/sysupgrade -+ -+ killall -9 telnetd -+ killall -9 dropbear -+ killall -9 ash -+ -+ kill_remaining TERM -+ sleep 3 -+ kill_remaining KILL -+ -+ sleep 1 -+ -+ if [ -n "$(rootfs_type)" ]; then -+ v "Switching to ramdisk..." -+ run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2" -+ else -+ nand_do_upgrade_stage2 $2 -+ fi -+ return 0 -+ } -+ echo "Nand upgrade failed" -+ exit 1 -+ } -+} -+ -+nand_upgrade_stage1() { -+ [ -f /tmp/sysupgrade-nand-path ] && { -+ path="$(cat /tmp/sysupgrade-nand-path)" -+ [ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] && -+ rm $CONF_TAR -+ -+ ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }" -+ exit 0 -+ } -+} -+ -+# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts -+# 3 types of files: -+# 1) UBI - should contain an ubinized image, header is checked for the proper -+# MAGIC -+# 2) UBIFS - should contain UBIFS partition that will replace "rootfs" volume, -+# header is checked for the proper MAGIC -+# 3) TAR - archive has to include "sysupgrade-BOARD" directory with a non-empty -+# "CONTROL" file (at this point its content isn't verified) -+# -+# You usually want to call this function in platform_check_image. -+# -+# $(1): board name, used in case of passing TAR file -+# $(2): file to be checked -+nand_do_platform_check() { -+ local board_name="$1" -+ local tar_file="$2" -+ local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null` -+ local file_type="$(identify $2)" -+ -+ [ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && { -+ echo "Invalid sysupgrade file." -+ return 1 -+ } -+ -+ return 0 -+} -+ -+# Start NAND upgrade process -+# -+# $(1): file to be used for upgrade -+nand_do_upgrade() { -+ echo -n $1 > /tmp/sysupgrade-nand-path -+ install_bin /sbin/upgraded -+ ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded -+ nand_upgrade_stage1 -+} -diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile -index 5b92d79332f2ea400041586b92b570d8b633218a..879f03f54b23603a360499078d7d53503875f55a 100644 ---- a/package/system/procd/Makefile -+++ b/package/system/procd/Makefile -@@ -22,11 +22,9 @@ PKG_LICENSE_FILES:= - - PKG_MAINTAINER:=John Crispin - --PKG_FLAGS:=nonshared -- - PKG_CONFIG_DEPENDS:= \ - CONFIG_TARGET_INIT_PATH CONFIG_KERNEL_SECCOMP \ -- CONFIG_NAND_SUPPORT CONFIG_PROCD_SHOW_BOOT CONFIG_PROCD_ZRAM_TMPFS \ -+ CONFIG_PROCD_SHOW_BOOT CONFIG_PROCD_ZRAM_TMPFS \ - CONFIG_KERNEL_NAMESPACES CONFIG_PACKAGE_procd-ujail CONFIG_PACKAGE_procd-seccomp - - include $(INCLUDE_DIR)/package.mk -@@ -42,7 +40,7 @@ TARGET_LDFLAGS += $(if $(CONFIG_USE_GLIBC),-lrt) - define Package/procd - SECTION:=base - CATEGORY:=Base system -- DEPENDS:=+ubusd +ubus +libjson-script +ubox +USE_GLIBC:librt +libubox +libubus +NAND_SUPPORT:procd-nand -+ DEPENDS:=+ubusd +ubus +libjson-script +ubox +USE_GLIBC:librt +libubox +libubus - TITLE:=OpenWrt system process manager - endef - -@@ -60,20 +58,6 @@ define Package/procd-seccomp - TITLE:=OpenWrt process seccomp helper + utrace - endef - --define Package/procd-nand -- SECTION:=utils -- CATEGORY:=Utilities -- DEPENDS:=@NAND_SUPPORT +ubi-utils -- TITLE:=OpenWrt sysupgrade nand helper --endef -- --define Package/procd-nand-firstboot -- SECTION:=utils -- CATEGORY:=Utilities -- DEPENDS:=procd-nand -- TITLE:=OpenWrt firstboot nand helper --endef -- - define Package/procd/config - menu "Configuration" - depends on PACKAGE_procd -@@ -91,10 +75,6 @@ endmenu - endef - - --ifeq ($(CONFIG_NAND_SUPPORT),y) -- CMAKE_OPTIONS += -DBUILD_UPGRADED=1 --endif -- - ifeq ($(CONFIG_PROCD_SHOW_BOOT),y) - CMAKE_OPTIONS += -DSHOW_BOOT_ON_CONSOLE=1 - endif -@@ -113,7 +93,7 @@ CMAKE_OPTIONS += -DSECCOMP_SUPPORT=$(SECCOMP) -DUTRACE_SUPPORT=$(SECCOMP) - define Package/procd/install - $(INSTALL_DIR) $(1)/sbin $(1)/etc $(1)/lib/functions - -- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{init,procd,askfirst,udevtrigger} $(1)/sbin/ -+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{init,procd,askfirst,udevtrigger,upgraded} $(1)/sbin/ - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libsetlbf.so $(1)/lib - $(INSTALL_BIN) ./files/reload_config $(1)/sbin/ - $(INSTALL_DATA) ./files/hotplug*.json $(1)/etc/ -@@ -133,21 +113,6 @@ define Package/procd-seccomp/install - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libpreload-trace.so $(1)/lib - endef - --define Package/procd-nand/install -- $(INSTALL_DIR) $(1)/sbin $(1)/lib/upgrade -- -- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upgraded $(1)/sbin/ -- $(INSTALL_DATA) ./files/nand.sh $(1)/lib/upgrade/ --endef -- --define Package/procd-nand-firstboot/install -- $(INSTALL_DIR) $(1)/lib/preinit -- -- $(INSTALL_DATA) ./files/nand-preinit.sh $(1)/lib/preinit/60-nand-firstboot.sh --endef -- - $(eval $(call BuildPackage,procd)) - $(eval $(call BuildPackage,procd-ujail)) - $(eval $(call BuildPackage,procd-seccomp)) --$(eval $(call BuildPackage,procd-nand)) --$(eval $(call BuildPackage,procd-nand-firstboot)) -diff --git a/package/system/procd/files/nand-preinit.sh b/package/system/procd/files/nand-preinit.sh -deleted file mode 100644 -index cf596246d1f2891cbeb7b5c7cac4bb6e002b13fb..0000000000000000000000000000000000000000 ---- a/package/system/procd/files/nand-preinit.sh -+++ /dev/null -@@ -1,21 +0,0 @@ --#!/bin/sh --# Copyright (C) 2014 OpenWrt.org -- --nand_takeover() { -- . /lib/upgrade/nand.sh -- mtd=$(find_mtd_index "$CI_UBIPART") -- esize=$(cat /proc/mtd | grep mtd$mtd |cut -d" " -f 3) -- [ -z "$esize" ] && return 1 -- esize=$(printf "%d" 0x$esize) -- for a in `seq 0 64`; do -- mtd -o $((a * esize)) -l 400 dump /dev/mtd$mtd > /tmp/takeover.hdr -- MAGIC=$(dd if=/tmp/takeover.hdr bs=1 skip=261 count=5 2> /dev/null) -- SIZE=$(printf "%d" 0x$(dd if=/tmp/takeover.hdr bs=4 count=1 2> /dev/null | hexdump -v -n 4 -e '1/1 "%02x"')) -- [ "$MAGIC" = "ustar" ] && { -- mtd -o $((a * esize)) -l $((SIZE + 4)) dump /dev/mtd$mtd | dd bs=1 skip=4 of=/tmp/sysupgrade.tar -- nand_do_upgrade_stage2 /tmp/sysupgrade.tar -- } -- done --} -- --boot_hook_add initramfs nand_takeover -diff --git a/package/system/procd/files/nand.sh b/package/system/procd/files/nand.sh -deleted file mode 100644 -index 6bd2005344c081df20e5a330a69e49e37225c39f..0000000000000000000000000000000000000000 ---- a/package/system/procd/files/nand.sh -+++ /dev/null -@@ -1,376 +0,0 @@ --#!/bin/sh --# Copyright (C) 2014 OpenWrt.org --# -- --. /lib/functions.sh -- --# 'kernel' partition on NAND contains the kernel --CI_KERNPART="kernel" -- --# 'ubi' partition on NAND contains UBI --CI_UBIPART="ubi" -- --ubi_mknod() { -- local dir="$1" -- local dev="/dev/$(basename $dir)" -- -- [ -e "$dev" ] && return 0 -- -- local devid="$(cat $dir/dev)" -- local major="${devid%%:*}" -- local minor="${devid##*:}" -- mknod "$dev" c $major $minor --} -- --nand_find_volume() { -- local ubidevdir ubivoldir -- ubidevdir="/sys/devices/virtual/ubi/$1" -- [ ! -d "$ubidevdir" ] && return 1 -- for ubivoldir in $ubidevdir/${1}_*; do -- [ ! -d "$ubivoldir" ] && continue -- if [ "$( cat $ubivoldir/name )" = "$2" ]; then -- basename $ubivoldir -- ubi_mknod "$ubivoldir" -- return 0 -- fi -- done --} -- --nand_find_ubi() { -- local ubidevdir ubidev mtdnum -- mtdnum="$( find_mtd_index $1 )" -- [ ! "$mtdnum" ] && return 1 -- for ubidevdir in /sys/devices/virtual/ubi/ubi*; do -- [ ! -d "$ubidevdir" ] && continue -- cmtdnum="$( cat $ubidevdir/mtd_num )" -- [ ! "$mtdnum" ] && continue -- if [ "$mtdnum" = "$cmtdnum" ]; then -- ubidev=$( basename $ubidevdir ) -- ubi_mknod "$ubidevdir" -- echo $ubidev -- return 0 -- fi -- done --} -- --nand_get_magic_long() { -- dd if="$1" skip=$2 bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' --} -- --get_magic_long_tar() { -- ( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null --} -- --identify_magic() { -- local magic=$1 -- case "$magic" in -- "55424923") -- echo "ubi" -- ;; -- "31181006") -- echo "ubifs" -- ;; -- "68737173") -- echo "squashfs" -- ;; -- "d00dfeed") -- echo "fit" -- ;; -- "4349"*) -- echo "combined" -- ;; -- *) -- echo "unknown $magic" -- ;; -- esac --} -- -- --identify() { -- identify_magic $(nand_get_magic_long "$1" "${2:-0}") --} -- --identify_tar() { -- identify_magic $(get_magic_long_tar "$1" "$2") --} -- --nand_restore_config() { -- sync -- local ubidev=$( nand_find_ubi $CI_UBIPART ) -- local ubivol="$( nand_find_volume $ubidev rootfs_data )" -- [ ! "$ubivol" ] && -- ubivol="$( nand_find_volume $ubidev rootfs )" -- mkdir /tmp/new_root -- if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then -- echo "mounting ubifs $ubivol failed" -- rmdir /tmp/new_root -- return 1 -- fi -- mv "$1" "/tmp/new_root/sysupgrade.tgz" -- umount /tmp/new_root -- sync -- rmdir /tmp/new_root --} -- --nand_upgrade_prepare_ubi() { -- local rootfs_length="$1" -- local rootfs_type="$2" -- local has_kernel="${3:-0}" -- local has_env="${4:-0}" -- -- local mtdnum="$( find_mtd_index "$CI_UBIPART" )" -- if [ ! "$mtdnum" ]; then -- echo "cannot find ubi mtd partition $CI_UBIPART" -- return 1 -- fi -- -- local ubidev="$( nand_find_ubi "$CI_UBIPART" )" -- if [ ! "$ubidev" ]; then -- ubiattach -m "$mtdnum" -- sync -- ubidev="$( nand_find_ubi "$CI_UBIPART" )" -- fi -- -- if [ ! "$ubidev" ]; then -- ubiformat /dev/mtd$mtdnum -y -- ubiattach -m "$mtdnum" -- sync -- ubidev="$( nand_find_ubi "$CI_UBIPART" )" -- [ "$has_env" -gt 0 ] && { -- ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB -- ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB -- } -- fi -- -- local kern_ubivol="$( nand_find_volume $ubidev kernel )" -- local root_ubivol="$( nand_find_volume $ubidev rootfs )" -- local data_ubivol="$( nand_find_volume $ubidev rootfs_data )" -- -- # remove ubiblock device of rootfs -- local root_ubiblk="ubiblock${root_ubivol:3}" -- if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then -- echo "removing $root_ubiblk" -- if ! ubiblock -r /dev/$root_ubivol; then -- echo "cannot remove $root_ubiblk" -- return 1; -- fi -- fi -- -- # kill volumes -- [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N kernel || true -- [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true -- [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true -- -- # update kernel -- if [ "$has_kernel" = "1" ]; then -- if ! ubimkvol /dev/$ubidev -N kernel -s $kernel_length; then -- echo "cannot create kernel volume" -- return 1; -- fi -- fi -- -- # update rootfs -- local root_size_param -- if [ "$rootfs_type" = "ubifs" ]; then -- root_size_param="-m" -- else -- root_size_param="-s $rootfs_length" -- fi -- if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then -- echo "cannot create rootfs volume" -- return 1; -- fi -- -- # create rootfs_data for non-ubifs rootfs -- if [ "$rootfs_type" != "ubifs" ]; then -- if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then -- echo "cannot initialize rootfs_data volume" -- return 1 -- fi -- fi -- sync -- return 0 --} -- --nand_do_upgrade_success() { -- local conf_tar="/tmp/sysupgrade.tgz" -- -- sync -- [ -f "$conf_tar" ] && nand_restore_config "$conf_tar" -- echo "sysupgrade successful" -- umount -a -- reboot -f --} -- --# Flash the UBI image to MTD partition --nand_upgrade_ubinized() { -- local ubi_file="$1" -- local mtdnum="$(find_mtd_index "$CI_UBIPART")" -- -- [ ! "$mtdnum" ] && { -- CI_UBIPART="rootfs" -- mtdnum="$(find_mtd_index "$CI_UBIPART")" -- } -- -- if [ ! "$mtdnum" ]; then -- echo "cannot find mtd device $CI_UBIPART" -- umount -a -- reboot -f -- fi -- -- local mtddev="/dev/mtd${mtdnum}" -- ubidetach -p "${mtddev}" || true -- sync -- ubiformat "${mtddev}" -y -f "${ubi_file}" -- ubiattach -p "${mtddev}" -- nand_do_upgrade_success --} -- --# Write the UBIFS image to UBI volume --nand_upgrade_ubifs() { -- local rootfs_length=`(cat $1 | wc -c) 2> /dev/null` -- -- nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0" -- -- local ubidev="$( nand_find_ubi "$CI_UBIPART" )" -- local root_ubivol="$(nand_find_volume $ubidev rootfs)" -- ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1 -- -- nand_do_upgrade_success --} -- --nand_board_name() { -- if type 'platform_nand_board_name' >/dev/null 2>/dev/null; then -- platform_nand_board_name -- return -- fi -- -- cat /tmp/sysinfo/board_name --} -- --nand_upgrade_tar() { -- local tar_file="$1" -- local board_name="$(nand_board_name)" -- local kernel_mtd="$(find_mtd_index $CI_KERNPART)" -- -- local kernel_length=`(tar xf $tar_file sysupgrade-$board_name/kernel -O | wc -c) 2> /dev/null` -- local rootfs_length=`(tar xf $tar_file sysupgrade-$board_name/root -O | wc -c) 2> /dev/null` -- -- local rootfs_type="$(identify_tar "$tar_file" sysupgrade-$board_name/root)" -- -- local has_kernel=1 -- local has_env=0 -- -- [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && { -- tar xf $tar_file sysupgrade-$board_name/kernel -O | mtd write - $CI_KERNPART -- } -- [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0 -- -- nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env" -- -- local ubidev="$( nand_find_ubi "$CI_UBIPART" )" -- [ "$has_kernel" = "1" ] && { -- local kern_ubivol="$(nand_find_volume $ubidev kernel)" -- tar xf $tar_file sysupgrade-$board_name/kernel -O | \ -- ubiupdatevol /dev/$kern_ubivol -s $kernel_length - -- } -- -- local root_ubivol="$(nand_find_volume $ubidev rootfs)" -- tar xf $tar_file sysupgrade-$board_name/root -O | \ -- ubiupdatevol /dev/$root_ubivol -s $rootfs_length - -- -- nand_do_upgrade_success --} -- --# Recognize type of passed file and start the upgrade process --nand_do_upgrade_stage2() { -- local file_type=$(identify $1) -- -- if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then -- platform_nand_pre_upgrade "$1" -- fi -- -- [ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs" -- -- case "$file_type" in -- "ubi") nand_upgrade_ubinized $1;; -- "ubifs") nand_upgrade_ubifs $1;; -- *) nand_upgrade_tar $1;; -- esac --} -- --nand_upgrade_stage2() { -- [ $1 = "nand" ] && { -- [ -f "$2" ] && { -- touch /tmp/sysupgrade -- -- killall -9 telnetd -- killall -9 dropbear -- killall -9 ash -- -- kill_remaining TERM -- sleep 3 -- kill_remaining KILL -- -- sleep 1 -- -- if [ -n "$(rootfs_type)" ]; then -- v "Switching to ramdisk..." -- run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2" -- else -- nand_do_upgrade_stage2 $2 -- fi -- return 0 -- } -- echo "Nand upgrade failed" -- exit 1 -- } --} -- --nand_upgrade_stage1() { -- [ -f /tmp/sysupgrade-nand-path ] && { -- path="$(cat /tmp/sysupgrade-nand-path)" -- [ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] && -- rm $CONF_TAR -- -- ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }" -- exit 0 -- } --} -- --# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts --# 3 types of files: --# 1) UBI - should contain an ubinized image, header is checked for the proper --# MAGIC --# 2) UBIFS - should contain UBIFS partition that will replace "rootfs" volume, --# header is checked for the proper MAGIC --# 3) TAR - archive has to include "sysupgrade-BOARD" directory with a non-empty --# "CONTROL" file (at this point its content isn't verified) --# --# You usually want to call this function in platform_check_image. --# --# $(1): board name, used in case of passing TAR file --# $(2): file to be checked --nand_do_platform_check() { -- local board_name="$1" -- local tar_file="$2" -- local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null` -- local file_type="$(identify $2)" -- -- [ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && { -- echo "Invalid sysupgrade file." -- return 1 -- } -- -- return 0 --} -- --# Start NAND upgrade process --# --# $(1): file to be used for upgrade --nand_do_upgrade() { -- echo -n $1 > /tmp/sysupgrade-nand-path -- install_bin /sbin/upgraded -- ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded -- nand_upgrade_stage1 --} diff --git a/patches/lede/0015-base-files-always-use-staged-sysupgrade.patch b/patches/lede/0015-base-files-always-use-staged-sysupgrade.patch deleted file mode 100644 index 003e74b9..00000000 --- a/patches/lede/0015-base-files-always-use-staged-sysupgrade.patch +++ /dev/null @@ -1,476 +0,0 @@ -From: Matthias Schiffer -Date: Sat, 22 Apr 2017 00:54:50 +0200 -Subject: base-files: always use staged sysupgrade - -Support for the -d and -p options is dropped; it may be added again at some -point by adding these flags to the ubus sysupgrade call. - -A downside of this is that we get a lot less information about the progress -of the upgrade: as soon as the actual upgrade starts, all shell sessions -are killed to allow unmounting the root filesystem. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh -index 8c1b3b180e1ecfdd2c106dd3b8853cd487ff89b4..ef9aac709fc1619ba15eeb0aeb4a9a6a372369b2 100644 ---- a/package/base-files/files/lib/upgrade/common.sh -+++ b/package/base-files/files/lib/upgrade/common.sh -@@ -56,7 +56,6 @@ run_ramfs() { # [...] - /bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ - /bin/mknod - -- install_bin /bin/uclient-fetch /bin/wget - install_bin /sbin/mtd - install_bin /sbin/mount_root - install_bin /sbin/snapshot -@@ -96,51 +95,37 @@ run_ramfs() { # [...] - exec /bin/busybox ash -c "$*" - } - --kill_remaining() { # [ ] -+kill_remaining() { # [ [ ] ] - local sig="${1:-TERM}" -+ local loop="${2:-0}" -+ local run=true -+ local stat -+ - echo -n "Sending $sig to remaining processes ... " - -- local my_pid=$$ -- local my_ppid=$(cut -d' ' -f4 /proc/$my_pid/stat) -- local my_ppisupgraded= -- grep -q upgraded /proc/$my_ppid/cmdline >/dev/null && { -- local my_ppisupgraded=1 -- } -- -- local stat -- for stat in /proc/[0-9]*/stat; do -- [ -f "$stat" ] || continue -- -- local pid name state ppid rest -- read pid name state ppid rest < $stat -- name="${name#(}"; name="${name%)}" -- -- local cmdline -- read cmdline < /proc/$pid/cmdline -- -- # Skip kernel threads -- [ -n "$cmdline" ] || continue -- -- if [ $$ -eq 1 ] || [ $my_ppid -eq 1 ] && [ -n "$my_ppisupgraded" ]; then -- # Running as init process, kill everything except me -- if [ $pid -ne $$ ] && [ $pid -ne $my_ppid ]; then -- echo -n "$name " -- kill -$sig $pid 2>/dev/null -- fi -- else -- case "$name" in -- # Skip essential services -- *procd*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*|*relayd*) : ;; -- -- # Killable process -- *) -- if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then -- echo -n "$name " -- kill -$sig $pid 2>/dev/null -- fi -- ;; -- esac -- fi -+ while $run; do -+ run=false -+ for stat in /proc/[0-9]*/stat; do -+ [ -f "$stat" ] || continue -+ -+ local pid name state ppid rest -+ read pid name state ppid rest < $stat -+ name="${name#(}"; name="${name%)}" -+ -+ # Skip PID1, ourself and our children -+ [ $pid -ne 1 -a $pid -ne $$ -a $ppid -ne $$ ] || continue -+ -+ local cmdline -+ read cmdline < /proc/$pid/cmdline -+ -+ # Skip kernel threads -+ [ -n "$cmdline" ] || continue -+ -+ echo -n "$name " -+ kill -$sig $pid 2>/dev/null -+ -+ [ $loop -eq 1 ] && run=true -+ done - done - echo "" - } -@@ -175,28 +160,31 @@ v() { - [ "$VERBOSE" -ge 1 ] && echo "$@" - } - -+json_string() { -+ local v="$1" -+ v="${v//\\/\\\\}" -+ v="${v//\"/\\\"}" -+ echo "\"$v\"" -+} -+ - rootfs_type() { - /bin/mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }' - } - - get_image() { # [ ] - local from="$1" -- local conc="$2" -- local cmd -- -- case "$from" in -- http://*|ftp://*) cmd="wget -O- -q";; -- *) cmd="cat";; -- esac -- if [ -z "$conc" ]; then -- local magic="$(eval $cmd \"$from\" 2>/dev/null | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')" -+ local cat="$2" -+ -+ if [ -z "$cat" ]; then -+ local magic="$(dd if="$from" bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')" - case "$magic" in -- 1f8b) conc="zcat";; -- 425a) conc="bzcat";; -+ 1f8b) cat="zcat";; -+ 425a) cat="bzcat";; -+ *) cat="cat";; - esac - fi - -- eval "$cmd \"$from\" 2>/dev/null ${conc:+| $conc}" -+ $cat "$from" 2>/dev/null - } - - get_magic_word() { -@@ -331,12 +319,14 @@ default_do_upgrade() { - fi - } - --do_upgrade() { -+do_upgrade_stage2() { - v "Performing system upgrade..." -- if type 'platform_do_upgrade' >/dev/null 2>/dev/null; then -- platform_do_upgrade "$ARGV" -+ if [ -n "$do_upgrade" ]; then -+ $do_upgrade "$IMAGE" -+ elif type 'platform_do_upgrade' >/dev/null 2>/dev/null; then -+ platform_do_upgrade "$IMAGE" - else -- default_do_upgrade "$ARGV" -+ default_do_upgrade "$IMAGE" - fi - - if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_copy_config' >/dev/null 2>/dev/null; then -@@ -344,12 +334,11 @@ do_upgrade() { - fi - - v "Upgrade completed" -- [ -n "$DELAY" ] && sleep "$DELAY" -- ask_bool 1 "Reboot" && { -- v "Rebooting system..." -- umount -a -- reboot -f -- sleep 5 -- echo b 2>/dev/null >/proc/sysrq-trigger -- } -+ sleep 1 -+ -+ v "Rebooting system..." -+ umount -a -+ reboot -f -+ sleep 5 -+ echo b 2>/dev/null >/proc/sysrq-trigger - } -diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh -index 6bd2005344c081df20e5a330a69e49e37225c39f..1e69c8f9657b39adf2a2c33bd9bac9303bcbc3d7 100644 ---- a/package/base-files/files/lib/upgrade/nand.sh -+++ b/package/base-files/files/lib/upgrade/nand.sh -@@ -283,7 +283,16 @@ nand_upgrade_tar() { - } - - # Recognize type of passed file and start the upgrade process --nand_do_upgrade_stage2() { -+nand_do_upgrade() { -+ if [ -n "$IS_PRE_UPGRADE" ]; then -+ # Previously, nand_do_upgrade was called from the platform_pre_upgrade -+ # hook; this piece of code handles scripts that haven't been -+ # updated. All scripts should gradually move to call nand_do_upgrade -+ # from platform_do_upgrade instead. -+ export do_upgrade=nand_do_upgrade -+ return -+ fi -+ - local file_type=$(identify $1) - - if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then -@@ -299,45 +308,6 @@ nand_do_upgrade_stage2() { - esac - } - --nand_upgrade_stage2() { -- [ $1 = "nand" ] && { -- [ -f "$2" ] && { -- touch /tmp/sysupgrade -- -- killall -9 telnetd -- killall -9 dropbear -- killall -9 ash -- -- kill_remaining TERM -- sleep 3 -- kill_remaining KILL -- -- sleep 1 -- -- if [ -n "$(rootfs_type)" ]; then -- v "Switching to ramdisk..." -- run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2" -- else -- nand_do_upgrade_stage2 $2 -- fi -- return 0 -- } -- echo "Nand upgrade failed" -- exit 1 -- } --} -- --nand_upgrade_stage1() { -- [ -f /tmp/sysupgrade-nand-path ] && { -- path="$(cat /tmp/sysupgrade-nand-path)" -- [ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] && -- rm $CONF_TAR -- -- ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }" -- exit 0 -- } --} -- - # Check if passed file is a valid one for NAND sysupgrade. Currently it accepts - # 3 types of files: - # 1) UBI - should contain an ubinized image, header is checked for the proper -@@ -364,13 +334,3 @@ nand_do_platform_check() { - - return 0 - } -- --# Start NAND upgrade process --# --# $(1): file to be used for upgrade --nand_do_upgrade() { -- echo -n $1 > /tmp/sysupgrade-nand-path -- install_bin /sbin/upgraded -- ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded -- nand_upgrade_stage1 --} -diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 -new file mode 100755 -index 0000000000000000000000000000000000000000..4e2aa3a23c3bab07a795762a30a4d4f701081934 ---- /dev/null -+++ b/package/base-files/files/lib/upgrade/stage2 -@@ -0,0 +1,50 @@ -+#!/bin/sh -+ -+. /lib/functions.sh -+. /lib/functions/system.sh -+ -+export IMAGE="$1" -+COMMAND="$2" -+ -+export ARGV="$IMAGE" -+export ARGC=1 -+ -+export SAVE_CONFIG=1 -+export SAVE_PARTITIONS=1 -+ -+export INTERACTIVE=0 -+export VERBOSE=1 -+export CONFFILES=/tmp/sysupgrade.conffiles -+export CONF_TAR=/tmp/sysupgrade.tgz -+ -+ -+[ -f "$CONF_TAR" ] || export SAVE_CONFIG=0 -+[ -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap ] && export SAVE_PARTITIONS=0 -+ -+include /lib/upgrade -+ -+ -+killall -9 telnetd -+killall -9 dropbear -+killall -9 ash -+ -+kill_remaining TERM -+sleep 3 -+kill_remaining KILL 1 -+ -+sleep 1 -+ -+ -+if [ -n "$IMAGE" ] && type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then -+ IS_PRE_UPGRADE=1 platform_pre_upgrade "$IMAGE" -+ -+ # Needs to be unset again because of busybox weirdness ... -+ IS_PRE_UPGRADE= -+fi -+ -+if [ -n "$(rootfs_type)" ]; then -+ echo "Switching to ramdisk..." -+ run_ramfs "$COMMAND" -+else -+ exec /bin/busybox ash -c "$COMMAND" -+fi -diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade -index 71c7faa6dbc485ff33e776ff087e1aca58cfb0b0..fa08f4194daa0ee74758b9f49a23fe8dcb4b933d 100755 ---- a/package/base-files/files/sbin/sysupgrade -+++ b/package/base-files/files/sbin/sysupgrade -@@ -1,4 +1,7 @@ - #!/bin/sh -+ -+[ "$1" = "nand" ] && exec /lib/upgrade/stage2 "$2" "$3" -+ - . /lib/functions.sh - . /lib/functions/system.sh - -@@ -11,7 +14,6 @@ export VERBOSE=1 - export SAVE_CONFIG=1 - export SAVE_OVERLAY=0 - export SAVE_PARTITIONS=1 --export DELAY= - export CONF_IMAGE= - export CONF_BACKUP_LIST=0 - export CONF_BACKUP= -@@ -25,7 +27,6 @@ export TEST=0 - while [ -n "$1" ]; do - case "$1" in - -i) export INTERACTIVE=1;; -- -d) export DELAY="$2"; shift;; - -v) export VERBOSE="$(($VERBOSE + 1))";; - -q) export VERBOSE="$(($VERBOSE - 1))";; - -n) export SAVE_CONFIG=0;; -@@ -50,10 +51,9 @@ done - export CONFFILES=/tmp/sysupgrade.conffiles - export CONF_TAR=/tmp/sysupgrade.tgz - --export ARGV="$*" --export ARGC="$#" -+IMAGE="$1" - --[ -z "$ARGV" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && { -+[ -z "$IMAGE" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && { - cat <...] - $0 [-q] [-i] -@@ -90,7 +90,7 @@ EOF - exit 1 - } - --[ -n "$ARGV" -a -n "$NEED_IMAGE" ] && { -+[ -n "$IMAGE" -a -n "$NEED_IMAGE" ] && { - cat <<-EOF - -b|--create-backup and -r|--restore-backup do not perform a firmware upgrade. - Do not specify both -b|-r and a firmware image. -@@ -155,14 +155,13 @@ sysupgrade_pre_upgrade="fwtool_pre_upgrade" - - include /lib/upgrade - --[ "$1" = "nand" ] && nand_upgrade_stage2 $@ -- - do_save_conffiles() { - local conf_tar="${1:-$CONF_TAR}" - - [ -z "$(rootfs_type)" ] && { - echo "Cannot save config while running from ramdisk." - ask_bool 0 "Abort" && exit -+ rm -f "$conf_tar" - return 0 - } - run_hooks "$CONFFILES" $sysupgrade_init_conffiles -@@ -203,8 +202,33 @@ type platform_check_image >/dev/null 2>/dev/null || { - exit 1 - } - -+case "$IMAGE" in -+ http://*) -+ wget -O/tmp/sysupgrade.img "$IMAGE" -+ IMAGE=/tmp/sysupgrade.img -+ ;; -+esac -+ -+IMAGE="$(readlink -f "$IMAGE")" -+ -+case "$IMAGE" in -+ '') -+ echo "Image file not found." -+ exit 1 -+ ;; -+ /tmp/*) ;; -+ *) -+ v "Image not in /tmp, copying..." -+ cp -f "$IMAGE" /tmp/sysupgrade.img -+ IMAGE=/tmp/sysupgrade.img -+ ;; -+esac -+ -+export ARGV="$IMAGE" -+export ARGC=1 -+ - for check in $sysupgrade_image_check; do -- ( eval "$check \"\$ARGV\"" ) || { -+ ( $check "$IMAGE" ) || { - if [ $FORCE -eq 1 ]; then - echo "Image check '$check' failed but --force given - will update anyway!" - break -@@ -230,6 +254,7 @@ elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then - [ $TEST -eq 1 ] || do_save_conffiles - export SAVE_CONFIG=1 - else -+ [ $TEST -eq 1 ] || rm -f "$CONF_TAR" - export SAVE_CONFIG=0 - fi - -@@ -237,28 +262,18 @@ if [ $TEST -eq 1 ]; then - exit 0 - fi - --run_hooks "" $sysupgrade_pre_upgrade -- --# Some platforms/devices may want different sysupgrade process, e.g. without --# killing processes yet or calling ubus system upgrade method. --# This is needed e.g. on NAND devices where we just want to trigger stage1 at --# this point. --if type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then -- platform_pre_upgrade "$ARGV" -+if [ $SAVE_PARTITIONS -eq 0 ]; then -+ touch /tmp/sysupgrade.always.overwrite.bootdisk.partmap -+else -+ rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap - fi - --ubus call system upgrade --touch /tmp/sysupgrade -- --if [ ! -f /tmp/failsafe ] ; then -- kill_remaining TERM -- sleep 3 -- kill_remaining KILL --fi -+run_hooks "" $sysupgrade_pre_upgrade - --if [ -n "$(rootfs_type)" ]; then -- v "Switching to ramdisk..." -- run_ramfs '. /lib/functions.sh; include /lib/upgrade; do_upgrade' --else -- do_upgrade --fi -+install_bin /sbin/upgraded -+v "Commencing upgrade. All shell sessions will be closed now." -+ubus call system sysupgrade "{ -+ \"prefix\": \"$RAM_ROOT\", -+ \"path\": $(json_string "$IMAGE"), -+ \"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\" -+}" diff --git a/patches/lede/0016-fstools-clean-up-trailing-whitespace-in-snapshot-script.patch b/patches/lede/0016-fstools-clean-up-trailing-whitespace-in-snapshot-script.patch deleted file mode 100644 index 2df0942a..00000000 --- a/patches/lede/0016-fstools-clean-up-trailing-whitespace-in-snapshot-script.patch +++ /dev/null @@ -1,19 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 3 May 2017 08:29:24 +0200 -Subject: fstools: clean up trailing whitespace in snapshot script - -Signed-off-by: Matthias Schiffer - -diff --git a/package/system/fstools/files/snapshot b/package/system/fstools/files/snapshot -index c1a5b733f3c70e2bb5f2e83d3589e2f10832760f..baf24f1e3e90fe7708e0f28c17ba270a35a2cd52 100644 ---- a/package/system/fstools/files/snapshot -+++ b/package/system/fstools/files/snapshot -@@ -42,7 +42,7 @@ do_snapshot_upgrade() { - - opkg list-upgradable - [ $? -eq 0 ] || exit 2 -- -+ - UPDATES=`opkg list-upgradable | cut -d" " -f1` - [ -z "${UPDATES}" ] && exit 0 - diff --git a/patches/lede/0017-fstools-snapshot-handle-jffs2-conversion-using-upgraded.patch b/patches/lede/0017-fstools-snapshot-handle-jffs2-conversion-using-upgraded.patch deleted file mode 100644 index 2b1d4ff3..00000000 --- a/patches/lede/0017-fstools-snapshot-handle-jffs2-conversion-using-upgraded.patch +++ /dev/null @@ -1,49 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 3 May 2017 08:29:55 +0200 -Subject: fstools: snapshot: handle jffs2 conversion using upgraded - -We can reuse the kill_remaining and run_ramfs facilities of the stage2 run -by upgraded. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/system/fstools/Makefile b/package/system/fstools/Makefile -index 6f1f511d387e900426832f40966012bc11d53075..f2e0580912ab7d475fab576bea4fd84f0dfe6a3d 100644 ---- a/package/system/fstools/Makefile -+++ b/package/system/fstools/Makefile -@@ -8,7 +8,7 @@ - include $(TOPDIR)/rules.mk - - PKG_NAME:=fstools --PKG_RELEASE:=1 -+PKG_RELEASE:=2 - - PKG_SOURCE_PROTO:=git - PKG_SOURCE_URL=$(LEDE_GIT)/project/fstools.git -diff --git a/package/system/fstools/files/snapshot b/package/system/fstools/files/snapshot -index baf24f1e3e90fe7708e0f28c17ba270a35a2cd52..a495e3434523b7a4b1b2f1bc3f4c9298197fc745 100644 ---- a/package/system/fstools/files/snapshot -+++ b/package/system/fstools/files/snapshot -@@ -64,14 +64,16 @@ do_convert_jffs2() { - do_convert() { - . /lib/functions.sh - . /lib/upgrade/common.sh -- ubus call system upgrade -- touch /tmp/sysupgrade -+ - cd /overlay/upper - tar czf /tmp/snapshot.tar.gz * -- kill_remaining TERM -- sleep 3 -- kill_remaining KILL -- run_ramfs '. /sbin/snapshot; do_convert_jffs2' -+ -+ install_bin /sbin/upgraded -+ ubus call system sysupgrade "{ -+ \"prefix\": \"$RAM_ROOT\", -+ \"path\": \"\", -+ \"command\": \". /sbin/snapshot; do_convert_jffs2\" -+ }" - } - - [ -n "$(cat /proc/mounts|grep /overlay|grep jffs2)" ] && { diff --git a/patches/lede/0018-base-files-sysupgrade-cleanup.patch b/patches/lede/0018-base-files-sysupgrade-cleanup.patch deleted file mode 100644 index 61ba1717..00000000 --- a/patches/lede/0018-base-files-sysupgrade-cleanup.patch +++ /dev/null @@ -1,258 +0,0 @@ -From: Matthias Schiffer -Date: Sun, 23 Apr 2017 23:33:14 +0200 -Subject: base-files: sysupgrade cleanup - -Some functions only used by stage2 are moved there from common.sh. - -One piece that could still use more cleanup is platform_pre_upgrade: many -targets reference files from there are aren't available in the ramfs, so -we need to evaluate it before the switch; conversely, flash writes happen -in that function on some targets. Targets that do the latter should be -fixed eventually to use platform_do_upgrade for that purpose. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh -index ef9aac709fc1619ba15eeb0aeb4a9a6a372369b2..af7682c29e005c6ca47b91e9be2d60c359a90d05 100644 ---- a/package/base-files/files/lib/upgrade/common.sh -+++ b/package/base-files/files/lib/upgrade/common.sh -@@ -30,106 +30,6 @@ install_bin() { # [ ... ] - }; done - } - --supivot() { # -- /bin/mount | grep "on $1 type" 2>&- 1>&- || /bin/mount -o bind $1 $1 -- mkdir -p $1$2 $1/proc $1/sys $1/dev $1/tmp $1/overlay && \ -- /bin/mount -o noatime,move /proc $1/proc && \ -- pivot_root $1 $1$2 || { -- /bin/umount -l $1 $1 -- return 1 -- } -- -- /bin/mount -o noatime,move $2/sys /sys -- /bin/mount -o noatime,move $2/dev /dev -- /bin/mount -o noatime,move $2/tmp /tmp -- /bin/mount -o noatime,move $2/overlay /overlay 2>&- -- return 0 --} -- --run_ramfs() { # [...] -- install_bin /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \ -- /sbin/pivot_root /sbin/reboot /bin/sync /bin/dd /bin/grep \ -- /bin/cp /bin/mv /bin/tar /usr/bin/md5sum "/usr/bin/[" /bin/dd \ -- /bin/vi /bin/ls /bin/cat /usr/bin/awk /usr/bin/hexdump \ -- /bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc \ -- /bin/cut /usr/bin/printf /bin/sync /bin/mkdir /bin/rmdir \ -- /bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ -- /bin/mknod -- -- install_bin /sbin/mtd -- install_bin /sbin/mount_root -- install_bin /sbin/snapshot -- install_bin /sbin/snapshot_tool -- install_bin /usr/sbin/ubiupdatevol -- install_bin /usr/sbin/ubiattach -- install_bin /usr/sbin/ubiblock -- install_bin /usr/sbin/ubiformat -- install_bin /usr/sbin/ubidetach -- install_bin /usr/sbin/ubirsvol -- install_bin /usr/sbin/ubirmvol -- install_bin /usr/sbin/ubimkvol -- install_bin /usr/sbin/partx -- install_bin /usr/sbin/losetup -- install_bin /usr/sbin/mkfs.ext4 -- for file in $RAMFS_COPY_BIN; do -- install_bin ${file//:/ } -- done -- install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA -- -- [ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64 -- -- supivot $RAM_ROOT /mnt || { -- echo "Failed to switch over to ramfs. Please reboot." -- exit 1 -- } -- -- /bin/mount -o remount,ro /mnt -- /bin/umount -l /mnt -- -- grep /overlay /proc/mounts > /dev/null && { -- /bin/mount -o noatime,remount,ro /overlay -- /bin/umount -l /overlay -- } -- -- # spawn a new shell from ramdisk to reduce the probability of cache issues -- exec /bin/busybox ash -c "$*" --} -- --kill_remaining() { # [ [ ] ] -- local sig="${1:-TERM}" -- local loop="${2:-0}" -- local run=true -- local stat -- -- echo -n "Sending $sig to remaining processes ... " -- -- while $run; do -- run=false -- for stat in /proc/[0-9]*/stat; do -- [ -f "$stat" ] || continue -- -- local pid name state ppid rest -- read pid name state ppid rest < $stat -- name="${name#(}"; name="${name%)}" -- -- # Skip PID1, ourself and our children -- [ $pid -ne 1 -a $pid -ne $$ -a $ppid -ne $$ ] || continue -- -- local cmdline -- read cmdline < /proc/$pid/cmdline -- -- # Skip kernel threads -- [ -n "$cmdline" ] || continue -- -- echo -n "$name " -- kill -$sig $pid 2>/dev/null -- -- [ $loop -eq 1 ] && run=true -- done -- done -- echo "" --} -- - run_hooks() { - local arg="$1"; shift - for func in "$@"; do -diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 -index 4e2aa3a23c3bab07a795762a30a4d4f701081934..cc8047d988e39ca9ba27d2588744aad469d1d978 100755 ---- a/package/base-files/files/lib/upgrade/stage2 -+++ b/package/base-files/files/lib/upgrade/stage2 -@@ -24,6 +24,104 @@ export CONF_TAR=/tmp/sysupgrade.tgz - include /lib/upgrade - - -+supivot() { # -+ /bin/mount | grep "on $1 type" 2>&- 1>&- || /bin/mount -o bind $1 $1 -+ mkdir -p $1$2 $1/proc $1/sys $1/dev $1/tmp $1/overlay && \ -+ /bin/mount -o noatime,move /proc $1/proc && \ -+ pivot_root $1 $1$2 || { -+ /bin/umount -l $1 $1 -+ return 1 -+ } -+ -+ /bin/mount -o noatime,move $2/sys /sys -+ /bin/mount -o noatime,move $2/dev /dev -+ /bin/mount -o noatime,move $2/tmp /tmp -+ /bin/mount -o noatime,move $2/overlay /overlay 2>&- -+ return 0 -+} -+ -+switch_to_ramfs() { -+ install_bin /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \ -+ /sbin/pivot_root /sbin/reboot /bin/sync /bin/dd /bin/grep \ -+ /bin/cp /bin/mv /bin/tar /usr/bin/md5sum "/usr/bin/[" /bin/dd \ -+ /bin/vi /bin/ls /bin/cat /usr/bin/awk /usr/bin/hexdump \ -+ /bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc \ -+ /bin/cut /usr/bin/printf /bin/sync /bin/mkdir /bin/rmdir \ -+ /bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ -+ /bin/mknod -+ -+ install_bin /sbin/mtd -+ install_bin /sbin/mount_root -+ install_bin /sbin/snapshot -+ install_bin /sbin/snapshot_tool -+ install_bin /usr/sbin/ubiupdatevol -+ install_bin /usr/sbin/ubiattach -+ install_bin /usr/sbin/ubiblock -+ install_bin /usr/sbin/ubiformat -+ install_bin /usr/sbin/ubidetach -+ install_bin /usr/sbin/ubirsvol -+ install_bin /usr/sbin/ubirmvol -+ install_bin /usr/sbin/ubimkvol -+ install_bin /usr/sbin/partx -+ install_bin /usr/sbin/losetup -+ install_bin /usr/sbin/mkfs.ext4 -+ for file in $RAMFS_COPY_BIN; do -+ install_bin ${file//:/ } -+ done -+ install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA -+ -+ [ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64 -+ -+ supivot $RAM_ROOT /mnt || { -+ echo "Failed to switch over to ramfs. Please reboot." -+ exit 1 -+ } -+ -+ /bin/mount -o remount,ro /mnt -+ /bin/umount -l /mnt -+ -+ grep /overlay /proc/mounts > /dev/null && { -+ /bin/mount -o noatime,remount,ro /overlay -+ /bin/umount -l /overlay -+ } -+} -+ -+kill_remaining() { # [ [ ] ] -+ local sig="${1:-TERM}" -+ local loop="${2:-0}" -+ local run=true -+ local stat -+ -+ echo -n "Sending $sig to remaining processes ... " -+ -+ while $run; do -+ run=false -+ for stat in /proc/[0-9]*/stat; do -+ [ -f "$stat" ] || continue -+ -+ local pid name state ppid rest -+ read pid name state ppid rest < $stat -+ name="${name#(}"; name="${name%)}" -+ -+ # Skip PID1, ourself and our children -+ [ $pid -ne 1 -a $pid -ne $$ -a $ppid -ne $$ ] || continue -+ -+ local cmdline -+ read cmdline < /proc/$pid/cmdline -+ -+ # Skip kernel threads -+ [ -n "$cmdline" ] || continue -+ -+ echo -n "$name " -+ kill -$sig $pid 2>/dev/null -+ -+ [ $loop -eq 1 ] && run=true -+ done -+ done -+ echo "" -+} -+ -+ - killall -9 telnetd - killall -9 dropbear - killall -9 ash -@@ -44,7 +142,8 @@ fi - - if [ -n "$(rootfs_type)" ]; then - echo "Switching to ramdisk..." -- run_ramfs "$COMMAND" --else -- exec /bin/busybox ash -c "$COMMAND" -+ switch_to_ramfs - fi -+ -+# Exec new shell from ramfs -+exec /bin/busybox ash -c "$COMMAND" -diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade -index fa08f4194daa0ee74758b9f49a23fe8dcb4b933d..347860d00af27a61152703320bb210d30726db83 100755 ---- a/package/base-files/files/sbin/sysupgrade -+++ b/package/base-files/files/sbin/sysupgrade -@@ -1,7 +1,5 @@ - #!/bin/sh - --[ "$1" = "nand" ] && exec /lib/upgrade/stage2 "$2" "$3" -- - . /lib/functions.sh - . /lib/functions/system.sh - diff --git a/patches/lede/0019-base-files-add-support-for-staged-sysupgrades-from-failsafe-mode.patch b/patches/lede/0019-base-files-add-support-for-staged-sysupgrades-from-failsafe-mode.patch deleted file mode 100644 index 688a30d9..00000000 --- a/patches/lede/0019-base-files-add-support-for-staged-sysupgrades-from-failsafe-mode.patch +++ /dev/null @@ -1,72 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 24 Apr 2017 01:31:04 +0200 -Subject: base-files: add support for staged sysupgrades from failsafe mode - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/lib/preinit/40_run_failsafe_hook b/package/base-files/files/lib/preinit/40_run_failsafe_hook -index 7301f77349a1a1e42fcef9bcbc927ef55c83b991..533b0a9771e1aac603f00ecf7a4622ea9fee969d 100644 ---- a/package/base-files/files/lib/preinit/40_run_failsafe_hook -+++ b/package/base-files/files/lib/preinit/40_run_failsafe_hook -@@ -5,8 +5,12 @@ - run_failsafe_hook() { - [ "$pi_preinit_no_failsafe" = "y" ] && return - if [ "$FAILSAFE" = "true" ]; then -+ lock /tmp/.failsafe - boot_run_hook failsafe -- lock -w /tmp/.failsafe -+ while [ ! -e /tmp/sysupgrade ]; do -+ lock -w /tmp/.failsafe -+ done -+ exit - fi - } - -diff --git a/package/base-files/files/lib/preinit/99_10_failsafe_login b/package/base-files/files/lib/preinit/99_10_failsafe_login -index 3147cdc5a68a69cef6b1af6618a4e2367a143c2c..728c63b2e8aebf970cd7dff0d15518ccda83029c 100644 ---- a/package/base-files/files/lib/preinit/99_10_failsafe_login -+++ b/package/base-files/files/lib/preinit/99_10_failsafe_login -@@ -8,10 +8,13 @@ failsafe_netlogin () { - } - - failsafe_shell() { -- lock /tmp/.failsafe -- ash --login -- echo "Please reboot system when done with failsafe network logins" -- while true; do sleep 1; done -+ local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')" -+ [ -n "$console" ] || console=console -+ [ -c "/dev/$console" ] || return 0 -+ while true; do -+ ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console" -+ sleep 1 -+ done & - } - - boot_hook_add failsafe failsafe_netlogin -diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade -index 347860d00af27a61152703320bb210d30726db83..4a133a65e0960619b9cd0d722b6c27ac7894de5b 100755 ---- a/package/base-files/files/sbin/sysupgrade -+++ b/package/base-files/files/sbin/sysupgrade -@@ -270,8 +270,16 @@ run_hooks "" $sysupgrade_pre_upgrade - - install_bin /sbin/upgraded - v "Commencing upgrade. All shell sessions will be closed now." --ubus call system sysupgrade "{ -- \"prefix\": \"$RAM_ROOT\", -- \"path\": $(json_string "$IMAGE"), -- \"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\" --}" -+ -+COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2' -+ -+if [ -n "$FAILSAFE" ]; then -+ printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade -+ lock -u /tmp/.failsafe -+else -+ ubus call system sysupgrade "{ -+ \"prefix\": $(json_string "$RAM_ROOT"), -+ \"path\": $(json_string "$IMAGE"), -+ \"command\": $(json_string "$COMMAND") -+ }" -+fi diff --git a/patches/lede/0020-ramips-sysupgrade-move-nand_do_upgrade-call-to-platform_do_upgrade.patch b/patches/lede/0020-ramips-sysupgrade-move-nand_do_upgrade-call-to-platform_do_upgrade.patch deleted file mode 100644 index 4663dbc6..00000000 --- a/patches/lede/0020-ramips-sysupgrade-move-nand_do_upgrade-call-to-platform_do_upgrade.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Matthias Schiffer -Date: Sat, 22 Apr 2017 21:27:04 +0200 -Subject: ramips: sysupgrade: move nand_do_upgrade call to platform_do_upgrade - -All targets with NAND support should gradually move their nand_do_upgrade -calls from platform_pre_upgrade to platform_do_upgrade. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh -index 7f5b1dd070b1bfe0b86b093a55165b5a139eb37c..a5cca2080d3b96cef92286b1b15f4f8832d9f8c5 100755 ---- a/target/linux/ramips/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh -@@ -254,20 +254,13 @@ platform_nand_pre_upgrade() { - esac - } - --platform_pre_upgrade() { -+platform_do_upgrade() { - local board=$(ramips_board_name) - - case "$board" in - ubnt-erx) - nand_do_upgrade "$ARGV" - ;; -- esac --} -- --platform_do_upgrade() { -- local board=$(ramips_board_name) -- -- case "$board" in - *) - default_do_upgrade "$ARGV" - ;; diff --git a/patches/lede/0021-x86-sysupgrade-move-partition-table-change-check-to-platform_check_image.patch b/patches/lede/0021-x86-sysupgrade-move-partition-table-change-check-to-platform_check_image.patch deleted file mode 100644 index 8da5a5d2..00000000 --- a/patches/lede/0021-x86-sysupgrade-move-partition-table-change-check-to-platform_check_image.patch +++ /dev/null @@ -1,62 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 3 May 2017 08:57:29 +0200 -Subject: x86: sysupgrade: move partition table change check to platform_check_image - -The staged sysupgrade will prevent us from using ask_bool in -platform_do_upgrade; therefore, the check is moved to platform_check_image. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/x86/base-files/lib/upgrade/platform.sh b/target/linux/x86/base-files/lib/upgrade/platform.sh -index d3e9f360aadedad0995da55205364940c9884ba4..81b349a81816033eef9df464b2a70fdb998e5a1d 100644 ---- a/target/linux/x86/base-files/lib/upgrade/platform.sh -+++ b/target/linux/x86/base-files/lib/upgrade/platform.sh -@@ -1,13 +1,37 @@ - platform_check_image() { -+ local diskdev partdev diff - [ "$#" -gt 1 ] && return 1 - - case "$(get_magic_word "$1")" in -- eb48|eb63) return 0;; -+ eb48|eb63) ;; - *) - echo "Invalid image type" - return 1 - ;; - esac -+ -+ export_bootdevice && export_partdevice diskdev 0 || { -+ echo "Unable to determine upgrade device" -+ return 1 -+ } -+ -+ get_partitions "/dev/$diskdev" bootdisk -+ -+ #extract the boot sector from the image -+ get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null -+ -+ get_partitions /tmp/image.bs image -+ -+ #compare tables -+ diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.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." -+ ask_bool 0 "Abort" && exit 1 -+ return 0 -+ fi - } - - platform_copy_config() { -@@ -36,9 +60,6 @@ platform_do_upgrade() { - #compare tables - diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" - if [ -n "$diff" ]; then -- echo "Partition layout is changed. Full image will be written." -- ask_bool 0 "Abort" && exit -- - get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync - return 0 - fi diff --git a/patches/lede/0022-x86-sysupgrade-refactor-platform_do_upgrade.patch b/patches/lede/0022-x86-sysupgrade-refactor-platform_do_upgrade.patch deleted file mode 100644 index a70f3ad4..00000000 --- a/patches/lede/0022-x86-sysupgrade-refactor-platform_do_upgrade.patch +++ /dev/null @@ -1,90 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 3 May 2017 09:05:25 +0200 -Subject: x86: sysupgrade: refactor platform_do_upgrade - -By returning early when no upgrade device can be found and handling the -SAVE_PARTITIONS=0 case differently, we can get rid of two levels of if. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/x86/base-files/lib/upgrade/platform.sh b/target/linux/x86/base-files/lib/upgrade/platform.sh -index 81b349a81816033eef9df464b2a70fdb998e5a1d..4fa71999be7be3972676a1019488972dccd57fa2 100644 ---- a/target/linux/x86/base-files/lib/upgrade/platform.sh -+++ b/target/linux/x86/base-files/lib/upgrade/platform.sh -@@ -47,40 +47,43 @@ platform_copy_config() { - platform_do_upgrade() { - local diskdev partdev diff - -- if export_bootdevice && export_partdevice diskdev 0; then -- sync -- if [ "$SAVE_PARTITIONS" = "1" ]; then -- get_partitions "/dev/$diskdev" bootdisk -- -- #extract the boot sector from the image -- get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b -- -- get_partitions /tmp/image.bs image -- -- #compare tables -- diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" -- if [ -n "$diff" ]; then -- get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync -- return 0 -- fi -- -- #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..." -- get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync -- else -- echo "Unable to find partition $part device, skipped." -- fi -- done < /tmp/partmap.image -- -- #copy partition uuid -- echo "Writing new UUID to /dev/$diskdev..." -- get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync -+ export_bootdevice && export_partdevice diskdev 0 || { -+ echo "Unable to determine upgrade device" -+ return 1 -+ } -+ -+ sync -+ -+ if [ "$SAVE_PARTITIONS" = "1" ]; then -+ get_partitions "/dev/$diskdev" bootdisk -+ -+ #extract the boot sector from the image -+ get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b -+ -+ get_partitions /tmp/image.bs image -+ -+ #compare tables -+ diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" -+ else -+ diff=1 -+ fi -+ -+ if [ -n "$diff" ]; then -+ get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync -+ return 0 -+ fi -+ -+ #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..." -+ get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync - else -- get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync -+ echo "Unable to find partition $part device, skipped." - fi -+ done < /tmp/partmap.image - -- sleep 1 -- fi -+ #copy partition uuid -+ echo "Writing new UUID to /dev/$diskdev..." -+ get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync - } diff --git a/patches/lede/0023-x86-sysupgrade-explicitly-rescan-disk-after-writing-partition-table.patch b/patches/lede/0023-x86-sysupgrade-explicitly-rescan-disk-after-writing-partition-table.patch deleted file mode 100644 index 4e46ce60..00000000 --- a/patches/lede/0023-x86-sysupgrade-explicitly-rescan-disk-after-writing-partition-table.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 3 May 2017 09:08:29 +0200 -Subject: x86: sysupgrade: explicitly rescan disk after writing partition table - -This should ensure that the kernel partition can be mounted in -platform_copy_config when its size has changed. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/x86/base-files/lib/upgrade/platform.sh b/target/linux/x86/base-files/lib/upgrade/platform.sh -index 4fa71999be7be3972676a1019488972dccd57fa2..439ba8f5125d97932248ff966340165a84e1b24a 100644 ---- a/target/linux/x86/base-files/lib/upgrade/platform.sh -+++ b/target/linux/x86/base-files/lib/upgrade/platform.sh -@@ -70,6 +70,12 @@ platform_do_upgrade() { - - if [ -n "$diff" ]; then - get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync -+ -+ # Separate removal and addtion is necessary; otherwise, partition 1 -+ # will be missing if it overlaps with the old partition 2 -+ partx -d - "/dev/$diskdev" -+ partx -a - "/dev/$diskdev" -+ - return 0 - fi - diff --git a/patches/lede/0024-sunxi-sysupgrade-don-t-write-partitions-twice.patch b/patches/lede/0024-sunxi-sysupgrade-don-t-write-partitions-twice.patch deleted file mode 100644 index 6aabf26b..00000000 --- a/patches/lede/0024-sunxi-sysupgrade-don-t-write-partitions-twice.patch +++ /dev/null @@ -1,29 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 4 May 2017 07:29:58 +0200 -Subject: sunxi: sysupgrade: don't write partitions twice - -When existing partitions are retained, the dd call writing the uboot image -in the space before the first partition was accidentally writing the whole -image, making the code for individual partitions redundant. Limit the copy -to 1016KiB (the first 8KiB are skipped, and the first partition starts at -1024KiB). - -In addition, conv=notrunc is replaced with conv=fsync. It seems this was an -oversight, as notrunc doesn't make sense for block devices and all other dd -commands use conv=fsync. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/sunxi/base-files/lib/upgrade/platform.sh b/target/linux/sunxi/base-files/lib/upgrade/platform.sh -index f2cd970d428a780d7497d8802765c656a47ff421..776bdf53bf89c5eafc24b7b59b943e12f3fab77e 100644 ---- a/target/linux/sunxi/base-files/lib/upgrade/platform.sh -+++ b/target/linux/sunxi/base-files/lib/upgrade/platform.sh -@@ -43,7 +43,7 @@ platform_do_upgrade() { - fi - - #write uboot image -- get_image "$@" | dd of="$diskdev" bs=1024 skip=8 seek=8 conv=notrunc -+ get_image "$@" | dd of="$diskdev" bs=1024 skip=8 seek=8 count=1016 conv=fsync - #iterate over each partition from the image and write it to the boot disk - while read part start size; do - part="$(($part - 2))" diff --git a/patches/lede/0025-sunxi-sysupgrade-sync-with-x86.patch b/patches/lede/0025-sunxi-sysupgrade-sync-with-x86.patch deleted file mode 100644 index 293d07d7..00000000 --- a/patches/lede/0025-sunxi-sysupgrade-sync-with-x86.patch +++ /dev/null @@ -1,163 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 4 May 2017 07:39:20 +0200 -Subject: sunxi: sysupgrade: sync with x86 - -sunxi sysupgrade was based on the x86 implementation; sync fixes and other -changes from the current x86 version: - -x86: fix sysupgrades on disks with 4k block size -x86: sysupgrade: move partition table change check to platform_check_image -x86: sysupgrade: refactor platform_do_upgrade -x86: sysupgrade: explicitly rescan disk after writing partition table - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/sunxi/Makefile b/target/linux/sunxi/Makefile -index 3c2f14b8418e1d296a239027f6fdee9b5ba8f9b2..f8b8aa750a7145c9954df5a5a6a2e85f2610a72f 100644 ---- a/target/linux/sunxi/Makefile -+++ b/target/linux/sunxi/Makefile -@@ -28,6 +28,6 @@ KERNELNAME:=zImage dtbs - include $(INCLUDE_DIR)/target.mk - - DEFAULT_PACKAGES += uboot-envtools --DEFAULT_PACKAGES += mkf2fs e2fsprogs -+DEFAULT_PACKAGES += partx-utils mkf2fs e2fsprogs - - $(eval $(call BuildTarget)) -diff --git a/target/linux/sunxi/base-files/lib/upgrade/platform.sh b/target/linux/sunxi/base-files/lib/upgrade/platform.sh -index 776bdf53bf89c5eafc24b7b59b943e12f3fab77e..88ef4790e9c1452f8ce57fe1c265ce47810830ee 100644 ---- a/target/linux/sunxi/base-files/lib/upgrade/platform.sh -+++ b/target/linux/sunxi/base-files/lib/upgrade/platform.sh -@@ -1,5 +1,28 @@ - platform_check_image() { -- true -+ local diskdev partdev diff -+ -+ export_bootdevice && export_partdevice diskdev -2 || { -+ echo "Unable to determine upgrade device" -+ return 1 -+ } -+ -+ get_partitions "/dev/$diskdev" bootdisk -+ -+ #extract the boot sector from the image -+ get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null -+ -+ get_partitions /tmp/image.bs image -+ -+ #compare tables -+ diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.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." -+ ask_bool 0 "Abort" && exit 1 -+ return 0 -+ fi - } - - platform_copy_config() { -@@ -13,55 +36,54 @@ platform_copy_config() { - } - - platform_do_upgrade() { -- local diskdev partdev ibs diff -- -- if export_bootdevice && export_partdevice diskdev -2; then -- sync -- if [ "$SAVE_PARTITIONS" = "1" ]; then -- get_partitions "/dev/$diskdev" bootdisk -- -- #get block size -- if [ -f "/sys/block/$diskdev/queue/physical_block_size" ]; then -- ibs="$(cat "/sys/block/$diskdev/queue/physical_block_size")" -- else -- ibs=512 -- fi -- -- #extract the boot sector from the image -- get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b -- -- get_partitions /tmp/image.bs image -- -- #compare tables -- diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" -- if [ -n "$diff" ]; then -- echo "Partition layout is changed. Full image will be written." -- ask_bool 0 "Abort" && exit -- -- get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync -- return 0 -- fi -- -- #write uboot image -- get_image "$@" | dd of="$diskdev" bs=1024 skip=8 seek=8 count=1016 conv=fsync -- #iterate over each partition from the image and write it to the boot disk -- while read part start size; do -- part="$(($part - 2))" -- if export_partdevice partdev $part; then -- echo "Writing image to /dev/$partdev..." -- get_image "$@" | dd of="/dev/$partdev" ibs="$ibs" obs=1M skip="$start" count="$size" conv=fsync -- else -- echo "Unable to find partition $part device, skipped." -- fi -- done < /tmp/partmap.image -- -- #copy partition uuid -- echo "Writing new UUID to /dev/$diskdev..." -- get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync -+ local diskdev partdev diff -+ -+ export_bootdevice && export_partdevice diskdev -2 || { -+ echo "Unable to determine upgrade device" -+ return 1 -+ } -+ -+ sync -+ -+ if [ "$SAVE_PARTITIONS" = "1" ]; then -+ get_partitions "/dev/$diskdev" bootdisk -+ -+ #extract the boot sector from the image -+ get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b -+ -+ get_partitions /tmp/image.bs image -+ -+ #compare tables -+ diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" -+ else -+ diff=1 -+ fi -+ -+ if [ -n "$diff" ]; then -+ get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync -+ -+ # Separate removal and addtion is necessary; otherwise, partition 1 -+ # will be missing if it overlaps with the old partition 2 -+ partx -d - "/dev/$diskdev" -+ partx -a - "/dev/$diskdev" -+ -+ return 0 -+ fi -+ -+ #write uboot image -+ get_image "$@" | dd of="$diskdev" bs=1024 skip=8 seek=8 count=1016 conv=fsync -+ #iterate over each partition from the image and write it to the boot disk -+ while read part start size; do -+ part="$(($part - 2))" -+ if export_partdevice partdev $part; then -+ echo "Writing image to /dev/$partdev..." -+ get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync - else -- get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync -+ echo "Unable to find partition $part device, skipped." - fi -+ done < /tmp/partmap.image - -- sleep 1 -- fi -+ #copy partition uuid -+ echo "Writing new UUID to /dev/$diskdev..." -+ get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync - } diff --git a/patches/lede/0026-mvebu-fix-sysupgrade.patch b/patches/lede/0026-mvebu-fix-sysupgrade.patch deleted file mode 100644 index bf29f526..00000000 --- a/patches/lede/0026-mvebu-fix-sysupgrade.patch +++ /dev/null @@ -1,85 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 1 Jun 2017 18:39:12 +0200 -Subject: mvebu: fix sysupgrade - -mvebu was modifying RAMFS_COPY_BIN and RAMFS_COPY_DATA from a -sysupgrade_pre_upgrade hook. As the ramfs is created from stage2, this -did not have an effect anymore after the staged sysupgrade changes. - -As it doesn't really hurt to copy fw_printenv and fw_setenv -unconditionally, simply add them in /lib/upgrade/platform.sh, so stage2 -will see them. - -Config copying is moved to a function called by platform_copy_config, where -it belongs. - -Signed-off-by: Matthias Schiffer -Fixes: FS#821 -Fixes: 30f61a34b4cf "base-files: always use staged sysupgrade" - -diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 -index cc8047d988e39ca9ba27d2588744aad469d1d978..bdbb8926643287f48a4ae62c5d1d4b4a29130859 100755 ---- a/package/base-files/files/lib/upgrade/stage2 -+++ b/package/base-files/files/lib/upgrade/stage2 -@@ -48,7 +48,7 @@ switch_to_ramfs() { - /bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc \ - /bin/cut /usr/bin/printf /bin/sync /bin/mkdir /bin/rmdir \ - /bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ -- /bin/mknod -+ /bin/mknod /bin/touch - - install_bin /sbin/mtd - install_bin /sbin/mount_root -diff --git a/target/linux/mvebu/base-files/lib/upgrade/linksys.sh b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh -index d06a1b8ed0534364b595618f24b65f9f3a3e275d..63d1cd14a4deed407b217a518ae25a752f62969e 100644 ---- a/target/linux/mvebu/base-files/lib/upgrade/linksys.sh -+++ b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh -@@ -73,21 +73,7 @@ platform_do_upgrade_linksys() { - } - } - --linksys_preupgrade() { -- local board=$(mvebu_board_name) -- -- case "$board" in -- armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby|armada-xp-linksys-mamba|armada-385-linksys-rango) -- export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/sbin/fw_printenv /usr/sbin/fw_setenv" -- export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /bin/mkdir /bin/touch" -- export RAMFS_COPY_DATA="${RAMFS_COPY_DATA} /etc/fw_env.config /var/lock/fw_printenv.lock" -- -- [ -f /tmp/sysupgrade.tgz ] && { -- cp /tmp/sysupgrade.tgz /tmp/syscfg/sysupgrade.tgz -- } -- ;; -- esac -+platform_copy_config_linksys() { -+ cp -f /tmp/sysupgrade.tgz /tmp/syscfg/sysupgrade.tgz -+ sync - } -- --append sysupgrade_pre_upgrade linksys_preupgrade -- -diff --git a/target/linux/mvebu/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/base-files/lib/upgrade/platform.sh -index 77578e28d42fb7ca5e3f057e42ac5818e851736f..55c084483995d548556a560e171462f2d5456172 100755 ---- a/target/linux/mvebu/base-files/lib/upgrade/platform.sh -+++ b/target/linux/mvebu/base-files/lib/upgrade/platform.sh -@@ -5,7 +5,8 @@ - - . /lib/mvebu.sh - --RAMFS_COPY_DATA=/lib/mvebu.sh -+RAMFS_COPY_BIN='/usr/sbin/fw_printenv /usr/sbin/fw_setenv' -+RAMFS_COPY_DATA='/lib/mvebu.sh /etc/fw_env.config /var/lock/fw_printenv.lock' - REQUIRE_IMAGE_METADATA=1 - - platform_check_image() { -@@ -31,6 +32,9 @@ platform_copy_config() { - local board=$(mvebu_board_name) - - case "$board" in -+ armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby|armada-xp-linksys-mamba) -+ platform_copy_config_linksys -+ ;; - armada-388-clearfog) - platform_copy_config_clearfog "$ARGV" - ;; diff --git a/patches/lede/0027-generic-mtd-backport-unlock-support-and-asserted-fixes-for-certain-Winbond-Spansion-flash-chips.patch b/patches/lede/0027-generic-mtd-backport-unlock-support-and-asserted-fixes-for-certain-Winbond-Spansion-flash-chips.patch deleted file mode 100644 index 55193310..00000000 --- a/patches/lede/0027-generic-mtd-backport-unlock-support-and-asserted-fixes-for-certain-Winbond-Spansion-flash-chips.patch +++ /dev/null @@ -1,139 +0,0 @@ -From: Matthias Schiffer -Date: Tue, 20 Jun 2017 11:01:27 +0200 -Subject: generic: mtd: backport unlock support and asserted fixes for certain Winbond/Spansion flash chips - -diff --git a/target/linux/generic/patches-4.4/049-0001-mtd-spi-nor-wait-until-lock-unlock-operations-are-re.patch b/target/linux/generic/patches-4.4/049-0001-mtd-spi-nor-wait-until-lock-unlock-operations-are-re.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..c8aafe2ebbf7368f47e8f4d7a24dd5e45583a136 ---- /dev/null -+++ b/target/linux/generic/patches-4.4/049-0001-mtd-spi-nor-wait-until-lock-unlock-operations-are-re.patch -@@ -0,0 +1,66 @@ -+From 32321e950d8a237d7e8f3a9b76220007dfa87544 Mon Sep 17 00:00:00 2001 -+Message-Id: <32321e950d8a237d7e8f3a9b76220007dfa87544.1462572686.git.mschiffer@universe-factory.net> -+From: =?UTF-8?q?Ezequiel=20Garc=C3=ADa?= -+Date: Mon, 28 Dec 2015 17:54:51 -0300 -+Subject: [PATCH] mtd: spi-nor: wait until lock/unlock operations are ready -+ -+On Micron and Numonyx devices, the status register write command -+(WRSR), raises a work-in-progress bit (WIP) on the status register. -+The datasheets for these devices specify that while the status -+register write is in progress, the status register WIP bit can still -+be read to check the end of the operation. -+ -+This commit adds a wait_till_ready call on lock/unlock operations, -+which is required for Micron and Numonyx but should be harmless for -+others. This is needed to prevent applications from issuing erase or -+program operations before the unlock operation is completed. -+ -+Reported-by: Stas Sergeev -+Signed-off-by: Ezequiel Garcia -+Signed-off-by: Brian Norris -+--- -+ drivers/mtd/spi-nor/spi-nor.c | 12 ++++++++++-- -+ 1 file changed, 10 insertions(+), 2 deletions(-) -+ -+--- a/drivers/mtd/spi-nor/spi-nor.c -++++ b/drivers/mtd/spi-nor/spi-nor.c -+@@ -463,6 +463,7 @@ static int stm_lock(struct spi_nor *nor, -+ u8 status_old, status_new; -+ u8 mask = SR_BP2 | SR_BP1 | SR_BP0; -+ u8 shift = ffs(mask) - 1, pow, val; -++ int ret; -+ -+ status_old = read_sr(nor); -+ -+@@ -499,7 +500,10 @@ static int stm_lock(struct spi_nor *nor, -+ return -EINVAL; -+ -+ write_enable(nor); -+- return write_sr(nor, status_new); -++ ret = write_sr(nor, status_new); -++ if (ret) -++ return ret; -++ return spi_nor_wait_till_ready(nor); -+ } -+ -+ /* -+@@ -513,6 +517,7 @@ static int stm_unlock(struct spi_nor *no -+ uint8_t status_old, status_new; -+ u8 mask = SR_BP2 | SR_BP1 | SR_BP0; -+ u8 shift = ffs(mask) - 1, pow, val; -++ int ret; -+ -+ status_old = read_sr(nor); -+ -+@@ -547,7 +552,10 @@ static int stm_unlock(struct spi_nor *no -+ return -EINVAL; -+ -+ write_enable(nor); -+- return write_sr(nor, status_new); -++ ret = write_sr(nor, status_new); -++ if (ret) -++ return ret; -++ return spi_nor_wait_till_ready(nor); -+ } -+ -+ /* -diff --git a/target/linux/generic/patches-4.4/049-0002-mtd-spi-nor-wait-for-SR_WIP-to-clear-on-initial-unlo.patch b/target/linux/generic/patches-4.4/049-0002-mtd-spi-nor-wait-for-SR_WIP-to-clear-on-initial-unlo.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..0541c95594ec14f62b5db787f4d52d5a42777cdc ---- /dev/null -+++ b/target/linux/generic/patches-4.4/049-0002-mtd-spi-nor-wait-for-SR_WIP-to-clear-on-initial-unlo.patch -@@ -0,0 +1,33 @@ -+From edf891ef9ab773363f8e58022a26d7d31604aed6 Mon Sep 17 00:00:00 2001 -+Message-Id: -+From: Brian Norris -+Date: Fri, 29 Jan 2016 11:25:30 -0800 -+Subject: [PATCH] mtd: spi-nor: wait for SR_WIP to clear on initial unlock -+ -+Fixup a piece leftover by commit 32321e950d8a ("mtd: spi-nor: wait until -+lock/unlock operations are ready"). That commit made us wait for the WIP -+bit to settle after lock/unlock operations, but it missed the open-coded -+"unlock" that happens at probe() time. -+ -+We should probably have this code utilize the unlock() routines in the -+future, to avoid duplication, but unfortunately, flash which need to be -+unlocked don't all have a proper ->flash_unlock() callback. -+ -+Signed-off-by: Brian Norris -+Cc: Stas Sergeev -+Reviewed-by: Ezequiel Garcia -+Tested-by: Ezequiel Garcia -+--- -+ drivers/mtd/spi-nor/spi-nor.c | 1 + -+ 1 file changed, 1 insertion(+) -+ -+--- a/drivers/mtd/spi-nor/spi-nor.c -++++ b/drivers/mtd/spi-nor/spi-nor.c -+@@ -1169,6 +1169,7 @@ int spi_nor_scan(struct spi_nor *nor, co -+ info->flags & SPI_NOR_HAS_LOCK) { -+ write_enable(nor); -+ write_sr(nor, 0); -++ spi_nor_wait_till_ready(nor); -+ } -+ -+ if (!mtd->name) -diff --git a/target/linux/generic/patches-4.4/466-revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch b/target/linux/generic/patches-4.4/466-revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..7c6530a5e0e8bc144e1d4497428e3c3691c2ef22 ---- /dev/null -+++ b/target/linux/generic/patches-4.4/466-revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch -@@ -0,0 +1,18 @@ -+--- a/drivers/mtd/spi-nor/spi-nor.c -++++ b/drivers/mtd/spi-nor/spi-nor.c -+@@ -1161,6 +1161,7 @@ int spi_nor_scan(struct spi_nor *nor, co -+ JEDEC_MFR(info) == SNOR_MFR_INTEL || -+ JEDEC_MFR(info) == SNOR_MFR_MACRONIX || -+ JEDEC_MFR(info) == SNOR_MFR_SST || -++ JEDEC_MFR(info) == SNOR_MFR_WINBOND || -+ info->flags & SPI_NOR_HAS_LOCK) { -+ write_enable(nor); -+ write_sr(nor, 0); -+@@ -1178,6 +1179,7 @@ int spi_nor_scan(struct spi_nor *nor, co -+ -+ /* NOR protection support for STmicro/Micron chips and similar */ -+ if (JEDEC_MFR(info) == SNOR_MFR_MICRON || -++ JEDEC_MFR(info) == SNOR_MFR_WINBOND || -+ info->flags & SPI_NOR_HAS_LOCK) { -+ nor->flash_lock = stm_lock; -+ nor->flash_unlock = stm_unlock; diff --git a/patches/lede/0029-vxlan-add-new-package-for-netifd-VXLAN-proto.patch b/patches/lede/0029-vxlan-add-new-package-for-netifd-VXLAN-proto.patch deleted file mode 100644 index 446e6af1..00000000 --- a/patches/lede/0029-vxlan-add-new-package-for-netifd-VXLAN-proto.patch +++ /dev/null @@ -1,198 +0,0 @@ -From: Matthias Schiffer -Date: Fri, 10 Mar 2017 01:23:50 +0100 -Subject: vxlan: add new package for netifd VXLAN proto - -Signed-off-by: Matthias Schiffer - -diff --git a/package/network/config/vxlan/Makefile b/package/network/config/vxlan/Makefile -new file mode 100644 -index 0000000000000000000000000000000000000000..a471d4e90cbe30c1d1dd01dbf7553995d8c0485e ---- /dev/null -+++ b/package/network/config/vxlan/Makefile -@@ -0,0 +1,32 @@ -+include $(TOPDIR)/rules.mk -+ -+PKG_NAME:=vxlan -+PKG_VERSION:=1 -+PKG_LICENSE:=GPL-2.0 -+ -+include $(INCLUDE_DIR)/package.mk -+ -+define Package/vxlan -+ SECTION:=net -+ CATEGORY:=Network -+ MAINTAINER:=Matthias Schiffer -+ TITLE:=Virtual eXtensible LAN config support -+ DEPENDS:=+kmod-vxlan -+endef -+ -+define Package/vxlan/description -+ Virtual eXtensible LAN config support in /etc/config/network. -+endef -+ -+define Build/Compile -+endef -+ -+define Build/Configure -+endef -+ -+define Package/vxlan/install -+ $(INSTALL_DIR) $(1)/lib/netifd/proto -+ $(INSTALL_BIN) ./files/vxlan.sh $(1)/lib/netifd/proto/vxlan.sh -+endef -+ -+$(eval $(call BuildPackage,vxlan)) -diff --git a/package/network/config/vxlan/files/vxlan.sh b/package/network/config/vxlan/files/vxlan.sh -new file mode 100755 -index 0000000000000000000000000000000000000000..27ccd8f12759f69c7c226cac0c923335b8ccc6a8 ---- /dev/null -+++ b/package/network/config/vxlan/files/vxlan.sh -@@ -0,0 +1,148 @@ -+#!/bin/sh -+ -+[ -n "$INCLUDE_ONLY" ] || { -+ . /lib/functions.sh -+ . /lib/functions/network.sh -+ . ../netifd-proto.sh -+ init_proto "$@" -+} -+ -+vxlan_generic_setup() { -+ local cfg="$1" -+ local mode="$2" -+ local local="$3" -+ local remote="$4" -+ -+ local link="$cfg" -+ -+ local port vid ttl tos mtu macaddr zone -+ json_get_vars port vid ttl tos mtu macaddr zone -+ -+ -+ proto_init_update "$link" 1 -+ -+ proto_add_tunnel -+ json_add_string mode "$mode" -+ -+ [ -n "$tunlink" ] && json_add_string link "$tunlink" -+ [ -n "$local" ] && json_add_string local "$local" -+ [ -n "$remote" ] && json_add_string remote "$remote" -+ -+ [ -n "$ttl" ] && json_add_int ttl "$ttl" -+ [ -n "$tos" ] && json_add_string tos "$tos" -+ [ -n "$mtu" ] && json_add_int mtu "$mtu" -+ -+ json_add_object 'data' -+ [ -n "$port" ] && json_add_int port "$port" -+ [ -n "$vid" ] && json_add_int id "$vid" -+ [ -n "$macaddr" ] && json_add_string macaddr "$macaddr" -+ json_close_object -+ -+ proto_close_tunnel -+ -+ proto_add_data -+ [ -n "$zone" ] && json_add_string zone "$zone" -+ proto_close_data -+ -+ proto_send_update "$cfg" -+} -+ -+proto_vxlan_setup() { -+ local cfg="$1" -+ -+ local ipaddr peeraddr -+ json_get_vars ipaddr peeraddr tunlink -+ -+ [ -z "$peeraddr" ] && { -+ proto_notify_error "$cfg" "MISSING_ADDRESS" -+ proto_block_restart "$cfg" -+ exit -+ } -+ -+ ( proto_add_host_dependency "$cfg" '' "$tunlink" ) -+ -+ [ -z "$ipaddr" ] && { -+ local wanif="$tunlink" -+ if [ -z "$wanif" ] && ! network_find_wan wanif; then -+ proto_notify_error "$cfg" "NO_WAN_LINK" -+ exit -+ fi -+ -+ if ! network_get_ipaddr ipaddr "$wanif"; then -+ proto_notify_error "$cfg" "NO_WAN_LINK" -+ exit -+ fi -+ } -+ -+ vxlan_generic_setup "$cfg" 'vxlan' "$ipaddr" "$peeraddr" -+} -+ -+proto_vxlan6_setup() { -+ local cfg="$1" -+ -+ local ip6addr peer6addr -+ json_get_vars ip6addr peer6addr tunlink -+ -+ [ -z "$peer6addr" ] && { -+ proto_notify_error "$cfg" "MISSING_ADDRESS" -+ proto_block_restart "$cfg" -+ exit -+ } -+ -+ ( proto_add_host_dependency "$cfg" '' "$tunlink" ) -+ -+ [ -z "$ip6addr" ] && { -+ local wanif="$tunlink" -+ if [ -z "$wanif" ] && ! network_find_wan6 wanif; then -+ proto_notify_error "$cfg" "NO_WAN_LINK" -+ exit -+ fi -+ -+ if ! network_get_ipaddr6 ip6addr "$wanif"; then -+ proto_notify_error "$cfg" "NO_WAN_LINK" -+ exit -+ fi -+ } -+ -+ vxlan_generic_setup "$cfg" 'vxlan6' "$ip6addr" "$peer6addr" -+} -+ -+proto_vxlan_teardown() { -+ local cfg="$1" -+} -+ -+proto_vxlan6_teardown() { -+ local cfg="$1" -+} -+ -+vxlan_generic_init_config() { -+ no_device=1 -+ available=1 -+ -+ proto_config_add_string "tunlink" -+ proto_config_add_string "zone" -+ -+ proto_config_add_int "vid" -+ proto_config_add_int "port" -+ proto_config_add_int "ttl" -+ proto_config_add_int "tos" -+ proto_config_add_int "mtu" -+ proto_config_add_string "macaddr" -+} -+ -+proto_vxlan_init_config() { -+ vxlan_generic_init_config -+ proto_config_add_string "ipaddr" -+ proto_config_add_string "peeraddr" -+} -+ -+proto_vxlan6_init_config() { -+ vxlan_generic_init_config -+ proto_config_add_string "ip6addr" -+ proto_config_add_string "peer6addr" -+} -+ -+[ -n "$INCLUDE_ONLY" ] || { -+ add_protocol vxlan -+ add_protocol vxlan6 -+} diff --git a/patches/lede/0030-Revert-scripts-package-metadata.pl-inhibit-compile-deps-on-missing-build-types.patch b/patches/lede/0030-Revert-scripts-package-metadata.pl-inhibit-compile-deps-on-missing-build-types.patch deleted file mode 100644 index 655765af..00000000 --- a/patches/lede/0030-Revert-scripts-package-metadata.pl-inhibit-compile-deps-on-missing-build-types.patch +++ /dev/null @@ -1,88 +0,0 @@ -From: Matthias Schiffer -Date: Tue, 9 Jan 2018 16:31:07 +0100 -Subject: Revert "scripts/package-metadata.pl: inhibit compile deps on missing build types" - -This reverts commit b616aa6db7a9952c182ab49d7942fb67c09803d5. The change -conflicts with our PROVIDES fix and is not strictly necessary for Gluon. - -diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl -index c49d132912828531c7125787f4f53d7130323123..2da32c770ef3333bfcc18922ede556f9734510c7 100755 ---- a/scripts/package-metadata.pl -+++ b/scripts/package-metadata.pl -@@ -460,27 +460,20 @@ sub gen_package_mk() { - next unless $pkg->{"builddepends/$type"}; - foreach my $dep (@{$pkg->{"builddepends/$type"}}) { - my $suffix = ""; -- my $deptype = ""; - my $condition; - - if ($dep =~ /^(.+):(.+)/) { - $condition = $1; - $dep = $2; - } -- if ($dep =~ /^(.+)\/(.+)/) { -+ if ($dep =~ /^(.+)(\/.+)/) { - $dep = $1; -- $deptype = $2; -- $suffix = "/$2"; -+ $suffix = $2; - } - - my $idx = ""; - my $pkg_dep = $package{$dep}; - if (defined($pkg_dep) && defined($pkg_dep->{src})) { -- unless (!$deptype || grep { $_ eq $deptype } @{$pkg_dep->{buildtypes}}) { -- warn sprintf "WARNING: Makefile '%s' has a %s build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n", -- $pkg->{makefile}, $type, $pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype; -- next; -- } - $idx = $pkg_dep->{subdir}.$pkg_dep->{src}; - } elsif (defined($srcpackage{$dep})) { - $idx = $subdir{$dep}.$dep; -@@ -506,16 +499,14 @@ sub gen_package_mk() { - my $condition; - my $prefix = ""; - my $suffix = ""; -- my $deptype = ""; - - if ($deps =~ /^(.+):(.+)/) { - $condition = $1; - $deps = $2; - } -- if ($deps =~ /^(.+)\/(.+)/) { -+ if ($deps =~ /^(.+)(\/.+)/) { - $deps = $1; -- $deptype = $2; -- $suffix = "/$2"; -+ $suffix = $2; - } - - my $pkg_dep = $package{$deps}; -@@ -530,17 +521,7 @@ sub gen_package_mk() { - foreach my $dep (@deps) { - $pkg_dep = $package{$deps}; - if (defined $pkg_dep->{src}) { -- unless (!$deptype || grep { $_ eq $deptype } @{$pkg_dep->{buildtypes}}) { -- warn sprintf "WARNING: Makefile '%s' has a build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n", -- $pkg->{makefile}, $pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype; -- next; -- } -- unless ($pkg->{src} ne $pkg_dep->{sec}.$suffix) { -- warn sprintf "WARNING: Makefile '%s' has a build dependency on itself\n", -- $pkg->{makefile}; -- next; -- } -- $idx = $pkg_dep->{subdir}.$pkg_dep->{src}; -+ ($pkg->{src} ne $pkg_dep->{src}.$suffix) and $idx = $pkg_dep->{subdir}.$pkg_dep->{src}; - } elsif (defined($srcpackage{$dep})) { - $idx = $subdir{$dep}.$dep; - } -@@ -592,7 +573,7 @@ ifndef DUMP_TARGET_DB - ( \\ - $cmds \\ - ) > \$@ -- -+ - ifneq (\$(IMAGEOPT)\$(CONFIG_IMAGEOPT),) - package/preconfig: \$(TARGET_DIR)/etc/uci-defaults/$preconfig - endif diff --git a/patches/lede/0031-scripts-metadata-always-resolve-dependencies-through-provides-list.patch b/patches/lede/0031-scripts-metadata-always-resolve-dependencies-through-provides-list.patch deleted file mode 100644 index cf2c4a3a..00000000 --- a/patches/lede/0031-scripts-metadata-always-resolve-dependencies-through-provides-list.patch +++ /dev/null @@ -1,306 +0,0 @@ -From: Matthias Schiffer -Date: Sat, 8 Jul 2017 01:35:35 +0200 -Subject: scripts: metadata: always resolve dependencies through provides list - -Instead of adding virtual packages to the normal package list, keep a -separate list for provides, make each package provide itself, and resolve -all dependencies through this list. This allows to use PROVIDES to replace -existing packages. - -A side effect of the changes in the makefile dependency logic is that -build dependencies are now always interpreted as source package names, -instead of putting build and runtime dependencies into the same list. - -Fixes FS#837. - -Signed-off-by: Matthias Schiffer - -diff --git a/scripts/feeds b/scripts/feeds -index 55c294ad0a4ec2f0419d12deddeda7324c349e04..a38eb454585f5dd27b707db23184b7df07ab2658 100755 ---- a/scripts/feeds -+++ b/scripts/feeds -@@ -252,7 +252,6 @@ sub search_feed { - my $substr; - my $pkgmatch = 1; - -- next if $pkg->{vdepends}; - foreach my $substr (@substr) { - my $match; - foreach my $key (qw(name title description src)) { -@@ -306,7 +305,6 @@ sub list_feed { - get_feed($feed); - foreach my $name (sort { lc($a) cmp lc($b) } keys %$feed_package) { - my $pkg = $feed_package->{$name}; -- next if $pkg->{vdepends}; - if($pkg->{name}) { - printf "\%-32s\t\%s\n", $pkg->{name}, $pkg->{title}; - } -@@ -588,7 +586,6 @@ sub install { - get_feed($f->[1]); - foreach my $name (sort { lc($a) cmp lc($b) } keys %$feed_package) { - my $p = $feed_package->{$name}; -- next if $p->{vdepends}; - if( $p->{name} ) { - install_package($feed, $p->{name}, exists($opts{f})) == 0 or $ret = 1; - get_feed($f->[1]); -diff --git a/scripts/metadata.pm b/scripts/metadata.pm -index 8334f26d3179a0eb83aa1aa976778ff5828faf45..e7bdbab4568ddd7e10c10b2ca6a718380c7d6308 100644 ---- a/scripts/metadata.pm -+++ b/scripts/metadata.pm -@@ -2,9 +2,10 @@ package metadata; - use base 'Exporter'; - use strict; - use warnings; --our @EXPORT = qw(%package %srcpackage %category %subdir %preconfig %features %overrides clear_packages parse_package_metadata parse_target_metadata get_multiline @ignore); -+our @EXPORT = qw(%package %vpackage %srcpackage %category %subdir %preconfig %features %overrides clear_packages parse_package_metadata parse_target_metadata get_multiline @ignore); - - our %package; -+our %vpackage; - our %preconfig; - our %srcpackage; - our %category; -@@ -124,6 +125,7 @@ sub clear_packages() { - %subdir = (); - %preconfig = (); - %package = (); -+ %vpackage = (); - %srcpackage = (); - %category = (); - %features = (); -@@ -179,6 +181,9 @@ sub parse_package_metadata($) { - $pkg->{override} = $override; - $package{$1} = $pkg; - push @{$srcpackage{$src}}, $pkg; -+ -+ $vpackage{$1} or $vpackage{$1} = []; -+ unshift @{$vpackage{$1}}, $1; - }; - /^Feature:\s*(.+?)\s*$/ and do { - undef $pkg; -@@ -210,14 +215,8 @@ sub parse_package_metadata($) { - /^Provides: \s*(.+)\s*$/ and do { - my @vpkg = split /\s+/, $1; - foreach my $vpkg (@vpkg) { -- $package{$vpkg} or $package{$vpkg} = { -- name => $vpkg, -- vdepends => [], -- src => $src, -- subdir => $subdir, -- makefile => $makefile -- }; -- push @{$package{$vpkg}->{vdepends}}, $pkg->{name}; -+ $vpackage{$vpkg} or $vpackage{$vpkg} = []; -+ push @{$vpackage{$vpkg}}, $pkg->{name}; - } - }; - /^Menu-Depends: \s*(.+)\s*$/ and $pkg->{mdepends} = [ split /\s+/, $1 ]; -diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl -index 2da32c770ef3333bfcc18922ede556f9734510c7..998d37dd415d89e7eccad2ddf73f855f6a9b017c 100755 ---- a/scripts/package-metadata.pl -+++ b/scripts/package-metadata.pl -@@ -101,14 +101,16 @@ my %dep_check; - sub __find_package_dep($$) { - my $pkg = shift; - my $name = shift; -- my $deps = ($pkg->{vdepends} or $pkg->{depends}); -+ my $deps = $pkg->{depends}; - - return 0 unless defined $deps; -- foreach my $dep (@{$deps}) { -- next if $dep_check{$dep}; -- $dep_check{$dep} = 1; -- return 1 if $dep eq $name; -- return 1 if ($package{$dep} and (__find_package_dep($package{$dep},$name) == 1)); -+ foreach my $vpkg (@{$deps}) { -+ foreach my $dep (@{$vpackage{$vpkg}}) { -+ next if $dep_check{$dep}; -+ $dep_check{$dep} = 1; -+ return 1 if $dep eq $name; -+ return 1 if ($package{$dep} and (__find_package_dep($package{$dep},$name) == 1)); -+ } - } - return 0; - } -@@ -156,7 +158,6 @@ sub mconf_depends { - my $m = "depends on"; - my $flags = ""; - $depend =~ s/^([@\+]+)// and $flags = $1; -- my $vdep; - my $condition = $parent_condition; - - next if $condition eq $depend; -@@ -173,9 +174,9 @@ sub mconf_depends { - } - $depend = $2; - } -- next if $package{$depend} and $package{$depend}->{buildonly}; - if ($flags =~ /\+/) { -- if ($vdep = $package{$depend}->{vdepends}) { -+ my $vdep = $vpackage{$depend}; -+ if ($vdep and @$vdep > 0) { - my @vdeps; - $depend = undef; - -@@ -209,7 +210,8 @@ sub mconf_depends { - - $flags =~ /@/ or $depend = "PACKAGE_$depend"; - } else { -- if ($vdep = $package{$depend}->{vdepends}) { -+ my $vdep = $vpackage{$depend}; -+ if ($vdep and @$vdep > 0) { - $depend = join("||", map { "PACKAGE_".$_ } @$vdep); - } else { - $flags =~ /@/ or $depend = "PACKAGE_$depend"; -@@ -413,7 +415,6 @@ sub get_conditional_dep($$) { - - sub gen_package_mk() { - my %conf; -- my %dep; - my %done; - my $line; - -@@ -423,8 +424,6 @@ sub gen_package_mk() { - my $pkg = $package{$name}; - my @srcdeps; - -- next if defined $pkg->{vdepends}; -- - $config = "\$(CONFIG_PACKAGE_$name)"; - if ($config) { - $pkg->{buildonly} and $config = ""; -@@ -445,16 +444,7 @@ sub gen_package_mk() { - print "buildtypes-$pkg->{subdir}$pkg->{src} = ".join(' ', @{$pkg->{buildtypes}})."\n"; - } - -- foreach my $spkg (@{$srcpackage{$pkg->{src}}}) { -- foreach my $dep (@{$spkg->{depends}}, @{$spkg->{builddepends}}) { -- $dep =~ /@/ or do { -- $dep =~ s/\+//g; -- push @srcdeps, $dep; -- }; -- } -- } - foreach my $type (@{$pkg->{buildtypes}}) { -- my @extra_deps; - my %deplines; - - next unless $pkg->{"builddepends/$type"}; -@@ -492,63 +482,70 @@ sub gen_package_mk() { - } - } - -- my $hasdeps = 0; - my %deplines; -- foreach my $deps (@srcdeps) { -- my $idx; -- my $condition; -- my $prefix = ""; -- my $suffix = ""; -- -- if ($deps =~ /^(.+):(.+)/) { -- $condition = $1; -- $deps = $2; -- } -- if ($deps =~ /^(.+)(\/.+)/) { -- $deps = $1; -- $suffix = $2; -- } -+ foreach my $spkg (@{$srcpackage{$pkg->{src}}}) { -+ foreach my $bdep (@{$spkg->{builddepends}}) { -+ my $condition; -+ my $suffix = ""; - -- my $pkg_dep = $package{$deps}; -- my @deps; -+ if ($bdep =~ /^(.+):(.+)/) { -+ $condition = $1; -+ $bdep = $2; -+ } -+ if ($bdep =~ /^(.+)(\/.+)/) { -+ $bdep = $1; -+ $suffix = $2; -+ } - -- if ($pkg_dep->{vdepends}) { -- @deps = @{$pkg_dep->{vdepends}}; -- } else { -- @deps = ($deps); -+ next unless $subdir{$bdep}; -+ my $idx = $subdir{$bdep}.$bdep.$suffix; -+ -+ my $depline = get_conditional_dep($condition, "\$(curdir)/$idx/compile"); -+ if ($depline) { -+ $deplines{$depline}++; -+ } - } - -- foreach my $dep (@deps) { -- $pkg_dep = $package{$deps}; -- if (defined $pkg_dep->{src}) { -- ($pkg->{src} ne $pkg_dep->{src}.$suffix) and $idx = $pkg_dep->{subdir}.$pkg_dep->{src}; -- } elsif (defined($srcpackage{$dep})) { -- $idx = $subdir{$dep}.$dep; -+ foreach my $dep (@{$spkg->{depends}}) { -+ my $condition; -+ my $suffix = ""; -+ -+ next if $dep =~ /@/; -+ $dep =~ s/\+//g; -+ -+ if ($dep =~ /^(.+):(.+)/) { -+ $condition = $1; -+ $dep = $2; - } -- undef $idx if $idx eq 'base-files'; -- if ($idx) { -- $idx .= $suffix; -+ if ($dep =~ /^(.+)(\/.+)/) { -+ $dep = $1; -+ $suffix = $2; -+ } -+ -+ next unless $vpackage{$dep}; -+ -+ my @vdeps = @{$vpackage{$dep}}; -+ foreach my $vdep (@vdeps) { -+ my $pkg_dep = $package{$vdep}; - -- my $depline; -+ next unless $pkg_dep; - next if $pkg->{src} eq $pkg_dep->{src}.$suffix; -- next if $dep{$condition.":".$pkg->{src}."->".$idx}; -- next if $dep{$pkg->{src}."->($dep)".$idx} and $pkg_dep->{vdepends}; -- my $depstr; - -- if ($pkg_dep->{vdepends}) { -- $depstr = "\$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)"; -- $dep{$pkg->{src}."->($dep)".$idx} = 1; -+ my $idx = $pkg_dep->{subdir}.$pkg_dep->{src}.$suffix; -+ my $depstr; -+ if (@vdeps > 1) { -+ $depstr = "\$(if \$(CONFIG_PACKAGE_$vdep),\$(curdir)/$idx/compile)"; - } else { - $depstr = "\$(curdir)/$idx/compile"; -- $dep{$pkg->{src}."->".$idx} = 1; - } -- $depline = get_conditional_dep($condition, $depstr); -+ my $depline = get_conditional_dep($condition, $depstr); - if ($depline) { - $deplines{$depline}++; - } - } - } - } -+ - my $depline = join(" ", sort keys %deplines); - if ($depline) { - $line .= "\$(curdir)/".$pkg->{subdir}."$pkg->{src}/compile += $depline\n"; -@@ -573,7 +570,7 @@ ifndef DUMP_TARGET_DB - ( \\ - $cmds \\ - ) > \$@ -- -+ - ifneq (\$(IMAGEOPT)\$(CONFIG_IMAGEOPT),) - package/preconfig: \$(TARGET_DIR)/etc/uci-defaults/$preconfig - endif diff --git a/patches/lede/0032-base-files-upgrade-correctly-handle-nand_do_upgrade-argument-passed-from-preupgrade.patch b/patches/lede/0032-base-files-upgrade-correctly-handle-nand_do_upgrade-argument-passed-from-preupgrade.patch deleted file mode 100644 index 82de1177..00000000 --- a/patches/lede/0032-base-files-upgrade-correctly-handle-nand_do_upgrade-argument-passed-from-preupgrade.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 10 Jul 2017 10:35:19 +0200 -Subject: base-files: upgrade: correctly handle nand_do_upgrade argument passed from preupgrade - -Fixes: 30f61a34b4cf "base-files: always use staged sysupgrade" -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh -index af7682c29e005c6ca47b91e9be2d60c359a90d05..6ccd84c5a95348124412adc8bf41d3fa4894435a 100644 ---- a/package/base-files/files/lib/upgrade/common.sh -+++ b/package/base-files/files/lib/upgrade/common.sh -@@ -222,7 +222,7 @@ default_do_upgrade() { - do_upgrade_stage2() { - v "Performing system upgrade..." - if [ -n "$do_upgrade" ]; then -- $do_upgrade "$IMAGE" -+ eval "$do_upgrade" - elif type 'platform_do_upgrade' >/dev/null 2>/dev/null; then - platform_do_upgrade "$IMAGE" - else -diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh -index 1e69c8f9657b39adf2a2c33bd9bac9303bcbc3d7..72f0fe0e10312e74ce085ad53f0adceb921fd013 100644 ---- a/package/base-files/files/lib/upgrade/nand.sh -+++ b/package/base-files/files/lib/upgrade/nand.sh -@@ -289,7 +289,7 @@ nand_do_upgrade() { - # hook; this piece of code handles scripts that haven't been - # updated. All scripts should gradually move to call nand_do_upgrade - # from platform_do_upgrade instead. -- export do_upgrade=nand_do_upgrade -+ export do_upgrade="nand_do_upgrade '$1'" - return - fi - diff --git a/patches/lede/0033-base-files-upgrade-don-t-loop-forever-trying-to-kill-processes.patch b/patches/lede/0033-base-files-upgrade-don-t-loop-forever-trying-to-kill-processes.patch deleted file mode 100644 index 2dfe0ca6..00000000 --- a/patches/lede/0033-base-files-upgrade-don-t-loop-forever-trying-to-kill-processes.patch +++ /dev/null @@ -1,42 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 13 Jul 2017 00:19:32 +0200 -Subject: base-files: upgrade: don't loop forever trying to kill processes - -When processes don't die on SIGKILL (usually because of kernel bugs), it's -better to give up instead of looping forever. - -upgraded will trigger a reboot in this case (and if this fails, a hardware -watchdog will eventually time out and reset the system, if present). - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 -index bdbb8926643287f48a4ae62c5d1d4b4a29130859..097ad63adfecdd70019acaa5b652d2056e774c3f 100755 ---- a/package/base-files/files/lib/upgrade/stage2 -+++ b/package/base-files/files/lib/upgrade/stage2 -@@ -87,6 +87,8 @@ switch_to_ramfs() { - } - - kill_remaining() { # [ [ ] ] -+ local loop_limit=10 -+ - local sig="${1:-TERM}" - local loop="${2:-0}" - local run=true -@@ -117,8 +119,15 @@ kill_remaining() { # [ [ ] ] - - [ $loop -eq 1 ] && run=true - done -+ -+ let loop_limit-- -+ [ $loop_limit -eq 0 ] && { -+ echo -+ echo "Failed to kill all processes." -+ exit 1 -+ } - done -- echo "" -+ echo - } - - diff --git a/patches/lede/0034-bcm53xx-upgrade-fix-RAMFS_COPY_.patch b/patches/lede/0034-bcm53xx-upgrade-fix-RAMFS_COPY_.patch deleted file mode 100644 index c9052f73..00000000 --- a/patches/lede/0034-bcm53xx-upgrade-fix-RAMFS_COPY_.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: Matthias Schiffer -Date: Sat, 10 Jun 2017 16:14:54 +0200 -Subject: bcm53xx: upgrade: fix RAMFS_COPY_* - -Fixes: 30f61a34b4cf "base-files: always use staged sysupgrade" -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 -index 097ad63adfecdd70019acaa5b652d2056e774c3f..8cc8c8b34e9f349f1d1283ac00f9782b52ab01c1 100755 ---- a/package/base-files/files/lib/upgrade/stage2 -+++ b/package/base-files/files/lib/upgrade/stage2 -@@ -48,7 +48,7 @@ switch_to_ramfs() { - /bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc \ - /bin/cut /usr/bin/printf /bin/sync /bin/mkdir /bin/rmdir \ - /bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ -- /bin/mknod /bin/touch -+ /bin/mknod /bin/touch /bin/sed - - install_bin /sbin/mtd - install_bin /sbin/mount_root -diff --git a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh -index f2e007db22fa8fde93bf0dd58b359f6515e0445c..6a9e4950450cb896db7ebb3eb901b5cf51030295 100644 ---- a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh -@@ -1,3 +1,5 @@ -+RAMFS_COPY_BIN='/usr/bin/osafeloader /usr/bin/oseama' -+ - PART_NAME=firmware - - # $(1): file to read magic from -@@ -260,8 +262,6 @@ platform_pre_upgrade_seama() { - } - - platform_pre_upgrade() { -- export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/bin/osafeloader /usr/bin/oseama /bin/sed" -- - local file_type=$(platform_identify "$1") - - [ "$(platform_flash_type)" != "nand" ] && return diff --git a/patches/lede/0035-ipq806x-upgrade-fix-RAMFS_COPY_.patch b/patches/lede/0035-ipq806x-upgrade-fix-RAMFS_COPY_.patch deleted file mode 100644 index 71b800fb..00000000 --- a/patches/lede/0035-ipq806x-upgrade-fix-RAMFS_COPY_.patch +++ /dev/null @@ -1,68 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 10 Jul 2017 18:03:39 +0200 -Subject: ipq806x: upgrade: fix RAMFS_COPY_* - -RAMFS_COPY_* are moved to platform.sh toplevel. The unneeded -linksys_preupgrade function is removed, and the nand_do_upgrade call is -moved to platform_do_upgrade. - -Fixes: 30f61a34b4cf "base-files: always use staged sysupgrade" -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh b/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh -index 12f25efdae87979e79a252237f735932cb66d42f..0234ce0a51a0a92dcd719102f83e19686442574a 100644 ---- a/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh -+++ b/target/linux/ipq806x/base-files/lib/upgrade/linksys.sh -@@ -99,12 +99,3 @@ platform_do_upgrade_linksys() { - fi - } - } -- --linksys_preupgrade() { -- export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/sbin/fw_printenv /usr/sbin/fw_setenv" -- export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /bin/mkdir /bin/touch" -- export RAMFS_COPY_DATA="${RAMFS_COPY_DATA} /etc/fw_env.config /var/lock/fw_printenv.lock" -- --} -- --append sysupgrade_pre_upgrade linksys_preupgrade -diff --git a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh -index c3741f9ff242cddb3c185c2f638c7b4dff781e1b..6455b57cfb1346b7cc9e103065080d8ae92edc19 100644 ---- a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh -@@ -3,11 +3,14 @@ - PART_NAME=firmware - REQUIRE_IMAGE_METADATA=1 - -+RAMFS_COPY_BIN='/usr/sbin/fw_printenv /usr/sbin/fw_setenv' -+RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' -+ - platform_check_image() { - return 0; - } - --platform_pre_upgrade() { -+platform_do_upgrade() { - local board=$(ipq806x_board_name) - - case "$board" in -@@ -17,18 +20,8 @@ platform_pre_upgrade() { - r7500 |\ - r7500v2 |\ - r7800) -- nand_do_upgrade "$1" -- ;; -- ea8500) -- linksys_preupgrade "$1" -+ nand_do_upgrade "$ARGV" - ;; -- esac --} -- --platform_do_upgrade() { -- local board=$(ipq806x_board_name) -- -- case "$board" in - c2600) - PART_NAME="os-image:rootfs" - MTD_CONFIG_ARGS="-s 0x200000" diff --git a/patches/lede/0036-kirkwood-upgrade-fix-RAMFS_COPY_.patch b/patches/lede/0036-kirkwood-upgrade-fix-RAMFS_COPY_.patch deleted file mode 100644 index 7c58d6ce..00000000 --- a/patches/lede/0036-kirkwood-upgrade-fix-RAMFS_COPY_.patch +++ /dev/null @@ -1,60 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 10 Jul 2017 18:16:23 +0200 -Subject: kirkwood: upgrade: fix RAMFS_COPY_* - -RAMFS_COPY_* are moved to platform.sh toplevel. The nand_do_upgrade call is -moved to platform_do_upgrade. - -Fixes: 30f61a34b4cf "base-files: always use staged sysupgrade" -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/kirkwood/base-files/lib/upgrade/linksys.sh b/target/linux/kirkwood/base-files/lib/upgrade/linksys.sh -index 13a8f1cb554462acf39a59c9d5c1e6cd4ec222f5..dde3bd1b2190d68ce54e6c2883a45032d58599b2 100644 ---- a/target/linux/kirkwood/base-files/lib/upgrade/linksys.sh -+++ b/target/linux/kirkwood/base-files/lib/upgrade/linksys.sh -@@ -69,11 +69,3 @@ platform_do_upgrade_linksys() { - fi - } - } -- --linksys_preupgrade() { -- export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /usr/sbin/fw_printenv /usr/sbin/fw_setenv" -- export RAMFS_COPY_BIN="${RAMFS_COPY_BIN} /bin/mkdir /bin/touch" -- export RAMFS_COPY_DATA="${RAMFS_COPY_DATA} /etc/fw_env.config /var/lock/fw_printenv.lock" --} -- --append sysupgrade_pre_upgrade linksys_preupgrade -diff --git a/target/linux/kirkwood/base-files/lib/upgrade/platform.sh b/target/linux/kirkwood/base-files/lib/upgrade/platform.sh -index e7c6a1120a90147380f4fcf644eb7078c1bc1659..c8c66c1b9d67759305ee836f9d84b9a2968a9493 100644 ---- a/target/linux/kirkwood/base-files/lib/upgrade/platform.sh -+++ b/target/linux/kirkwood/base-files/lib/upgrade/platform.sh -@@ -1,5 +1,8 @@ - . /lib/kirkwood.sh - -+RAMFS_COPY_BIN='/usr/sbin/fw_printenv /usr/sbin/fw_setenv' -+RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' -+ - platform_check_image() { - [ "$#" -gt 1 ] && return 1 - local board="$(kirkwood_board_name)" -@@ -33,19 +36,7 @@ platform_do_upgrade() { - platform_do_upgrade_linksys "$ARGV" - ;; - *) -- default_do_upgrade "$@" -- ;; -- esac --} -- --platform_pre_upgrade() { -- local board=$(kirkwood_board_name) -- -- case "$board" in -- "linksys-audi"|\ -- "linksys-viper") ;; -- *) -- nand_do_upgrade $1 -+ nand_do_upgrade "$ARGV" - ;; - esac - } diff --git a/patches/lede/0037-ar71xx-add-uImageArcher-to-tp-link.mk.patch b/patches/lede/0037-ar71xx-add-uImageArcher-to-tp-link.mk.patch deleted file mode 100644 index 547548fd..00000000 --- a/patches/lede/0037-ar71xx-add-uImageArcher-to-tp-link.mk.patch +++ /dev/null @@ -1,29 +0,0 @@ -From: Andreas Ziegler -Date: Sun, 6 Aug 2017 16:27:53 +0200 -Subject: ar71xx: add uImageArcher to tp-link.mk - -backport from e39dc8d823c86559eedbbdcee5f5c14b827fed0f -ar71xx: add support to TP-Link Archer C59v1 and C60v1 - -Based-on-patch-by: Henryk Heisig -Signed-off-by: Andreas Ziegler - -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index b76ed02ca394fc1a8b15218d64b5dc722552bbfd..9cd6c6372ac8f7e509a0a2422616097c1c19edf6 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -45,6 +45,14 @@ define Build/mktplinkfw-kernel - @mv $@.new $@ - endef - -+define Build/uImageArcher -+ mkimage -A $(LINUX_KARCH) \ -+ -O linux -T kernel \ -+ -C $(1) -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ -+ -n '$(call toupper,$(LINUX_KARCH)) LEDE Linux-$(LINUX_VERSION)' -d $@ $@.new -+ @mv $@.new $@ -+endef -+ - define Device/tplink - TPLINK_HWREV := 0x1 - TPLINK_HEADER_VERSION := 1 diff --git a/patches/lede/0038-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch b/patches/lede/0038-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch deleted file mode 100644 index 0aea6cf6..00000000 --- a/patches/lede/0038-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch +++ /dev/null @@ -1,444 +0,0 @@ -From: Ludwig Thomeczek -Date: Sat, 22 Apr 2017 18:21:47 +0200 -Subject: ar71xx: add support for TP-Link Archer C25 v1 - -The TP-Link Archer C25 is a low-cost dual-band router. - -Specification: - -- CPU: Atheros QCA9561 775 MHz -- RAM: 64 MB -- Flash: 8 MB -- Wifi: 3x3 2.4 GHz (integrated), 1x1 5 GHz QCA9887 -- NET: 5x 10/100 Mbps Ethernet - -Some LEDs are controlled by an additional 74HC595 chip. - -Signed-off-by: Ludwig Thomeczek -[minor code style fixes, boards alphabetical order fixes, -reworked commit message] -Signed-off-by: Piotr Dymacz - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index 833522f27b61ac2208c2862bc0f29f34dea5e701..e1efb561b33da4dcfcb82ee953cd888170476dfb 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -53,6 +53,15 @@ ap121f) - ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" - ;; -+archer-c25-v1) -+ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" -+ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" "phy1tpt" -+ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" -+ ucidef_set_led_switch "lan1" "LAN1" "$board:green:lan1" "switch0" "0x10" -+ ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" "0x08" -+ ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x04" -+ ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x02" -+ ;; - arduino-yun) - ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt" - ucidef_set_led_usbdev "usb" "USB" "arduino:white:usb" "1-1.1" -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 6d8a5c3d0a86a627663dee6e2905e03d5dec99fb..cefb7413eac6ffc50e67f1eaf63def749314428b 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -122,6 +122,7 @@ ar71xx_setup_interfaces() - a60|\ - alfa-ap96|\ - alfa-nx|\ -+ archer-c25-v1|\ - dr344|\ - gl-ar150|\ - gl-ar300m|\ -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index bc2fc2f774c4f2f0bbfa6e43d9b9a55e9b63153d..38cc5d7853c79f2a7800a387310a95abb3b4de1b 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -50,6 +50,7 @@ get_status_led() { - ap135-020) - status_led="ap135:green:status" - ;; -+ archer-c25-v1|\ - mr12|\ - mr16|\ - nbg6616|\ -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index b3e23c9a8f8c56870ef36fb55ae52e6b5ea61134..68f90de802ddd18e09a1da39c0d56292eea9489c 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -92,6 +92,7 @@ case "$FIRMWARE" in - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) - ;; -+ archer-c25-v1|\ - tl-wdr6500-v2) - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index 170c6f01b4310c4d6c261e9ba97af8786b21c93b..fc7d862c2911e96f76622cbed23e99863814da63 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -463,6 +463,9 @@ ar71xx_board_detect() { - *AP90Q) - name="ap90q" - ;; -+ *"Archer C25 v1") -+ name="archer-c25-v1" -+ ;; - *"Archer C5") - name="archer-c5" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index d2dc88127c02746cdecc4ced28f33548f35d037c..6258713dd0e3325ab109689f0ed3b51e27c41f89 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -214,6 +214,7 @@ platform_check_image() { - ap121f|\ - ap132|\ - ap90q|\ -+ archer-c25-v1|\ - bullet-m|\ - c-55|\ - carambola2|\ -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index a8622454b421c1c74a8a71134b53c50399114aa5..e10401d42ae06506f82f2f5538fbc7df79fd4c65 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -51,6 +51,7 @@ CONFIG_ATH79_MACH_AP152=y - # CONFIG_ATH79_MACH_AP81 is not set - CONFIG_ATH79_MACH_AP90Q=y - CONFIG_ATH79_MACH_AP96=y -+CONFIG_ATH79_MACH_ARCHER_C25_V1=y - CONFIG_ATH79_MACH_ARCHER_C7=y - CONFIG_ATH79_MACH_ARDUINO_YUN=y - CONFIG_ATH79_MACH_AW_NR580=y -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index 58d7e435362e0bac105e8183206e593329e4ae96..fb2afb965c4641df7cdcaf0920f2d56b3717fa9b 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -1234,6 +1234,16 @@ config ATH79_MACH_BSB - select ATH79_DEV_USB - select ATH79_DEV_WMAC - -+config ATH79_MACH_ARCHER_C25_V1 -+ bool "TP-LINK Archer C25 v1 support" -+ select SOC_QCA956X -+ select ATH79_DEV_AP9X_PCI if PCI -+ select ATH79_DEV_ETH -+ select ATH79_DEV_GPIO_BUTTONS -+ select ATH79_DEV_LEDS_GPIO -+ select ATH79_DEV_M25P80 -+ select ATH79_DEV_WMAC -+ - config ATH79_MACH_ARCHER_C7 - bool "TP-LINK Archer C5/C7/TL-WDR4900 v2 board support" - select SOC_QCA955X -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -index 7aee76019552e14ebdbf7bea357859dedb1a5bbb..3365a43ce16fc77b3212b39b92081efe678e8803 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -@@ -56,6 +56,7 @@ obj-$(CONFIG_ATH79_MACH_AP147) += mach-ap147.o - obj-$(CONFIG_ATH79_MACH_AP152) += mach-ap152.o - obj-$(CONFIG_ATH79_MACH_AP90Q) += mach-ap90q.o - obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o -+obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += mach-archer-c25-v1.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7.o - obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN) += mach-arduino-yun.o - obj-$(CONFIG_ATH79_MACH_AW_NR580) += mach-aw-nr580.o -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c -new file mode 100644 -index 0000000000000000000000000000000000000000..a0f001cb49af5aa501c6825c40f3a98ab99503b2 ---- /dev/null -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c -@@ -0,0 +1,227 @@ -+/* -+ * TP-Link Archer C25 v1 board support -+ * -+ * Copyright (C) 2017 Ludwig Thomeczek -+ * based on mach-archer-c60/C59-v1.c -+ * Copyright (C) 2016 Henryk Heisig -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ */ -+#include -+#include -+#include -+#include -+#include -+ -+#include "common.h" -+#include "dev-m25p80.h" -+#include "machtypes.h" -+#include "pci.h" -+#include "dev-ap9x-pci.h" -+#include "dev-eth.h" -+#include "dev-gpio-buttons.h" -+#include "dev-leds-gpio.h" -+#include "dev-spi.h" -+#include "dev-usb.h" -+#include "dev-wmac.h" -+#include -+#include -+ -+#define ARCHER_C25_GPIO_SHIFT_OE 21 /* OE, Output Enable */ -+#define ARCHER_C25_GPIO_SHIFT_SER 14 /* DS, Data Serial Input */ -+#define ARCHER_C25_GPIO_SHIFT_SRCLK 15 /* SHCP, Shift Reg Clock Input */ -+#define ARCHER_C25_GPIO_SHIFT_SRCLR 19 /* MR, Master Reset */ -+#define ARCHER_C25_GPIO_SHIFT_RCLK 16 /* STCP, Storage Reg Clock Input */ -+ -+#define ARCHER_C25_74HC_GPIO_BASE QCA956X_GPIO_COUNT -+#define ARCHER_C25_74HC_GPIO_LED_WAN_AMBER 27 -+#define ARCHER_C25_74HC_GPIO_LED_WAN_GREEN 28 -+#define ARCHER_C25_74HC_GPIO_LED_WLAN2 29 -+#define ARCHER_C25_74HC_GPIO_LED_WLAN5 30 -+#define ARCHER_C25_74HC_GPIO_LED_LAN1 23 -+#define ARCHER_C25_74HC_GPIO_LED_LAN2 24 -+#define ARCHER_C25_74HC_GPIO_LED_LAN3 25 -+#define ARCHER_C25_74HC_GPIO_LED_LAN4 26 -+ -+#define ARCHER_C25_V1_SSR_BIT_0 0 -+#define ARCHER_C25_V1_SSR_BIT_1 1 -+#define ARCHER_C25_V1_SSR_BIT_2 2 -+#define ARCHER_C25_V1_SSR_BIT_3 3 -+#define ARCHER_C25_V1_SSR_BIT_4 4 -+#define ARCHER_C25_V1_SSR_BIT_5 5 -+#define ARCHER_C25_V1_SSR_BIT_6 6 -+#define ARCHER_C25_V1_SSR_BIT_7 7 -+ -+ -+#define ARCHER_C25_V1_KEYS_POLL_INTERVAL 20 -+#define ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL \ -+ (3 * ARCHER_C25_V1_KEYS_POLL_INTERVAL) -+ -+#define ARCHER_C25_V1_GPIO_BTN_RESET 1 -+#define ARCHER_C25_V1_GPIO_BTN_RFKILL 22 -+ -+#define ARCHER_C25_V1_GPIO_LED_POWER 17 -+#define ARCHER_C25_V1_GPIO_LED_WPS 2 -+ -+#define ARCHER_C25_V1_WMAC_CALDATA_OFFSET 0x1000 -+ -+static struct spi_gpio_platform_data archer_c25_v1_spi_data = { -+ .sck = ARCHER_C25_GPIO_SHIFT_SRCLK, -+ .miso = SPI_GPIO_NO_MISO, -+ .mosi = ARCHER_C25_GPIO_SHIFT_SER, -+ .num_chipselect = 1, -+}; -+ -+static u8 archer_c25_v1_ssr_initdata[] __initdata = { -+ BIT(ARCHER_C25_V1_SSR_BIT_7) | -+ BIT(ARCHER_C25_V1_SSR_BIT_6) | -+ BIT(ARCHER_C25_V1_SSR_BIT_5) | -+ BIT(ARCHER_C25_V1_SSR_BIT_4) | -+ BIT(ARCHER_C25_V1_SSR_BIT_3) | -+ BIT(ARCHER_C25_V1_SSR_BIT_2) | -+ BIT(ARCHER_C25_V1_SSR_BIT_1) -+}; -+ -+static struct gen_74x164_chip_platform_data archer_c25_v1_ssr_data = { -+ .base = ARCHER_C25_74HC_GPIO_BASE, -+ .num_registers = ARRAY_SIZE(archer_c25_v1_ssr_initdata), -+ .init_data = archer_c25_v1_ssr_initdata, -+}; -+ -+static struct platform_device archer_c25_v1_spi_device = { -+ .name = "spi_gpio", -+ .id = 1, -+ .dev = { -+ .platform_data = &archer_c25_v1_spi_data, -+ }, -+}; -+ -+static struct spi_board_info archer_c25_v1_spi_info[] = { -+ { -+ .bus_num = 1, -+ .chip_select = 0, -+ .max_speed_hz = 10000000, -+ .modalias = "74x164", -+ .platform_data = &archer_c25_v1_ssr_data, -+ .controller_data = (void *) ARCHER_C25_GPIO_SHIFT_RCLK, -+ }, -+}; -+ -+static struct gpio_led archer_c25_v1_leds_gpio[] __initdata = { -+ { -+ .name = "archer-c25-v1:green:power", -+ .gpio = ARCHER_C25_V1_GPIO_LED_POWER, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:wps", -+ .gpio = ARCHER_C25_V1_GPIO_LED_WPS, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:wlan2g", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN2, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:wlan5g", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN5, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:lan1", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN1, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:lan2", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN2, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:lan3", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN3, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:lan4", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN4, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:green:wan", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_WAN_GREEN, -+ .active_low = 1, -+ }, { -+ .name = "archer-c25-v1:amber:wan", -+ .gpio = ARCHER_C25_74HC_GPIO_LED_WAN_AMBER, -+ .active_low = 1, -+ }, -+}; -+ -+static struct gpio_keys_button archer_c25_v1_gpio_keys[] __initdata = { -+ { -+ .desc = "Reset button", -+ .type = EV_KEY, -+ .code = KEY_RESTART, -+ .debounce_interval = ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C25_V1_GPIO_BTN_RESET, -+ .active_low = 1, -+ }, { -+ .desc = "RFKILL button", -+ .type = EV_KEY, -+ .code = KEY_RFKILL, -+ .debounce_interval = ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C25_V1_GPIO_BTN_RFKILL, -+ .active_low = 1, -+ }, -+}; -+ -+static void __init archer_c25_v1_setup(void) -+{ -+ u8 *mac = (u8 *) KSEG1ADDR(0x1f7e0008); -+ u8 *art = (u8 *) KSEG1ADDR(0x1f7f0000); -+ -+ ath79_register_m25p80(NULL); -+ -+ spi_register_board_info(archer_c25_v1_spi_info, -+ ARRAY_SIZE(archer_c25_v1_spi_info)); -+ -+ platform_device_register(&archer_c25_v1_spi_device); -+ -+ gpio_request_one(ARCHER_C25_GPIO_SHIFT_OE, -+ GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, -+ "LED control"); -+ -+ gpio_request_one(ARCHER_C25_GPIO_SHIFT_SRCLR, -+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, -+ "LED reset"); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c25_v1_leds_gpio), -+ archer_c25_v1_leds_gpio); -+ -+ ath79_register_gpio_keys_polled(-1, ARCHER_C25_V1_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(archer_c25_v1_gpio_keys), -+ archer_c25_v1_gpio_keys); -+ -+ ath79_register_mdio(0, 0x0); -+ ath79_register_mdio(1, 0x0); -+ -+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); -+ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1); -+ -+ /* WAN port */ -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -+ ath79_eth0_data.speed = SPEED_100; -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_mask = BIT(4); -+ ath79_register_eth(0); -+ -+ /* LAN ports */ -+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -+ ath79_eth1_data.speed = SPEED_1000; -+ ath79_eth1_data.duplex = DUPLEX_FULL; -+ ath79_switch_data.phy_poll_mask |= BIT(4); -+ ath79_switch_data.phy4_mii_en = 1; -+ ath79_register_eth(1); -+ -+ ath79_register_wmac(art + ARCHER_C25_V1_WMAC_CALDATA_OFFSET, mac); -+ ap91_pci_init(NULL, NULL); -+} -+ -+MIPS_MACHINE(ATH79_MACH_ARCHER_C25_V1, "ARCHER-C25-V1", "TP-LINK Archer C25 v1", -+ archer_c25_v1_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index a12685cd11a7a6cefe9b69991a5e41db55ccea85..8864e0deda57b926e88dceebd26056a2f8099380 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -40,6 +40,7 @@ enum ath79_mach_type { - ATH79_MACH_AP152, /* Atheros AP152 reference board */ - ATH79_MACH_AP90Q, /* YunCore AP90Q */ - ATH79_MACH_AP96, /* Atheros AP96 */ -+ ATH79_MACH_ARCHER_C25_V1, /* TP-LINK Archer C25 V1 board */ - ATH79_MACH_ARCHER_C5, /* TP-LINK Archer C5 board */ - ATH79_MACH_ARCHER_C7, /* TP-LINK Archer C7 board */ - ATH79_MACH_ARCHER_C7_V2, /* TP-LINK Archer C7 V2 board */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 9cd6c6372ac8f7e509a0a2422616097c1c19edf6..6933654e575a1ef2c92e4c656696a479cba4c594 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -103,6 +103,22 @@ $(Device/tplink) - IMAGE_SIZE := 15872k - endef - -+define Device/archer-c25-v1 -+ DEVICE_TITLE := TP-LINK Archer C25 v1 -+ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 -+ BOARDNAME := ARCHER-C25-V1 -+ TPLINK_BOARD_NAME := ARCHER-C25-V1 -+ DEVICE_PROFILE := ARCHERC25V1 -+ IMAGE_SIZE := 7808k -+ LOADER_TYPE := elf -+ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma -+ IMAGES := sysupgrade.bin factory.bin -+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade -+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -+ MTDPARTS := spi0.0:128k(factory-uboot)ro,64k(u-boot)ro,1536k(kernel),6272k(rootfs),128k(config)ro,64k(art)ro,7808k@0x30000(firmware) -+endef -+TARGET_DEVICES += archer-c25-v1 -+ - define Device/cpe510-520 - DEVICE_TITLE := TP-LINK CPE510/520 - DEVICE_PACKAGES := rssileds -diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default -index f8d255fd87b8c53511b34b42f4117422218219fe..376835a703f91532300d0dd7c8ef66704acc6e05 100644 ---- a/target/linux/ar71xx/mikrotik/config-default -+++ b/target/linux/ar71xx/mikrotik/config-default -@@ -16,6 +16,7 @@ - # CONFIG_ATH79_MACH_AP152 is not set - # CONFIG_ATH79_MACH_AP90Q is not set - # CONFIG_ATH79_MACH_AP96 is not set -+# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C7 is not set - # CONFIG_ATH79_MACH_ARDUINO_YUN is not set - # CONFIG_ATH79_MACH_AW_NR580 is not set -diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default -index c1b5e61c3e9e5f02979584f72621f5e54cde2e36..62be218e33cc6366ea89f363983f36523c419650 100644 ---- a/target/linux/ar71xx/nand/config-default -+++ b/target/linux/ar71xx/nand/config-default -@@ -9,6 +9,7 @@ - # CONFIG_ATH79_MACH_AP136 is not set - # CONFIG_ATH79_MACH_AP147 is not set - # CONFIG_ATH79_MACH_AP96 is not set -+# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C7 is not set - # CONFIG_ATH79_MACH_AW_NR580 is not set - # CONFIG_ATH79_MACH_CAP324 is not set diff --git a/patches/lede/0039-firmware-utils-tplink-safeloader-add-TP-Link-Archer-C25-v1.patch b/patches/lede/0039-firmware-utils-tplink-safeloader-add-TP-Link-Archer-C25-v1.patch deleted file mode 100644 index 77817224..00000000 --- a/patches/lede/0039-firmware-utils-tplink-safeloader-add-TP-Link-Archer-C25-v1.patch +++ /dev/null @@ -1,102 +0,0 @@ -From: Ludwig Thomeczek -Date: Sat, 13 May 2017 11:40:48 +0200 -Subject: firmware-utils: tplink-safeloader: add TP-Link Archer C25 v1 - -This adds the necessary firmware layout definitions for the Archer C25. -It has an addtional partition containing some static data ("extra-para") -without which no factory flash is possible, therefore put_data() has been -added. - -Signed-off-by: Ludwig Thomeczek - -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 4e3d2058b286fb7220e5a8308dcdfb25626a1b59..7617566829e159ae9fec00d5de95919a0fb234c6 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -293,6 +293,48 @@ static struct device_info boards[] = { - .last_sysupgrade_partition = "file-system" - }, - -+ /** Firmware layout for the C25v1 */ -+ { -+ .id = "ARCHER-C25-V1", -+ .support_list = -+ "SupportList:\n" -+ "{product_name:ArcherC25,product_ver:1.0.0,special_id:00000000}\n" -+ "{product_name:ArcherC25,product_ver:1.0.0,special_id:55530000}\n" -+ "{product_name:ArcherC25,product_ver:1.0.0,special_id:45550000}\n", -+ .support_trail = '\x00', -+ .soft_ver = "soft_ver:1.0.0\n", -+ -+ /** -+ We use a bigger os-image partition than the stock images (and thus -+ smaller file-system), as our kernel doesn't fit in the stock firmware's -+ 1MB os-image. -+ */ -+ .partitions = { -+ {"factory-boot", 0x00000, 0x20000}, -+ {"fs-uboot", 0x20000, 0x10000}, -+ {"os-image", 0x30000, 0x180000}, /* Stock: base 0x30000 size 0x100000 */ -+ {"file-system", 0x1b0000, 0x620000}, /* Stock: base 0x130000 size 0x6a0000 */ -+ {"user-config", 0x7d0000, 0x04000}, -+ {"default-mac", 0x7e0000, 0x00100}, -+ {"device-id", 0x7e0100, 0x00100}, -+ {"extra-para", 0x7e0200, 0x00100}, -+ {"pin", 0x7e0300, 0x00100}, -+ {"support-list", 0x7e0400, 0x00400}, -+ {"soft-version", 0x7e0800, 0x00400}, -+ {"product-info", 0x7e0c00, 0x01400}, -+ {"partition-table", 0x7e2000, 0x01000}, -+ {"profile", 0x7e3000, 0x01000}, -+ {"default-config", 0x7e4000, 0x04000}, -+ {"merge-config", 0x7ec000, 0x02000}, -+ {"qos-db", 0x7ee000, 0x02000}, -+ {"radio", 0x7f0000, 0x10000}, -+ {NULL, 0, 0} -+ }, -+ -+ .first_sysupgrade_partition = "os-image", -+ .last_sysupgrade_partition = "file-system", -+ }, -+ - /** Firmware layout for the C5 */ - { - .id = "ARCHER-C5-V2", -@@ -615,6 +657,15 @@ static struct image_partition_entry read_file(const char *part_name, const char - return entry; - } - -+/** Creates a new image partition from arbitrary data */ -+static struct image_partition_entry put_data(const char *part_name, const char *datain, size_t len) { -+ -+ struct image_partition_entry entry = alloc_image_partition(part_name, len); -+ -+ memcpy(entry.data, datain, len); -+ -+ return entry; -+} - - /** - Copies a list of image partitions into an image buffer and generates the image partition table while doing so -@@ -796,7 +847,8 @@ static void build_image(const char *output, - bool add_jffs2_eof, - bool sysupgrade, - const struct device_info *info) { -- struct image_partition_entry parts[6] = {}; -+ -+ struct image_partition_entry parts[7] = {}; - - parts[0] = make_partition_table(info->partitions); - parts[1] = make_soft_version(rev); -@@ -804,6 +856,11 @@ static void build_image(const char *output, - parts[3] = read_file("os-image", kernel_image, false); - parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); - -+ if (strcasecmp(info->id, "ARCHER-C25-V1") == 0) { -+ const char mdat[11] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; -+ parts[5] = put_data("extra-para", mdat, 11); -+ } -+ - size_t len; - void *image; - if (sysupgrade) diff --git a/patches/lede/0040-firmware-utils-tplink-safeloader-support-strings-as-soft_version.patch b/patches/lede/0040-firmware-utils-tplink-safeloader-support-strings-as-soft_version.patch deleted file mode 100644 index 3a27379c..00000000 --- a/patches/lede/0040-firmware-utils-tplink-safeloader-support-strings-as-soft_version.patch +++ /dev/null @@ -1,152 +0,0 @@ -From: Jan Niehusmann -Date: Fri, 19 May 2017 09:42:24 +0200 -Subject: firmware-utils: tplink-safeloader: support strings as soft_version - -Some TP-Link routers (C25, C59, C60) contain a version string instead -of a binary structure in the soft_version partition. - -Flashing LEDE from the original firmware's GUI, this version string -taken from the soft_ver partition of the firmware image is written to -the router's config partition. - -When using tftp recovery to go back to the original Archer C25 firmware, -a version check compares that version to the version of the firmware to -be flashed. - -Without proper contents in the config partition, reverting to the -original firmware fails. - -Therefore, write the string "soft_ver:1.0.0\n" to that soft_ver -partition. - -Signed-off-by: Jan Niehusmann - -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 7617566829e159ae9fec00d5de95919a0fb234c6..24684268b1a3fe491c4eb876a5ebefc700f2e56e 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -75,6 +75,7 @@ struct device_info { - const char *vendor; - const char *support_list; - char support_trail; -+ const char *soft_ver; - const struct flash_partition_entry partitions[MAX_PARTITIONS+1]; - const char *first_sysupgrade_partition; - const char *last_sysupgrade_partition; -@@ -130,6 +131,7 @@ static struct device_info boards[] = { - "CPE220(TP-LINK|US|N300-2):1.1\r\n" - "CPE220(TP-LINK|EU|N300-2):1.1\r\n", - .support_trail = '\xff', -+ .soft_ver = NULL, - - .partitions = { - {"fs-uboot", 0x00000, 0x20000}, -@@ -167,6 +169,7 @@ static struct device_info boards[] = { - "CPE520(TP-LINK|US|N300-5):1.1\r\n" - "CPE520(TP-LINK|EU|N300-5):1.1\r\n", - .support_trail = '\xff', -+ .soft_ver = NULL, - - .partitions = { - {"fs-uboot", 0x00000, 0x20000}, -@@ -198,6 +201,7 @@ static struct device_info boards[] = { - "WBS210(TP-LINK|US|N300-2):1.20\r\n" - "WBS210(TP-LINK|EU|N300-2):1.20\r\n", - .support_trail = '\xff', -+ .soft_ver = NULL, - - .partitions = { - {"fs-uboot", 0x00000, 0x20000}, -@@ -229,6 +233,7 @@ static struct device_info boards[] = { - "WBS510(TP-LINK|US|N300-5):1.20\r\n" - "WBS510(TP-LINK|EU|N300-5):1.20\r\n", - .support_trail = '\xff', -+ .soft_ver = NULL, - - .partitions = { - {"fs-uboot", 0x00000, 0x20000}, -@@ -259,6 +264,7 @@ static struct device_info boards[] = { - "SupportList:\r\n" - "{product_name:Archer C2600,product_ver:1.0.0,special_id:00000000}\r\n", - .support_trail = '\x00', -+ .soft_ver = NULL, - - .partitions = { - {"SBL1", 0x00000, 0x20000}, -@@ -345,6 +351,7 @@ static struct device_info boards[] = { - "product_ver:2.0.0," - "special_id:00000000}\r\n", - .support_trail = '\x00', -+ .soft_ver = NULL, - - .partitions = { - {"fs-uboot", 0x00000, 0x40000}, -@@ -379,6 +386,7 @@ static struct device_info boards[] = { - "product_ver:1.0.0," - "special_id:00000000}\n", - .support_trail = '\x00', -+ .soft_ver = NULL, - - .partitions = { - {"fs-uboot", 0x00000, 0x40000}, -@@ -411,6 +419,7 @@ static struct device_info boards[] = { - "SupportList:\r\n" - "EAP120(TP-LINK|UN|N300-2):1.0\r\n", - .support_trail = '\xff', -+ .soft_ver = NULL, - - .partitions = { - {"fs-uboot", 0x00000, 0x20000}, -@@ -440,6 +449,7 @@ static struct device_info boards[] = { - "SupportList:\n" - "{product_name:TL-WR1043ND,product_ver:4.0.0,special_id:45550000}\n", - .support_trail = '\x00', -+ .soft_ver = NULL, - - /** - We use a bigger os-image partition than the stock images (and thus -@@ -483,6 +493,7 @@ static struct device_info boards[] = { - "{product_name:RE450,product_ver:1.0.0,special_id:4B520000}\r\n" - "{product_name:RE450,product_ver:1.0.0,special_id:55534100}\r\n", - .support_trail = '\x00', -+ .soft_ver = NULL, - - /** - The flash partition table for RE450; -@@ -611,6 +622,23 @@ static struct image_partition_entry make_soft_version(uint32_t rev) { - return entry; - } - -+static struct image_partition_entry make_soft_version_from_string(const char *soft_ver) { -+ /** String length _including_ the terminating zero byte */ -+ uint32_t ver_len = strlen(soft_ver) + 1; -+ /** Partition contains 64 bit header, the version string, and one additional null byte */ -+ size_t partition_len = 2*sizeof(uint32_t) + ver_len + 1; -+ struct image_partition_entry entry = alloc_image_partition("soft-version", partition_len); -+ -+ uint32_t *len = (uint32_t *)entry.data; -+ len[0] = htonl(ver_len); -+ len[1] = 0; -+ memcpy(&len[2], soft_ver, ver_len); -+ -+ entry.data[partition_len - 1] = 0; -+ -+ return entry; -+} -+ - /** Generates the support-list partition */ - static struct image_partition_entry make_support_list(const struct device_info *info) { - size_t len = strlen(info->support_list); -@@ -851,7 +879,11 @@ static void build_image(const char *output, - struct image_partition_entry parts[7] = {}; - - parts[0] = make_partition_table(info->partitions); -- parts[1] = make_soft_version(rev); -+ if (info->soft_ver) -+ parts[1] = make_soft_version_from_string(info->soft_ver); -+ else -+ parts[1] = make_soft_version(rev); -+ - parts[2] = make_support_list(info); - parts[3] = read_file("os-image", kernel_image, false); - parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); diff --git a/patches/lede/0041-add-CONFIG_GPIO_74X164-and-CONFIG_SPI_GPIO-for-Archer-C25.patch b/patches/lede/0041-add-CONFIG_GPIO_74X164-and-CONFIG_SPI_GPIO-for-Archer-C25.patch deleted file mode 100644 index 53438088..00000000 --- a/patches/lede/0041-add-CONFIG_GPIO_74X164-and-CONFIG_SPI_GPIO-for-Archer-C25.patch +++ /dev/null @@ -1,30 +0,0 @@ -From: Andreas Ziegler -Date: Thu, 3 Aug 2017 03:34:19 +0200 -Subject: add CONFIG_GPIO_74X164 and CONFIG_SPI_GPIO for Archer C25 - -backport from e39dc8d823c86559eedbbdcee5f5c14b827fed0f -introduced for Archer C59/C60 - -Based-on-patch-by: Henryk Heisig -Signed-off-by: Andreas Ziegler - -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index e10401d42ae06506f82f2f5538fbc7df79fd4c65..c82fcf09228be7063967f2517e0942651234afb8 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -272,6 +272,7 @@ CONFIG_GENERIC_TIME_VSYSCALL=y - CONFIG_GPIOLIB=y - CONFIG_GPIOLIB_IRQCHIP=y - CONFIG_GPIO_DEVRES=y -+CONFIG_GPIO_74X164=y - # CONFIG_GPIO_LATCH is not set - CONFIG_GPIO_NXP_74HC153=y - CONFIG_GPIO_PCF857X=y -@@ -429,6 +430,7 @@ CONFIG_SOC_QCA956X=y - CONFIG_SPI=y - CONFIG_SPI_ATH79=y - CONFIG_SPI_BITBANG=y -+CONFIG_SPI_GPIO=y - CONFIG_SPI_MASTER=y - # CONFIG_SPI_RB4XX is not set - # CONFIG_SPI_VSC7385 is not set diff --git a/patches/lede/0042-ramips-use-GPIO_ACTIVE-macros-in-UBNT-ERX.dts.patch b/patches/lede/0042-ramips-use-GPIO_ACTIVE-macros-in-UBNT-ERX.dts.patch deleted file mode 100644 index e5126c64..00000000 --- a/patches/lede/0042-ramips-use-GPIO_ACTIVE-macros-in-UBNT-ERX.dts.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Sven Roederer -Date: Fri, 5 May 2017 22:18:44 +0200 -Subject: ramips: use GPIO_ACTIVE macros in UBNT-ERX.dts - -- reorder includes -- use GPIO_ACTIVE_LOW macro instead of hardcoded "1" - -Signed-off-by: Sven Roederer - -diff --git a/target/linux/ramips/dts/UBNT-ERX.dts b/target/linux/ramips/dts/UBNT-ERX.dts -index 0b2da95b30f0e181e1929502b8ef1aa50a684f69..cf86bbb7e67b1c521c279367ee9e99fee88fae85 100644 ---- a/target/linux/ramips/dts/UBNT-ERX.dts -+++ b/target/linux/ramips/dts/UBNT-ERX.dts -@@ -1,9 +1,10 @@ --#include -- - /dts-v1/; - - #include "mt7621.dtsi" - -+#include -+#include -+ - / { - model = "UBNT-ERX"; - -@@ -24,7 +25,7 @@ - - reset { - label = "reset"; -- gpios = <&gpio0 12 1>; -+ gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; - linux,code = ; - }; - }; diff --git a/patches/lede/0043-ramips-add-support-for-Ubiquiti-EdgeRouter-X-SFP.patch b/patches/lede/0043-ramips-add-support-for-Ubiquiti-EdgeRouter-X-SFP.patch deleted file mode 100644 index 18a91d4e..00000000 --- a/patches/lede/0043-ramips-add-support-for-Ubiquiti-EdgeRouter-X-SFP.patch +++ /dev/null @@ -1,413 +0,0 @@ -From: Sven Roederer -Date: Mon, 29 May 2017 11:24:49 +0200 -Subject: ramips: add support for Ubiquiti EdgeRouter X-SFP - -This patch adds support for the Ubiquiti EdgeRouter X-SFP and -improves support for the EdgeRouter X (PoE-passthrough). - -Specification: -- SoC: MediaTek MT7621AT -- Flash: 256 MiB -- RAM: 265 MiB -- Ethernet: 5 x LAN (1000 Mbps) -- UART: 1 x UART on PCB (3.3V, RX, TX, GND) - 57600 8N1 -- EdgeRouter X: - - 1 x PoE-Passtrough (Eth4) - - powered by Wallwart or passive PoE -- EdgeRouter X-SFP: - - 5 x PoE-Out (24V, passive) - - 1 x SFP (unknown status) - - powered by Wallwart (24V) - -Doesn't work: -* SoC has crypto engine but no open driver. -* SoC has nat acceleration, but no open driver. -* This router has 2MB spi flash soldered in but MT - nand/spi drivers do not support pin sharing, - so it is not accessable and disabled. Stock - firmware could read it and it was empty. - -Installation - -via vendor firmware: -- build an Initrd-image (> 3MiB) and upload the factory-image -- initrd can have luci-mod-failsafe -- flash final firmware via LuCI / sysupgrade on rebooted system - -via TFTP: -- stop uboot into tftp-load into option "1" -- upload factory.bin image - -Signed-off-by: Sven Roederer - -diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network -index 17d25b1954e69d6d2a02ad94885cb54486fc904c..5a4042339c6761703578e014612062ac78babd9d 100755 ---- a/target/linux/ramips/base-files/etc/board.d/02_network -+++ b/target/linux/ramips/base-files/etc/board.d/02_network -@@ -145,6 +145,7 @@ ramips_setup_interfaces() - rb750gr3|\ - rt-n14u|\ - ubnt-erx|\ -+ ubnt-erx-sfp|\ - ur-326n4g|\ - wrtnode|\ - wrtnode2p | \ -diff --git a/target/linux/ramips/base-files/etc/board.d/03_gpio_switches b/target/linux/ramips/base-files/etc/board.d/03_gpio_switches -new file mode 100755 -index 0000000000000000000000000000000000000000..859dfb31f51244e69d3dce5fc80b329cb57729f3 ---- /dev/null -+++ b/target/linux/ramips/base-files/etc/board.d/03_gpio_switches -@@ -0,0 +1,25 @@ -+#!/bin/sh -+ -+. /lib/functions/uci-defaults.sh -+. /lib/ramips.sh -+ -+board_config_update -+ -+board=$(ramips_board_name) -+ -+case "$board" in -+ubnt-erx) -+ ucidef_add_gpio_switch "poe_passthrough" "PoE Passthrough" "0" -+ ;; -+ubnt-erx-sfp) -+ ucidef_add_gpio_switch "poe_power_port0" "PoE Power Port0" "496" -+ ucidef_add_gpio_switch "poe_power_port1" "PoE Power Port1" "497" -+ ucidef_add_gpio_switch "poe_power_port2" "PoE Power Port2" "498" -+ ucidef_add_gpio_switch "poe_power_port3" "PoE Power Port3" "499" -+ ucidef_add_gpio_switch "poe_power_port4" "PoE Power Port4" "500" -+ ;; -+esac -+ -+board_config_flush -+ -+exit 0 -diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh -index 17ada648931f16d3e85630dd341defb89ba50d6f..b1091f66b2897a19bd01d4a26a1b3647656fa62b 100755 ---- a/target/linux/ramips/base-files/lib/ramips.sh -+++ b/target/linux/ramips/base-files/lib/ramips.sh -@@ -466,6 +466,9 @@ ramips_board_detect() { - *"UBNT-ERX") - name="ubnt-erx" - ;; -+ *"UBNT-ERX-SFP") -+ name="ubnt-erx-sfp" -+ ;; - *"UR-326N4G") - name="ur-326n4g" - ;; -diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh -index a5cca2080d3b96cef92286b1b15f4f8832d9f8c5..d3efc2dd37ed855a1c0e966e448b67ae73324d5f 100755 ---- a/target/linux/ramips/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh -@@ -234,7 +234,8 @@ platform_check_image() { - } - return 0 - ;; -- ubnt-erx) -+ ubnt-erx|\ -+ ubnt-erx-sfp) - nand_do_platform_check "$board" "$1" - return $?; - ;; -@@ -248,7 +249,8 @@ platform_nand_pre_upgrade() { - local board=$(ramips_board_name) - - case "$board" in -- ubnt-erx) -+ ubnt-erx|\ -+ ubnt-erx-sfp) - platform_upgrade_ubnt_erx "$ARGV" - ;; - esac -@@ -258,7 +260,8 @@ platform_do_upgrade() { - local board=$(ramips_board_name) - - case "$board" in -- ubnt-erx) -+ ubnt-erx|\ -+ ubnt-erx-sfp) - nand_do_upgrade "$ARGV" - ;; - *) -diff --git a/target/linux/ramips/dts/UBNT-ER-e50.dtsi b/target/linux/ramips/dts/UBNT-ER-e50.dtsi -new file mode 100644 -index 0000000000000000000000000000000000000000..b38c7194942db9f0a713fd8f707b53820d07c78e ---- /dev/null -+++ b/target/linux/ramips/dts/UBNT-ER-e50.dtsi -@@ -0,0 +1,106 @@ -+#include "mt7621.dtsi" -+ -+#include -+#include -+ -+/ { -+ compatible = "ubiquiti,edgerouterx"; -+ -+ memory@0 { -+ device_type = "memory"; -+ reg = <0x0 0x10000000>; -+ }; -+ -+ chosen { -+ bootargs = "console=ttyS0,57600"; -+ }; -+ -+ gpio-keys-polled { -+ compatible = "gpio-keys-polled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ poll-interval = <20>; -+ -+ reset { -+ label = "reset"; -+ gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ }; -+ }; -+}; -+ -+ðernet { -+ mtd-mac-address = <&factory 0x22>; -+}; -+ -+&nand { -+ status = "okay"; -+ -+ partition@0 { -+ label = "u-boot"; -+ reg = <0x0 0x80000>; -+ read-only; -+ }; -+ -+ partition@80000 { -+ label = "u-boot-env"; -+ reg = <0x80000 0x60000>; -+ read-only; -+ }; -+ -+ factory: partition@e0000 { -+ label = "factory"; -+ reg = <0xe0000 0x60000>; -+ }; -+ -+ partition@140000 { -+ label = "kernel1"; -+ reg = <0x140000 0x300000>; -+ }; -+ -+ partition@440000 { -+ label = "kernel2"; -+ reg = <0x440000 0x300000>; -+ }; -+ -+ partition@740000 { -+ label = "ubi"; -+ reg = <0x740000 0xf7c0000>; -+ }; -+}; -+ -+&pinctrl { -+ state_default: pinctrl0 { -+ gpio { -+ ralink,group = "uart2", "uart3", "i2c", "pcie", "rgmii2", "jtag"; -+ ralink,function = "gpio"; -+ }; -+ }; -+}; -+ -+&spi0 { -+ /* This board has 2Mb spi flash soldered in and visible -+ from manufacturer's firmware. -+ But this SoC shares spi and nand pins, -+ and current driver does't handle this sharing well */ -+ status = "disabled"; -+ -+ m25p80@0 { -+ #address-cells = <1>; -+ #size-cells = <1>; -+ compatible = "jedec,spi-nor"; -+ reg = <1>; -+ spi-max-frequency = <10000000>; -+ m25p,chunked-io = <32>; -+ -+ partition@0 { -+ label = "spi"; -+ reg = <0x0 0x200000>; -+ read-only; -+ }; -+ }; -+}; -+ -+&xhci { -+ status = "disabled"; -+}; -diff --git a/target/linux/ramips/dts/UBNT-ERX-SFP.dts b/target/linux/ramips/dts/UBNT-ERX-SFP.dts -new file mode 100644 -index 0000000000000000000000000000000000000000..ca26d817211e5a5a20a7da926cd2aee726875780 ---- /dev/null -+++ b/target/linux/ramips/dts/UBNT-ERX-SFP.dts -@@ -0,0 +1,24 @@ -+/dts-v1/; -+ -+#include "UBNT-ER-e50.dtsi" -+ -+#include -+ -+/ { -+ model = "UBNT-ERX-SFP"; -+ compatible = "ubiquiti,edgerouterx-sfp"; -+ -+ i2c-gpio { -+ compatible = "i2c-gpio"; -+ gpios = <&gpio0 3 GPIO_ACTIVE_HIGH /* sda */ -+ &gpio0 4 GPIO_ACTIVE_HIGH /* scl */ -+ >; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ pca9555@25 { -+ compatible = "pca9555"; -+ reg = <0x25>; -+ }; -+ }; -+}; -diff --git a/target/linux/ramips/dts/UBNT-ERX.dts b/target/linux/ramips/dts/UBNT-ERX.dts -index cf86bbb7e67b1c521c279367ee9e99fee88fae85..556d1156c352f76a94c6e39bc3b58c88f08815be 100644 ---- a/target/linux/ramips/dts/UBNT-ERX.dts -+++ b/target/linux/ramips/dts/UBNT-ERX.dts -@@ -1,108 +1,7 @@ - /dts-v1/; - --#include "mt7621.dtsi" -- --#include --#include -+#include "UBNT-ER-e50.dtsi" - - / { - model = "UBNT-ERX"; -- -- memory@0 { -- device_type = "memory"; -- reg = <0x0 0x10000000>; -- }; -- -- chosen { -- bootargs = "console=ttyS0,57600"; -- }; -- -- gpio-keys-polled { -- compatible = "gpio-keys-polled"; -- #address-cells = <1>; -- #size-cells = <0>; -- poll-interval = <20>; -- -- reset { -- label = "reset"; -- gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; -- linux,code = ; -- }; -- }; --}; -- --ðernet { -- mtd-mac-address = <&factory 0x22>; --}; -- --&nand { -- status = "okay"; -- -- partition@0 { -- label = "u-boot"; -- reg = <0x0 0x80000>; -- read-only; -- }; -- -- partition@80000 { -- label = "u-boot-env"; -- reg = <0x80000 0x60000>; -- read-only; -- }; -- -- factory: partition@e0000 { -- label = "factory"; -- reg = <0xe0000 0x60000>; -- }; -- -- partition@140000 { -- label = "kernel1"; -- reg = <0x140000 0x300000>; -- }; -- -- partition@440000 { -- label = "kernel2"; -- reg = <0x440000 0x300000>; -- }; -- -- partition@740000 { -- label = "ubi"; -- reg = <0x740000 0xf7c0000>; -- }; --}; -- --&pinctrl { -- state_default: pinctrl0 { -- gpio { -- ralink,group = "uart2", "uart3", "i2c", "pcie", "rgmii2", "jtag"; -- ralink,function = "gpio"; -- }; -- }; --}; -- --&spi0 { -- /* This board has 2Mb spi flash soldered in and visible -- from manufacturer's firmware. -- But this SoC shares spi and nand pins, -- and current driver does't handle this sharing well */ -- status = "disabled"; -- -- m25p80@0 { -- #address-cells = <1>; -- #size-cells = <1>; -- compatible = "jedec,spi-nor"; -- reg = <1>; -- spi-max-frequency = <10000000>; -- m25p,chunked-io = <32>; -- -- partition@0 { -- label = "spi"; -- reg = <0x0 0x200000>; -- read-only; -- }; -- }; --}; -- --&xhci { -- status = "disabled"; - }; -diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk -index 15ea9a13b6310b1454b5b3b92cd8ed30ee6255b3..8218bea84410536151a216cd2cc0300369ad977a 100644 ---- a/target/linux/ramips/image/mt7621.mk -+++ b/target/linux/ramips/image/mt7621.mk -@@ -144,6 +144,19 @@ define Device/ubnt-erx - endef - TARGET_DEVICES += ubnt-erx - -+define Device/ubnt-erx-sfp -+ DTS := UBNT-ERX-SFP -+ FILESYSTEMS := squashfs -+ KERNEL_SIZE := 3145728 -+ KERNEL := $(KERNEL_DTB) | uImage lzma -+ IMAGES := sysupgrade.tar -+ KERNEL_INITRAMFS := $$(KERNEL) | ubnt-erx-factory-image $(KDIR)/tmp/$$(KERNEL_INITRAMFS_PREFIX)-factory.tar -+ IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata -+ DEVICE_TITLE := Ubiquiti EdgeRouter X-SFP -+ DEVICE_PACKAGES := -kmod-mt76 -kmod-rt2x00-lib -kmod-mac80211 -kmod-cfg80211 -wpad-mini -iwinfo kmod-i2c-algo-pca kmod-gpio-pca953x kmod-i2c-gpio-custom -+endef -+TARGET_DEVICES += ubnt-erx-sfp -+ - define Device/vr500 - DTS := VR500 - IMAGE_SIZE := 66453504 diff --git a/patches/lede/0044-ar71xx-add-support-for-TP-Link-TL-WR1043N-v5.patch b/patches/lede/0044-ar71xx-add-support-for-TP-Link-TL-WR1043N-v5.patch deleted file mode 100644 index af983e74..00000000 --- a/patches/lede/0044-ar71xx-add-support-for-TP-Link-TL-WR1043N-v5.patch +++ /dev/null @@ -1,367 +0,0 @@ -From: Tim Thorpe -Date: Mon, 25 Sep 2017 04:38:49 -0500 -Subject: ar71xx: add support for TP-Link TL-WR1043N v5 - -TP-Link TL-WR1043N v5 appears to be identical to the TL-WR1043ND v4, -except that the USB port has been removed and there is no longer a -removable antenna option. - -The software is more in line with the Archer series in that it uses a -nested bootloader scheme. - -Specifications: - - - QCA9563 at 775 MHz - - 64 MB RAM - - 16 MB flash - - 3 (non-detachable) Antennas / 450 Mbit - - 1x/4x WAN/LAN Gbps Ethernet (QCA8337) - - reset and Wi-Fi buttons - -Signed-off-by: Tim Thorpe -Signed-off-by: Ludwig Thomeczek - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index e1efb561b33da4dcfcb82ee953cd888170476dfb..e67b5e38561e841b88e486341950c52e1d454322 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -666,14 +666,20 @@ tl-wr1043nd-v2) - ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1" - ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" - ;; -+tl-wr1043n-v5|\ - tl-wr1043nd-v4) -- ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1" - ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" - ucidef_set_led_switch "wan" "WAN" "tp-link:green:wan" "switch0" "0x20" - ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10" - ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08" - ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04" - ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02" -+ -+ case "$board" in -+ tl-wr1043nd-v4) -+ ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1" -+ ;; -+ esac - ;; - tl-wr2543n) - ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1" -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index cefb7413eac6ffc50e67f1eaf63def749314428b..454abe6a5005621967dd96e0282e7bce2a0b127e 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -243,7 +243,8 @@ ar71xx_setup_interfaces() - mynet-n750|\ - sr3200|\ - wndr3700v4|\ -- wndr4300) -+ wndr4300|\ -+ tl-wr1043n-v5) - ucidef_add_switch "switch0" \ - "0@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" - ;; -@@ -487,6 +488,7 @@ ar71xx_setup_macs() - lan_mac=$(mtd_get_mac_binary caldata 0) - wan_mac=$(mtd_get_mac_binary caldata 6) - ;; -+ tl-wr1043n-v5|\ - tl-wr1043nd-v4) - lan_mac=$(mtd_get_mac_binary product-info 8) - wan_mac=$(macaddr_add "$lan_mac" 1) -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 38cc5d7853c79f2a7800a387310a95abb3b4de1b..61db387c9ecefd7090c25a5f5d75fdbf65a44d65 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -359,6 +359,7 @@ get_status_led() { - tl-wdr3320-v2|\ - tl-wdr3500|\ - tl-wr1041n-v2|\ -+ tl-wr1043n-v5|\ - tl-wr1043nd|\ - tl-wr1043nd-v2|\ - tl-wr1043nd-v4|\ -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index fc7d862c2911e96f76622cbed23e99863814da63..8f8158bac8a28db4f4f15ce5c37f48a21084dc03 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -947,6 +947,9 @@ ar71xx_board_detect() { - *"TL-WR1043ND v4") - name="tl-wr1043nd-v4" - ;; -+ *"TL-WR1043N v5") -+ name="tl-wr1043n-v5" -+ ;; - *TL-WR2543N*) - name="tl-wr2543n" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index 6258713dd0e3325ab109689f0ed3b51e27c41f89..774e3c8964ef724d1efbae56434aeaa9f1c298a4 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -269,6 +269,7 @@ platform_check_image() { - tew-712br|\ - tew-732br|\ - tew-823dru|\ -+ tl-wr1043n-v5|\ - unifi-outdoor|\ - unifiac-lite|\ - unifiac-pro|\ -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index c82fcf09228be7063967f2517e0942651234afb8..57b6d2e541d7ef9dea8570ba8de72164d97b9775 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -181,6 +181,7 @@ CONFIG_ATH79_MACH_TL_WR1041N_V2=y - CONFIG_ATH79_MACH_TL_WR1043ND=y - CONFIG_ATH79_MACH_TL_WR1043ND_V2=y - CONFIG_ATH79_MACH_TL_WR1043ND_V4=y -+CONFIG_ATH79_MACH_TL_WR1043N_V5=y - CONFIG_ATH79_MACH_TL_WR2543N=y - CONFIG_ATH79_MACH_TL_WR703N=y - CONFIG_ATH79_MACH_TL_WR720N_V3=y -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index fb2afb965c4641df7cdcaf0920f2d56b3717fa9b..7ad5419f51ec9909d8b59f33178221a7d81ec184 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -1564,6 +1564,15 @@ config ATH79_MACH_TL_WR1041N_V2 - select ATH79_DEV_USB - select ATH79_DEV_WMAC - -+config ATH79_MACH_TL_WR1043N_V5 -+ bool "TP-LINK TL-WR1043N v5 support" -+ select SOC_QCA956X -+ select ATH79_DEV_ETH -+ select ATH79_DEV_GPIO_BUTTONS -+ select ATH79_DEV_LEDS_GPIO -+ select ATH79_DEV_M25P80 -+ select ATH79_DEV_WMAC -+ - config ATH79_MACH_TL_WR1043ND - bool "TP-LINK TL-WR1043ND support" - select SOC_AR913X -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr1043nd-v4.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr1043nd-v4.c -index b1539c5d71a61806b88c50f1a78f6a27d98d7a2d..450819a9e6baa997dab2dfba4c5a19261aae9664 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr1043nd-v4.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr1043nd-v4.c -@@ -5,6 +5,7 @@ - * Copyright (C) 2016 Matthias Schiffer - * Copyright (C) 2016 Andreas Ziegler - * Copyright (C) 2016 Ludwig Thomeczek -+ * Copyright (C) 2017 Tim Thorpe - * - * Derived from: mach-dir-869-a1.c - * -@@ -62,6 +63,8 @@ - #define TL_WR1043_V4_EEPROM_ADDR 0x1fff0000 - #define TL_WR1043_V4_WMAC_CALDATA_OFFSET 0x1000 - -+#define TL_WR1043N_V5_MAC_LOCATION 0x1ff00008 -+ - static struct gpio_led tl_wr1043nd_v4_leds_gpio[] __initdata = { - { - .name = "tp-link:green:wps", -@@ -188,3 +191,82 @@ static void __init tl_wr1043nd_v4_setup(void) - - MIPS_MACHINE(ATH79_MACH_TL_WR1043ND_V4, "TL-WR1043ND-v4", - "TP-LINK TL-WR1043ND v4", tl_wr1043nd_v4_setup); -+ -+static struct gpio_led tl_wr1043n_v5_leds_gpio[] __initdata = { -+ { -+ .name = "tp-link:green:wps", -+ .gpio = TL_WR1043_V4_GPIO_LED_WPS, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:green:system", -+ .gpio = TL_WR1043_V4_GPIO_LED_SYSTEM, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:green:wlan", -+ .gpio = TL_WR1043_V4_GPIO_LED_WLAN, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:green:wan", -+ .gpio = TL_WR1043_V4_GPIO_LED_WAN, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:green:lan1", -+ .gpio = TL_WR1043_V4_GPIO_LED_LAN1, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:green:lan2", -+ .gpio = TL_WR1043_V4_GPIO_LED_LAN2, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:green:lan3", -+ .gpio = TL_WR1043_V4_GPIO_LED_LAN3, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:green:lan4", -+ .gpio = TL_WR1043_V4_GPIO_LED_LAN4, -+ .active_low = 1, -+ }, -+}; -+ -+/* The 1043Nv5 is identical to the 1043NDv4, -+ * only missing the usb and small firmware layout changes */ -+static void __init tl_wr1043nv5_setup(void) -+{ -+ u8 *art = (u8 *) KSEG1ADDR(TL_WR1043_V4_EEPROM_ADDR); -+ u8 *mac = (u8 *) KSEG1ADDR(TL_WR1043N_V5_MAC_LOCATION); -+ -+ ath79_register_m25p80(NULL); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr1043n_v5_leds_gpio), -+ tl_wr1043n_v5_leds_gpio); -+ ath79_register_gpio_keys_polled(-1, TL_WR1043_V4_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(tl_wr1043nd_v4_gpio_keys), -+ tl_wr1043nd_v4_gpio_keys); -+ -+ platform_device_register(&ath79_mdio0_device); -+ -+ mdiobus_register_board_info(tl_wr1043nd_v4_mdio0_info, -+ ARRAY_SIZE(tl_wr1043nd_v4_mdio0_info)); -+ -+ ath79_register_wmac(art + TL_WR1043_V4_WMAC_CALDATA_OFFSET, mac); -+ -+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); -+ -+ /* GMAC0 is connected to an AR8337 switch */ -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII; -+ ath79_eth0_data.speed = SPEED_1000; -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_mask = BIT(0); -+ ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev; -+ ath79_register_eth(0); -+} -+ -+MIPS_MACHINE(ATH79_MACH_TL_WR1043N_V5, "TL-WR1043N-v5", "TP-LINK TL-WR1043N v5", -+ tl_wr1043nv5_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index 8864e0deda57b926e88dceebd26056a2f8099380..9cb4a7f2e1df641232289721b676a9b0149c76e5 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -214,6 +214,7 @@ enum ath79_mach_type { - ATH79_MACH_TL_WDR6500_V2, /* TP-LINK TL-WDR6500 v2 */ - ATH79_MACH_TL_WPA8630, /* TP-Link TL-WPA8630 */ - ATH79_MACH_TL_WR1041N_V2, /* TP-LINK TL-WR1041N v2 */ -+ ATH79_MACH_TL_WR1043N_V5, /* TP-LINK TL-WR1043N v5 */ - ATH79_MACH_TL_WR1043ND, /* TP-LINK TL-WR1043ND */ - ATH79_MACH_TL_WR1043ND_V2, /* TP-LINK TL-WR1043ND v2 */ - ATH79_MACH_TL_WR1043ND_V4, /* TP-LINK TL-WR1043ND v4 */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 6933654e575a1ef2c92e4c656696a479cba4c594..5be7cbfbd4ab7d73d679d52d2581459250e04302 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -858,7 +858,22 @@ define Device/tl-wr1043nd-v4 - IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade - IMAGE/factory.bin := append-rootfs | tplink-safeloader factory - endef --TARGET_DEVICES += tl-wr1043nd-v1 tl-wr1043nd-v2 tl-wr1043nd-v3 tl-wr1043nd-v4 -+ -+define Device/tl-wr1043n-v5 -+ DEVICE_TITLE := TP-LINK TL-WR1043N v5 -+ BOARDNAME := TL-WR1043N-v5 -+ SUPPORTED_DEVICES := tl-wr1043n-v5 -+ DEVICE_PROFILE := TLWR1043 -+ MTDPARTS := spi0.0:128k(factory-uboot)ro,128k(u-boot)ro,15104k(firmware),128k(product-info)ro,640k(config)ro,64k(partition-table)ro,128k(logs)ro,64k(art)ro -+ IMAGE_SIZE := 15104k -+ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma -+ IMAGES := sysupgrade.bin factory.bin -+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade | \ -+ append-metadata | check-size $$$$(IMAGE_SIZE) -+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -+ TPLINK_BOARD_NAME := TLWR1043NV5 -+endef -+TARGET_DEVICES += tl-wr1043nd-v1 tl-wr1043nd-v2 tl-wr1043nd-v3 tl-wr1043nd-v4 tl-wr1043n-v5 - - define Device/tl-wr2543-v1 - $(Device/tplink-8mlzma) -diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default -index 376835a703f91532300d0dd7c8ef66704acc6e05..f5af38a726f5ce33391223a4dbeb2fc0a8cac613 100644 ---- a/target/linux/ar71xx/mikrotik/config-default -+++ b/target/linux/ar71xx/mikrotik/config-default -@@ -143,6 +143,7 @@ CONFIG_ATH79_MACH_RBSXTLITE=y - # CONFIG_ATH79_MACH_TL_WDR6500_V2 is not set - # CONFIG_ATH79_MACH_TL_WPA8630 is not set - # CONFIG_ATH79_MACH_TL_WR1041N_V2 is not set -+# CONFIG_ATH79_MACH_TL_WR1043N_V5 is not set - # CONFIG_ATH79_MACH_TL_WR1043ND is not set - # CONFIG_ATH79_MACH_TL_WR1043ND_V2 is not set - # CONFIG_ATH79_MACH_TL_WR1043ND_V4 is not set -diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default -index 62be218e33cc6366ea89f363983f36523c419650..5c18f5d594d625f91ff10e21ddc5af2b3b4d768f 100644 ---- a/target/linux/ar71xx/nand/config-default -+++ b/target/linux/ar71xx/nand/config-default -@@ -52,6 +52,7 @@ - # CONFIG_ATH79_MACH_TL_WDR3500 is not set - # CONFIG_ATH79_MACH_TL_WDR4300 is not set - # CONFIG_ATH79_MACH_TL_WR1041N_V2 is not set -+# CONFIG_ATH79_MACH_TL_WR1043N_V5 is not set - # CONFIG_ATH79_MACH_TL_WR1043ND is not set - # CONFIG_ATH79_MACH_TL_WR1043ND_V4 is not set - # CONFIG_ATH79_MACH_TL_WR2543N is not set -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 24684268b1a3fe491c4eb876a5ebefc700f2e56e..478d5d8e9b43bbe37694732c138048c8fe8d807c 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -478,6 +478,42 @@ static struct device_info boards[] = { - .last_sysupgrade_partition = "file-system" - }, - -+ /** Firmware layout for the TL-WR1043 v5 */ -+ { -+ .id = "TLWR1043NV5", -+ .vendor = "", -+ .support_list = -+ "SupportList:\n" -+ "{product_name:TL-WR1043N,product_ver:5.0.0,special_id:45550000}\n" -+ "{product_name:TL-WR1043N,product_ver:5.0.0,special_id:55530000}\n", -+ .support_trail = '\x00', -+ .soft_ver = "soft_ver:1.0.0\n", -+ .partitions = { -+ {"factory-boot", 0x00000, 0x20000}, -+ {"fs-uboot", 0x20000, 0x20000}, -+ {"os-image", 0x40000, 0x180000}, -+ {"file-system", 0x1c0000, 0xd40000}, -+ {"default-mac", 0xf00000, 0x00200}, -+ {"pin", 0xf00200, 0x00200}, -+ {"device-id", 0xf00400, 0x00100}, -+ {"product-info", 0xf00500, 0x0fb00}, -+ {"soft-version", 0xf10000, 0x01000}, -+ {"extra-para", 0xf11000, 0x01000}, -+ {"support-list", 0xf12000, 0x0a000}, -+ {"profile", 0xf1c000, 0x04000}, -+ {"default-config", 0xf20000, 0x10000}, -+ {"user-config", 0xf30000, 0x40000}, -+ {"qos-db", 0xf70000, 0x40000}, -+ {"certificate", 0xfb0000, 0x10000}, -+ {"partition-table", 0xfc0000, 0x10000}, -+ {"log", 0xfd0000, 0x20000}, -+ {"radio", 0xff0000, 0x10000}, -+ {NULL, 0, 0} -+ }, -+ .first_sysupgrade_partition = "os-image", -+ .last_sysupgrade_partition = "file-system" -+ }, -+ - /** Firmware layout for the RE450 */ - { - .id = "RE450", -@@ -888,7 +924,9 @@ static void build_image(const char *output, - parts[3] = read_file("os-image", kernel_image, false); - parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); - -- if (strcasecmp(info->id, "ARCHER-C25-V1") == 0) { -+ /* Some devices need the extra-para partition to accept the firmware */ -+ if (strcasecmp(info->id, "ARCHER-C25-V1") == 0 || -+ strcasecmp(info->id, "TLWR1043NV5") == 0) { - const char mdat[11] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; - parts[5] = put_data("extra-para", mdat, 11); - } diff --git a/patches/lede/0045-ar71xx-add-support-for-TP-LINK-Archer-C7-v4.patch b/patches/lede/0045-ar71xx-add-support-for-TP-LINK-Archer-C7-v4.patch deleted file mode 100644 index 85b54728..00000000 --- a/patches/lede/0045-ar71xx-add-support-for-TP-LINK-Archer-C7-v4.patch +++ /dev/null @@ -1,533 +0,0 @@ -From: Felix Fietkau -Date: Tue, 25 Jul 2017 13:32:47 +0200 -Subject: ar71xx: add support for TP-LINK Archer C7 v4 - -TP-Link Archer C7 v4 is a dual-band AC1750 router, based on Qualcomm/Atheros -QCA9561+QCA9888. - -Specification: - -- 775/650/258 MHz (CPU/DDR/AHB) -- 128 MB of RAM (DDR2) -- 16 MB of FLASH (SPI NOR) -- 3T3R 2.4 GHz -- 3T3R 5 GHz -- 5x 10/100/1000 Mbps Ethernet -- 7x LED, 2x button -- UART header on PCB - -Flash instruction: -1. Upload lede-ar71xx-generic-archer-c7-v4-squashfs-factory.bin via Web interface - -Flash instruction using TFTP recovery: -1. Set PC to fixed ip address 192.168.0.66 -2. Download lede-ar71xx-generic-archer-c7-v4-squashfs-factory.bin -and rename it to ArcherC7v4_tp_recovery.bin -3. Start a tftp server with the file tp_recovery.bin in its root directory -4. Turn off the router -5. Press and hold Reset button -6. Turn on router with the reset button pressed and wait ~15 seconds -7. Release the reset button and after a short time -the firmware should be transferred from the tftp server -8. Wait ~30 second to complete recovery. - -Flash instruction under U-Boot, using UART: - -1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin -2. erase 0x9f040000 +$filesize -3. cp.b $fileaddr 0x9f040000 $filesize -4. reset - -Signed-off-by: Felix Fietkau - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index e67b5e38561e841b88e486341950c52e1d454322..44b1c2837e8392596eed14b4bc0d761042109715 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -53,7 +53,8 @@ ap121f) - ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" - ;; --archer-c25-v1) -+archer-c25-v1|\ -+archer-c7-v4) - ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" "phy1tpt" - ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" -@@ -61,6 +62,12 @@ archer-c25-v1) - ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" "0x08" - ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x04" - ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x02" -+ case "$board" in -+ archer-c7-v4) -+ ucidef_set_led_usbdev "usb1" "USB1" "$board:green:usb1" "1-1" -+ ucidef_set_led_usbdev "usb2" "USB2" "$board:green:usb2" "2-1" -+ ;; -+ esac - ;; - arduino-yun) - ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt" -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 454abe6a5005621967dd96e0282e7bce2a0b127e..86ac949bca12561536ce2c8adb190eb004c162e4 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -386,6 +386,7 @@ ar71xx_setup_interfaces() - ucidef_set_interface_wan "eth0" - ucidef_set_interface_raw "wlan" "wlan0" "dhcp" - ;; -+ archer-c7-v4|\ - tl-wdr4300|\ - tl-wr1041n-v2) - ucidef_add_switch "switch0" \ -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 61db387c9ecefd7090c25a5f5d75fdbf65a44d65..97372bed0ea2fadfab10f22916a1e0d6a9c65725 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -51,6 +51,7 @@ get_status_led() { - status_led="ap135:green:status" - ;; - archer-c25-v1|\ -+ archer-c7-v4|\ - mr12|\ - mr16|\ - nbg6616|\ -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index 68f90de802ddd18e09a1da39c0d56292eea9489c..96b8f6b9a4bdd6a1609a819e72ade315bccfb3c0 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -92,6 +92,7 @@ case "$FIRMWARE" in - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) - ;; -+ archer-c7-v4|\ - archer-c25-v1|\ - tl-wdr6500-v2) - ath10kcal_extract "art" 20480 2116 -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index 8f8158bac8a28db4f4f15ce5c37f48a21084dc03..c32894d95b6b09b4b8b59ba64057c23e71b9f656 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -469,6 +469,9 @@ ar71xx_board_detect() { - *"Archer C5") - name="archer-c5" - ;; -+ *"Archer C7 v4") -+ name="archer-c7-v4" -+ ;; - *"Archer C7") - name="archer-c7" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index 774e3c8964ef724d1efbae56434aeaa9f1c298a4..d6650e7719d268e1a500638b7eda2e15b9251aea 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -215,6 +215,7 @@ platform_check_image() { - ap132|\ - ap90q|\ - archer-c25-v1|\ -+ archer-c7-v4|\ - bullet-m|\ - c-55|\ - carambola2|\ -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index 7ad5419f51ec9909d8b59f33178221a7d81ec184..0a25294c40b5e2d3be825554ec7246a50b9c029b 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -1247,6 +1247,7 @@ config ATH79_MACH_ARCHER_C25_V1 - config ATH79_MACH_ARCHER_C7 - bool "TP-LINK Archer C5/C7/TL-WDR4900 v2 board support" - select SOC_QCA955X -+ select SOC_QCA956X - select ATH79_DEV_AP9X_PCI if PCI - select ATH79_DEV_ETH - select ATH79_DEV_GPIO_BUTTONS -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -index 3365a43ce16fc77b3212b39b92081efe678e8803..a0c73550eb0d5bf07ee731171be9e5ef9ff073e7 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -@@ -58,6 +58,7 @@ obj-$(CONFIG_ATH79_MACH_AP90Q) += mach-ap90q.o - obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += mach-archer-c25-v1.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7.o -+obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7-v4.o - obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN) += mach-arduino-yun.o - obj-$(CONFIG_ATH79_MACH_AW_NR580) += mach-aw-nr580.o - obj-$(CONFIG_ATH79_MACH_BHR_4GRV2) += mach-bhr-4grv2.o -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c -new file mode 100644 -index 0000000000000000000000000000000000000000..64955c79945c0b2c28d5a93be6e45662200e60ed ---- /dev/null -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c -@@ -0,0 +1,260 @@ -+ -+/* -+ * Atheros ARCHER_C7 reference board support -+ * -+ * Copyright (c) 2017 Felix Fietkau -+ * Copyright (c) 2014 The Linux Foundation. All rights reserved. -+ * Copyright (c) 2012 Gabor Juhos -+ * -+ * Permission to use, copy, modify, and/or distribute this software for any -+ * purpose with or without fee is hereby granted, provided that the above -+ * copyright notice and this permission notice appear in all copies. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include "common.h" -+#include "dev-m25p80.h" -+#include "machtypes.h" -+#include "pci.h" -+#include "dev-eth.h" -+#include "dev-gpio-buttons.h" -+#include "dev-leds-gpio.h" -+#include "dev-spi.h" -+#include "dev-usb.h" -+#include "dev-wmac.h" -+ -+ -+#define ARCHER_C7_GPIO_SHIFT_OE 1 -+#define ARCHER_C7_GPIO_SHIFT_SER 14 -+#define ARCHER_C7_GPIO_SHIFT_SRCLK 15 -+#define ARCHER_C7_GPIO_SHIFT_RCLK 16 -+#define ARCHER_C7_GPIO_SHIFT_SRCLR 21 -+ -+#define ARCHER_C7_GPIO_BTN_RESET 5 -+#define ARCHER_C7_GPIO_BTN_WPS_WIFI 2 -+ -+#define ARCHER_C7_GPIO_LED_WLAN5 9 -+#define ARCHER_C7_GPIO_LED_POWER 6 -+#define ARCHER_C7_GPIO_LED_USB1 7 -+#define ARCHER_C7_GPIO_LED_USB2 8 -+ -+#define ARCHER_C7_74HC_GPIO_BASE QCA956X_GPIO_COUNT -+#define ARCHER_C7_GPIO_LED_WPS (ARCHER_C7_74HC_GPIO_BASE + 0) -+#define ARCHER_C7_GPIO_LED_LAN1 (ARCHER_C7_74HC_GPIO_BASE + 1) -+#define ARCHER_C7_GPIO_LED_LAN2 (ARCHER_C7_74HC_GPIO_BASE + 2) -+#define ARCHER_C7_GPIO_LED_LAN3 (ARCHER_C7_74HC_GPIO_BASE + 3) -+#define ARCHER_C7_GPIO_LED_LAN4 (ARCHER_C7_74HC_GPIO_BASE + 4) -+#define ARCHER_C7_GPIO_LED_WAN_GREEN (ARCHER_C7_74HC_GPIO_BASE + 5) -+#define ARCHER_C7_GPIO_LED_WAN_AMBER (ARCHER_C7_74HC_GPIO_BASE + 6) -+#define ARCHER_C7_GPIO_LED_WLAN2 (ARCHER_C7_74HC_GPIO_BASE + 7) -+ -+#define ARCHER_C7_KEYS_POLL_INTERVAL 20 /* msecs */ -+#define ARCHER_C7_KEYS_DEBOUNCE_INTERVAL (3 * ARCHER_C7_KEYS_POLL_INTERVAL) -+ -+#define ARCHER_C7_MAC0_OFFSET 0 -+#define ARCHER_C7_MAC1_OFFSET 6 -+#define ARCHER_C7_WMAC_CALDATA_OFFSET 0x1000 -+ -+#define ARCHER_C7_GPIO_MDC 3 -+#define ARCHER_C7_GPIO_MDIO 4 -+ -+static struct spi_gpio_platform_data archer_c7_v4_spi_data = { -+ .sck = ARCHER_C7_GPIO_SHIFT_SRCLK, -+ .miso = SPI_GPIO_NO_MISO, -+ .mosi = ARCHER_C7_GPIO_SHIFT_SER, -+ .num_chipselect = 1, -+}; -+ -+static u8 archer_c7_v4_ssr_initdata __initdata = 0xff; -+ -+static struct gen_74x164_chip_platform_data archer_c7_v4_ssr_data = { -+ .base = ARCHER_C7_74HC_GPIO_BASE, -+ .num_registers = 1, -+ .init_data = &archer_c7_v4_ssr_initdata, -+}; -+ -+static struct platform_device archer_c7_v4_spi_device = { -+ .name = "spi_gpio", -+ .id = 1, -+ .dev = { -+ .platform_data = &archer_c7_v4_spi_data, -+ }, -+}; -+ -+static struct spi_board_info archer_c7_v4_spi_info[] = { -+ { -+ .bus_num = 1, -+ .chip_select = 0, -+ .max_speed_hz = 10000000, -+ .modalias = "74x164", -+ .platform_data = &archer_c7_v4_ssr_data, -+ .controller_data = (void *) ARCHER_C7_GPIO_SHIFT_RCLK, -+ }, -+}; -+ -+static struct gpio_led archer_c7_v4_leds_gpio[] __initdata = { -+ { -+ .name = "archer-c7-v4:green:power", -+ .gpio = ARCHER_C7_GPIO_LED_POWER, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:wps", -+ .gpio = ARCHER_C7_GPIO_LED_WPS, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:wlan2g", -+ .gpio = ARCHER_C7_GPIO_LED_WLAN2, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:wlan5g", -+ .gpio = ARCHER_C7_GPIO_LED_WLAN5, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:lan1", -+ .gpio = ARCHER_C7_GPIO_LED_LAN1, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:lan2", -+ .gpio = ARCHER_C7_GPIO_LED_LAN2, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:lan3", -+ .gpio = ARCHER_C7_GPIO_LED_LAN3, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:lan4", -+ .gpio = ARCHER_C7_GPIO_LED_LAN4, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:wan", -+ .gpio = ARCHER_C7_GPIO_LED_WAN_GREEN, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:amber:wan", -+ .gpio = ARCHER_C7_GPIO_LED_WAN_AMBER, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:usb1", -+ .gpio = ARCHER_C7_GPIO_LED_USB1, -+ .active_low = 1, -+ }, { -+ .name = "archer-c7-v4:green:usb2", -+ .gpio = ARCHER_C7_GPIO_LED_USB2, -+ .active_low = 1, -+ }, -+}; -+ -+static struct gpio_keys_button archer_c7_v4_gpio_keys[] __initdata = { -+ { -+ .desc = "WPS and WIFI button", -+ .type = EV_KEY, -+ .code = KEY_WPS_BUTTON, -+ .debounce_interval = ARCHER_C7_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C7_GPIO_BTN_WPS_WIFI, -+ .active_low = 1, -+ }, -+ { -+ .desc = "Reset button", -+ .type = EV_KEY, -+ .code = KEY_RESTART, -+ .debounce_interval = ARCHER_C7_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C7_GPIO_BTN_RESET, -+ .active_low = 1, -+ }, -+}; -+ -+static struct ar8327_pad_cfg archer_c7_v4_ar8337_pad0_cfg = { -+ .mode = AR8327_PAD_MAC_SGMII, -+ .sgmii_delay_en = true, -+}; -+ -+static struct ar8327_platform_data archer_c7_v4_ar8337_data = { -+ .pad0_cfg = &archer_c7_v4_ar8337_pad0_cfg, -+ .port0_cfg = { -+ .force_link = 1, -+ .speed = AR8327_PORT_SPEED_1000, -+ .duplex = 1, -+ .txpause = 1, -+ .rxpause = 1, -+ }, -+}; -+ -+static struct mdio_board_info archer_c7_v4_mdio0_info[] = { -+ { -+ .bus_id = "ag71xx-mdio.0", -+ .phy_addr = 0, -+ .platform_data = &archer_c7_v4_ar8337_data, -+ }, -+}; -+ -+ -+static void __init archer_c7_v4_setup(void) -+{ -+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); -+ u8 *mac = (u8 *) KSEG1ADDR(0x1ff00008); -+ -+ ath79_register_m25p80(NULL); -+ -+ spi_register_board_info(archer_c7_v4_spi_info, -+ ARRAY_SIZE(archer_c7_v4_spi_info)); -+ -+ platform_device_register(&archer_c7_v4_spi_device); -+ -+ gpio_request_one(ARCHER_C7_GPIO_SHIFT_OE, -+ GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, -+ "LED control"); -+ -+ gpio_request_one(ARCHER_C7_GPIO_SHIFT_SRCLR, -+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, -+ "LED reset"); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c7_v4_leds_gpio), -+ archer_c7_v4_leds_gpio); -+ -+ ath79_register_gpio_keys_polled(-1, ARCHER_C7_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(archer_c7_v4_gpio_keys), -+ archer_c7_v4_gpio_keys); -+ -+ ath79_register_usb(); -+ -+ ath79_gpio_output_select(ARCHER_C7_GPIO_MDC, QCA956X_GPIO_OUT_MUX_GE0_MDC); -+ ath79_gpio_output_select(ARCHER_C7_GPIO_MDIO, QCA956X_GPIO_OUT_MUX_GE0_MDO); -+ -+ ath79_register_mdio(0, 0x0); -+ -+ mdiobus_register_board_info(archer_c7_v4_mdio0_info, -+ ARRAY_SIZE(archer_c7_v4_mdio0_info)); -+ -+ ath79_register_wmac(art + ARCHER_C7_WMAC_CALDATA_OFFSET, mac); -+ ath79_register_pci(); -+ -+ /* GMAC0 is connected to an AR8337 switch */ -+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII; -+ ath79_eth0_data.speed = SPEED_1000; -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_mask = BIT(0); -+ ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev; -+ ath79_register_eth(0); -+} -+ -+MIPS_MACHINE(ATH79_MACH_ARCHER_C7_V4, "ARCHER-C7-V4", "TP-LINK Archer C7 v4", -+ archer_c7_v4_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index 9cb4a7f2e1df641232289721b676a9b0149c76e5..e4623fd08836d59ad4e79e96f02e75e502a55ca6 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -44,6 +44,7 @@ enum ath79_mach_type { - ATH79_MACH_ARCHER_C5, /* TP-LINK Archer C5 board */ - ATH79_MACH_ARCHER_C7, /* TP-LINK Archer C7 board */ - ATH79_MACH_ARCHER_C7_V2, /* TP-LINK Archer C7 V2 board */ -+ ATH79_MACH_ARCHER_C7_V4, /* TP-LINK Archer C7 V4 board */ - ATH79_MACH_ARDUINO_YUN, /* Yun */ - ATH79_MACH_AW_NR580, /* AzureWave AW-NR580 */ - ATH79_MACH_BHR_4GRV2, /* Buffalo BHR-4GRV2 */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 5be7cbfbd4ab7d73d679d52d2581459250e04302..27d6c73454aef96e5da47033ec664d2caffca1d5 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -298,6 +298,22 @@ define Device/archer-c7-v2 - IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU - endef - -+define Device/archer-c7-v4 -+ DEVICE_TITLE := TP-LINK Archer C7 v4 -+ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca988x -+ BOARDNAME := ARCHER-C7-V4 -+ TPLINK_BOARD_NAME := ARCHER-C7-V4 -+ IMAGE_SIZE := 15104k -+ LOADER_TYPE := elf -+ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma -+ IMAGES := sysupgrade.bin factory.bin -+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade | \ -+ append-metadata | check-size $$$$(IMAGE_SIZE) -+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -+ MTDPARTS := spi0.0:128k(factory-uboot)ro,128k(u-boot)ro,1536k(kernel),13568k(rootfs),960k(config)ro,64k(art)ro,15104k@0x40000(firmware) -+ SUPPORTED_DEVICES := archer-c7-v4 -+endef -+ - define Device/archer-c7-v2-il - $(Device/tplink-16mlzma) - DEVICE_TITLE := TP-LINK Archer C7 v2 IL -@@ -316,7 +332,7 @@ define Device/tl-wdr7500-v3 - DEVICE_PROFILE := ARCHERC7 - TPLINK_HWID := 0x75000003 - endef --TARGET_DEVICES += archer-c5-v1 archer-c7-v1 archer-c7-v2 archer-c7-v2-il tl-wdr7500-v3 -+TARGET_DEVICES += archer-c5-v1 archer-c7-v1 archer-c7-v2 archer-c7-v2-il archer-c7-v4 tl-wdr7500-v3 - - define Device/tl-mr10u-v1 - $(Device/tplink-4mlzma) -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 478d5d8e9b43bbe37694732c138048c8fe8d807c..fec830c23ce6707755ddefc849f195872be1e877 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -376,6 +376,49 @@ static struct device_info boards[] = { - .last_sysupgrade_partition = "file-system" - }, - -+ /** Firmware layout for the C7 */ -+ { -+ .id = "ARCHER-C7-V4", -+ .support_list = -+ "SupportList:\n" -+ "{product_name:Archer C7,product_ver:4.0.0,special_id:45550000}\n" -+ "{product_name:Archer C7,product_ver:4.0.0,special_id:55530000}\n" -+ "{product_name:Archer C7,product_ver:4.0.0,special_id:43410000}\n", -+ .support_trail = '\x00', -+ .soft_ver = "soft_ver:1.0.0\n", -+ -+ /** -+ We use a bigger os-image partition than the stock images (and thus -+ smaller file-system), as our kernel doesn't fit in the stock firmware's -+ 1MB os-image. -+ */ -+ .partitions = { -+ {"factory-boot", 0x00000, 0x20000}, -+ {"fs-uboot", 0x20000, 0x20000}, -+ {"os-image", 0x40000, 0x180000}, /* Stock: base 0x40000 size 0x120000 */ -+ {"file-system", 0x1c0000, 0xd40000}, /* Stock: base 0x160000 size 0xda0000 */ -+ {"default-mac", 0xf00000, 0x00200}, -+ {"pin", 0xf00200, 0x00200}, -+ {"device-id", 0xf00400, 0x00100}, -+ {"product-info", 0xf00500, 0x0fb00}, -+ {"soft-version", 0xf10000, 0x00100}, -+ {"extra-para", 0xf11000, 0x01000}, -+ {"support-list", 0xf12000, 0x0a000}, -+ {"profile", 0xf1c000, 0x04000}, -+ {"default-config", 0xf20000, 0x10000}, -+ {"user-config", 0xf30000, 0x40000}, -+ {"qos-db", 0xf70000, 0x40000}, -+ {"certificate", 0xfb0000, 0x10000}, -+ {"partition-table", 0xfc0000, 0x10000}, -+ {"log", 0xfd0000, 0x20000}, -+ {"radio", 0xff0000, 0x10000}, -+ {NULL, 0, 0} -+ }, -+ -+ .first_sysupgrade_partition = "os-image", -+ .last_sysupgrade_partition = "file-system", -+ }, -+ - /** Firmware layout for the C9 */ - { - .id = "ARCHERC9", -@@ -929,6 +972,9 @@ static void build_image(const char *output, - strcasecmp(info->id, "TLWR1043NV5") == 0) { - const char mdat[11] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; - parts[5] = put_data("extra-para", mdat, 11); -+ } else if (strcasecmp(info->id, "ARCHER-C7-V4") == 0) { -+ const char mdat[11] = {0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0xca, 0x00, 0x01, 0x00, 0x00}; -+ parts[5] = put_data("extra-para", mdat, 11); - } - - size_t len; diff --git a/patches/lede/0046-ar71xx-fix-TP-Link-Archer-C7-v4-switch-LEDs.patch b/patches/lede/0046-ar71xx-fix-TP-Link-Archer-C7-v4-switch-LEDs.patch deleted file mode 100644 index cad39e97..00000000 --- a/patches/lede/0046-ar71xx-fix-TP-Link-Archer-C7-v4-switch-LEDs.patch +++ /dev/null @@ -1,72 +0,0 @@ -From: David Bauer -Date: Sat, 16 Dec 2017 15:43:02 +0100 -Subject: ar71xx: fix TP-Link Archer C7 v4 switch LEDs - -This fixes wrong switch LEDs on TP-Link Archer C7 v4. - -Signed-off-by: David Bauer - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index 44b1c2837e8392596eed14b4bc0d761042109715..47b90d9cb2f81936aed22cdf7d1f6d870d23c16e 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -53,8 +53,7 @@ ap121f) - ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" - ;; --archer-c25-v1|\ --archer-c7-v4) -+archer-c25-v1) - ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" "phy1tpt" - ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" -@@ -62,12 +61,6 @@ archer-c7-v4) - ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" "0x08" - ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x04" - ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x02" -- case "$board" in -- archer-c7-v4) -- ucidef_set_led_usbdev "usb1" "USB1" "$board:green:usb1" "1-1" -- ucidef_set_led_usbdev "usb2" "USB2" "$board:green:usb2" "2-1" -- ;; -- esac - ;; - arduino-yun) - ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt" -@@ -635,6 +628,17 @@ archer-c7) - ucidef_set_led_wlan "wlan2g" "WLAN2G" "tp-link:blue:wlan2g" "phy1tpt" - ucidef_set_led_wlan "wlan5g" "WLAN5G" "tp-link:blue:wlan5g" "phy0tpt" - ;; -+archer-c7-v4) -+ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" "phy1tpt" -+ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" -+ ucidef_set_led_switch "wan" "WAN" "$board:green:wan" "switch0" "0x02" -+ ucidef_set_led_switch "lan1" "LAN1" "$board:green:lan1" "switch0" "0x04" -+ ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" "0x08" -+ ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x10" -+ ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x20" -+ ucidef_set_led_usbdev "usb1" "USB1" "$board:green:usb1" "1-1" -+ ucidef_set_led_usbdev "usb2" "USB2" "$board:green:usb2" "2-1" -+ ;; - tl-wpa8630) - ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth0" - ucidef_set_led_netdev "wlan" "WLAN" "$board:green:wlan" "wlan1" -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c -index 64955c79945c0b2c28d5a93be6e45662200e60ed..9688b015356cb766c5966be2190e1aae29420d8d 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c -@@ -58,10 +58,10 @@ - - #define ARCHER_C7_74HC_GPIO_BASE QCA956X_GPIO_COUNT - #define ARCHER_C7_GPIO_LED_WPS (ARCHER_C7_74HC_GPIO_BASE + 0) --#define ARCHER_C7_GPIO_LED_LAN1 (ARCHER_C7_74HC_GPIO_BASE + 1) --#define ARCHER_C7_GPIO_LED_LAN2 (ARCHER_C7_74HC_GPIO_BASE + 2) --#define ARCHER_C7_GPIO_LED_LAN3 (ARCHER_C7_74HC_GPIO_BASE + 3) --#define ARCHER_C7_GPIO_LED_LAN4 (ARCHER_C7_74HC_GPIO_BASE + 4) -+#define ARCHER_C7_GPIO_LED_LAN4 (ARCHER_C7_74HC_GPIO_BASE + 1) -+#define ARCHER_C7_GPIO_LED_LAN3 (ARCHER_C7_74HC_GPIO_BASE + 2) -+#define ARCHER_C7_GPIO_LED_LAN2 (ARCHER_C7_74HC_GPIO_BASE + 3) -+#define ARCHER_C7_GPIO_LED_LAN1 (ARCHER_C7_74HC_GPIO_BASE + 4) - #define ARCHER_C7_GPIO_LED_WAN_GREEN (ARCHER_C7_74HC_GPIO_BASE + 5) - #define ARCHER_C7_GPIO_LED_WAN_AMBER (ARCHER_C7_74HC_GPIO_BASE + 6) - #define ARCHER_C7_GPIO_LED_WLAN2 (ARCHER_C7_74HC_GPIO_BASE + 7) diff --git a/patches/lede/0047-ar71xx-fix-Archer-C7-5GHz-MAC-address.patch b/patches/lede/0047-ar71xx-fix-Archer-C7-5GHz-MAC-address.patch deleted file mode 100644 index 3ae0b9c8..00000000 --- a/patches/lede/0047-ar71xx-fix-Archer-C7-5GHz-MAC-address.patch +++ /dev/null @@ -1,36 +0,0 @@ -From: David Bauer -Date: Tue, 19 Dec 2017 02:32:47 +0100 -Subject: ar71xx: fix Archer C7 5GHz MAC-address - -The TP-Link firmware uses (primary_mac-1) as MAC-address -for the 5GHz WiFi. This applies the same behaviour to LEDE. - -Currently, the MAC-address is retrieved from eth1, which -does not exist on the Archer C7 v4. As a result from this, -every C7 v4 with LEDE carries the same MAC-Address on the 5GHz WiFi. - -Signed-off-by: David Bauer - -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index 96b8f6b9a4bdd6a1609a819e72ade315bccfb3c0..607bbd2c0ec4b59ba569550e9e0e87b80c7ddddb 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -47,6 +47,10 @@ board=$(ar71xx_board_name) - case "$FIRMWARE" in - "ath10k/cal-pci-0000:00:00.0.bin") - case $board in -+ archer-c7-v4) -+ ath10kcal_extract "art" 20480 2116 -+ ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1) -+ ;; - cf-e380ac-v1|\ - cf-e380ac-v2|\ - dlan-pro-1200-ac|\ -@@ -92,7 +96,6 @@ case "$FIRMWARE" in - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) - ;; -- archer-c7-v4|\ - archer-c25-v1|\ - tl-wdr6500-v2) - ath10kcal_extract "art" 20480 2116 diff --git a/patches/lede/0048-ebtables-Use-flock-for-concurrent-option.patch b/patches/lede/0048-ebtables-Use-flock-for-concurrent-option.patch deleted file mode 100644 index e95dd2ff..00000000 --- a/patches/lede/0048-ebtables-Use-flock-for-concurrent-option.patch +++ /dev/null @@ -1,146 +0,0 @@ -From: Sven Eckelmann -Date: Wed, 20 Dec 2017 16:55:17 +0100 -Subject: ebtables: Use flock() for --concurrent option - -The previous locking mechanism was not atomic, hence it was possible -that a killed ebtables process would leave the lock file in place which -in turn made future ebtables processes wait indefinitely for the lock to -become free. - -Fix this by using flock(). This also simplifies code quite a bit because -there is no need for a custom signal handler or an __exit routine -anymore. - -diff --git a/package/network/utils/ebtables/patches/300-fix-concurrent.patch b/package/network/utils/ebtables/patches/300-fix-concurrent.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..1a99162bf51cd175e26d49e7ee5277b8b8645f48 ---- /dev/null -+++ b/package/network/utils/ebtables/patches/300-fix-concurrent.patch -@@ -0,0 +1,127 @@ -+From 6a826591878db3fa9e2a94b87a3d5edd8e0fc442 Mon Sep 17 00:00:00 2001 -+From: Phil Sutter -+Date: Fri, 6 Oct 2017 12:48:50 +0200 -+Subject: Use flock() for --concurrent option -+ -+The previous locking mechanism was not atomic, hence it was possible -+that a killed ebtables process would leave the lock file in place which -+in turn made future ebtables processes wait indefinitely for the lock to -+become free. -+ -+Fix this by using flock(). This also simplifies code quite a bit because -+there is no need for a custom signal handler or an __exit routine -+anymore. -+ -+Signed-off-by: Phil Sutter -+Signed-off-by: Pablo Neira Ayuso -+ -+Origin: upstream, https://git.netfilter.org/ebtables/commit/?id=6a826591878db3fa9e2a94b87a3d5edd8e0fc442 -+--- -+ ebtables.c | 8 -------- -+ libebtc.c | 49 +++++-------------------------------------------- -+ 2 files changed, 5 insertions(+), 52 deletions(-) -+ -+diff --git a/ebtables.c b/ebtables.c -+index 62f1ba8..f7dfccf 100644 -+--- a/ebtables.c -++++ b/ebtables.c -+@@ -528,12 +528,6 @@ void ebt_early_init_once() -+ ebt_iterate_targets(merge_target); -+ } -+ -+-/* signal handler, installed when the option --concurrent is specified. */ -+-static void sighandler(int signum) -+-{ -+- exit(-1); -+-} -+- -+ /* We use exec_style instead of #ifdef's because ebtables.so is a shared object. */ -+ int do_command(int argc, char *argv[], int exec_style, -+ struct ebt_u_replace *replace_) -+@@ -1047,8 +1041,6 @@ big_iface_length: -+ strcpy(replace->filename, optarg); -+ break; -+ case 13 : /* concurrent */ -+- signal(SIGINT, sighandler); -+- signal(SIGTERM, sighandler); -+ use_lockfd = 1; -+ break; -+ case 1 : -+diff --git a/libebtc.c b/libebtc.c -+index 74830ec..c0ff8cc 100644 -+--- a/libebtc.c -++++ b/libebtc.c -+@@ -31,6 +31,7 @@ -+ #include "include/ethernetdb.h" -+ #include -+ #include -++#include -+ #include -+ #include -+ #include -+@@ -137,58 +138,18 @@ void ebt_list_extensions() -+ #define LOCKDIR "/var/lib/ebtables" -+ #define LOCKFILE LOCKDIR"/lock" -+ #endif -+-static int lockfd = -1, locked; -+ int use_lockfd; -+ /* Returns 0 on success, -1 when the file is locked by another process -+ * or -2 on any other error. */ -+ static int lock_file() -+ { -+- int try = 0; -+- int ret = 0; -+- sigset_t sigset; -+- -+-tryagain: -+- /* the SIGINT handler will call unlock_file. To make sure the state -+- * of the variable locked is correct, we need to temporarily mask the -+- * SIGINT interrupt. */ -+- sigemptyset(&sigset); -+- sigaddset(&sigset, SIGINT); -+- sigprocmask(SIG_BLOCK, &sigset, NULL); -+- lockfd = open(LOCKFILE, O_CREAT | O_EXCL | O_WRONLY, 00600); -+- if (lockfd < 0) { -+- if (errno == EEXIST) -+- ret = -1; -+- else if (try == 1) -+- ret = -2; -+- else { -+- if (mkdir(LOCKDIR, 00700)) -+- ret = -2; -+- else { -+- try = 1; -+- goto tryagain; -+- } -+- } -+- } else { -+- close(lockfd); -+- locked = 1; -+- } -+- sigprocmask(SIG_UNBLOCK, &sigset, NULL); -+- return ret; -+-} -++ int fd = open(LOCKFILE, O_CREAT, 00600); -+ -+-void unlock_file() -+-{ -+- if (locked) { -+- remove(LOCKFILE); -+- locked = 0; -+- } -++ if (fd < 0) -++ return -2; -++ return flock(fd, LOCK_EX); -+ } -+ -+-void __attribute__ ((destructor)) onexit() -+-{ -+- if (use_lockfd) -+- unlock_file(); -+-} -+ /* Get the table from the kernel or from a binary file -+ * init: 1 = ask the kernel for the initial contents of a table, i.e. the -+ * way it looks when the table is insmod'ed -+-- -+cgit v1.1 -+ diff --git a/patches/lede/0049-ar71xx-add-support-to-TP-Link-Archer-C59v1-and-C60v1.patch b/patches/lede/0049-ar71xx-add-support-to-TP-Link-Archer-C59v1-and-C60v1.patch deleted file mode 100644 index 4e9db3a5..00000000 --- a/patches/lede/0049-ar71xx-add-support-to-TP-Link-Archer-C59v1-and-C60v1.patch +++ /dev/null @@ -1,757 +0,0 @@ -From: Henryk Heisig -Date: Tue, 27 Dec 2016 22:41:41 +0100 -Subject: ar71xx: add support to TP-Link Archer C59v1 and C60v1 - -TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros -QCA9561+QCA9886. - -Specification: - -- 775/650/258 MHz (CPU/DDR/AHB) -- 128 MB of RAM (DDR2) -- 16 MB of FLASH (SPI NOR) -- 3T3R 2.4 GHz -- 2T2R 5 GHz -- 5x 10/100 Mbps Ethernet -- USB 2.0 port -- 8x LED (controled by 74HC595), 3x button -- UART header on PCB - -TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros -QCA9561+QCA9886. - -Specification: - -- 775/650/258 MHz (CPU/DDR/AHB) -- 64 MB of RAM (DDR2) -- 8 MB of FLASH (SPI NOR) -- 3T3R 2.4 GHz -- 2T2R 5 GHz -- 5x 10/100 Mbps Ethernet -- 7x LED, 2x button -- UART header on PCB - -Currently not working: -- Port LAN1 on C59, LAN4 on C60 -- WiFi 5GHz (missing ath10k firmware for QCA9886 chip) -- Update from oficial web interface ( tplink-saveloader not support "product-info") - -Flash instruction: -1. Set PC to fixed ip address 192.168.0.66 -2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin -and rename it to tp_recovery.bin -3. Start a tftp server with the file tp_recovery.bin in its root directory -4. Turn off the router -5. Press and hold Reset button -6. Turn on router with the reset button pressed and wait ~15 seconds -7. Release the reset button and after a short time -the firmware should be transferred from the tftp server -8. Wait ~30 second to complete recovery. - -Flash instruction under U-Boot, using UART: - -1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin -2. erase 0x9f020000 +$filesize -3. cp.b $fileaddr 0x9f020000 $filesize -4. reset - -Signed-off-by: Henryk Heisig -[Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] -Signed-off-by: Jo-Philipp Wich - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index 47b90d9cb2f81936aed22cdf7d1f6d870d23c16e..8552cde564b3fbed9425f42d5331f95fe5c3aaa8 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -62,6 +62,19 @@ archer-c25-v1) - ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x04" - ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x02" - ;; -+archer-c59-v1|\ -+archer-c60-v1) -+ ucidef_set_led_switch "lan" "LAN" "$board:green:lan" "switch0" "0x3C" -+ ucidef_set_led_switch "wan" "WAN" "$board:green:wan" "switch0" "0x02" -+ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" "phy1tpt" -+ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" -+ -+ case "$board" in -+ archer-c59-v1) -+ ucidef_set_led_usbdev "usb" "USB" "$board:green:usb" "1-1" -+ ;; -+ esac -+ ;; - arduino-yun) - ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt" - ucidef_set_led_usbdev "usb" "USB" "arduino:white:usb" "1-1.1" -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 86ac949bca12561536ce2c8adb190eb004c162e4..3abe1114ee31c79abb125b85119876c3d75bb7c0 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -205,6 +205,11 @@ ar71xx_setup_interfaces() - ucidef_add_switch "switch0" \ - "0@eth1" "2:lan" "3:lan" "4:lan" "5:lan" "6@eth0" "1:wan" - ;; -+ archer-c59-v1|\ -+ archer-c60-v1) -+ ucidef_add_switch "switch0" \ -+ "0@eth0" "2:lan:4" "3:lan:3" "4:lan:2" "5:lan:1" "1:wan" -+ ;; - arduino-yun|\ - dir-505-a1|\ - tl-wa801nd-v3) -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 97372bed0ea2fadfab10f22916a1e0d6a9c65725..3aa1f054d4f791545a8b6644f7bd24f64ed546a3 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -52,6 +52,8 @@ get_status_led() { - ;; - archer-c25-v1|\ - archer-c7-v4|\ -+ archer-c59-v1|\ -+ archer-c60-v1|\ - mr12|\ - mr16|\ - nbg6616|\ -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index 607bbd2c0ec4b59ba569550e9e0e87b80c7ddddb..5dd1d69e7e163c938759ce476846e4d985184b7b 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -97,6 +97,8 @@ case "$FIRMWARE" in - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) - ;; - archer-c25-v1|\ -+ archer-c59-v1|\ -+ archer-c60-v1|\ - tl-wdr6500-v2) - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index c32894d95b6b09b4b8b59ba64057c23e71b9f656..d8e23d97e2cc20f8ba7b3b2fc516ce398c43a19b 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -472,6 +472,12 @@ ar71xx_board_detect() { - *"Archer C7 v4") - name="archer-c7-v4" - ;; -+ *"Archer C59 v1") -+ name="archer-c59-v1" -+ ;; -+ *"Archer C60 v1") -+ name="archer-c60-v1" -+ ;; - *"Archer C7") - name="archer-c7" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index d6650e7719d268e1a500638b7eda2e15b9251aea..f4ac73e40e1acb800433a0b1348c8264a4639c30 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -216,6 +216,8 @@ platform_check_image() { - ap90q|\ - archer-c25-v1|\ - archer-c7-v4|\ -+ archer-c59-v1|\ -+ archer-c60-v1|\ - bullet-m|\ - c-55|\ - carambola2|\ -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index 57b6d2e541d7ef9dea8570ba8de72164d97b9775..5b33d48e52309b807dbdf2697524809ad08072ae 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -52,6 +52,8 @@ CONFIG_ATH79_MACH_AP152=y - CONFIG_ATH79_MACH_AP90Q=y - CONFIG_ATH79_MACH_AP96=y - CONFIG_ATH79_MACH_ARCHER_C25_V1=y -+CONFIG_ATH79_MACH_ARCHER_C59_V1=y -+CONFIG_ATH79_MACH_ARCHER_C60_V1=y - CONFIG_ATH79_MACH_ARCHER_C7=y - CONFIG_ATH79_MACH_ARDUINO_YUN=y - CONFIG_ATH79_MACH_AW_NR580=y -@@ -272,6 +274,7 @@ CONFIG_GENERIC_SMP_IDLE_THREAD=y - CONFIG_GENERIC_TIME_VSYSCALL=y - CONFIG_GPIOLIB=y - CONFIG_GPIOLIB_IRQCHIP=y -+CONFIG_GPIO_74X164=y - CONFIG_GPIO_DEVRES=y - CONFIG_GPIO_74X164=y - # CONFIG_GPIO_LATCH is not set -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index 0a25294c40b5e2d3be825554ec7246a50b9c029b..468d9b333e43814cbadec8d85a20ab94e5cd6d01 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -1244,6 +1244,27 @@ config ATH79_MACH_ARCHER_C25_V1 - select ATH79_DEV_M25P80 - select ATH79_DEV_WMAC - -+config ATH79_MACH_ARCHER_C59_V1 -+ bool "TP-LINK Archer C59 v1 support" -+ select SOC_QCA956X -+ select ATH79_DEV_AP9X_PCI if PCI -+ select ATH79_DEV_ETH -+ select ATH79_DEV_GPIO_BUTTONS -+ select ATH79_DEV_LEDS_GPIO -+ select ATH79_DEV_M25P80 -+ select ATH79_DEV_USB -+ select ATH79_DEV_WMAC -+ -+config ATH79_MACH_ARCHER_C60_V1 -+ bool "TP-LINK Archer C60 v1 support" -+ select SOC_QCA956X -+ select ATH79_DEV_AP9X_PCI if PCI -+ select ATH79_DEV_ETH -+ select ATH79_DEV_GPIO_BUTTONS -+ select ATH79_DEV_LEDS_GPIO -+ select ATH79_DEV_M25P80 -+ select ATH79_DEV_WMAC -+ - config ATH79_MACH_ARCHER_C7 - bool "TP-LINK Archer C5/C7/TL-WDR4900 v2 board support" - select SOC_QCA955X -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -index a0c73550eb0d5bf07ee731171be9e5ef9ff073e7..fbe7fcb0aebb6577b96c27088a158eb025f201cb 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -@@ -57,6 +57,8 @@ obj-$(CONFIG_ATH79_MACH_AP152) += mach-ap152.o - obj-$(CONFIG_ATH79_MACH_AP90Q) += mach-ap90q.o - obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += mach-archer-c25-v1.o -+obj-$(CONFIG_ATH79_MACH_ARCHER_C59_V1) += mach-archer-c59-v1.o -+obj-$(CONFIG_ATH79_MACH_ARCHER_C60_V1) += mach-archer-c60-v1.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7-v4.o - obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN) += mach-arduino-yun.o -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -new file mode 100644 -index 0000000000000000000000000000000000000000..28353aa77b05078b895ab48cf6b1ae53abe98ce2 ---- /dev/null -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -@@ -0,0 +1,223 @@ -+/* -+ * TP-Link Archer C59 v1 board support -+ * -+ * Copyright (C) 2016 Henryk Heisig -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "common.h" -+#include "dev-m25p80.h" -+#include "machtypes.h" -+#include "pci.h" -+#include "dev-ap9x-pci.h" -+#include "dev-eth.h" -+#include "dev-gpio-buttons.h" -+#include "dev-leds-gpio.h" -+#include "dev-spi.h" -+#include "dev-usb.h" -+#include "dev-wmac.h" -+ -+#define ARCHER_C59_V1_KEYS_POLL_INTERVAL 20 -+#define ARCHER_C59_V1_KEYS_DEBOUNCE_INTERVAL (3 * ARCHER_C59_V1_KEYS_POLL_INTERVAL) -+ -+#define ARCHER_C59_V1_GPIO_BTN_RESET 21 -+#define ARCHER_C59_V1_GPIO_BTN_RFKILL 2 -+#define ARCHER_C59_V1_GPIO_BTN_WPS 1 -+ -+#define ARCHER_C59_V1_GPIO_USB_POWER 22 -+ -+#define ARCHER_C59_GPIO_SHIFT_OE 16 -+#define ARCHER_C59_GPIO_SHIFT_SER 17 -+#define ARCHER_C59_GPIO_SHIFT_SRCLK 18 -+#define ARCHER_C59_GPIO_SHIFT_SRCLR 19 -+#define ARCHER_C59_GPIO_SHIFT_RCLK 20 -+ -+#define ARCHER_C59_74HC_GPIO_BASE QCA956X_GPIO_COUNT -+#define ARCHER_C59_74HC_GPIO_LED_POWER 23 -+#define ARCHER_C59_74HC_GPIO_LED_WLAN2 24 -+#define ARCHER_C59_74HC_GPIO_LED_WLAN5 25 -+#define ARCHER_C59_74HC_GPIO_LED_LAN 26 -+#define ARCHER_C59_74HC_GPIO_LED_WAN_GREEN 27 -+#define ARCHER_C59_74HC_GPIO_LED_WAN_AMBER 28 -+#define ARCHER_C59_74HC_GPIO_LED_WPS 29 -+#define ARCHER_C59_74HC_GPIO_LED_USB 30 -+ -+#define ARCHER_C59_V1_SSR_BIT_0 0 -+#define ARCHER_C59_V1_SSR_BIT_1 1 -+#define ARCHER_C59_V1_SSR_BIT_2 2 -+#define ARCHER_C59_V1_SSR_BIT_3 3 -+#define ARCHER_C59_V1_SSR_BIT_4 4 -+#define ARCHER_C59_V1_SSR_BIT_5 5 -+#define ARCHER_C59_V1_SSR_BIT_6 6 -+#define ARCHER_C59_V1_SSR_BIT_7 7 -+ -+#define ARCHER_C59_V1_WMAC_CALDATA_OFFSET 0x1000 -+#define ARCHER_C59_V1_PCI_CALDATA_OFFSET 0x5000 -+ -+static struct gpio_led archer_c59_v1_leds_gpio[] __initdata = { -+ { -+ .name = "archer-c59-v1:green:power", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_POWER, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c59-v1:green:wlan2g", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WLAN2, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c59-v1:green:wlan5g", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WLAN5, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c59-v1:green:lan", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_LAN, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c59-v1:green:wan", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WAN_GREEN, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c59-v1:amber:wan", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WAN_AMBER, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c59-v1:green:wps", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WPS, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c59-v1:green:usb", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_USB, -+ .active_low = 1, -+ }, -+}; -+ -+static struct gpio_keys_button archer_c59_v1_gpio_keys[] __initdata = { -+ { -+ .desc = "Reset button", -+ .type = EV_KEY, -+ .code = KEY_RESTART, -+ .debounce_interval = ARCHER_C59_V1_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C59_V1_GPIO_BTN_RESET, -+ .active_low = 1, -+ }, -+ { -+ .desc = "RFKILL button", -+ .type = EV_KEY, -+ .code = KEY_RFKILL, -+ .debounce_interval = ARCHER_C59_V1_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C59_V1_GPIO_BTN_RFKILL, -+ .active_low = 1, -+ }, -+ { -+ .desc = "WPS button", -+ .type = EV_KEY, -+ .code = KEY_WPS_BUTTON, -+ .debounce_interval = ARCHER_C59_V1_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C59_V1_GPIO_BTN_WPS, -+ .active_low = 1, -+ }, -+}; -+ -+static struct spi_gpio_platform_data archer_c59_v1_spi_data = { -+ .sck = ARCHER_C59_GPIO_SHIFT_SRCLK, -+ .miso = SPI_GPIO_NO_MISO, -+ .mosi = ARCHER_C59_GPIO_SHIFT_SER, -+ .num_chipselect = 1, -+}; -+ -+static u8 archer_c59_v1_ssr_initdata[] __initdata = { -+ BIT(ARCHER_C59_V1_SSR_BIT_7) | -+ BIT(ARCHER_C59_V1_SSR_BIT_6) | -+ BIT(ARCHER_C59_V1_SSR_BIT_5) | -+ BIT(ARCHER_C59_V1_SSR_BIT_4) | -+ BIT(ARCHER_C59_V1_SSR_BIT_3) | -+ BIT(ARCHER_C59_V1_SSR_BIT_2) | -+ BIT(ARCHER_C59_V1_SSR_BIT_1) -+}; -+ -+static struct gen_74x164_chip_platform_data archer_c59_v1_ssr_data = { -+ .base = ARCHER_C59_74HC_GPIO_BASE, -+ .num_registers = ARRAY_SIZE(archer_c59_v1_ssr_initdata), -+ .init_data = archer_c59_v1_ssr_initdata, -+}; -+ -+static struct platform_device archer_c59_v1_spi_device = { -+ .name = "spi_gpio", -+ .id = 1, -+ .dev = { -+ .platform_data = &archer_c59_v1_spi_data, -+ }, -+}; -+ -+static struct spi_board_info archer_c59_v1_spi_info[] = { -+ { -+ .bus_num = 1, -+ .chip_select = 0, -+ .max_speed_hz = 10000000, -+ .modalias = "74x164", -+ .platform_data = &archer_c59_v1_ssr_data, -+ .controller_data = (void *) ARCHER_C59_GPIO_SHIFT_RCLK, -+ }, -+}; -+ -+static void __init archer_c59_v1_setup(void) -+{ -+ u8 *mac = (u8 *) KSEG1ADDR(0x1f010008); -+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); -+ -+ ath79_register_m25p80(NULL); -+ spi_register_board_info(archer_c59_v1_spi_info, -+ ARRAY_SIZE(archer_c59_v1_spi_info)); -+ platform_device_register(&archer_c59_v1_spi_device); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c59_v1_leds_gpio), -+ archer_c59_v1_leds_gpio); -+ -+ ath79_register_gpio_keys_polled(-1, ARCHER_C59_V1_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(archer_c59_v1_gpio_keys), -+ archer_c59_v1_gpio_keys); -+ -+ ath79_register_mdio(1, 0x0); -+ -+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -+ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0); -+ ath79_eth1_data.speed = SPEED_1000; -+ ath79_eth1_data.duplex = DUPLEX_FULL; -+ ath79_eth1_data.phy_mask = BIT(4); -+ ath79_register_eth(1); -+ -+ ath79_register_wmac(art + ARCHER_C59_V1_WMAC_CALDATA_OFFSET, mac); -+ ap91_pci_init(art + ARCHER_C59_V1_PCI_CALDATA_OFFSET, NULL); -+ -+ -+ ath79_register_usb(); -+ gpio_request_one(ARCHER_C59_V1_GPIO_USB_POWER, -+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, -+ "USB power"); -+ gpio_request_one(ARCHER_C59_GPIO_SHIFT_OE, -+ GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, -+ "LED control"); -+ gpio_request_one(ARCHER_C59_GPIO_SHIFT_SRCLR, -+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, -+ "LED reset"); -+} -+ -+MIPS_MACHINE(ATH79_MACH_ARCHER_C59_V1, "ARCHER-C59-V1", -+ "TP-LINK Archer C59 v1", archer_c59_v1_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c60-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c60-v1.c -new file mode 100644 -index 0000000000000000000000000000000000000000..78186f02cda0a231afda4e53a1d6ff696ecb6b4a ---- /dev/null -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c60-v1.c -@@ -0,0 +1,135 @@ -+/* -+ * TP-Link Archer C60 v1 board support -+ * -+ * Copyright (C) 2016 Henryk Heisig -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ */ -+#include -+#include -+#include -+#include -+#include -+ -+#include "common.h" -+#include "dev-m25p80.h" -+#include "machtypes.h" -+#include "pci.h" -+#include "dev-ap9x-pci.h" -+#include "dev-eth.h" -+#include "dev-gpio-buttons.h" -+#include "dev-leds-gpio.h" -+#include "dev-spi.h" -+#include "dev-usb.h" -+#include "dev-wmac.h" -+ -+#define ARCHER_C60_V1_GPIO_LED_LAN 2 -+#define ARCHER_C60_V1_GPIO_LED_POWER 16 -+#define ARCHER_C60_V1_GPIO_LED_WLAN2 17 -+#define ARCHER_C60_V1_GPIO_LED_WLAN5 18 -+#define ARCHER_C60_V1_GPIO_LED_WPS 19 -+#define ARCHER_C60_V1_GPIO_LED_WAN_GREEN 20 -+#define ARCHER_C60_V1_GPIO_LED_WAN_AMBER 22 -+ -+ -+#define ARCHER_C60_V1_KEYS_POLL_INTERVAL 20 -+#define ARCHER_C60_V1_KEYS_DEBOUNCE_INTERVAL (3 * ARCHER_C60_V1_KEYS_POLL_INTERVAL) -+ -+#define ARCHER_C60_V1_GPIO_BTN_RESET 21 -+#define ARCHER_C60_V1_GPIO_BTN_RFKILL 1 -+ -+ -+ -+#define ARCHER_C60_V1_WMAC_CALDATA_OFFSET 0x1000 -+#define ARCHER_C60_V1_PCI_CALDATA_OFFSET 0x5000 -+ -+static struct gpio_led archer_c60_v1_leds_gpio[] __initdata = { -+ { -+ .name = "archer-c60-v1:green:power", -+ .gpio = ARCHER_C60_V1_GPIO_LED_POWER, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c60-v1:green:wlan2g", -+ .gpio = ARCHER_C60_V1_GPIO_LED_WLAN2, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c60-v1:green:wlan5g", -+ .gpio = ARCHER_C60_V1_GPIO_LED_WLAN5, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c60-v1:green:lan", -+ .gpio = ARCHER_C60_V1_GPIO_LED_LAN, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c60-v1:green:wan", -+ .gpio = ARCHER_C60_V1_GPIO_LED_WAN_GREEN, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c60-v1:amber:wan", -+ .gpio = ARCHER_C60_V1_GPIO_LED_WAN_AMBER, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c60-v1:green:wps", -+ .gpio = ARCHER_C60_V1_GPIO_LED_WPS, -+ .active_low = 1, -+ }, -+}; -+ -+static struct gpio_keys_button archer_c60_v1_gpio_keys[] __initdata = { -+ { -+ .desc = "Reset button", -+ .type = EV_KEY, -+ .code = KEY_RESTART, -+ .debounce_interval = ARCHER_C60_V1_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C60_V1_GPIO_BTN_RESET, -+ .active_low = 1, -+ }, -+ { -+ .desc = "RFKILL button", -+ .type = EV_KEY, -+ .code = KEY_RFKILL, -+ .debounce_interval = ARCHER_C60_V1_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = ARCHER_C60_V1_GPIO_BTN_RFKILL, -+ .active_low = 1, -+ }, -+}; -+ -+static void __init archer_c60_v1_setup(void) -+{ -+ u8 *mac = (u8 *) KSEG1ADDR(0x1f010008); -+ u8 *art = (u8 *) KSEG1ADDR(0x1f7f0000); -+ -+ ath79_register_m25p80(NULL); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c60_v1_leds_gpio), -+ archer_c60_v1_leds_gpio); -+ -+ ath79_register_gpio_keys_polled(-1, ARCHER_C60_V1_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(archer_c60_v1_gpio_keys), -+ archer_c60_v1_gpio_keys); -+ -+ ath79_setup_qca956x_eth_cfg(QCA956X_ETH_CFG_SW_PHY_SWAP | -+ QCA956X_ETH_CFG_SW_PHY_ADDR_SWAP); -+ ath79_register_mdio(1, 0x0); -+ -+ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0); -+ -+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -+ ath79_eth1_data.speed = SPEED_1000; -+ ath79_eth1_data.duplex = DUPLEX_FULL; -+ ath79_register_eth(1); -+ -+ ath79_register_wmac(art + ARCHER_C60_V1_WMAC_CALDATA_OFFSET, mac); -+ ap91_pci_init(art + ARCHER_C60_V1_PCI_CALDATA_OFFSET, NULL); -+} -+ -+MIPS_MACHINE(ATH79_MACH_ARCHER_C60_V1, "ARCHER-C60-V1", -+ "TP-LINK Archer C60 v1", archer_c60_v1_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index e4623fd08836d59ad4e79e96f02e75e502a55ca6..9fbf354e44992f4dff43df0fb0ea99c344801d97 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -42,6 +42,8 @@ enum ath79_mach_type { - ATH79_MACH_AP96, /* Atheros AP96 */ - ATH79_MACH_ARCHER_C25_V1, /* TP-LINK Archer C25 V1 board */ - ATH79_MACH_ARCHER_C5, /* TP-LINK Archer C5 board */ -+ ATH79_MACH_ARCHER_C59_V1, /* TP-LINK Archer C59 V1 board */ -+ ATH79_MACH_ARCHER_C60_V1, /* TP-LINK Archer C60 V1 board */ - ATH79_MACH_ARCHER_C7, /* TP-LINK Archer C7 board */ - ATH79_MACH_ARCHER_C7_V2, /* TP-LINK Archer C7 V2 board */ - ATH79_MACH_ARCHER_C7_V4, /* TP-LINK Archer C7 V4 board */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 27d6c73454aef96e5da47033ec664d2caffca1d5..9e4aa8ea30aedba8050a77ebdcfc8f0034cc14d1 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -119,6 +119,36 @@ define Device/archer-c25-v1 - endef - TARGET_DEVICES += archer-c25-v1 - -+define Device/archer-c59-v1 -+ DEVICE_TITLE := TP-LINK Archer C59 v1 -+ DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k -+ BOARDNAME := ARCHER-C59-V1 -+ TPLINK_BOARD_NAME := ARCHER-C59-V1 -+ DEVICE_PROFILE := ARCHERC59V1 -+ IMAGE_SIZE := 14528k -+ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma -+ IMAGES := sysupgrade.bin factory.bin -+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade -+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -+ MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1536k(kernel),12992k(rootfs),1664k(tplink)ro,64k(art)ro,14528k@0x20000(firmware) -+endef -+TARGET_DEVICES += archer-c59-v1 -+ -+define Device/archer-c60-v1 -+ DEVICE_TITLE := TP-LINK Archer C60 v1 -+ DEVICE_PACKAGES := kmod-ath10k -+ BOARDNAME := ARCHER-C60-V1 -+ TPLINK_BOARD_NAME := ARCHER-C60-V1 -+ DEVICE_PROFILE := ARCHERC60V1 -+ IMAGE_SIZE := 7936k -+ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma -+ IMAGES := sysupgrade.bin factory.bin -+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade -+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -+ MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1344k(kernel),6592k(rootfs),64k(tplink)ro,64k(art)ro,7936k@0x20000(firmware) -+endef -+TARGET_DEVICES += archer-c60-v1 -+ - define Device/cpe510-520 - DEVICE_TITLE := TP-LINK CPE510/520 - DEVICE_PACKAGES := rssileds -diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default -index f5af38a726f5ce33391223a4dbeb2fc0a8cac613..3f6884dcf44c83f9867e4e9936caa79c0abc5dc1 100644 ---- a/target/linux/ar71xx/mikrotik/config-default -+++ b/target/linux/ar71xx/mikrotik/config-default -@@ -17,6 +17,8 @@ - # CONFIG_ATH79_MACH_AP90Q is not set - # CONFIG_ATH79_MACH_AP96 is not set - # CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set -+# CONFIG_ATH79_MACH_ARCHER_C59_V1 is not set -+# CONFIG_ATH79_MACH_ARCHER_C60_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C7 is not set - # CONFIG_ATH79_MACH_ARDUINO_YUN is not set - # CONFIG_ATH79_MACH_AW_NR580 is not set -diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default -index 5c18f5d594d625f91ff10e21ddc5af2b3b4d768f..a50099aca12aafdcb27f4f2b77ca2a5ce4b4d6f2 100644 ---- a/target/linux/ar71xx/nand/config-default -+++ b/target/linux/ar71xx/nand/config-default -@@ -10,6 +10,8 @@ - # CONFIG_ATH79_MACH_AP147 is not set - # CONFIG_ATH79_MACH_AP96 is not set - # CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set -+# CONFIG_ATH79_MACH_ARCHER_C59_V1 is not set -+# CONFIG_ATH79_MACH_ARCHER_C60_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C7 is not set - # CONFIG_ATH79_MACH_AW_NR580 is not set - # CONFIG_ATH79_MACH_CAP324 is not set -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index fec830c23ce6707755ddefc849f195872be1e877..aeebf8e0bbdc3ec53c42d5cc01a3ffe892b46804 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -376,6 +376,79 @@ static struct device_info boards[] = { - .last_sysupgrade_partition = "file-system" - }, - -+ /** Firmware layout for the C59v1 */ -+ { -+ .id = "ARCHER-C59-V1", -+ .vendor = "", -+ .support_list = -+ "SupportList:\r\n" -+ "{product_name:Archer C59,product_ver:1.0.0,special_id:00000000}\r\n" -+ "{product_name:Archer C59,product_ver:1.0.0,special_id:45550000}\r\n" -+ "{product_name:Archer C59,product_ver:1.0.0,special_id:55530000}\r\n", -+ .support_trail = '\x00', -+ .soft_ver = "soft_ver:1.0.0\n", -+ -+ .partitions = { -+ {"fs-uboot", 0x00000, 0x10000}, -+ {"default-mac", 0x10000, 0x00200}, -+ {"pin", 0x10200, 0x00200}, -+ {"device-id", 0x10400, 0x00100}, -+ {"product-info", 0x10500, 0x0fb00}, -+ {"os-image", 0x20000, 0x180000}, -+ {"file-system", 0x1a0000, 0xcb0000}, -+ {"partition-table", 0xe50000, 0x10000}, -+ {"soft-version", 0xe60000, 0x10000}, -+ {"support-list", 0xe70000, 0x10000}, -+ {"profile", 0xe80000, 0x10000}, -+ {"default-config", 0xe90000, 0x10000}, -+ {"user-config", 0xea0000, 0x40000}, -+ {"usb-config", 0xee0000, 0x10000}, -+ {"certificate", 0xef0000, 0x10000}, -+ {"qos-db", 0xf00000, 0x40000}, -+ {"log", 0xfe0000, 0x10000}, -+ {"radio", 0xff0000, 0x10000}, -+ {NULL, 0, 0} -+ }, -+ -+ .first_sysupgrade_partition = "os-image", -+ .last_sysupgrade_partition = "file-system", -+ }, -+ -+ /** Firmware layout for the C60v1 */ -+ { -+ .id = "ARCHER-C60-V1", -+ .vendor = "", -+ .support_list = -+ "SupportList:\r\n" -+ "{product_name:Archer C60,product_ver:1.0.0,special_id:00000000}\r\n" -+ "{product_name:Archer C60,product_ver:1.0.0,special_id:45550000}\r\n" -+ "{product_name:Archer C60,product_ver:1.0.0,special_id:55530000}\r\n", -+ .support_trail = '\x00', -+ .soft_ver = "soft_ver:1.0.0\n", -+ -+ .partitions = { -+ {"fs-uboot", 0x00000, 0x10000}, -+ {"default-mac", 0x10000, 0x00200}, -+ {"pin", 0x10200, 0x00200}, -+ {"product-info", 0x10400, 0x00100}, -+ {"partition-table", 0x10500, 0x00800}, -+ {"soft-version", 0x11300, 0x00200}, -+ {"support-list", 0x11500, 0x00100}, -+ {"device-id", 0x11600, 0x00100}, -+ {"profile", 0x11700, 0x03900}, -+ {"default-config", 0x15000, 0x04000}, -+ {"user-config", 0x19000, 0x04000}, -+ {"os-image", 0x20000, 0x150000}, -+ {"file-system", 0x170000, 0x678000}, -+ {"certyficate", 0x7e8000, 0x08000}, -+ {"radio", 0x7f0000, 0x10000}, -+ {NULL, 0, 0} -+ }, -+ -+ .first_sysupgrade_partition = "os-image", -+ .last_sysupgrade_partition = "file-system", -+ }, -+ - /** Firmware layout for the C7 */ - { - .id = "ARCHER-C7-V4", diff --git a/patches/lede/0050-ar71xx-fix-lan-ports-on-archer-C59-and-C60.patch b/patches/lede/0050-ar71xx-fix-lan-ports-on-archer-C59-and-C60.patch deleted file mode 100644 index df97d40c..00000000 --- a/patches/lede/0050-ar71xx-fix-lan-ports-on-archer-C59-and-C60.patch +++ /dev/null @@ -1,128 +0,0 @@ -From: Henryk Heisig -Date: Thu, 16 Feb 2017 15:22:49 +0100 -Subject: ar71xx: fix lan ports on archer C59 and C60 - -Signed-off-by: Henryk Heisig - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index 8552cde564b3fbed9425f42d5331f95fe5c3aaa8..5c6b47d0249c979934d61078e16759fc22aa41c7 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -64,8 +64,8 @@ archer-c25-v1) - ;; - archer-c59-v1|\ - archer-c60-v1) -- ucidef_set_led_switch "lan" "LAN" "$board:green:lan" "switch0" "0x3C" -- ucidef_set_led_switch "wan" "WAN" "$board:green:wan" "switch0" "0x02" -+ ucidef_set_led_switch "lan" "LAN" "$board:green:lan" "switch0" "0x1E" -+ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" "phy1tpt" - ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 3abe1114ee31c79abb125b85119876c3d75bb7c0..933ed22815ee076c98a83173aad143c010c9a131 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -206,9 +206,15 @@ ar71xx_setup_interfaces() - "0@eth1" "2:lan" "3:lan" "4:lan" "5:lan" "6@eth0" "1:wan" - ;; - archer-c59-v1|\ -+ rb-450g) -+ ucidef_set_interfaces_lan_wan "eth1.1" "eth0" -+ ucidef_add_switch "switch0" \ -+ "0@eth1" "1:lan:1" "2:lan:4" "3:lan:3" "4:lan:2" -+ ;; - archer-c60-v1) -+ ucidef_set_interfaces_lan_wan "eth1.1" "eth0" - ucidef_add_switch "switch0" \ -- "0@eth0" "2:lan:4" "3:lan:3" "4:lan:2" "5:lan:1" "1:wan" -+ "0@eth1" "1:lan:1" "2:lan:2" "3:lan:3" "4:lan:4" - ;; - arduino-yun|\ - dir-505-a1|\ -@@ -370,11 +376,6 @@ ar71xx_setup_interfaces() - ucidef_add_switch "switch0" \ - "0:lan:4" "1:lan:3" "2:lan:2" "3:lan:1" "5@eth1" - ;; -- rb-450g) -- ucidef_set_interfaces_lan_wan "eth1" "eth0" -- ucidef_add_switch "switch0" \ -- "0@eth1" "1:lan:1" "2:lan:4" "3:lan:3" "4:lan:2" -- ;; - routerstation-pro) - ucidef_set_interfaces_lan_wan "eth1" "eth0" - ucidef_add_switch "switch0" \ -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -index 28353aa77b05078b895ab48cf6b1ae53abe98ce2..d55f9b9f75b38159ed7209aa5acd73ff31088b51 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -@@ -194,19 +194,33 @@ static void __init archer_c59_v1_setup(void) - ARRAY_SIZE(archer_c59_v1_gpio_keys), - archer_c59_v1_gpio_keys); - -+ ath79_setup_qca956x_eth_cfg(QCA956X_ETH_CFG_SW_PHY_SWAP | -+ QCA956X_ETH_CFG_SW_PHY_ADDR_SWAP); -+ -+ ath79_register_mdio(0, 0x0); - ath79_register_mdio(1, 0x0); - -- ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1); - ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0); -+ -+ /* WAN port */ -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -+ ath79_eth0_data.speed = SPEED_100; -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_mask = BIT(0); -+ ath79_register_eth(0); -+ -+ /* LAN ports */ -+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; - ath79_eth1_data.speed = SPEED_1000; - ath79_eth1_data.duplex = DUPLEX_FULL; -- ath79_eth1_data.phy_mask = BIT(4); -+ ath79_switch_data.phy_poll_mask |= BIT(4); -+ ath79_switch_data.phy4_mii_en = 1; - ath79_register_eth(1); - - ath79_register_wmac(art + ARCHER_C59_V1_WMAC_CALDATA_OFFSET, mac); - ap91_pci_init(art + ARCHER_C59_V1_PCI_CALDATA_OFFSET, NULL); - -- - ath79_register_usb(); - gpio_request_one(ARCHER_C59_V1_GPIO_USB_POWER, - GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c60-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c60-v1.c -index 78186f02cda0a231afda4e53a1d6ff696ecb6b4a..4d83fa737b9650935b4f7f985d58f471c38cd9da 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c60-v1.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c60-v1.c -@@ -116,15 +116,25 @@ static void __init archer_c60_v1_setup(void) - ARRAY_SIZE(archer_c60_v1_gpio_keys), - archer_c60_v1_gpio_keys); - -- ath79_setup_qca956x_eth_cfg(QCA956X_ETH_CFG_SW_PHY_SWAP | -- QCA956X_ETH_CFG_SW_PHY_ADDR_SWAP); -+ ath79_register_mdio(0, 0x0); - ath79_register_mdio(1, 0x0); - -- ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0); -+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); -+ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1); - -+ /* WAN port */ -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -+ ath79_eth0_data.speed = SPEED_100; -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_mask = BIT(4); -+ ath79_register_eth(0); -+ -+ /* LAN ports */ - ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; - ath79_eth1_data.speed = SPEED_1000; - ath79_eth1_data.duplex = DUPLEX_FULL; -+ ath79_switch_data.phy_poll_mask |= BIT(4); -+ ath79_switch_data.phy4_mii_en = 1; - ath79_register_eth(1); - - ath79_register_wmac(art + ARCHER_C60_V1_WMAC_CALDATA_OFFSET, mac); diff --git a/patches/lede/0051-ar71xx-add-support-for-TP-Link-Archer-C58-v1.patch b/patches/lede/0051-ar71xx-add-support-for-TP-Link-Archer-C58-v1.patch deleted file mode 100644 index 222e0050..00000000 --- a/patches/lede/0051-ar71xx-add-support-for-TP-Link-Archer-C58-v1.patch +++ /dev/null @@ -1,411 +0,0 @@ -From: Henryk Heisig -Date: Fri, 16 Jun 2017 15:26:30 +0200 -Subject: ar71xx: add support for TP-Link Archer C58 v1 - -TP-Link Archer C58 v1 is a dual-band AC1350 router, based on Qualcomm -QCA9561 + QCA9886. It looks like Archer C59 v1 without USB port. - -Specification: - -- 775/650/258 MHz (CPU/DDR/AHB) -- 64 MB of RAM (DDR2) -- 8 MB of FLASH (SPI NOR) -- 3T3R 2.4 GHz -- 2T2R 5 GHz -- 5x 10/100 Mbps Ethernet -- 6x LED, 3x button -- UART header on PCB, RX, TX at TP4+5 (backside) - -QCA9886 wlan needs pre_cal_data file and enable ieee80211 phy hotplug to -patch macaddress. - -Flash instruction: - -Use "factory" image directly in vendor GUI. - -Recovery method: - -1. Set PC to fixed ip address 192.168.0.66/24. -2. Download "lede-ar71xx-generic-archer-c58-v1-squashfs-factory.bin" and - rename it to "tp_recovery.bin". -3. Start a tftp server with the file "tp_recovery.bin" in its root - directory. -4. Turn off the router. -5. Press and hold Reset button. -6. Turn on router with the reset button pressed and wait ~15 seconds. -7. Release the reset button and after a short time the firmware should - be transferred from the tftp server. -8. Wait ~30 second to complete recovery. - -Flash instruction under U-Boot, using UART: - -tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin -erase 0x9f020000 +$filesize -cp.b $fileaddr 0x9f020000 $filesize -reset - -This commit is based on GitHub PR#1112 - -Signed-off-by: Henryk Heisig - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index 5c6b47d0249c979934d61078e16759fc22aa41c7..f9483e9a706fbd98ce6a42e968bc0d31e9da5c84 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -62,6 +62,7 @@ archer-c25-v1) - ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x04" - ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x02" - ;; -+archer-c58-v1|\ - archer-c59-v1|\ - archer-c60-v1) - ucidef_set_led_switch "lan" "LAN" "$board:green:lan" "switch0" "0x1E" -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 933ed22815ee076c98a83173aad143c010c9a131..57bc912aa5ede22a3fad4af6a1deb00c33f17cf8 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -205,6 +205,7 @@ ar71xx_setup_interfaces() - ucidef_add_switch "switch0" \ - "0@eth1" "2:lan" "3:lan" "4:lan" "5:lan" "6@eth0" "1:wan" - ;; -+ archer-c58-v1|\ - archer-c59-v1|\ - rb-450g) - ucidef_set_interfaces_lan_wan "eth1.1" "eth0" -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 3aa1f054d4f791545a8b6644f7bd24f64ed546a3..382500b75ee6dc1fe1126fb3121f4ae205c901d4 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -52,6 +52,7 @@ get_status_led() { - ;; - archer-c25-v1|\ - archer-c7-v4|\ -+ archer-c58-v1|\ - archer-c59-v1|\ - archer-c60-v1|\ - mr12|\ -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index 5dd1d69e7e163c938759ce476846e4d985184b7b..538c86e4743109f7665096da32620d7862248aea 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -134,6 +134,13 @@ case "$FIRMWARE" in - ;; - esac - ;; -+"ath10k/pre-cal-pci-0000:00:00.0.bin") -+ case $board in -+ archer-c58-v1) -+ ath10kcal_extract "art" 20480 12064 -+ ;; -+ esac -+ ;; - *) - exit 1 - ;; -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -new file mode 100644 -index 0000000000000000000000000000000000000000..7d2eca546d76b771b12026788510f73a293a9a93 ---- /dev/null -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -@@ -0,0 +1,21 @@ -+#!/bin/ash -+ -+[ "$ACTION" == "add" ] || exit 0 -+ -+PHYNBR=${DEVPATH##*/phy} -+ -+[ -n $PHYNBR ] || exit 0 -+ -+. /lib/ar71xx.sh -+. /lib/functions/system.sh -+ -+board=$(ar71xx_board_name) -+ -+case "$board" in -+ archer-c58-v1) -+ echo $(macaddr_add $(mtd_get_mac_binary mac 8) $(($PHYNBR - 1)) ) > /sys${DEVPATH}/macaddress -+ ;; -+ *) -+ ;; -+esac -+ -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index d8e23d97e2cc20f8ba7b3b2fc516ce398c43a19b..59ede17653bbb1994ce9fa734c86c877aedf67e4 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -472,6 +472,9 @@ ar71xx_board_detect() { - *"Archer C7 v4") - name="archer-c7-v4" - ;; -+ *"Archer C58 v1") -+ name="archer-c58-v1" -+ ;; - *"Archer C59 v1") - name="archer-c59-v1" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index f4ac73e40e1acb800433a0b1348c8264a4639c30..5e8a06a7ae70ec349693c09deedbfce41a52cfc2 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -216,6 +216,7 @@ platform_check_image() { - ap90q|\ - archer-c25-v1|\ - archer-c7-v4|\ -+ archer-c58-v1|\ - archer-c59-v1|\ - archer-c60-v1|\ - bullet-m|\ -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index 5b33d48e52309b807dbdf2697524809ad08072ae..396a4fa02adb37c6e5f9f7f1cc40fd1014361654 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -52,6 +52,7 @@ CONFIG_ATH79_MACH_AP152=y - CONFIG_ATH79_MACH_AP90Q=y - CONFIG_ATH79_MACH_AP96=y - CONFIG_ATH79_MACH_ARCHER_C25_V1=y -+CONFIG_ATH79_MACH_ARCHER_C58_V1=y - CONFIG_ATH79_MACH_ARCHER_C59_V1=y - CONFIG_ATH79_MACH_ARCHER_C60_V1=y - CONFIG_ATH79_MACH_ARCHER_C7=y -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index 468d9b333e43814cbadec8d85a20ab94e5cd6d01..4c9012acc6b4c40d88ffc8752086cac86b9b9c92 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -1244,6 +1244,16 @@ config ATH79_MACH_ARCHER_C25_V1 - select ATH79_DEV_M25P80 - select ATH79_DEV_WMAC - -+config ATH79_MACH_ARCHER_C58_V1 -+ bool "TP-LINK Archer C58 v1 support" -+ select SOC_QCA956X -+ select ATH79_DEV_AP9X_PCI if PCI -+ select ATH79_DEV_ETH -+ select ATH79_DEV_GPIO_BUTTONS -+ select ATH79_DEV_LEDS_GPIO -+ select ATH79_DEV_M25P80 -+ select ATH79_DEV_WMAC -+ - config ATH79_MACH_ARCHER_C59_V1 - bool "TP-LINK Archer C59 v1 support" - select SOC_QCA956X -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -index fbe7fcb0aebb6577b96c27088a158eb025f201cb..8408894669dc5f14f05701359073ef233a1b89f0 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -@@ -57,6 +57,7 @@ obj-$(CONFIG_ATH79_MACH_AP152) += mach-ap152.o - obj-$(CONFIG_ATH79_MACH_AP90Q) += mach-ap90q.o - obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += mach-archer-c25-v1.o -+obj-$(CONFIG_ATH79_MACH_ARCHER_C58_V1) += mach-archer-c59-v1.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C59_V1) += mach-archer-c59-v1.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C60_V1) += mach-archer-c60-v1.o - obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7.o -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -index d55f9b9f75b38159ed7209aa5acd73ff31088b51..f385d4a5a3148b83ee01007145e0eda2c0ef670f 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -@@ -1,7 +1,7 @@ - /* -- * TP-Link Archer C59 v1 board support -+ * TP-Link Archer C58/C59 v1 board support - * -- * Copyright (C) 2016 Henryk Heisig -+ * Copyright (C) 2017 Henryk Heisig - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published -@@ -65,6 +65,44 @@ - #define ARCHER_C59_V1_WMAC_CALDATA_OFFSET 0x1000 - #define ARCHER_C59_V1_PCI_CALDATA_OFFSET 0x5000 - -+static struct gpio_led archer_c58_v1_leds_gpio[] __initdata = { -+ { -+ .name = "archer-c58-v1:green:power", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_POWER, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c58-v1:green:wlan2g", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WLAN2, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c58-v1:green:wlan5g", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WLAN5, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c58-v1:green:lan", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_LAN, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c58-v1:green:wan", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WAN_GREEN, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c58-v1:amber:wan", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WAN_AMBER, -+ .active_low = 1, -+ }, -+ { -+ .name = "archer-c58-v1:green:wps", -+ .gpio = ARCHER_C59_74HC_GPIO_LED_WPS, -+ .active_low = 1, -+ }, -+}; -+ - static struct gpio_led archer_c59_v1_leds_gpio[] __initdata = { - { - .name = "archer-c59-v1:green:power", -@@ -177,7 +215,7 @@ static struct spi_board_info archer_c59_v1_spi_info[] = { - }, - }; - --static void __init archer_c59_v1_setup(void) -+static void __init archer_c5x_v1_setup(void) - { - u8 *mac = (u8 *) KSEG1ADDR(0x1f010008); - u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); -@@ -187,9 +225,6 @@ static void __init archer_c59_v1_setup(void) - ARRAY_SIZE(archer_c59_v1_spi_info)); - platform_device_register(&archer_c59_v1_spi_device); - -- ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c59_v1_leds_gpio), -- archer_c59_v1_leds_gpio); -- - ath79_register_gpio_keys_polled(-1, ARCHER_C59_V1_KEYS_POLL_INTERVAL, - ARRAY_SIZE(archer_c59_v1_gpio_keys), - archer_c59_v1_gpio_keys); -@@ -233,5 +268,22 @@ static void __init archer_c59_v1_setup(void) - "LED reset"); - } - -+static void __init archer_c58_v1_setup(void) -+{ -+ archer_c5x_v1_setup(); -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c58_v1_leds_gpio), -+ archer_c58_v1_leds_gpio); -+} -+ -+MIPS_MACHINE(ATH79_MACH_ARCHER_C58_V1, "ARCHER-C58-V1", -+ "TP-LINK Archer C58 v1", archer_c58_v1_setup); -+ -+static void __init archer_c59_v1_setup(void) -+{ -+ archer_c5x_v1_setup(); -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c59_v1_leds_gpio), -+ archer_c59_v1_leds_gpio); -+} -+ - MIPS_MACHINE(ATH79_MACH_ARCHER_C59_V1, "ARCHER-C59-V1", - "TP-LINK Archer C59 v1", archer_c59_v1_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index 9fbf354e44992f4dff43df0fb0ea99c344801d97..72c1e38c74707aba8fbd3aebc36f35becabd4987 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -42,6 +42,7 @@ enum ath79_mach_type { - ATH79_MACH_AP96, /* Atheros AP96 */ - ATH79_MACH_ARCHER_C25_V1, /* TP-LINK Archer C25 V1 board */ - ATH79_MACH_ARCHER_C5, /* TP-LINK Archer C5 board */ -+ ATH79_MACH_ARCHER_C58_V1, /* TP-LINK Archer C58 V1 board */ - ATH79_MACH_ARCHER_C59_V1, /* TP-LINK Archer C59 V1 board */ - ATH79_MACH_ARCHER_C60_V1, /* TP-LINK Archer C60 V1 board */ - ATH79_MACH_ARCHER_C7, /* TP-LINK Archer C7 board */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 9e4aa8ea30aedba8050a77ebdcfc8f0034cc14d1..557bcdab2237a03957313cc3cda471a9fe3a3706 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -119,6 +119,21 @@ define Device/archer-c25-v1 - endef - TARGET_DEVICES += archer-c25-v1 - -+define Device/archer-c58-v1 -+ DEVICE_TITLE := TP-LINK Archer C58 v1 -+ DEVICE_PACKAGES := kmod-ath10k -+ BOARDNAME := ARCHER-C58-V1 -+ TPLINK_BOARD_NAME := ARCHER-C58-V1 -+ DEVICE_PROFILE := ARCHERC58V1 -+ IMAGE_SIZE := 7936k -+ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma -+ IMAGES := sysupgrade.bin factory.bin -+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade -+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -+ MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1344k(kernel),6592k(rootfs),64k(tplink)ro,64k(art)ro,7936k@0x20000(firmware) -+endef -+TARGET_DEVICES += archer-c58-v1 -+ - define Device/archer-c59-v1 - DEVICE_TITLE := TP-LINK Archer C59 v1 - DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k -diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default -index 3f6884dcf44c83f9867e4e9936caa79c0abc5dc1..23e862762600f0724a37fe1a390d4d09639c472c 100644 ---- a/target/linux/ar71xx/mikrotik/config-default -+++ b/target/linux/ar71xx/mikrotik/config-default -@@ -17,6 +17,7 @@ - # CONFIG_ATH79_MACH_AP90Q is not set - # CONFIG_ATH79_MACH_AP96 is not set - # CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set -+# CONFIG_ATH79_MACH_ARCHER_C58_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C59_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C60_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C7 is not set -diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default -index a50099aca12aafdcb27f4f2b77ca2a5ce4b4d6f2..c11ccfe29795d013776870cf21fb6ca8d907af1b 100644 ---- a/target/linux/ar71xx/nand/config-default -+++ b/target/linux/ar71xx/nand/config-default -@@ -10,6 +10,7 @@ - # CONFIG_ATH79_MACH_AP147 is not set - # CONFIG_ATH79_MACH_AP96 is not set - # CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set -+# CONFIG_ATH79_MACH_ARCHER_C58_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C59_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C60_V1 is not set - # CONFIG_ATH79_MACH_ARCHER_C7 is not set -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index aeebf8e0bbdc3ec53c42d5cc01a3ffe892b46804..67e2c4475bbd468bd20915767a481711ae872a3a 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -376,6 +376,41 @@ static struct device_info boards[] = { - .last_sysupgrade_partition = "file-system" - }, - -+ /** Firmware layout for the C58v1 */ -+ { -+ .id = "ARCHER-C58-V1", -+ .vendor = "", -+ .support_list = -+ "SupportList:\r\n" -+ "{product_name:Archer C58,product_ver:1.0.0,special_id:00000000}\r\n" -+ "{product_name:Archer C58,product_ver:1.0.0,special_id:45550000}\r\n" -+ "{product_name:Archer C58,product_ver:1.0.0,special_id:55530000}\r\n", -+ .support_trail = '\x00', -+ .soft_ver = "soft_ver:1.0.0\n", -+ -+ .partitions = { -+ {"fs-uboot", 0x00000, 0x10000}, -+ {"default-mac", 0x10000, 0x00200}, -+ {"pin", 0x10200, 0x00200}, -+ {"product-info", 0x10400, 0x00100}, -+ {"partition-table", 0x10500, 0x00800}, -+ {"soft-version", 0x11300, 0x00200}, -+ {"support-list", 0x11500, 0x00100}, -+ {"device-id", 0x11600, 0x00100}, -+ {"profile", 0x11700, 0x03900}, -+ {"default-config", 0x15000, 0x04000}, -+ {"user-config", 0x19000, 0x04000}, -+ {"os-image", 0x20000, 0x150000}, -+ {"file-system", 0x170000, 0x678000}, -+ {"certyficate", 0x7e8000, 0x08000}, -+ {"radio", 0x7f0000, 0x10000}, -+ {NULL, 0, 0} -+ }, -+ -+ .first_sysupgrade_partition = "os-image", -+ .last_sysupgrade_partition = "file-system", -+ }, -+ - /** Firmware layout for the C59v1 */ - { - .id = "ARCHER-C59-V1", diff --git a/patches/lede/0052-ath10k-firmware-update-repository.patch b/patches/lede/0052-ath10k-firmware-update-repository.patch deleted file mode 100644 index 8dbaffaa..00000000 --- a/patches/lede/0052-ath10k-firmware-update-repository.patch +++ /dev/null @@ -1,21 +0,0 @@ -From: David Bauer -Date: Thu, 11 Jan 2018 21:17:15 +0100 -Subject: ath10k-firmware: update repository - -diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile -index 8bf5729fff16677ef6449498f1df3cda19272583..81dce0eb7aeee20e2ed3be4cc6699bf867487a96 100644 ---- a/package/firmware/ath10k-firmware/Makefile -+++ b/package/firmware/ath10k-firmware/Makefile -@@ -8,9 +8,9 @@ - include $(TOPDIR)/rules.mk - - PKG_NAME:=ath10k-firmware --PKG_SOURCE_DATE:=2017-01-11 --PKG_SOURCE_VERSION:=ab432c60437931a165f0aff1a6e3371f358b75dd --PKG_MIRROR_HASH:=e3188ecd4d7470d3cdde89fefa6258f9ec4f404b23558d1474e5014679b28101 -+PKG_SOURCE_DATE:=2017-03-29 -+PKG_SOURCE_VERSION:=956e2609b7e42c8c710bba10ef925a5be1be5137 -+PKG_MIRROR_HASH:=25f724ff38c830281b3efba4a4ddffaae0c4bd8fea0f4c1061591229ff05535b - PKG_RELEASE:=1 - - PKG_SOURCE_PROTO:=git diff --git a/patches/lede/0053-ath10k-firmware-add-qca9888-firmware.patch b/patches/lede/0053-ath10k-firmware-add-qca9888-firmware.patch deleted file mode 100644 index 66b337f3..00000000 --- a/patches/lede/0053-ath10k-firmware-add-qca9888-firmware.patch +++ /dev/null @@ -1,53 +0,0 @@ -From: John Crispin -Date: Mon, 8 May 2017 08:51:46 +0200 -Subject: ath10k-firmware: add qca9888 firmware - -the firmware files for qca9888 were previously not packaged. add the meta -information for doing so. - -Signed-off-by: John Crispin - -diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile -index 81dce0eb7aeee20e2ed3be4cc6699bf867487a96..aac8ee2b271678b03f58a6cb68beae6d53467dc1 100644 ---- a/package/firmware/ath10k-firmware/Makefile -+++ b/package/firmware/ath10k-firmware/Makefile -@@ -32,6 +32,11 @@ $(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-qca9887-ct - $(Package/ath10k-firmware-default) - TITLE:=ath10k-CT firmware for QCA9887 devices -@@ -240,6 +245,19 @@ define Package/ath10k-firmware-qca9887/install - $(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/board-2.bin \ -+ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin -+ $(INSTALL_DATA) \ -+ $(PKG_BUILD_DIR)/QCA9888/hw2.0/firmware-5.bin_10.4-3.2-00072 \ -+ $(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) \ -@@ -328,6 +346,7 @@ define Package/ath10k-firmware-qca9984-ct/install - 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)) diff --git a/patches/lede/0054-ar71xx-fix-board.bin-used-by-QCA9886-in-Archer-C58-C59-C60.patch b/patches/lede/0054-ar71xx-fix-board.bin-used-by-QCA9886-in-Archer-C58-C59-C60.patch deleted file mode 100644 index 68c59d20..00000000 --- a/patches/lede/0054-ar71xx-fix-board.bin-used-by-QCA9886-in-Archer-C58-C59-C60.patch +++ /dev/null @@ -1,20 +0,0 @@ -From: Henryk Heisig -Date: Thu, 29 Jun 2017 15:38:22 +0200 -Subject: ar71xx: fix board.bin used by QCA9886 in Archer C58/C59/C60 - -Signed-off-by: Henryk Heisig -(cherry picked from commit e917e51bf91fc7cb5085bda5e67d62520801f9cc) - -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index 538c86e4743109f7665096da32620d7862248aea..cfdc20455d61c3900473f57c3267b1a3fd10e150 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -138,6 +138,8 @@ case "$FIRMWARE" in - case $board in - archer-c58-v1) - ath10kcal_extract "art" 20480 12064 -+ ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ -+ /lib/firmware/ath10k/QCA9888/hw2.0/board.bin - ;; - esac - ;; diff --git a/patches/lede/0055-ar71xx-Archer-C58-C59-C60-fix-qca9886-wireless-interface.patch b/patches/lede/0055-ar71xx-Archer-C58-C59-C60-fix-qca9886-wireless-interface.patch deleted file mode 100644 index 291948db..00000000 --- a/patches/lede/0055-ar71xx-Archer-C58-C59-C60-fix-qca9886-wireless-interface.patch +++ /dev/null @@ -1,71 +0,0 @@ -From: Henryk Heisig -Date: Thu, 29 Jun 2017 15:20:31 +0200 -Subject: ar71xx: Archer C58/C59/C60 fix qca9886 wireless interface - -This commit fix 5GHz wireless interface used in Archer C58/C59/C60v1 -and set correctly MAC address on this interface. - -Signed-off-by: Henryk Heisig -(cherry picked from commit 34958c826915cf864833ed8ba6e5b49d44c6cb41) - -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index cfdc20455d61c3900473f57c3267b1a3fd10e150..91bdf0d3c591516f58030b165052b3dd2751314f 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -136,7 +136,9 @@ case "$FIRMWARE" in - ;; - "ath10k/pre-cal-pci-0000:00:00.0.bin") - case $board in -- archer-c58-v1) -+ archer-c58-v1|\ -+ archer-c59-v1|\ -+ archer-c60-v1) - ath10kcal_extract "art" 20480 12064 - ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ - /lib/firmware/ath10k/QCA9888/hw2.0/board.bin -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -index 7d2eca546d76b771b12026788510f73a293a9a93..669b208231e43fe86e998c7202c133c86ae0bf8d 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -@@ -12,7 +12,9 @@ PHYNBR=${DEVPATH##*/phy} - board=$(ar71xx_board_name) - - case "$board" in -- archer-c58-v1) -+ archer-c58-v1|\ -+ archer-c59-v1|\ -+ archer-c60-v1) - echo $(macaddr_add $(mtd_get_mac_binary mac 8) $(($PHYNBR - 1)) ) > /sys${DEVPATH}/macaddress - ;; - *) -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 557bcdab2237a03957313cc3cda471a9fe3a3706..ed45866fcbe8d35af663799a91b09b5c8fd613bc 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -121,7 +121,7 @@ TARGET_DEVICES += archer-c25-v1 - - define Device/archer-c58-v1 - DEVICE_TITLE := TP-LINK Archer C58 v1 -- DEVICE_PACKAGES := kmod-ath10k -+ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9888 - BOARDNAME := ARCHER-C58-V1 - TPLINK_BOARD_NAME := ARCHER-C58-V1 - DEVICE_PROFILE := ARCHERC58V1 -@@ -136,7 +136,7 @@ TARGET_DEVICES += archer-c58-v1 - - define Device/archer-c59-v1 - DEVICE_TITLE := TP-LINK Archer C59 v1 -- DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k -+ DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca9888 - BOARDNAME := ARCHER-C59-V1 - TPLINK_BOARD_NAME := ARCHER-C59-V1 - DEVICE_PROFILE := ARCHERC59V1 -@@ -151,7 +151,7 @@ TARGET_DEVICES += archer-c59-v1 - - define Device/archer-c60-v1 - DEVICE_TITLE := TP-LINK Archer C60 v1 -- DEVICE_PACKAGES := kmod-ath10k -+ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9888 - BOARDNAME := ARCHER-C60-V1 - TPLINK_BOARD_NAME := ARCHER-C60-V1 - DEVICE_PROFILE := ARCHERC60V1 diff --git a/patches/lede/0056-ath10k-firmware-qca9888-firmware-remove-board.bin.patch b/patches/lede/0056-ath10k-firmware-qca9888-firmware-remove-board.bin.patch deleted file mode 100644 index 777d91dc..00000000 --- a/patches/lede/0056-ath10k-firmware-qca9888-firmware-remove-board.bin.patch +++ /dev/null @@ -1,20 +0,0 @@ -From: Henryk Heisig -Date: Mon, 3 Jul 2017 23:59:54 +0200 -Subject: ath10k-firmware: qca9888 firmware: remove board.bin - -Signed-off-by: Henryk Heisig - -diff --git a/package/firmware/ath10k-firmware/Makefile b/package/firmware/ath10k-firmware/Makefile -index aac8ee2b271678b03f58a6cb68beae6d53467dc1..e8cc4b91c3f59f09e4281c7b36048dc66bd04f3b 100644 ---- a/package/firmware/ath10k-firmware/Makefile -+++ b/package/firmware/ath10k-firmware/Makefile -@@ -250,9 +250,6 @@ define Package/ath10k-firmware-qca9888/install - $(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/board-2.bin \ -- $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin - $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/QCA9888/hw2.0/firmware-5.bin_10.4-3.2-00072 \ - $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin diff --git a/patches/lede/0057-ar71xx-C58-C59-fix-LAN1-working-incorrectly.patch b/patches/lede/0057-ar71xx-C58-C59-fix-LAN1-working-incorrectly.patch deleted file mode 100644 index 6cdb1140..00000000 --- a/patches/lede/0057-ar71xx-C58-C59-fix-LAN1-working-incorrectly.patch +++ /dev/null @@ -1,22 +0,0 @@ -From: David Bauer -Date: Mon, 27 Nov 2017 04:19:38 +0100 -Subject: ar71xx: C58/C59 fix LAN1 working incorrectly - -This commit fixes LAN Port 1 not transferring data in case no -other LAN Port has active link-state on TP-Link Archer C58/C59. - -Signed-off-by: David Bauer - -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -index f385d4a5a3148b83ee01007145e0eda2c0ef670f..129aa53f304dd1a118ace9a2749855cb36f66cfc 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c -@@ -249,7 +249,7 @@ static void __init archer_c5x_v1_setup(void) - ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; - ath79_eth1_data.speed = SPEED_1000; - ath79_eth1_data.duplex = DUPLEX_FULL; -- ath79_switch_data.phy_poll_mask |= BIT(4); -+ ath79_switch_data.phy_poll_mask |= BIT(0); - ath79_switch_data.phy4_mii_en = 1; - ath79_register_eth(1); - diff --git a/patches/lede/0058-ar71xx-omit-VLAN-from-Archer-C58-C59-LAN-interface.patch b/patches/lede/0058-ar71xx-omit-VLAN-from-Archer-C58-C59-LAN-interface.patch deleted file mode 100644 index 044a5556..00000000 --- a/patches/lede/0058-ar71xx-omit-VLAN-from-Archer-C58-C59-LAN-interface.patch +++ /dev/null @@ -1,17 +0,0 @@ -From: David Bauer -Date: Thu, 11 Jan 2018 21:23:30 +0100 -Subject: ar71xx: omit VLAN from Archer C58/C59 LAN interface - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 57bc912aa5ede22a3fad4af6a1deb00c33f17cf8..1690172b5dfac1e1aa278c38c27ba64cfd61ade0 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -208,7 +208,7 @@ ar71xx_setup_interfaces() - archer-c58-v1|\ - archer-c59-v1|\ - rb-450g) -- ucidef_set_interfaces_lan_wan "eth1.1" "eth0" -+ ucidef_set_interfaces_lan_wan "eth1" "eth0" - ucidef_add_switch "switch0" \ - "0@eth1" "1:lan:1" "2:lan:4" "3:lan:3" "4:lan:2" - ;; diff --git a/patches/lede/0059-ar71xx-increase-kernel-partition-size-for-some-TP-Link-boards.patch b/patches/lede/0059-ar71xx-increase-kernel-partition-size-for-some-TP-Link-boards.patch deleted file mode 100644 index aad94373..00000000 --- a/patches/lede/0059-ar71xx-increase-kernel-partition-size-for-some-TP-Link-boards.patch +++ /dev/null @@ -1,64 +0,0 @@ -From: Henryk Heisig -Date: Fri, 27 Oct 2017 00:23:17 +0200 -Subject: ar71xx: increase kernel partition size for some TP-Link boards - -This patch increases kernel partition size and re-enables image -generation for below TP-Link boards: - -- archer-c58-v1 -- archer-c60-v1 -- tl-wr902ac-v1 -- tl-wr942n-v1 - -Signed-off-by: Henryk Heisig -[commit message and title reworded] -Signed-off-by: Piotr Dymacz - -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index ed45866fcbe8d35af663799a91b09b5c8fd613bc..be7e846c88f9ebbb8a4e4840e690d7864386bf64 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -130,7 +130,7 @@ define Device/archer-c58-v1 - IMAGES := sysupgrade.bin factory.bin - IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade - IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -- MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1344k(kernel),6592k(rootfs),64k(tplink)ro,64k(art)ro,7936k@0x20000(firmware) -+ MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,7936k(firmware),64k(tplink)ro,64k(art)ro - endef - TARGET_DEVICES += archer-c58-v1 - -@@ -160,7 +160,7 @@ define Device/archer-c60-v1 - IMAGES := sysupgrade.bin factory.bin - IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade - IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -- MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1344k(kernel),6592k(rootfs),64k(tplink)ro,64k(art)ro,7936k@0x20000(firmware) -+ MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,7936k(firmware),64k(tplink)ro,64k(art)ro - endef - TARGET_DEVICES += archer-c60-v1 - -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 67e2c4475bbd468bd20915767a481711ae872a3a..11ff2e56e19ec3780f988baf7257810530165b23 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -400,8 +400,8 @@ static struct device_info boards[] = { - {"profile", 0x11700, 0x03900}, - {"default-config", 0x15000, 0x04000}, - {"user-config", 0x19000, 0x04000}, -- {"os-image", 0x20000, 0x150000}, -- {"file-system", 0x170000, 0x678000}, -+ {"os-image", 0x20000, 0x180000}, -+ {"file-system", 0x1a0000, 0x648000}, - {"certyficate", 0x7e8000, 0x08000}, - {"radio", 0x7f0000, 0x10000}, - {NULL, 0, 0} -@@ -473,8 +473,8 @@ static struct device_info boards[] = { - {"profile", 0x11700, 0x03900}, - {"default-config", 0x15000, 0x04000}, - {"user-config", 0x19000, 0x04000}, -- {"os-image", 0x20000, 0x150000}, -- {"file-system", 0x170000, 0x678000}, -+ {"os-image", 0x20000, 0x180000}, -+ {"file-system", 0x1a0000, 0x648000}, - {"certyficate", 0x7e8000, 0x08000}, - {"radio", 0x7f0000, 0x10000}, - {NULL, 0, 0} diff --git a/patches/lede/0060-ar71xx-add-unaligned-access-hacks-for-VXLAN.patch b/patches/lede/0060-ar71xx-add-unaligned-access-hacks-for-VXLAN.patch deleted file mode 100644 index c7ae68ce..00000000 --- a/patches/lede/0060-ar71xx-add-unaligned-access-hacks-for-VXLAN.patch +++ /dev/null @@ -1,130 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 24 Jan 2018 21:34:54 +0100 -Subject: ar71xx: add unaligned access hacks for VXLAN - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch b/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch -index 374f9be3b4b76984842d3673ea78b70aadc9476a..3b6ed31556cbd1fa81bb6b616fc78e19b56099c4 100644 ---- a/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch -+++ b/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch -@@ -929,3 +929,119 @@ - }; - if (skb->ip_summed != CHECKSUM_PARTIAL) { - *sum = csum_fold(csum_partial(diff, sizeof(diff), -+--- a/drivers/net/vxlan.c -++++ b/drivers/net/vxlan.c -+@@ -1759,8 +1759,8 @@ static int vxlan6_xmit_skb(struct dst_en -+ } -+ -+ vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh)); -+- vxh->vx_flags = htonl(VXLAN_HF_VNI); -+- vxh->vx_vni = vni; -++ net_hdr_word(&vxh->vx_flags) = htonl(VXLAN_HF_VNI); -++ net_hdr_word(&vxh->vx_vni) = vni; -+ -+ if (type & SKB_GSO_TUNNEL_REMCSUM) { -+ u32 data = (skb_checksum_start_offset(skb) - hdrlen) >> -+@@ -1769,8 +1769,8 @@ static int vxlan6_xmit_skb(struct dst_en -+ if (skb->csum_offset == offsetof(struct udphdr, check)) -+ data |= VXLAN_RCO_UDP; -+ -+- vxh->vx_vni |= htonl(data); -+- vxh->vx_flags |= htonl(VXLAN_HF_RCO); -++ net_hdr_word(&vxh->vx_vni) |= htonl(data); -++ net_hdr_word(&vxh->vx_flags) |= htonl(VXLAN_HF_RCO); -+ -+ if (!skb_is_gso(skb)) { -+ skb->ip_summed = CHECKSUM_NONE; -+@@ -1838,8 +1838,8 @@ static int vxlan_xmit_skb(struct rtable -+ return PTR_ERR(skb); -+ -+ vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh)); -+- vxh->vx_flags = htonl(VXLAN_HF_VNI); -+- vxh->vx_vni = vni; -++ net_hdr_word(&vxh->vx_flags) = htonl(VXLAN_HF_VNI); -++ net_hdr_word(&vxh->vx_vni) = vni; -+ -+ if (type & SKB_GSO_TUNNEL_REMCSUM) { -+ u32 data = (skb_checksum_start_offset(skb) - hdrlen) >> -+@@ -1848,8 +1848,8 @@ static int vxlan_xmit_skb(struct rtable -+ if (skb->csum_offset == offsetof(struct udphdr, check)) -+ data |= VXLAN_RCO_UDP; -+ -+- vxh->vx_vni |= htonl(data); -+- vxh->vx_flags |= htonl(VXLAN_HF_RCO); -++ net_hdr_word(&vxh->vx_vni) |= htonl(data); -++ net_hdr_word(&vxh->vx_flags) |= htonl(VXLAN_HF_RCO); -+ -+ if (!skb_is_gso(skb)) { -+ skb->ip_summed = CHECKSUM_NONE; -+--- a/include/linux/etherdevice.h -++++ b/include/linux/etherdevice.h -+@@ -409,7 +409,7 @@ static inline bool is_etherdev_addr(cons -+ * @b: Pointer to Ethernet header -+ * -+ * Compare two Ethernet headers, returns 0 if equal. -+- * This assumes that the network header (i.e., IP header) is 4-byte -++ * This assumes that the network header (i.e., IP header) is 2-byte -+ * aligned OR the platform can handle unaligned access. This is the -+ * case for all packets coming into netif_receive_skb or similar -+ * entry points. -+@@ -432,11 +432,12 @@ static inline unsigned long compare_ethe -+ fold |= *(unsigned long *)(a + 6) ^ *(unsigned long *)(b + 6); -+ return fold; -+ #else -+- u32 *a32 = (u32 *)((u8 *)a + 2); -+- u32 *b32 = (u32 *)((u8 *)b + 2); -++ const u16 *a16 = a; -++ const u16 *b16 = b; -+ -+- return (*(u16 *)a ^ *(u16 *)b) | (a32[0] ^ b32[0]) | -+- (a32[1] ^ b32[1]) | (a32[2] ^ b32[2]); -++ return (a16[0] ^ b16[0]) | (a16[1] ^ b16[1]) | (a16[2] ^ b16[2]) | -++ (a16[3] ^ b16[3]) | (a16[4] ^ b16[4]) | (a16[5] ^ b16[5]) | -++ (a16[6] ^ b16[6]); -+ #endif -+ } -+ -+--- a/net/ipv4/tcp_offload.c -++++ b/net/ipv4/tcp_offload.c -+@@ -221,7 +221,7 @@ struct sk_buff **tcp_gro_receive(struct -+ -+ th2 = tcp_hdr(p); -+ -+- if (*(u32 *)&th->source ^ *(u32 *)&th2->source) { -++ if (net_hdr_word(&th->source) ^ net_hdr_word(&th2->source)) { -+ NAPI_GRO_CB(p)->same_flow = 0; -+ continue; -+ } -+@@ -239,8 +239,8 @@ found: -+ ~(TCP_FLAG_CWR | TCP_FLAG_FIN | TCP_FLAG_PSH)); -+ flush |= (__force int)(th->ack_seq ^ th2->ack_seq); -+ for (i = sizeof(*th); i < thlen; i += 4) -+- flush |= *(u32 *)((u8 *)th + i) ^ -+- *(u32 *)((u8 *)th2 + i); -++ flush |= net_hdr_word((u8 *)th + i) ^ -++ net_hdr_word((u8 *)th2 + i); -+ -+ mss = skb_shinfo(p)->gso_size; -+ -+--- a/net/ipv6/netfilter/ip6table_mangle.c -++++ b/net/ipv6/netfilter/ip6table_mangle.c -+@@ -55,7 +55,7 @@ ip6t_mangle_out(struct sk_buff *skb, con -+ hop_limit = ipv6_hdr(skb)->hop_limit; -+ -+ /* flowlabel and prio (includes version, which shouldn't change either */ -+- flowlabel = *((u_int32_t *)ipv6_hdr(skb)); -++ flowlabel = net_hdr_word(ipv6_hdr(skb)); -+ -+ ret = ip6t_do_table(skb, state, state->net->ipv6.ip6table_mangle); -+ -+@@ -64,7 +64,7 @@ ip6t_mangle_out(struct sk_buff *skb, con -+ !ipv6_addr_equal(&ipv6_hdr(skb)->daddr, &daddr) || -+ skb->mark != mark || -+ ipv6_hdr(skb)->hop_limit != hop_limit || -+- flowlabel != *((u_int32_t *)ipv6_hdr(skb)))) { -++ flowlabel != net_hdr_word(ipv6_hdr(skb)))) { -+ err = ip6_route_me_harder(state->net, skb); -+ if (err < 0) -+ ret = NF_DROP_ERR(err); diff --git a/patches/lede/0061-netifd-system-linux-VXLAN-add-options-to-enable-and-disable-UDP-checksums.patch b/patches/lede/0061-netifd-system-linux-VXLAN-add-options-to-enable-and-disable-UDP-checksums.patch deleted file mode 100644 index 887a6e74..00000000 --- a/patches/lede/0061-netifd-system-linux-VXLAN-add-options-to-enable-and-disable-UDP-checksums.patch +++ /dev/null @@ -1,75 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 24 Jan 2018 20:53:32 +0100 -Subject: netifd: system-linux: VXLAN: add options to enable and disable UDP checksums - -diff --git a/package/network/config/netifd/patches/0002-system-linux-VXLAN-add-options-to-enable-and-disable.patch b/package/network/config/netifd/patches/0002-system-linux-VXLAN-add-options-to-enable-and-disable.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..67a8bb864be37fa97dfcce4dd841bacafefcd0fc ---- /dev/null -+++ b/package/network/config/netifd/patches/0002-system-linux-VXLAN-add-options-to-enable-and-disable.patch -@@ -0,0 +1,65 @@ -+From af3cadb6a46ba93e8a729e71d82b176275931e62 Mon Sep 17 00:00:00 2001 -+Message-Id: -+From: Matthias Schiffer -+Date: Wed, 24 Jan 2018 13:21:44 +0100 -+Subject: [PATCH] system-linux: VXLAN: add options to enable and disable UDP -+ checksums -+ -+Signed-off-by: Matthias Schiffer -+--- -+ system-linux.c | 11 +++++++++++ -+ system.c | 2 ++ -+ system.h | 2 ++ -+ 3 files changed, 15 insertions(+) -+ -+diff --git a/system-linux.c b/system-linux.c -+index 32d6ffc..0277886 100644 -+--- a/system-linux.c -++++ b/system-linux.c -+@@ -2841,6 +2841,17 @@ static int system_add_vxlan(const char *name, const unsigned int link, struct bl -+ } -+ nla_put_u16(msg, IFLA_VXLAN_PORT, htons(port)); -+ -++ if ((cur = tb_data[VXLAN_DATA_ATTR_RXCSUM])) { -++ bool rxcsum = blobmsg_get_bool(cur); -++ nla_put_u8(msg, IFLA_VXLAN_UDP_ZERO_CSUM6_RX, !rxcsum); -++ } -++ -++ if ((cur = tb_data[VXLAN_DATA_ATTR_TXCSUM])) { -++ bool txcsum = blobmsg_get_bool(cur); -++ nla_put_u8(msg, IFLA_VXLAN_UDP_CSUM, txcsum); -++ nla_put_u8(msg, IFLA_VXLAN_UDP_ZERO_CSUM6_TX, !txcsum); -++ } -++ -+ if ((cur = tb[TUNNEL_ATTR_TOS])) { -+ char *str = blobmsg_get_string(cur); -+ unsigned tos = 1; -+diff --git a/system.c b/system.c -+index 5555272..e236e96 100644 -+--- a/system.c -++++ b/system.c -+@@ -36,6 +36,8 @@ static const struct blobmsg_policy vxlan_data_attrs[__VXLAN_DATA_ATTR_MAX] = { -+ [VXLAN_DATA_ATTR_ID] = { .name = "id", .type = BLOBMSG_TYPE_INT32 }, -+ [VXLAN_DATA_ATTR_PORT] = { .name = "port", .type = BLOBMSG_TYPE_INT32 }, -+ [VXLAN_DATA_ATTR_MACADDR] = { .name = "macaddr", .type = BLOBMSG_TYPE_STRING }, -++ [VXLAN_DATA_ATTR_RXCSUM] = { .name = "rxcsum", .type = BLOBMSG_TYPE_BOOL }, -++ [VXLAN_DATA_ATTR_TXCSUM] = { .name = "txcsum", .type = BLOBMSG_TYPE_BOOL }, -+ }; -+ -+ const struct uci_blob_param_list vxlan_data_attr_list = { -+diff --git a/system.h b/system.h -+index 61c72c2..371a524 100644 -+--- a/system.h -++++ b/system.h -+@@ -41,6 +41,8 @@ enum vxlan_data { -+ VXLAN_DATA_ATTR_ID, -+ VXLAN_DATA_ATTR_PORT, -+ VXLAN_DATA_ATTR_MACADDR, -++ VXLAN_DATA_ATTR_RXCSUM, -++ VXLAN_DATA_ATTR_TXCSUM, -+ __VXLAN_DATA_ATTR_MAX -+ }; -+ -+-- -+2.16.1 -+ diff --git a/patches/lede/0062-vxlan-add-options-to-enable-and-disable-UDP-checksums.patch b/patches/lede/0062-vxlan-add-options-to-enable-and-disable-UDP-checksums.patch deleted file mode 100644 index 123177c6..00000000 --- a/patches/lede/0062-vxlan-add-options-to-enable-and-disable-UDP-checksums.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 24 Jan 2018 13:51:45 +0100 -Subject: vxlan: add options to enable and disable UDP checksums - -Signed-off-by: Matthias Schiffer - -diff --git a/package/network/config/vxlan/Makefile b/package/network/config/vxlan/Makefile -index a471d4e90cbe30c1d1dd01dbf7553995d8c0485e..aeceb9cd884e517b2f274925637b62a538bfa70e 100644 ---- a/package/network/config/vxlan/Makefile -+++ b/package/network/config/vxlan/Makefile -@@ -1,7 +1,7 @@ - include $(TOPDIR)/rules.mk - - PKG_NAME:=vxlan --PKG_VERSION:=1 -+PKG_VERSION:=2 - PKG_LICENSE:=GPL-2.0 - - include $(INCLUDE_DIR)/package.mk -diff --git a/package/network/config/vxlan/files/vxlan.sh b/package/network/config/vxlan/files/vxlan.sh -index 27ccd8f12759f69c7c226cac0c923335b8ccc6a8..d055d41edc59f50c0c132849bbcd0235edeef5b9 100755 ---- a/package/network/config/vxlan/files/vxlan.sh -+++ b/package/network/config/vxlan/files/vxlan.sh -@@ -15,8 +15,8 @@ vxlan_generic_setup() { - - local link="$cfg" - -- local port vid ttl tos mtu macaddr zone -- json_get_vars port vid ttl tos mtu macaddr zone -+ local port vid ttl tos mtu macaddr zone rxcsum txcsum -+ json_get_vars port vid ttl tos mtu macaddr zone rxcsum txcsum - - - proto_init_update "$link" 1 -@@ -36,6 +36,8 @@ vxlan_generic_setup() { - [ -n "$port" ] && json_add_int port "$port" - [ -n "$vid" ] && json_add_int id "$vid" - [ -n "$macaddr" ] && json_add_string macaddr "$macaddr" -+ [ -n "$rxcsum" ] && json_add_boolean rxcsum "$rxcsum" -+ [ -n "$txcsum" ] && json_add_boolean txcsum "$txcsum" - json_close_object - - proto_close_tunnel diff --git a/patches/lede/0063-ramips-mtd-spi-nor-add-support-for-switching-between-3-byte-and-4-byte-addressing-on-w25q256-flash.patch b/patches/lede/0063-ramips-mtd-spi-nor-add-support-for-switching-between-3-byte-and-4-byte-addressing-on-w25q256-flash.patch deleted file mode 100644 index db75be88..00000000 --- a/patches/lede/0063-ramips-mtd-spi-nor-add-support-for-switching-between-3-byte-and-4-byte-addressing-on-w25q256-flash.patch +++ /dev/null @@ -1,456 +0,0 @@ -From: Vincent Wiemann -Date: Sat, 6 Jan 2018 04:33:09 +0100 -Subject: ramips: mtd: spi-nor: add support for switching between 3-byte and 4-byte addressing on w25q256 flash - -CAUTION! NEEDS TESTING! -Tries to backport switching between 3-byte and 4-byte addressing on w25q256 flash from Lede master (62ede4f78389c313a8004e79330a7d055eda2f7d) by Felix Fietkau. - -Applied patches: -mtd: spi-nor: rename SPINOR_OP_* macros of the 4-byte address op codes -mtd: spi-nor: add a stateless method to support memory size above 128Mib -mtd: spi-nor: add w25q256 3b-mode-switch -mtd: add chunked read-io to m25p80 - -On some devices the flash chip needs to be in 3-byte addressing mode during -reboot, otherwise the boot loader will fail to start. -This mode however does not allow regular reads/writes onto the upper 16M -half. W25Q256 has separate read commands for reading from >16M, however -it does not have any separate write commands. -This patch changes the code to leave the chip in 3-byte mode most of the -time and only switch during erase/write cycles that go to >16M -addresses. - -Signed-off-by: Vincent Wiemann (me@bibbl.com) - -diff --git a/target/linux/ramips/patches-4.4/400-mtd-spi-nor-add-w25q256-3b-mode-switch.patch b/target/linux/ramips/patches-4.4/400-mtd-spi-nor-add-w25q256-3b-mode-switch.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..5399f547e4edd0eb1cfee8c1ec5b35e69c692ee9 ---- /dev/null -+++ b/target/linux/ramips/patches-4.4/400-mtd-spi-nor-add-w25q256-3b-mode-switch.patch -@@ -0,0 +1,399 @@ -+--- a/drivers/mtd/devices/serial_flash_cmds.h -++++ b/drivers/mtd/devices/serial_flash_cmds.h -+@@ -18,19 +18,12 @@ -+ #define SPINOR_OP_RDVCR 0x85 -+ -+ /* JEDEC Standard - Serial Flash Discoverable Parmeters (SFDP) Commands */ -+-#define SPINOR_OP_READ_1_2_2 0xbb /* DUAL I/O READ */ -+-#define SPINOR_OP_READ_1_4_4 0xeb /* QUAD I/O READ */ -+- -+ #define SPINOR_OP_WRITE 0x02 /* PAGE PROGRAM */ -+ #define SPINOR_OP_WRITE_1_1_2 0xa2 /* DUAL INPUT PROGRAM */ -+ #define SPINOR_OP_WRITE_1_2_2 0xd2 /* DUAL INPUT EXT PROGRAM */ -+ #define SPINOR_OP_WRITE_1_1_4 0x32 /* QUAD INPUT PROGRAM */ -+ #define SPINOR_OP_WRITE_1_4_4 0x12 /* QUAD INPUT EXT PROGRAM */ -+ -+-/* READ commands with 32-bit addressing */ -+-#define SPINOR_OP_READ4_1_2_2 0xbc -+-#define SPINOR_OP_READ4_1_4_4 0xec -+- -+ /* Configuration flags */ -+ #define FLASH_FLAG_SINGLE 0x000000ff -+ #define FLASH_FLAG_READ_WRITE 0x00000001 -+--- a/drivers/mtd/devices/st_spi_fsm.c -++++ b/drivers/mtd/devices/st_spi_fsm.c -+@@ -507,13 +507,13 @@ static struct seq_rw_config n25q_read3_c -+ * - 'FAST' variants configured for 8 dummy cycles (see note above.) -+ */ -+ static struct seq_rw_config n25q_read4_configs[] = { -+- {FLASH_FLAG_READ_1_4_4, SPINOR_OP_READ4_1_4_4, 0, 4, 4, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_1_1_4, SPINOR_OP_READ4_1_1_4, 0, 1, 4, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_1_2_2, SPINOR_OP_READ4_1_2_2, 0, 2, 2, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_1_1_2, SPINOR_OP_READ4_1_1_2, 0, 1, 2, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_FAST, SPINOR_OP_READ4_FAST, 0, 1, 1, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_WRITE, SPINOR_OP_READ4, 0, 1, 1, 0x00, 0, 0}, -+- {0x00, 0, 0, 0, 0, 0x00, 0, 0}, -++ {FLASH_FLAG_READ_1_4_4, SPINOR_OP_READ_1_4_4_4B, 0, 4, 4, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_1_1_4, SPINOR_OP_READ_1_1_4_4B, 0, 1, 4, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_1_2_2, SPINOR_OP_READ_1_2_2_4B, 0, 2, 2, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_1_1_2, SPINOR_OP_READ_1_1_2_4B, 0, 1, 2, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_FAST, SPINOR_OP_READ_FAST_4B, 0, 1, 1, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_WRITE, SPINOR_OP_READ_4B, 0, 1, 1, 0x00, 0, 0}, -++ {0x00, 0, 0, 0, 0, 0x00, 0, 0}, -+ }; -+ -+ /* -+@@ -553,13 +553,13 @@ static int stfsm_mx25_en_32bit_addr_seq( -+ * entering a state that is incompatible with the SPIBoot Controller. -+ */ -+ static struct seq_rw_config stfsm_s25fl_read4_configs[] = { -+- {FLASH_FLAG_READ_1_4_4, SPINOR_OP_READ4_1_4_4, 0, 4, 4, 0x00, 2, 4}, -+- {FLASH_FLAG_READ_1_1_4, SPINOR_OP_READ4_1_1_4, 0, 1, 4, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_1_2_2, SPINOR_OP_READ4_1_2_2, 0, 2, 2, 0x00, 4, 0}, -+- {FLASH_FLAG_READ_1_1_2, SPINOR_OP_READ4_1_1_2, 0, 1, 2, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_FAST, SPINOR_OP_READ4_FAST, 0, 1, 1, 0x00, 0, 8}, -+- {FLASH_FLAG_READ_WRITE, SPINOR_OP_READ4, 0, 1, 1, 0x00, 0, 0}, -+- {0x00, 0, 0, 0, 0, 0x00, 0, 0}, -++ {FLASH_FLAG_READ_1_4_4, SPINOR_OP_READ_1_4_4_4B, 0, 4, 4, 0x00, 2, 4}, -++ {FLASH_FLAG_READ_1_1_4, SPINOR_OP_READ_1_1_4_4B, 0, 1, 4, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_1_2_2, SPINOR_OP_READ_1_2_2_4B, 0, 2, 2, 0x00, 4, 0}, -++ {FLASH_FLAG_READ_1_1_2, SPINOR_OP_READ_1_1_2_4B, 0, 1, 2, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_FAST, SPINOR_OP_READ_FAST_4B, 0, 1, 1, 0x00, 0, 8}, -++ {FLASH_FLAG_READ_WRITE, SPINOR_OP_READ_4B, 0, 1, 1, 0x00, 0, 0}, -++ {0x00, 0, 0, 0, 0, 0x00, 0, 0}, -+ }; -+ -+ static struct seq_rw_config stfsm_s25fl_write4_configs[] = { -+--- a/drivers/mtd/spi-nor/spi-nor.c -++++ b/drivers/mtd/spi-nor/spi-nor.c -+@@ -69,6 +69,14 @@ struct flash_info { -+ #define SPI_NOR_QUAD_READ 0x40 /* Flash supports Quad Read */ -+ #define USE_FSR 0x80 /* use flag status register */ -+ #define SPI_NOR_HAS_LOCK 0x100 /* Flash supports lock/unlock via SR */ -++#define SPI_NOR_4B_OPCODES 0x200 /* -++ * Use dedicated 4byte address op codes -++ * to support memory size above 128Mib. -++ */ -++#define SPI_NOR_4B_READ_OP 0x400 /* -++ * Like SPI_NOR_4B_OPCODES, but for read -++ * op code only. -++ */ -+ }; -+ -+ #define JEDEC_MFR(info) ((info)->id[0]) -+@@ -182,6 +190,89 @@ static inline struct spi_nor *mtd_to_spi -+ return mtd->priv; -+ } -+ -++ -++static u8 spi_nor_convert_opcode(u8 opcode, const u8 table[][2], size_t size) -++{ -++ size_t i; -++ -++ for (i = 0; i < size; i++) -++ if (table[i][0] == opcode) -++ return table[i][1]; -++ -++ /* No conversion found, keep input op code. */ -++ return opcode; -++} -++ -++static inline u8 spi_nor_convert_3to4_read(u8 opcode) -++{ -++ static const u8 spi_nor_3to4_read[][2] = { -++ { SPINOR_OP_READ, SPINOR_OP_READ_4B }, -++ { SPINOR_OP_READ_FAST, SPINOR_OP_READ_FAST_4B }, -++ { SPINOR_OP_READ_1_1_2, SPINOR_OP_READ_1_1_2_4B }, -++ { SPINOR_OP_READ_1_2_2, SPINOR_OP_READ_1_2_2_4B }, -++ { SPINOR_OP_READ_1_1_4, SPINOR_OP_READ_1_1_4_4B }, -++ { SPINOR_OP_READ_1_4_4, SPINOR_OP_READ_1_4_4_4B }, -++ }; -++ -++ return spi_nor_convert_opcode(opcode, spi_nor_3to4_read, -++ ARRAY_SIZE(spi_nor_3to4_read)); -++} -++ -++static inline u8 spi_nor_convert_3to4_program(u8 opcode) -++{ -++ static const u8 spi_nor_3to4_program[][2] = { -++ { SPINOR_OP_PP, SPINOR_OP_PP_4B }, -++ { SPINOR_OP_PP_1_1_4, SPINOR_OP_PP_1_1_4_4B }, -++ { SPINOR_OP_PP_1_4_4, SPINOR_OP_PP_1_4_4_4B }, -++ }; -++ -++ return spi_nor_convert_opcode(opcode, spi_nor_3to4_program, -++ ARRAY_SIZE(spi_nor_3to4_program)); -++} -++ -++static inline u8 spi_nor_convert_3to4_erase(u8 opcode) -++{ -++ static const u8 spi_nor_3to4_erase[][2] = { -++ { SPINOR_OP_BE_4K, SPINOR_OP_BE_4K_4B }, -++ { SPINOR_OP_BE_32K, SPINOR_OP_BE_32K_4B }, -++ { SPINOR_OP_SE, SPINOR_OP_SE_4B }, -++ }; -++ -++ return spi_nor_convert_opcode(opcode, spi_nor_3to4_erase, -++ ARRAY_SIZE(spi_nor_3to4_erase)); -++} -++ -++static void spi_nor_set_4byte_read(struct spi_nor *nor, -++ const struct flash_info *info) -++{ -++ nor->addr_width = 3; -++ nor->ext_addr = 0; -++ nor->read_opcode = spi_nor_convert_3to4_read(nor->read_opcode); -++ nor->flags |= SNOR_F_4B_EXT_ADDR; -++} -++ -++ -++ -++static void spi_nor_set_4byte_opcodes(struct spi_nor *nor, -++ const struct flash_info *info) -++{ -++ /* Do some manufacturer fixups first */ -++ switch (JEDEC_MFR(info)) { -++ case SNOR_MFR_SPANSION: -++ /* No small sector erase for 4-byte command set */ -++ nor->erase_opcode = SPINOR_OP_SE; -++ nor->mtd.erasesize = info->sector_size; -++ break; -++ -++ default: -++ break; -++ } -++ -++ nor->read_opcode = spi_nor_convert_3to4_read(nor->read_opcode); -++ nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode); -++ nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode); -++} -++ -+ /* Enable/disable 4-byte addressing mode. */ -+ static inline int set_4byte(struct spi_nor *nor, const struct flash_info *info, -+ int enable) -+@@ -313,6 +404,36 @@ static void spi_nor_unlock_and_unprep(st -+ mutex_unlock(&nor->lock); -+ } -+ -++static int spi_nor_check_ext_addr(struct spi_nor *nor, u32 addr) -++{ -++ bool ext_addr; -++ int ret; -++ u8 cmd; -++ -++ if (!(nor->flags & SNOR_F_4B_EXT_ADDR)) -++ return 0; -++ -++ ext_addr = !!(addr & 0xff000000); -++ if (nor->ext_addr == ext_addr) -++ return 0; -++ -++ cmd = ext_addr ? SPINOR_OP_EN4B : SPINOR_OP_EX4B; -++ write_enable(nor); -++ ret = nor->write_reg(nor, cmd, NULL, 0); -++ if (ret) -++ return ret; -++ -++ cmd = 0; -++ ret = nor->write_reg(nor, SPINOR_OP_WREAR, &cmd, 1); -++ if (ret) -++ return ret; -++ -++ nor->addr_width = 3 + ext_addr; -++ nor->ext_addr = ext_addr; -++ write_disable(nor); -++ return 0; -++} -++ -+ /* -+ * Erase an address range on the nor chip. The address range may extend -+ * one or more erase sectors. Return an error is there is a problem erasing. -+@@ -338,6 +459,10 @@ static int spi_nor_erase(struct mtd_info -+ if (ret) -+ return ret; -+ -++ ret = spi_nor_check_ext_addr(nor, addr + len); -++ if (ret) -++ return ret; -++ -+ /* whole-chip erase? */ -+ if (len == mtd->size) { -+ unsigned long timeout; -+@@ -396,6 +521,7 @@ static int spi_nor_erase(struct mtd_info -+ return ret; -+ -+ erase_err: -++ spi_nor_check_ext_addr(nor, 0); -+ spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_ERASE); -+ instr->state = MTD_ERASE_FAILED; -+ return ret; -+@@ -585,7 +711,9 @@ static int spi_nor_lock(struct mtd_info -+ if (ret) -+ return ret; -+ -++ spi_nor_check_ext_addr(nor, ofs + len); -+ ret = nor->flash_lock(nor, ofs, len); -++ spi_nor_check_ext_addr(nor, 0); -+ -+ spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_UNLOCK); -+ return ret; -+@@ -600,7 +728,9 @@ static int spi_nor_unlock(struct mtd_inf -+ if (ret) -+ return ret; -+ -++ spi_nor_check_ext_addr(nor, ofs + len); -+ ret = nor->flash_unlock(nor, ofs, len); -++ spi_nor_check_ext_addr(nor, 0); -+ -+ spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK); -+ return ret; -+@@ -851,7 +981,7 @@ static const struct flash_info spi_nor_i -+ { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) }, -+ { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) }, -+ { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) }, -+- { "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K) }, -++ { "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_READ_OP) }, -+ -+ /* Catalyst / On Semiconductor -- non-JEDEC */ -+ { "cat25c11", CAT25_INFO( 16, 8, 16, 1, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) }, -+@@ -898,8 +1028,23 @@ static int spi_nor_read(struct mtd_info -+ if (ret) -+ return ret; -+ -++ if (nor->flags & SNOR_F_4B_EXT_ADDR) -++ nor->addr_width = 4; -++ -+ ret = nor->read(nor, from, len, retlen, buf); -+ -++ if (nor->flags & SNOR_F_4B_EXT_ADDR) { -++ u8 val = 0; -++ -++ if ((from + len) & 0xff000000) { -++ write_enable(nor); -++ nor->write_reg(nor, SPINOR_OP_WREAR, &val, 1); -++ write_disable(nor); -++ } -++ -++ nor->addr_width = 3; -++ } -++ -+ spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ); -+ return ret; -+ } -+@@ -988,6 +1133,10 @@ static int spi_nor_write(struct mtd_info -+ if (ret) -+ return ret; -+ -++ ret = spi_nor_check_ext_addr(nor, to + len); -++ if (ret < 0) -++ return ret; -++ -+ write_enable(nor); -+ -+ page_offset = to & (nor->page_size - 1); -+@@ -1018,6 +1167,7 @@ static int spi_nor_write(struct mtd_info -+ -+ ret = spi_nor_wait_till_ready(nor); -+ write_err: -++ spi_nor_check_ext_addr(nor, 0); -+ spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE); -+ return ret; -+ } -+@@ -1366,27 +1516,12 @@ int spi_nor_scan(struct spi_nor *nor, co -+ else if (mtd->size > 0x1000000) { -+ /* enable 4-byte addressing if the device exceeds 16MiB */ -+ nor->addr_width = 4; -+- if (JEDEC_MFR(info) == SNOR_MFR_SPANSION) { -+- /* Dedicated 4-byte command set */ -+- switch (nor->flash_read) { -+- case SPI_NOR_QUAD: -+- nor->read_opcode = SPINOR_OP_READ4_1_1_4; -+- break; -+- case SPI_NOR_DUAL: -+- nor->read_opcode = SPINOR_OP_READ4_1_1_2; -+- break; -+- case SPI_NOR_FAST: -+- nor->read_opcode = SPINOR_OP_READ4_FAST; -+- break; -+- case SPI_NOR_NORMAL: -+- nor->read_opcode = SPINOR_OP_READ4; -+- break; -+- } -+- nor->program_opcode = SPINOR_OP_PP_4B; -+- /* No small sector erase for 4-byte command set */ -+- nor->erase_opcode = SPINOR_OP_SE_4B; -+- mtd->erasesize = info->sector_size; -+- } else -++ if (info->flags & SPI_NOR_4B_READ_OP) -++ spi_nor_set_4byte_read(nor, info); -++ else if (JEDEC_MFR(info) == SNOR_MFR_SPANSION || -++ info->flags & SPI_NOR_4B_OPCODES) -++ spi_nor_set_4byte_opcodes(nor, info); -++ else -+ set_4byte(nor, info, 1); -+ } else { -+ nor->addr_width = 3; -+--- a/include/linux/mtd/spi-nor.h -++++ b/include/linux/mtd/spi-nor.h -+@@ -42,9 +42,13 @@ -+ #define SPINOR_OP_WRSR 0x01 /* Write status register 1 byte */ -+ #define SPINOR_OP_READ 0x03 /* Read data bytes (low frequency) */ -+ #define SPINOR_OP_READ_FAST 0x0b /* Read data bytes (high frequency) */ -+-#define SPINOR_OP_READ_1_1_2 0x3b /* Read data bytes (Dual SPI) */ -+-#define SPINOR_OP_READ_1_1_4 0x6b /* Read data bytes (Quad SPI) */ -++#define SPINOR_OP_READ_1_1_2 0x3b /* Read data bytes (Dual Output SPI) */ -++#define SPINOR_OP_READ_1_2_2 0xbb /* Read data bytes (Dual I/O SPI) */ -++#define SPINOR_OP_READ_1_1_4 0x6b /* Read data bytes (Quad Output SPI) */ -++#define SPINOR_OP_READ_1_4_4 0xeb /* Read data bytes (Quad I/O SPI) */ -+ #define SPINOR_OP_PP 0x02 /* Page program (up to 256 bytes) */ -++#define SPINOR_OP_PP_1_1_4 0x32 /* Quad page program */ -++#define SPINOR_OP_PP_1_4_4 0x38 /* Quad page program */ -+ #define SPINOR_OP_BE_4K 0x20 /* Erase 4KiB block */ -+ #define SPINOR_OP_BE_4K_PMC 0xd7 /* Erase 4KiB block on PMC chips */ -+ #define SPINOR_OP_BE_32K 0x52 /* Erase 32KiB block */ -+@@ -55,11 +59,17 @@ -+ #define SPINOR_OP_RDFSR 0x70 /* Read flag status register */ -+ -+ /* 4-byte address opcodes - used on Spansion and some Macronix flashes. */ -+-#define SPINOR_OP_READ4 0x13 /* Read data bytes (low frequency) */ -+-#define SPINOR_OP_READ4_FAST 0x0c /* Read data bytes (high frequency) */ -+-#define SPINOR_OP_READ4_1_1_2 0x3c /* Read data bytes (Dual SPI) */ -+-#define SPINOR_OP_READ4_1_1_4 0x6c /* Read data bytes (Quad SPI) */ -++#define SPINOR_OP_READ_4B 0x13 /* Read data bytes (low frequency) */ -++#define SPINOR_OP_READ_FAST_4B 0x0c /* Read data bytes (high frequency) */ -++#define SPINOR_OP_READ_1_1_2_4B 0x3c /* Read data bytes (Dual Output SPI) */ -++#define SPINOR_OP_READ_1_2_2_4B 0xbc /* Read data bytes (Dual I/O SPI) */ -++#define SPINOR_OP_READ_1_1_4_4B 0x6c /* Read data bytes (Quad Output SPI) */ -++#define SPINOR_OP_READ_1_4_4_4B 0xec /* Read data bytes (Quad I/O SPI) */ -+ #define SPINOR_OP_PP_4B 0x12 /* Page program (up to 256 bytes) */ -++#define SPINOR_OP_PP_1_1_4_4B 0x34 /* Quad page program */ -++#define SPINOR_OP_PP_1_4_4_4B 0x3e /* Quad page program */ -++#define SPINOR_OP_BE_4K_4B 0x21 /* Erase 4KiB block */ -++#define SPINOR_OP_BE_32K_4B 0x5c /* Erase 32KiB block */ -+ #define SPINOR_OP_SE_4B 0xdc /* Sector erase (usually 64KiB) */ -+ -+ /* Used for SST flashes only. */ -+@@ -70,6 +80,7 @@ -+ /* Used for Macronix and Winbond flashes. */ -+ #define SPINOR_OP_EN4B 0xb7 /* Enter 4-byte mode */ -+ #define SPINOR_OP_EX4B 0xe9 /* Exit 4-byte mode */ -++#define SPINOR_OP_WREAR 0xc5 /* Write extended address register */ -+ -+ /* Used for Spansion flashes only. */ -+ #define SPINOR_OP_BRWR 0x17 /* Bank register write */ -+@@ -117,6 +128,7 @@ enum spi_nor_ops { -+ enum spi_nor_option_flags { -+ SNOR_F_USE_FSR = BIT(0), -+ SNOR_F_SST = BIT(1), -++ SNOR_F_4B_EXT_ADDR = BIT(5), -+ }; -+ -+ /** -+@@ -166,6 +178,7 @@ struct spi_nor { -+ enum read_mode flash_read; -+ bool sst_write_second; -+ u32 flags; -++ u8 ext_addr; -+ u8 cmd_buf[SPI_NOR_MAX_CMD_SIZE]; -+ -+ int (*prepare)(struct spi_nor *nor, enum spi_nor_ops ops); -diff --git a/target/linux/ramips/patches-4.4/401-mtd-add-chunked-read-io-to-m25p80.patch b/target/linux/ramips/patches-4.4/401-mtd-add-chunked-read-io-to-m25p80.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..b6111abad7063951c07688c66854fa743daeb6c6 ---- /dev/null -+++ b/target/linux/ramips/patches-4.4/401-mtd-add-chunked-read-io-to-m25p80.patch -@@ -0,0 +1,21 @@ -+--- a/drivers/mtd/spi-nor/spi-nor.c -++++ b/drivers/mtd/spi-nor/spi-nor.c -+@@ -1176,6 +1176,7 @@ static int spi_nor_chunked_write(struct -+ size_t *_retlen, const u_char *_buf) -+ { -+ struct spi_nor *nor = mtd_to_spi_nor(mtd); -++ u32 addr_width = nor->addr_width + !!(nor->flags & SNOR_F_4B_EXT_ADDR); -+ int chunk_size; -+ int retlen = 0; -+ int ret; -+@@ -1184,8 +1185,8 @@ static int spi_nor_chunked_write(struct -+ if (!chunk_size) -+ chunk_size = _len; -+ -+- if (nor->addr_width > 3) -+- chunk_size -= nor->addr_width - 3; -++ if (addr_width > 3) -++ chunk_size -= addr_width - 3; -+ -+ while (retlen < _len) { -+ size_t len = min_t(int, chunk_size, _len - retlen); diff --git a/patches/lede/0064-ramips-prepare-ZBT-WG3526-for-hardware-variants.patch b/patches/lede/0064-ramips-prepare-ZBT-WG3526-for-hardware-variants.patch deleted file mode 100644 index 00b54070..00000000 --- a/patches/lede/0064-ramips-prepare-ZBT-WG3526-for-hardware-variants.patch +++ /dev/null @@ -1,99 +0,0 @@ -From: Mathias Kresin -Date: Fri, 7 Apr 2017 23:52:27 +0200 -Subject: ramips: prepare ZBT-WG3526 for hardware variants - -The ZBT-WG3526 is available with 16 or 32 MByte of flash. Rename the -current supported 16MByte version to indicate which flash size variant -is supported. - -Signed-off-by: Mathias Kresin - -Conflicts (Resolved): - target/linux/ramips/image/mt7621.mk - -Signed-off-by: Vincent Wiemann - -further adjustments for backport to lede-17.01 branch - -Signed-off-by: Andreas Ziegler - -diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh -index b1091f66b2897a19bd01d4a26a1b3647656fa62b..8e27a79fc1744d6bed9db8d930207c418899cab1 100755 ---- a/target/linux/ramips/base-files/lib/ramips.sh -+++ b/target/linux/ramips/base-files/lib/ramips.sh -@@ -637,8 +637,8 @@ ramips_board_detect() { - *"ZBT-WG2626") - name="zbt-wg2626" - ;; -- *"ZBT-WG3526") -- name="zbt-wg3526" -+ *"ZBT-WG3526 (16M)") -+ name="zbt-wg3526-16M" - ;; - *"ZBT-WR8305RT") - name="zbt-wr8305rt" -diff --git a/target/linux/ramips/dts/ZBT-WG3526-16M.dts b/target/linux/ramips/dts/ZBT-WG3526-16M.dts -new file mode 100644 -index 0000000000000000000000000000000000000000..fb644502071d6641194c66baf552035937f35669 ---- /dev/null -+++ b/target/linux/ramips/dts/ZBT-WG3526-16M.dts -@@ -0,0 +1,15 @@ -+/dts-v1/; -+ -+#include "ZBT-WG3526.dtsi" -+ -+/ { -+ model = "ZBT-WG3526 (16M)"; -+}; -+ -+&firmware { -+ reg = <0x50000 0xfb0000>; -+}; -+ -+&status_led { -+ label = "zbt-wg3526:green:status"; -+}; -diff --git a/target/linux/ramips/dts/ZBT-WG3526.dts b/target/linux/ramips/dts/ZBT-WG3526.dts -deleted file mode 100644 -index c361bdd827bffdc24405b1a1b191403ebeec46d0..0000000000000000000000000000000000000000 ---- a/target/linux/ramips/dts/ZBT-WG3526.dts -+++ /dev/null -@@ -1,15 +0,0 @@ --/dts-v1/; -- --#include "ZBT-WG3526.dtsi" -- --/ { -- model = "ZBT-WG3526"; --}; -- --&firmware { -- reg = <0x50000 0xfb0000>; --}; -- --&status_led { -- label = "zbt-wg3526:green:status"; --}; -diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk -index 8218bea84410536151a216cd2cc0300369ad977a..cabc86b28eb040f0d1e58d917e6edc4a97e80db7 100644 ---- a/target/linux/ramips/image/mt7621.mk -+++ b/target/linux/ramips/image/mt7621.mk -@@ -226,13 +226,14 @@ define Device/zbt-wg2626 - endef - TARGET_DEVICES += zbt-wg2626 - --define Device/zbt-wg3526 -- DTS := ZBT-WG3526 -+define Device/zbt-wg3526-16M -+ DTS := ZBT-WG3526-16M - IMAGE_SIZE := $(ralink_default_fw_size_16M) -- DEVICE_TITLE := ZBT WG3526 -+ SUPPORTED_DEVICES += zbt-wg3526 -+ DEVICE_TITLE := ZBT WG3526 (16MB flash) - DEVICE_PACKAGES := kmod-usb3 kmod-usb-ledtrig-usbport kmod-ata-core kmod-ata-ahci - endef --TARGET_DEVICES += zbt-wg3526 -+TARGET_DEVICES += zbt-wg3526-16M - - # FIXME: is this still needed? - define Image/Prepare diff --git a/patches/lede/0065-ramips-rename-Digineo-AC1200-Pro-to-ZBT-WG3526-32MB.patch b/patches/lede/0065-ramips-rename-Digineo-AC1200-Pro-to-ZBT-WG3526-32MB.patch deleted file mode 100644 index e87812e7..00000000 --- a/patches/lede/0065-ramips-rename-Digineo-AC1200-Pro-to-ZBT-WG3526-32MB.patch +++ /dev/null @@ -1,193 +0,0 @@ -From: Mathias Kresin -Date: Sat, 1 Apr 2017 10:46:44 +0200 -Subject: ramips: rename Digineo AC1200 Pro to ZBT-WG3526 32MB - -The Digineo AC1200 Pro is the 32MB flash variant of the ZBT-WG3526 with -unpopulated/exposed sdhci slot. Rename to board to the OEM/ODM name and -add the sdhci kernel module to use it for multiple clones. - -Signed-off-by: Mathias Kresin - -Conflicts (Resolved): - target/linux/ramips/base-files/etc/diag.sh - -Signed-off-by: Vincent Wiemann - -further adjustments for backport to lede-17.01 branch - -Signed-off-by: Andreas Ziegler - -diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network -index 5a4042339c6761703578e014612062ac78babd9d..b9c8fe774fedab34267a8635033b9235d9d6c3aa 100755 ---- a/target/linux/ramips/base-files/etc/board.d/02_network -+++ b/target/linux/ramips/base-files/etc/board.d/02_network -@@ -70,7 +70,6 @@ ramips_setup_interfaces() - ucidef_set_interface_lan "eth0.2" - ;; - 3g-6200n|\ -- ac1200pro|\ - ai-br100|\ - d240|\ - db-wrt01|\ -diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh -index 9dbd6c4141d7facef2108cbb5cf3a7057522c88e..c4f521954c74635c61f42558f0d9b71f0f671c22 100644 ---- a/target/linux/ramips/base-files/etc/diag.sh -+++ b/target/linux/ramips/base-files/etc/diag.sh -@@ -59,7 +59,10 @@ get_status_led() { - wn3000rpv3) - status_led="$board:red:power" - ;; -- ac1200pro|\ -+ ai-br100|\ -+ ht-tm02) -+ status_led="$board:blue:wlan" -+ ;; - all0239-3g|\ - dcs-930|\ - dir-300-b1|\ -@@ -85,10 +88,6 @@ get_status_led() { - zbt-wg3526) - status_led="$board:green:status" - ;; -- ai-br100|\ -- ht-tm02) -- status_led="$board:blue:wlan" -- ;; - atp-52b|\ - ip2202) - status_led="$board:green:run" -diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh -index 8e27a79fc1744d6bed9db8d930207c418899cab1..b9279a5a1e9baf55ca7f59dbb22ac0b0b7b01db4 100755 ---- a/target/linux/ramips/base-files/lib/ramips.sh -+++ b/target/linux/ramips/base-files/lib/ramips.sh -@@ -130,9 +130,6 @@ ramips_board_detect() { - *"DCS-930L B1") - name="dcs-930l-b1" - ;; -- *"Digineo AC1200 Pro") -- name="ac1200pro" -- ;; - *"DIR-300 B1") - name="dir-300-b1" - ;; -@@ -640,6 +637,9 @@ ramips_board_detect() { - *"ZBT-WG3526 (16M)") - name="zbt-wg3526-16M" - ;; -+ *"ZBT-WG3526 (32M)") -+ name="zbt-wg3526-32M" -+ ;; - *"ZBT-WR8305RT") - name="zbt-wr8305rt" - ;; -diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh -index d3efc2dd37ed855a1c0e966e448b67ae73324d5f..a45275077df8fa317c38adc8f0ab12fd4b0ecb83 100755 ---- a/target/linux/ramips/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh -@@ -17,7 +17,6 @@ platform_check_image() { - 3g150b|\ - 3g300m|\ - a5-v11|\ -- ac1200pro|\ - ai-br100|\ - air3gii|\ - all0239-3g|\ -diff --git a/target/linux/ramips/dts/AC1200pro.dts b/target/linux/ramips/dts/AC1200pro.dts -deleted file mode 100644 -index fbec81844025cf2a6544dec8dfeca02fce89fdc1..0000000000000000000000000000000000000000 ---- a/target/linux/ramips/dts/AC1200pro.dts -+++ /dev/null -@@ -1,15 +0,0 @@ --/dts-v1/; -- --#include "ZBT-WG3526.dtsi" -- --/ { -- model = "Digineo AC1200 Pro"; --}; -- --&firmware { -- reg = <0x50000 0x1fb0000>; --}; -- --&status_led { -- label = "ac1200pro:green:status"; --}; -diff --git a/target/linux/ramips/dts/ZBT-WG3526-16M.dts b/target/linux/ramips/dts/ZBT-WG3526-16M.dts -index fb644502071d6641194c66baf552035937f35669..1e2f1525028f69468257cd8af8d5bad0319bc551 100644 ---- a/target/linux/ramips/dts/ZBT-WG3526-16M.dts -+++ b/target/linux/ramips/dts/ZBT-WG3526-16M.dts -@@ -9,7 +9,3 @@ - &firmware { - reg = <0x50000 0xfb0000>; - }; -- --&status_led { -- label = "zbt-wg3526:green:status"; --}; -diff --git a/target/linux/ramips/dts/ZBT-WG3526-32M.dts b/target/linux/ramips/dts/ZBT-WG3526-32M.dts -new file mode 100644 -index 0000000000000000000000000000000000000000..99a4b45824ba4ee6c1a1c81615291c8efde1a7ac ---- /dev/null -+++ b/target/linux/ramips/dts/ZBT-WG3526-32M.dts -@@ -0,0 +1,11 @@ -+/dts-v1/; -+ -+#include "ZBT-WG3526.dtsi" -+ -+/ { -+ model = "ZBT-WG3526 (32M)"; -+}; -+ -+&firmware { -+ reg = <0x50000 0x1fb0000>; -+}; -diff --git a/target/linux/ramips/dts/ZBT-WG3526.dtsi b/target/linux/ramips/dts/ZBT-WG3526.dtsi -index 582e42083920c465588f14e59e10eafe735640fb..5e195fb8120d3a66f19acf83c9f76bb4b1ec3e7e 100644 ---- a/target/linux/ramips/dts/ZBT-WG3526.dtsi -+++ b/target/linux/ramips/dts/ZBT-WG3526.dtsi -@@ -35,7 +35,8 @@ - gpio-leds { - compatible = "gpio-leds"; - -- status_led: status { -+ status { -+ label = "zbt-wg3526:green:status"; - gpios = <&gpio0 24 1>; - }; - }; -diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk -index cabc86b28eb040f0d1e58d917e6edc4a97e80db7..aa84d78b9e42259cbee7de6c052fa7ab500a040a 100644 ---- a/target/linux/ramips/image/mt7621.mk -+++ b/target/linux/ramips/image/mt7621.mk -@@ -34,14 +34,6 @@ define Device/11acnas - endef - TARGET_DEVICES += 11acnas - --define Device/ac1200pro -- DTS := AC1200pro -- IMAGE_SIZE := $(ralink_default_fw_size_32M) -- DEVICE_TITLE := Digineo AC1200 Pro -- DEVICE_PACKAGES := kmod-usb3 kmod-ata-core kmod-ata-ahci --endef --TARGET_DEVICES += ac1200pro -- - define Device/dir-860l-b1 - DTS := DIR-860L-B1 - BLOCKSIZE := 64k -@@ -235,6 +227,15 @@ define Device/zbt-wg3526-16M - endef - TARGET_DEVICES += zbt-wg3526-16M - -+define Device/zbt-wg3526-32M -+ DTS := ZBT-WG3526-32M -+ IMAGE_SIZE := $(ralink_default_fw_size_32M) -+ SUPPORTED_DEVICES += ac1200pro -+ DEVICE_TITLE := ZBT WG3526 (32MB flash) -+ DEVICE_PACKAGES := kmod-usb3 kmod-usb-ledtrig-usbport kmod-ata-core kmod-ata-ahci kmod-sdhci-mt7620 -+endef -+TARGET_DEVICES += zbt-wg3526-32M -+ - # FIXME: is this still needed? - define Image/Prepare - #define Build/Compile diff --git a/patches/lede/0066-kernel-bridge-ebtables-Avoid-resetting-limit-rule-state.patch b/patches/lede/0066-kernel-bridge-ebtables-Avoid-resetting-limit-rule-state.patch deleted file mode 100644 index 631637e8..00000000 --- a/patches/lede/0066-kernel-bridge-ebtables-Avoid-resetting-limit-rule-state.patch +++ /dev/null @@ -1,63 +0,0 @@ -From: Linus Lüssing -Date: Sun, 26 Nov 2017 05:19:21 +0100 -Subject: kernel: bridge: ebtables: Avoid resetting limit rule state - -Link: https://patchwork.ozlabs.org/patch/841210/ -Signed-off-by: Linus Lüssing - -diff --git a/target/linux/generic/patches-4.4/121-bridge-ebtables-Avoid-resetting-limit-rule-state.patch b/target/linux/generic/patches-4.4/121-bridge-ebtables-Avoid-resetting-limit-rule-state.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..417fdd75e543ebb6a3fdd56cb97fc83324eeb104 ---- /dev/null -+++ b/target/linux/generic/patches-4.4/121-bridge-ebtables-Avoid-resetting-limit-rule-state.patch -@@ -0,0 +1,50 @@ -+From 535097827e437bfa1906ed3210e6504750f4342b Mon Sep 17 00:00:00 2001 -+From: =?UTF-8?q?Linus=20L=C3=BCssing?= -+Date: Sat, 25 Nov 2017 00:36:13 +0100 -+Subject: [PATCH] bridge: ebtables: Avoid resetting limit rule state -+MIME-Version: 1.0 -+Content-Type: text/plain; charset=UTF-8 -+Content-Transfer-Encoding: 8bit -+ -+So far any changes with ebtables will reset the state of limit rules, -+leading to spikes in traffic. This is especially noticeable if changes -+are done frequently, for instance via a daemon. -+ -+This patch fixes this by bailing out from (re)setting if the limit -+rule was initialized before. -+ -+When sending packets every 250ms for 600s, with a -+"--limit 1/sec --limit-burst 50" rule and a command like this -+in the background: -+ -+$ ebtables -N VOIDCHAIN -+$ while true; do ebtables -F VOIDCHAIN; sleep 30; done -+ -+The results are: -+ -+Before: ~1600 packets -+After: 650 packets -+ -+Signed-off-by: Linus Lüssing -+--- -+ net/bridge/netfilter/ebt_limit.c | 4 ++++ -+ 1 file changed, 4 insertions(+) -+ -+diff --git a/net/bridge/netfilter/ebt_limit.c b/net/bridge/netfilter/ebt_limit.c -+index 61a9f1be1263..f74b48633feb 100644 -+--- a/net/bridge/netfilter/ebt_limit.c -++++ b/net/bridge/netfilter/ebt_limit.c -+@@ -69,6 +69,10 @@ static int ebt_limit_mt_check(const struct xt_mtchk_param *par) -+ { -+ struct ebt_limit_info *info = par->matchinfo; -+ -++ /* Do not reset state on unrelated table changes */ -++ if (info->prev) -++ return 0; -++ -+ /* Check for overflow. */ -+ if (info->burst == 0 || -+ user2credits(info->avg * info->burst) < user2credits(info->avg)) { -+-- -+2.11.0 -+ diff --git a/patches/lede/0067-ebtables-add-support-for-ICMP-IGMP-type-matches.patch b/patches/lede/0067-ebtables-add-support-for-ICMP-IGMP-type-matches.patch deleted file mode 100644 index c5b4de9a..00000000 --- a/patches/lede/0067-ebtables-add-support-for-ICMP-IGMP-type-matches.patch +++ /dev/null @@ -1,1183 +0,0 @@ -From: Matthias Schiffer -Date: Sun, 4 Mar 2018 10:26:34 +0100 -Subject: ebtables: add support for ICMP/IGMP type matches - -Signed-off-by: Matthias Schiffer - -diff --git a/package/network/utils/ebtables/patches/301-0001-include-sync-linux-netfilter_bridge-ebt_ip.h-with-ke.patch b/package/network/utils/ebtables/patches/301-0001-include-sync-linux-netfilter_bridge-ebt_ip.h-with-ke.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..b6f42c6a4affc9bb04a6ac9269698e751a932f2a ---- /dev/null -+++ b/package/network/utils/ebtables/patches/301-0001-include-sync-linux-netfilter_bridge-ebt_ip.h-with-ke.patch -@@ -0,0 +1,56 @@ -+From 44fcc3392bb7d52df2ad52b8e9437255b8c29d5a Mon Sep 17 00:00:00 2001 -+Message-Id: <44fcc3392bb7d52df2ad52b8e9437255b8c29d5a.1520151963.git.mschiffer@universe-factory.net> -+In-Reply-To: -+References: -+From: Matthias Schiffer -+Date: Sat, 3 Mar 2018 12:14:48 +0100 -+Subject: [PATCH ebtables 1/4] include: sync linux/netfilter_bridge/ebt_ip.h -+ with kernel -+ -+Signed-off-by: Matthias Schiffer -+--- -+ include/linux/netfilter_bridge/ebt_ip.h | 16 +++++++++++++--- -+ 1 file changed, 13 insertions(+), 3 deletions(-) -+ -+diff --git a/include/linux/netfilter_bridge/ebt_ip.h b/include/linux/netfilter_bridge/ebt_ip.h -+index c4bbc41b0ea4..46d6261370b0 100644 -+--- a/include/linux/netfilter_bridge/ebt_ip.h -++++ b/include/linux/netfilter_bridge/ebt_ip.h -+@@ -1,3 +1,4 @@ -++/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -+ /* -+ * ebt_ip -+ * -+@@ -23,8 +24,10 @@ -+ #define EBT_IP_PROTO 0x08 -+ #define EBT_IP_SPORT 0x10 -+ #define EBT_IP_DPORT 0x20 -++#define EBT_IP_ICMP 0x40 -++#define EBT_IP_IGMP 0x80 -+ #define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\ -+- EBT_IP_SPORT | EBT_IP_DPORT ) -++ EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP | EBT_IP_IGMP) -+ #define EBT_IP_MATCH "ip" -+ -+ /* the same values are used for the invflags */ -+@@ -37,8 +40,15 @@ struct ebt_ip_info { -+ __u8 protocol; -+ __u8 bitmask; -+ __u8 invflags; -+- __u16 sport[2]; -+- __u16 dport[2]; -++ union { -++ __u16 sport[2]; -++ __u8 icmp_type[2]; -++ __u8 igmp_type[2]; -++ }; -++ union { -++ __u16 dport[2]; -++ __u8 icmp_code[2]; -++ }; -+ }; -+ -+ #endif -+-- -+2.16.2 -+ -diff --git a/package/network/utils/ebtables/patches/301-0002-Move-ICMP-type-handling-functions-from-ebt_ip6-to-us.patch b/package/network/utils/ebtables/patches/301-0002-Move-ICMP-type-handling-functions-from-ebt_ip6-to-us.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..c3eaec4412fcaebffa84b409a0a66e2f714a0e8d ---- /dev/null -+++ b/package/network/utils/ebtables/patches/301-0002-Move-ICMP-type-handling-functions-from-ebt_ip6-to-us.patch -@@ -0,0 +1,465 @@ -+From e40c68fcf13e2244ab6c87844126167e998ccb56 Mon Sep 17 00:00:00 2001 -+Message-Id: -+In-Reply-To: -+References: -+From: Matthias Schiffer -+Date: Sun, 4 Mar 2018 08:18:18 +0100 -+Subject: [PATCH ebtables 2/4] Move ICMP type handling functions from ebt_ip6 -+ to useful_functions.c -+ -+Allow using these functions for ebt_ip as well. -+ -+Signed-off-by: Matthias Schiffer -+--- -+ extensions/ebt_ip6.c | 165 +++------------------------------------------------ -+ include/ebtables_u.h | 17 +++++- -+ useful_functions.c | 151 +++++++++++++++++++++++++++++++++++++++++++++- -+ 3 files changed, 174 insertions(+), 159 deletions(-) -+ -+diff --git a/extensions/ebt_ip6.c b/extensions/ebt_ip6.c -+index dd48547b0010..347797b4afe1 100644 -+--- a/extensions/ebt_ip6.c -++++ b/extensions/ebt_ip6.c -+@@ -11,9 +11,6 @@ -+ * -+ */ -+ -+-#include -+-#include -+-#include -+ #include -+ #include -+ #include -+@@ -51,13 +48,7 @@ static const struct option opts[] = -+ }; -+ -+ -+-struct icmpv6_names { -+- const char *name; -+- uint8_t type; -+- uint8_t code_min, code_max; -+-}; -+- -+-static const struct icmpv6_names icmpv6_codes[] = { -++static const struct ebt_icmp_names icmpv6_codes[] = { -+ { "destination-unreachable", 1, 0, 0xFF }, -+ { "no-route", 1, 0, 0 }, -+ { "communication-prohibited", 1, 1, 1 }, -+@@ -141,97 +132,6 @@ parse_port_range(const char *protocol, const char *portstring, uint16_t *ports) -+ free(buffer); -+ } -+ -+-static char* -+-parse_num(const char *str, long min, long max, long *num) -+-{ -+- char *end; -+- -+- errno = 0; -+- *num = strtol(str, &end, 10); -+- if (errno && (*num == LONG_MIN || *num == LONG_MAX)) { -+- ebt_print_error("Invalid number %s: %s", str, strerror(errno)); -+- return NULL; -+- } -+- if (min <= max) { -+- if (*num > max || *num < min) { -+- ebt_print_error("Value %ld out of range (%ld, %ld)", *num, min, max); -+- return NULL; -+- } -+- } -+- if (*num == 0 && str == end) -+- return NULL; -+- return end; -+-} -+- -+-static char * -+-parse_range(const char *str, long min, long max, long num[]) -+-{ -+- char *next; -+- -+- next = parse_num(str, min, max, num); -+- if (next == NULL) -+- return NULL; -+- if (next && *next == ':') -+- next = parse_num(next+1, min, max, &num[1]); -+- else -+- num[1] = num[0]; -+- return next; -+-} -+- -+-static int -+-parse_icmpv6(const char *icmpv6type, uint8_t type[], uint8_t code[]) -+-{ -+- static const unsigned int limit = ARRAY_SIZE(icmpv6_codes); -+- unsigned int match = limit; -+- unsigned int i; -+- long number[2]; -+- -+- for (i = 0; i < limit; i++) { -+- if (strncasecmp(icmpv6_codes[i].name, icmpv6type, strlen(icmpv6type))) -+- continue; -+- if (match != limit) -+- ebt_print_error("Ambiguous ICMPv6 type `%s':" -+- " `%s' or `%s'?", -+- icmpv6type, icmpv6_codes[match].name, -+- icmpv6_codes[i].name); -+- match = i; -+- } -+- -+- if (match < limit) { -+- type[0] = type[1] = icmpv6_codes[match].type; -+- code[0] = icmpv6_codes[match].code_min; -+- code[1] = icmpv6_codes[match].code_max; -+- } else { -+- char *next = parse_range(icmpv6type, 0, 255, number); -+- if (!next) { -+- ebt_print_error("Unknown ICMPv6 type `%s'", -+- icmpv6type); -+- return -1; -+- } -+- type[0] = (uint8_t) number[0]; -+- type[1] = (uint8_t) number[1]; -+- switch (*next) { -+- case 0: -+- code[0] = 0; -+- code[1] = 255; -+- return 0; -+- case '/': -+- next = parse_range(next+1, 0, 255, number); -+- code[0] = (uint8_t) number[0]; -+- code[1] = (uint8_t) number[1]; -+- if (next == NULL) -+- return -1; -+- if (next && *next == 0) -+- return 0; -+- /* fallthrough */ -+- default: -+- ebt_print_error("unknown character %c", *next); -+- return -1; -+- } -+- } -+- return 0; -+-} -+- -+ static void print_port_range(uint16_t *ports) -+ { -+ if (ports[0] == ports[1]) -+@@ -240,58 +140,6 @@ static void print_port_range(uint16_t *ports) -+ printf("%d:%d ", ports[0], ports[1]); -+ } -+ -+-static void print_icmp_code(uint8_t *code) -+-{ -+- if (code[0] == code[1]) -+- printf("/%"PRIu8 " ", code[0]); -+- else -+- printf("/%"PRIu8":%"PRIu8 " ", code[0], code[1]); -+-} -+- -+-static void print_icmp_type(uint8_t *type, uint8_t *code) -+-{ -+- unsigned int i; -+- -+- if (type[0] != type[1]) { -+- printf("%"PRIu8 ":%" PRIu8, type[0], type[1]); -+- print_icmp_code(code); -+- return; -+- } -+- -+- for (i = 0; i < ARRAY_SIZE(icmpv6_codes); i++) { -+- if (icmpv6_codes[i].type != type[0]) -+- continue; -+- -+- if (icmpv6_codes[i].code_min == code[0] && -+- icmpv6_codes[i].code_max == code[1]) { -+- printf("%s ", icmpv6_codes[i].name); -+- return; -+- } -+- } -+- printf("%"PRIu8, type[0]); -+- print_icmp_code(code); -+-} -+- -+-static void print_icmpv6types(void) -+-{ -+- unsigned int i; -+- printf("Valid ICMPv6 Types:"); -+- -+- for (i=0; i < ARRAY_SIZE(icmpv6_codes); i++) { -+- if (i && icmpv6_codes[i].type == icmpv6_codes[i-1].type) { -+- if (icmpv6_codes[i].code_min == icmpv6_codes[i-1].code_min -+- && (icmpv6_codes[i].code_max -+- == icmpv6_codes[i-1].code_max)) -+- printf(" (%s)", icmpv6_codes[i].name); -+- else -+- printf("\n %s", icmpv6_codes[i].name); -+- } -+- else -+- printf("\n%s", icmpv6_codes[i].name); -+- } -+- printf("\n"); -+-} -+- -+ static void print_help() -+ { -+ printf( -+@@ -303,7 +151,9 @@ static void print_help() -+ "--ip6-sport [!] port[:port] : tcp/udp source port or port range\n" -+ "--ip6-dport [!] port[:port] : tcp/udp destination port or port range\n" -+ "--ip6-icmp-type [!] type[[:type]/code[:code]] : ipv6-icmp type/code or type/code range\n"); -+-print_icmpv6types(); -++ -++ printf("\nValid ICMPv6 Types:\n"); -++ ebt_print_icmp_types(icmpv6_codes, ARRAY_SIZE(icmpv6_codes)); -+ } -+ -+ static void init(struct ebt_entry_match *match) -+@@ -374,7 +224,9 @@ static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry, -+ ipinfo->bitmask |= EBT_IP6_ICMP6; -+ if (ebt_check_inverse2(optarg)) -+ ipinfo->invflags |= EBT_IP6_ICMP6; -+- if (parse_icmpv6(optarg, ipinfo->icmpv6_type, ipinfo->icmpv6_code)) -++ if (ebt_parse_icmp(icmpv6_codes, ARRAY_SIZE(icmpv6_codes), -++ optarg, ipinfo->icmpv6_type, -++ ipinfo->icmpv6_code)) -+ return 0; -+ break; -+ -+@@ -493,7 +345,8 @@ static void print(const struct ebt_u_entry *entry, -+ printf("--ip6-icmp-type "); -+ if (ipinfo->invflags & EBT_IP6_ICMP6) -+ printf("! "); -+- print_icmp_type(ipinfo->icmpv6_type, ipinfo->icmpv6_code); -++ ebt_print_icmp_type(icmpv6_codes, ARRAY_SIZE(icmpv6_codes), -++ ipinfo->icmpv6_type, ipinfo->icmpv6_code); -+ } -+ } -+ -+diff --git a/include/ebtables_u.h b/include/ebtables_u.h -+index 35a5bcc54c86..17afa9487f5a 100644 -+--- a/include/ebtables_u.h -++++ b/include/ebtables_u.h -+@@ -222,6 +222,15 @@ struct ebt_u_target -+ struct ebt_u_target *next; -+ }; -+ -++ -++struct ebt_icmp_names { -++ const char *name; -++ uint8_t type; -++ uint8_t code_min, code_max; -++}; -++ -++ -++ -+ /* libebtc.c */ -+ -+ extern struct ebt_u_table *ebt_tables; -+@@ -300,11 +309,17 @@ void ebt_print_mac_and_mask(const unsigned char *mac, const unsigned char *mask) -+ int ebt_get_mac_and_mask(const char *from, unsigned char *to, unsigned char *mask); -+ void ebt_parse_ip_address(char *address, uint32_t *addr, uint32_t *msk); -+ char *ebt_mask_to_dotted(uint32_t mask); -+-void ebt_parse_ip6_address(char *address, struct in6_addr *addr, -++void ebt_parse_ip6_address(char *address, struct in6_addr *addr, -+ struct in6_addr *msk); -+ char *ebt_ip6_to_numeric(const struct in6_addr *addrp); -+ char *ebt_ip6_mask_to_string(const struct in6_addr *msk); -+ -++int ebt_parse_icmp(const struct ebt_icmp_names *icmp_codes, size_t n_codes, -++ const char *icmptype, uint8_t type[], uint8_t code[]); -++void ebt_print_icmp_type(const struct ebt_icmp_names *icmp_codes, -++ size_t n_codes, uint8_t *type, uint8_t *code); -++void ebt_print_icmp_types(const struct ebt_icmp_names *icmp_codes, -++ size_t n_codes); -+ -+ int do_command(int argc, char *argv[], int exec_style, -+ struct ebt_u_replace *replace_); -+diff --git a/useful_functions.c b/useful_functions.c -+index d14cbe9dbdba..8f54bae83fae 100644 -+--- a/useful_functions.c -++++ b/useful_functions.c -+@@ -24,6 +24,9 @@ -+ */ -+ #include "include/ebtables_u.h" -+ #include "include/ethernetdb.h" -++#include -++#include -++#include -+ #include -+ #include -+ #include -+@@ -34,6 +37,7 @@ -+ #include -+ #include -+ -++ -+ const unsigned char mac_type_unicast[ETH_ALEN] = {0,0,0,0,0,0}; -+ const unsigned char msk_type_unicast[ETH_ALEN] = {1,0,0,0,0,0}; -+ const unsigned char mac_type_multicast[ETH_ALEN] = {1,0,0,0,0,0}; -+@@ -188,7 +192,7 @@ static int undot_ip(char *ip, unsigned char *ip2) -+ return -1; -+ *q = '\0'; -+ onebyte = strtol(p, &end, 10); -+- if (*end != '\0' || onebyte > 255 || onebyte < 0) -++ if (*end != '\0' || onebyte > 255 || onebyte < 0) -+ return -1; -+ ip2[i] = (unsigned char)onebyte; -+ p = q + 1; -+@@ -275,7 +279,7 @@ char *ebt_mask_to_dotted(uint32_t mask) -+ *buf = '\0'; -+ else -+ /* Mask was not a decent combination of 1's and 0's */ -+- sprintf(buf, "/%d.%d.%d.%d", ((unsigned char *)&mask)[0], -++ sprintf(buf, "/%d.%d.%d.%d", ((unsigned char *)&mask)[0], -+ ((unsigned char *)&mask)[1], ((unsigned char *)&mask)[2], -+ ((unsigned char *)&mask)[3]); -+ -+@@ -424,3 +428,146 @@ char *ebt_ip6_mask_to_string(const struct in6_addr *msk) -+ sprintf(buf, "/%s", ebt_ip6_to_numeric(msk)); -+ return buf; -+ } -++ -++static char* -++parse_num(const char *str, long min, long max, long *num) -++{ -++ char *end; -++ -++ errno = 0; -++ *num = strtol(str, &end, 10); -++ if (errno && (*num == LONG_MIN || *num == LONG_MAX)) { -++ ebt_print_error("Invalid number %s: %s", str, strerror(errno)); -++ return NULL; -++ } -++ if (min <= max) { -++ if (*num > max || *num < min) { -++ ebt_print_error("Value %ld out of range (%ld, %ld)", *num, min, max); -++ return NULL; -++ } -++ } -++ if (*num == 0 && str == end) -++ return NULL; -++ return end; -++} -++ -++static char * -++parse_range(const char *str, long min, long max, long num[]) -++{ -++ char *next; -++ -++ next = parse_num(str, min, max, num); -++ if (next == NULL) -++ return NULL; -++ if (next && *next == ':') -++ next = parse_num(next+1, min, max, &num[1]); -++ else -++ num[1] = num[0]; -++ return next; -++} -++ -++int ebt_parse_icmp(const struct ebt_icmp_names *icmp_codes, size_t n_codes, -++ const char *icmptype, uint8_t type[], uint8_t code[]) -++{ -++ unsigned int match = n_codes; -++ unsigned int i; -++ long number[2]; -++ -++ for (i = 0; i < n_codes; i++) { -++ if (strncasecmp(icmp_codes[i].name, icmptype, strlen(icmptype))) -++ continue; -++ if (match != n_codes) -++ ebt_print_error("Ambiguous ICMP type `%s':" -++ " `%s' or `%s'?", -++ icmptype, icmp_codes[match].name, -++ icmp_codes[i].name); -++ match = i; -++ } -++ -++ if (match < n_codes) { -++ type[0] = type[1] = icmp_codes[match].type; -++ code[0] = icmp_codes[match].code_min; -++ code[1] = icmp_codes[match].code_max; -++ } else { -++ char *next = parse_range(icmptype, 0, 255, number); -++ if (!next) { -++ ebt_print_error("Unknown ICMP type `%s'", -++ icmptype); -++ return -1; -++ } -++ type[0] = (uint8_t) number[0]; -++ type[1] = (uint8_t) number[1]; -++ switch (*next) { -++ case 0: -++ code[0] = 0; -++ code[1] = 255; -++ return 0; -++ case '/': -++ next = parse_range(next+1, 0, 255, number); -++ code[0] = (uint8_t) number[0]; -++ code[1] = (uint8_t) number[1]; -++ if (next == NULL) -++ return -1; -++ if (next && *next == 0) -++ return 0; -++ /* fallthrough */ -++ default: -++ ebt_print_error("unknown character %c", *next); -++ return -1; -++ } -++ } -++ return 0; -++} -++ -++static void print_icmp_code(uint8_t *code) -++{ -++ if (code[0] == code[1]) -++ printf("/%"PRIu8 " ", code[0]); -++ else -++ printf("/%"PRIu8":%"PRIu8 " ", code[0], code[1]); -++} -++ -++void ebt_print_icmp_type(const struct ebt_icmp_names *icmp_codes, -++ size_t n_codes, uint8_t *type, uint8_t *code) -++{ -++ unsigned int i; -++ -++ if (type[0] != type[1]) { -++ printf("%"PRIu8 ":%" PRIu8, type[0], type[1]); -++ print_icmp_code(code); -++ return; -++ } -++ -++ for (i = 0; i < n_codes; i++) { -++ if (icmp_codes[i].type != type[0]) -++ continue; -++ -++ if (icmp_codes[i].code_min == code[0] && -++ icmp_codes[i].code_max == code[1]) { -++ printf("%s ", icmp_codes[i].name); -++ return; -++ } -++ } -++ printf("%"PRIu8, type[0]); -++ print_icmp_code(code); -++} -++ -++void ebt_print_icmp_types(const struct ebt_icmp_names *icmp_codes, -++ size_t n_codes) -++{ -++ unsigned int i; -++ -++ for (i = 0; i < n_codes; i++) { -++ if (i && icmp_codes[i].type == icmp_codes[i-1].type) { -++ if (icmp_codes[i].code_min == icmp_codes[i-1].code_min -++ && (icmp_codes[i].code_max -++ == icmp_codes[i-1].code_max)) -++ printf(" (%s)", icmp_codes[i].name); -++ else -++ printf("\n %s", icmp_codes[i].name); -++ } -++ else -++ printf("\n%s", icmp_codes[i].name); -++ } -++ printf("\n"); -++} -+-- -+2.16.2 -+ -diff --git a/package/network/utils/ebtables/patches/301-0003-ebt_ip-add-support-for-matching-ICMP-type-and-code.patch b/package/network/utils/ebtables/patches/301-0003-ebt_ip-add-support-for-matching-ICMP-type-and-code.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..2c83168933d88535747f0bc18d3ebbe03c6b1f30 ---- /dev/null -+++ b/package/network/utils/ebtables/patches/301-0003-ebt_ip-add-support-for-matching-ICMP-type-and-code.patch -@@ -0,0 +1,182 @@ -+From 76bc7b4ede217228e782a6d4dfaa67f772a08441 Mon Sep 17 00:00:00 2001 -+Message-Id: <76bc7b4ede217228e782a6d4dfaa67f772a08441.1520151963.git.mschiffer@universe-factory.net> -+In-Reply-To: -+References: -+From: Matthias Schiffer -+Date: Sat, 3 Mar 2018 12:42:46 +0100 -+Subject: [PATCH ebtables 3/4] ebt_ip: add support for matching ICMP type and -+ code -+ -+We already have ICMPv6 type/code matches. This adds support for IPv4 ICMP -+matches in the same way. -+ -+Signed-off-by: Matthias Schiffer -+--- -+ extensions/ebt_ip.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++-- -+ 1 file changed, 94 insertions(+), 2 deletions(-) -+ -+diff --git a/extensions/ebt_ip.c b/extensions/ebt_ip.c -+index 59559feffa50..42660d4564fb 100644 -+--- a/extensions/ebt_ip.c -++++ b/extensions/ebt_ip.c -+@@ -24,6 +24,7 @@ -+ #define IP_PROTO '4' -+ #define IP_SPORT '5' -+ #define IP_DPORT '6' -++#define IP_ICMP '7' -+ -+ static const struct option opts[] = -+ { -+@@ -38,9 +39,64 @@ static const struct option opts[] = -+ { "ip-sport" , required_argument, 0, IP_SPORT }, -+ { "ip-destination-port" , required_argument, 0, IP_DPORT }, -+ { "ip-dport" , required_argument, 0, IP_DPORT }, -++ { "ip-icmp-type" , required_argument, 0, IP_ICMP }, -+ { 0 } -+ }; -+ -++static const struct ebt_icmp_names icmp_codes[] = { -++ { "echo-reply", 0, 0, 0xFF }, -++ /* Alias */ { "pong", 0, 0, 0xFF }, -++ -++ { "destination-unreachable", 3, 0, 0xFF }, -++ { "network-unreachable", 3, 0, 0 }, -++ { "host-unreachable", 3, 1, 1 }, -++ { "protocol-unreachable", 3, 2, 2 }, -++ { "port-unreachable", 3, 3, 3 }, -++ { "fragmentation-needed", 3, 4, 4 }, -++ { "source-route-failed", 3, 5, 5 }, -++ { "network-unknown", 3, 6, 6 }, -++ { "host-unknown", 3, 7, 7 }, -++ { "network-prohibited", 3, 9, 9 }, -++ { "host-prohibited", 3, 10, 10 }, -++ { "TOS-network-unreachable", 3, 11, 11 }, -++ { "TOS-host-unreachable", 3, 12, 12 }, -++ { "communication-prohibited", 3, 13, 13 }, -++ { "host-precedence-violation", 3, 14, 14 }, -++ { "precedence-cutoff", 3, 15, 15 }, -++ -++ { "source-quench", 4, 0, 0xFF }, -++ -++ { "redirect", 5, 0, 0xFF }, -++ { "network-redirect", 5, 0, 0 }, -++ { "host-redirect", 5, 1, 1 }, -++ { "TOS-network-redirect", 5, 2, 2 }, -++ { "TOS-host-redirect", 5, 3, 3 }, -++ -++ { "echo-request", 8, 0, 0xFF }, -++ /* Alias */ { "ping", 8, 0, 0xFF }, -++ -++ { "router-advertisement", 9, 0, 0xFF }, -++ -++ { "router-solicitation", 10, 0, 0xFF }, -++ -++ { "time-exceeded", 11, 0, 0xFF }, -++ /* Alias */ { "ttl-exceeded", 11, 0, 0xFF }, -++ { "ttl-zero-during-transit", 11, 0, 0 }, -++ { "ttl-zero-during-reassembly", 11, 1, 1 }, -++ -++ { "parameter-problem", 12, 0, 0xFF }, -++ { "ip-header-bad", 12, 0, 0 }, -++ { "required-option-missing", 12, 1, 1 }, -++ -++ { "timestamp-request", 13, 0, 0xFF }, -++ -++ { "timestamp-reply", 14, 0, 0xFF }, -++ -++ { "address-mask-request", 17, 0, 0xFF }, -++ -++ { "address-mask-reply", 18, 0, 0xFF } -++}; -++ -+ /* put the mask into 4 bytes */ -+ /* transform a protocol and service name into a port number */ -+ static uint16_t parse_port(const char *protocol, const char *name) -+@@ -105,7 +161,11 @@ static void print_help() -+ "--ip-tos [!] tos : ip tos specification\n" -+ "--ip-proto [!] protocol : ip protocol specification\n" -+ "--ip-sport [!] port[:port] : tcp/udp source port or port range\n" -+-"--ip-dport [!] port[:port] : tcp/udp destination port or port range\n"); -++"--ip-dport [!] port[:port] : tcp/udp destination port or port range\n" -++"--ip-icmp-type [!] type[[:type]/code[:code]] : icmp type/code or type/code range\n"); -++ -++ printf("\nValid ICMP Types:\n"); -++ ebt_print_icmp_types(icmp_codes, ARRAY_SIZE(icmp_codes)); -+ } -+ -+ static void init(struct ebt_entry_match *match) -+@@ -122,6 +182,7 @@ static void init(struct ebt_entry_match *match) -+ #define OPT_PROTO 0x08 -+ #define OPT_SPORT 0x10 -+ #define OPT_DPORT 0x20 -++#define OPT_ICMP 0x40 -+ static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry, -+ unsigned int *flags, struct ebt_entry_match **match) -+ { -+@@ -170,6 +231,16 @@ static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry, -+ parse_port_range(NULL, optarg, ipinfo->dport); -+ break; -+ -++ case IP_ICMP: -++ ebt_check_option2(flags, OPT_ICMP); -++ ipinfo->bitmask |= EBT_IP_ICMP; -++ if (ebt_check_inverse2(optarg)) -++ ipinfo->invflags |= EBT_IP_ICMP; -++ if (ebt_parse_icmp(icmp_codes, ARRAY_SIZE(icmp_codes), optarg, -++ ipinfo->icmp_type, ipinfo->icmp_code)) -++ return 0; -++ break; -++ -+ case IP_myTOS: -+ ebt_check_option2(flags, OPT_TOS); -+ if (ebt_check_inverse2(optarg)) -+@@ -219,10 +290,17 @@ static void final_check(const struct ebt_u_entry *entry, -+ (ipinfo->protocol!=IPPROTO_TCP && -+ ipinfo->protocol!=IPPROTO_UDP && -+ ipinfo->protocol!=IPPROTO_SCTP && -+- ipinfo->protocol!=IPPROTO_DCCP))) -++ ipinfo->protocol!=IPPROTO_DCCP))) { -+ ebt_print_error("For port filtering the IP protocol must be " -+ "either 6 (tcp), 17 (udp), 33 (dccp) or " -+ "132 (sctp)"); -++ } else if ((ipinfo->bitmask & EBT_IP_ICMP) && -++ (!(ipinfo->bitmask & EBT_IP_PROTO) || -++ ipinfo->invflags & EBT_IP_PROTO || -++ ipinfo->protocol != IPPROTO_ICMP)) { -++ ebt_print_error("For ICMP filtering the IP protocol must be " -++ "1 (icmp)"); -++ } -+ } -+ -+ static void print(const struct ebt_u_entry *entry, -+@@ -280,6 +358,13 @@ static void print(const struct ebt_u_entry *entry, -+ printf("! "); -+ print_port_range(ipinfo->dport); -+ } -++ if (ipinfo->bitmask & EBT_IP_ICMP) { -++ printf("--ip-icmp-type "); -++ if (ipinfo->invflags & EBT_IP_ICMP) -++ printf("! "); -++ ebt_print_icmp_type(icmp_codes, ARRAY_SIZE(icmp_codes), -++ ipinfo->icmp_type, ipinfo->icmp_code); -++ } -+ } -+ -+ static int compare(const struct ebt_entry_match *m1, -+@@ -322,6 +407,13 @@ static int compare(const struct ebt_entry_match *m1, -+ ipinfo1->dport[1] != ipinfo2->dport[1]) -+ return 0; -+ } -++ if (ipinfo1->bitmask & EBT_IP_ICMP) { -++ if (ipinfo1->icmp_type[0] != ipinfo2->icmp_type[0] || -++ ipinfo1->icmp_type[1] != ipinfo2->icmp_type[1] || -++ ipinfo1->icmp_code[0] != ipinfo2->icmp_code[0] || -++ ipinfo1->icmp_code[1] != ipinfo2->icmp_code[1]) -++ return 0; -++ } -+ return 1; -+ } -+ -+-- -+2.16.2 -+ -diff --git a/package/network/utils/ebtables/patches/301-0004-ebt_ip-add-support-for-matching-IGMP-type.patch b/package/network/utils/ebtables/patches/301-0004-ebt_ip-add-support-for-matching-IGMP-type.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..1a7fe6d2ffcd0baf620dd36d6d3ba200f8b823e9 ---- /dev/null -+++ b/package/network/utils/ebtables/patches/301-0004-ebt_ip-add-support-for-matching-IGMP-type.patch -@@ -0,0 +1,207 @@ -+From b20e495bdf0c5eec3244cf7f98bae24316ffc3ab Mon Sep 17 00:00:00 2001 -+Message-Id: -+In-Reply-To: -+References: -+From: Matthias Schiffer -+Date: Sat, 3 Mar 2018 13:50:23 +0100 -+Subject: [PATCH ebtables 4/4] ebt_ip: add support for matching IGMP type -+ -+We already have ICMPv6 type/code matches (which can be used to distinguish -+different types of MLD packets). Add support for IPv4 IGMP matches in the -+same way. -+ -+To reuse as much code as possible, the ICMP type/code handling functions -+are extended to allow passing a NULL code range. -+ -+Signed-off-by: Matthias Schiffer -+--- -+ extensions/ebt_ip.c | 44 +++++++++++++++++++++++++++++++++++++++++++- -+ useful_functions.c | 35 ++++++++++++++++++++++------------- -+ 2 files changed, 65 insertions(+), 14 deletions(-) -+ -+diff --git a/extensions/ebt_ip.c b/extensions/ebt_ip.c -+index 42660d4564fb..1ffdb95f156d 100644 -+--- a/extensions/ebt_ip.c -++++ b/extensions/ebt_ip.c -+@@ -25,6 +25,7 @@ -+ #define IP_SPORT '5' -+ #define IP_DPORT '6' -+ #define IP_ICMP '7' -++#define IP_IGMP '8' -+ -+ static const struct option opts[] = -+ { -+@@ -40,6 +41,7 @@ static const struct option opts[] = -+ { "ip-destination-port" , required_argument, 0, IP_DPORT }, -+ { "ip-dport" , required_argument, 0, IP_DPORT }, -+ { "ip-icmp-type" , required_argument, 0, IP_ICMP }, -++ { "ip-igmp-type" , required_argument, 0, IP_IGMP }, -+ { 0 } -+ }; -+ -+@@ -97,6 +99,14 @@ static const struct ebt_icmp_names icmp_codes[] = { -+ { "address-mask-reply", 18, 0, 0xFF } -+ }; -+ -++static const struct ebt_icmp_names igmp_types[] = { -++ { "membership-query", 0x11 }, -++ { "membership-report-v1", 0x12 }, -++ { "membership-report-v2", 0x16 }, -++ { "leave-group", 0x17 }, -++ { "membership-report-v3", 0x22 }, -++}; -++ -+ /* put the mask into 4 bytes */ -+ /* transform a protocol and service name into a port number */ -+ static uint16_t parse_port(const char *protocol, const char *name) -+@@ -162,10 +172,13 @@ static void print_help() -+ "--ip-proto [!] protocol : ip protocol specification\n" -+ "--ip-sport [!] port[:port] : tcp/udp source port or port range\n" -+ "--ip-dport [!] port[:port] : tcp/udp destination port or port range\n" -+-"--ip-icmp-type [!] type[[:type]/code[:code]] : icmp type/code or type/code range\n"); -++"--ip-icmp-type [!] type[[:type]/code[:code]] : icmp type/code or type/code range\n" -++"--ip-igmp-type [!] type[:type] : igmp type or type range\n"); -+ -+ printf("\nValid ICMP Types:\n"); -+ ebt_print_icmp_types(icmp_codes, ARRAY_SIZE(icmp_codes)); -++ printf("\nValid IGMP Types:\n"); -++ ebt_print_icmp_types(igmp_types, ARRAY_SIZE(igmp_types)); -+ } -+ -+ static void init(struct ebt_entry_match *match) -+@@ -183,6 +196,7 @@ static void init(struct ebt_entry_match *match) -+ #define OPT_SPORT 0x10 -+ #define OPT_DPORT 0x20 -+ #define OPT_ICMP 0x40 -++#define OPT_IGMP 0x80 -+ static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry, -+ unsigned int *flags, struct ebt_entry_match **match) -+ { -+@@ -241,6 +255,16 @@ static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry, -+ return 0; -+ break; -+ -++ case IP_IGMP: -++ ebt_check_option2(flags, OPT_IGMP); -++ ipinfo->bitmask |= EBT_IP_IGMP; -++ if (ebt_check_inverse2(optarg)) -++ ipinfo->invflags |= EBT_IP_IGMP; -++ if (ebt_parse_icmp(igmp_types, ARRAY_SIZE(igmp_types), optarg, -++ ipinfo->igmp_type, NULL)) -++ return 0; -++ break; -++ -+ case IP_myTOS: -+ ebt_check_option2(flags, OPT_TOS); -+ if (ebt_check_inverse2(optarg)) -+@@ -300,6 +324,12 @@ static void final_check(const struct ebt_u_entry *entry, -+ ipinfo->protocol != IPPROTO_ICMP)) { -+ ebt_print_error("For ICMP filtering the IP protocol must be " -+ "1 (icmp)"); -++ } else if ((ipinfo->bitmask & EBT_IP_IGMP) && -++ (!(ipinfo->bitmask & EBT_IP_PROTO) || -++ ipinfo->invflags & EBT_IP_PROTO || -++ ipinfo->protocol != IPPROTO_IGMP)) { -++ ebt_print_error("For IGMP filtering the IP protocol must be " -++ "2 (igmp)"); -+ } -+ } -+ -+@@ -365,6 +395,13 @@ static void print(const struct ebt_u_entry *entry, -+ ebt_print_icmp_type(icmp_codes, ARRAY_SIZE(icmp_codes), -+ ipinfo->icmp_type, ipinfo->icmp_code); -+ } -++ if (ipinfo->bitmask & EBT_IP_IGMP) { -++ printf("--ip-igmp-type "); -++ if (ipinfo->invflags & EBT_IP_IGMP) -++ printf("! "); -++ ebt_print_icmp_type(igmp_types, ARRAY_SIZE(igmp_types), -++ ipinfo->igmp_type, NULL); -++ } -+ } -+ -+ static int compare(const struct ebt_entry_match *m1, -+@@ -414,6 +451,11 @@ static int compare(const struct ebt_entry_match *m1, -+ ipinfo1->icmp_code[1] != ipinfo2->icmp_code[1]) -+ return 0; -+ } -++ if (ipinfo1->bitmask & EBT_IP_IGMP) { -++ if (ipinfo1->igmp_type[0] != ipinfo2->igmp_type[0] || -++ ipinfo1->igmp_type[1] != ipinfo2->igmp_type[1]) -++ return 0; -++ } -+ return 1; -+ } -+ -+diff --git a/useful_functions.c b/useful_functions.c -+index 8f54bae83fae..8a34f820f230 100644 -+--- a/useful_functions.c -++++ b/useful_functions.c -+@@ -486,8 +486,10 @@ int ebt_parse_icmp(const struct ebt_icmp_names *icmp_codes, size_t n_codes, -+ -+ if (match < n_codes) { -+ type[0] = type[1] = icmp_codes[match].type; -+- code[0] = icmp_codes[match].code_min; -+- code[1] = icmp_codes[match].code_max; -++ if (code) { -++ code[0] = icmp_codes[match].code_min; -++ code[1] = icmp_codes[match].code_max; -++ } -+ } else { -+ char *next = parse_range(icmptype, 0, 255, number); -+ if (!next) { -+@@ -499,17 +501,21 @@ int ebt_parse_icmp(const struct ebt_icmp_names *icmp_codes, size_t n_codes, -+ type[1] = (uint8_t) number[1]; -+ switch (*next) { -+ case 0: -+- code[0] = 0; -+- code[1] = 255; -++ if (code) { -++ code[0] = 0; -++ code[1] = 255; -++ } -+ return 0; -+ case '/': -+- next = parse_range(next+1, 0, 255, number); -+- code[0] = (uint8_t) number[0]; -+- code[1] = (uint8_t) number[1]; -+- if (next == NULL) -+- return -1; -+- if (next && *next == 0) -+- return 0; -++ if (code) { -++ next = parse_range(next+1, 0, 255, number); -++ code[0] = (uint8_t) number[0]; -++ code[1] = (uint8_t) number[1]; -++ if (next == NULL) -++ return -1; -++ if (next && *next == 0) -++ return 0; -++ } -+ /* fallthrough */ -+ default: -+ ebt_print_error("unknown character %c", *next); -+@@ -521,6 +527,9 @@ int ebt_parse_icmp(const struct ebt_icmp_names *icmp_codes, size_t n_codes, -+ -+ static void print_icmp_code(uint8_t *code) -+ { -++ if (!code) -++ return; -++ -+ if (code[0] == code[1]) -+ printf("/%"PRIu8 " ", code[0]); -+ else -+@@ -542,8 +551,8 @@ void ebt_print_icmp_type(const struct ebt_icmp_names *icmp_codes, -+ if (icmp_codes[i].type != type[0]) -+ continue; -+ -+- if (icmp_codes[i].code_min == code[0] && -+- icmp_codes[i].code_max == code[1]) { -++ if (!code || (icmp_codes[i].code_min == code[0] && -++ icmp_codes[i].code_max == code[1])) { -+ printf("%s ", icmp_codes[i].name); -+ return; -+ } -+-- -+2.16.2 -+ -diff --git a/target/linux/generic/patches-4.4/614-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch b/target/linux/generic/patches-4.4/614-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..1f3d1a2fea50154238c03707b0d7a96db8d1f5d9 ---- /dev/null -+++ b/target/linux/generic/patches-4.4/614-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch -@@ -0,0 +1,139 @@ -+From 4f8fa78149e0921c8efdc1adc5e12686ffe7667f Mon Sep 17 00:00:00 2001 -+Message-Id: <4f8fa78149e0921c8efdc1adc5e12686ffe7667f.1520150717.git.mschiffer@universe-factory.net> -+In-Reply-To: -+References: -+From: Matthias Schiffer -+Date: Sat, 3 Mar 2018 11:55:21 +0100 -+Subject: [PATCH nf-next 1/2] ebtables: add support for matching ICMP type and -+ code -+ -+We already have ICMPv6 type/code matches. This adds support for IPv4 ICMP -+matches in the same way. -+ -+Signed-off-by: Matthias Schiffer -+--- -+ include/uapi/linux/netfilter_bridge/ebt_ip.h | 13 +++++++-- -+ net/bridge/netfilter/ebt_ip.c | 43 +++++++++++++++++++++------- -+ 2 files changed, 43 insertions(+), 13 deletions(-) -+ -+--- a/include/uapi/linux/netfilter_bridge/ebt_ip.h -++++ b/include/uapi/linux/netfilter_bridge/ebt_ip.h -+@@ -23,8 +23,9 @@ -+ #define EBT_IP_PROTO 0x08 -+ #define EBT_IP_SPORT 0x10 -+ #define EBT_IP_DPORT 0x20 -++#define EBT_IP_ICMP 0x40 -+ #define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\ -+- EBT_IP_SPORT | EBT_IP_DPORT ) -++ EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP) -+ #define EBT_IP_MATCH "ip" -+ -+ /* the same values are used for the invflags */ -+@@ -37,8 +38,14 @@ struct ebt_ip_info { -+ __u8 protocol; -+ __u8 bitmask; -+ __u8 invflags; -+- __u16 sport[2]; -+- __u16 dport[2]; -++ union { -++ __u16 sport[2]; -++ __u8 icmp_type[2]; -++ }; -++ union { -++ __u16 dport[2]; -++ __u8 icmp_code[2]; -++ }; -+ }; -+ -+ #endif -+--- a/net/bridge/netfilter/ebt_ip.c -++++ b/net/bridge/netfilter/ebt_ip.c -+@@ -19,9 +19,15 @@ -+ #include -+ #include -+ -+-struct tcpudphdr { -+- __be16 src; -+- __be16 dst; -++union pkthdr { -++ struct { -++ __be16 src; -++ __be16 dst; -++ } tcpudphdr; -++ struct { -++ u8 type; -++ u8 code; -++ } icmphdr; -+ }; -+ -+ static bool -+@@ -30,8 +36,8 @@ ebt_ip_mt(const struct sk_buff *skb, str -+ const struct ebt_ip_info *info = par->matchinfo; -+ const struct iphdr *ih; -+ struct iphdr _iph; -+- const struct tcpudphdr *pptr; -+- struct tcpudphdr _ports; -++ const union pkthdr *pptr; -++ union pkthdr _pkthdr; -+ -+ ih = skb_header_pointer(skb, 0, sizeof(_iph), &_iph); -+ if (ih == NULL) -+@@ -50,29 +56,38 @@ ebt_ip_mt(const struct sk_buff *skb, str -+ if (info->bitmask & EBT_IP_PROTO) { -+ if (FWINV(info->protocol != ih->protocol, EBT_IP_PROTO)) -+ return false; -+- if (!(info->bitmask & EBT_IP_DPORT) && -+- !(info->bitmask & EBT_IP_SPORT)) -++ if (!(info->bitmask & (EBT_IP_DPORT | EBT_IP_SPORT | -++ EBT_IP_ICMP))) -+ return true; -+ if (ntohs(ih->frag_off) & IP_OFFSET) -+ return false; -++ -++ /* min icmp headersize is 4, so sizeof(_pkthdr) is ok. */ -+ pptr = skb_header_pointer(skb, ih->ihl*4, -+- sizeof(_ports), &_ports); -++ sizeof(_pkthdr), &_pkthdr); -+ if (pptr == NULL) -+ return false; -+ if (info->bitmask & EBT_IP_DPORT) { -+- u32 dst = ntohs(pptr->dst); -++ u32 dst = ntohs(pptr->tcpudphdr.dst); -+ if (FWINV(dst < info->dport[0] || -+ dst > info->dport[1], -+ EBT_IP_DPORT)) -+ return false; -+ } -+ if (info->bitmask & EBT_IP_SPORT) { -+- u32 src = ntohs(pptr->src); -++ u32 src = ntohs(pptr->tcpudphdr.src); -+ if (FWINV(src < info->sport[0] || -+ src > info->sport[1], -+ EBT_IP_SPORT)) -+ return false; -+ } -++ if ((info->bitmask & EBT_IP_ICMP) && -++ FWINV(pptr->icmphdr.type < info->icmp_type[0] || -++ pptr->icmphdr.type > info->icmp_type[1] || -++ pptr->icmphdr.code < info->icmp_code[0] || -++ pptr->icmphdr.code > info->icmp_code[1], -++ EBT_IP_ICMP)) -++ return false; -+ } -+ return true; -+ } -+@@ -101,6 +116,14 @@ static int ebt_ip_mt_check(const struct -+ return -EINVAL; -+ if (info->bitmask & EBT_IP_SPORT && info->sport[0] > info->sport[1]) -+ return -EINVAL; -++ if (info->bitmask & EBT_IP_ICMP) { -++ if ((info->invflags & EBT_IP_PROTO) || -++ info->protocol != IPPROTO_ICMP) -++ return -EINVAL; -++ if (info->icmp_type[0] > info->icmp_type[1] || -++ info->icmp_code[0] > info->icmp_code[1]) -++ return -EINVAL; -++ } -+ return 0; -+ } -+ -diff --git a/target/linux/generic/patches-4.4/614-0002-ebtables-add-support-for-matching-IGMP-type.patch b/target/linux/generic/patches-4.4/614-0002-ebtables-add-support-for-matching-IGMP-type.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..3c8760dbebefddb9bb6a0b9bb724210c573d854c ---- /dev/null -+++ b/target/linux/generic/patches-4.4/614-0002-ebtables-add-support-for-matching-IGMP-type.patch -@@ -0,0 +1,92 @@ -+From 68c6d1b60803e9690f2a6168b80a92ae45c6578b Mon Sep 17 00:00:00 2001 -+Message-Id: <68c6d1b60803e9690f2a6168b80a92ae45c6578b.1520150717.git.mschiffer@universe-factory.net> -+In-Reply-To: -+References: -+From: Matthias Schiffer -+Date: Sat, 3 Mar 2018 12:02:21 +0100 -+Subject: [PATCH nf-next 2/2] ebtables: add support for matching IGMP type -+ -+We already have ICMPv6 type/code matches (which can be used to distinguish -+different types of MLD packets). Add support for IPv4 IGMP matches in the -+same way. -+ -+Signed-off-by: Matthias Schiffer -+--- -+ include/uapi/linux/netfilter_bridge/ebt_ip.h | 4 +++- -+ net/bridge/netfilter/ebt_ip.c | 19 +++++++++++++++++-- -+ 2 files changed, 20 insertions(+), 3 deletions(-) -+ -+--- a/include/uapi/linux/netfilter_bridge/ebt_ip.h -++++ b/include/uapi/linux/netfilter_bridge/ebt_ip.h -+@@ -24,8 +24,9 @@ -+ #define EBT_IP_SPORT 0x10 -+ #define EBT_IP_DPORT 0x20 -+ #define EBT_IP_ICMP 0x40 -++#define EBT_IP_IGMP 0x80 -+ #define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\ -+- EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP) -++ EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP | EBT_IP_IGMP) -+ #define EBT_IP_MATCH "ip" -+ -+ /* the same values are used for the invflags */ -+@@ -41,6 +42,7 @@ struct ebt_ip_info { -+ union { -+ __u16 sport[2]; -+ __u8 icmp_type[2]; -++ __u8 igmp_type[2]; -+ }; -+ union { -+ __u16 dport[2]; -+--- a/net/bridge/netfilter/ebt_ip.c -++++ b/net/bridge/netfilter/ebt_ip.c -+@@ -28,6 +28,9 @@ union pkthdr { -+ u8 type; -+ u8 code; -+ } icmphdr; -++ struct { -++ u8 type; -++ } igmphdr; -+ }; -+ -+ static bool -+@@ -57,12 +60,12 @@ ebt_ip_mt(const struct sk_buff *skb, str -+ if (FWINV(info->protocol != ih->protocol, EBT_IP_PROTO)) -+ return false; -+ if (!(info->bitmask & (EBT_IP_DPORT | EBT_IP_SPORT | -+- EBT_IP_ICMP))) -++ EBT_IP_ICMP | EBT_IP_IGMP))) -+ return true; -+ if (ntohs(ih->frag_off) & IP_OFFSET) -+ return false; -+ -+- /* min icmp headersize is 4, so sizeof(_pkthdr) is ok. */ -++ /* min icmp/igmp headersize is 4, so sizeof(_pkthdr) is ok. */ -+ pptr = skb_header_pointer(skb, ih->ihl*4, -+ sizeof(_pkthdr), &_pkthdr); -+ if (pptr == NULL) -+@@ -88,6 +91,11 @@ ebt_ip_mt(const struct sk_buff *skb, str -+ pptr->icmphdr.code > info->icmp_code[1], -+ EBT_IP_ICMP)) -+ return false; -++ if ((info->bitmask & EBT_IP_IGMP) && -++ FWINV(pptr->igmphdr.type < info->igmp_type[0] || -++ pptr->igmphdr.type > info->igmp_type[1], -++ EBT_IP_IGMP)) -++ return false; -+ } -+ return true; -+ } -+@@ -124,6 +132,13 @@ static int ebt_ip_mt_check(const struct -+ info->icmp_code[0] > info->icmp_code[1]) -+ return -EINVAL; -+ } -++ if (info->bitmask & EBT_IP_IGMP) { -++ if ((info->invflags & EBT_IP_PROTO) || -++ info->protocol != IPPROTO_IGMP) -++ return -EINVAL; -++ if (info->igmp_type[0] > info->igmp_type[1]) -++ return -EINVAL; -++ } -+ return 0; -+ } -+ diff --git a/patches/lede/0068-base-files-remove-etc-uci-defaults-11_migrate-sysctl.patch b/patches/lede/0068-base-files-remove-etc-uci-defaults-11_migrate-sysctl.patch deleted file mode 100644 index 404f24ee..00000000 --- a/patches/lede/0068-base-files-remove-etc-uci-defaults-11_migrate-sysctl.patch +++ /dev/null @@ -1,31 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 12 Apr 2018 17:30:16 +0200 -Subject: base-files: remove /etc/uci-defaults/11_migrate-sysctl - -11_migrate-sysctl has not been updated with new file hashes since 2012. -Let's get rid of it. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/etc/uci-defaults/11_migrate-sysctl b/package/base-files/files/etc/uci-defaults/11_migrate-sysctl -deleted file mode 100644 -index 464e275779ceec1d99a7323b6cbf7901aaa9fbb4..0000000000000000000000000000000000000000 ---- a/package/base-files/files/etc/uci-defaults/11_migrate-sysctl -+++ /dev/null -@@ -1,16 +0,0 @@ --#!/bin/sh -- --if [ ! -f "/rom/etc/sysctl.conf" ] || cmp -s "/rom/etc/sysctl.conf" "/etc/sysctl.conf"; then -- exit 0 --fi -- --fingerprint="$(md5sum /etc/sysctl.conf)" --fingerprint="${fingerprint%% *}" -- --if [ "$fingerprint" = "1b05ebb41f72cb84e5510573cd4aca26" ] || \ -- [ "$fingerprint" = "62deb895be1a7f496040187b7c930e4e" ]; then -- logger -t migrate-sysctl "Updating sysctl.conf to use current defaults" -- cp "/rom/etc/sysctl.conf" "/etc/sysctl.conf" --fi -- --exit 0 diff --git a/patches/lede/0069-base-files-evaluate-etc-sysctl.d-before-etc-sysctl.conf.patch b/patches/lede/0069-base-files-evaluate-etc-sysctl.d-before-etc-sysctl.conf.patch deleted file mode 100644 index 54fd291f..00000000 --- a/patches/lede/0069-base-files-evaluate-etc-sysctl.d-before-etc-sysctl.conf.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 12 Apr 2018 17:33:51 +0200 -Subject: base-files: evaluate /etc/sysctl.d/* before /etc/sysctl.conf - -We can use /etc/sysctl.d/* for package-supplied sysctl snippets, giving -admins the option to use /etc/sysctl.conf to override settings. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/etc/hotplug.d/net/00-sysctl b/package/base-files/files/etc/hotplug.d/net/00-sysctl -index 7a71652c44f8bd1fb9f2e5643e7baa5d5d76c369..8abe7f8bbd698dc58716b770fe8bc7f8bd475b58 100644 ---- a/package/base-files/files/etc/hotplug.d/net/00-sysctl -+++ b/package/base-files/files/etc/hotplug.d/net/00-sysctl -@@ -1,7 +1,7 @@ - #!/bin/sh - - if [ "$ACTION" = add ]; then -- for CONF in /etc/sysctl.conf /etc/sysctl.d/*.conf; do -+ for CONF in /etc/sysctl.d/*.conf /etc/sysctl.conf; do - [ ! -f "$CONF" ] && continue; - sed -ne "/^[[:space:]]*net\..*\.$DEVICENAME\./p" "$CONF" | \ - sysctl -e -p - | logger -t sysctl -diff --git a/package/base-files/files/etc/init.d/sysctl b/package/base-files/files/etc/init.d/sysctl -index 65e6aa99250d09a3ccd9d023cb8f8205be86eee8..8722126a6612d67a3f615166a7fbec146207e97f 100755 ---- a/package/base-files/files/etc/init.d/sysctl -+++ b/package/base-files/files/etc/init.d/sysctl -@@ -30,7 +30,7 @@ apply_defaults() { - - start() { - apply_defaults -- for CONF in /etc/sysctl.conf /etc/sysctl.d/*.conf; do -+ for CONF in /etc/sysctl.d/*.conf /etc/sysctl.conf; do - [ -f "$CONF" ] && sysctl -p "$CONF" -e >&- - done - } diff --git a/patches/lede/0070-base-files-move-sysctl-defaults-to-etc-sysctl.d-10-default.conf.patch b/patches/lede/0070-base-files-move-sysctl-defaults-to-etc-sysctl.d-10-default.conf.patch deleted file mode 100644 index 545528cb..00000000 --- a/patches/lede/0070-base-files-move-sysctl-defaults-to-etc-sysctl.d-10-default.conf.patch +++ /dev/null @@ -1,89 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 12 Apr 2018 17:37:29 +0200 -Subject: base-files: move sysctl defaults to /etc/sysctl.d/10-default.conf - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/etc/sysctl.conf b/package/base-files/files/etc/sysctl.conf -index 91a3ac9a02d4344cf8c4c8f93a36193120fc4b95..ae04212f420b185ce525dae444b563128ddf0e11 100644 ---- a/package/base-files/files/etc/sysctl.conf -+++ b/package/base-files/files/etc/sysctl.conf -@@ -1,30 +1 @@ --kernel.panic=3 --kernel.core_pattern=/tmp/%e.%t.%p.%s.core -- --net.ipv4.conf.default.arp_ignore=1 --net.ipv4.conf.all.arp_ignore=1 --net.ipv4.ip_forward=1 --net.ipv4.icmp_echo_ignore_broadcasts=1 --net.ipv4.icmp_ignore_bogus_error_responses=1 --net.ipv4.igmp_max_memberships=100 --net.ipv4.tcp_fin_timeout=30 --net.ipv4.tcp_keepalive_time=120 --net.ipv4.tcp_syncookies=1 --net.ipv4.tcp_timestamps=1 --net.ipv4.tcp_sack=1 --net.ipv4.tcp_dsack=1 -- --net.ipv6.conf.default.forwarding=1 --net.ipv6.conf.all.forwarding=1 -- --net.netfilter.nf_conntrack_acct=1 --net.netfilter.nf_conntrack_checksum=0 --net.netfilter.nf_conntrack_max=16384 --net.netfilter.nf_conntrack_tcp_timeout_established=7440 --net.netfilter.nf_conntrack_udp_timeout=60 --net.netfilter.nf_conntrack_udp_timeout_stream=180 -- --# disable bridge firewalling by default --net.bridge.bridge-nf-call-arptables=0 --net.bridge.bridge-nf-call-ip6tables=0 --net.bridge.bridge-nf-call-iptables=0 -+# Defaults are configured in /etc/sysctl.d/* and can be customized in this file -diff --git a/package/base-files/files/etc/sysctl.d/10-default.conf b/package/base-files/files/etc/sysctl.d/10-default.conf -new file mode 100644 -index 0000000000000000000000000000000000000000..7c3344dba339514c023c3b13c592e9ce9ca1ff55 ---- /dev/null -+++ b/package/base-files/files/etc/sysctl.d/10-default.conf -@@ -0,0 +1,34 @@ -+# Do not edit, changes to this file will be lost on upgrades -+# /etc/sysctl.conf can be used to customize sysctl settings -+ -+kernel.panic=3 -+kernel.core_pattern=/tmp/%e.%t.%p.%s.core -+fs.suid_dumpable=2 -+ -+net.ipv4.conf.default.arp_ignore=1 -+net.ipv4.conf.all.arp_ignore=1 -+net.ipv4.ip_forward=1 -+net.ipv4.icmp_echo_ignore_broadcasts=1 -+net.ipv4.icmp_ignore_bogus_error_responses=1 -+net.ipv4.igmp_max_memberships=100 -+net.ipv4.tcp_fin_timeout=30 -+net.ipv4.tcp_keepalive_time=120 -+net.ipv4.tcp_syncookies=1 -+net.ipv4.tcp_timestamps=1 -+net.ipv4.tcp_sack=1 -+net.ipv4.tcp_dsack=1 -+ -+net.ipv6.conf.default.forwarding=1 -+net.ipv6.conf.all.forwarding=1 -+ -+net.netfilter.nf_conntrack_acct=1 -+net.netfilter.nf_conntrack_checksum=0 -+net.netfilter.nf_conntrack_max=16384 -+net.netfilter.nf_conntrack_tcp_timeout_established=7440 -+net.netfilter.nf_conntrack_udp_timeout=60 -+net.netfilter.nf_conntrack_udp_timeout_stream=180 -+ -+# disable bridge firewalling by default -+net.bridge.bridge-nf-call-arptables=0 -+net.bridge.bridge-nf-call-ip6tables=0 -+net.bridge.bridge-nf-call-iptables=0 -diff --git a/package/base-files/files/etc/sysctl.d/local.conf b/package/base-files/files/etc/sysctl.d/local.conf -deleted file mode 100644 -index 891da73df8d61e0c47069d4c6c8cc090f693c0b2..0000000000000000000000000000000000000000 ---- a/package/base-files/files/etc/sysctl.d/local.conf -+++ /dev/null -@@ -1 +0,0 @@ --# local sysctl settings can be stored in this directory diff --git a/patches/lede/0071-base-files-move-netfilter-sysctl-defaults-to-specific-kmod-packages.patch b/patches/lede/0071-base-files-move-netfilter-sysctl-defaults-to-specific-kmod-packages.patch deleted file mode 100644 index 5aaef7b3..00000000 --- a/patches/lede/0071-base-files-move-netfilter-sysctl-defaults-to-specific-kmod-packages.patch +++ /dev/null @@ -1,85 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 12 Apr 2018 17:57:44 +0200 -Subject: base-files: move netfilter sysctl defaults to specific kmod packages - -Avoid warnings when applying settings for uninstalled kmods. See also -FS#1073. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/etc/sysctl.d/10-default.conf b/package/base-files/files/etc/sysctl.d/10-default.conf -index 7c3344dba339514c023c3b13c592e9ce9ca1ff55..98867b7c7ba1d1ce181f721cdfd17517069fcdf2 100644 ---- a/package/base-files/files/etc/sysctl.d/10-default.conf -+++ b/package/base-files/files/etc/sysctl.d/10-default.conf -@@ -20,15 +20,3 @@ net.ipv4.tcp_dsack=1 - - net.ipv6.conf.default.forwarding=1 - net.ipv6.conf.all.forwarding=1 -- --net.netfilter.nf_conntrack_acct=1 --net.netfilter.nf_conntrack_checksum=0 --net.netfilter.nf_conntrack_max=16384 --net.netfilter.nf_conntrack_tcp_timeout_established=7440 --net.netfilter.nf_conntrack_udp_timeout=60 --net.netfilter.nf_conntrack_udp_timeout_stream=180 -- --# disable bridge firewalling by default --net.bridge.bridge-nf-call-arptables=0 --net.bridge.bridge-nf-call-ip6tables=0 --net.bridge.bridge-nf-call-iptables=0 -diff --git a/package/kernel/linux/files/sysctl-br-netfilter.conf b/package/kernel/linux/files/sysctl-br-netfilter.conf -new file mode 100644 -index 0000000000000000000000000000000000000000..b10ddc0874b6d393458e646e396716bd67b6b381 ---- /dev/null -+++ b/package/kernel/linux/files/sysctl-br-netfilter.conf -@@ -0,0 +1,7 @@ -+# Do not edit, changes to this file will be lost on upgrades -+# /etc/sysctl.conf can be used to customize sysctl settings -+ -+# disable bridge firewalling by default -+net.bridge.bridge-nf-call-arptables=0 -+net.bridge.bridge-nf-call-ip6tables=0 -+net.bridge.bridge-nf-call-iptables=0 -diff --git a/package/kernel/linux/files/sysctl-nf-conntrack.conf b/package/kernel/linux/files/sysctl-nf-conntrack.conf -new file mode 100644 -index 0000000000000000000000000000000000000000..37baf5fd6ff9d99d37554f5e38bf1d749a7f21e2 ---- /dev/null -+++ b/package/kernel/linux/files/sysctl-nf-conntrack.conf -@@ -0,0 +1,9 @@ -+# Do not edit, changes to this file will be lost on upgrades -+# /etc/sysctl.conf can be used to customize sysctl settings -+ -+net.netfilter.nf_conntrack_acct=1 -+net.netfilter.nf_conntrack_checksum=0 -+net.netfilter.nf_conntrack_max=16384 -+net.netfilter.nf_conntrack_tcp_timeout_established=7440 -+net.netfilter.nf_conntrack_udp_timeout=60 -+net.netfilter.nf_conntrack_udp_timeout_stream=180 -diff --git a/package/kernel/linux/modules/netfilter.mk b/package/kernel/linux/modules/netfilter.mk -index 3b26ad1fbf3e261d84ae18216c51c87c53579c06..bb882363f3df4df733424ca6bba72badc96f06f8 100644 ---- a/package/kernel/linux/modules/netfilter.mk -+++ b/package/kernel/linux/modules/netfilter.mk -@@ -74,6 +74,11 @@ define KernelPackage/nf-conntrack - AUTOLOAD:=$(call AutoProbe,$(notdir $(NF_CONNTRACK-m))) - endef - -+define KernelPackage/nf-conntrack/install -+ $(INSTALL_DIR) $(1)/etc/sysctl.d -+ $(INSTALL_DATA) ./files/sysctl-nf-conntrack.conf $(1)/etc/sysctl.d/11-nf-conntrack.conf -+endef -+ - $(eval $(call KernelPackage,nf-conntrack)) - - -@@ -674,6 +679,11 @@ define KernelPackage/br-netfilter - AUTOLOAD:=$(call AutoProbe,br_netfilter) - endef - -+define KernelPackage/br-netfilter/install -+ $(INSTALL_DIR) $(1)/etc/sysctl.d -+ $(INSTALL_DATA) ./files/sysctl-br-netfilter.conf $(1)/etc/sysctl.d/11-br-netfilter.conf -+endef -+ - $(eval $(call KernelPackage,br-netfilter)) - - diff --git a/patches/lede/0072-base-files-remove-etc-sysctl.d-from-conffiles.patch b/patches/lede/0072-base-files-remove-etc-sysctl.d-from-conffiles.patch deleted file mode 100644 index 13e80184..00000000 --- a/patches/lede/0072-base-files-remove-etc-sysctl.d-from-conffiles.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Matthias Schiffer -Date: Fri, 13 Apr 2018 14:36:43 +0200 -Subject: base-files: remove /etc/sysctl.d/ from conffiles - -Let's use /etc/sysctl.d for package-provided snippets and leave -/etc/sysctl.conf to the admin. Don't backup /etc/sysctl.d on upgrades, so -old defaults get replaced properly. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/Makefile b/package/base-files/Makefile -index c971de4deee7cd331ddcad6b87eb9fefd7af6a64..55e67a97d03df7d96cf8a4aac3c5325ce7105c80 100644 ---- a/package/base-files/Makefile -+++ b/package/base-files/Makefile -@@ -59,8 +59,6 @@ define Package/base-files/conffiles - /etc/shadow - /etc/shells - /etc/sysctl.conf --/etc/sysctl.d/ --/etc/sysctl.d/local.conf - /etc/sysupgrade.conf - $(call $(TARGET)/conffiles) - endef diff --git a/patches/lede/0073-kernel-disable-accept_ra-by-default.patch b/patches/lede/0073-kernel-disable-accept_ra-by-default.patch deleted file mode 100644 index f39acca3..00000000 --- a/patches/lede/0073-kernel-disable-accept_ra-by-default.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Matthias Schiffer -Date: Thu, 12 Apr 2018 22:14:56 +0200 -Subject: kernel: disable accept_ra by default - -Our commands setting accept_ra to 0 on all interfaces got lost in the -transition to procd. This remained unnoticed for a long time, as we also -enable forwarding on all interfaces, which prevents RA handling by default. - -Restore the commands, while also fixing a possible race condition in the -old version. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/base-files/files/etc/init.d/sysctl b/package/base-files/files/etc/init.d/sysctl -index 8722126a6612d67a3f615166a7fbec146207e97f..a236a0194b665ff56c8330930bfd44709d1b0d3d 100755 ---- a/package/base-files/files/etc/init.d/sysctl -+++ b/package/base-files/files/etc/init.d/sysctl -@@ -26,6 +26,14 @@ apply_defaults() { - net.ipv6.ip6frag_high_thresh="$frag_high_thresh" \ - net.netfilter.nf_conntrack_frag6_low_thresh="$frag_low_thresh" \ - net.netfilter.nf_conntrack_frag6_high_thresh="$frag_high_thresh" -+ -+ # first set default, then all interfaces to avoid races with appearing interfaces -+ if [ -d /proc/sys/net/ipv6/conf ]; then -+ echo 0 > /proc/sys/net/ipv6/conf/default/accept_ra -+ for iface in /proc/sys/net/ipv6/conf/*/accept_ra; do -+ echo 0 > "$iface" -+ done -+ fi - } - - start() { diff --git a/patches/lede/0074-kernel-change-dependency-of-kmod-ebtables-on-kmod-ebtables-to-selecting.patch b/patches/lede/0074-kernel-change-dependency-of-kmod-ebtables-on-kmod-ebtables-to-selecting.patch deleted file mode 100644 index 6f9d915f..00000000 --- a/patches/lede/0074-kernel-change-dependency-of-kmod-ebtables-on-kmod-ebtables-to-selecting.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 9 Apr 2018 18:51:57 +0200 -Subject: kernel: change dependency of kmod-ebtables-* on kmod-ebtables to selecting - -Non-selecting dependencies easily lead to Kconfig failures due to recursive -dependencies. We hit such an issue in Gluon; the easiest fix is to make -the dependency selecting. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/kernel/linux/modules/netfilter.mk b/package/kernel/linux/modules/netfilter.mk -index bb882363f3df4df733424ca6bba72badc96f06f8..c1d08a54037e6b33834566dac58308f64a427ecd 100644 ---- a/package/kernel/linux/modules/netfilter.mk -+++ b/package/kernel/linux/modules/netfilter.mk -@@ -707,7 +707,7 @@ $(eval $(call KernelPackage,ebtables)) - - define AddDepends/ebtables - SUBMENU:=$(NF_MENU) -- DEPENDS+=kmod-ebtables $(1) -+ DEPENDS+= +kmod-ebtables $(1) - endef - - diff --git a/patches/lede/0075-kernel-unhide-kmod-br-netfilter.patch b/patches/lede/0075-kernel-unhide-kmod-br-netfilter.patch deleted file mode 100644 index c08c7819..00000000 --- a/patches/lede/0075-kernel-unhide-kmod-br-netfilter.patch +++ /dev/null @@ -1,21 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 9 Apr 2018 18:56:53 +0200 -Subject: kernel: unhide kmod-br-netfilter - -kmod-br-netfilter is not only a support module, but can be useful on its -own, using the net.bridge.bridge-nf-call-* sysctls. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/kernel/linux/modules/netfilter.mk b/package/kernel/linux/modules/netfilter.mk -index c1d08a54037e6b33834566dac58308f64a427ecd..275147b8757a42c00de14502a072c8384a0526ab 100644 ---- a/package/kernel/linux/modules/netfilter.mk -+++ b/package/kernel/linux/modules/netfilter.mk -@@ -672,7 +672,6 @@ $(eval $(call KernelPackage,arptables)) - define KernelPackage/br-netfilter - SUBMENU:=$(NF_MENU) - TITLE:=Bridge netfilter support modules -- HIDDEN:=1 - DEPENDS:=+kmod-ipt-core +kmod-bridge - FILES:=$(LINUX_DIR)/net/bridge/br_netfilter.ko - KCONFIG:=CONFIG_BRIDGE_NETFILTER diff --git a/patches/lede/0076-kernel-kmod-ebtables-do-not-depend-on-kmod-br-netfilter.patch b/patches/lede/0076-kernel-kmod-ebtables-do-not-depend-on-kmod-br-netfilter.patch deleted file mode 100644 index 472fe77c..00000000 --- a/patches/lede/0076-kernel-kmod-ebtables-do-not-depend-on-kmod-br-netfilter.patch +++ /dev/null @@ -1,22 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 9 Apr 2018 19:01:56 +0200 -Subject: kernel: kmod-ebtables: do not depend on kmod-br-netfilter - -While ebtables can be combined with br-netfilter, there is no good reason -to make it a dependency. - -Signed-off-by: Matthias Schiffer - -diff --git a/package/kernel/linux/modules/netfilter.mk b/package/kernel/linux/modules/netfilter.mk -index 275147b8757a42c00de14502a072c8384a0526ab..34eefcd892b9e8b3157603fa47578d0afc65dc4b 100644 ---- a/package/kernel/linux/modules/netfilter.mk -+++ b/package/kernel/linux/modules/netfilter.mk -@@ -689,7 +689,7 @@ $(eval $(call KernelPackage,br-netfilter)) - define KernelPackage/ebtables - SUBMENU:=$(NF_MENU) - TITLE:=Bridge firewalling modules -- DEPENDS:=+kmod-ipt-core +kmod-bridge +kmod-br-netfilter -+ DEPENDS:=+kmod-ipt-core +kmod-bridge - FILES:=$(foreach mod,$(EBTABLES-m),$(LINUX_DIR)/net/$(mod).ko) - KCONFIG:=$(KCONFIG_EBTABLES) - AUTOLOAD:=$(call AutoProbe,$(notdir $(EBTABLES-m))) diff --git a/patches/lede/0077-iptables-split-physdev-match-out-as-a-separate-package.patch b/patches/lede/0077-iptables-split-physdev-match-out-as-a-separate-package.patch deleted file mode 100644 index 8d6c61d7..00000000 --- a/patches/lede/0077-iptables-split-physdev-match-out-as-a-separate-package.patch +++ /dev/null @@ -1,114 +0,0 @@ -From: Matthias Schiffer -Date: Mon, 9 Apr 2018 19:41:26 +0200 -Subject: iptables: split physdev match out as a separate package - -Split physdev match out of ipt-extra to allow installing ipt-extra without -pulling in br-netfilter. - -Signed-off-by: Matthias Schiffer - -diff --git a/include/netfilter.mk b/include/netfilter.mk -index 39c8e7c90fab2ba14cd75c80d1e357dd23ae6a1b..79ae3d5343ed77b559f50f40bb8a73a33dd13314 100644 ---- a/include/netfilter.mk -+++ b/include/netfilter.mk -@@ -89,12 +89,14 @@ $(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_CO - - $(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_ADDRTYPE, $(if $(NF_KMOD),$(P_XT)xt_addrtype,$(P_XT)ipt_addrtype))) - $(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_OWNER, $(P_XT)xt_owner)) --$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_PHYSDEV, $(P_XT)xt_physdev)) - $(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_PKTTYPE, $(P_XT)xt_pkttype)) - $(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_QUOTA, $(P_XT)xt_quota)) - - #$(eval $(call nf_add,IPT_EXTRA,CONFIG_IP_NF_TARGET_ROUTE, $(P_V4)ipt_ROUTE)) - -+# physdev -+ -+$(eval $(call nf_add,IPT_PHYSDEV,CONFIG_NETFILTER_XT_MATCH_PHYSDEV, $(P_XT)xt_physdev)) - - # filter - -@@ -347,6 +349,7 @@ IPT_BUILTIN += $(NF_CONNTRACK6-y) - IPT_BUILTIN += $(IPT_CONNTRACK-y) - IPT_BUILTIN += $(IPT_CONNTRACK_EXTRA-y) - IPT_BUILTIN += $(IPT_EXTRA-y) -+IPT_BUILTIN += $(IPT_PHYSDEV-y) - IPT_BUILTIN += $(IPT_FILTER-y) - IPT_BUILTIN += $(IPT_IPOPT-y) - IPT_BUILTIN += $(IPT_IPRANGE-y) -diff --git a/package/kernel/linux/modules/netfilter.mk b/package/kernel/linux/modules/netfilter.mk -index 34eefcd892b9e8b3157603fa47578d0afc65dc4b..a71904673ae53bffcc9fd88291520aacb4a4f8d7 100644 ---- a/package/kernel/linux/modules/netfilter.mk -+++ b/package/kernel/linux/modules/netfilter.mk -@@ -604,7 +604,7 @@ define KernelPackage/ipt-extra - KCONFIG:=$(KCONFIG_IPT_EXTRA) - FILES:=$(foreach mod,$(IPT_EXTRA-m),$(LINUX_DIR)/net/$(mod).ko) - AUTOLOAD:=$(call AutoProbe,$(notdir $(IPT_EXTRA-m))) -- $(call AddDepends/ipt,+kmod-br-netfilter) -+ $(call AddDepends/ipt) - endef - - define KernelPackage/ipt-extra/description -@@ -612,7 +612,6 @@ define KernelPackage/ipt-extra/description - Includes: - - addrtype - - owner -- - physdev (if bridge support was enabled in kernel) - - pkttype - - quota - endef -@@ -620,6 +619,21 @@ endef - $(eval $(call KernelPackage,ipt-extra)) - - -+define KernelPackage/ipt-physdev -+ TITLE:=physdev module -+ KCONFIG:=$(KCONFIG_IPT_PHYSDEV) -+ FILES:=$(foreach mod,$(IPT_PHYSDEV-m),$(LINUX_DIR)/net/$(mod).ko) -+ AUTOLOAD:=$(call AutoProbe,$(notdir $(IPT_PHYSDEV-m))) -+ $(call AddDepends/ipt,+kmod-br-netfilter) -+endef -+ -+define KernelPackage/ipt-physdev/description -+ The iptables physdev kernel module -+endef -+ -+$(eval $(call KernelPackage,ipt-physdev)) -+ -+ - define KernelPackage/ip6tables - SUBMENU:=$(NF_MENU) - TITLE:=IPv6 modules -diff --git a/package/network/utils/iptables/Makefile b/package/network/utils/iptables/Makefile -index 9761ed1820b5c092292d25aef28f8f9a8ffa91a6..af5ed8c6245a9d52f5aea695e71b08ac6f3e6eca 100644 ---- a/package/network/utils/iptables/Makefile -+++ b/package/network/utils/iptables/Makefile -@@ -321,12 +321,20 @@ Other extra iptables extensions. - - addrtype - - condition - - owner -- - physdev (if ebtables is enabled) - - pkttype - - quota - - endef - -+define Package/iptables-mod-physdev -+$(call Package/iptables/Module, +kmod-ipt-physdev) -+ TITLE:=physdev iptables extension -+endef -+ -+define Package/iptables-mod-physdev/description -+The iptables physdev match. -+endef -+ - define Package/iptables-mod-led - $(call Package/iptables/Module, +kmod-ipt-led) - TITLE:=LED trigger iptables extension -@@ -561,6 +569,7 @@ endef - $(eval $(call BuildPackage,iptables)) - $(eval $(call BuildPlugin,iptables-mod-conntrack-extra,$(IPT_CONNTRACK_EXTRA-m))) - $(eval $(call BuildPlugin,iptables-mod-extra,$(IPT_EXTRA-m))) -+$(eval $(call BuildPlugin,iptables-mod-physdev,$(IPT_PHYSDEV-m))) - $(eval $(call BuildPlugin,iptables-mod-filter,$(IPT_FILTER-m))) - $(eval $(call BuildPlugin,iptables-mod-ipopt,$(IPT_IPOPT-m))) - $(eval $(call BuildPlugin,iptables-mod-ipsec,$(IPT_IPSEC-m))) diff --git a/patches/lede/0078-ar71xx-increase-kernel-partition-size-for-UniFi-AP-Pro-and-Outdoor.patch b/patches/lede/0078-ar71xx-increase-kernel-partition-size-for-UniFi-AP-Pro-and-Outdoor.patch deleted file mode 100644 index 75188df4..00000000 --- a/patches/lede/0078-ar71xx-increase-kernel-partition-size-for-UniFi-AP-Pro-and-Outdoor.patch +++ /dev/null @@ -1,24 +0,0 @@ -From: Matthias Schiffer -Date: Tue, 10 Apr 2018 15:19:52 +0200 -Subject: ar71xx: increase kernel partition size for UniFi AP Pro and Outdoor+ - -Tested on UAP Outdoor+. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/image/ubnt.mk b/target/linux/ar71xx/image/ubnt.mk -index 899d5d030e44e64bc945f03babf8820d87451177..84bf13d2829c3e8cd250fe9a069245d0098b864d 100644 ---- a/target/linux/ar71xx/image/ubnt.mk -+++ b/target/linux/ar71xx/image/ubnt.mk -@@ -254,9 +254,9 @@ TARGET_DEVICES += ubnt-rs ubnt-rspro ubnt-ls-sr71 - - define Device/ubnt-uap-pro - DEVICE_TITLE := Ubiquiti UAP Pro -- KERNEL_SIZE := 1536k -+ KERNEL_SIZE := 1792k - IMAGE_SIZE := 15744k -- MTDPARTS := spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,1536k(kernel),14208k(rootfs),256k(cfg)ro,64k(EEPROM)ro,15744k@0x50000(firmware) -+ MTDPARTS := spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,1792k(kernel),13952k(rootfs),256k(cfg)ro,64k(EEPROM)ro,15744k@0x50000(firmware) - UBNT_TYPE := BZ - UBNT_CHIP := ar934x - BOARDNAME := UAP-PRO diff --git a/patches/lede/0079-firmware-utils-tplink-safeloader-move-CPE-WBS-210-510-version-metainfo-to-the-end.patch b/patches/lede/0079-firmware-utils-tplink-safeloader-move-CPE-WBS-210-510-version-metainfo-to-the-end.patch deleted file mode 100644 index dbe58d7b..00000000 --- a/patches/lede/0079-firmware-utils-tplink-safeloader-move-CPE-WBS-210-510-version-metainfo-to-the-end.patch +++ /dev/null @@ -1,109 +0,0 @@ -From: Matthias Schiffer -Date: Tue, 10 Apr 2018 17:26:34 +0200 -Subject: firmware-utils: tplink-safeloader: move CPE/WBS 210/510 version metainfo to the end - -Having the metainfo between kernel and rootfs prevents us from resizing -the kernel partition as necessary. - -Signed-off-by: Matthias Schiffer - -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 11ff2e56e19ec3780f988baf7257810530165b23..2a2329d1f188ea8520b6a4aeef25937e05d48a06 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -139,10 +139,10 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x170000}, -- {"soft-version", 0x1b0000, 0x00100}, -- {"support-list", 0x1b1000, 0x00400}, -- {"file-system", 0x1c0000, 0x600000}, -+ {"os-image", 0x40000, 0x180000}, -+ {"file-system", 0x1c0000, 0x5f0000}, -+ {"soft-version", 0x7b0000, 0x00100}, -+ {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, - {"default-config", 0x7d0000, 0x10000}, - {"log", 0x7e0000, 0x10000}, -@@ -151,7 +151,7 @@ static struct device_info boards[] = { - }, - - .first_sysupgrade_partition = "os-image", -- .last_sysupgrade_partition = "file-system", -+ .last_sysupgrade_partition = "support-list", - }, - - /** Firmware layout for the CPE510/520 */ -@@ -177,10 +177,10 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x170000}, -- {"soft-version", 0x1b0000, 0x00100}, -- {"support-list", 0x1b1000, 0x00400}, -- {"file-system", 0x1c0000, 0x600000}, -+ {"os-image", 0x40000, 0x180000}, -+ {"file-system", 0x1c0000, 0x5f0000}, -+ {"soft-version", 0x7b0000, 0x00100}, -+ {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, - {"default-config", 0x7d0000, 0x10000}, - {"log", 0x7e0000, 0x10000}, -@@ -189,7 +189,7 @@ static struct device_info boards[] = { - }, - - .first_sysupgrade_partition = "os-image", -- .last_sysupgrade_partition = "file-system", -+ .last_sysupgrade_partition = "support-list", - }, - - { -@@ -209,10 +209,10 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x170000}, -- {"soft-version", 0x1b0000, 0x00100}, -- {"support-list", 0x1b1000, 0x00400}, -- {"file-system", 0x1c0000, 0x600000}, -+ {"os-image", 0x40000, 0x180000}, -+ {"file-system", 0x1c0000, 0x5f0000}, -+ {"soft-version", 0x7b0000, 0x00100}, -+ {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, - {"default-config", 0x7d0000, 0x10000}, - {"log", 0x7e0000, 0x10000}, -@@ -221,7 +221,7 @@ static struct device_info boards[] = { - }, - - .first_sysupgrade_partition = "os-image", -- .last_sysupgrade_partition = "file-system", -+ .last_sysupgrade_partition = "support-list", - }, - - { -@@ -241,10 +241,10 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x170000}, -- {"soft-version", 0x1b0000, 0x00100}, -- {"support-list", 0x1b1000, 0x00400}, -- {"file-system", 0x1c0000, 0x600000}, -+ {"os-image", 0x40000, 0x180000}, -+ {"file-system", 0x1c0000, 0x5f0000}, -+ {"soft-version", 0x7b0000, 0x00100}, -+ {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, - {"default-config", 0x7d0000, 0x10000}, - {"log", 0x7e0000, 0x10000}, -@@ -253,7 +253,7 @@ static struct device_info boards[] = { - }, - - .first_sysupgrade_partition = "os-image", -- .last_sysupgrade_partition = "file-system", -+ .last_sysupgrade_partition = "support-list", - }, - - /** Firmware layout for the C2600 */ diff --git a/patches/lede/0080-ar71xx-increase-kernel-partition-size-for-CPE-WBS-210-510.patch b/patches/lede/0080-ar71xx-increase-kernel-partition-size-for-CPE-WBS-210-510.patch deleted file mode 100644 index 839e6753..00000000 --- a/patches/lede/0080-ar71xx-increase-kernel-partition-size-for-CPE-WBS-210-510.patch +++ /dev/null @@ -1,67 +0,0 @@ -From: Matthias Schiffer -Date: Tue, 10 Apr 2018 18:14:41 +0200 -Subject: ar71xx: increase kernel partition size for CPE/WBS 210/510 - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index be7e846c88f9ebbb8a4e4840e690d7864386bf64..1a6e58fca882fc9d122c184ee8167537751acf25 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -167,7 +167,7 @@ TARGET_DEVICES += archer-c60-v1 - define Device/cpe510-520 - DEVICE_TITLE := TP-LINK CPE510/520 - DEVICE_PACKAGES := rssileds -- MTDPARTS := spi0.0:128k(u-boot)ro,64k(pation-table)ro,64k(product-info)ro,1536k(kernel),6144k(rootfs),192k(config)ro,64k(ART)ro,7680k@0x40000(firmware) -+ MTDPARTS := spi0.0:128k(u-boot)ro,64k(partition-table)ro,64k(product-info)ro,1792k(kernel),5888k(rootfs),192k(config)ro,64k(ART)ro,7680k@0x40000(firmware) - IMAGE_SIZE := 7680k - BOARDNAME := CPE510 - TPLINK_BOARD_NAME := CPE510 -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 2a2329d1f188ea8520b6a4aeef25937e05d48a06..ba86c71d870c8f38abb92c657c3656086a7782be 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -139,8 +139,8 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x180000}, -- {"file-system", 0x1c0000, 0x5f0000}, -+ {"os-image", 0x40000, 0x1c0000}, -+ {"file-system", 0x200000, 0x5b0000}, - {"soft-version", 0x7b0000, 0x00100}, - {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, -@@ -177,8 +177,8 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x180000}, -- {"file-system", 0x1c0000, 0x5f0000}, -+ {"os-image", 0x40000, 0x1c0000}, -+ {"file-system", 0x200000, 0x5b0000}, - {"soft-version", 0x7b0000, 0x00100}, - {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, -@@ -209,8 +209,8 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x180000}, -- {"file-system", 0x1c0000, 0x5f0000}, -+ {"os-image", 0x40000, 0x1c0000}, -+ {"file-system", 0x200000, 0x5b0000}, - {"soft-version", 0x7b0000, 0x00100}, - {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, -@@ -241,8 +241,8 @@ static struct device_info boards[] = { - {"default-mac", 0x30000, 0x00020}, - {"product-info", 0x31100, 0x00100}, - {"signature", 0x32000, 0x00400}, -- {"os-image", 0x40000, 0x180000}, -- {"file-system", 0x1c0000, 0x5f0000}, -+ {"os-image", 0x40000, 0x1c0000}, -+ {"file-system", 0x200000, 0x5b0000}, - {"soft-version", 0x7b0000, 0x00100}, - {"support-list", 0x7b1000, 0x00400}, - {"user-config", 0x7c0000, 0x10000}, diff --git a/patches/lede/0081-ar71xx-increase-kernel-partition-size-for-TP-Link-RE450-v1.patch b/patches/lede/0081-ar71xx-increase-kernel-partition-size-for-TP-Link-RE450-v1.patch deleted file mode 100644 index e03db780..00000000 --- a/patches/lede/0081-ar71xx-increase-kernel-partition-size-for-TP-Link-RE450-v1.patch +++ /dev/null @@ -1,41 +0,0 @@ -From: Piotr Dymacz -Date: Mon, 6 Nov 2017 23:17:24 +0100 -Subject: ar71xx: increase kernel partition size for TP-Link RE450 v1 - -This increases kernel partition size and fixes rootfs (file-system) -partition size on TP-Link RE450 v1. Also, while we are at it, switch -from statically defined kernel and rootfs partitions in kernel cmdline -to "tplink-fw" mtd splitter. - -Fixes: FS#1072. - -Signed-off-by: Piotr Dymacz - -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 1a6e58fca882fc9d122c184ee8167537751acf25..60dfe0e3edafcadad4ddc08be7645b49f269907c 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -207,7 +207,7 @@ TARGET_DEVICES += cpe210-220 cpe510-520 wbs210 wbs510 - define Device/re450 - DEVICE_TITLE := TP-LINK RE450 - DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca988x -- MTDPARTS := spi0.0:128k(u-boot)ro,1344k(kernel),4672k(rootfs),64k(pation-table)ro,64k(product-info)ro,1856k(config)ro,64k(art)ro,6016k@0x20000(firmware) -+ MTDPARTS := spi0.0:128k(u-boot)ro,6016k(firmware),64k(partition-table)ro,64k(product-info)ro,1856k(config)ro,64k(art)ro - IMAGE_SIZE := 7936k - BOARDNAME := RE450 - TPLINK_BOARD_NAME := RE450 -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index ba86c71d870c8f38abb92c657c3656086a7782be..23b69f3bd0eb66aca650eb2ffd7d5cd2a7cb5194 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -689,8 +689,8 @@ static struct device_info boards[] = { - */ - .partitions = { - {"fs-uboot", 0x00000, 0x20000}, -- {"os-image", 0x20000, 0x150000}, -- {"file-system", 0x170000, 0x4a0000}, -+ {"os-image", 0x20000, 0x180000}, -+ {"file-system", 0x1a0000, 0x460000}, - {"partition-table", 0x600000, 0x02000}, - {"default-mac", 0x610000, 0x00020}, - {"pin", 0x610100, 0x00020}, diff --git a/patches/lede/0082-include-kernel.mk-build-kmod-packages-with-empty-FILES.patch b/patches/lede/0082-include-kernel.mk-build-kmod-packages-with-empty-FILES.patch deleted file mode 100644 index c8c4fcc9..00000000 --- a/patches/lede/0082-include-kernel.mk-build-kmod-packages-with-empty-FILES.patch +++ /dev/null @@ -1,37 +0,0 @@ -From: Matthias Schiffer -Date: Tue, 10 Apr 2018 09:03:52 +0200 -Subject: include/kernel.mk: build kmod packages with empty FILES - -kmod packages without FILES did not have an install step defined, leading -to no package being built. This affected netfilter/iptables packages, which -filter out builtin modules from FILES. - -Not building a package that it is selected in .config is problematic, as -the generated empty package may be necessary to satisfy dependencies. - -Signed-off-by: Matthias Schiffer - -diff --git a/include/kernel.mk b/include/kernel.mk -index b1d0e8d927cb462b486cfd645d68963f1b6ab8ff..d8d457fe7a5d3584d8aa4e27430da84533c85ed0 100644 ---- a/include/kernel.mk -+++ b/include/kernel.mk -@@ -194,8 +194,7 @@ $(call KernelPackage/$(1)/config) - $(call KernelPackage/depends) - - ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),) -- ifneq ($(strip $(FILES)),) -- define Package/kmod-$(1)/install -+ define Package/kmod-$(1)/install - @for mod in $$(call version_filter,$$(FILES)); do \ - if grep -q "$$$$$$$${mod##$(LINUX_DIR)/}" "$(LINUX_DIR)/modules.builtin"; then \ - echo "NOTICE: module '$$$$$$$$mod' is built-in."; \ -@@ -209,8 +208,7 @@ $(call KernelPackage/$(1)/config) - done; - $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD)) - $(call KernelPackage/$(1)/install,$$(1)) -- endef -- endif -+ endef - $(if $(CONFIG_PACKAGE_kmod-$(1)), - else - compile: $(1)-disabled diff --git a/patches/lede/0083-build-move-lzma2eva-build-step-to-image-commands.mk.patch b/patches/lede/0083-build-move-lzma2eva-build-step-to-image-commands.mk.patch deleted file mode 100644 index 856479c9..00000000 --- a/patches/lede/0083-build-move-lzma2eva-build-step-to-image-commands.mk.patch +++ /dev/null @@ -1,50 +0,0 @@ -From: Mathias Kresin -Date: Sat, 25 Mar 2017 19:18:37 +0100 -Subject: build: move lzma2eva build step to image-commands.mk - -Move it to image-commands.mk so that it can used by other targets with -eva based boards as well. - -Signed-off-by: Mathias Kresin - -diff --git a/include/image-commands.mk b/include/image-commands.mk -index ec35e0fcfe97d9d98c731459d1f1681d2bcfe5ad..19d98feefe02b6deb43735ccd436aac39fc0a8ab 100644 ---- a/include/image-commands.mk -+++ b/include/image-commands.mk -@@ -11,6 +11,11 @@ define Build/uImage - mv $@.new $@ - endef - -+define Build/eva-image -+ $(STAGING_DIR_HOST)/bin/lzma2eva $(KERNEL_LOADADDR) $(KERNEL_LOADADDR) $@ $@.new -+ mv $@.new $@ -+endef -+ - define Build/netgear-chk - $(STAGING_DIR_HOST)/bin/mkchkimg \ - -o $@.new \ -diff --git a/target/linux/lantiq/image/Makefile b/target/linux/lantiq/image/Makefile -index a96e528aab2c5c5c95f01b087f589cecc57c6e51..2cac925bfd95fedd5f76f30e72300cc0fd7d37a9 100644 ---- a/target/linux/lantiq/image/Makefile -+++ b/target/linux/lantiq/image/Makefile -@@ -20,9 +20,8 @@ else - UBIFS_OPTS := -m 2048 -e 126KiB -c 4096 - endif - --define Build/eva-image -- lzma2eva $(KERNEL_LOADADDR) $(KERNEL_LOADADDR) $@ $@.new -- ( dd if=$@.new bs=64k conv=sync; cat ./eva.dummy.squashfs; ) > $@ -+define Build/append-avm-fakeroot -+ cat ./eva.dummy.squashfs >> $@ - endef - - define Build/dgn3500-sercom-footer -@@ -104,6 +103,8 @@ endef - - define Device/AVM - KERNEL := kernel-bin | append-dtb | lzma | eva-image -+ IMAGE/sysupgrade.bin := append-kernel | pad-to 64k | append-avm-fakeroot | \ -+ append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE) - endef - - ifeq ($(SUBTARGET),xway_legacy) diff --git a/patches/lede/0084-ar71xx-add-support-for-Fritz-Box-4020.patch b/patches/lede/0084-ar71xx-add-support-for-Fritz-Box-4020.patch deleted file mode 100644 index 15d18730..00000000 --- a/patches/lede/0084-ar71xx-add-support-for-Fritz-Box-4020.patch +++ /dev/null @@ -1,572 +0,0 @@ -From: David Bauer -Date: Tue, 24 Apr 2018 19:52:13 +0200 -Subject: ar71xx: add support for Fritz!Box 4020 - -This commit adds support for the AVM Fritz!Box 4020 WiFi-router. - -SoC: Qualcomm Atheros QCA9561 (Dragonfly) 750MHz -RAM: Winbond W971GG6KB-25 -FLASH: Macronix MX25L12835F -WiFi: QCA9561 b/g/n 3x3 450Mbit/s -USB: 1x USB 2.0 -IN: WPS button, WiFi button -OUT: Power LED green, Internet LED green, WLAN LED green, - LAN LED green, INFO LED green, INFO LED red -UART: Header Next to Black metal shield - Pinout is 3.3V - RX - TX - GND (Square Pad is 3.3V) - The Serial setting is 115200-8-N-1. - -Tested and working: - - Ethernet (LAN + WAN) - - WiFi (correct MAC) - - Installation via EVA bootloader - - OpenWRT sysupgrade - - Buttons - - LEDs - -Not working: - - USB port - -Installation via EVA: -In the first seconds after Power is connected, the bootloader will -listen for FTP connections on 169.254.157.1 (Might also be 192.168.178.1). Firmware can be uploaded -like following: - - ftp> quote USER adam2 - ftp> quote PASS adam2 - ftp> binary - ftp> debug - ftp> passive - ftp> quote MEDIA FLSH - ftp> put openwrt-sysupgrade.bin mtd1 - -Note that this procedure might take up to two minutes. After transfer is -complete you need to powercycle the device to boot OpenWRT. - -Signed-off-by: David Bauer - -diff --git a/include/image-commands.mk b/include/image-commands.mk -index 19d98feefe02b6deb43735ccd436aac39fc0a8ab..7e77b878361ef5a4f6278733d25b0a1fed0ce5ff 100644 ---- a/include/image-commands.mk -+++ b/include/image-commands.mk -@@ -16,6 +16,16 @@ define Build/eva-image - mv $@.new $@ - endef - -+define Build/append-squashfs-fakeroot-be -+ rm -rf $@.fakefs $@.fakesquashfs -+ mkdir $@.fakefs -+ $(STAGING_DIR_HOST)/bin/mksquashfs-lzma \ -+ $@.fakefs $@.fakesquashfs \ -+ -noappend -root-owned -be -nopad -b 65536 \ -+ $(if $(SOURCE_DATE_EPOCH),-fixed-time $(SOURCE_DATE_EPOCH)) -+ cat $@.fakesquashfs >> $@ -+endef -+ - define Build/netgear-chk - $(STAGING_DIR_HOST)/bin/mkchkimg \ - -o $@.new \ -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index f9483e9a706fbd98ce6a42e968bc0d31e9da5c84..e8b13af7c24dea86519c962fa6381fd75971e8b9 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -305,6 +305,12 @@ dlan-pro-1200-ac) - ucidef_set_led_gpio "plcw" "dLAN" "devolo:status:dlan" "17" "0" - ucidef_set_led_gpio "plcr" "dLAN" "devolo:error:dlan" "16" "0" - ;; -+fritz4020) -+ ucidef_set_led_default "power" "Power" "$board:green:power" "1" -+ ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth1" -+ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" -+ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" -+ ;; - gl-ar150|\ - gl-ar300|\ - gl-ar300m|\ -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 1690172b5dfac1e1aa278c38c27ba64cfd61ade0..1018ab4449f896d565b57ecbdc73b7e3d7fbe486 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -207,6 +207,7 @@ ar71xx_setup_interfaces() - ;; - archer-c58-v1|\ - archer-c59-v1|\ -+ fritz4020|\ - rb-450g) - ucidef_set_interfaces_lan_wan "eth1" "eth0" - ucidef_add_switch "switch0" \ -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom -index 945167bee6f7dad76bc650a2bb8a7a71f96b738d..7cb708ebe2e9e7546f165022233d17224905a49c 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom -@@ -40,6 +40,24 @@ ath9k_ubi_eeprom_extract() { - ath9k_eeprom_die "failed to extract from $ubi" - } - -+ath9k_eeprom_extract_reverse() { -+ local part=$1 -+ local offset=$2 -+ local count=$3 -+ local mtd -+ local reversed -+ local caldata -+ -+ mtd=$(find_mtd_chardev "$part") -+ reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd) -+ -+ for byte in $reversed; do -+ caldata="\x${byte}${caldata}" -+ done -+ -+ printf "%b" "$caldata" > /lib/firmware/$FIRMWARE -+} -+ - ath9k_patch_firmware_mac() { - local mac=$1 - -@@ -58,6 +76,9 @@ case "$FIRMWARE" in - ath9k_eeprom_extract "art" 4096 2048 - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +1) - ;; -+ fritz4020) -+ ath9k_eeprom_extract_reverse "urlader" 5441 1088 -+ ;; - mr18) - . /lib/upgrade/nand.sh - -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index 59ede17653bbb1994ce9fa734c86c877aedf67e4..a815ffe07322c20cddaa3c4f97e3bf62a3cf15ec 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -638,6 +638,9 @@ ar71xx_board_detect() { - name="gl-inet" - gl_inet_board_detect - ;; -+ *"FRITZ!Box 4020") -+ name="fritz4020" -+ ;; - *"GL AR150") - name="gl-ar150" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index 5e8a06a7ae70ec349693c09deedbfce41a52cfc2..491b5d5a98b44844f14441d4024f2ad9667186e0 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -612,6 +612,9 @@ platform_check_image() { - - return 0; - ;; -+ fritz4020) -+ return 0 -+ ;; - esac - - echo "Sysupgrade is not yet supported on $board." -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index 396a4fa02adb37c6e5f9f7f1cc40fd1014361654..45bf500643837a7270b45e32b22225c06c5fb841 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -106,6 +106,7 @@ CONFIG_ATH79_MACH_ESR1750=y - CONFIG_ATH79_MACH_ESR900=y - CONFIG_ATH79_MACH_EW_DORIN=y - CONFIG_ATH79_MACH_F9K1115V2=y -+CONFIG_ATH79_MACH_FRITZ4020=y - CONFIG_ATH79_MACH_GL_AR150=y - CONFIG_ATH79_MACH_GL_AR300=y - CONFIG_ATH79_MACH_GL_AR300M=y -@@ -373,6 +374,7 @@ CONFIG_MTD_PHYSMAP=y - CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-2 - CONFIG_MTD_REDBOOT_PARTS=y - CONFIG_MTD_SPI_NOR=y -+CONFIG_MTD_SPLIT_EVA_FW=y - CONFIG_MTD_SPLIT_FIRMWARE=y - CONFIG_MTD_SPLIT_LZMA_FW=y - CONFIG_MTD_SPLIT_SEAMA_FW=y -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index 4c9012acc6b4c40d88ffc8752086cac86b9b9c92..46366e0d922808e5e14fed0f2b5409cda11afd26 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -1918,3 +1918,12 @@ config ATH79_MACH_TL_WPA8630 - select ATH79_DEV_LEDS_GPIO - select ATH79_DEV_M25P80 - select ATH79_DEV_WMAC -+ -+config ATH79_MACH_FRITZ4020 -+ bool "AVM FRITZ!Box 4020 support" -+ select SOC_QCA956X -+ select ATH79_DEV_ETH -+ select ATH79_DEV_GPIO_BUTTONS -+ select ATH79_DEV_LEDS_GPIO -+ select ATH79_DEV_USB -+ select ATH79_DEV_M25P80 -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -index 8408894669dc5f14f05701359073ef233a1b89f0..29c9c65bc122c0d02839adf1abb61dcda0795fb6 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -@@ -111,6 +111,7 @@ obj-$(CONFIG_ATH79_MACH_ESR1750) += mach-esr1750.o - obj-$(CONFIG_ATH79_MACH_ESR900) += mach-esr900.o - obj-$(CONFIG_ATH79_MACH_EW_DORIN) += mach-ew-dorin.o - obj-$(CONFIG_ATH79_MACH_F9K1115V2) += mach-f9k1115v2.o -+obj-$(CONFIG_ATH79_MACH_FRITZ4020) += mach-fritz4020.o - obj-$(CONFIG_ATH79_MACH_GL_AR150) += mach-gl-ar150.o - obj-$(CONFIG_ATH79_MACH_GL_AR300) += mach-gl-ar300.o - obj-$(CONFIG_ATH79_MACH_GL_AR300M) += mach-gl-ar300m.o -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c -index 427de6a50d0fcbc9dae11f8e6921194c0a5b09ed..5f971ea32d35035617229076b7a7fc30ed4d2dcc 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c -@@ -1224,6 +1224,15 @@ void __init ath79_parse_ascii_mac(char *mac_str, u8 *mac) - } - } - -+void __init ath79_extract_mac_reverse(u8 *ptr, u8 *out) -+{ -+ int i; -+ -+ for (i = 0; i < ETH_ALEN; i++) { -+ out[i] = ptr[ETH_ALEN-i-1]; -+ } -+} -+ - static void __init ath79_set_mac_base_ascii(char *str) - { - u8 mac[ETH_ALEN]; -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.h b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.h -index fb9e4f63c66ef9008e423007ecff02c93c321fb8..4d78260fbe35db20f8dc6dd245abcd0cbb275477 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.h -@@ -18,6 +18,7 @@ struct platform_device; - - extern unsigned char ath79_mac_base[] __initdata; - void ath79_parse_ascii_mac(char *mac_str, u8 *mac); -+void ath79_extract_mac_reverse(u8 *ptr, u8 *out); - void ath79_init_mac(unsigned char *dst, const unsigned char *src, - int offset); - void ath79_init_local_mac(unsigned char *dst, const unsigned char *src); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-fritz4020.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-fritz4020.c -new file mode 100644 -index 0000000000000000000000000000000000000000..ed7f9a8b3ead80dbbe7f8d27c7dd5ecf0543d733 ---- /dev/null -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-fritz4020.c -@@ -0,0 +1,242 @@ -+/* -+ * AVM FRITZ!Box 4020 board support -+ * -+ * Copyright (C) 2018 David Bauer -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include "common.h" -+#include "dev-eth.h" -+#include "dev-gpio-buttons.h" -+#include "dev-leds-gpio.h" -+#include "dev-m25p80.h" -+#include "dev-spi.h" -+#include "dev-usb.h" -+#include "dev-wmac.h" -+#include "machtypes.h" -+ -+ -+#define FRITZ4020_GPIO_SHIFT_SER 19 /* DS, Data Serial Input */ -+#define FRITZ4020_GPIO_SHIFT_SRCLK 20 /* SHCP, Shift Reg Clock Input */ -+ -+#define FRITZ4020_SSR_BIT_0 0 -+#define FRITZ4020_SSR_BIT_1 1 -+#define FRITZ4020_SSR_BIT_2 2 -+#define FRITZ4020_SSR_BIT_3 3 -+#define FRITZ4020_SSR_BIT_4 4 -+#define FRITZ4020_SSR_BIT_5 5 -+#define FRITZ4020_SSR_BIT_6 6 -+#define FRITZ4020_SSR_BIT_7 7 -+ -+#define FRITZ4020_74HC_GPIO_BASE 32 -+#define FRITZ4020_74HC_GPIO_LED_LAN (FRITZ4020_74HC_GPIO_BASE + 0) -+#define FRITZ4020_74HC_GPIO_LED_INFO_RED (FRITZ4020_74HC_GPIO_BASE + 1) -+#define FRITZ4020_74HC_GPIO_LED_POWER (FRITZ4020_74HC_GPIO_BASE + 2) -+#define FRITZ4020_74HC_GPIO_LED_WLAN (FRITZ4020_74HC_GPIO_BASE + 3) -+#define FRITZ4020_74HC_GPIO_LED_WAN (FRITZ4020_74HC_GPIO_BASE + 4) -+#define FRITZ4020_74HC_GPIO_USB_RST (FRITZ4020_74HC_GPIO_BASE + 5) -+#define FRITZ4020_74HC_GPIO_LED_INFO (FRITZ4020_74HC_GPIO_BASE + 6) -+ -+ -+#define FRITZ4020_GPIO_BTN_WPS 2 -+#define FRITZ4020_GPIO_BTN_WLAN 21 -+#define FRITZ4020_KEYS_POLL_INTERVAL 20 /* msecs */ -+#define FRITZ4020_KEYS_DEBOUNCE_INTERVAL (3 * FRITZ4020_KEYS_POLL_INTERVAL) -+ -+#define FRTIZ4020_OFFSET_URLADER_WIFI_MAC_REVERSE 0x1979 -+ -+ -+static struct spi_gpio_platform_data fritz4020_spi_data = { -+ .sck = FRITZ4020_GPIO_SHIFT_SRCLK, -+ .miso = SPI_GPIO_NO_MISO, -+ .mosi = FRITZ4020_GPIO_SHIFT_SER, -+ .num_chipselect = 1, -+}; -+ -+static u8 fritz4020_ssr_initdata[] = { -+ BIT(FRITZ4020_SSR_BIT_7) | -+ BIT(FRITZ4020_SSR_BIT_6) | -+ BIT(FRITZ4020_SSR_BIT_5) | -+ BIT(FRITZ4020_SSR_BIT_4) | -+ BIT(FRITZ4020_SSR_BIT_3) | -+ BIT(FRITZ4020_SSR_BIT_2) | -+ BIT(FRITZ4020_SSR_BIT_1) -+}; -+ -+static struct gen_74x164_chip_platform_data fritz4020_ssr_data = { -+ .base = FRITZ4020_74HC_GPIO_BASE, -+ .num_registers = ARRAY_SIZE(fritz4020_ssr_initdata), -+ .init_data = fritz4020_ssr_initdata, -+}; -+ -+static struct platform_device fritz4020_spi_device = { -+ .name = "spi_gpio", -+ .id = 1, -+ .dev = { -+ .platform_data = &fritz4020_spi_data, -+ }, -+}; -+ -+static struct spi_board_info fritz4020_spi_info[] = { -+ { -+ .bus_num = 1, -+ .chip_select = 0, -+ .max_speed_hz = 10000000, -+ .modalias = "74x164", -+ .platform_data = &fritz4020_ssr_data, -+ .controller_data = (void *) 0x0, -+ }, -+}; -+ -+static struct mtd_partition fritz4020_flash_partitions[] = { -+ { -+ .name = "urlader", -+ .offset = 0, -+ .size = 0x0020000, -+ .mask_flags = MTD_WRITEABLE, -+ }, { -+ .name = "firmware", -+ .offset = 0x0020000, -+ .size = 0x0EE0000, -+ }, { -+ .name = "tffs (1)", -+ .offset = 0x0f00000, -+ .size = 0x0080000, -+ .mask_flags = MTD_WRITEABLE, -+ }, { -+ .name = "tffs (2)", -+ .offset = 0x0f80000, -+ .size = 0x0080000, -+ .mask_flags = MTD_WRITEABLE, -+ } -+}; -+ -+static struct flash_platform_data fritz4020_flash_data = { -+ .parts = fritz4020_flash_partitions, -+ .nr_parts = ARRAY_SIZE(fritz4020_flash_partitions), -+}; -+ -+static struct gpio_led fritz4020_leds_gpio[] __initdata = { -+ { -+ .name = "fritz4020:green:lan", -+ .gpio = FRITZ4020_74HC_GPIO_LED_LAN, -+ .active_low = 1, -+ }, { -+ .name = "fritz4020:green:info", -+ .gpio = FRITZ4020_74HC_GPIO_LED_INFO, -+ .active_low = 1, -+ }, { -+ .name = "fritz4020:red:info", -+ .gpio = FRITZ4020_74HC_GPIO_LED_INFO_RED, -+ .active_low = 1, -+ }, { -+ .name = "fritz4020:green:power", -+ .gpio = FRITZ4020_74HC_GPIO_LED_POWER, -+ .active_low = 1, -+ }, { -+ .name = "fritz4020:green:wlan", -+ .gpio = FRITZ4020_74HC_GPIO_LED_WLAN, -+ .active_low = 1, -+ }, { -+ .name = "fritz4020:green:wan", -+ .gpio = FRITZ4020_74HC_GPIO_LED_WAN, -+ .active_low = 1, -+ }, -+}; -+ -+static struct gpio_keys_button fritz4020_gpio_keys[] __initdata = { -+ { -+ .desc = "RFKILL button", -+ .type = EV_KEY, -+ .code = KEY_RFKILL, -+ .debounce_interval = FRITZ4020_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = FRITZ4020_GPIO_BTN_WLAN, -+ .active_low = 0, -+ }, -+ { -+ .desc = "WPS button", -+ .type = EV_KEY, -+ .code = KEY_WPS_BUTTON, -+ .debounce_interval = FRITZ4020_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = FRITZ4020_GPIO_BTN_WPS, -+ .active_low = 0, -+ }, -+}; -+ -+static void __init fritz4020_setup(void) { -+ u8 *urlader = (u8 *) KSEG1ADDR(0x1f000000); -+ u8 wifi_mac[ETH_ALEN]; -+ -+ ath79_register_m25p80(&fritz4020_flash_data); -+ -+ /* Initialize ethernet */ -+ ath79_extract_mac_reverse(urlader + FRTIZ4020_OFFSET_URLADER_WIFI_MAC_REVERSE, wifi_mac); -+ ath79_setup_qca956x_eth_cfg(QCA956X_ETH_CFG_SW_PHY_SWAP | -+ QCA956X_ETH_CFG_SW_PHY_ADDR_SWAP); -+ -+ ath79_register_mdio(0, 0x0); -+ ath79_register_mdio(1, 0x0); -+ ath79_init_mac(ath79_eth0_data.mac_addr, wifi_mac, -1); -+ ath79_init_mac(ath79_eth1_data.mac_addr, wifi_mac, -2); -+ -+ /* WAN port */ -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -+ ath79_eth0_data.speed = SPEED_100; -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_mask = BIT(0); -+ ath79_register_eth(0); -+ -+ /* LAN ports */ -+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -+ ath79_eth1_data.speed = SPEED_1000; -+ ath79_eth1_data.duplex = DUPLEX_FULL; -+ ath79_switch_data.phy_poll_mask |= BIT(0); -+ ath79_switch_data.phy4_mii_en = 1; -+ ath79_register_eth(1); -+ -+ /* Initialize 2.4GHz WiFi */ -+ ath79_register_wmac_simple(); -+ -+ /* Activate USB Power */ -+ gpio_request_one(FRITZ4020_74HC_GPIO_USB_RST, -+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, -+ "USB power"); -+ -+ /* Initialize USB port */ -+ ath79_register_usb(); -+ -+ /* Register LED shift-register */ -+ spi_register_board_info(fritz4020_spi_info, -+ ARRAY_SIZE(fritz4020_spi_info)); -+ platform_device_register(&fritz4020_spi_device); -+ -+ /* Register GPIO buttons */ -+ ath79_register_gpio_keys_polled(-1, FRITZ4020_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(fritz4020_gpio_keys), -+ fritz4020_gpio_keys); -+ -+ /* Register LEDs */ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(fritz4020_leds_gpio), -+ fritz4020_leds_gpio); -+} -+ -+MIPS_MACHINE(ATH79_MACH_FRITZ4020, "FRITZ4020", -+ "AVM FRITZ!Box 4020", fritz4020_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index 72c1e38c74707aba8fbd3aebc36f35becabd4987..07f1877180e27ff189387c5f34a61702d0fa9bd2 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -102,6 +102,7 @@ enum ath79_mach_type { - ATH79_MACH_EW_DORIN, /* embedded wireless Dorin Platform */ - ATH79_MACH_EW_DORIN_ROUTER, /* embedded wireless Dorin Router Platform */ - ATH79_MACH_F9K1115V2, /* Belkin AC1750DB */ -+ ATH79_MACH_FRITZ4020, /* AVM FRITZ!Box 4020 */ - ATH79_MACH_GL_AR150, /* GL-AR150 support */ - ATH79_MACH_GL_AR300, /* GL-AR300 */ - ATH79_MACH_GL_AR300M, /* GL-AR300M */ -diff --git a/target/linux/ar71xx/image/generic.mk b/target/linux/ar71xx/image/generic.mk -index e11a8992f9c2f950079fddf121eb30c34926e33d..d113c5ad621bb2f15d4cbc4fd50e60904313a7da 100644 ---- a/target/linux/ar71xx/image/generic.mk -+++ b/target/linux/ar71xx/image/generic.mk -@@ -738,3 +738,22 @@ define Device/bhr-4grv2 - IMAGE/factory.bin = append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs | pad-rootfs | mkbuffaloimg - endef - TARGET_DEVICES += bhr-4grv2 -+ -+define Device/AVM -+ DEVICE_PACKAGES := fritz-tffs -uboot-envtools -+ KERNEL := kernel-bin | patch-cmdline | lzma | eva-image -+ KERNEL_INITRAMFS := $$(KERNEL) -+ IMAGE/sysupgrade.bin := append-kernel | pad-to 64k | \ -+ append-squashfs-fakeroot-be | pad-to 256 | \ -+ append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE) -+endef -+ -+define Device/fritz4020 -+ $(call Device/AVM) -+ DEVICE_TITLE := AVM FRITZ!Box 4020 -+ DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-storage -+ BOARDNAME := FRITZ4020 -+ SUPPORTED_DEVICES := fritz4020 -+ IMAGE_SIZE := 15232k -+endef -+TARGET_DEVICES += fritz4020 -diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default -index 23e862762600f0724a37fe1a390d4d09639c472c..e0401102229c00985e8000331dce43375903e1aa 100644 ---- a/target/linux/ar71xx/mikrotik/config-default -+++ b/target/linux/ar71xx/mikrotik/config-default -@@ -71,6 +71,7 @@ - # CONFIG_ATH79_MACH_ESR900 is not set - # CONFIG_ATH79_MACH_EW_DORIN is not set - # CONFIG_ATH79_MACH_F9K1115V2 is not set -+# CONFIG_ATH79_MACH_FRITZ4020 is not set - # CONFIG_ATH79_MACH_GL_AR150 is not set - # CONFIG_ATH79_MACH_GL_AR300 is not set - # CONFIG_ATH79_MACH_GL_AR300M is not set -@@ -217,6 +218,7 @@ CONFIG_MTD_NAND_ECC=y - CONFIG_MTD_NAND_RB4XX=y - CONFIG_MTD_NAND_RB750=y - CONFIG_MTD_NAND_RB91X=y -+# CONFIG_MTD_SPLIT_EVA_FW is not set - # CONFIG_MTD_REDBOOT_PARTS is not set - # CONFIG_MTD_TPLINK_PARTS is not set - CONFIG_MTD_UBI=y -diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default -index c11ccfe29795d013776870cf21fb6ca8d907af1b..790fa8f9bd42aba8521b960c2a49a742285e6157 100644 ---- a/target/linux/ar71xx/nand/config-default -+++ b/target/linux/ar71xx/nand/config-default -@@ -29,6 +29,7 @@ - # CONFIG_ATH79_MACH_DIR_869_A1 is not set - # CONFIG_ATH79_MACH_EAP7660D is not set - # CONFIG_ATH79_MACH_EW_DORIN is not set -+# CONFIG_ATH79_MACH_FRITZ4020 is not set - # CONFIG_ATH79_MACH_HORNET_UB is not set - # CONFIG_ATH79_MACH_JA76PF is not set - # CONFIG_ATH79_MACH_JWAP003 is not set -@@ -104,6 +105,7 @@ CONFIG_MTD_NAND_ECC=y - CONFIG_MTD_NAND_ECC_BCH=y - # CONFIG_MTD_REDBOOT_PARTS is not set - # CONFIG_MTD_SM_COMMON is not set -+# CONFIG_MTD_SPLIT_EVA_FW is not set - # CONFIG_MTD_SPLIT_SEAMA_FW is not set - # CONFIG_MTD_TPLINK_PARTS is not set - CONFIG_MTD_UBI=y diff --git a/patches/lede/0085-ar71xx-add-support-for-TP-Link-TL-WR940N-v6.patch b/patches/lede/0085-ar71xx-add-support-for-TP-Link-TL-WR940N-v6.patch deleted file mode 100644 index 4cbe2d82..00000000 --- a/patches/lede/0085-ar71xx-add-support-for-TP-Link-TL-WR940N-v6.patch +++ /dev/null @@ -1,233 +0,0 @@ -From: Robert Marko -Date: Wed, 21 Feb 2018 13:15:17 +0100 -Subject: ar71xx: add support for TP-Link TL-WR940N v6 - -Add support for TL-WR940N v6 board. It is pretty much the same as v5 -except they only left WAN LED and removed other ones. - -Installation: flash factory image through WEB UI or use TFTP. - -Signed-off-by: Robert Marko - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index e8b13af7c24dea86519c962fa6381fd75971e8b9..62d7f014be28782b9961551f2377a66ccadfb329 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -676,6 +676,9 @@ tl-wr941nd-v6) - ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02" - ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt" - ;; -+tl-wr940n-v6) -+ ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0" -+ ;; - tl-wr841n-v9|\ - tl-wr841n-v11|\ - tl-wr842n-v3) -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 1018ab4449f896d565b57ecbdc73b7e3d7fbe486..ae82cfe008169a8282ac51746cf2299eec8c81d8 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -298,6 +298,7 @@ ar71xx_setup_interfaces() - tl-wdr6500-v2|\ - tl-wr841n-v8|\ - tl-wr940n-v4|\ -+ tl-wr940n-v6|\ - tl-wr941nd-v5|\ - tl-wr941nd-v6|\ - wnr1000-v2|\ -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 382500b75ee6dc1fe1126fb3121f4ae205c901d4..4d792e773c8efe0cb2e5e328d777db853cdd846b 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -397,6 +397,9 @@ get_status_led() { - tl-wr941nd-v6) - status_led="tp-link:blue:system" - ;; -+ tl-wr940n-v6) -+ status_led="tp-link:orange:diag" -+ ;; - tl-wr841n-v9) - status_led="tp-link:green:qss" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index a815ffe07322c20cddaa3c4f97e3bf62a3cf15ec..21b1c44404d383ef99860caf95a8e19b9cbf5087 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -1082,6 +1082,9 @@ ar71xx_board_detect() { - *TL-WR941ND) - name="tl-wr941nd" - ;; -+ *"TL-WR940N v6") -+ name="tl-wr940n-v6" -+ ;; - *"TL-WR941N/ND v5") - name="tl-wr941nd-v5" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index 491b5d5a98b44844f14441d4024f2ad9667186e0..03677ad1240c9a5af341354b95561f9d493a9cd8 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -443,6 +443,7 @@ platform_check_image() { - tl-wr941nd-v5|\ - tl-wr941nd-v6|\ - tl-wr940n-v4|\ -+ tl-wr940n-v6|\ - tl-wr941nd) - local magic_ver="0100" - -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c -index d693b947c843d2a74cd252503fa8bf68b20da4ab..b530622d9f00b8ce3b906ad5fe62de019d82763a 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c -@@ -1,5 +1,5 @@ - /* -- * TP-LINK TL-WR940N v4 board support -+ * TP-LINK TL-WR940N v4 and v6 board support - * - * Copyright (C) 2016 David Lutz - * -@@ -32,12 +32,15 @@ - #define TL_WR940N_V4_GPIO_LED_LAN1 8 - #define TL_WR940N_V4_GPIO_LED_WLAN 7 - #define TL_WR940N_V4_GPIO_LED_SYSTEM 5 -+/* WR940N v6 specific GPIO*/ -+#define TL_WR940N_V6_GPIO_LED_DIAG_ORANGE 15 -+#define TL_WR940N_V6_GPIO_LED_WAN_BLUE 14 - - #define TL_WR940N_V4_GPIO_BTN_RESET 1 - #define TL_WR940N_V4_GPIO_BTN_RFKILL 2 - --#define TL_WR940N_V4_KEYS_POLL_INTERVAL 20 --#define TL_WR940N_V4_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR940N_V4_KEYS_POLL_INTERVAL) -+#define TL_WR940N_KEYS_POLL_INTERVAL 20 -+#define TL_WR940N_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR940N_KEYS_POLL_INTERVAL) - - - static struct gpio_led tl_wr940n_v4_leds_gpio[] __initdata = { -@@ -93,43 +96,49 @@ static struct gpio_keys_button tl_wr940n_v4_gpio_keys[] __initdata = { - .desc = "Reset button", - .type = EV_KEY, - .code = KEY_RESTART, -- .debounce_interval = TL_WR940N_V4_KEYS_DEBOUNCE_INTERVAL, -+ .debounce_interval = TL_WR940N_KEYS_DEBOUNCE_INTERVAL, - .gpio = TL_WR940N_V4_GPIO_BTN_RESET, - .active_low = 1, - }, { - .desc = "RFKILL button", - .type = EV_KEY, - .code = KEY_RFKILL, -- .debounce_interval = TL_WR940N_V4_KEYS_DEBOUNCE_INTERVAL, -+ .debounce_interval = TL_WR940N_KEYS_DEBOUNCE_INTERVAL, - .gpio = TL_WR940N_V4_GPIO_BTN_RFKILL, - .active_low = 1, - } - }; - -+static struct gpio_led tl_wr940n_v6_leds_gpio[] __initdata = { -+ { -+ .name = "tp-link:blue:wan", -+ .gpio = TL_WR940N_V6_GPIO_LED_WAN_BLUE, -+ .active_low = 1, -+ }, -+ { -+ .name = "tp-link:orange:diag", -+ .gpio = TL_WR940N_V6_GPIO_LED_DIAG_ORANGE, -+ .active_low = 0, -+ }, -+}; -+ - --static const char *tl_wr940n_v4_part_probes[] = { -+static const char *tl_wr940n_part_probes[] = { - "tp-link", - NULL, - }; - --static struct flash_platform_data tl_wr940n_v4_flash_data = { -- .part_probes = tl_wr940n_v4_part_probes, -+static struct flash_platform_data tl_wr940n_flash_data = { -+ .part_probes = tl_wr940n_part_probes, - }; - - --static void __init tl_wr940n_v4_setup(void) -+static void __init tl_wr940n_setup(void) - { - u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); - u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); - -- ath79_register_m25p80(&tl_wr940n_v4_flash_data); -- -- ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr940n_v4_leds_gpio), -- tl_wr940n_v4_leds_gpio); -- -- ath79_register_gpio_keys_polled(-1, TL_WR940N_V4_KEYS_POLL_INTERVAL, -- ARRAY_SIZE(tl_wr940n_v4_gpio_keys), -- tl_wr940n_v4_gpio_keys); -+ ath79_register_m25p80(&tl_wr940n_flash_data); - - ath79_register_mdio(0, 0x0); - -@@ -145,5 +154,31 @@ static void __init tl_wr940n_v4_setup(void) - - } - -+static void __init tl_wr940n_v4_setup(void) -+{ -+ tl_wr940n_setup(); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr940n_v4_leds_gpio), -+ tl_wr940n_v4_leds_gpio); -+ -+ ath79_register_gpio_keys_polled(-1, TL_WR940N_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(tl_wr940n_v4_gpio_keys), -+ tl_wr940n_v4_gpio_keys); -+} -+ -+static void __init tl_wr940n_v6_setup(void) -+{ -+ tl_wr940n_setup(); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr940n_v6_leds_gpio), -+ tl_wr940n_v6_leds_gpio); -+ -+ ath79_register_gpio_keys_polled(-1, TL_WR940N_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(tl_wr940n_v4_gpio_keys), -+ tl_wr940n_v4_gpio_keys); -+} -+ - MIPS_MACHINE(ATH79_MACH_TL_WR940N_V4, "TL-WR940N-v4", "TP-LINK TL-WR940N v4", - tl_wr940n_v4_setup); -+MIPS_MACHINE(ATH79_MACH_TL_WR940N_V6, "TL-WR940N-v6", "TP-LINK TL-WR940N v6", -+ tl_wr940n_v6_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index 07f1877180e27ff189387c5f34a61702d0fa9bd2..89ddbbc976c9393608a80b9ce56e02a4d403ea2a 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -242,6 +242,7 @@ enum ath79_mach_type { - ATH79_MACH_TL_WR941ND_V5, /* TP-LINK TL-WR941ND v5 */ - ATH79_MACH_TL_WR941ND_V6, /* TP-LINK TL-WR941ND v6 */ - ATH79_MACH_TL_WR940N_V4, /* TP-LINK TL-WR940N v4 */ -+ ATH79_MACH_TL_WR940N_V6, /* TP-LINK TL-WR940N v6 */ - ATH79_MACH_TUBE2H, /* Alfa Network Tube2H */ - ATH79_MACH_UBNT_AIRGW, /* Ubiquiti AirGateway */ - ATH79_MACH_UBNT_AIRGWP, /* Ubiquiti AirGateway Pro */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 60dfe0e3edafcadad4ddc08be7645b49f269907c..1e40d943ac2aa43aea670fd86268708aea39a46c 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -857,6 +857,14 @@ define Device/tl-wr940n-v4 - IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU - endef - -+define Device/tl-wr940n-v6 -+ $(Device/tl-wr940n-v4) -+ DEVICE_TITLE := TP-LINK TL-WR940N v6 -+ BOARDNAME := TL-WR940N-v6 -+ TPLINK_HWID := 0x09400006 -+endef -+TARGET_DEVICES += tl-wr940n-v6 -+ - # Chinese version (unlike European) is similar to the TL-WDR3500 - define Device/tl-wr941nd-v6-cn - $(Device/tplink-4mlzma) diff --git a/patches/lede/0086-ar71xx-set-status-led-for-the-gl-boards.patch b/patches/lede/0086-ar71xx-set-status-led-for-the-gl-boards.patch deleted file mode 100644 index 3dd8739b..00000000 --- a/patches/lede/0086-ar71xx-set-status-led-for-the-gl-boards.patch +++ /dev/null @@ -1,348 +0,0 @@ -From: Wojciech Jowsa -Date: Wed, 15 Feb 2017 12:38:07 +0100 -Subject: ar71xx: set status led for the gl-* boards - -Signed-off-by: Wojciech Jowsa - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index 62d7f014be28782b9961551f2377a66ccadfb329..f4d83cee519406a188cc9dde355f509dd644625a 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -311,19 +311,18 @@ fritz4020) - ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" - ;; --gl-ar150|\ --gl-ar300|\ --gl-ar300m|\ -+gl-ar300m) -+ ucidef_set_led_wlan "wlan" "WLAN" "$board:red:wlan" "phy0tpt" -+ ;; - gl-mifi) -+ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" -+ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" -+ ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth1" -+ ucidef_set_led_netdev "3gnet" "3GNET" "$board:green:net" "3g-wan" -+ ;; -+gl-ar150|\ -+gl-ar300) - ucidef_set_led_wlan "wlan" "WLAN" "$board:wlan" "phy0tpt" -- -- case "$board" in -- gl-mifi) -- ucidef_set_led_netdev "wan" "WAN" "$board:wan" "eth0" -- ucidef_set_led_netdev "lan" "LAN" "$board:lan" "eth1" -- ucidef_set_led_netdev "3gnet" "3GNET" "$board:net" "3g-wan" -- ;; -- esac - ;; - gl-domino|\ - wrt160nl) -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 4d792e773c8efe0cb2e5e328d777db853cdd846b..336d078f72a06073e3465c36ca98035c7d70282f 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -64,7 +64,9 @@ get_status_led() { - ap90q|\ - cpe830|\ - cpe870|\ -- gl-inet) -+ gl-inet|\ -+ gl-mifi|\ -+ gl-ar300m) - status_led="$board:green:lan" - ;; - ap96) -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar300m.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar300m.c -index 62906a1922f890eb36ad212e9542dc52dc56006c..ca44b364c51559350fedc5551a023b2772bb69a1 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar300m.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar300m.c -@@ -6,9 +6,9 @@ - * Copyright (C) 2013 alzhao - * Copyright (C) 2014 Michel Stempin - * -- * This program is free software; you can redistribute it and/or modify it -- * under the terms of the GNU General Public License version 2 as published -- * by the Free Software Foundation. -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. - */ - - #include -@@ -37,130 +37,130 @@ - #define GL_AR300M_GPIO_BTN_LEFT 0 - #define GL_AR300M_GPIO_BTN_RIGHT 1 - --#define GL_AR300M_KEYS_POLL_INTERVAL 20 /* msecs */ --#define GL_AR300M_KEYS_DEBOUNCE_INTERVAL (3 * GL_AR300M_KEYS_POLL_INTERVAL) -+#define GL_AR300M_KEYS_POLL_INTERVAL 20 /* msecs */ -+#define GL_AR300M_KEYS_DEBOUNCE_INTERVAL (3 * GL_AR300M_KEYS_POLL_INTERVAL) - --#define GL_AR300M_MAC0_OFFSET 0 --#define GL_AR300M_MAC1_OFFSET 6 --#define GL_AR300M_WMAC_CALDATA_OFFSET 0x1000 --#define GL_AR300M_PCIE_CALDATA_OFFSET 0x5000 -+#define GL_AR300M_MAC0_OFFSET 0 -+#define GL_AR300M_MAC1_OFFSET 6 -+#define GL_AR300M_WMAC_CALDATA_OFFSET 0x1000 -+#define GL_AR300M_PCIE_CALDATA_OFFSET 0x5000 - - static struct gpio_led gl_ar300m_leds_gpio[] __initdata = { -- { -- .name = "gl-ar300m:usb", -- .gpio = GL_AR300M_GPIO_LED_USB, -- .active_low = 0, -- .default_state = 1, -- }, -- { -- .name = "gl-ar300m:wlan", -- .gpio = GL_AR300M_GPIO_LED_WLAN, -- .active_low = 1, -- }, -- { -- .name = "gl-ar300m:lan", -- .gpio = GL_AR300M_GPIO_LED_LAN, -- .active_low = 1, -- }, -- { -- .name = "gl-ar300m:system", -- .gpio = GL_AR300M_GPIO_LED_SYSTEM, -- .active_low = 1, -- .default_state = 1, -- }, -+ { -+ .name = "gl-ar300m:green:usb", -+ .gpio = GL_AR300M_GPIO_LED_USB, -+ .active_low = 0, -+ .default_state = 1, -+ }, -+ { -+ .name = "gl-ar300m:green:wlan", -+ .gpio = GL_AR300M_GPIO_LED_WLAN, -+ .active_low = 1, -+ }, -+ { -+ .name = "gl-ar300m::green:lan", -+ .gpio = GL_AR300M_GPIO_LED_LAN, -+ .active_low = 1, -+ }, -+ { -+ .name = "gl-ar300m:green:system", -+ .gpio = GL_AR300M_GPIO_LED_SYSTEM, -+ .active_low = 1, -+ .default_state = 1, -+ }, - }; - - static struct gpio_keys_button gl_ar300m_gpio_keys[] __initdata = { -- { -- .desc = "reset", -- .type = EV_KEY, -- .code = KEY_RESTART, -- .debounce_interval = GL_AR300M_KEYS_DEBOUNCE_INTERVAL, -- .gpio = GL_AR300M_GPIO_BTN_RESET, -- .active_low = 1, -- }, -- { -- .desc = "button right", -- .type = EV_KEY, -- .code = BTN_0, -- .debounce_interval = GL_AR300M_KEYS_DEBOUNCE_INTERVAL, -- .gpio = GL_AR300M_GPIO_BTN_LEFT, -- .active_low = 0, -- }, -- { -- .desc = "button left", -- .type = EV_KEY, -- .code = BTN_1, -- .debounce_interval = GL_AR300M_KEYS_DEBOUNCE_INTERVAL, -- .gpio = GL_AR300M_GPIO_BTN_RIGHT, -- .active_low = 0, -- }, -+ { -+ .desc = "reset", -+ .type = EV_KEY, -+ .code = KEY_RESTART, -+ .debounce_interval = GL_AR300M_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = GL_AR300M_GPIO_BTN_RESET, -+ .active_low = 1, -+ }, -+ { -+ .desc = "button right", -+ .type = EV_KEY, -+ .code = BTN_0, -+ .debounce_interval = GL_AR300M_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = GL_AR300M_GPIO_BTN_LEFT, -+ .active_low = 0, -+ }, -+ { -+ .desc = "button left", -+ .type = EV_KEY, -+ .code = BTN_1, -+ .debounce_interval = GL_AR300M_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = GL_AR300M_GPIO_BTN_RIGHT, -+ .active_low = 0, -+ }, - }; - - static struct spi_board_info gl_ar300m_spi_info[] = { -- { -- .bus_num = 0, -- .chip_select = 0, -- .max_speed_hz = 25000000, -- .modalias = "m25p80", -- .platform_data = NULL, -- }, -- { -- .bus_num = 0, -- .chip_select = 1, -- .max_speed_hz = 25000000, -- .modalias = "ath79-spinand", -- .platform_data = NULL, -- } -+ { -+ .bus_num = 0, -+ .chip_select = 0, -+ .max_speed_hz = 25000000, -+ .modalias = "m25p80", -+ .platform_data = NULL, -+ }, -+ { -+ .bus_num = 0, -+ .chip_select = 1, -+ .max_speed_hz = 25000000, -+ .modalias = "ath79-spinand", -+ .platform_data = NULL, -+ } - }; - - static struct ath79_spi_platform_data gl_ar300m_spi_data = { -- .bus_num = 0, -- .num_chipselect = 2, -+ .bus_num = 0, -+ .num_chipselect = 2, - }; - - static void __init gl_ar300m_setup(void) - { -- u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); -- u8 tmpmac[ETH_ALEN]; -- -- ath79_gpio_function_enable(AR934X_GPIO_FUNC_JTAG_DISABLE); -- ath79_register_spi(&gl_ar300m_spi_data, gl_ar300m_spi_info, 2); -- -- /* register gpio LEDs and keys */ -- ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_ar300m_leds_gpio), -- gl_ar300m_leds_gpio); -- ath79_register_gpio_keys_polled(-1, GL_AR300M_KEYS_POLL_INTERVAL, -- ARRAY_SIZE(gl_ar300m_gpio_keys), -- gl_ar300m_gpio_keys); -- -- ath79_register_mdio(0, 0x0); -- -- /* WAN */ -- ath79_init_mac(ath79_eth0_data.mac_addr, art + GL_AR300M_MAC0_OFFSET, 0); -- ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -- ath79_eth0_data.speed = SPEED_100; -- ath79_eth0_data.duplex = DUPLEX_FULL; -- ath79_eth0_data.phy_mask = BIT(4); -- ath79_register_eth(0); -- -- /* LAN */ -- ath79_init_mac(ath79_eth1_data.mac_addr, art + GL_AR300M_MAC1_OFFSET, 0); -- ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -- ath79_eth1_data.speed = SPEED_1000; -- ath79_eth1_data.duplex = DUPLEX_FULL; -- ath79_switch_data.phy_poll_mask |= BIT(4); -- ath79_switch_data.phy4_mii_en = 1; -- ath79_register_eth(1); -- -- ath79_init_mac(tmpmac, art + GL_AR300M_WMAC_CALDATA_OFFSET + 2, 0); -- ath79_register_wmac(art + GL_AR300M_WMAC_CALDATA_OFFSET, tmpmac); -- -- /* enable usb */ -- ath79_register_usb(); -- /* enable pci */ -- ath79_register_pci(); -+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); -+ u8 tmpmac[ETH_ALEN]; -+ -+ ath79_gpio_function_enable(AR934X_GPIO_FUNC_JTAG_DISABLE); -+ ath79_register_spi(&gl_ar300m_spi_data, gl_ar300m_spi_info, 2); -+ -+ /* register gpio LEDs and keys */ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_ar300m_leds_gpio), -+ gl_ar300m_leds_gpio); -+ ath79_register_gpio_keys_polled(-1, GL_AR300M_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(gl_ar300m_gpio_keys), -+ gl_ar300m_gpio_keys); -+ -+ ath79_register_mdio(0, 0x0); -+ -+ /* WAN */ -+ ath79_init_mac(ath79_eth0_data.mac_addr, art + GL_AR300M_MAC0_OFFSET, 0); -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -+ ath79_eth0_data.speed = SPEED_100; -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_mask = BIT(4); -+ ath79_register_eth(0); -+ -+ /* LAN */ -+ ath79_init_mac(ath79_eth1_data.mac_addr, art + GL_AR300M_MAC1_OFFSET, 0); -+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -+ ath79_eth1_data.speed = SPEED_1000; -+ ath79_eth1_data.duplex = DUPLEX_FULL; -+ ath79_switch_data.phy_poll_mask |= BIT(4); -+ ath79_switch_data.phy4_mii_en = 1; -+ ath79_register_eth(1); -+ -+ ath79_init_mac(tmpmac, art + GL_AR300M_WMAC_CALDATA_OFFSET + 2, 0); -+ ath79_register_wmac(art + GL_AR300M_WMAC_CALDATA_OFFSET, tmpmac); -+ -+ /* enable usb */ -+ ath79_register_usb(); -+ /* enable pci */ -+ ath79_register_pci(); - } - - MIPS_MACHINE(ATH79_MACH_GL_AR300M, "GL-AR300M", "GL-AR300M", -- gl_ar300m_setup); -+ gl_ar300m_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-mifi.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-mifi.c -index 42f4415d7fe0252aadf39e2ca50f96566c023728..412c562fa042e7abb0ccb35208bb55821efc8660 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-mifi.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-mifi.c -@@ -41,27 +41,27 @@ - - static struct gpio_led gl_mifi_leds_gpio[] __initdata = { - { -- .name = "gl-mifi:wan", -+ .name = "gl-mifi:greeen:wan", - .gpio = GL_MIFI_GPIO_LED_WAN, - .active_low = 0, - }, - { -- .name = "gl-mifi:lan", -+ .name = "gl-mifi:green:lan", - .gpio = GL_MIFI_GPIO_LED_LAN, - .active_low = 0, - }, - { -- .name = "gl-mifi:wlan", -+ .name = "gl-mifi:green:wlan", - .gpio = GL_MIFI_GPIO_LED_WLAN, - .active_low = 0, - }, - { -- .name = "gl-mifi:net", -+ .name = "gl-mifi:green:net", - .gpio = GL_MIFI_GPIO_LED_NET, - .active_low = 0, - }, - { -- .name = "gl-mifi:3gcontrol", -+ .name = "gl-mifi:green:3gcontrol", - .gpio = GL_MIFI_GPIO_LED_3GCONTROL, - .active_low = 0, - } diff --git a/patches/lede/0087-ar71xx-add-support-for-GL.iNet-GL-AR750.patch b/patches/lede/0087-ar71xx-add-support-for-GL.iNet-GL-AR750.patch deleted file mode 100644 index 01830ca1..00000000 --- a/patches/lede/0087-ar71xx-add-support-for-GL.iNet-GL-AR750.patch +++ /dev/null @@ -1,364 +0,0 @@ -From: Piotr Dymacz -Date: Tue, 17 Oct 2017 23:30:01 +0200 -Subject: ar71xx: add support for GL.iNet GL-AR750 - -GL.iNet GL-AR750 is a small size, dual-band (AC750) router, based on -Qualcomm/Atheros QCA9531 v2 + QCA9887. FCC ID: 2AFIW-AR750. - -Specification: - -- 650/597/216 MHz (CPU/DDR/AHB) -- 128 MB of RAM (DDR2) -- 16 MB of FLASH (SPI NOR) -- 3x 10/100 Mbps Ethernet -- 2T2R 2.4 GHz (QCA9531) -- 1T1R 5 GHz (QCA9887) -- 1x USB 2.0 (power controlled by GPIO) -- 1x microSD (GL857L) -- 3x LED (all driven by GPIO) -- 1x button (reset) -- 1x 2-pos switch -- header for optional PoE module -- 1x micro USB for main power input -- UART + I2C header on PCB - -Flash instruction: - -Vendor firmware is based on OpenWrt/LEDE. GUI or sysupgrade can be used -to flash OpenWrt/LEDE firmware. - -Signed-off-by: Piotr Dymacz - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index f4d83cee519406a188cc9dde355f509dd644625a..f94cc3c85b798458cc97c06bb0d44bdc426d057d 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -314,6 +314,10 @@ fritz4020) - gl-ar300m) - ucidef_set_led_wlan "wlan" "WLAN" "$board:red:wlan" "phy0tpt" - ;; -+gl-ar750) -+ ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:white:wlan2g" "phy1tpt" -+ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:white:wlan5g" "phy0tpt" -+ ;; - gl-mifi) - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" - ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index ae82cfe008169a8282ac51746cf2299eec8c81d8..c8990c60f504286d0fd28c7b17f54c9c3b5a891e 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -369,6 +369,7 @@ ar71xx_setup_interfaces() - onion-omega) - ucidef_set_interface_lan "wlan0" - ;; -+ gl-ar750|\ - rb-435g) - ucidef_set_interfaces_lan_wan "eth1" "eth0" - ucidef_add_switch "switch0" \ -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 336d078f72a06073e3465c36ca98035c7d70282f..01d3b787bedcab82a5797c9a4801e8139887cc2c 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -249,6 +249,7 @@ get_status_led() { - nbg460n_550n_550nh) - status_led="nbg460n:green:power" - ;; -+ gl-ar750|\ - nbg6716) - status_led="$board:white:power" - ;; -@@ -489,7 +490,8 @@ set_state() { - done) - status_led_on - case $(ar71xx_board_name) in -- gl-ar300m) -+ gl-ar300m|\ -+ gl-ar750) - fw_printenv lc >/dev/null 2>&1 && fw_setenv "bootcount" 0 - ;; - qihoo-c301) -diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -index 91bdf0d3c591516f58030b165052b3dd2751314f..1626622a8e46484bbf2719f19843e61d9cc92506 100644 ---- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata -@@ -103,6 +103,7 @@ case "$FIRMWARE" in - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) - ;; -+ gl-ar750|\ - tl-wpa8630) - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index 21b1c44404d383ef99860caf95a8e19b9cbf5087..35b742a5f1fee0bc24ab2d88e32f118c1df4e2b3 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -650,6 +650,9 @@ ar71xx_board_detect() { - *"GL-AR300M") - name="gl-ar300m" - ;; -+ *"GL-AR750") -+ name="gl-ar750" -+ ;; - *"GL-MIFI") - name="gl-mifi" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx -index d677599d8c6380d9920e95abc9fb4b92cc0cec29..ba6e08b00d979bc73f7199756e22ca3941fad97d 100644 ---- a/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx -+++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx -@@ -17,6 +17,7 @@ set_preinit_iface() { - archer-c7 |\ - bhr-4grv2 |\ - dir-505-a1 |\ -+ gl-ar750|\ - gl-inet |\ - jwap003 |\ - pb42 |\ -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index 03677ad1240c9a5af341354b95561f9d493a9cd8..236520b27c4d6d0b1b7e483d1100fb5ab156d475 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -253,6 +253,7 @@ platform_check_image() { - gl-ar150|\ - gl-ar300m|\ - gl-ar300|\ -+ gl-ar750|\ - gl-domino|\ - gl-mifi|\ - hiwifi-hc6361|\ -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index 45bf500643837a7270b45e32b22225c06c5fb841..d96642b97c36187febb1f3843e7dd9acfab0e40d 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -110,6 +110,7 @@ CONFIG_ATH79_MACH_FRITZ4020=y - CONFIG_ATH79_MACH_GL_AR150=y - CONFIG_ATH79_MACH_GL_AR300=y - CONFIG_ATH79_MACH_GL_AR300M=y -+CONFIG_ATH79_MACH_GL_AR750=y - CONFIG_ATH79_MACH_GL_DOMINO=y - CONFIG_ATH79_MACH_GL_INET=y - CONFIG_ATH79_MACH_GL_MIFI=y -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index 46366e0d922808e5e14fed0f2b5409cda11afd26..2449a8d6bce17f0a703d8fc4f82dd38e1f861ae3 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -691,6 +691,17 @@ config ATH79_MACH_GL_AR300M - select ATH79_DEV_USB - select ATH79_DEV_WMAC - -+config ATH79_MACH_GL_AR750 -+ bool "GL.iNet GL-AR750 support" -+ select SOC_QCA953X -+ select ATH79_DEV_AP9X_PCI if PCI -+ select ATH79_DEV_ETH -+ select ATH79_DEV_GPIO_BUTTONS -+ select ATH79_DEV_LEDS_GPIO -+ select ATH79_DEV_M25P80 -+ select ATH79_DEV_USB -+ select ATH79_DEV_WMAC -+ - config ATH79_MACH_GL_DOMINO - bool "DOMINO support" - select SOC_AR933X -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -index 29c9c65bc122c0d02839adf1abb61dcda0795fb6..98281db31a05713168713f3e0fd62f736a2e7614 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile -@@ -115,6 +115,7 @@ obj-$(CONFIG_ATH79_MACH_FRITZ4020) += mach-fritz4020.o - obj-$(CONFIG_ATH79_MACH_GL_AR150) += mach-gl-ar150.o - obj-$(CONFIG_ATH79_MACH_GL_AR300) += mach-gl-ar300.o - obj-$(CONFIG_ATH79_MACH_GL_AR300M) += mach-gl-ar300m.o -+obj-$(CONFIG_ATH79_MACH_GL_AR750) += mach-gl-ar750.o - obj-$(CONFIG_ATH79_MACH_GL_DOMINO) += mach-gl-domino.o - obj-$(CONFIG_ATH79_MACH_GL_INET) += mach-gl-inet.o - obj-$(CONFIG_ATH79_MACH_GL_MIFI) += mach-gl-mifi.o -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750.c -new file mode 100644 -index 0000000000000000000000000000000000000000..9ee6e29c02139b972a83a555fcd693765bf8194f ---- /dev/null -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-gl-ar750.c -@@ -0,0 +1,146 @@ -+/* -+ * GL.iNet GL-AR750 board support -+ * -+ * Copyright (C) 2018 Piotr Dymacz -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include "common.h" -+#include "dev-ap9x-pci.h" -+#include "dev-eth.h" -+#include "dev-gpio-buttons.h" -+#include "dev-leds-gpio.h" -+#include "dev-m25p80.h" -+#include "dev-usb.h" -+#include "dev-wmac.h" -+#include "machtypes.h" -+ -+#define GL_AR750_GPIO_LED_POWER 12 -+#define GL_AR750_GPIO_LED_WLAN2G 14 -+#define GL_AR750_GPIO_LED_WLAN5G 13 -+ -+#define GL_AR750_GPIO_BTN_RESET 3 -+#define GL_AR750_GPIO_BTN_SW1 0 -+ -+#define GL_AR750_GPIO_I2C_SCL 16 -+#define GL_AR750_GPIO_I2C_SDA 17 -+ -+#define GL_AR750_GPIO_USB_POWER 2 -+ -+#define GL_AR750_KEYS_POLL_INTERVAL 20 -+#define GL_AR750_KEYS_DEBOUNCE_INTERVAL (3 * GL_AR750_KEYS_POLL_INTERVAL) -+ -+#define GL_AR750_MAC0_OFFSET 0 -+#define GL_AR750_WMAC2G_CALDATA_OFFSET 0x1000 -+#define GL_AR750_WMAC5G_CALDATA_OFFSET 0x5000 -+ -+static struct gpio_led gl_ar750_leds_gpio[] __initdata = { -+ { -+ .name = "gl-ar750:white:power", -+ .gpio = GL_AR750_GPIO_LED_POWER, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ .active_low = 1, -+ }, { -+ .name = "gl-ar750:white:wlan2g", -+ .gpio = GL_AR750_GPIO_LED_WLAN2G, -+ .active_low = 1, -+ }, { -+ .name = "gl-ar750:white:wlan5g", -+ .gpio = GL_AR750_GPIO_LED_WLAN5G, -+ .active_low = 1, -+ }, -+}; -+ -+static struct gpio_keys_button gl_ar750_gpio_keys[] __initdata = { -+ { -+ .desc = "reset", -+ .type = EV_KEY, -+ .code = KEY_RESTART, -+ .debounce_interval = GL_AR750_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = GL_AR750_GPIO_BTN_RESET, -+ .active_low = 1, -+ }, { -+ .desc = "sw1", -+ .type = EV_KEY, -+ .code = BTN_0, -+ .debounce_interval = GL_AR750_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = GL_AR750_GPIO_BTN_SW1, -+ .active_low = 1, -+ }, -+}; -+ -+static struct i2c_gpio_platform_data gl_ar750_i2c_gpio_data = { -+ .sda_pin = GL_AR750_GPIO_I2C_SDA, -+ .scl_pin = GL_AR750_GPIO_I2C_SCL, -+}; -+ -+static struct platform_device gl_ar750_i2c_gpio = { -+ .name = "i2c-gpio", -+ .id = 0, -+ .dev = { -+ .platform_data = &gl_ar750_i2c_gpio_data, -+ }, -+}; -+ -+static void __init gl_ar750_setup(void) -+{ -+ u8 *art = (u8 *) KSEG1ADDR(0x1f050000); -+ -+ ath79_register_m25p80(NULL); -+ -+ ath79_setup_ar933x_phy4_switch(false, false); -+ ath79_register_mdio(0, 0x0); -+ -+ ath79_switch_data.phy4_mii_en = 1; -+ ath79_switch_data.phy_poll_mask = 0xfc; -+ -+ /* WAN */ -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -+ ath79_eth0_data.phy_mask = BIT(4); -+ ath79_eth0_data.speed = SPEED_100; -+ ath79_init_mac(ath79_eth0_data.mac_addr, art + GL_AR750_MAC0_OFFSET, 0); -+ ath79_register_eth(0); -+ -+ /* LAN */ -+ ath79_eth1_data.duplex = DUPLEX_FULL; -+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; -+ ath79_init_mac(ath79_eth1_data.mac_addr, art + GL_AR750_MAC0_OFFSET, 1); -+ ath79_register_eth(1); -+ -+ /* Disable JTAG (enables GPIO0-3) */ -+ ath79_gpio_function_enable(AR934X_GPIO_FUNC_JTAG_DISABLE); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(gl_ar750_leds_gpio), -+ gl_ar750_leds_gpio); -+ -+ ath79_register_gpio_keys_polled(-1, GL_AR750_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(gl_ar750_gpio_keys), -+ gl_ar750_gpio_keys); -+ -+ gpio_request_one(GL_AR750_GPIO_USB_POWER, -+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, -+ "USB power"); -+ -+ platform_device_register(&gl_ar750_i2c_gpio); -+ -+ ath79_register_usb(); -+ -+ ath79_register_wmac(art + GL_AR750_WMAC2G_CALDATA_OFFSET, NULL); -+ -+ ap91_pci_init(art + GL_AR750_WMAC5G_CALDATA_OFFSET, NULL); -+} -+ -+MIPS_MACHINE(ATH79_MACH_GL_AR750, "GL-AR750", "GL.iNet GL-AR750", -+ gl_ar750_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index 89ddbbc976c9393608a80b9ce56e02a4d403ea2a..11ccdbb5083807ef137b8cd2d110de7a97a34e38 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -106,6 +106,7 @@ enum ath79_mach_type { - ATH79_MACH_GL_AR150, /* GL-AR150 support */ - ATH79_MACH_GL_AR300, /* GL-AR300 */ - ATH79_MACH_GL_AR300M, /* GL-AR300M */ -+ ATH79_MACH_GL_AR750, /* GL.iNet GL-AR750 */ - ATH79_MACH_GL_DOMINO, /* Domino */ - ATH79_MACH_GL_INET, /* GL-CONNECT GL-INET */ - ATH79_MACH_GL_MIFI, /* GL-MIFI support */ -diff --git a/target/linux/ar71xx/image/generic.mk b/target/linux/ar71xx/image/generic.mk -index d113c5ad621bb2f15d4cbc4fd50e60904313a7da..d1375c8742d8aea6224f7aca3d9e9522d8056a94 100644 ---- a/target/linux/ar71xx/image/generic.mk -+++ b/target/linux/ar71xx/image/generic.mk -@@ -161,6 +161,19 @@ define Device/gl-ar300m - endef - TARGET_DEVICES += gl-ar300m - -+define Device/gl-ar750 -+ DEVICE_TITLE := GL.iNet GL-AR750 -+ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 kmod-usb-core \ -+ kmod-usb2 kmod-usb-storage -+ BOARDNAME := GL-AR750 -+ SUPPORTED_DEVICES := gl-ar750 -+ IMAGE_SIZE := 16000k -+ MTDPARTS := spi0.0:256k(u-boot)ro,64k(u-boot-env),64k(art)ro,-(firmware) -+ IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | \ -+ append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE) -+endef -+TARGET_DEVICES += gl-ar750 -+ - define Device/gl-domino - DEVICE_TITLE := GL Domino Pi - DEVICE_PACKAGES := kmod-usb-core kmod-usb2 diff --git a/patches/lede/0088-uboot-envtools-add-support-for-GL.iNet-GL-AR750.patch b/patches/lede/0088-uboot-envtools-add-support-for-GL.iNet-GL-AR750.patch deleted file mode 100644 index 4a85a27f..00000000 --- a/patches/lede/0088-uboot-envtools-add-support-for-GL.iNet-GL-AR750.patch +++ /dev/null @@ -1,18 +0,0 @@ -From: Piotr Dymacz -Date: Tue, 17 Oct 2017 23:32:11 +0200 -Subject: uboot-envtools: add support for GL.iNet GL-AR750 - -Signed-off-by: Piotr Dymacz - -diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx -index 25bec7eb33fd691bae417512c4c03e133d93213d..26f1ff938b8191e84315cf308f78e0907264c671 100644 ---- a/package/boot/uboot-envtools/files/ar71xx -+++ b/package/boot/uboot-envtools/files/ar71xx -@@ -29,6 +29,7 @@ cr3000|\ - cr5000|\ - eap300v2|\ - gl-ar300m|\ -+gl-ar750|\ - hornet-ub|\ - hornet-ub-x2|\ - jwap230|\ diff --git a/patches/lede/0089-ar71xx-add-model-detection-for-UBNT-AC-Mesh.patch b/patches/lede/0089-ar71xx-add-model-detection-for-UBNT-AC-Mesh.patch deleted file mode 100644 index dede27e3..00000000 --- a/patches/lede/0089-ar71xx-add-model-detection-for-UBNT-AC-Mesh.patch +++ /dev/null @@ -1,54 +0,0 @@ -From: David Bauer -Date: Sun, 25 Feb 2018 12:09:38 +0100 -Subject: ar71xx: add model detection for UBNT AC-Mesh - -This commit adds correct model detection for UniFi -AC-Mesh. Previously said device was incorrectly detected -as UniFi AC-Lite. - -The Information about the device is stored at 0xC in the EEPROM -partition. It corresponds to the sysid in /etc/board.info of the -Ubiquiti stock firmware. - -Signed-off-by: David Bauer - -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index 35b742a5f1fee0bc24ab2d88e32f118c1df4e2b3..59c1899a588007d6a6a1860fcf95064b0ec35561 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -98,6 +98,27 @@ ubnt_xm_board_detect() { - [ -z "$model" ] || AR71XX_MODEL="${model}${magic:3:1}" - } - -+ubnt_ac_lite_get_mtd_part_magic() { -+ ar71xx_get_mtd_offset_size_format EEPROM 12 2 %02x -+} -+ -+ubnt_ac_lite_board_detect() { -+ local model -+ local magic -+ -+ magic="$(ubnt_ac_lite_get_mtd_part_magic)" -+ case ${magic:0:4} in -+ "e517") -+ model="Ubiquiti UniFi-AC-LITE" -+ ;; -+ "e557") -+ model="Ubiquiti UniFi-AC-MESH" -+ ;; -+ esac -+ -+ [ -z "$model" ] || AR71XX_MODEL="${model}" -+} -+ - cybertan_get_hw_magic() { - local part - -@@ -1129,6 +1150,7 @@ ar71xx_board_detect() { - ;; - *"UniFi-AC-LITE") - name="unifiac-lite" -+ ubnt_ac_lite_board_detect - ;; - *"UniFi-AC-PRO") - name="unifiac-pro" diff --git a/patches/lede/0090-ar71xx-generic-enable-CONFIG_MTD_SPLIT_TPLINK_FW.patch b/patches/lede/0090-ar71xx-generic-enable-CONFIG_MTD_SPLIT_TPLINK_FW.patch deleted file mode 100644 index 4fcd572d..00000000 --- a/patches/lede/0090-ar71xx-generic-enable-CONFIG_MTD_SPLIT_TPLINK_FW.patch +++ /dev/null @@ -1,46 +0,0 @@ -From: Piotr Dymacz -Date: Mon, 3 Jul 2017 18:57:36 +0200 -Subject: ar71xx: generic: enable CONFIG_MTD_SPLIT_TPLINK_FW - -We can use "tplink-fw" mtd splitter for TP-Link devices which use kernel -with TP-Link header embedded inside "safeloader" image type and thus get -rid of statically defined "kernel" and "rootfs" partitions in cmdline. - -Signed-off-by: Piotr Dymacz - -diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 -index d96642b97c36187febb1f3843e7dd9acfab0e40d..6c29cd7748b3ce7e53adf359cd5002ba01066fbd 100644 ---- a/target/linux/ar71xx/config-4.4 -+++ b/target/linux/ar71xx/config-4.4 -@@ -379,6 +379,7 @@ CONFIG_MTD_SPLIT_EVA_FW=y - CONFIG_MTD_SPLIT_FIRMWARE=y - CONFIG_MTD_SPLIT_LZMA_FW=y - CONFIG_MTD_SPLIT_SEAMA_FW=y -+CONFIG_MTD_SPLIT_TPLINK_FW=y - CONFIG_MTD_SPLIT_UIMAGE_FW=y - CONFIG_MTD_SPLIT_WRGG_FW=y - CONFIG_MTD_TPLINK_PARTS=y -diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default -index e0401102229c00985e8000331dce43375903e1aa..f5d48ae0f674883371f8d549594f695913c3d216 100644 ---- a/target/linux/ar71xx/mikrotik/config-default -+++ b/target/linux/ar71xx/mikrotik/config-default -@@ -219,6 +219,7 @@ CONFIG_MTD_NAND_RB4XX=y - CONFIG_MTD_NAND_RB750=y - CONFIG_MTD_NAND_RB91X=y - # CONFIG_MTD_SPLIT_EVA_FW is not set -+# CONFIG_MTD_SPLIT_TPLINK_FW is not set - # CONFIG_MTD_REDBOOT_PARTS is not set - # CONFIG_MTD_TPLINK_PARTS is not set - CONFIG_MTD_UBI=y -diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default -index 790fa8f9bd42aba8521b960c2a49a742285e6157..0eee52d3ee69990fadf77de9f03f03c9c9b59190 100644 ---- a/target/linux/ar71xx/nand/config-default -+++ b/target/linux/ar71xx/nand/config-default -@@ -107,6 +107,7 @@ CONFIG_MTD_NAND_ECC_BCH=y - # CONFIG_MTD_SM_COMMON is not set - # CONFIG_MTD_SPLIT_EVA_FW is not set - # CONFIG_MTD_SPLIT_SEAMA_FW is not set -+# CONFIG_MTD_SPLIT_TPLINK_FW is not set - # CONFIG_MTD_TPLINK_PARTS is not set - CONFIG_MTD_UBI=y - CONFIG_MTD_UBI_BEB_LIMIT=20 diff --git a/patches/lede/0091-mac80211-initialize-sinfo-in-cfg80211_get_station.patch b/patches/lede/0091-mac80211-initialize-sinfo-in-cfg80211_get_station.patch deleted file mode 100644 index 78259ec0..00000000 --- a/patches/lede/0091-mac80211-initialize-sinfo-in-cfg80211_get_station.patch +++ /dev/null @@ -1,71 +0,0 @@ -From: Sven Eckelmann -Date: Wed, 6 Jun 2018 11:21:53 +0200 -Subject: mac80211: initialize sinfo in cfg80211_get_station - -Most of the implementations behind cfg80211_get_station will not initialize -sinfo to zero before manipulating it. For example, the member "filled", -which indicates the filled in parts of this struct, is often only modified -by enabling certain bits in the bitfield while keeping the remaining bits -in their original state. A caller without a preinitialized sinfo.filled can -then no longer decide which parts of sinfo were filled in by -cfg80211_get_station (or actually the underlying implementations). - -cfg80211_get_station must therefore take care that sinfo is initialized to -zero. Otherwise, the caller may tries to read information which was not -filled in and which must therefore also be considered uninitialized. In -batadv_v_elp_get_throughput's case, an invalid "random" expected throughput -may be stored for this neighbor and thus the B.A.T.M.A.N V algorithm may -switch to non-optimal neighbors for certain destinations. - -Signed-off-by: Sven Eckelmann - -Forwarded: https://github.com/openwrt/openwrt/pull/1015 - -diff --git a/package/kernel/mac80211/patches/379-cfg80211-initialize-sinfo-in-cfg80211_get_station.patch b/package/kernel/mac80211/patches/379-cfg80211-initialize-sinfo-in-cfg80211_get_station.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..37323c1f7defee830b3f876a46f255acf21fce42 ---- /dev/null -+++ b/package/kernel/mac80211/patches/379-cfg80211-initialize-sinfo-in-cfg80211_get_station.patch -@@ -0,0 +1,42 @@ -+From 4f717a2589be649afddbbd3ac58b67ebfa7426f7 Mon Sep 17 00:00:00 2001 -+From: Sven Eckelmann -+Date: Wed, 6 Jun 2018 10:18:31 +0200 -+Subject: [PATCH v2] cfg80211: initialize sinfo in cfg80211_get_station -+ -+Most of the implementations behind cfg80211_get_station will not initialize -+sinfo to zero before manipulating it. For example, the member "filled", -+which indicates the filled in parts of this struct, is often only modified -+by enabling certain bits in the bitfield while keeping the remaining bits -+in their original state. A caller without a preinitialized sinfo.filled can -+then no longer decide which parts of sinfo were filled in by -+cfg80211_get_station (or actually the underlying implementations). -+ -+cfg80211_get_station must therefore take care that sinfo is initialized to -+zero. Otherwise, the caller may tries to read information which was not -+filled in and which must therefore also be considered uninitialized. In -+batadv_v_elp_get_throughput's case, an invalid "random" expected throughput -+may be stored for this neighbor and thus the B.A.T.M.A.N V algorithm may -+switch to non-optimal neighbors for certain destinations. -+ -+Fixes: 7406353d43c8 ("cfg80211: implement cfg80211_get_station cfg80211 API") -+Reported-by: Thomas Lauer -+Reported-by: Marcel Schmidt -+Cc: b.a.t.m.a.n@lists.open-mesh.org -+Signed-off-by: Sven Eckelmann -+ -+Forwarded: https://patchwork.kernel.org/patch/10449857/ -+--- -+ net/wireless/util.c | 2 ++ -+ 1 file changed, 2 insertions(+) -+ -+--- a/net/wireless/util.c -++++ b/net/wireless/util.c -+@@ -1749,6 +1749,8 @@ int cfg80211_get_station(struct net_devi -+ if (!rdev->ops->get_station) -+ return -EOPNOTSUPP; -+ -++ memset(sinfo, 0, sizeof(*sinfo)); -++ -+ return rdev_get_station(rdev, dev, mac_addr, sinfo); -+ } -+ EXPORT_SYMBOL(cfg80211_get_station); diff --git a/patches/lede/0092-ar71xx-lzma-loader-move-padding-workaround-to-gzip-step.patch b/patches/lede/0092-ar71xx-lzma-loader-move-padding-workaround-to-gzip-step.patch deleted file mode 100644 index 870f7427..00000000 --- a/patches/lede/0092-ar71xx-lzma-loader-move-padding-workaround-to-gzip-step.patch +++ /dev/null @@ -1,54 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 6 Jun 2018 20:51:05 +0200 -Subject: ar71xx: lzma-loader: move padding workaround to gzip step - -Some devices (TP-Link TL-WR1043ND v1) don't boot reliably when the -uncompressed loader is too small. This was workarounded in the loader by -adding 512KB of padding to the .data section of the loader binary. - -This approach had two issues: - -- The padding was only working when .data was non-empty (otherwise the - section would become NOBITS, omitting it in the binary). .data was only - empty when no CMDLINE was set, leading to further workarounds like - fe594bf90d09 ("ath79: fix loader-okli, lzma-loader"), and this - workaround was only effective because a missing "const" led to the kernel - argv being stored in .data instead of .rodata -- The padding was not only added to the compressed .gz loader, but also - uncompressed .bin and .elf loaders. The prevented embedding the kernel - cmdline in the loader for non-gz loader types. - -To fix both issues, move the creation of the padding from the linker script -to the gzip step. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/image/lzma-loader/Makefile b/target/linux/ar71xx/image/lzma-loader/Makefile -index 9b81e87306f235d1e7284401828240b9b9787011..738093a958013624abb8f84a3874e1c795da349d 100644 ---- a/target/linux/ar71xx/image/lzma-loader/Makefile -+++ b/target/linux/ar71xx/image/lzma-loader/Makefile -@@ -47,7 +47,11 @@ loader-compile: $(PKG_BUILD_DIR)/.prepared - clean all - - loader.gz: $(PKG_BUILD_DIR)/loader.bin -- gzip -nc9 $< > $(LOADER_GZ) -+ # Workaround for buggy bootloaders: Some devices -+ # (TP-Link TL-WR1043ND v1) don't work correctly when -+ # the uncompressed loader is too small (probably a cache -+ # invalidation issue) -+ dd if=$< bs=512K conv=sync | gzip -nc9 > $(LOADER_GZ) - - loader.elf: $(PKG_BUILD_DIR)/loader.elf - $(CP) $< $(LOADER_ELF) -diff --git a/target/linux/ar71xx/image/lzma-loader/src/loader.lds b/target/linux/ar71xx/image/lzma-loader/src/loader.lds -index 80cc7ca3ecf53a747fc139560b89c233f4343293..01ff85236147dc62bae480b191a44005171b1561 100644 ---- a/target/linux/ar71xx/image/lzma-loader/src/loader.lds -+++ b/target/linux/ar71xx/image/lzma-loader/src/loader.lds -@@ -13,7 +13,6 @@ SECTIONS { - .data : { - *(.data) - *(.data.*) -- . = . + 524288; /* workaround for buggy bootloaders */ - } - - . = ALIGN(32); diff --git a/patches/lede/0093-ar71xx-lzma-loader-set-page-size-to-4KB.patch b/patches/lede/0093-ar71xx-lzma-loader-set-page-size-to-4KB.patch deleted file mode 100644 index f9fdae6a..00000000 --- a/patches/lede/0093-ar71xx-lzma-loader-set-page-size-to-4KB.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 6 Jun 2018 00:27:42 +0200 -Subject: ar71xx: lzma-loader: set page size to 4KB - -The text section in the ELF loader is aligned to the maximum page size, -which defaults to 64KB. Reduce it to the actual page size to avoid wasting -flash space for this alignment. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/image/lzma-loader/src/Makefile b/target/linux/ar71xx/image/lzma-loader/src/Makefile -index 5f10bdb8f1499f24f00a8bf4d53f370fef88bd1e..fadb7e6206070c07aab3e8b323324976c6998eea 100644 ---- a/target/linux/ar71xx/image/lzma-loader/src/Makefile -+++ b/target/linux/ar71xx/image/lzma-loader/src/Makefile -@@ -95,7 +95,7 @@ loader2.o: loader.bin - $(LD) -r -b binary --oformat $(O_FORMAT) -o $@ $< - - loader.elf: loader2.o -- $(LD) -e startup -T loader2.lds -Ttext $(LOADADDR) -o $@ $< -+ $(LD) -z max-page-size=0x1000 -e startup -T loader2.lds -Ttext $(LOADADDR) -o $@ $< - - mrproper: clean - diff --git a/patches/lede/0094-ar71xx-lzma-loader-constify-kernel-argv-array.patch b/patches/lede/0094-ar71xx-lzma-loader-constify-kernel-argv-array.patch deleted file mode 100644 index 6dfe3ca2..00000000 --- a/patches/lede/0094-ar71xx-lzma-loader-constify-kernel-argv-array.patch +++ /dev/null @@ -1,22 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 6 Jun 2018 00:30:57 +0200 -Subject: ar71xx: lzma-loader: constify kernel argv array - -By making the kernel argv array const, the .data section can always be -omitted from the laoder binary. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/image/lzma-loader/src/loader.c b/target/linux/ar71xx/image/lzma-loader/src/loader.c -index cc73eb1721cbfbf2ad1bb94e8e6d3ab006983c5d..794c4b6285a7fa0423c22d172828415e6f2be93b 100644 ---- a/target/linux/ar71xx/image/lzma-loader/src/loader.c -+++ b/target/linux/ar71xx/image/lzma-loader/src/loader.c -@@ -75,7 +75,7 @@ static unsigned long kernel_la; - #ifdef CONFIG_KERNEL_CMDLINE - #define kernel_argc 2 - static const char kernel_cmdline[] = CONFIG_KERNEL_CMDLINE; --static const char *kernel_argv[] = { -+static const char *const kernel_argv[] = { - NULL, - kernel_cmdline, - NULL, diff --git a/patches/lede/0095-ar71xx-make-loader-okli-build-step-more-generic.patch b/patches/lede/0095-ar71xx-make-loader-okli-build-step-more-generic.patch deleted file mode 100644 index 737d21bc..00000000 --- a/patches/lede/0095-ar71xx-make-loader-okli-build-step-more-generic.patch +++ /dev/null @@ -1,36 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 6 Jun 2018 00:34:25 +0200 -Subject: ar71xx: make loader-okli build step more generic - -Add support for different loader types. - -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile -index 8eac5fc997cab0203718fb0558e6f5aaaeec9c38..de27f5d7c5ce6dbd31305c139afc128edaed15ee 100644 ---- a/target/linux/ar71xx/image/Makefile -+++ b/target/linux/ar71xx/image/Makefile -@@ -73,8 +73,9 @@ define Build/loader-kernel-cmdline - $(call Build/loader-common,LOADER_DATA="$@" KERNEL_CMDLINE="$(CMDLINE)") - endef - -+# Arguments: - define Build/loader-okli -- dd if=$(KDIR)/loader-$(1).gz bs=7680 conv=sync of="$@.new" -+ dd if=$(KDIR)/loader-$(word 1,$(1)).$(LOADER_TYPE) bs=$(word 2,$(1)) conv=sync of="$@.new" - cat "$@" >> "$@.new" - mv "$@.new" "$@" - endef -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 1e40d943ac2aa43aea670fd86268708aea39a46c..18e2c73737f477f4d00020893878cbdfb81a735b 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -69,7 +69,7 @@ $(Device/tplink) - LOADER_FLASH_OFFS := 0x22000 - COMPILE := loader-$(1).gz - COMPILE/loader-$(1).gz := loader-okli-compile -- KERNEL := copy-file $(KDIR)/vmlinux.bin.lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) -+ KERNEL := copy-file $(KDIR)/vmlinux.bin.lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) 7680 - KERNEL_INITRAMFS := copy-file $(KDIR)/vmlinux-initramfs.bin.lzma | loader-kernel-cmdline | mktplinkfw-combined - endef - diff --git a/patches/lede/0096-ar71xx-switch-CPE-WBS-210-510-to-okli-loader.patch b/patches/lede/0096-ar71xx-switch-CPE-WBS-210-510-to-okli-loader.patch deleted file mode 100644 index f77a2cfa..00000000 --- a/patches/lede/0096-ar71xx-switch-CPE-WBS-210-510-to-okli-loader.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: Matthias Schiffer -Date: Wed, 6 Jun 2018 00:35:17 +0200 -Subject: ar71xx: switch CPE/WBS 210/510 to okli-loader - -We recently increased the kernel partition size of the CPE/WBS 210/510. -This works fine for new installations of the factory image, but on -sysupgrades, the partition table read by the bootloader is not adjusted. -This limits the maximum size of the kernel loaded by the bootloader to the -old partition size. - -While adjusting the partition table would be a cleanest solution, such a -migration would have to happen before an upgrade to a new version with a -newer kernel. This is error-prone and would require a two-step upgrade, as -we mark the partition table partition read-only. - -Instead, switch from the lzma-loader with embedded kernel to the -okli-loader, so only the tiny lzma-loader is loaded by the bootloader as -"kernel", and the lzma-loader will then load the rest of the kernel by -itself. - -Fixes: e39847ea2f70 ("ar71xx: increase kernel partition size for CPE/WBS 210/510") -Signed-off-by: Matthias Schiffer - -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 18e2c73737f477f4d00020893878cbdfb81a735b..709b1558a5f8487c50e922ec4d27b643f080cbcc 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -173,7 +173,10 @@ define Device/cpe510-520 - TPLINK_BOARD_NAME := CPE510 - DEVICE_PROFILE := CPE510 - LOADER_TYPE := elf -- KERNEL := kernel-bin | patch-cmdline | lzma | loader-kernel -+ LOADER_FLASH_OFFS := 0x43000 -+ COMPILE := loader-$(1).elf -+ COMPILE/loader-$(1).elf := loader-okli-compile -+ KERNEL := kernel-bin | lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) 12288 - IMAGES := sysupgrade.bin factory.bin - IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade - IMAGE/factory.bin := append-rootfs | tplink-safeloader factory diff --git a/patches/lede/0097-ar71xx-add-support-for-TP-Link-TL-WA901ND-v5.patch b/patches/lede/0097-ar71xx-add-support-for-TP-Link-TL-WA901ND-v5.patch deleted file mode 100644 index e83bd189..00000000 --- a/patches/lede/0097-ar71xx-add-support-for-TP-Link-TL-WA901ND-v5.patch +++ /dev/null @@ -1,123 +0,0 @@ -From: Paul Wassi -Date: Sun, 22 Oct 2017 22:39:30 +0200 -Subject: ar71xx: add support for TP-Link TL-WA901ND v5 - -The TL-WA901ND v5 has the same hardware as v4, although the PCB has -a different layout. Installation from factory is done via TFTP. -(rename -factory image to wa901ndv4_tp_recovery.bin for tftp) - -Signed-off-by: Paul Wassi - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index f94cc3c85b798458cc97c06bb0d44bdc426d057d..a742854bc9b0aa48c61b37e58288177bbb56d14d 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -606,7 +606,8 @@ tl-wa860re|\ - tl-wa830re-v2|\ - tl-wa801nd-v2|\ - tl-wa901nd-v3|\ --tl-wa901nd-v4) -+tl-wa901nd-v4|\ -+tl-wa901nd-v5) - ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" - ;; -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index c8990c60f504286d0fd28c7b17f54c9c3b5a891e..875a1a38ada9fb66503505d2f094310db1295a07 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -110,6 +110,7 @@ ar71xx_setup_interfaces() - tl-wa901nd-v2|\ - tl-wa901nd-v3|\ - tl-wa901nd-v4|\ -+ tl-wa901nd-v5|\ - tl-wr703n|\ - tl-wr802n-v1|\ - tube2h|\ -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index 01d3b787bedcab82a5797c9a4801e8139887cc2c..f8d2eb314f7b57a1134b68c504c0dac202ed947c 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -363,6 +363,7 @@ get_status_led() { - tl-wa901nd-v2|\ - tl-wa901nd-v3|\ - tl-wa901nd-v4|\ -+ tl-wa901nd-v5|\ - tl-wdr3320-v2|\ - tl-wdr3500|\ - tl-wr1041n-v2|\ -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index 59c1899a588007d6a6a1860fcf95064b0ec35561..b365b6ae4aa6021960499b3889d846b5171eec0f 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -1058,6 +1058,9 @@ ar71xx_board_detect() { - *"TL-WA901ND v4") - name="tl-wa901nd-v4" - ;; -+ *"TL-WA901ND v5") -+ name="tl-wa901nd-v5" -+ ;; - *"TL-WDR3320 v2") - name="tl-wdr3320-v2" - ;; -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index 236520b27c4d6d0b1b7e483d1100fb5ab156d475..0b422d71c2639a31bc7e88a20976266b66ec4490 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -415,6 +415,7 @@ platform_check_image() { - tl-wa901nd-v2|\ - tl-wa901nd-v3|\ - tl-wa901nd-v4|\ -+ tl-wa901nd-v5|\ - tl-wa901nd|\ - tl-wdr3320-v2|\ - tl-wdr3500|\ -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wa901nd-v4.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wa901nd-v4.c -index 9c651bb1d256bc13a3fe31b664f2cd3590e8092f..ffbcd6fe42df9b7c0dd86ae23a21ab7c90917a8c 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wa901nd-v4.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wa901nd-v4.c -@@ -1,5 +1,5 @@ - /* -- * TP-LINK TL-WA901ND v4 board -+ * TP-LINK TL-WA901ND v4, v5 board - * - * Copyright (C) 2015 Matthias Schiffer - * Copyright (C) 2016 Tiziano Bacocco -@@ -110,3 +110,6 @@ static void __init TL_WA901ND_V4_setup(void) - - MIPS_MACHINE(ATH79_MACH_TL_WA901ND_V4, "TL-WA901ND-v4", "TP-LINK TL-WA901ND v4", - TL_WA901ND_V4_setup); -+ -+MIPS_MACHINE(ATH79_MACH_TL_WA901ND_V5, "TL-WA901ND-v5", "TP-LINK TL-WA901ND v5", -+ TL_WA901ND_V4_setup); -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index 11ccdbb5083807ef137b8cd2d110de7a97a34e38..a4c7f52fe94e17bc48bebfb460f12f3e5ac35afe 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -213,6 +213,7 @@ enum ath79_mach_type { - ATH79_MACH_TL_WA901ND_V2, /* TP-LINK TL-WA901ND v2 */ - ATH79_MACH_TL_WA901ND_V3, /* TP-LINK TL-WA901ND v3 */ - ATH79_MACH_TL_WA901ND_V4, /* TP-LINK TL-WA901ND v4 */ -+ ATH79_MACH_TL_WA901ND_V5, /* TP-LINK TL-WA901ND v5 */ - ATH79_MACH_TL_WDR3320_V2, /* TP-LINK TL-WDR3320 v2 */ - ATH79_MACH_TL_WDR3500, /* TP-LINK TL-WDR3500 */ - ATH79_MACH_TL_WDR4300, /* TP-LINK TL-WDR4300 */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 709b1558a5f8487c50e922ec4d27b643f080cbcc..6a3faef518ebfa4f36d3074ee9c102b801e04275 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -1103,7 +1103,13 @@ define Device/tl-wa901nd-v4 - IMAGE/factory.bin := append-rootfs | mktplinkfw factory -C EU - endef - --TARGET_DEVICES += tl-wa901nd-v1 tl-wa901nd-v2 tl-wa901nd-v3 tl-wa901nd-v4 -+define Device/tl-wa901nd-v5 -+ $(Device/tl-wa901nd-v4) -+ DEVICE_TITLE := TP-LINK TL-WA901N/ND v5 -+ BOARDNAME := TL-WA901ND-v5 -+ TPLINK_HWID := 0x09010005 -+endef -+TARGET_DEVICES += tl-wa901nd-v1 tl-wa901nd-v2 tl-wa901nd-v3 tl-wa901nd-v4 tl-wa901nd-v5 - - define Device/tl-wa7210n-v2 - $(Device/tplink-4mlzma) diff --git a/patches/lede/0098-ar71xx-disable-40Mhz-refclk-for-QCA953x.patch b/patches/lede/0098-ar71xx-disable-40Mhz-refclk-for-QCA953x.patch deleted file mode 100644 index e82d7bcd..00000000 --- a/patches/lede/0098-ar71xx-disable-40Mhz-refclk-for-QCA953x.patch +++ /dev/null @@ -1,182 +0,0 @@ -From: Sven Eckelmann -Date: Fri, 19 Jan 2018 14:02:09 +0100 -Subject: ar71xx: disable 40Mhz refclk for QCA953x - -The "QCA9531 v2.0 802.11n 2x2 2.4 GHz Premium SOC for WLAN Platforms" -datasheet (80-Y7991-1 Rev. C - October 2014) doesn't specify support for a -40 Mhz reference clock. The register description for "Bootstrap Options" -(page 31) defines following states for the bit 4 (REF_CLK): - -* 0 - CLK25 (default) -* 1 - (reserved) - -Devices like the TP-Link CPE210 v2 has this bit set to 1 but is using a 25 -Mhz reference clock. OpenWrt is still interpreted this bit as 40 Mhz and -then break the bootup of the system due to this incorrect interpretation. - -Signed-off-by: Sven Eckelmann -[refreshed patches] -Signed-off-by: Piotr Dymacz - -Origin: backport, https://github.com/openwrt/openwrt/commit/b1d57dadb2da0e010e157fd2383523578c9dcc2e - -diff --git a/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch b/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch -index 777f7b2c8838f2c93f79d5d5212f90b2bd82ced3..d55c97165a5abad8cb25fcc6ddc29415f238c7e6 100644 ---- a/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch -+++ b/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch -@@ -44,7 +44,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed. - config ATH79_NVRAM - --- a/arch/mips/ath79/clock.c - +++ b/arch/mips/ath79/clock.c --@@ -354,6 +354,91 @@ static void __init ar934x_clocks_init(vo -+@@ -354,6 +354,87 @@ static void __init ar934x_clocks_init(vo - iounmap(dpll_base); - } - -@@ -56,13 +56,9 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed. - + unsigned long ahb_rate; - + u32 pll, out_div, ref_div, nint, frac, clk_ctrl, postdiv; - + u32 cpu_pll, ddr_pll; --+ u32 bootstrap; - + --+ bootstrap = ath79_reset_rr(QCA953X_RESET_REG_BOOTSTRAP); --+ if (bootstrap & QCA953X_BOOTSTRAP_REF_CLK_40) --+ ref_rate = 40 * 1000 * 1000; --+ else --+ ref_rate = 25 * 1000 * 1000; -++ /* QCA953X only supports 25MHz ref_clk */ -++ ref_rate = 25 * 1000 * 1000; - + - + pll = ath79_pll_rr(QCA953X_PLL_CPU_CONFIG_REG); - + out_div = (pll >> QCA953X_PLL_CPU_CONFIG_OUTDIV_SHIFT) & -@@ -136,7 +132,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed. - static void __init qca955x_clocks_init(void) - { - unsigned long ref_rate; --@@ -451,6 +536,8 @@ void __init ath79_clocks_init(void) -+@@ -451,6 +532,8 @@ void __init ath79_clocks_init(void) - ar933x_clocks_init(); - else if (soc_is_ar934x()) - ar934x_clocks_init(); -@@ -247,14 +243,12 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed. - - ath79_wmac_data.external_reset = ar933x_wmac_reset; - } --@@ -151,6 +151,26 @@ static void ar934x_wmac_setup(void) -+@@ -151,6 +151,21 @@ static void ar934x_wmac_setup(void) - ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision; - } - - +static void qca953x_wmac_setup(void) - +{ --+ u32 t; --+ - + ath79_wmac_device.name = "qca953x_wmac"; - + - + ath79_wmac_resources[0].start = QCA953X_WMAC_BASE; -@@ -262,11 +256,8 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed. - + ath79_wmac_resources[1].start = ATH79_IP2_IRQ(1); - + ath79_wmac_resources[1].end = ATH79_IP2_IRQ(1); - + --+ t = ath79_reset_rr(QCA953X_RESET_REG_BOOTSTRAP); --+ if (t & QCA953X_BOOTSTRAP_REF_CLK_40) --+ ath79_wmac_data.is_clk_25mhz = false; --+ else --+ ath79_wmac_data.is_clk_25mhz = true; -++ /* QCA953X only supports 25MHz ref_clk */ -++ ath79_wmac_data.is_clk_25mhz = true; - + - + ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision; - +} -@@ -274,7 +265,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed. - static void qca955x_wmac_setup(void) - { - u32 t; --@@ -368,6 +388,8 @@ void __init ath79_register_wmac(u8 *cal_ -+@@ -368,6 +383,8 @@ void __init ath79_register_wmac(u8 *cal_ - ar933x_wmac_setup(); - else if (soc_is_ar934x()) - ar934x_wmac_setup(); -@@ -550,7 +541,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed. - +#define QCA953X_BOOTSTRAP_SW_OPTION2 BIT(12) - +#define QCA953X_BOOTSTRAP_SW_OPTION1 BIT(11) - +#define QCA953X_BOOTSTRAP_EJTAG_MODE BIT(5) --+#define QCA953X_BOOTSTRAP_REF_CLK_40 BIT(4) -++#define QCA953X_BOOTSTRAP_REF_CLK BIT(4) - +#define QCA953X_BOOTSTRAP_SDRAM_DISABLED BIT(1) - +#define QCA953X_BOOTSTRAP_DDR1 BIT(0) - + -diff --git a/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch b/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch -index ed90c40d882fcff1a451533748912865cc78c6e8..de0ee4604cdeb946bab222cacaa51fb150b25aab 100644 ---- a/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch -+++ b/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch -@@ -24,7 +24,7 @@ - config ATH79_NVRAM - --- a/arch/mips/ath79/clock.c - +++ b/arch/mips/ath79/clock.c --@@ -524,6 +524,100 @@ static void __init qca955x_clocks_init(v -+@@ -520,6 +520,100 @@ static void __init qca955x_clocks_init(v - clk_add_alias("uart", NULL, "ref", NULL); - } - -@@ -125,7 +125,7 @@ - void __init ath79_clocks_init(void) - { - if (soc_is_ar71xx()) --@@ -540,6 +634,8 @@ void __init ath79_clocks_init(void) -+@@ -536,6 +630,8 @@ void __init ath79_clocks_init(void) - qca953x_clocks_init(); - else if (soc_is_qca955x()) - qca955x_clocks_init(); -@@ -219,7 +219,7 @@ - } - --- a/arch/mips/ath79/dev-wmac.c - +++ b/arch/mips/ath79/dev-wmac.c --@@ -189,6 +189,26 @@ static void qca955x_wmac_setup(void) -+@@ -184,6 +184,26 @@ static void qca955x_wmac_setup(void) - ath79_wmac_data.is_clk_25mhz = true; - } - -@@ -246,7 +246,7 @@ - static bool __init - ar93xx_wmac_otp_read_word(void __iomem *base, int addr, u32 *data) - { --@@ -392,6 +412,8 @@ void __init ath79_register_wmac(u8 *cal_ -+@@ -387,6 +407,8 @@ void __init ath79_register_wmac(u8 *cal_ - qca953x_wmac_setup(); - else if (soc_is_qca955x()) - qca955x_wmac_setup(); -diff --git a/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch b/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch -index 16a0b909c570b403473346b0c992f9de02b67132..b0e15379787ade16a02363c78c143e878f27a7f2 100644 ---- a/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch -+++ b/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch -@@ -1,6 +1,6 @@ - --- a/arch/mips/ath79/dev-wmac.c - +++ b/arch/mips/ath79/dev-wmac.c --@@ -400,6 +400,11 @@ void __init ath79_wmac_set_ext_lna_gpio( -+@@ -395,6 +395,11 @@ void __init ath79_wmac_set_ext_lna_gpio( - ar934x_set_ext_lna_gpio(chain, gpio); - } - -diff --git a/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch b/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch -index 8aa5957a7152af27854f6f7c197120b8029cf9e8..b59e43c7712a18e5e81944361c358dfb08c488ea 100644 ---- a/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch -+++ b/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch -@@ -32,7 +32,7 @@ - */ - --- a/arch/mips/ath79/dev-wmac.c - +++ b/arch/mips/ath79/dev-wmac.c --@@ -171,6 +171,27 @@ static void qca953x_wmac_setup(void) -+@@ -166,6 +166,27 @@ static void qca953x_wmac_setup(void) - ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision; - } - -@@ -60,7 +60,7 @@ - static void qca955x_wmac_setup(void) - { - u32 t; --@@ -187,6 +208,8 @@ static void qca955x_wmac_setup(void) -+@@ -182,6 +203,8 @@ static void qca955x_wmac_setup(void) - ath79_wmac_data.is_clk_25mhz = false; - else - ath79_wmac_data.is_clk_25mhz = true; diff --git a/patches/lede/0099-ar71xx-Add-TP-Link-Pharos-v2-board-detection.patch b/patches/lede/0099-ar71xx-Add-TP-Link-Pharos-v2-board-detection.patch deleted file mode 100644 index 8b418e06..00000000 --- a/patches/lede/0099-ar71xx-Add-TP-Link-Pharos-v2-board-detection.patch +++ /dev/null @@ -1,139 +0,0 @@ -From: Adrian Schmutzler -Date: Fri, 19 Jan 2018 12:58:40 +0100 -Subject: ar71xx: Add TP-Link Pharos v2 board detection - -Add support for detecting TP-Link Pharos v2 boards. -They use different format in product-info partition than v1 boards. - -Code was written mostly by Alexander Couzens - -Signed-off-by: Robert Marko -Signed-off-by: Adrian Schmutzler - -Origin: backport, https://github.com/openwrt/openwrt/commit/2524febf7927a1bf430d64b7790feb126023e3d1 - -diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh -index b365b6ae4aa6021960499b3889d846b5171eec0f..94311f75989b0861e188dc89b3e714b5545c1ad8 100755 ---- a/target/linux/ar71xx/base-files/lib/ar71xx.sh -+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh -@@ -375,7 +375,7 @@ tplink_pharos_get_model_string() { - } - - tplink_pharos_board_detect() { -- local model_string="$(tplink_pharos_get_model_string | tr -d '\r')" -+ local model_string="$1" - local oIFS="$IFS"; IFS=":"; set -- $model_string; IFS="$oIFS" - - local model="${1%%\(*}" -@@ -396,6 +396,14 @@ gl_inet_board_detect() { - esac - } - -+tplink_pharos_v2_get_model_string() { -+ local part -+ part=$(find_mtd_part 'product-info') -+ [ -z "$part" ] && return 1 -+ -+ dd if=$part bs=1 skip=4360 count=64 2>/dev/null | tr -d '\r\0' | head -n 1 -+} -+ - ar71xx_board_detect() { - local machine - local name -@@ -546,11 +554,15 @@ ar71xx_board_detect() { - ;; - *"CPE210/220") - name="cpe210" -- tplink_pharos_board_detect -+ tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" -+ ;; -+ *"CPE210 v2") -+ name="cpe210-v2" -+ tplink_pharos_board_detect "$(tplink_pharos_v2_get_model_string)" - ;; - *"CPE510/520") - name="cpe510" -- tplink_pharos_board_detect -+ tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" - ;; - *CPE830) - name="cpe830" -@@ -560,11 +572,11 @@ ar71xx_board_detect() { - ;; - *WBS210) - name="wbs210" -- tplink_pharos_board_detect -+ tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" - ;; - *WBS510) - name="wbs510" -- tplink_pharos_board_detect -+ tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" - ;; - *CR3000) - name="cr3000" -@@ -641,7 +653,7 @@ ar71xx_board_detect() { - ;; - *"EAP120") - name="eap120" -- tplink_pharos_board_detect -+ tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')" - ;; - *"EAP300 v2") - name="eap300v2" -diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -index 0b422d71c2639a31bc7e88a20976266b66ec4490..9bc49c41a6308b732e45a7ae35c851133c367254 100755 ---- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh -@@ -97,10 +97,11 @@ tplink_pharos_check_support_list() { - local image="$1" - local offset="$2" - local model="$3" -+ local trargs="$4" - - # Here $image is given to dd directly instead of using get_image; - # otherwise the skip will take almost a second (as dd can't seek) -- dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | ( -+ dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | tr -d "$trargs" | ( - while IFS= read -r line; do - [ "$line" = "$model" ] && exit 0 - done -@@ -110,17 +111,19 @@ tplink_pharos_check_support_list() { - } - - tplink_pharos_check_image() { -- local magic_long="$(get_magic_long "$1")" -- [ "$magic_long" != "7f454c46" ] && { -- echo "Invalid image magic '$magic_long'" -+ local image_magic="$(get_magic_long "$1")" -+ local board_magic="$2" -+ [ "$image_magic" != "$board_magic" ] && { -+ echo "Invalid image magic '$image_magic'. Expected '$board_magic'." - return 1 - } - -- local model_string="$(tplink_pharos_get_model_string)" -+ local model_string="$3" -+ local trargs="$4" - - # New images have the support list at 7802888, old ones at 1511432 -- tplink_pharos_check_support_list "$1" 7802888 "$model_string" || \ -- tplink_pharos_check_support_list "$1" 1511432 "$model_string" || { -+ tplink_pharos_check_support_list "$1" 7802888 "$model_string" "$trargs" || \ -+ tplink_pharos_check_support_list "$1" 1511432 "$model_string" "$trargs" || { - echo "Unsupported image (model not in support-list)" - return 1 - } -@@ -507,7 +510,11 @@ platform_check_image() { - eap120|\ - wbs210|\ - wbs510) -- tplink_pharos_check_image "$1" && return 0 -+ tplink_pharos_check_image "$1" "7f454c46" "$(tplink_pharos_get_model_string)" '' && return 0 -+ return 1 -+ ;; -+ cpe210-v2) -+ tplink_pharos_check_image "$1" "01000000" "$(tplink_pharos_v2_get_model_string)" '\0\xff\r' && return 0 - return 1 - ;; - a40|\ diff --git a/patches/lede/0100-ar71xx-Add-support-for-TP-Link-CPE210-v2.patch b/patches/lede/0100-ar71xx-Add-support-for-TP-Link-CPE210-v2.patch deleted file mode 100644 index a25b10fd..00000000 --- a/patches/lede/0100-ar71xx-Add-support-for-TP-Link-CPE210-v2.patch +++ /dev/null @@ -1,324 +0,0 @@ -From: Adrian Schmutzler -Date: Fri, 19 Jan 2018 14:45:42 +0100 -Subject: ar71xx: Add support for TP-Link CPE210 v2 - -This PR adds support for a popular low-cost 2.4GHz N based AP - -Specifications: - - SoC: Qualcomm Atheros QCA9533 (650MHz) - - RAM: 64MB - - Storage: 8 MB SPI NOR - - Wireless: 2.4GHz N based built into SoC 2x2 - - Ethernet: 1x 100/10 Mbps, integrated into SoC, 24V POE IN - -Installation: -Flash factory image through stock firmware WEB UI -or through TFTP -To get to TFTP recovery just hold reset button while powering on for -around 4-5 seconds and release. -Rename factory image to recovery.bin -Stock TFTP server IP:192.168.0.100 -Stock device TFTP adress:192.168.0.254 - -Notes: -TP-Link does not use bootstrap registers so without this patch reference -clock detects as 40MHz while it is actually 25MHz. -This is due to messed up bootstrap resistor configuration on the PCB. -Provided GPL code just forces 25MHz reference clock. -That causes booting with completely wrong clocks, for example, CPU tries -to boot at 1040MHz while the stock is 650MHz. -So this PR depends on PR #672 to remove 40MHz reference clock. -Thanks to Sven Eckelmann for properly patching that. - -Signed-off-by: Robert Marko -Signed-off-by: Adrian Schmutzler - -Origin: backport, https://github.com/openwrt/openwrt/commit/5c5bf8b8658a588423f6ec445d7ef6a36f99a396 - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index a742854bc9b0aa48c61b37e58288177bbb56d14d..54046dffc9a4d4ad0216dcda32bf98ee5d38b569 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -187,16 +187,25 @@ cf-e530n) - ucidef_set_led_netdev "wan" "WAN" "$board:blue:wan" "eth1" - ;; - cpe210|\ -+cpe210-v2|\ - cpe510|\ - wbs210|\ - wbs510) -- ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20" -- ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10" - ucidef_set_rssimon "wlan0" "200000" "1" - ucidef_set_led_rssi "rssilow" "RSSILOW" "tp-link:green:link1" "wlan0" "1" "100" "0" "13" - ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "tp-link:green:link2" "wlan0" "26" "100" "-25" "13" - ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "tp-link:green:link3" "wlan0" "51" "100" "-50" "13" - ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "tp-link:green:link4" "wlan0" "76" "100" "-75" "13" -+ -+ case "$board" in -+ cpe210-v2) -+ ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan0" "eth0" -+ ;; -+ *) -+ ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20" -+ ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10" -+ ;; -+ esac - ;; - cr3000) - ucidef_set_led_netdev "wan" "WAN" "pcs:blue:wan" "eth1" -diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network -index 875a1a38ada9fb66503505d2f094310db1295a07..633d4e1b7415983f44164187ad3696311ec25621 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/02_network -+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network -@@ -67,6 +67,7 @@ ar71xx_setup_interfaces() - cap4200ag|\ - cf-e380ac-v1|\ - cf-e380ac-v2|\ -+ cpe210-v2|\ - eap120|\ - eap300v2|\ - eap7660d|\ -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -index 2449a8d6bce17f0a703d8fc4f82dd38e1f861ae3..35532d86ac3ad32630592c79477c79783af4addb 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt -@@ -1301,6 +1301,7 @@ config ATH79_MACH_ARCHER_C7 - config ATH79_MACH_CPE510 - bool "TP-LINK CPE510 support" - select SOC_AR934X -+ select SOC_QCA953X - select ATH79_DEV_ETH - select ATH79_DEV_GPIO_BUTTONS - select ATH79_DEV_LEDS_GPIO -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c -index d2dbed1fe286c44d3188262e984253faaee7edba..ceb1769ddd522d51014228fe65e2662f2f3e627c 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c -+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c -@@ -1,7 +1,8 @@ - /* -- * TP-LINK CPE210/220/510/520 board support -+ * TP-LINK CPE210/210 v2/220/510/520 board support - * - * Copyright (C) 2014 Matthias Schiffer -+ * Copyright (C) 2017 Robert Marko - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published -@@ -41,6 +42,8 @@ - #define CPE510_KEYS_POLL_INTERVAL 20 /* msecs */ - #define CPE510_KEYS_DEBOUNCE_INTERVAL (3 * CPE510_KEYS_POLL_INTERVAL) - -+/* CPE210 v2 reset GPIO */ -+#define CPE210_V2_GPIO_BTN_RESET 17 - - static struct gpio_led cpe510_leds_gpio[] __initdata = { - { -@@ -98,6 +101,30 @@ static struct gpio_led wbs510_leds_gpio[] __initdata = { - }, - }; - -+static struct gpio_led cpe210_v2_leds_gpio[] __initdata = { -+ { -+ .name = "tp-link:green:lan0", -+ .gpio = CPE510_GPIO_LED_LAN0, -+ .active_low = 1, -+ }, { -+ .name = "tp-link:green:link1", -+ .gpio = CPE510_GPIO_LED_L1, -+ .active_low = 1, -+ }, { -+ .name = "tp-link:green:link2", -+ .gpio = CPE510_GPIO_LED_L2, -+ .active_low = 1, -+ }, { -+ .name = "tp-link:green:link3", -+ .gpio = CPE510_GPIO_LED_L3, -+ .active_low = 1, -+ }, { -+ .name = "tp-link:green:link4", -+ .gpio = CPE510_GPIO_LED_L4, -+ .active_low = 1, -+ }, -+}; -+ - static struct gpio_keys_button cpe510_gpio_keys[] __initdata = { - { - .desc = "Reset button", -@@ -109,6 +136,17 @@ static struct gpio_keys_button cpe510_gpio_keys[] __initdata = { - } - }; - -+static struct gpio_keys_button cpe210_v2_gpio_keys[] __initdata = { -+ { -+ .desc = "Reset button", -+ .type = EV_KEY, -+ .code = KEY_RESTART, -+ .debounce_interval = CPE510_KEYS_DEBOUNCE_INTERVAL, -+ .gpio = CPE210_V2_GPIO_BTN_RESET, -+ .active_low = 1, -+ } -+}; -+ - static void __init cpe_setup(u8 *mac) - { - /* Disable JTAG, enabling GPIOs 0-3 */ -@@ -171,9 +209,33 @@ static void __init wbs_setup(void) - ath79_register_wmac(ee, mac); - } - -+static void __init cpe210_v2_setup(void) -+{ -+ u8 *mac = (u8 *) KSEG1ADDR(0x1f830008); -+ u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); -+ -+ ath79_register_leds_gpio(-1, ARRAY_SIZE(cpe210_v2_leds_gpio), -+ cpe210_v2_leds_gpio); -+ ath79_register_gpio_keys_polled(-1, CPE510_KEYS_POLL_INTERVAL, -+ ARRAY_SIZE(cpe210_v2_gpio_keys), -+ cpe210_v2_gpio_keys); -+ ath79_register_m25p80(NULL); -+ ath79_register_mdio(0, 0x0); -+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); -+ ath79_eth0_data.duplex = DUPLEX_FULL; -+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; -+ ath79_eth0_data.speed = SPEED_100; -+ ath79_eth0_data.phy_mask = BIT(4); -+ ath79_register_eth(0); -+ ath79_register_wmac(ee, mac); -+} -+ - MIPS_MACHINE(ATH79_MACH_CPE210, "CPE210", "TP-LINK CPE210/220", - cpe210_setup); - -+MIPS_MACHINE(ATH79_MACH_CPE210_V2, "CPE210V2", "TP-LINK CPE210 v2", -+ cpe210_v2_setup); -+ - MIPS_MACHINE(ATH79_MACH_CPE510, "CPE510", "TP-LINK CPE510/520", - cpe510_setup); - -diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -index a4c7f52fe94e17bc48bebfb460f12f3e5ac35afe..e7e7f94775a3122286dc39447f04b42f4863f313 100644 ---- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h -@@ -64,7 +64,8 @@ enum ath79_mach_type { - ATH79_MACH_CF_E380AC_V2, /* COMFAST CF-E380AC v2 */ - ATH79_MACH_CF_E520N, /* COMFAST CF-E520N */ - ATH79_MACH_CF_E530N, /* COMFAST CF-E530N */ -- ATH79_MACH_CPE210, /* TP-LINK CPE210 */ -+ ATH79_MACH_CPE210, /* TP-LINK CPE210 v1 */ -+ ATH79_MACH_CPE210_V2, /* TP-LINK CPE210 v2 */ - ATH79_MACH_CPE510, /* TP-LINK CPE510 */ - ATH79_MACH_CPE830, /* YunCore CPE830 */ - ATH79_MACH_CPE870, /* YunCore CPE870 */ -diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk -index 6a3faef518ebfa4f36d3074ee9c102b801e04275..b61ef6dc78918dd8d040c0f2bfb6451e5e13ba92 100644 ---- a/target/linux/ar71xx/image/tp-link.mk -+++ b/target/linux/ar71xx/image/tp-link.mk -@@ -164,22 +164,26 @@ define Device/archer-c60-v1 - endef - TARGET_DEVICES += archer-c60-v1 - --define Device/cpe510-520 -- DEVICE_TITLE := TP-LINK CPE510/520 -+define Device/cpexxx - DEVICE_PACKAGES := rssileds - MTDPARTS := spi0.0:128k(u-boot)ro,64k(partition-table)ro,64k(product-info)ro,1792k(kernel),5888k(rootfs),192k(config)ro,64k(ART)ro,7680k@0x40000(firmware) - IMAGE_SIZE := 7680k -- BOARDNAME := CPE510 -- TPLINK_BOARD_NAME := CPE510 - DEVICE_PROFILE := CPE510 - LOADER_TYPE := elf -+ IMAGES := sysupgrade.bin factory.bin -+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade -+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory -+endef -+ -+define Device/cpe510-520 -+ $(Device/cpexxx) -+ DEVICE_TITLE := TP-LINK CPE510/520 v1 -+ BOARDNAME := CPE510 -+ TPLINK_BOARD_NAME := CPE510 - LOADER_FLASH_OFFS := 0x43000 - COMPILE := loader-$(1).elf - COMPILE/loader-$(1).elf := loader-okli-compile - KERNEL := kernel-bin | lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) 12288 -- IMAGES := sysupgrade.bin factory.bin -- IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade -- IMAGE/factory.bin := append-rootfs | tplink-safeloader factory - endef - - define Device/cpe210-220 -@@ -190,6 +194,19 @@ $(Device/cpe510-520) - TPLINK_BOARD_NAME := CPE210 - endef - -+define Device/cpe210-v2 -+ $(Device/cpexxx) -+ DEVICE_TITLE := TP-LINK CPE210 v2 -+ BOARDNAME := CPE210V2 -+ TPLINK_BOARD_NAME := CPE210V2 -+ KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-combined -+ TPLINK_HWID := 0x0 -+ TPLINK_HWREV := 0 -+ TPLINK_HEADER_VERSION := 1 -+ TPLINK_FLASHLAYOUT := 8Mlzma -+endef -+TARGET_DEVICES += cpe210-v2 -+ - define Device/wbs210 - $(Device/cpe510-520) - DEVICE_TITLE := TP-LINK WBS210 -diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c -index 23b69f3bd0eb66aca650eb2ffd7d5cd2a7cb5194..e6ecc5b2c52c1627c8b998fa731b50ed39649f96 100644 ---- a/tools/firmware-utils/src/tplink-safeloader.c -+++ b/tools/firmware-utils/src/tplink-safeloader.c -@@ -154,6 +154,48 @@ static struct device_info boards[] = { - .last_sysupgrade_partition = "support-list", - }, - -+ /** Firmware layout for the CPE210 V2 */ -+ { -+ .id = "CPE210V2", -+ .vendor = "CPE210(TP-LINK|UN|N300-2|00000000):2.0\r\n", -+ .support_list = -+ "SupportList:\r\n" -+ "CPE210(TP-LINK|EU|N300-2|00000000):2.0\r\n" -+ "CPE210(TP-LINK|EU|N300-2|45550000):2.0\r\n" -+ "CPE210(TP-LINK|EU|N300-2|55530000):2.0\r\n" -+ "CPE210(TP-LINK|UN|N300-2|00000000):2.0\r\n" -+ "CPE210(TP-LINK|UN|N300-2|45550000):2.0\r\n" -+ "CPE210(TP-LINK|UN|N300-2|55530000):2.0\r\n" -+ "CPE210(TP-LINK|US|N300-2|55530000):2.0\r\n" -+ "CPE210(TP-LINK|UN|N300-2):2.0\r\n" -+ "CPE210(TP-LINK|EU|N300-2):2.0\r\n" -+ "CPE210(TP-LINK|US|N300-2):2.0\r\n", -+ .support_trail = '\xff', -+ .soft_ver = NULL, -+ -+ .partitions = { -+ {"fs-uboot", 0x00000, 0x20000}, -+ {"partition-table", 0x20000, 0x02000}, -+ {"default-mac", 0x30000, 0x00020}, -+ {"product-info", 0x31100, 0x00100}, -+ {"device-info", 0x31400, 0x00400}, -+ {"signature", 0x32000, 0x00400}, -+ {"device-id", 0x33000, 0x00100}, -+ {"os-image", 0x40000, 0x1c0000}, -+ {"file-system", 0x200000, 0x5b0000}, -+ {"soft-version", 0x7b0000, 0x00100}, -+ {"support-list", 0x7b1000, 0x01000}, -+ {"user-config", 0x7c0000, 0x10000}, -+ {"default-config", 0x7d0000, 0x10000}, -+ {"log", 0x7e0000, 0x10000}, -+ {"radio", 0x7f0000, 0x10000}, -+ {NULL, 0, 0} -+ }, -+ -+ .first_sysupgrade_partition = "os-image", -+ .last_sysupgrade_partition = "support-list", -+ }, -+ - /** Firmware layout for the CPE510/520 */ - { - .id = "CPE510", diff --git a/patches/lede/0101-ar71xx-use-Power-LED-as-Diag-LED-on-FRITZBox-4020.patch b/patches/lede/0101-ar71xx-use-Power-LED-as-Diag-LED-on-FRITZBox-4020.patch deleted file mode 100644 index 96567055..00000000 --- a/patches/lede/0101-ar71xx-use-Power-LED-as-Diag-LED-on-FRITZBox-4020.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: David Bauer -Date: Fri, 8 Jun 2018 21:42:52 +0200 -Subject: ar71xx: use Power-LED as Diag-LED on FRITZBox 4020 - -This commit makes use of the Power-LED as Diag-LED, allowing the LED to -work as a status indicator. - -Signed-off-by: David Bauer - -diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds -index 54046dffc9a4d4ad0216dcda32bf98ee5d38b569..e163e3171a747c3756c376c4a92b1bc50baa8eaa 100755 ---- a/target/linux/ar71xx/base-files/etc/board.d/01_leds -+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds -@@ -315,7 +315,6 @@ dlan-pro-1200-ac) - ucidef_set_led_gpio "plcr" "dLAN" "devolo:error:dlan" "16" "0" - ;; - fritz4020) -- ucidef_set_led_default "power" "Power" "$board:green:power" "1" - ucidef_set_led_netdev "lan" "LAN" "$board:green:lan" "eth1" - ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" - ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" -diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh -index f8d2eb314f7b57a1134b68c504c0dac202ed947c..8002e9702720a431dd38c598cb8f1f3284d3af1c 100644 ---- a/target/linux/ar71xx/base-files/etc/diag.sh -+++ b/target/linux/ar71xx/base-files/etc/diag.sh -@@ -55,6 +55,7 @@ get_status_led() { - archer-c58-v1|\ - archer-c59-v1|\ - archer-c60-v1|\ -+ fritz4020|\ - mr12|\ - mr16|\ - nbg6616|\ diff --git a/patches/lede/0002-procd-add-support-for-alternative-rc.d-directories.patch b/patches/openwrt/0001-procd-add-support-for-alternative-rc.d-directories.patch similarity index 100% rename from patches/lede/0002-procd-add-support-for-alternative-rc.d-directories.patch rename to patches/openwrt/0001-procd-add-support-for-alternative-rc.d-directories.patch diff --git a/patches/lede/0003-base-files-disable-reset-button-handling.patch b/patches/openwrt/0002-base-files-disable-reset-button-handling.patch similarity index 100% rename from patches/lede/0003-base-files-disable-reset-button-handling.patch rename to patches/openwrt/0002-base-files-disable-reset-button-handling.patch diff --git a/patches/lede/0004-hostapd-prevent-channel-switch-for-5GHz.patch b/patches/openwrt/0003-hostapd-prevent-channel-switch-for-5GHz.patch similarity index 100% rename from patches/lede/0004-hostapd-prevent-channel-switch-for-5GHz.patch rename to patches/openwrt/0003-hostapd-prevent-channel-switch-for-5GHz.patch diff --git a/patches/lede/0005-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch b/patches/openwrt/0004-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch similarity index 100% rename from patches/lede/0005-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch rename to patches/openwrt/0004-libjson-c-Add-support-for-custom-format-strings-for-doubles.patch diff --git a/patches/lede/0006-dropbear-add-a-failsafe-mode-that-will-always-allow-password-less-root-login.patch b/patches/openwrt/0005-dropbear-add-a-failsafe-mode-that-will-always-allow-password-less-root-login.patch similarity index 100% rename from patches/lede/0006-dropbear-add-a-failsafe-mode-that-will-always-allow-password-less-root-login.patch rename to patches/openwrt/0005-dropbear-add-a-failsafe-mode-that-will-always-allow-password-less-root-login.patch diff --git a/patches/lede/0028-generic-vxlan-backport-support-for-VXLAN-over-link-local-IPv6.patch b/patches/openwrt/0006-generic-vxlan-backport-support-for-VXLAN-over-link-local-IPv6-to-4.9.patch similarity index 55% rename from patches/lede/0028-generic-vxlan-backport-support-for-VXLAN-over-link-local-IPv6.patch rename to patches/openwrt/0006-generic-vxlan-backport-support-for-VXLAN-over-link-local-IPv6-to-4.9.patch index 43bbf105..f5804564 100644 --- a/patches/lede/0028-generic-vxlan-backport-support-for-VXLAN-over-link-local-IPv6.patch +++ b/patches/openwrt/0006-generic-vxlan-backport-support-for-VXLAN-over-link-local-IPv6-to-4.9.patch @@ -1,15 +1,17 @@ From: Matthias Schiffer -Date: Wed, 21 Jun 2017 00:54:57 +0200 -Subject: generic: vxlan: backport support for VXLAN over link-local IPv6 +Date: Tue, 9 Jan 2018 22:38:19 +0100 +Subject: generic: vxlan: backport support for VXLAN over link-local IPv6 to 4.9 -diff --git a/target/linux/generic/patches-4.4/075-0001-vxlan-improve-validation-of-address-family-configura.patch b/target/linux/generic/patches-4.4/075-0001-vxlan-improve-validation-of-address-family-configura.patch +Signed-off-by: Matthias Schiffer + +diff --git a/target/linux/generic/backport-4.9/095-0001-vxlan-improve-validation-of-address-family-configura.patch b/target/linux/generic/backport-4.9/095-0001-vxlan-improve-validation-of-address-family-configura.patch new file mode 100644 -index 0000000000000000000000000000000000000000..439eb5d0f769f1cde23ff4deacc80728e82605f2 +index 0000000000000000000000000000000000000000..2114562536675cd59450928f591e70d66f8fc7b9 --- /dev/null -+++ b/target/linux/generic/patches-4.4/075-0001-vxlan-improve-validation-of-address-family-configura.patch -@@ -0,0 +1,68 @@ -+From 434a1bb54b24b538f81d7945128b7ca25976d19b Mon Sep 17 00:00:00 2001 -+Message-Id: <434a1bb54b24b538f81d7945128b7ca25976d19b.1498005061.git.mschiffer@universe-factory.net> ++++ b/target/linux/generic/backport-4.9/095-0001-vxlan-improve-validation-of-address-family-configura.patch +@@ -0,0 +1,73 @@ ++From f45ba82cd83d27b5d44d3dc417e0e480ba0d3703 Mon Sep 17 00:00:00 2001 ++Message-Id: +From: Matthias Schiffer +Date: Mon, 19 Jun 2017 10:03:57 +0200 +Subject: [PATCH 1/4] vxlan: improve validation of address family configuration @@ -22,14 +24,16 @@ index 0000000000000000000000000000000000000000..439eb5d0f769f1cde23ff4deacc80728 + +Signed-off-by: Matthias Schiffer +Signed-off-by: David S. Miller -+[Matthias Schiffer: rebase to v4.4.y] ++[Matthias Schiffer: rebase to v4.9.y] +--- + drivers/net/vxlan.c | 23 +++++++++++++++-------- + 1 file changed, 15 insertions(+), 8 deletions(-) + ++diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c ++index 983e941bdf29..fbe8da7fa296 100644 +--- a/drivers/net/vxlan.c ++++ b/drivers/net/vxlan.c -+@@ -2784,12 +2784,20 @@ static int vxlan_dev_configure(struct ne ++@@ -2867,12 +2867,20 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev, + + memcpy(&dst->remote_ip, &conf->remote_ip, sizeof(conf->remote_ip)); + @@ -54,7 +58,7 @@ index 0000000000000000000000000000000000000000..439eb5d0f769f1cde23ff4deacc80728 + if (!IS_ENABLED(CONFIG_IPV6)) + return -EPFNOSUPPORT; + use_ipv6 = true; -+@@ -2843,11 +2851,9 @@ static int vxlan_dev_configure(struct ne ++@@ -2938,11 +2946,9 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev, + + list_for_each_entry(tmp, &vn->vxlan_list, next) { + if (tmp->cfg.vni == conf->vni && @@ -62,13 +66,13 @@ index 0000000000000000000000000000000000000000..439eb5d0f769f1cde23ff4deacc80728 +- tmp->cfg.saddr.sa.sa_family == AF_INET6) == use_ipv6 && + tmp->cfg.dst_port == vxlan->cfg.dst_port && +- (tmp->flags & VXLAN_F_RCV_FLAGS) == -+- (vxlan->flags & VXLAN_F_RCV_FLAGS)) ++- (vxlan->flags & VXLAN_F_RCV_FLAGS)) { ++ (tmp->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6)) == -++ (vxlan->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6))) -+ return -EEXIST; -+ } -+ -+@@ -2915,6 +2921,7 @@ static int vxlan_newlink(struct net *src +++ (vxlan->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6))) { ++ pr_info("duplicate VNI %u\n", be32_to_cpu(conf->vni)); ++ return -EEXIST; ++ } ++@@ -2987,6 +2993,7 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev, + + if (data[IFLA_VXLAN_GROUP]) { + conf.remote_ip.sin.sin_addr.s_addr = nla_get_in_addr(data[IFLA_VXLAN_GROUP]); @@ -76,16 +80,19 @@ index 0000000000000000000000000000000000000000..439eb5d0f769f1cde23ff4deacc80728 + } else if (data[IFLA_VXLAN_GROUP6]) { + if (!IS_ENABLED(CONFIG_IPV6)) + return -EPFNOSUPPORT; -diff --git a/target/linux/generic/patches-4.4/075-0002-vxlan-check-valid-combinations-of-address-scopes.patch b/target/linux/generic/patches-4.4/075-0002-vxlan-check-valid-combinations-of-address-scopes.patch ++-- ++2.15.1 ++ +diff --git a/target/linux/generic/backport-4.9/095-0002-vxlan-check-valid-combinations-of-address-scopes.patch b/target/linux/generic/backport-4.9/095-0002-vxlan-check-valid-combinations-of-address-scopes.patch new file mode 100644 -index 0000000000000000000000000000000000000000..abf9b8a0eae88aa5a64be5cc82a6827d4d562c55 +index 0000000000000000000000000000000000000000..b38b9977bca192eafe9a0d9b8c36a120b3a2c590 --- /dev/null -+++ b/target/linux/generic/patches-4.4/075-0002-vxlan-check-valid-combinations-of-address-scopes.patch -@@ -0,0 +1,84 @@ -+From 8956b9db43347a51e88dddc3c08fb88ff60dea54 Mon Sep 17 00:00:00 2001 -+Message-Id: <8956b9db43347a51e88dddc3c08fb88ff60dea54.1498005061.git.mschiffer@universe-factory.net> -+In-Reply-To: <434a1bb54b24b538f81d7945128b7ca25976d19b.1498005061.git.mschiffer@universe-factory.net> -+References: <434a1bb54b24b538f81d7945128b7ca25976d19b.1498005061.git.mschiffer@universe-factory.net> ++++ b/target/linux/generic/backport-4.9/095-0002-vxlan-check-valid-combinations-of-address-scopes.patch +@@ -0,0 +1,91 @@ ++From 0eb4ccfc77e07fb4bfc7b1778a7ecb136b47aba4 Mon Sep 17 00:00:00 2001 ++Message-Id: <0eb4ccfc77e07fb4bfc7b1778a7ecb136b47aba4.1515533863.git.mschiffer@universe-factory.net> ++In-Reply-To: ++References: +From: Matthias Schiffer +Date: Mon, 19 Jun 2017 10:03:58 +0200 +Subject: [PATCH 2/4] vxlan: check valid combinations of address scopes @@ -100,15 +107,17 @@ index 0000000000000000000000000000000000000000..abf9b8a0eae88aa5a64be5cc82a6827d + +Signed-off-by: Matthias Schiffer +Signed-off-by: David S. Miller -+[Matthias Schiffer: rebase to v4.4.y] ++[Matthias Schiffer: rebase to v4.9.y] +--- + drivers/net/vxlan.c | 29 +++++++++++++++++++++++++++++ + include/net/vxlan.h | 1 + + 2 files changed, 30 insertions(+) + ++diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c ++index fbe8da7fa296..863d9528b900 100644 +--- a/drivers/net/vxlan.c ++++ b/drivers/net/vxlan.c -+@@ -2797,11 +2797,35 @@ static int vxlan_dev_configure(struct ne ++@@ -2880,11 +2880,35 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev, + if (conf->saddr.sa.sa_family != dst->remote_ip.sa.sa_family) + return -EINVAL; + @@ -143,11 +152,11 @@ index 0000000000000000000000000000000000000000..abf9b8a0eae88aa5a64be5cc82a6827d ++ } + } + -+ if (conf->remote_ifindex) { -+@@ -2827,6 +2851,11 @@ static int vxlan_dev_configure(struct ne -+ dev->mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM); -+ -+ needed_headroom = lowerdev->hard_header_len; ++ if (conf->label && !use_ipv6) { ++@@ -2918,6 +2942,11 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev, ++ } else if (vxlan_addr_multicast(&dst->remote_ip)) { ++ pr_info("multicast destination requires interface to be specified\n"); ++ return -EINVAL; ++ } else { ++#if IS_ENABLED(CONFIG_IPV6) ++ if (vxlan->flags & VXLAN_F_IPV6_LINKLOCAL) @@ -156,26 +165,31 @@ index 0000000000000000000000000000000000000000..abf9b8a0eae88aa5a64be5cc82a6827d + } + + if (conf->mtu) { ++diff --git a/include/net/vxlan.h b/include/net/vxlan.h ++index 9fce47e3e13e..c1c0d03e3456 100644 +--- a/include/net/vxlan.h ++++ b/include/net/vxlan.h -+@@ -185,6 +185,7 @@ struct vxlan_dev { -+ #define VXLAN_F_GBP 0x800 ++@@ -267,6 +267,7 @@ struct vxlan_dev { + #define VXLAN_F_REMCSUM_NOPARTIAL 0x1000 + #define VXLAN_F_COLLECT_METADATA 0x2000 ++ #define VXLAN_F_GPE 0x4000 ++#define VXLAN_F_IPV6_LINKLOCAL 0x8000 + + /* Flags that are used in the receive path. These flags must match in + * order for a socket to be shareable -diff --git a/target/linux/generic/patches-4.4/075-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch b/target/linux/generic/patches-4.4/075-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch ++-- ++2.15.1 ++ +diff --git a/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch b/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch new file mode 100644 -index 0000000000000000000000000000000000000000..5ebbce6e0682fff11b0d86c8df781a5c2fab5125 +index 0000000000000000000000000000000000000000..dcfd1ce7c2f015354d21a65f12f6ebd00331b629 --- /dev/null -+++ b/target/linux/generic/patches-4.4/075-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch -@@ -0,0 +1,88 @@ -+From e3bdb4bc6c4020e90c1bbafd91645ff3ae8966b9 Mon Sep 17 00:00:00 2001 -+Message-Id: -+In-Reply-To: <434a1bb54b24b538f81d7945128b7ca25976d19b.1498005061.git.mschiffer@universe-factory.net> -+References: <434a1bb54b24b538f81d7945128b7ca25976d19b.1498005061.git.mschiffer@universe-factory.net> ++++ b/target/linux/generic/backport-4.9/095-0003-vxlan-fix-snooping-for-link-local-IPv6-addresses.patch +@@ -0,0 +1,93 @@ ++From 010b2b541d958e12d78ba1c79734c700f169610b Mon Sep 17 00:00:00 2001 ++Message-Id: <010b2b541d958e12d78ba1c79734c700f169610b.1515533863.git.mschiffer@universe-factory.net> ++In-Reply-To: ++References: +From: Matthias Schiffer +Date: Mon, 19 Jun 2017 10:03:59 +0200 +Subject: [PATCH 3/4] vxlan: fix snooping for link-local IPv6 addresses @@ -190,14 +204,16 @@ index 0000000000000000000000000000000000000000..5ebbce6e0682fff11b0d86c8df781a5c + +Signed-off-by: Matthias Schiffer +Signed-off-by: David S. Miller -+[Matthias Schiffer: rebase to v4.4.y] ++[Matthias Schiffer: rebase to v4.9.y] +--- + drivers/net/vxlan.c | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + ++diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c ++index 863d9528b900..c28c6f34b3b3 100644 +--- a/drivers/net/vxlan.c ++++ b/drivers/net/vxlan.c -+@@ -947,16 +947,25 @@ out: ++@@ -917,16 +917,25 @@ static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb, + * Return true if packet is bogus and should be dropped. + */ + static bool vxlan_snoop(struct net_device *dev, @@ -225,7 +241,7 @@ index 0000000000000000000000000000000000000000..5ebbce6e0682fff11b0d86c8df781a5c + return false; + + /* Don't migrate static entries, drop packets */ -+@@ -982,7 +991,7 @@ static bool vxlan_snoop(struct net_devic ++@@ -952,7 +961,7 @@ static bool vxlan_snoop(struct net_device *dev, + NLM_F_EXCL|NLM_F_CREATE, + vxlan->cfg.dst_port, + vxlan->default_dst.remote_vni, @@ -234,24 +250,24 @@ index 0000000000000000000000000000000000000000..5ebbce6e0682fff11b0d86c8df781a5c + spin_unlock(&vxlan->hash_lock); + } + -+@@ -1157,6 +1166,7 @@ static void vxlan_rcv(struct vxlan_sock -+ struct vxlan_dev *vxlan; -+ struct pcpu_sw_netstats *stats; ++@@ -1223,6 +1232,7 @@ static bool vxlan_set_mac(struct vxlan_dev *vxlan, ++ struct sk_buff *skb) ++ { + union vxlan_addr saddr; ++ u32 ifindex = skb->dev->ifindex; -+ int err = 0; + -+ /* For flow based devices, map all packets to VNI 0 */ -+@@ -1196,7 +1206,7 @@ static void vxlan_rcv(struct vxlan_sock ++ skb_reset_mac_header(skb); ++ skb->protocol = eth_type_trans(skb, vxlan->dev); ++@@ -1244,7 +1254,7 @@ static bool vxlan_set_mac(struct vxlan_dev *vxlan, + } + + if ((vxlan->flags & VXLAN_F_LEARN) && +- vxlan_snoop(skb->dev, &saddr, eth_hdr(skb)->h_source)) ++ vxlan_snoop(skb->dev, &saddr, eth_hdr(skb)->h_source, ifindex)) -+ goto drop; ++ return false; + -+ skb_reset_network_header(skb); -+@@ -1898,7 +1908,7 @@ static void vxlan_encap_bypass(struct sk ++ return true; ++@@ -1932,7 +1942,7 @@ static void vxlan_encap_bypass(struct sk_buff *skb, struct vxlan_dev *src_vxlan, + } + + if (dst_vxlan->flags & VXLAN_F_LEARN) @@ -260,16 +276,19 @@ index 0000000000000000000000000000000000000000..5ebbce6e0682fff11b0d86c8df781a5c + + u64_stats_update_begin(&tx_stats->syncp); + tx_stats->tx_packets++; -diff --git a/target/linux/generic/patches-4.4/075-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch b/target/linux/generic/patches-4.4/075-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch ++-- ++2.15.1 ++ +diff --git a/target/linux/generic/backport-4.9/095-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch b/target/linux/generic/backport-4.9/095-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch new file mode 100644 -index 0000000000000000000000000000000000000000..c184c32385e6c802f1bed7647ce720f0e429f4a5 +index 0000000000000000000000000000000000000000..18ae230a3b04d2b57184109fa14f9533f0fb7192 --- /dev/null -+++ b/target/linux/generic/patches-4.4/075-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch -@@ -0,0 +1,168 @@ -+From 7a1fa05f8d460e2a81cb724f441f7346f950680a Mon Sep 17 00:00:00 2001 -+Message-Id: <7a1fa05f8d460e2a81cb724f441f7346f950680a.1498005061.git.mschiffer@universe-factory.net> -+In-Reply-To: <434a1bb54b24b538f81d7945128b7ca25976d19b.1498005061.git.mschiffer@universe-factory.net> -+References: <434a1bb54b24b538f81d7945128b7ca25976d19b.1498005061.git.mschiffer@universe-factory.net> ++++ b/target/linux/generic/backport-4.9/095-0004-vxlan-allow-multiple-VXLANs-with-same-VNI-for-IPv6-l.patch +@@ -0,0 +1,182 @@ ++From 95583c75a95449dade713e1dad4ed0a8dcc1b391 Mon Sep 17 00:00:00 2001 ++Message-Id: <95583c75a95449dade713e1dad4ed0a8dcc1b391.1515533863.git.mschiffer@universe-factory.net> ++In-Reply-To: ++References: +From: Matthias Schiffer +Date: Mon, 19 Jun 2017 10:04:00 +0200 +Subject: [PATCH 4/4] vxlan: allow multiple VXLANs with same VNI for IPv6 @@ -286,105 +305,111 @@ index 0000000000000000000000000000000000000000..c184c32385e6c802f1bed7647ce720f0 + +Signed-off-by: Matthias Schiffer +Signed-off-by: David S. Miller -+[Matthias Schiffer: rebase to v4.4.y] ++[Matthias Schiffer: rebase to v4.9.y] +--- -+ drivers/net/vxlan.c | 53 +++++++++++++++++++++++++++++++++++++---------------- -+ 1 file changed, 37 insertions(+), 16 deletions(-) ++ drivers/net/vxlan.c | 60 ++++++++++++++++++++++++++++++++++++----------------- ++ 1 file changed, 41 insertions(+), 19 deletions(-) + ++diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c ++index c28c6f34b3b3..9208e3d9ec43 100644 +--- a/drivers/net/vxlan.c ++++ b/drivers/net/vxlan.c -+@@ -242,22 +242,33 @@ static struct vxlan_sock *vxlan_find_soc ++@@ -225,7 +225,8 @@ static struct vxlan_sock *vxlan_find_sock(struct net *net, sa_family_t family, + return NULL; + } + -+-static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, u32 id) ++-static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, __be32 vni) ++static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, int ifindex, -++ u32 id) +++ __be32 vni) + { -+ struct vxlan_dev *vxlan; ++ struct vxlan_dev_node *node; + -+ hlist_for_each_entry_rcu(vxlan, vni_head(vs, id), hlist) { -+- if (vxlan->default_dst.remote_vni == id) -+- return vxlan; -++ if (vxlan->default_dst.remote_vni != id) ++@@ -234,17 +235,27 @@ static struct vxlan_dev *vxlan_vs_find_vni(struct vxlan_sock *vs, __be32 vni) ++ vni = 0; ++ ++ hlist_for_each_entry_rcu(node, vni_head(vs, vni), hlist) { ++- if (node->vxlan->default_dst.remote_vni == vni) ++- return node->vxlan; +++ if (node->vxlan->default_dst.remote_vni != vni) ++ continue; ++ ++ if (IS_ENABLED(CONFIG_IPV6)) { -++ const struct vxlan_config *cfg = &vxlan->cfg; +++ const struct vxlan_config *cfg = &node->vxlan->cfg; ++ -++ if ((vxlan->flags & VXLAN_F_IPV6_LINKLOCAL) && +++ if ((node->vxlan->flags & VXLAN_F_IPV6_LINKLOCAL) && ++ cfg->remote_ifindex != ifindex) ++ continue; ++ } ++ -++ return vxlan; +++ return node->vxlan; + } + + return NULL; + } + + /* Look up VNI in a per net namespace table */ -+-static struct vxlan_dev *vxlan_find_vni(struct net *net, u32 id, ++-static struct vxlan_dev *vxlan_find_vni(struct net *net, __be32 vni, +- sa_family_t family, __be16 port, +- u32 flags) ++static struct vxlan_dev *vxlan_find_vni(struct net *net, int ifindex, -++ u32 id, sa_family_t family, +++ __be32 vni, sa_family_t family, ++ __be16 port, u32 flags) + { + struct vxlan_sock *vs; + -+@@ -265,7 +276,7 @@ static struct vxlan_dev *vxlan_find_vni( ++@@ -252,7 +263,7 @@ static struct vxlan_dev *vxlan_find_vni(struct net *net, __be32 vni, + if (!vs) + return NULL; + -+- return vxlan_vs_find_vni(vs, id); -++ return vxlan_vs_find_vni(vs, ifindex, id); ++- return vxlan_vs_find_vni(vs, vni); +++ return vxlan_vs_find_vni(vs, ifindex, vni); + } + + /* Fill in neighbour message in skbuff. */ -+@@ -1174,7 +1185,7 @@ static void vxlan_rcv(struct vxlan_sock -+ vni = 0; ++@@ -1317,7 +1328,8 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb) ++ if (!vs) ++ goto drop; + -+ /* Is this VNI defined? */ -+- vxlan = vxlan_vs_find_vni(vs, vni); -++ vxlan = vxlan_vs_find_vni(vs, skb->dev->ifindex, vni); ++- vxlan = vxlan_vs_find_vni(vs, vxlan_vni(vxlan_hdr(skb)->vx_vni)); +++ vxlan = vxlan_vs_find_vni(vs, skb->dev->ifindex, +++ vxlan_vni(vxlan_hdr(skb)->vx_vni)); + if (!vxlan) + goto drop; + -+@@ -1942,6 +1953,7 @@ static void vxlan_xmit_one(struct sk_buf -+ u32 vni; ++@@ -1976,6 +1988,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, ++ __be32 vni, label; + __be16 df = 0; + __u8 tos, ttl; ++ int ifindex; + int err; + u32 flags = vxlan->flags; -+ -+@@ -1950,6 +1962,7 @@ static void vxlan_xmit_one(struct sk_buf ++ bool udp_sum = false; ++@@ -1987,6 +2000,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, + if (rdst) { + dst_port = rdst->remote_port ? rdst->remote_port : vxlan->cfg.dst_port; + vni = rdst->remote_vni; ++ ifindex = rdst->remote_ifindex; + dst = &rdst->remote_ip; -+ } else { -+ if (!info) { -+@@ -1959,6 +1972,7 @@ static void vxlan_xmit_one(struct sk_buf ++ local_ip = vxlan->cfg.saddr; ++ dst_cache = &rdst->dst_cache; ++@@ -1998,6 +2012,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, + } + dst_port = info->key.tp_dst ? : vxlan->cfg.dst_port; -+ vni = be64_to_cpu(info->key.tun_id); ++ vni = tunnel_id_to_key32(info->key.tun_id); ++ ifindex = 0; + remote_ip.sa.sa_family = ip_tunnel_info_af(info); -+ if (remote_ip.sa.sa_family == AF_INET) ++ if (remote_ip.sa.sa_family == AF_INET) { + remote_ip.sin.sin_addr.s_addr = info->key.u.ipv4.dst; -+@@ -2015,7 +2029,7 @@ static void vxlan_xmit_one(struct sk_buf -+ } ++@@ -2053,7 +2068,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, ++ sk = sock4->sock->sk; + -+ memset(&fl4, 0, sizeof(fl4)); -+- fl4.flowi4_oif = rdst ? rdst->remote_ifindex : 0; -++ fl4.flowi4_oif = ifindex; -+ fl4.flowi4_tos = RT_TOS(tos); -+ fl4.flowi4_mark = skb->mark; -+ fl4.flowi4_proto = IPPROTO_UDP; -+@@ -2043,7 +2057,7 @@ static void vxlan_xmit_one(struct sk_buf ++ rt = vxlan_get_route(vxlan, skb, ++- rdst ? rdst->remote_ifindex : 0, tos, +++ ifindex, tos, ++ dst->sin.sin_addr.s_addr, ++ &local_ip.sin.sin_addr.s_addr, ++ dst_cache, info); ++@@ -2077,7 +2092,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, + struct vxlan_dev *dst_vxlan; + + ip_rt_put(rt); @@ -393,17 +418,16 @@ index 0000000000000000000000000000000000000000..c184c32385e6c802f1bed7647ce720f0 + dst->sa.sa_family, dst_port, + vxlan->flags); + if (!dst_vxlan) -+@@ -2076,8 +2090,7 @@ static void vxlan_xmit_one(struct sk_buf -+ goto drop; -+ sk = vxlan->vn6_sock->sock->sk; ++@@ -2112,7 +2127,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, ++ sk = sock6->sock->sk; + -+- ndst = vxlan6_get_route(vxlan, skb, -+- rdst ? rdst->remote_ifindex : 0, -++ ndst = vxlan6_get_route(vxlan, skb, ifindex, -+ &dst->sin6.sin6_addr, &saddr); -+ if (IS_ERR(ndst)) { -+ netdev_dbg(dev, "no route to %pI6\n", -+@@ -2101,7 +2114,7 @@ static void vxlan_xmit_one(struct sk_buf ++ ndst = vxlan6_get_route(vxlan, skb, ++- rdst ? rdst->remote_ifindex : 0, tos, +++ ifindex, tos, ++ label, &dst->sin6.sin6_addr, ++ &local_ip.sin6.sin6_addr, ++ dst_cache, info); ++@@ -2138,7 +2153,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, + struct vxlan_dev *dst_vxlan; + + dst_release(ndst); @@ -412,25 +436,34 @@ index 0000000000000000000000000000000000000000..c184c32385e6c802f1bed7647ce720f0 + dst->sa.sa_family, dst_port, + vxlan->flags); + if (!dst_vxlan) -+@@ -2889,10 +2902,18 @@ static int vxlan_dev_configure(struct ne ++@@ -2984,13 +2999,20 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev, + vxlan->cfg.age_interval = FDB_AGE_DEFAULT; + + list_for_each_entry(tmp, &vn->vxlan_list, next) { +- if (tmp->cfg.vni == conf->vni && +- tmp->cfg.dst_port == vxlan->cfg.dst_port && +- (tmp->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6)) == ++- (vxlan->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6))) { ++- pr_info("duplicate VNI %u\n", be32_to_cpu(conf->vni)); ++- return -EEXIST; ++- } ++ if (tmp->cfg.vni != conf->vni) ++ continue; ++ if (tmp->cfg.dst_port != vxlan->cfg.dst_port) ++ continue; ++ if ((tmp->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6)) != -+ (vxlan->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6))) +++ (vxlan->flags & (VXLAN_F_RCV_FLAGS | VXLAN_F_IPV6))) ++ continue; ++ ++ if ((vxlan->flags & VXLAN_F_IPV6_LINKLOCAL) && ++ tmp->cfg.remote_ifindex != vxlan->cfg.remote_ifindex) ++ continue; ++ -+ return -EEXIST; +++ pr_info("duplicate VNI %u\n", be32_to_cpu(conf->vni)); +++ return -EEXIST; + } + ++ dev->ethtool_ops = &vxlan_ethtool_ops; ++-- ++2.15.1 ++ diff --git a/patches/openwrt/0007-kernel-ebtables-add-support-for-ICMP-IGMP-type-matches.patch b/patches/openwrt/0007-kernel-ebtables-add-support-for-ICMP-IGMP-type-matches.patch new file mode 100644 index 00000000..b21691ac --- /dev/null +++ b/patches/openwrt/0007-kernel-ebtables-add-support-for-ICMP-IGMP-type-matches.patch @@ -0,0 +1,502 @@ +From: Matthias Schiffer +Date: Thu, 12 Apr 2018 07:50:02 +0200 +Subject: kernel: ebtables: add support for ICMP/IGMP type matches + +Signed-off-by: Matthias Schiffer + +diff --git a/target/linux/generic/backport-4.14/096-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch b/target/linux/generic/backport-4.14/096-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch +new file mode 100644 +index 0000000000000000000000000000000000000000..9e4d90fb3b8e2c91e4adf0e0efdb3f4575b5027d +--- /dev/null ++++ b/target/linux/generic/backport-4.14/096-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch +@@ -0,0 +1,141 @@ ++From: Matthias Schiffer ++Date: Sat, 3 Mar 2018 11:55:21 +0100 ++Subject: [PATCH 1/2] ebtables: add support for matching ICMP type and code ++ ++We already have ICMPv6 type/code matches. This adds support for IPv4 ICMP ++matches in the same way. ++ ++Signed-off-by: Matthias Schiffer ++--- ++ include/uapi/linux/netfilter_bridge/ebt_ip.h | 13 +++++++-- ++ net/bridge/netfilter/ebt_ip.c | 43 +++++++++++++++++++++------- ++ 2 files changed, 43 insertions(+), 13 deletions(-) ++ ++diff --git a/include/uapi/linux/netfilter_bridge/ebt_ip.h b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++index 8e462fb1983f..4ed7fbb0a482 100644 ++--- a/include/uapi/linux/netfilter_bridge/ebt_ip.h +++++ b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++@@ -24,8 +24,9 @@ ++ #define EBT_IP_PROTO 0x08 ++ #define EBT_IP_SPORT 0x10 ++ #define EBT_IP_DPORT 0x20 +++#define EBT_IP_ICMP 0x40 ++ #define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\ ++- EBT_IP_SPORT | EBT_IP_DPORT ) +++ EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP) ++ #define EBT_IP_MATCH "ip" ++ ++ /* the same values are used for the invflags */ ++@@ -38,8 +39,14 @@ struct ebt_ip_info { ++ __u8 protocol; ++ __u8 bitmask; ++ __u8 invflags; ++- __u16 sport[2]; ++- __u16 dport[2]; +++ union { +++ __u16 sport[2]; +++ __u8 icmp_type[2]; +++ }; +++ union { +++ __u16 dport[2]; +++ __u8 icmp_code[2]; +++ }; ++ }; ++ ++ #endif ++diff --git a/net/bridge/netfilter/ebt_ip.c b/net/bridge/netfilter/ebt_ip.c ++index 2b46c50abce0..8cb8f8395768 100644 ++--- a/net/bridge/netfilter/ebt_ip.c +++++ b/net/bridge/netfilter/ebt_ip.c ++@@ -19,9 +19,15 @@ ++ #include ++ #include ++ ++-struct tcpudphdr { ++- __be16 src; ++- __be16 dst; +++union pkthdr { +++ struct { +++ __be16 src; +++ __be16 dst; +++ } tcpudphdr; +++ struct { +++ u8 type; +++ u8 code; +++ } icmphdr; ++ }; ++ ++ static bool ++@@ -30,8 +36,8 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ const struct ebt_ip_info *info = par->matchinfo; ++ const struct iphdr *ih; ++ struct iphdr _iph; ++- const struct tcpudphdr *pptr; ++- struct tcpudphdr _ports; +++ const union pkthdr *pptr; +++ union pkthdr _pkthdr; ++ ++ ih = skb_header_pointer(skb, 0, sizeof(_iph), &_iph); ++ if (ih == NULL) ++@@ -50,29 +56,38 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ if (info->bitmask & EBT_IP_PROTO) { ++ if (NF_INVF(info, EBT_IP_PROTO, info->protocol != ih->protocol)) ++ return false; ++- if (!(info->bitmask & EBT_IP_DPORT) && ++- !(info->bitmask & EBT_IP_SPORT)) +++ if (!(info->bitmask & (EBT_IP_DPORT | EBT_IP_SPORT | +++ EBT_IP_ICMP))) ++ return true; ++ if (ntohs(ih->frag_off) & IP_OFFSET) ++ return false; +++ +++ /* min icmp headersize is 4, so sizeof(_pkthdr) is ok. */ ++ pptr = skb_header_pointer(skb, ih->ihl*4, ++- sizeof(_ports), &_ports); +++ sizeof(_pkthdr), &_pkthdr); ++ if (pptr == NULL) ++ return false; ++ if (info->bitmask & EBT_IP_DPORT) { ++- u32 dst = ntohs(pptr->dst); +++ u32 dst = ntohs(pptr->tcpudphdr.dst); ++ if (NF_INVF(info, EBT_IP_DPORT, ++ dst < info->dport[0] || ++ dst > info->dport[1])) ++ return false; ++ } ++ if (info->bitmask & EBT_IP_SPORT) { ++- u32 src = ntohs(pptr->src); +++ u32 src = ntohs(pptr->tcpudphdr.src); ++ if (NF_INVF(info, EBT_IP_SPORT, ++ src < info->sport[0] || ++ src > info->sport[1])) ++ return false; ++ } +++ if ((info->bitmask & EBT_IP_ICMP) && +++ NF_INVF(info, EBT_IP_ICMP, +++ pptr->icmphdr.type < info->icmp_type[0] || +++ pptr->icmphdr.type > info->icmp_type[1] || +++ pptr->icmphdr.code < info->icmp_code[0] || +++ pptr->icmphdr.code > info->icmp_code[1])) +++ return false; ++ } ++ return true; ++ } ++@@ -101,6 +116,14 @@ static int ebt_ip_mt_check(const struct xt_mtchk_param *par) ++ return -EINVAL; ++ if (info->bitmask & EBT_IP_SPORT && info->sport[0] > info->sport[1]) ++ return -EINVAL; +++ if (info->bitmask & EBT_IP_ICMP) { +++ if ((info->invflags & EBT_IP_PROTO) || +++ info->protocol != IPPROTO_ICMP) +++ return -EINVAL; +++ if (info->icmp_type[0] > info->icmp_type[1] || +++ info->icmp_code[0] > info->icmp_code[1]) +++ return -EINVAL; +++ } ++ return 0; ++ } ++ ++-- ++2.16.2 ++ +diff --git a/target/linux/generic/backport-4.14/096-0002-ebtables-add-support-for-matching-IGMP-type.patch b/target/linux/generic/backport-4.14/096-0002-ebtables-add-support-for-matching-IGMP-type.patch +new file mode 100644 +index 0000000000000000000000000000000000000000..35b93adc802c2850cd6ee218c3d7d6f6c53bba29 +--- /dev/null ++++ b/target/linux/generic/backport-4.14/096-0002-ebtables-add-support-for-matching-IGMP-type.patch +@@ -0,0 +1,95 @@ ++From: Matthias Schiffer ++Date: Sat, 3 Mar 2018 12:02:21 +0100 ++Subject: [PATCH 2/2] ebtables: add support for matching IGMP type ++ ++We already have ICMPv6 type/code matches (which can be used to distinguish ++different types of MLD packets). Add support for IPv4 IGMP matches in the ++same way. ++ ++Signed-off-by: Matthias Schiffer ++--- ++ include/uapi/linux/netfilter_bridge/ebt_ip.h | 4 +++- ++ net/bridge/netfilter/ebt_ip.c | 19 +++++++++++++++++-- ++ 2 files changed, 20 insertions(+), 3 deletions(-) ++ ++diff --git a/include/uapi/linux/netfilter_bridge/ebt_ip.h b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++index 4ed7fbb0a482..46d6261370b0 100644 ++--- a/include/uapi/linux/netfilter_bridge/ebt_ip.h +++++ b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++@@ -25,8 +25,9 @@ ++ #define EBT_IP_SPORT 0x10 ++ #define EBT_IP_DPORT 0x20 ++ #define EBT_IP_ICMP 0x40 +++#define EBT_IP_IGMP 0x80 ++ #define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\ ++- EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP) +++ EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP | EBT_IP_IGMP) ++ #define EBT_IP_MATCH "ip" ++ ++ /* the same values are used for the invflags */ ++@@ -42,6 +43,7 @@ struct ebt_ip_info { ++ union { ++ __u16 sport[2]; ++ __u8 icmp_type[2]; +++ __u8 igmp_type[2]; ++ }; ++ union { ++ __u16 dport[2]; ++diff --git a/net/bridge/netfilter/ebt_ip.c b/net/bridge/netfilter/ebt_ip.c ++index 8cb8f8395768..ffaa8ce2e724 100644 ++--- a/net/bridge/netfilter/ebt_ip.c +++++ b/net/bridge/netfilter/ebt_ip.c ++@@ -28,6 +28,9 @@ union pkthdr { ++ u8 type; ++ u8 code; ++ } icmphdr; +++ struct { +++ u8 type; +++ } igmphdr; ++ }; ++ ++ static bool ++@@ -57,12 +60,12 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ if (NF_INVF(info, EBT_IP_PROTO, info->protocol != ih->protocol)) ++ return false; ++ if (!(info->bitmask & (EBT_IP_DPORT | EBT_IP_SPORT | ++- EBT_IP_ICMP))) +++ EBT_IP_ICMP | EBT_IP_IGMP))) ++ return true; ++ if (ntohs(ih->frag_off) & IP_OFFSET) ++ return false; ++ ++- /* min icmp headersize is 4, so sizeof(_pkthdr) is ok. */ +++ /* min icmp/igmp headersize is 4, so sizeof(_pkthdr) is ok. */ ++ pptr = skb_header_pointer(skb, ih->ihl*4, ++ sizeof(_pkthdr), &_pkthdr); ++ if (pptr == NULL) ++@@ -88,6 +91,11 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ pptr->icmphdr.code < info->icmp_code[0] || ++ pptr->icmphdr.code > info->icmp_code[1])) ++ return false; +++ if ((info->bitmask & EBT_IP_IGMP) && +++ NF_INVF(info, EBT_IP_IGMP, +++ pptr->igmphdr.type < info->igmp_type[0] || +++ pptr->igmphdr.type > info->igmp_type[1])) +++ return false; ++ } ++ return true; ++ } ++@@ -124,6 +132,13 @@ static int ebt_ip_mt_check(const struct xt_mtchk_param *par) ++ info->icmp_code[0] > info->icmp_code[1]) ++ return -EINVAL; ++ } +++ if (info->bitmask & EBT_IP_IGMP) { +++ if ((info->invflags & EBT_IP_PROTO) || +++ info->protocol != IPPROTO_IGMP) +++ return -EINVAL; +++ if (info->igmp_type[0] > info->igmp_type[1]) +++ return -EINVAL; +++ } ++ return 0; ++ } ++ ++-- ++2.16.2 ++ +diff --git a/target/linux/generic/backport-4.9/096-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch b/target/linux/generic/backport-4.9/096-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch +new file mode 100644 +index 0000000000000000000000000000000000000000..db82fd6b69b3c4e279f39db7ca4b415498457e75 +--- /dev/null ++++ b/target/linux/generic/backport-4.9/096-0001-ebtables-add-support-for-matching-ICMP-type-and-code.patch +@@ -0,0 +1,141 @@ ++From: Matthias Schiffer ++Date: Sat, 3 Mar 2018 11:55:21 +0100 ++Subject: [PATCH 1/2] ebtables: add support for matching ICMP type and code ++ ++We already have ICMPv6 type/code matches. This adds support for IPv4 ICMP ++matches in the same way. ++ ++Signed-off-by: Matthias Schiffer ++--- ++ include/uapi/linux/netfilter_bridge/ebt_ip.h | 13 +++++++-- ++ net/bridge/netfilter/ebt_ip.c | 43 +++++++++++++++++++++------- ++ 2 files changed, 43 insertions(+), 13 deletions(-) ++ ++diff --git a/include/uapi/linux/netfilter_bridge/ebt_ip.h b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++index c4bbc41b0ea4..63a2860ae1e3 100644 ++--- a/include/uapi/linux/netfilter_bridge/ebt_ip.h +++++ b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++@@ -23,8 +23,9 @@ ++ #define EBT_IP_PROTO 0x08 ++ #define EBT_IP_SPORT 0x10 ++ #define EBT_IP_DPORT 0x20 +++#define EBT_IP_ICMP 0x40 ++ #define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\ ++- EBT_IP_SPORT | EBT_IP_DPORT ) +++ EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP) ++ #define EBT_IP_MATCH "ip" ++ ++ /* the same values are used for the invflags */ ++@@ -37,8 +38,14 @@ struct ebt_ip_info { ++ __u8 protocol; ++ __u8 bitmask; ++ __u8 invflags; ++- __u16 sport[2]; ++- __u16 dport[2]; +++ union { +++ __u16 sport[2]; +++ __u8 icmp_type[2]; +++ }; +++ union { +++ __u16 dport[2]; +++ __u8 icmp_code[2]; +++ }; ++ }; ++ ++ #endif ++diff --git a/net/bridge/netfilter/ebt_ip.c b/net/bridge/netfilter/ebt_ip.c ++index d06968bdf5ec..e4fc77072b27 100644 ++--- a/net/bridge/netfilter/ebt_ip.c +++++ b/net/bridge/netfilter/ebt_ip.c ++@@ -19,9 +19,15 @@ ++ #include ++ #include ++ ++-struct tcpudphdr { ++- __be16 src; ++- __be16 dst; +++union pkthdr { +++ struct { +++ __be16 src; +++ __be16 dst; +++ } tcpudphdr; +++ struct { +++ u8 type; +++ u8 code; +++ } icmphdr; ++ }; ++ ++ static bool ++@@ -30,8 +36,8 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ const struct ebt_ip_info *info = par->matchinfo; ++ const struct iphdr *ih; ++ struct iphdr _iph; ++- const struct tcpudphdr *pptr; ++- struct tcpudphdr _ports; +++ const union pkthdr *pptr; +++ union pkthdr _pkthdr; ++ ++ ih = skb_header_pointer(skb, 0, sizeof(_iph), &_iph); ++ if (ih == NULL) ++@@ -50,29 +56,38 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ if (info->bitmask & EBT_IP_PROTO) { ++ if (NF_INVF(info, EBT_IP_PROTO, info->protocol != ih->protocol)) ++ return false; ++- if (!(info->bitmask & EBT_IP_DPORT) && ++- !(info->bitmask & EBT_IP_SPORT)) +++ if (!(info->bitmask & (EBT_IP_DPORT | EBT_IP_SPORT | +++ EBT_IP_ICMP))) ++ return true; ++ if (ntohs(ih->frag_off) & IP_OFFSET) ++ return false; +++ +++ /* min icmp headersize is 4, so sizeof(_pkthdr) is ok. */ ++ pptr = skb_header_pointer(skb, ih->ihl*4, ++- sizeof(_ports), &_ports); +++ sizeof(_pkthdr), &_pkthdr); ++ if (pptr == NULL) ++ return false; ++ if (info->bitmask & EBT_IP_DPORT) { ++- u32 dst = ntohs(pptr->dst); +++ u32 dst = ntohs(pptr->tcpudphdr.dst); ++ if (NF_INVF(info, EBT_IP_DPORT, ++ dst < info->dport[0] || ++ dst > info->dport[1])) ++ return false; ++ } ++ if (info->bitmask & EBT_IP_SPORT) { ++- u32 src = ntohs(pptr->src); +++ u32 src = ntohs(pptr->tcpudphdr.src); ++ if (NF_INVF(info, EBT_IP_SPORT, ++ src < info->sport[0] || ++ src > info->sport[1])) ++ return false; ++ } +++ if ((info->bitmask & EBT_IP_ICMP) && +++ NF_INVF(info, EBT_IP_ICMP, +++ pptr->icmphdr.type < info->icmp_type[0] || +++ pptr->icmphdr.type > info->icmp_type[1] || +++ pptr->icmphdr.code < info->icmp_code[0] || +++ pptr->icmphdr.code > info->icmp_code[1])) +++ return false; ++ } ++ return true; ++ } ++@@ -101,6 +116,14 @@ static int ebt_ip_mt_check(const struct xt_mtchk_param *par) ++ return -EINVAL; ++ if (info->bitmask & EBT_IP_SPORT && info->sport[0] > info->sport[1]) ++ return -EINVAL; +++ if (info->bitmask & EBT_IP_ICMP) { +++ if ((info->invflags & EBT_IP_PROTO) || +++ info->protocol != IPPROTO_ICMP) +++ return -EINVAL; +++ if (info->icmp_type[0] > info->icmp_type[1] || +++ info->icmp_code[0] > info->icmp_code[1]) +++ return -EINVAL; +++ } ++ return 0; ++ } ++ ++-- ++2.16.2 ++ +diff --git a/target/linux/generic/backport-4.9/096-0002-ebtables-add-support-for-matching-IGMP-type.patch b/target/linux/generic/backport-4.9/096-0002-ebtables-add-support-for-matching-IGMP-type.patch +new file mode 100644 +index 0000000000000000000000000000000000000000..5750b612fc0f322e0a257f3229b5b698328b428b +--- /dev/null ++++ b/target/linux/generic/backport-4.9/096-0002-ebtables-add-support-for-matching-IGMP-type.patch +@@ -0,0 +1,95 @@ ++From: Matthias Schiffer ++Date: Sat, 3 Mar 2018 12:02:21 +0100 ++Subject: [PATCH 2/2] ebtables: add support for matching IGMP type ++ ++We already have ICMPv6 type/code matches (which can be used to distinguish ++different types of MLD packets). Add support for IPv4 IGMP matches in the ++same way. ++ ++Signed-off-by: Matthias Schiffer ++--- ++ include/uapi/linux/netfilter_bridge/ebt_ip.h | 4 +++- ++ net/bridge/netfilter/ebt_ip.c | 19 +++++++++++++++++-- ++ 2 files changed, 20 insertions(+), 3 deletions(-) ++ ++diff --git a/include/uapi/linux/netfilter_bridge/ebt_ip.h b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++index 63a2860ae1e3..ae5d4d108418 100644 ++--- a/include/uapi/linux/netfilter_bridge/ebt_ip.h +++++ b/include/uapi/linux/netfilter_bridge/ebt_ip.h ++@@ -24,8 +24,9 @@ ++ #define EBT_IP_SPORT 0x10 ++ #define EBT_IP_DPORT 0x20 ++ #define EBT_IP_ICMP 0x40 +++#define EBT_IP_IGMP 0x80 ++ #define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\ ++- EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP) +++ EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP | EBT_IP_IGMP) ++ #define EBT_IP_MATCH "ip" ++ ++ /* the same values are used for the invflags */ ++@@ -41,6 +42,7 @@ struct ebt_ip_info { ++ union { ++ __u16 sport[2]; ++ __u8 icmp_type[2]; +++ __u8 igmp_type[2]; ++ }; ++ union { ++ __u16 dport[2]; ++diff --git a/net/bridge/netfilter/ebt_ip.c b/net/bridge/netfilter/ebt_ip.c ++index e4fc77072b27..57fbb13cb8e0 100644 ++--- a/net/bridge/netfilter/ebt_ip.c +++++ b/net/bridge/netfilter/ebt_ip.c ++@@ -28,6 +28,9 @@ union pkthdr { ++ u8 type; ++ u8 code; ++ } icmphdr; +++ struct { +++ u8 type; +++ } igmphdr; ++ }; ++ ++ static bool ++@@ -57,12 +60,12 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ if (NF_INVF(info, EBT_IP_PROTO, info->protocol != ih->protocol)) ++ return false; ++ if (!(info->bitmask & (EBT_IP_DPORT | EBT_IP_SPORT | ++- EBT_IP_ICMP))) +++ EBT_IP_ICMP | EBT_IP_IGMP))) ++ return true; ++ if (ntohs(ih->frag_off) & IP_OFFSET) ++ return false; ++ ++- /* min icmp headersize is 4, so sizeof(_pkthdr) is ok. */ +++ /* min icmp/igmp headersize is 4, so sizeof(_pkthdr) is ok. */ ++ pptr = skb_header_pointer(skb, ih->ihl*4, ++ sizeof(_pkthdr), &_pkthdr); ++ if (pptr == NULL) ++@@ -88,6 +91,11 @@ ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par) ++ pptr->icmphdr.code < info->icmp_code[0] || ++ pptr->icmphdr.code > info->icmp_code[1])) ++ return false; +++ if ((info->bitmask & EBT_IP_IGMP) && +++ NF_INVF(info, EBT_IP_IGMP, +++ pptr->igmphdr.type < info->igmp_type[0] || +++ pptr->igmphdr.type > info->igmp_type[1])) +++ return false; ++ } ++ return true; ++ } ++@@ -124,6 +132,13 @@ static int ebt_ip_mt_check(const struct xt_mtchk_param *par) ++ info->icmp_code[0] > info->icmp_code[1]) ++ return -EINVAL; ++ } +++ if (info->bitmask & EBT_IP_IGMP) { +++ if ((info->invflags & EBT_IP_PROTO) || +++ info->protocol != IPPROTO_IGMP) +++ return -EINVAL; +++ if (info->igmp_type[0] > info->igmp_type[1]) +++ return -EINVAL; +++ } ++ return 0; ++ } ++ ++-- ++2.16.2 ++ diff --git a/patches/openwrt/0008-scripts-feeds-add-src-dummy-method.patch b/patches/openwrt/0008-scripts-feeds-add-src-dummy-method.patch new file mode 100644 index 00000000..a33ed514 --- /dev/null +++ b/patches/openwrt/0008-scripts-feeds-add-src-dummy-method.patch @@ -0,0 +1,34 @@ +From: Matthias Schiffer +Date: Mon, 9 Jul 2018 22:00:27 +0200 +Subject: scripts/feeds: add src-dummy method + +The src-dummy method does not actually obtain any feed, but it can be used +to insert addtional entries into the opkg distfeeds.conf. + +Signed-off-by: Matthias Schiffer + +diff --git a/scripts/feeds b/scripts/feeds +index 7613d3a107e4666b30cab2d3dad2ed64b6bcabc3..b29e1d5c353d23c8f0afc81fb0f1ec37e1f2a521 100755 +--- a/scripts/feeds ++++ b/scripts/feeds +@@ -59,7 +59,8 @@ sub parse_config() { + my $valid = 1; + $line[0] =~ /^src-[\w-]+$/ or $valid = 0; + $line[1] =~ /^\w+$/ or $valid = 0; +- @src = split /\s+/, $line[2]; ++ @src = split /\s+/, ($line[2] or ''); ++ @src = ('') if @src == 0; + $valid or die "Syntax error in feeds.conf, line: $line\n"; + + $name{$line[1]} and die "Duplicate feed name '$line[1]', line: $line\n"; +@@ -127,6 +128,10 @@ my %update_method = ( + 'init' => "ln -s '%s' '%s'", + 'update' => "", + 'revision' => "echo -n 'local'"}, ++ 'src-dummy' => { ++ 'init' => "true '%s' && mkdir '%s'", ++ 'update' => "", ++ 'revision' => "echo -n 'dummy'"}, + 'src-git' => { + 'init' => "git clone --depth 1 '%s' '%s'", + 'init_branch' => "git clone --depth 1 --branch '%s' '%s' '%s'", diff --git a/patches/openwrt/0009-include-feeds.mk-always-add-available-feeds-to-PACKAGE_SUBDIRS.patch b/patches/openwrt/0009-include-feeds.mk-always-add-available-feeds-to-PACKAGE_SUBDIRS.patch new file mode 100644 index 00000000..f33c2d3a --- /dev/null +++ b/patches/openwrt/0009-include-feeds.mk-always-add-available-feeds-to-PACKAGE_SUBDIRS.patch @@ -0,0 +1,34 @@ +From: Matthias Schiffer +Date: Mon, 9 Jul 2018 22:13:19 +0200 +Subject: include/feeds.mk: always add available feeds to PACKAGE_SUBDIRS + +Setting CONFIG_FEED_... symbols combined two different effects: Disabling +a feed in the generated opkg distfeeds.conf, and omitting the feed from +PACKAGE_SUBDIRS. + +It does not make sense to omit built feeds from PACKAGE_SUBDIRS, as it will +only lead to packages that can be enabled in .config (and that will +consequently be built) not to be found during rootfs creation, breaking +the build. All feeds that packages are emitted to should simply always be +added to PACKAGE_SUBDIRS instead; the CONFIG_FEED_... only configure the +generated distfeeds.conf like this. + +Signed-off-by: Matthias Schiffer + +diff --git a/include/feeds.mk b/include/feeds.mk +index cecd30424f19525fc7bbb606b45c1e5baf9e8157..c9ffa95a368a72fd43a7e688b7ee1b274ade2916 100644 +--- a/include/feeds.mk ++++ b/include/feeds.mk +@@ -16,11 +16,7 @@ FEEDS_DISABLED:=$(filter-out $(FEEDS_ENABLED),$(FEEDS_AVAILABLE)) + PACKAGE_SUBDIRS=$(PACKAGE_DIR) + ifneq ($(CONFIG_PER_FEED_REPO),) + PACKAGE_SUBDIRS += $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/base +- ifneq ($(CONFIG_PER_FEED_REPO_ADD_DISABLED),) +- PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED)) +- else +- PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_ENABLED),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED)) +- endif ++ PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED)) + endif + + opkg_package_files = $(wildcard \ diff --git a/patches/openwrt/0010-base-files-fix-feed-list-in-PKG_CONFIG_DEPENDS.patch b/patches/openwrt/0010-base-files-fix-feed-list-in-PKG_CONFIG_DEPENDS.patch new file mode 100644 index 00000000..b34a0dc2 --- /dev/null +++ b/patches/openwrt/0010-base-files-fix-feed-list-in-PKG_CONFIG_DEPENDS.patch @@ -0,0 +1,22 @@ +From: Matthias Schiffer +Date: Mon, 9 Jul 2018 23:50:28 +0200 +Subject: base-files: fix feed list in PKG_CONFIG_DEPENDS + +FEEDS_ENABLED and FEEDS_DISABLED are derived from FEEDS_AVAILABLE, not +FEEDS_INSTALLED. + +Signed-off-by: Matthias Schiffer + +diff --git a/package/base-files/Makefile b/package/base-files/Makefile +index 7175daec3a0a1a3ecd08ceee4d06e2c0eae4b29a..ef29798d5de855e35d178cb02f356bb3e77a9bd0 100644 +--- a/package/base-files/Makefile ++++ b/package/base-files/Makefile +@@ -27,7 +27,7 @@ PKG_CONFIG_DEPENDS += \ + CONFIG_PER_FEED_REPO \ + CONFIG_PER_FEED_REPO_ADD_DISABLED \ + CONFIG_PER_FEED_REPO_ADD_COMMENTED \ +- $(foreach feed,$(FEEDS_INSTALLED),CONFIG_FEED_$(feed)) ++ $(foreach feed,$(FEEDS_AVAILABLE),CONFIG_FEED_$(feed)) + + include $(INCLUDE_DIR)/package.mk + diff --git a/patches/openwrt/0011-include-feeds.mk-rework-generation-of-opkg-distfeeds.conf.patch b/patches/openwrt/0011-include-feeds.mk-rework-generation-of-opkg-distfeeds.conf.patch new file mode 100644 index 00000000..a51e8d32 --- /dev/null +++ b/patches/openwrt/0011-include-feeds.mk-rework-generation-of-opkg-distfeeds.conf.patch @@ -0,0 +1,93 @@ +From: Matthias Schiffer +Date: Tue, 10 Jul 2018 00:00:01 +0200 +Subject: include/feeds.mk: rework generation of opkg distfeeds.conf + +Allow enabling/commenting/disabling each feed individually by using a +tristate config symbol. + +Signed-off-by: Matthias Schiffer + +diff --git a/include/feeds.mk b/include/feeds.mk +index c9ffa95a368a72fd43a7e688b7ee1b274ade2916..3e0801e656bfa4d14ccd22db23a059d46cdc558c 100644 +--- a/include/feeds.mk ++++ b/include/feeds.mk +@@ -10,8 +10,6 @@ + + FEEDS_INSTALLED:=$(notdir $(wildcard $(TOPDIR)/package/feeds/*)) + FEEDS_AVAILABLE:=$(sort $(FEEDS_INSTALLED) $(shell $(SCRIPT_DIR)/feeds list -n)) +-FEEDS_ENABLED:=$(foreach feed,$(FEEDS_AVAILABLE),$(if $(CONFIG_FEED_$(feed)),$(feed))) +-FEEDS_DISABLED:=$(filter-out $(FEEDS_ENABLED),$(FEEDS_AVAILABLE)) + + PACKAGE_SUBDIRS=$(PACKAGE_DIR) + ifneq ($(CONFIG_PER_FEED_REPO),) +@@ -35,10 +33,11 @@ endef + # 1: destination file + define FeedSourcesAppend + ( \ +- echo "src/gz %d_core %U/targets/%S/packages"; \ ++ echo 'src/gz %d_core %U/targets/%S/packages'; \ ++ echo 'src/gz %d_base %U/packages/%A/base'; \ + $(strip $(if $(CONFIG_PER_FEED_REPO), \ +- $(foreach feed,base $(FEEDS_ENABLED),echo "src/gz %d_$(feed) %U/packages/%A/$(feed)";) \ +- $(if $(CONFIG_PER_FEED_REPO_ADD_DISABLED), \ +- $(foreach feed,$(FEEDS_DISABLED),echo "$(if $(CONFIG_PER_FEED_REPO_ADD_COMMENTED),# )src/gz %d_$(feed) %U/packages/%A/$(feed)";)))) \ ++ $(foreach feed,$(FEEDS_AVAILABLE), \ ++ $(if $(CONFIG_FEED_$(feed)), \ ++ echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )src/gz %d_$(feed) %U/packages/%A/$(feed)';)))) \ + ) >> $(1) + endef +diff --git a/package/base-files/Makefile b/package/base-files/Makefile +index ef29798d5de855e35d178cb02f356bb3e77a9bd0..4842a45a41afac0f21b63ee2f1a71a443b234141 100644 +--- a/package/base-files/Makefile ++++ b/package/base-files/Makefile +@@ -25,8 +25,6 @@ PKG_CONFIG_DEPENDS += \ + CONFIG_NAND_SUPPORT \ + CONFIG_CLEAN_IPKG \ + CONFIG_PER_FEED_REPO \ +- CONFIG_PER_FEED_REPO_ADD_DISABLED \ +- CONFIG_PER_FEED_REPO_ADD_COMMENTED \ + $(foreach feed,$(FEEDS_AVAILABLE),CONFIG_FEED_$(feed)) + + include $(INCLUDE_DIR)/package.mk +diff --git a/package/base-files/image-config.in b/package/base-files/image-config.in +index 5ee2d3e4e320d337a0fb0f46ae4649ae847cd6c2..cee8cd54e1239a3dd424fa86df8fac3eaa1d31b8 100644 +--- a/package/base-files/image-config.in ++++ b/package/base-files/image-config.in +@@ -268,18 +268,4 @@ menuconfig PER_FEED_REPO + If set, a separate repository is generated within bin/*/packages/ + for the core packages and each enabled feed. + +- config PER_FEED_REPO_ADD_DISABLED +- bool "Add available but not enabled feeds to opkg.conf" +- default y +- depends on PER_FEED_REPO +- help +- Add not installed or disabled feeds from feeds.conf to opkg.conf. +- +- config PER_FEED_REPO_ADD_COMMENTED +- bool "Comment out not enabled feeds" +- default !BUILDBOT +- depends on PER_FEED_REPO && PER_FEED_REPO_ADD_DISABLED +- help +- Add not enabled feeds as commented out source lines to opkg.conf. +- + source "tmp/.config-feeds.in" +diff --git a/scripts/feeds b/scripts/feeds +index b29e1d5c353d23c8f0afc81fb0f1ec37e1f2a521..304ef6cbafd141ff98d6a8afe5de5b371a4cb2a7 100755 +--- a/scripts/feeds ++++ b/scripts/feeds +@@ -824,11 +824,12 @@ sub feed_config() { + my $installed = (-f "feeds/$feed->[1].index"); + + printf "\tconfig FEED_%s\n", $feed->[1]; +- printf "\t\tbool \"Enable feed %s\"\n", $feed->[1]; ++ printf "\t\ttristate \"Enable feed %s\"\n", $feed->[1]; + printf "\t\tdepends on PER_FEED_REPO\n"; + printf "\t\tdefault y\n" if $installed; + printf "\t\thelp\n"; +- printf "\t\t Enable the \\\"%s\\\" feed at %s.\n", $feed->[1], $feed->[2][0]; ++ printf "\t\t Enable the \\\"%s\\\" feed in opkg distfeeds.conf.\n", $feed->[1]; ++ printf "\t\t Say M to add the feed commented out.\n"; + printf "\n"; + } + diff --git a/scripts/clean_output.sh b/scripts/clean_output.sh index f6c967c5..1b025fdd 100755 --- a/scripts/clean_output.sh +++ b/scripts/clean_output.sh @@ -2,19 +2,19 @@ set -e -[ "$LEDE_TARGET" ] || exit 1 +[ "$OPENWRT_TARGET" ] || exit 1 . scripts/common.inc.sh -if [ "$(expr match "$LEDE_TARGET" '.*-.*')" -gt 0 ]; then - LEDE_BINDIR="${LEDE_TARGET//-/\/}" +if [ "$(expr match "$OPENWRT_TARGET" '.*-.*')" -gt 0 ]; then + OPENWRT_BINDIR="${OPENWRT_TARGET//-/\/}" else - LEDE_BINDIR="${LEDE_TARGET}/generic" + OPENWRT_BINDIR="${OPENWRT_TARGET}/generic" fi -rm -f "lede/bin/targets/${LEDE_BINDIR}"/* 2>/dev/null || true +rm -f "openwrt/bin/targets/${OPENWRT_BINDIR}"/* 2>/dev/null || true # Full builds will output the "packages" directory, so clean up first -[ "$DEVICES" ] || rm -rf "lede/bin/targets/${LEDE_BINDIR}/packages" +[ "$DEVICES" ] || rm -rf "openwrt/bin/targets/${OPENWRT_BINDIR}/packages" diff --git a/scripts/copy_output.sh b/scripts/copy_output.sh index 0917746d..8966e49e 100755 --- a/scripts/copy_output.sh +++ b/scripts/copy_output.sh @@ -2,7 +2,7 @@ set -e -[ "$GLUON_IMAGEDIR" -a "$GLUON_PACKAGEDIR" -a "$LEDE_TARGET" -a "$GLUON_RELEASE" -a "$GLUON_SITEDIR" ] || exit 1 +[ "$GLUON_IMAGEDIR" -a "$GLUON_PACKAGEDIR" -a "$OPENWRT_TARGET" -a "$GLUON_RELEASE" -a "$GLUON_SITEDIR" ] || exit 1 default_factory_ext='.bin' @@ -24,10 +24,10 @@ no_opkg= mkdir -p "${GLUON_IMAGEDIR}/factory" "${GLUON_IMAGEDIR}/sysupgrade" -if [ "$(expr match "$LEDE_TARGET" '.*-.*')" -gt 0 ]; then - LEDE_BINDIR="${LEDE_TARGET//-/\/}" +if [ "$(expr match "$OPENWRT_TARGET" '.*-.*')" -gt 0 ]; then + OPENWRT_BINDIR="${OPENWRT_TARGET//-/\/}" else - LEDE_BINDIR="${LEDE_TARGET}/generic" + OPENWRT_BINDIR="${OPENWRT_TARGET}/generic" fi SITE_CODE="$(scripts/site.sh site_code)" @@ -39,7 +39,7 @@ copy() { if [ "$factory_ext" ]; then rm -f "${GLUON_IMAGEDIR}/factory/gluon-"*"-${output}${factory_ext}" - cp "lede/bin/targets/${LEDE_BINDIR}/lede-${LEDE_TARGET}${profile}${factory_suffix}${factory_ext}" \ + cp "openwrt/bin/targets/${OPENWRT_BINDIR}/openwrt-${OPENWRT_TARGET}${profile}${factory_suffix}${factory_ext}" \ "${GLUON_IMAGEDIR}/factory/gluon-${SITE_CODE}-${GLUON_RELEASE}-${output}${factory_ext}" for alias in $aliases; do @@ -51,7 +51,7 @@ copy() { if [ "$sysupgrade_ext" ]; then rm -f "${GLUON_IMAGEDIR}/sysupgrade/gluon-"*"-${output}-sysupgrade${sysupgrade_ext}" - cp "lede/bin/targets/${LEDE_BINDIR}/lede-${LEDE_TARGET}${profile}${sysupgrade_suffix}${sysupgrade_ext}" \ + cp "openwrt/bin/targets/${OPENWRT_BINDIR}/openwrt-${OPENWRT_TARGET}${profile}${sysupgrade_suffix}${sysupgrade_ext}" \ "${GLUON_IMAGEDIR}/sysupgrade/gluon-${SITE_CODE}-${GLUON_RELEASE}-${output}-sysupgrade${sysupgrade_ext}" for alias in $aliases; do @@ -157,8 +157,8 @@ no_opkg() { # Copy opkg repo if [ -z "$no_opkg" -a -z "$DEVICES" ]; then - rm -f "$GLUON_PACKAGEDIR"/*/"$LEDE_BINDIR"/* - rmdir -p "$GLUON_PACKAGEDIR"/*/"$LEDE_BINDIR" 2>/dev/null || true - mkdir -p "${GLUON_PACKAGEDIR}/${PACKAGE_PREFIX}/${LEDE_BINDIR}" - cp "lede/bin/targets/${LEDE_BINDIR}/packages"/* "${GLUON_PACKAGEDIR}/${PACKAGE_PREFIX}/${LEDE_BINDIR}" + rm -f "$GLUON_PACKAGEDIR"/*/"$OPENWRT_BINDIR"/* + rmdir -p "$GLUON_PACKAGEDIR"/*/"$OPENWRT_BINDIR" 2>/dev/null || true + mkdir -p "${GLUON_PACKAGEDIR}/${PACKAGE_PREFIX}/${OPENWRT_BINDIR}" + cp "openwrt/bin/targets/${OPENWRT_BINDIR}/packages"/* "${GLUON_PACKAGEDIR}/${PACKAGE_PREFIX}/${OPENWRT_BINDIR}" fi diff --git a/scripts/feeds.sh b/scripts/feeds.sh index dd833e8c..b5857eb7 100755 --- a/scripts/feeds.sh +++ b/scripts/feeds.sh @@ -4,27 +4,20 @@ set -e . scripts/modules.sh -FEEDS="$GLUON_SITE_FEEDS $GLUON_FEEDS" + +rm -rf openwrt/tmp +rm -rf openwrt/feeds +rm -rf openwrt/package/feeds ( - cat lede/feeds.conf.default - echo 'src-link gluon ../../package' + echo 'src-link gluon_base ../../package' for feed in $FEEDS; do - echo "src-link packages_$feed ../../packages/$feed" + echo "src-link $feed ../../packages/$feed" done -) > lede/feeds.conf + for feed in $(echo "$DEFAULT_FEEDS" | grep -vxF "$FEEDS"); do + echo "src-dummy $feed" + done +) > openwrt/feeds.conf -rm -rf lede/tmp -rm -rf lede/feeds -rm -rf lede/package/feeds - -mkdir -p lede/overlay -rm -f lede/overlay/gluon -ln -s ../../overlay lede/overlay/gluon - -lede/scripts/feeds update 'gluon' -for feed in $FEEDS; do - lede/scripts/feeds update "packages_$feed" -done - -lede/scripts/feeds install -a +openwrt/scripts/feeds update -a +openwrt/scripts/feeds install -a diff --git a/scripts/modules.sh b/scripts/modules.sh index 09b7b0fc..dcb1bd44 100644 --- a/scripts/modules.sh +++ b/scripts/modules.sh @@ -1,8 +1,11 @@ . ./modules [ ! -f "$GLUON_SITEDIR"/modules ] || . "$GLUON_SITEDIR"/modules -GLUON_MODULES=lede +FEEDS="$(echo $GLUON_FEEDS $GLUON_SITE_FEEDS | tr ' ' '\n')" +DEFAULT_FEEDS="$(awk '{print $2}' openwrt/feeds.conf.default)" -for feed in $GLUON_SITE_FEEDS $GLUON_FEEDS; do +GLUON_MODULES=openwrt + +for feed in $FEEDS; do GLUON_MODULES="$GLUON_MODULES packages/$feed" done diff --git a/scripts/site.sh b/scripts/site.sh index 11da1676..76f39524 100755 --- a/scripts/site.sh +++ b/scripts/site.sh @@ -1,4 +1,4 @@ #!/bin/sh export GLUON_SITE_CONFIG=site.conf -exec lede/staging_dir/hostpkg/bin/lua -e "print(assert(dofile('scripts/site_config.lua').$1))" 2>/dev/null +exec openwrt/staging_dir/hostpkg/bin/lua -e "print(assert(dofile('scripts/site_config.lua').$1))" 2>/dev/null diff --git a/scripts/target_config.sh b/scripts/target_config.sh index 66db26e4..7ffa6403 100755 --- a/scripts/target_config.sh +++ b/scripts/target_config.sh @@ -2,7 +2,7 @@ set -e -[ "$LEDE_TARGET" ] || exit 1 +[ "$OPENWRT_TARGET" ] || exit 1 target="$1" packages=$2 @@ -14,7 +14,7 @@ default_packages= profile_packages= -LEDE_CONFIG_TARGET="${LEDE_TARGET//-/_}" +OPENWRT_CONFIG_TARGET="${OPENWRT_TARGET//-/_}" emit() { @@ -27,8 +27,8 @@ emit() { [ "${package:0:1}" = '-' ] || echo "CONFIG_PACKAGE_${package}=m" done - echo "CONFIG_TARGET_DEVICE_${LEDE_CONFIG_TARGET}_DEVICE_${profile}=y" - echo "CONFIG_TARGET_DEVICE_PACKAGES_${LEDE_CONFIG_TARGET}_DEVICE_${profile}=\"${profile_packages}\"" + echo "CONFIG_TARGET_DEVICE_${OPENWRT_CONFIG_TARGET}_DEVICE_${profile}=y" + echo "CONFIG_TARGET_DEVICE_PACKAGES_${OPENWRT_CONFIG_TARGET}_DEVICE_${profile}=\"${profile_packages}\"" } diff --git a/scripts/target_config_check.sh b/scripts/target_config_check.sh index c9ae0528..bfdc51bb 100755 --- a/scripts/target_config_check.sh +++ b/scripts/target_config_check.sh @@ -2,7 +2,7 @@ set -e -[ "$LEDE_TARGET" ] || exit 1 +[ "$OPENWRT_TARGET" ] || exit 1 target="$1" packages=$2 @@ -11,7 +11,7 @@ output= ret=0 -LEDE_CONFIG_TARGET="${LEDE_TARGET//-/_}" +OPENWRT_CONFIG_TARGET="${OPENWRT_TARGET//-/_}" fail() { @@ -26,7 +26,7 @@ fail() { } check_config() { - grep -q "$1" lede/.config + grep -q "$1" openwrt/.config } check_package() { @@ -58,7 +58,7 @@ device() { profile="$2" fi - if ! check_config "CONFIG_TARGET_DEVICE_${LEDE_CONFIG_TARGET}_DEVICE_${profile}=y"; then + if ! check_config "CONFIG_TARGET_DEVICE_${OPENWRT_CONFIG_TARGET}_DEVICE_${profile}=y"; then fail "unable to enable device '${profile}'" fi diff --git a/targets/ar71xx-generic b/targets/ar71xx-generic index 0aaef371..e516a11a 100644 --- a/targets/ar71xx-generic +++ b/targets/ar71xx-generic @@ -156,24 +156,24 @@ packages $ATH10K_PACKAGES # TP-Link -device tp-link-cpe210-v1.0 cpe210-220 +device tp-link-cpe210-v1.0 cpe210-220-v1 alias tp-link-cpe210-v1.1 alias tp-link-cpe220-v1.1 device tp-link-cpe210-v2.0 cpe210-v2 -device tp-link-cpe510-v1.0 cpe510-520 +device tp-link-cpe510-v1.0 cpe510-520-v1 alias tp-link-cpe510-v1.1 alias tp-link-cpe520-v1.1 -device tp-link-wbs210-v1.20 wbs210 -device tp-link-wbs510-v1.20 wbs510 +device tp-link-wbs210-v1.20 wbs210-v1 +device tp-link-wbs510-v1.20 wbs510-v1 device tp-link-tl-wr710n-v1 tl-wr710n-v1 device tp-link-tl-wr710n-v2.1 tl-wr710n-v2.1 if [ "$BROKEN" ]; then -device tp-link-tl-wr810n-v1 tl-wr810n # BROKEN: Untested +device tp-link-tl-wr810n-v1 tl-wr810n-v1 # BROKEN: Untested fi device tp-link-tl-wr842n-nd-v1 tl-wr842n-v1 @@ -219,7 +219,7 @@ if [ "$BROKEN" ]; then device tp-link-archer-c60-v1 archer-c60-v1 # BROKEN: OOM with 5GHz enabled in most environments fi -device tp-link-re450 re450 +device tp-link-re450 re450-v1 packages $ATH10K_PACKAGES @@ -279,7 +279,6 @@ device ubiquiti-ls-sr71 ubnt-ls-sr71 # BROKEN: Untested fi device ubiquiti-unifi-ac-lite ubnt-unifiac-lite -alias ubiquiti-unifi-ac-mesh alias ubiquiti-unifi-ac-lr packages $ATH10K_PACKAGES factory @@ -288,6 +287,10 @@ device ubiquiti-unifi-ac-pro ubnt-unifiac-pro packages $ATH10K_PACKAGES factory +device ubiquiti-unifi-ac-mesh ubnt-unifiac-mesh +packages $ATH10K_PACKAGES +factory + # Western Digital diff --git a/targets/ar71xx-tiny b/targets/ar71xx-tiny index 9962de7b..3f4c832e 100644 --- a/targets/ar71xx-tiny +++ b/targets/ar71xx-tiny @@ -15,7 +15,7 @@ device tp-link-tl-wa701n-nd-v1 tl-wa701nd-v1 device tp-link-tl-wa701n-nd-v2 tl-wa701nd-v2 device tp-link-tl-wa7210n-v2 tl-wa7210n-v2 -device tp-link-tl-wa7510n-v1 tl-wa7510n +device tp-link-tl-wa7510n-v1 tl-wa7510n-v1 device tp-link-tl-wr703n-v1 tl-wr703n-v1 diff --git a/targets/generic b/targets/generic index 37c16be0..21ef0775 100644 --- a/targets/generic +++ b/targets/generic @@ -1,5 +1,9 @@ [ "$GLUON_SITEDIR" -a "$GLUON_RELEASE" -a "$BOARD" ] || exit 1 + +. scripts/modules.sh + + config "CONFIG_GLUON_SITEDIR=\"$GLUON_SITEDIR\"" config "CONFIG_GLUON_RELEASE=\"$GLUON_RELEASE\"" try_config "CONFIG_GLUON_BRANCH=\"$GLUON_BRANCH\"" @@ -11,6 +15,11 @@ done [ "$BOARD" ] && config "CONFIG_TARGET_${BOARD}=y" [ -z "$SUBTARGET" ] || config "CONFIG_TARGET_${BOARD}_${SUBTARGET}=y" +# Disable non-default feeds in distfeeds.conf +for feed in gluon_base $(echo "$FEEDS" | grep -vxF "$DEFAULT_FEEDS"); do + config "# CONFIG_FEED_${feed} is not set" +done + config '# CONFIG_TARGET_ROOTFS_INITRAMFS is not set' @@ -23,6 +32,9 @@ config '# CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set' config 'CONFIG_PACKAGE_ATH_DEBUG=y' +config '# CONFIG_KERNEL_IP_MROUTE is not set' +config '# CONFIG_KERNEL_IPV6_MROUTE is not set' + try_config 'CONFIG_TARGET_MULTI_PROFILE=y' try_config 'CONFIG_TARGET_PER_DEVICE_ROOTFS=y' @@ -38,5 +50,5 @@ if [ "$GLUON_DEBUG" = 1 ]; then fi -packages '-odhcpd' '-ppp' '-ppp-mod-pppoe' '-wpad-mini' +packages '-odhcpd-ipv6only' '-ppp' '-ppp-mod-pppoe' '-wpad-mini' packages 'gluon-core' 'ip6tables' 'hostapd-mini' diff --git a/targets/ipq806x b/targets/ipq806x index b512db95..287e8c78 100644 --- a/targets/ipq806x +++ b/targets/ipq806x @@ -3,5 +3,5 @@ ATH10K_PACKAGES='-kmod-ath10k kmod-ath10k-ct -ath10k-firmware-qca99x0 ath10k-fir # TP-Link -device tp-link-archer-c2600 C2600 +device tp-link-archer-c2600 tplink_c2600 packages $ATH10K_PACKAGES diff --git a/targets/mpc85xx-generic b/targets/mpc85xx-generic index f2a1db4f..b796dc7c 100644 --- a/targets/mpc85xx-generic +++ b/targets/mpc85xx-generic @@ -1,5 +1 @@ -# There is no per-device rootfs support on mpc85xx-generic yet, -# so we can't use 'device' -config 'CONFIG_TARGET_mpc85xx_generic_TLWDR4900=y' -factory_image tp-link-tl-wdr4900-v1 tl-wdr4900-v1-squashfs-factory .bin -sysupgrade_image tp-link-tl-wdr4900-v1 tl-wdr4900-v1-squashfs-sysupgrade .bin +device tp-link-tl-wdr4900-v1 tl-wdr4900-v1 diff --git a/targets/ramips-mt7628 b/targets/ramips-mt76x8 similarity index 100% rename from targets/ramips-mt7628 rename to targets/ramips-mt76x8 diff --git a/targets/ramips-rt305x b/targets/ramips-rt305x index 5f1c979e..c1641c8e 100644 --- a/targets/ramips-rt305x +++ b/targets/ramips-rt305x @@ -1,3 +1,5 @@ +config '# CONFIG_KERNEL_KALLSYMS is not set' + # A5 device a5-v11 a5-v11 diff --git a/targets/sunxi b/targets/sunxi-cortexa7 similarity index 100% rename from targets/sunxi rename to targets/sunxi-cortexa7 diff --git a/targets/targets.mk b/targets/targets.mk index c02af678..bad274ae 100644 --- a/targets/targets.mk +++ b/targets/targets.mk @@ -1,13 +1,13 @@ GLUON_WLAN_MESH_11s := $(filter 11s,$(GLUON_WLAN_MESH)) $(eval $(call GluonTarget,ar71xx,generic)) -$(eval $(call GluonTarget,ar71xx,tiny,generic)) +$(eval $(call GluonTarget,ar71xx,tiny)) $(eval $(call GluonTarget,ar71xx,nand)) $(eval $(call GluonTarget,brcm2708,bcm2708)) $(eval $(call GluonTarget,brcm2708,bcm2709)) $(eval $(call GluonTarget,mpc85xx,generic)) $(eval $(call GluonTarget,ramips,mt7621)) -$(eval $(call GluonTarget,sunxi)) +$(eval $(call GluonTarget,sunxi,cortexa7)) $(eval $(call GluonTarget,x86,generic)) $(eval $(call GluonTarget,x86,geode)) $(eval $(call GluonTarget,x86,64)) @@ -15,7 +15,7 @@ $(eval $(call GluonTarget,x86,64)) ifneq ($(GLUON_WLAN_MESH_11s)$(BROKEN),) $(eval $(call GluonTarget,ipq806x)) $(eval $(call GluonTarget,ramips,mt7620)) -$(eval $(call GluonTarget,ramips,mt7628)) +$(eval $(call GluonTarget,ramips,mt76x8)) $(eval $(call GluonTarget,ramips,rt305x)) endif diff --git a/targets/x86.inc b/targets/x86.inc index d1f21189..c66c3408 100644 --- a/targets/x86.inc +++ b/targets/x86.inc @@ -10,5 +10,5 @@ packages 'kmod-3c59x' 'kmod-8139cp' 'kmod-8139too' 'kmod-e100' 'kmod-e1000' 'kmo packages 'kmod-pcnet32' 'kmod-r8169' 'kmod-sis900' 'kmod-sky2' 'kmod-tg3' 'kmod-tulip' 'kmod-via-rhine' 'kmod-via-velocity' packages 'kmod-ath9k' packages $ATH10K_PACKAGES -packages 'kmod-gpio-button-hotplug' 'kmod-gpio-nct5104d' 'kmod-hwmon-core' 'kmod-hwmon-k10temp' 'kmod-leds-gpio' 'kmod-leds-apu2' 'kmod-sp5100_tco' +packages 'kmod-gpio-button-hotplug' 'kmod-gpio-nct5104d' 'kmod-hwmon-core' 'kmod-leds-gpio' 'kmod-leds-apu2' 'kmod-sp5100_tco' packages 'kmod-usb-core' 'kmod-usb-ohci' 'kmod-usb2' 'kmod-usb3' 'kmod-usb-serial'