Update OpenWrt base
This commit is contained in:
		
							parent
							
								
									a54e7654cd
								
							
						
					
					
						commit
						a22c1d5670
					
				
							
								
								
									
										2
									
								
								modules
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								modules
									
									
									
									
									
								
							@ -1,7 +1,7 @@
 | 
			
		||||
GLUON_FEEDS='openwrt gluon routing luci'
 | 
			
		||||
 | 
			
		||||
OPENWRT_REPO=git://github.com/openwrt/openwrt.git
 | 
			
		||||
OPENWRT_COMMIT=e663db7bb1797740c4a29ac0fc96eda1b88f9e6e
 | 
			
		||||
OPENWRT_COMMIT=b21852c60f82bbd53c19098fc0eb1f4cfccfaf35
 | 
			
		||||
OPENWRT_BRANCH=chaos_calmer
 | 
			
		||||
 | 
			
		||||
PACKAGES_OPENWRT_REPO=git://github.com/openwrt/packages.git
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -5,7 +5,7 @@ Subject: fix UBNT XM model detection
 | 
			
		||||
Signed-off-by: Neal Oakey <neal.oakey@bingo-ev.de>
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index dab4d2c..e7b3cd2 100755
 | 
			
		||||
index 2f4b112..b220aad 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -64,6 +64,40 @@ wndr3700_board_detect() {
 | 
			
		||||
@ -64,7 +64,7 @@ index dab4d2c..e7b3cd2 100755
 | 
			
		||||
 		;;
 | 
			
		||||
 	*"Nanostation M XW")
 | 
			
		||||
 		name="nanostation-m-xw"
 | 
			
		||||
@@ -667,6 +703,7 @@ ar71xx_board_detect() {
 | 
			
		||||
@@ -682,6 +718,7 @@ ar71xx_board_detect() {
 | 
			
		||||
 		;;
 | 
			
		||||
 	*"Rocket M")
 | 
			
		||||
 		name="rocket-m"
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Backport of r49105
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index d025632..c5c1871 100755
 | 
			
		||||
index bf53169..ccccc17 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -66,6 +66,10 @@ tplink_get_image_hwid() {
 | 
			
		||||
@ -24,7 +24,7 @@ index d025632..c5c1871 100755
 | 
			
		||||
 tplink_get_image_boot_size() {
 | 
			
		||||
 	get_image "$@" | dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
 | 
			
		||||
 }
 | 
			
		||||
@@ -366,13 +370,17 @@ platform_check_image() {
 | 
			
		||||
@@ -371,13 +375,17 @@ platform_check_image() {
 | 
			
		||||
 		}
 | 
			
		||||
 
 | 
			
		||||
 		local hwid
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Backport of r49106
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index e7b3cd2..180a075 100755
 | 
			
		||||
index b220aad..395a012 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -133,7 +133,7 @@ tplink_board_detect() {
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Backport of r49107
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index 180a075..ddd6611 100755
 | 
			
		||||
index 395a012..131364c 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -162,6 +162,10 @@ tplink_board_detect() {
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ Signed off by: Norbert Wegener <nw@wegener-net.de>
 | 
			
		||||
Backport of r47849
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
index 9a7acbd..d42ceef 100644
 | 
			
		||||
index 8551399..7184966 100644
 | 
			
		||||
--- a/target/linux/ar71xx/image/Makefile
 | 
			
		||||
+++ b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
@@ -476,6 +476,15 @@ define Device/tl-wr710n-v2
 | 
			
		||||
 | 
			
		||||
@ -1,37 +0,0 @@
 | 
			
		||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Date: Sun, 8 May 2016 15:53:14 +0200
 | 
			
		||||
Subject: tools: pkg-config: fix build with GCC 6
 | 
			
		||||
 | 
			
		||||
Fixes the following error:
 | 
			
		||||
 | 
			
		||||
gdate.c: In function ‘g_date_strftime’:
 | 
			
		||||
gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonliteral]
 | 
			
		||||
       tmplen = strftime (tmpbuf, tmpbufsize, locale_format, &tm);
 | 
			
		||||
       ^~~~~~
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
 | 
			
		||||
diff --git a/tools/pkg-config/patches/001-glib-gdate-suppress-string-format-literal-warning.patch b/tools/pkg-config/patches/001-glib-gdate-suppress-string-format-literal-warning.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..6849299
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/tools/pkg-config/patches/001-glib-gdate-suppress-string-format-literal-warning.patch
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
+--- a/glib/glib/gdate.c
 | 
			
		||||
++++ b/glib/glib/gdate.c
 | 
			
		||||
+@@ -2439,6 +2439,9 @@ win32_strftime_helper (const GDate     *d,
 | 
			
		||||
+  *
 | 
			
		||||
+  * Returns: number of characters written to the buffer, or 0 the buffer was too small
 | 
			
		||||
+  */
 | 
			
		||||
++#pragma GCC diagnostic push
 | 
			
		||||
++#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 | 
			
		||||
++
 | 
			
		||||
+ gsize     
 | 
			
		||||
+ g_date_strftime (gchar       *s, 
 | 
			
		||||
+                  gsize        slen, 
 | 
			
		||||
+@@ -2549,3 +2552,5 @@ g_date_strftime (gchar       *s,
 | 
			
		||||
+   return retval;
 | 
			
		||||
+ #endif
 | 
			
		||||
+ }
 | 
			
		||||
++
 | 
			
		||||
++#pragma GCC diagnostic pop
 | 
			
		||||
@ -1,815 +0,0 @@
 | 
			
		||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Date: Sun, 8 May 2016 22:06:51 +0200
 | 
			
		||||
Subject: tools: mkimage: sync include/linux/compiler*.h with u-boot master
 | 
			
		||||
 | 
			
		||||
Fixes build with GCC 6.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
 | 
			
		||||
diff --git a/tools/mkimage/patches/200-compiler-support.patch b/tools/mkimage/patches/200-compiler-support.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..ca9c5b5
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/tools/mkimage/patches/200-compiler-support.patch
 | 
			
		||||
@@ -0,0 +1,702 @@
 | 
			
		||||
+diff --git b/include/linux/compiler-gcc.h a/include/linux/compiler-gcc.h
 | 
			
		||||
+index e057bd2..22ab246 100644
 | 
			
		||||
+--- b/include/linux/compiler-gcc.h
 | 
			
		||||
++++ a/include/linux/compiler-gcc.h
 | 
			
		||||
+@@ -5,14 +5,28 @@
 | 
			
		||||
+ /*
 | 
			
		||||
+  * Common definitions for all gcc versions go here.
 | 
			
		||||
+  */
 | 
			
		||||
+-#define GCC_VERSION (__GNUC__ * 10000 \
 | 
			
		||||
+-		   + __GNUC_MINOR__ * 100 \
 | 
			
		||||
+-		   + __GNUC_PATCHLEVEL__)
 | 
			
		||||
+-
 | 
			
		||||
++#define GCC_VERSION (__GNUC__ * 10000		\
 | 
			
		||||
++		     + __GNUC_MINOR__ * 100	\
 | 
			
		||||
++		     + __GNUC_PATCHLEVEL__)
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Optimization barrier */
 | 
			
		||||
++
 | 
			
		||||
+ /* The "volatile" is due to gcc bugs */
 | 
			
		||||
+ #define barrier() __asm__ __volatile__("": : :"memory")
 | 
			
		||||
++/*
 | 
			
		||||
++ * This version is i.e. to prevent dead stores elimination on @ptr
 | 
			
		||||
++ * where gcc and llvm may behave differently when otherwise using
 | 
			
		||||
++ * normal barrier(): while gcc behavior gets along with a normal
 | 
			
		||||
++ * barrier(), llvm needs an explicit input variable to be assumed
 | 
			
		||||
++ * clobbered. The issue is as follows: while the inline asm might
 | 
			
		||||
++ * access any memory it wants, the compiler could have fit all of
 | 
			
		||||
++ * @ptr into memory registers instead, and since @ptr never escaped
 | 
			
		||||
++ * from that, it proofed that the inline asm wasn't touching any of
 | 
			
		||||
++ * it. This version works well with both compilers, i.e. we're telling
 | 
			
		||||
++ * the compiler that the inline asm absolutely may see the contents
 | 
			
		||||
++ * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
 | 
			
		||||
++ */
 | 
			
		||||
++#define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
 | 
			
		||||
+ 
 | 
			
		||||
+ /*
 | 
			
		||||
+  * This macro obfuscates arithmetic on a variable address so that gcc
 | 
			
		||||
+@@ -32,58 +46,63 @@
 | 
			
		||||
+  * the inline assembly constraint from =g to =r, in this particular
 | 
			
		||||
+  * case either is valid.
 | 
			
		||||
+  */
 | 
			
		||||
+-#define RELOC_HIDE(ptr, off)					\
 | 
			
		||||
+-  ({ unsigned long __ptr;					\
 | 
			
		||||
+-    __asm__ ("" : "=r"(__ptr) : "0"(ptr));		\
 | 
			
		||||
+-    (typeof(ptr)) (__ptr + (off)); })
 | 
			
		||||
++#define RELOC_HIDE(ptr, off)						\
 | 
			
		||||
++({									\
 | 
			
		||||
++	unsigned long __ptr;						\
 | 
			
		||||
++	__asm__ ("" : "=r"(__ptr) : "0"(ptr));				\
 | 
			
		||||
++	(typeof(ptr)) (__ptr + (off));					\
 | 
			
		||||
++})
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Make the optimizer believe the variable can be manipulated arbitrarily. */
 | 
			
		||||
+-#define OPTIMIZER_HIDE_VAR(var) __asm__ ("" : "=r" (var) : "0" (var))
 | 
			
		||||
++#define OPTIMIZER_HIDE_VAR(var)						\
 | 
			
		||||
++	__asm__ ("" : "=r" (var) : "0" (var))
 | 
			
		||||
+ 
 | 
			
		||||
+ #ifdef __CHECKER__
 | 
			
		||||
+-#define __must_be_array(arr) 0
 | 
			
		||||
++#define __must_be_array(a)	0
 | 
			
		||||
+ #else
 | 
			
		||||
+ /* &a[0] degrades to a pointer: a different type from an array */
 | 
			
		||||
+-#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
 | 
			
		||||
++#define __must_be_array(a)	BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
+ /*
 | 
			
		||||
+  * Force always-inline if the user requests it so via the .config,
 | 
			
		||||
+  * or if gcc is too old:
 | 
			
		||||
+  */
 | 
			
		||||
+-#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
 | 
			
		||||
++#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) ||		\
 | 
			
		||||
+     !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
 | 
			
		||||
+-# define inline		inline		__attribute__((always_inline)) notrace
 | 
			
		||||
+-# define __inline__	__inline__	__attribute__((always_inline)) notrace
 | 
			
		||||
+-# define __inline	__inline	__attribute__((always_inline)) notrace
 | 
			
		||||
++#define inline		inline		__attribute__((always_inline)) notrace
 | 
			
		||||
++#define __inline__	__inline__	__attribute__((always_inline)) notrace
 | 
			
		||||
++#define __inline	__inline	__attribute__((always_inline)) notrace
 | 
			
		||||
+ #else
 | 
			
		||||
+ /* A lot of inline functions can cause havoc with function tracing */
 | 
			
		||||
+-# define inline		inline		notrace
 | 
			
		||||
+-# define __inline__	__inline__	notrace
 | 
			
		||||
+-# define __inline	__inline	notrace
 | 
			
		||||
++#define inline		inline		notrace
 | 
			
		||||
++#define __inline__	__inline__	notrace
 | 
			
		||||
++#define __inline	__inline	notrace
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
+-#define __deprecated			__attribute__((deprecated))
 | 
			
		||||
+-#ifndef __packed
 | 
			
		||||
+-#define __packed			__attribute__((packed))
 | 
			
		||||
+-#endif
 | 
			
		||||
+-#ifndef __weak
 | 
			
		||||
+-#define __weak				__attribute__((weak))
 | 
			
		||||
+-#endif
 | 
			
		||||
++#define __always_inline	inline __attribute__((always_inline))
 | 
			
		||||
++#define  noinline	__attribute__((noinline))
 | 
			
		||||
++
 | 
			
		||||
++#define __deprecated	__attribute__((deprecated))
 | 
			
		||||
++#define __packed	__attribute__((packed))
 | 
			
		||||
++#define __weak		__attribute__((weak))
 | 
			
		||||
++#define __alias(symbol)	__attribute__((alias(#symbol)))
 | 
			
		||||
+ 
 | 
			
		||||
+ /*
 | 
			
		||||
+- * it doesn't make sense on ARM (currently the only user of __naked) to trace
 | 
			
		||||
+- * naked functions because then mcount is called without stack and frame pointer
 | 
			
		||||
+- * being set up and there is no chance to restore the lr register to the value
 | 
			
		||||
+- * before mcount was called.
 | 
			
		||||
++ * it doesn't make sense on ARM (currently the only user of __naked)
 | 
			
		||||
++ * to trace naked functions because then mcount is called without
 | 
			
		||||
++ * stack and frame pointer being set up and there is no chance to
 | 
			
		||||
++ * restore the lr register to the value before mcount was called.
 | 
			
		||||
++ *
 | 
			
		||||
++ * The asm() bodies of naked functions often depend on standard calling
 | 
			
		||||
++ * conventions, therefore they must be noinline and noclone.
 | 
			
		||||
+  *
 | 
			
		||||
+- * The asm() bodies of naked functions often depend on standard calling conventions,
 | 
			
		||||
+- * therefore they must be noinline and noclone.  GCC 4.[56] currently fail to enforce
 | 
			
		||||
+- * this, so we must do so ourselves.  See GCC PR44290.
 | 
			
		||||
++ * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
 | 
			
		||||
++ * See GCC PR44290.
 | 
			
		||||
+  */
 | 
			
		||||
+-#define __naked				__attribute__((naked)) noinline __noclone notrace
 | 
			
		||||
++#define __naked		__attribute__((naked)) noinline __noclone notrace
 | 
			
		||||
+ 
 | 
			
		||||
+-#define __noreturn			__attribute__((noreturn))
 | 
			
		||||
++#define __noreturn	__attribute__((noreturn))
 | 
			
		||||
+ 
 | 
			
		||||
+ /*
 | 
			
		||||
+  * From the GCC manual:
 | 
			
		||||
+@@ -95,34 +114,170 @@
 | 
			
		||||
+  * would be.
 | 
			
		||||
+  * [...]
 | 
			
		||||
+  */
 | 
			
		||||
+-#ifndef __pure
 | 
			
		||||
+-#define __pure				__attribute__((pure))
 | 
			
		||||
++#define __pure			__attribute__((pure))
 | 
			
		||||
++#define __aligned(x)		__attribute__((aligned(x)))
 | 
			
		||||
++#define __printf(a, b)		__attribute__((format(printf, a, b)))
 | 
			
		||||
++#define __scanf(a, b)		__attribute__((format(scanf, a, b)))
 | 
			
		||||
++#define __attribute_const__	__attribute__((__const__))
 | 
			
		||||
++#define __maybe_unused		__attribute__((unused))
 | 
			
		||||
++#define __always_unused		__attribute__((unused))
 | 
			
		||||
++
 | 
			
		||||
++/* gcc version specific checks */
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION < 30200
 | 
			
		||||
++# error Sorry, your compiler is too old - please upgrade it.
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION < 30300
 | 
			
		||||
++# define __used			__attribute__((__unused__))
 | 
			
		||||
++#else
 | 
			
		||||
++# define __used			__attribute__((__used__))
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++#ifdef CONFIG_GCOV_KERNEL
 | 
			
		||||
++# if GCC_VERSION < 30400
 | 
			
		||||
++#   error "GCOV profiling support for gcc versions below 3.4 not included"
 | 
			
		||||
++# endif /* __GNUC_MINOR__ */
 | 
			
		||||
++#endif /* CONFIG_GCOV_KERNEL */
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 30400
 | 
			
		||||
++#define __must_check		__attribute__((warn_unused_result))
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 40000
 | 
			
		||||
++
 | 
			
		||||
++/* GCC 4.1.[01] miscompiles __weak */
 | 
			
		||||
++#ifdef __KERNEL__
 | 
			
		||||
++# if GCC_VERSION >= 40100 &&  GCC_VERSION <= 40101
 | 
			
		||||
++#  error Your version of gcc miscompiles the __weak directive
 | 
			
		||||
++# endif
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++#define __used			__attribute__((__used__))
 | 
			
		||||
++#define __compiler_offsetof(a, b)					\
 | 
			
		||||
++	__builtin_offsetof(a, b)
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 40100 && GCC_VERSION < 40600
 | 
			
		||||
++# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 40300
 | 
			
		||||
++/* Mark functions as cold. gcc will assume any path leading to a call
 | 
			
		||||
++ * to them will be unlikely.  This means a lot of manual unlikely()s
 | 
			
		||||
++ * are unnecessary now for any paths leading to the usual suspects
 | 
			
		||||
++ * like BUG(), printk(), panic() etc. [but let's keep them for now for
 | 
			
		||||
++ * older compilers]
 | 
			
		||||
++ *
 | 
			
		||||
++ * Early snapshots of gcc 4.3 don't support this and we can't detect this
 | 
			
		||||
++ * in the preprocessor, but we can live with this because they're unreleased.
 | 
			
		||||
++ * Maketime probing would be overkill here.
 | 
			
		||||
++ *
 | 
			
		||||
++ * gcc also has a __attribute__((__hot__)) to move hot functions into
 | 
			
		||||
++ * a special section, but I don't see any sense in this right now in
 | 
			
		||||
++ * the kernel context
 | 
			
		||||
++ */
 | 
			
		||||
++#define __cold			__attribute__((__cold__))
 | 
			
		||||
++
 | 
			
		||||
++#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
 | 
			
		||||
++
 | 
			
		||||
++#ifndef __CHECKER__
 | 
			
		||||
++# define __compiletime_warning(message) __attribute__((warning(message)))
 | 
			
		||||
++# define __compiletime_error(message) __attribute__((error(message)))
 | 
			
		||||
++#endif /* __CHECKER__ */
 | 
			
		||||
++#endif /* GCC_VERSION >= 40300 */
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 40500
 | 
			
		||||
++/*
 | 
			
		||||
++ * Mark a position in code as unreachable.  This can be used to
 | 
			
		||||
++ * suppress control flow warnings after asm blocks that transfer
 | 
			
		||||
++ * control elsewhere.
 | 
			
		||||
++ *
 | 
			
		||||
++ * Early snapshots of gcc 4.5 don't support this and we can't detect
 | 
			
		||||
++ * this in the preprocessor, but we can live with this because they're
 | 
			
		||||
++ * unreleased.  Really, we need to have autoconf for the kernel.
 | 
			
		||||
++ */
 | 
			
		||||
++#define unreachable() __builtin_unreachable()
 | 
			
		||||
++
 | 
			
		||||
++/* Mark a function definition as prohibited from being cloned. */
 | 
			
		||||
++#define __noclone	__attribute__((__noclone__))
 | 
			
		||||
++
 | 
			
		||||
++#endif /* GCC_VERSION >= 40500 */
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 40600
 | 
			
		||||
++/*
 | 
			
		||||
++ * When used with Link Time Optimization, gcc can optimize away C functions or
 | 
			
		||||
++ * variables which are referenced only from assembly code.  __visible tells the
 | 
			
		||||
++ * optimizer that something else uses this function or variable, thus preventing
 | 
			
		||||
++ * this.
 | 
			
		||||
++ */
 | 
			
		||||
++#define __visible	__attribute__((externally_visible))
 | 
			
		||||
+ #endif
 | 
			
		||||
+-#ifndef __aligned
 | 
			
		||||
+-#define __aligned(x)			__attribute__((aligned(x)))
 | 
			
		||||
++
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
 | 
			
		||||
++/*
 | 
			
		||||
++ * __assume_aligned(n, k): Tell the optimizer that the returned
 | 
			
		||||
++ * pointer can be assumed to be k modulo n. The second argument is
 | 
			
		||||
++ * optional (default 0), so we use a variadic macro to make the
 | 
			
		||||
++ * shorthand.
 | 
			
		||||
++ *
 | 
			
		||||
++ * Beware: Do not apply this to functions which may return
 | 
			
		||||
++ * ERR_PTRs. Also, it is probably unwise to apply it to functions
 | 
			
		||||
++ * returning extra information in the low bits (but in that case the
 | 
			
		||||
++ * compiler should see some alignment anyway, when the return value is
 | 
			
		||||
++ * massaged by 'flags = ptr & 3; ptr &= ~3;').
 | 
			
		||||
++ */
 | 
			
		||||
++#define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__)))
 | 
			
		||||
+ #endif
 | 
			
		||||
+-#define __printf(a, b)			__attribute__((format(printf, a, b)))
 | 
			
		||||
+-#define __scanf(a, b)			__attribute__((format(scanf, a, b)))
 | 
			
		||||
+-#define  noinline			__attribute__((noinline))
 | 
			
		||||
+-#define __attribute_const__		__attribute__((__const__))
 | 
			
		||||
+-#define __maybe_unused			__attribute__((unused))
 | 
			
		||||
+-#define __always_unused			__attribute__((unused))
 | 
			
		||||
+ 
 | 
			
		||||
+-#define __gcc_header(x) #x
 | 
			
		||||
+-#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
 | 
			
		||||
+-#define gcc_header(x) _gcc_header(x)
 | 
			
		||||
+-#include gcc_header(__GNUC__)
 | 
			
		||||
++/*
 | 
			
		||||
++ * GCC 'asm goto' miscompiles certain code sequences:
 | 
			
		||||
++ *
 | 
			
		||||
++ *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
 | 
			
		||||
++ *
 | 
			
		||||
++ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
 | 
			
		||||
++ *
 | 
			
		||||
++ * (asm goto is automatically volatile - the naming reflects this.)
 | 
			
		||||
++ */
 | 
			
		||||
++#define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)
 | 
			
		||||
++
 | 
			
		||||
++#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
 | 
			
		||||
++#if GCC_VERSION >= 40400
 | 
			
		||||
++#define __HAVE_BUILTIN_BSWAP32__
 | 
			
		||||
++#define __HAVE_BUILTIN_BSWAP64__
 | 
			
		||||
++#endif
 | 
			
		||||
++#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600)
 | 
			
		||||
++#define __HAVE_BUILTIN_BSWAP16__
 | 
			
		||||
++#endif
 | 
			
		||||
++#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 50000
 | 
			
		||||
++#define KASAN_ABI_VERSION 4
 | 
			
		||||
++#elif GCC_VERSION >= 40902
 | 
			
		||||
++#define KASAN_ABI_VERSION 3
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++#if GCC_VERSION >= 40902
 | 
			
		||||
++/*
 | 
			
		||||
++ * Tell the compiler that address safety instrumentation (KASAN)
 | 
			
		||||
++ * should not be applied to that function.
 | 
			
		||||
++ * Conflicts with inlining: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
 | 
			
		||||
++ */
 | 
			
		||||
++#define __no_sanitize_address __attribute__((no_sanitize_address))
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++#endif	/* gcc version >= 40000 specific checks */
 | 
			
		||||
+ 
 | 
			
		||||
+ #if !defined(__noclone)
 | 
			
		||||
+ #define __noclone	/* not needed */
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
++#if !defined(__no_sanitize_address)
 | 
			
		||||
++#define __no_sanitize_address
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
+ /*
 | 
			
		||||
+  * A trick to suppress uninitialized variable warning without generating any
 | 
			
		||||
+  * code
 | 
			
		||||
+  */
 | 
			
		||||
+ #define uninitialized_var(x) x = x
 | 
			
		||||
+-
 | 
			
		||||
+-#ifndef __always_inline
 | 
			
		||||
+-#define __always_inline		inline __attribute__((always_inline))
 | 
			
		||||
+-#endif
 | 
			
		||||
+diff --git b/include/linux/compiler-gcc3.h a/include/linux/compiler-gcc3.h
 | 
			
		||||
+deleted file mode 100644
 | 
			
		||||
+index 7d89feb..0000000
 | 
			
		||||
+--- b/include/linux/compiler-gcc3.h
 | 
			
		||||
++++ /dev/null
 | 
			
		||||
+@@ -1,23 +0,0 @@
 | 
			
		||||
+-#ifndef __LINUX_COMPILER_H
 | 
			
		||||
+-#error "Please don't include <linux/compiler-gcc3.h> directly, include <linux/compiler.h> instead."
 | 
			
		||||
+-#endif
 | 
			
		||||
+-
 | 
			
		||||
+-#if GCC_VERSION < 30200
 | 
			
		||||
+-# error Sorry, your compiler is too old - please upgrade it.
 | 
			
		||||
+-#endif
 | 
			
		||||
+-
 | 
			
		||||
+-#if GCC_VERSION >= 30300
 | 
			
		||||
+-# define __used			__attribute__((__used__))
 | 
			
		||||
+-#else
 | 
			
		||||
+-# define __used			__attribute__((__unused__))
 | 
			
		||||
+-#endif
 | 
			
		||||
+-
 | 
			
		||||
+-#if GCC_VERSION >= 30400
 | 
			
		||||
+-#define __must_check		__attribute__((warn_unused_result))
 | 
			
		||||
+-#endif
 | 
			
		||||
+-
 | 
			
		||||
+-#ifdef CONFIG_GCOV_KERNEL
 | 
			
		||||
+-# if GCC_VERSION < 30400
 | 
			
		||||
+-#   error "GCOV profiling support for gcc versions below 3.4 not included"
 | 
			
		||||
+-# endif /* __GNUC_MINOR__ */
 | 
			
		||||
+-#endif /* CONFIG_GCOV_KERNEL */
 | 
			
		||||
+diff --git b/include/linux/compiler-gcc4.h a/include/linux/compiler-gcc4.h
 | 
			
		||||
+deleted file mode 100644
 | 
			
		||||
+index c982a09..0000000
 | 
			
		||||
+--- b/include/linux/compiler-gcc4.h
 | 
			
		||||
++++ /dev/null
 | 
			
		||||
+@@ -1,81 +0,0 @@
 | 
			
		||||
+-#ifndef __LINUX_COMPILER_H
 | 
			
		||||
+-#error "Please don't include <linux/compiler-gcc4.h> directly, include <linux/compiler.h> instead."
 | 
			
		||||
+-#endif
 | 
			
		||||
+-
 | 
			
		||||
+-#define __used			__attribute__((__used__))
 | 
			
		||||
+-#define __must_check 		__attribute__((warn_unused_result))
 | 
			
		||||
+-#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
 | 
			
		||||
+-
 | 
			
		||||
+-#if GCC_VERSION >= 40100 && GCC_VERSION < 40600
 | 
			
		||||
+-# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
 | 
			
		||||
+-#endif
 | 
			
		||||
+-
 | 
			
		||||
+-#if GCC_VERSION >= 40300
 | 
			
		||||
+-/* Mark functions as cold. gcc will assume any path leading to a call
 | 
			
		||||
+-   to them will be unlikely.  This means a lot of manual unlikely()s
 | 
			
		||||
+-   are unnecessary now for any paths leading to the usual suspects
 | 
			
		||||
+-   like BUG(), printk(), panic() etc. [but let's keep them for now for
 | 
			
		||||
+-   older compilers]
 | 
			
		||||
+-
 | 
			
		||||
+-   Early snapshots of gcc 4.3 don't support this and we can't detect this
 | 
			
		||||
+-   in the preprocessor, but we can live with this because they're unreleased.
 | 
			
		||||
+-   Maketime probing would be overkill here.
 | 
			
		||||
+-
 | 
			
		||||
+-   gcc also has a __attribute__((__hot__)) to move hot functions into
 | 
			
		||||
+-   a special section, but I don't see any sense in this right now in
 | 
			
		||||
+-   the kernel context */
 | 
			
		||||
+-#define __cold			__attribute__((__cold__))
 | 
			
		||||
+-
 | 
			
		||||
+-#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
 | 
			
		||||
+-
 | 
			
		||||
+-#ifndef __CHECKER__
 | 
			
		||||
+-# define __compiletime_warning(message) __attribute__((warning(message)))
 | 
			
		||||
+-# define __compiletime_error(message) __attribute__((error(message)))
 | 
			
		||||
+-#endif /* __CHECKER__ */
 | 
			
		||||
+-#endif /* GCC_VERSION >= 40300 */
 | 
			
		||||
+-
 | 
			
		||||
+-#if GCC_VERSION >= 40500
 | 
			
		||||
+-/*
 | 
			
		||||
+- * Mark a position in code as unreachable.  This can be used to
 | 
			
		||||
+- * suppress control flow warnings after asm blocks that transfer
 | 
			
		||||
+- * control elsewhere.
 | 
			
		||||
+- *
 | 
			
		||||
+- * Early snapshots of gcc 4.5 don't support this and we can't detect
 | 
			
		||||
+- * this in the preprocessor, but we can live with this because they're
 | 
			
		||||
+- * unreleased.  Really, we need to have autoconf for the kernel.
 | 
			
		||||
+- */
 | 
			
		||||
+-#define unreachable() __builtin_unreachable()
 | 
			
		||||
+-
 | 
			
		||||
+-/* Mark a function definition as prohibited from being cloned. */
 | 
			
		||||
+-#define __noclone	__attribute__((__noclone__))
 | 
			
		||||
+-
 | 
			
		||||
+-#endif /* GCC_VERSION >= 40500 */
 | 
			
		||||
+-
 | 
			
		||||
+-#if GCC_VERSION >= 40600
 | 
			
		||||
+-/*
 | 
			
		||||
+- * Tell the optimizer that something else uses this function or variable.
 | 
			
		||||
+- */
 | 
			
		||||
+-#define __visible __attribute__((externally_visible))
 | 
			
		||||
+-#endif
 | 
			
		||||
+-
 | 
			
		||||
+-/*
 | 
			
		||||
+- * GCC 'asm goto' miscompiles certain code sequences:
 | 
			
		||||
+- *
 | 
			
		||||
+- *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
 | 
			
		||||
+- *
 | 
			
		||||
+- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
 | 
			
		||||
+- * Fixed in GCC 4.8.2 and later versions.
 | 
			
		||||
+- *
 | 
			
		||||
+- * (asm goto is automatically volatile - the naming reflects this.)
 | 
			
		||||
+- */
 | 
			
		||||
+-#define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)
 | 
			
		||||
+-
 | 
			
		||||
+-#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
 | 
			
		||||
+-#if GCC_VERSION >= 40400
 | 
			
		||||
+-#define __HAVE_BUILTIN_BSWAP32__
 | 
			
		||||
+-#define __HAVE_BUILTIN_BSWAP64__
 | 
			
		||||
+-#endif
 | 
			
		||||
+-#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600)
 | 
			
		||||
+-#define __HAVE_BUILTIN_BSWAP16__
 | 
			
		||||
+-#endif
 | 
			
		||||
+-#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
 | 
			
		||||
+diff --git b/include/linux/compiler-intel.h a/include/linux/compiler-intel.h
 | 
			
		||||
+index ba147a1..d4c7113 100644
 | 
			
		||||
+--- b/include/linux/compiler-intel.h
 | 
			
		||||
++++ a/include/linux/compiler-intel.h
 | 
			
		||||
+@@ -13,9 +13,14 @@
 | 
			
		||||
+ /* Intel ECC compiler doesn't support gcc specific asm stmts.
 | 
			
		||||
+  * It uses intrinsics to do the equivalent things.
 | 
			
		||||
+  */
 | 
			
		||||
++#undef barrier
 | 
			
		||||
++#undef barrier_data
 | 
			
		||||
+ #undef RELOC_HIDE
 | 
			
		||||
+ #undef OPTIMIZER_HIDE_VAR
 | 
			
		||||
+ 
 | 
			
		||||
++#define barrier() __memory_barrier()
 | 
			
		||||
++#define barrier_data(ptr) barrier()
 | 
			
		||||
++
 | 
			
		||||
+ #define RELOC_HIDE(ptr, off)					\
 | 
			
		||||
+   ({ unsigned long __ptr;					\
 | 
			
		||||
+      __ptr = (unsigned long) (ptr);				\
 | 
			
		||||
+diff --git b/include/linux/compiler.h a/include/linux/compiler.h
 | 
			
		||||
+index d5ad7b1..020ad16 100644
 | 
			
		||||
+--- b/include/linux/compiler.h
 | 
			
		||||
++++ a/include/linux/compiler.h
 | 
			
		||||
+@@ -17,6 +17,7 @@
 | 
			
		||||
+ # define __release(x)	__context__(x,-1)
 | 
			
		||||
+ # define __cond_lock(x,c)	((c) ? ({ __acquire(x); 1; }) : 0)
 | 
			
		||||
+ # define __percpu	__attribute__((noderef, address_space(3)))
 | 
			
		||||
++# define __pmem		__attribute__((noderef, address_space(5)))
 | 
			
		||||
+ #ifdef CONFIG_SPARSE_RCU_POINTER
 | 
			
		||||
+ # define __rcu		__attribute__((noderef, address_space(4)))
 | 
			
		||||
+ #else
 | 
			
		||||
+@@ -42,6 +43,7 @@ extern void __chk_io_ptr(const volatile void __iomem *);
 | 
			
		||||
+ # define __cond_lock(x,c) (c)
 | 
			
		||||
+ # define __percpu
 | 
			
		||||
+ # define __rcu
 | 
			
		||||
++# define __pmem
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Indirect macros required for expanded argument pasting, eg. __LINE__. */
 | 
			
		||||
+@@ -54,7 +56,11 @@ extern void __chk_io_ptr(const volatile void __iomem *);
 | 
			
		||||
+ #include <linux/compiler-gcc.h>
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
++#if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__)
 | 
			
		||||
++#define notrace __attribute__((hotpatch(0,0)))
 | 
			
		||||
++#else
 | 
			
		||||
+ #define notrace __attribute__((no_instrument_function))
 | 
			
		||||
++#endif
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Intel compiler defines __GNUC__. So we will overwrite implementations
 | 
			
		||||
+  * coming from above header files here
 | 
			
		||||
+@@ -138,7 +144,7 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
 | 
			
		||||
+  */
 | 
			
		||||
+ #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
 | 
			
		||||
+ #define __trace_if(cond) \
 | 
			
		||||
+-	if (__builtin_constant_p((cond)) ? !!(cond) :			\
 | 
			
		||||
++	if (__builtin_constant_p(!!(cond)) ? !!(cond) :			\
 | 
			
		||||
+ 	({								\
 | 
			
		||||
+ 		int ______r;						\
 | 
			
		||||
+ 		static struct ftrace_branch_data			\
 | 
			
		||||
+@@ -165,6 +171,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
 | 
			
		||||
+ # define barrier() __memory_barrier()
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
++#ifndef barrier_data
 | 
			
		||||
++# define barrier_data(ptr) barrier()
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
+ /* Unreachable code */
 | 
			
		||||
+ #ifndef unreachable
 | 
			
		||||
+ # define unreachable() do { } while (1)
 | 
			
		||||
+@@ -186,6 +196,126 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
 | 
			
		||||
+ # define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __LINE__)
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
++#include <linux/types.h>
 | 
			
		||||
++
 | 
			
		||||
++#define __READ_ONCE_SIZE						\
 | 
			
		||||
++({									\
 | 
			
		||||
++	switch (size) {							\
 | 
			
		||||
++	case 1: *(__u8 *)res = *(volatile __u8 *)p; break;		\
 | 
			
		||||
++	case 2: *(__u16 *)res = *(volatile __u16 *)p; break;		\
 | 
			
		||||
++	case 4: *(__u32 *)res = *(volatile __u32 *)p; break;		\
 | 
			
		||||
++	case 8: *(__u64 *)res = *(volatile __u64 *)p; break;		\
 | 
			
		||||
++	default:							\
 | 
			
		||||
++		barrier();						\
 | 
			
		||||
++		__builtin_memcpy((void *)res, (const void *)p, size);	\
 | 
			
		||||
++		barrier();						\
 | 
			
		||||
++	}								\
 | 
			
		||||
++})
 | 
			
		||||
++
 | 
			
		||||
++static __always_inline
 | 
			
		||||
++void __read_once_size(const volatile void *p, void *res, int size)
 | 
			
		||||
++{
 | 
			
		||||
++	__READ_ONCE_SIZE;
 | 
			
		||||
++}
 | 
			
		||||
++
 | 
			
		||||
++#ifdef CONFIG_KASAN
 | 
			
		||||
++/*
 | 
			
		||||
++ * This function is not 'inline' because __no_sanitize_address confilcts
 | 
			
		||||
++ * with inlining. Attempt to inline it may cause a build failure.
 | 
			
		||||
++ * 	https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
 | 
			
		||||
++ * '__maybe_unused' allows us to avoid defined-but-not-used warnings.
 | 
			
		||||
++ */
 | 
			
		||||
++static __no_sanitize_address __maybe_unused
 | 
			
		||||
++void __read_once_size_nocheck(const volatile void *p, void *res, int size)
 | 
			
		||||
++{
 | 
			
		||||
++	__READ_ONCE_SIZE;
 | 
			
		||||
++}
 | 
			
		||||
++#else
 | 
			
		||||
++static __always_inline
 | 
			
		||||
++void __read_once_size_nocheck(const volatile void *p, void *res, int size)
 | 
			
		||||
++{
 | 
			
		||||
++	__READ_ONCE_SIZE;
 | 
			
		||||
++}
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++static __always_inline void __write_once_size(volatile void *p, void *res, int size)
 | 
			
		||||
++{
 | 
			
		||||
++	switch (size) {
 | 
			
		||||
++	case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
 | 
			
		||||
++	case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
 | 
			
		||||
++	case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
 | 
			
		||||
++	case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
 | 
			
		||||
++	default:
 | 
			
		||||
++		barrier();
 | 
			
		||||
++		__builtin_memcpy((void *)p, (const void *)res, size);
 | 
			
		||||
++		barrier();
 | 
			
		||||
++	}
 | 
			
		||||
++}
 | 
			
		||||
++
 | 
			
		||||
++/*
 | 
			
		||||
++ * Prevent the compiler from merging or refetching reads or writes. The
 | 
			
		||||
++ * compiler is also forbidden from reordering successive instances of
 | 
			
		||||
++ * READ_ONCE, WRITE_ONCE and ACCESS_ONCE (see below), but only when the
 | 
			
		||||
++ * compiler is aware of some particular ordering.  One way to make the
 | 
			
		||||
++ * compiler aware of ordering is to put the two invocations of READ_ONCE,
 | 
			
		||||
++ * WRITE_ONCE or ACCESS_ONCE() in different C statements.
 | 
			
		||||
++ *
 | 
			
		||||
++ * In contrast to ACCESS_ONCE these two macros will also work on aggregate
 | 
			
		||||
++ * data types like structs or unions. If the size of the accessed data
 | 
			
		||||
++ * type exceeds the word size of the machine (e.g., 32 bits or 64 bits)
 | 
			
		||||
++ * READ_ONCE() and WRITE_ONCE()  will fall back to memcpy and print a
 | 
			
		||||
++ * compile-time warning.
 | 
			
		||||
++ *
 | 
			
		||||
++ * Their two major use cases are: (1) Mediating communication between
 | 
			
		||||
++ * process-level code and irq/NMI handlers, all running on the same CPU,
 | 
			
		||||
++ * and (2) Ensuring that the compiler does not  fold, spindle, or otherwise
 | 
			
		||||
++ * mutilate accesses that either do not require ordering or that interact
 | 
			
		||||
++ * with an explicit memory barrier or atomic instruction that provides the
 | 
			
		||||
++ * required ordering.
 | 
			
		||||
++ */
 | 
			
		||||
++
 | 
			
		||||
++#define __READ_ONCE(x, check)						\
 | 
			
		||||
++({									\
 | 
			
		||||
++	union { typeof(x) __val; char __c[1]; } __u;			\
 | 
			
		||||
++	if (check)							\
 | 
			
		||||
++		__read_once_size(&(x), __u.__c, sizeof(x));		\
 | 
			
		||||
++	else								\
 | 
			
		||||
++		__read_once_size_nocheck(&(x), __u.__c, sizeof(x));	\
 | 
			
		||||
++	__u.__val;							\
 | 
			
		||||
++})
 | 
			
		||||
++#define READ_ONCE(x) __READ_ONCE(x, 1)
 | 
			
		||||
++
 | 
			
		||||
++/*
 | 
			
		||||
++ * Use READ_ONCE_NOCHECK() instead of READ_ONCE() if you need
 | 
			
		||||
++ * to hide memory access from KASAN.
 | 
			
		||||
++ */
 | 
			
		||||
++#define READ_ONCE_NOCHECK(x) __READ_ONCE(x, 0)
 | 
			
		||||
++
 | 
			
		||||
++#define WRITE_ONCE(x, val) \
 | 
			
		||||
++({							\
 | 
			
		||||
++	union { typeof(x) __val; char __c[1]; } __u =	\
 | 
			
		||||
++		{ .__val = (__force typeof(x)) (val) }; \
 | 
			
		||||
++	__write_once_size(&(x), __u.__c, sizeof(x));	\
 | 
			
		||||
++	__u.__val;					\
 | 
			
		||||
++})
 | 
			
		||||
++
 | 
			
		||||
++/**
 | 
			
		||||
++ * smp_cond_acquire() - Spin wait for cond with ACQUIRE ordering
 | 
			
		||||
++ * @cond: boolean expression to wait for
 | 
			
		||||
++ *
 | 
			
		||||
++ * Equivalent to using smp_load_acquire() on the condition variable but employs
 | 
			
		||||
++ * the control dependency of the wait to reduce the barrier on many platforms.
 | 
			
		||||
++ *
 | 
			
		||||
++ * The control dependency provides a LOAD->STORE order, the additional RMB
 | 
			
		||||
++ * provides LOAD->LOAD order, together they provide LOAD->{LOAD,STORE} order,
 | 
			
		||||
++ * aka. ACQUIRE.
 | 
			
		||||
++ */
 | 
			
		||||
++#define smp_cond_acquire(cond)	do {		\
 | 
			
		||||
++	while (!(cond))				\
 | 
			
		||||
++		cpu_relax();			\
 | 
			
		||||
++	smp_rmb(); /* ctrl + rmb := acquire */	\
 | 
			
		||||
++} while (0)
 | 
			
		||||
++
 | 
			
		||||
+ #endif /* __KERNEL__ */
 | 
			
		||||
+ 
 | 
			
		||||
+ #endif /* __ASSEMBLY__ */
 | 
			
		||||
+@@ -304,6 +434,14 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
 | 
			
		||||
+ #define __visible
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
++/*
 | 
			
		||||
++ * Assume alignment of return value.
 | 
			
		||||
++ */
 | 
			
		||||
++#ifndef __assume_aligned
 | 
			
		||||
++#define __assume_aligned(a, ...)
 | 
			
		||||
++#endif
 | 
			
		||||
++
 | 
			
		||||
++
 | 
			
		||||
+ /* Are two types/vars the same type (ignoring qualifiers)? */
 | 
			
		||||
+ #ifndef __same_type
 | 
			
		||||
+ # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
 | 
			
		||||
+@@ -311,7 +449,7 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Is this type a native word size -- useful for atomic operations */
 | 
			
		||||
+ #ifndef __native_word
 | 
			
		||||
+-# define __native_word(t) (sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
 | 
			
		||||
++# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Compile time object size, -1 for unknown */
 | 
			
		||||
+@@ -373,12 +511,38 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
 | 
			
		||||
+  * to make the compiler aware of ordering is to put the two invocations of
 | 
			
		||||
+  * ACCESS_ONCE() in different C statements.
 | 
			
		||||
+  *
 | 
			
		||||
+- * This macro does absolutely -nothing- to prevent the CPU from reordering,
 | 
			
		||||
+- * merging, or refetching absolutely anything at any time.  Its main intended
 | 
			
		||||
+- * use is to mediate communication between process-level code and irq/NMI
 | 
			
		||||
+- * handlers, all running on the same CPU.
 | 
			
		||||
++ * ACCESS_ONCE will only work on scalar types. For union types, ACCESS_ONCE
 | 
			
		||||
++ * on a union member will work as long as the size of the member matches the
 | 
			
		||||
++ * size of the union and the size is smaller than word size.
 | 
			
		||||
++ *
 | 
			
		||||
++ * The major use cases of ACCESS_ONCE used to be (1) Mediating communication
 | 
			
		||||
++ * between process-level code and irq/NMI handlers, all running on the same CPU,
 | 
			
		||||
++ * and (2) Ensuring that the compiler does not  fold, spindle, or otherwise
 | 
			
		||||
++ * mutilate accesses that either do not require ordering or that interact
 | 
			
		||||
++ * with an explicit memory barrier or atomic instruction that provides the
 | 
			
		||||
++ * required ordering.
 | 
			
		||||
++ *
 | 
			
		||||
++ * If possible use READ_ONCE()/WRITE_ONCE() instead.
 | 
			
		||||
++ */
 | 
			
		||||
++#define __ACCESS_ONCE(x) ({ \
 | 
			
		||||
++	 __maybe_unused typeof(x) __var = (__force typeof(x)) 0; \
 | 
			
		||||
++	(volatile typeof(x) *)&(x); })
 | 
			
		||||
++#define ACCESS_ONCE(x) (*__ACCESS_ONCE(x))
 | 
			
		||||
++
 | 
			
		||||
++/**
 | 
			
		||||
++ * lockless_dereference() - safely load a pointer for later dereference
 | 
			
		||||
++ * @p: The pointer to load
 | 
			
		||||
++ *
 | 
			
		||||
++ * Similar to rcu_dereference(), but for situations where the pointed-to
 | 
			
		||||
++ * object's lifetime is managed by something other than RCU.  That
 | 
			
		||||
++ * "something other" might be reference counting or simple immortality.
 | 
			
		||||
+  */
 | 
			
		||||
+-#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
 | 
			
		||||
++#define lockless_dereference(p) \
 | 
			
		||||
++({ \
 | 
			
		||||
++	typeof(p) _________p1 = READ_ONCE(p); \
 | 
			
		||||
++	smp_read_barrier_depends(); /* Dependency order vs. p above. */ \
 | 
			
		||||
++	(_________p1); \
 | 
			
		||||
++})
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */
 | 
			
		||||
+ #ifdef CONFIG_KPROBES
 | 
			
		||||
diff --git a/tools/mkimage/patches/200-gcc5_compat.patch b/tools/mkimage/patches/200-gcc5_compat.patch
 | 
			
		||||
deleted file mode 100644
 | 
			
		||||
index 4d55f00..0000000
 | 
			
		||||
--- a/tools/mkimage/patches/200-gcc5_compat.patch
 | 
			
		||||
+++ /dev/null
 | 
			
		||||
@@ -1,93 +0,0 @@
 | 
			
		||||
-From 478b02f1a7043b673565075ea5016376f3293b23 Mon Sep 17 00:00:00 2001
 | 
			
		||||
-From: Hans de Goede <hdegoede@redhat.com>
 | 
			
		||||
-Date: Sat, 7 Feb 2015 22:52:40 +0100
 | 
			
		||||
-Subject: [PATCH] Add linux/compiler-gcc5.h to fix builds with gcc5
 | 
			
		||||
-
 | 
			
		||||
-Add linux/compiler-gcc5/h from the kernel sources at:
 | 
			
		||||
-
 | 
			
		||||
-commit 5631b8fba640a4ab2f8a954f63a603fa34eda96b
 | 
			
		||||
-Author: Steven Noonan <steven@uplinklabs.net>
 | 
			
		||||
-Date:   Sat Oct 25 15:09:42 2014 -0700
 | 
			
		||||
-
 | 
			
		||||
-    compiler/gcc4+: Remove inaccurate comment about 'asm goto' miscompiles
 | 
			
		||||
-
 | 
			
		||||
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
 | 
			
		||||
----
 | 
			
		||||
- include/linux/compiler-gcc5.h |   65 +++++++++++++++++++++++++++++++++++++++++
 | 
			
		||||
- 1 file changed, 65 insertions(+)
 | 
			
		||||
- create mode 100644 include/linux/compiler-gcc5.h
 | 
			
		||||
-
 | 
			
		||||
-diff --git a/include/linux/compiler-gcc5.h b/include/linux/compiler-gcc5.h
 | 
			
		||||
-new file mode 100644
 | 
			
		||||
-index 0000000..c8c5659
 | 
			
		||||
---- /dev/null
 | 
			
		||||
-+++ b/include/linux/compiler-gcc5.h
 | 
			
		||||
-@@ -0,0 +1,65 @@
 | 
			
		||||
-+#ifndef __LINUX_COMPILER_H
 | 
			
		||||
-+#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
 | 
			
		||||
-+#endif
 | 
			
		||||
-+
 | 
			
		||||
-+#define __used				__attribute__((__used__))
 | 
			
		||||
-+#define __must_check			__attribute__((warn_unused_result))
 | 
			
		||||
-+#define __compiler_offsetof(a, b)	__builtin_offsetof(a, b)
 | 
			
		||||
-+
 | 
			
		||||
-+/* Mark functions as cold. gcc will assume any path leading to a call
 | 
			
		||||
-+   to them will be unlikely.  This means a lot of manual unlikely()s
 | 
			
		||||
-+   are unnecessary now for any paths leading to the usual suspects
 | 
			
		||||
-+   like BUG(), printk(), panic() etc. [but let's keep them for now for
 | 
			
		||||
-+   older compilers]
 | 
			
		||||
-+
 | 
			
		||||
-+   Early snapshots of gcc 4.3 don't support this and we can't detect this
 | 
			
		||||
-+   in the preprocessor, but we can live with this because they're unreleased.
 | 
			
		||||
-+   Maketime probing would be overkill here.
 | 
			
		||||
-+
 | 
			
		||||
-+   gcc also has a __attribute__((__hot__)) to move hot functions into
 | 
			
		||||
-+   a special section, but I don't see any sense in this right now in
 | 
			
		||||
-+   the kernel context */
 | 
			
		||||
-+#define __cold			__attribute__((__cold__))
 | 
			
		||||
-+
 | 
			
		||||
-+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
 | 
			
		||||
-+
 | 
			
		||||
-+#ifndef __CHECKER__
 | 
			
		||||
-+# define __compiletime_warning(message) __attribute__((warning(message)))
 | 
			
		||||
-+# define __compiletime_error(message) __attribute__((error(message)))
 | 
			
		||||
-+#endif /* __CHECKER__ */
 | 
			
		||||
-+
 | 
			
		||||
-+/*
 | 
			
		||||
-+ * Mark a position in code as unreachable.  This can be used to
 | 
			
		||||
-+ * suppress control flow warnings after asm blocks that transfer
 | 
			
		||||
-+ * control elsewhere.
 | 
			
		||||
-+ *
 | 
			
		||||
-+ * Early snapshots of gcc 4.5 don't support this and we can't detect
 | 
			
		||||
-+ * this in the preprocessor, but we can live with this because they're
 | 
			
		||||
-+ * unreleased.  Really, we need to have autoconf for the kernel.
 | 
			
		||||
-+ */
 | 
			
		||||
-+#define unreachable() __builtin_unreachable()
 | 
			
		||||
-+
 | 
			
		||||
-+/* Mark a function definition as prohibited from being cloned. */
 | 
			
		||||
-+#define __noclone	__attribute__((__noclone__))
 | 
			
		||||
-+
 | 
			
		||||
-+/*
 | 
			
		||||
-+ * Tell the optimizer that something else uses this function or variable.
 | 
			
		||||
-+ */
 | 
			
		||||
-+#define __visible __attribute__((externally_visible))
 | 
			
		||||
-+
 | 
			
		||||
-+/*
 | 
			
		||||
-+ * GCC 'asm goto' miscompiles certain code sequences:
 | 
			
		||||
-+ *
 | 
			
		||||
-+ *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
 | 
			
		||||
-+ *
 | 
			
		||||
-+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
 | 
			
		||||
-+ *
 | 
			
		||||
-+ * (asm goto is automatically volatile - the naming reflects this.)
 | 
			
		||||
-+ */
 | 
			
		||||
-+#define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)
 | 
			
		||||
-+
 | 
			
		||||
-+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
 | 
			
		||||
-+#define __HAVE_BUILTIN_BSWAP32__
 | 
			
		||||
-+#define __HAVE_BUILTIN_BSWAP64__
 | 
			
		||||
-+#define __HAVE_BUILTIN_BSWAP16__
 | 
			
		||||
-+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
 | 
			
		||||
--- 
 | 
			
		||||
-1.7.10.4
 | 
			
		||||
-
 | 
			
		||||
@ -379,3 +379,37 @@ index d3a14b2..61b8976 100644
 | 
			
		||||
 +}
 | 
			
		||||
 +
 | 
			
		||||
  extern void __iomem *ath79_ddr_base;
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
index a36b8c3..fa4eba2 100644
 | 
			
		||||
--- a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
@@ -9,8 +9,8 @@
 | 
			
		||||
 +	    soc_is_qca955x())
 | 
			
		||||
  		reg = AR71XX_GPIO_REG_FUNC;
 | 
			
		||||
  	else if (soc_is_ar934x() ||
 | 
			
		||||
- 		 soc_is_qca953x() || soc_is_qca956x())
 | 
			
		||||
-@@ -185,15 +186,27 @@ void __init ath79_gpio_output_select(uns
 | 
			
		||||
+ 		 soc_is_qca953x() ||
 | 
			
		||||
+@@ -187,15 +188,31 @@ void __init ath79_gpio_output_select(uns
 | 
			
		||||
  {
 | 
			
		||||
  	void __iomem *base = ath79_gpio_base;
 | 
			
		||||
  	unsigned long flags;
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 +	unsigned long gpio_count;
 | 
			
		||||
  	u32 t, s;
 | 
			
		||||
  
 | 
			
		||||
--	BUG_ON(!soc_is_ar934x() && !soc_is_qca953x());
 | 
			
		||||
+ 	BUG_ON(!soc_is_ar934x() && !soc_is_qca953x() && !soc_is_qca956x());
 | 
			
		||||
 +	if (soc_is_ar934x()) {
 | 
			
		||||
 +		gpio_count = AR934X_GPIO_COUNT;
 | 
			
		||||
 +		reg_base = AR934X_GPIO_REG_OUT_FUNC0;
 | 
			
		||||
@@ -29,6 +29,9 @@
 | 
			
		||||
 +	} else if (soc_is_qca955x()) {
 | 
			
		||||
 +		gpio_count = QCA955X_GPIO_COUNT;
 | 
			
		||||
 +		reg_base = QCA955X_GPIO_REG_OUT_FUNC0;
 | 
			
		||||
++	} else if (soc_is_qca956x()) {
 | 
			
		||||
++		gpio_count = QCA956X_GPIO_COUNT;
 | 
			
		||||
++		reg_base = QCA956X_GPIO_REG_OUT_FUNC0;
 | 
			
		||||
 +	} else {
 | 
			
		||||
 +		BUG();
 | 
			
		||||
 +	}
 | 
			
		||||
@ -1,144 +0,0 @@
 | 
			
		||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Date: Mon, 9 May 2016 00:16:38 +0200
 | 
			
		||||
Subject: toolchain: gcc: fix build with GCC 6
 | 
			
		||||
 | 
			
		||||
At least for GCC 4.8, which is used by most targets.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
 | 
			
		||||
diff --git a/toolchain/gcc/patches/4.8-linaro/030-gcc-6-compile.patch b/toolchain/gcc/patches/4.8-linaro/030-gcc-6-compile.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..c74f2aa
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/toolchain/gcc/patches/4.8-linaro/030-gcc-6-compile.patch
 | 
			
		||||
@@ -0,0 +1,130 @@
 | 
			
		||||
+Upstream commit r233721
 | 
			
		||||
+
 | 
			
		||||
+diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
 | 
			
		||||
+index bd1c1d7..a0ea0d4 100644
 | 
			
		||||
+--- a/gcc/cp/Make-lang.in
 | 
			
		||||
++++ b/gcc/cp/Make-lang.in
 | 
			
		||||
+@@ -111,7 +111,7 @@ else
 | 
			
		||||
+ # deleting the $(srcdir)/cp/cfns.h file.
 | 
			
		||||
+ $(srcdir)/cp/cfns.h:
 | 
			
		||||
+ endif
 | 
			
		||||
+-	gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \
 | 
			
		||||
++	gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L C++ \
 | 
			
		||||
+ 		$(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h
 | 
			
		||||
+ 
 | 
			
		||||
+ #
 | 
			
		||||
+diff --git a/gcc/cp/cfns.gperf b/gcc/cp/cfns.gperf
 | 
			
		||||
+index 05ca753..d9b16b8 100644
 | 
			
		||||
+--- a/gcc/cp/cfns.gperf
 | 
			
		||||
++++ b/gcc/cp/cfns.gperf
 | 
			
		||||
+@@ -1,3 +1,5 @@
 | 
			
		||||
++%language=C++
 | 
			
		||||
++%define class-name libc_name
 | 
			
		||||
+ %{
 | 
			
		||||
+ /* Copyright (C) 2000-2014 Free Software Foundation, Inc.
 | 
			
		||||
+ 
 | 
			
		||||
+@@ -16,14 +18,6 @@ for more details.
 | 
			
		||||
+ You should have received a copy of the GNU General Public License
 | 
			
		||||
+ along with GCC; see the file COPYING3.  If not see
 | 
			
		||||
+ <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
+-#ifdef __GNUC__
 | 
			
		||||
+-__inline
 | 
			
		||||
+-#endif
 | 
			
		||||
+-static unsigned int hash (const char *, unsigned int);
 | 
			
		||||
+-#ifdef __GNUC__
 | 
			
		||||
+-__inline
 | 
			
		||||
+-#endif
 | 
			
		||||
+-const char * libc_name_p (const char *, unsigned int);
 | 
			
		||||
+ %}
 | 
			
		||||
+ %%
 | 
			
		||||
+ # The standard C library functions, for feeding to gperf; the result is used
 | 
			
		||||
+diff --git a/gcc/cp/cfns.h b/gcc/cp/cfns.h
 | 
			
		||||
+index c845ddf..65801d1 100644
 | 
			
		||||
+--- a/gcc/cp/cfns.h
 | 
			
		||||
++++ b/gcc/cp/cfns.h
 | 
			
		||||
+@@ -1,5 +1,5 @@
 | 
			
		||||
+-/* ANSI-C code produced by gperf version 3.0.3 */
 | 
			
		||||
+-/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L ANSI-C cfns.gperf  */
 | 
			
		||||
++/* C++ code produced by gperf version 3.0.4 */
 | 
			
		||||
++/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L C++ --output-file cfns.h cfns.gperf  */
 | 
			
		||||
+ 
 | 
			
		||||
+ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
 | 
			
		||||
+       && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
 | 
			
		||||
+@@ -28,7 +28,7 @@
 | 
			
		||||
+ #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
 | 
			
		||||
+ #endif
 | 
			
		||||
+ 
 | 
			
		||||
+-#line 1 "cfns.gperf"
 | 
			
		||||
++#line 3 "cfns.gperf"
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Copyright (C) 2000-2014 Free Software Foundation, Inc.
 | 
			
		||||
+ 
 | 
			
		||||
+@@ -47,25 +47,18 @@ for more details.
 | 
			
		||||
+ You should have received a copy of the GNU General Public License
 | 
			
		||||
+ along with GCC; see the file COPYING3.  If not see
 | 
			
		||||
+ <http://www.gnu.org/licenses/>.  */
 | 
			
		||||
+-#ifdef __GNUC__
 | 
			
		||||
+-__inline
 | 
			
		||||
+-#endif
 | 
			
		||||
+-static unsigned int hash (const char *, unsigned int);
 | 
			
		||||
+-#ifdef __GNUC__
 | 
			
		||||
+-__inline
 | 
			
		||||
+-#endif
 | 
			
		||||
+-const char * libc_name_p (const char *, unsigned int);
 | 
			
		||||
+ /* maximum key range = 391, duplicates = 0 */
 | 
			
		||||
+ 
 | 
			
		||||
+-#ifdef __GNUC__
 | 
			
		||||
+-__inline
 | 
			
		||||
+-#else
 | 
			
		||||
+-#ifdef __cplusplus
 | 
			
		||||
+-inline
 | 
			
		||||
+-#endif
 | 
			
		||||
+-#endif
 | 
			
		||||
+-static unsigned int
 | 
			
		||||
+-hash (register const char *str, register unsigned int len)
 | 
			
		||||
++class libc_name
 | 
			
		||||
++{
 | 
			
		||||
++private:
 | 
			
		||||
++  static inline unsigned int hash (const char *str, unsigned int len);
 | 
			
		||||
++public:
 | 
			
		||||
++  static const char *libc_name_p (const char *str, unsigned int len);
 | 
			
		||||
++};
 | 
			
		||||
++
 | 
			
		||||
++inline unsigned int
 | 
			
		||||
++libc_name::hash (register const char *str, register unsigned int len)
 | 
			
		||||
+ {
 | 
			
		||||
+   static const unsigned short asso_values[] =
 | 
			
		||||
+     {
 | 
			
		||||
+@@ -122,14 +115,8 @@ hash (register const char *str, register unsigned int len)
 | 
			
		||||
+   return hval + asso_values[(unsigned char)str[len - 1]];
 | 
			
		||||
+ }
 | 
			
		||||
+ 
 | 
			
		||||
+-#ifdef __GNUC__
 | 
			
		||||
+-__inline
 | 
			
		||||
+-#ifdef __GNUC_STDC_INLINE__
 | 
			
		||||
+-__attribute__ ((__gnu_inline__))
 | 
			
		||||
+-#endif
 | 
			
		||||
+-#endif
 | 
			
		||||
+ const char *
 | 
			
		||||
+-libc_name_p (register const char *str, register unsigned int len)
 | 
			
		||||
++libc_name::libc_name_p (register const char *str, register unsigned int len)
 | 
			
		||||
+ {
 | 
			
		||||
+   enum
 | 
			
		||||
+     {
 | 
			
		||||
+diff --git a/gcc/cp/except.c b/gcc/cp/except.c
 | 
			
		||||
+index 221971a..32340f5 100644
 | 
			
		||||
+--- a/gcc/cp/except.c
 | 
			
		||||
++++ b/gcc/cp/except.c
 | 
			
		||||
+@@ -1030,7 +1030,8 @@ nothrow_libfn_p (const_tree fn)
 | 
			
		||||
+      unless the system headers are playing rename tricks, and if
 | 
			
		||||
+      they are, we don't want to be confused by them.  */
 | 
			
		||||
+   id = DECL_NAME (fn);
 | 
			
		||||
+-  return !!libc_name_p (IDENTIFIER_POINTER (id), IDENTIFIER_LENGTH (id));
 | 
			
		||||
++  return !!libc_name::libc_name_p (IDENTIFIER_POINTER (id),
 | 
			
		||||
++				   IDENTIFIER_LENGTH (id));
 | 
			
		||||
+ }
 | 
			
		||||
+ 
 | 
			
		||||
+ /* Returns nonzero if an exception of type FROM will be caught by a
 | 
			
		||||
+-- 
 | 
			
		||||
+1.7.1
 | 
			
		||||
+
 | 
			
		||||
@ -8,10 +8,10 @@ Signed-off-by: P.Wassi <p.wassi at gmx.at>
 | 
			
		||||
Backport of OpenWrt r48711
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index 5a184cd..8c6ac9a 100644
 | 
			
		||||
index c5e39d0..e36c581 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -296,7 +296,8 @@ get_status_led() {
 | 
			
		||||
@@ -305,7 +305,8 @@ get_status_led() {
 | 
			
		||||
 	unifi)
 | 
			
		||||
 		status_led="ubnt:green:dome"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -22,10 +22,10 @@ index 5a184cd..8c6ac9a 100644
 | 
			
		||||
 		;;
 | 
			
		||||
 	unifi-outdoor-plus)
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
index b2e15bb..e4a1473 100755
 | 
			
		||||
index b2b182e..850eac9 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
@@ -366,6 +366,7 @@ tl-wa901nd-v3 |\
 | 
			
		||||
@@ -368,6 +368,7 @@ tl-wa901nd-v3 |\
 | 
			
		||||
 tl-wa901nd-v4 |\
 | 
			
		||||
 tl-wr703n |\
 | 
			
		||||
 tube2h |\
 | 
			
		||||
@ -34,10 +34,10 @@ index b2e15bb..e4a1473 100755
 | 
			
		||||
 mynet-rext |\
 | 
			
		||||
 wp543)
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index ddd6611..8670583 100755
 | 
			
		||||
index 131364c..ac77934 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -881,6 +881,9 @@ ar71xx_board_detect() {
 | 
			
		||||
@@ -896,6 +896,9 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*UniFi)
 | 
			
		||||
 		name="unifi"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -48,7 +48,7 @@ index ddd6611..8670583 100755
 | 
			
		||||
 		name="uap-pro"
 | 
			
		||||
 		;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index c5c1871..4c43166 100755
 | 
			
		||||
index ccccc17..4793fa9 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -251,6 +251,7 @@ platform_check_image() {
 | 
			
		||||
@ -60,10 +60,10 @@ index c5c1871..4c43166 100755
 | 
			
		||||
 	carambola2 | \
 | 
			
		||||
 	weio )
 | 
			
		||||
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
 | 
			
		||||
index e2ff826..9a81911 100644
 | 
			
		||||
index e4bed08..514f7d5 100644
 | 
			
		||||
--- a/target/linux/ar71xx/config-3.18
 | 
			
		||||
+++ b/target/linux/ar71xx/config-3.18
 | 
			
		||||
@@ -137,6 +137,7 @@ CONFIG_ATH79_MACH_TL_WR941ND=y
 | 
			
		||||
@@ -140,6 +140,7 @@ CONFIG_ATH79_MACH_TL_WR941ND=y
 | 
			
		||||
 CONFIG_ATH79_MACH_TL_WR941ND_V6=y
 | 
			
		||||
 CONFIG_ATH79_MACH_TUBE2H=y
 | 
			
		||||
 CONFIG_ATH79_MACH_UBNT=y
 | 
			
		||||
@ -71,7 +71,7 @@ index e2ff826..9a81911 100644
 | 
			
		||||
 CONFIG_ATH79_MACH_UBNT_XM=y
 | 
			
		||||
 CONFIG_ATH79_MACH_WEIO=y
 | 
			
		||||
 CONFIG_ATH79_MACH_WHR_HP_G300N=y
 | 
			
		||||
@@ -320,7 +321,7 @@ CONFIG_SOC_AR933X=y
 | 
			
		||||
@@ -323,7 +324,7 @@ CONFIG_SOC_AR933X=y
 | 
			
		||||
 CONFIG_SOC_AR934X=y
 | 
			
		||||
 CONFIG_SOC_QCA953X=y
 | 
			
		||||
 CONFIG_SOC_QCA955X=y
 | 
			
		||||
@ -218,7 +218,7 @@ index d8e24d0..94eff18 100644
 | 
			
		||||
 	NAME:=Ubiquiti UniFiAP Outdoor
 | 
			
		||||
 	PACKAGES:=
 | 
			
		||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
index d42ceef..dd59f2d 100644
 | 
			
		||||
index 7184966..209eba4 100644
 | 
			
		||||
--- a/target/linux/ar71xx/image/Makefile
 | 
			
		||||
+++ b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
@@ -740,6 +740,16 @@ define Device/oolite
 | 
			
		||||
@ -10,10 +10,10 @@ Signed-off-by: P.Wassi <p.wassi at gmx.at>
 | 
			
		||||
Backport of LEDE c855e70491fbd5d432915c4cbeb3b80f3a117e30
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index 8c6ac9a..3d711ca 100644
 | 
			
		||||
index e36c581..23fd122 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -297,7 +297,7 @@ get_status_led() {
 | 
			
		||||
@@ -306,7 +306,7 @@ get_status_led() {
 | 
			
		||||
 		status_led="ubnt:green:dome"
 | 
			
		||||
 		;;
 | 
			
		||||
 	uap-pro | \
 | 
			
		||||
@ -23,10 +23,10 @@ index 8c6ac9a..3d711ca 100644
 | 
			
		||||
 		;;
 | 
			
		||||
 	unifi-outdoor-plus)
 | 
			
		||||
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 e6fcec8..fa8a2c8 100644
 | 
			
		||||
index f01c6d3..6c6b27a 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
 | 
			
		||||
@@ -75,7 +75,7 @@ case "$FIRMWARE" in
 | 
			
		||||
@@ -77,7 +77,7 @@ case "$FIRMWARE" in
 | 
			
		||||
 		ath10kcal_extract "ART" 20480 2116
 | 
			
		||||
 		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
 | 
			
		||||
 		;;
 | 
			
		||||
@ -36,10 +36,10 @@ index e6fcec8..fa8a2c8 100644
 | 
			
		||||
 		;;
 | 
			
		||||
 	esac
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
index e4a1473..0269e6d 100755
 | 
			
		||||
index 850eac9..cb31c69 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
@@ -366,7 +366,7 @@ tl-wa901nd-v3 |\
 | 
			
		||||
@@ -368,7 +368,7 @@ tl-wa901nd-v3 |\
 | 
			
		||||
 tl-wa901nd-v4 |\
 | 
			
		||||
 tl-wr703n |\
 | 
			
		||||
 tube2h |\
 | 
			
		||||
@ -49,10 +49,10 @@ index e4a1473..0269e6d 100755
 | 
			
		||||
 mynet-rext |\
 | 
			
		||||
 wp543)
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index 8670583..d3e6db9 100755
 | 
			
		||||
index ac77934..f8dd719 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -881,8 +881,8 @@ ar71xx_board_detect() {
 | 
			
		||||
@@ -896,8 +896,8 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*UniFi)
 | 
			
		||||
 		name="unifi"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -64,7 +64,7 @@ index 8670583..d3e6db9 100755
 | 
			
		||||
 	*"UniFi AP Pro")
 | 
			
		||||
 		name="uap-pro"
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index 4c43166..a1b65b7 100755
 | 
			
		||||
index 4793fa9..5aa59fd 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -251,7 +251,7 @@ platform_check_image() {
 | 
			
		||||
@ -143,7 +143,7 @@ index 94eff18..eac0240 100644
 | 
			
		||||
 define Profile/UBNTUNIFIOUTDOOR
 | 
			
		||||
 	NAME:=Ubiquiti UniFiAP Outdoor
 | 
			
		||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
index dd59f2d..3efa2e1 100644
 | 
			
		||||
index 209eba4..c9d6ed1 100644
 | 
			
		||||
--- a/target/linux/ar71xx/image/Makefile
 | 
			
		||||
+++ b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
@@ -741,14 +741,19 @@ endef
 | 
			
		||||
@ -8,10 +8,10 @@ Signed-off-by: P.Wassi <p.wassi at gmx.at>
 | 
			
		||||
Backport of LEDE 8307c2fe686ded345c80318359d5b6679e581fa2
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index 3d711ca..775aac6 100644
 | 
			
		||||
index 23fd122..f182d60 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -297,7 +297,8 @@ get_status_led() {
 | 
			
		||||
@@ -306,7 +306,8 @@ get_status_led() {
 | 
			
		||||
 		status_led="ubnt:green:dome"
 | 
			
		||||
 		;;
 | 
			
		||||
 	uap-pro | \
 | 
			
		||||
@ -22,10 +22,10 @@ index 3d711ca..775aac6 100644
 | 
			
		||||
 		;;
 | 
			
		||||
 	unifi-outdoor-plus)
 | 
			
		||||
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 fa8a2c8..cde7aaf 100644
 | 
			
		||||
index 6c6b27a..0e93feb 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
 | 
			
		||||
@@ -75,7 +75,8 @@ case "$FIRMWARE" in
 | 
			
		||||
@@ -77,7 +77,8 @@ case "$FIRMWARE" in
 | 
			
		||||
 		ath10kcal_extract "ART" 20480 2116
 | 
			
		||||
 		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
 | 
			
		||||
 		;;
 | 
			
		||||
@ -36,10 +36,10 @@ index fa8a2c8..cde7aaf 100644
 | 
			
		||||
 		;;
 | 
			
		||||
 	esac
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
index 0269e6d..0a23756 100755
 | 
			
		||||
index cb31c69..e5c64bb 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
@@ -398,6 +398,13 @@ wpj344)
 | 
			
		||||
@@ -400,6 +400,13 @@ wpj344)
 | 
			
		||||
 	ucidef_add_switch_vlan "switch0" "2" "0t 2"
 | 
			
		||||
 	;;
 | 
			
		||||
 
 | 
			
		||||
@ -54,10 +54,10 @@ index 0269e6d..0a23756 100755
 | 
			
		||||
 	ucidef_set_interfaces_lan_wan "eth0" "eth1"
 | 
			
		||||
 	;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index d3e6db9..7fc951a 100755
 | 
			
		||||
index f8dd719..348e0f6 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -884,6 +884,9 @@ ar71xx_board_detect() {
 | 
			
		||||
@@ -899,6 +899,9 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*"UniFi-AC-LITE")
 | 
			
		||||
 		name="unifiac-lite"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -68,7 +68,7 @@ index d3e6db9..7fc951a 100755
 | 
			
		||||
 		name="uap-pro"
 | 
			
		||||
 		;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index a1b65b7..0e9833d 100755
 | 
			
		||||
index 5aa59fd..0f166eb 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -252,6 +252,7 @@ platform_check_image() {
 | 
			
		||||
@ -193,7 +193,7 @@ index eac0240..69b8398 100644
 | 
			
		||||
 	NAME:=Ubiquiti UniFiAP Outdoor
 | 
			
		||||
 	PACKAGES:=
 | 
			
		||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
index 3efa2e1..58118f2 100644
 | 
			
		||||
index c9d6ed1..0cf1df1 100644
 | 
			
		||||
--- a/target/linux/ar71xx/image/Makefile
 | 
			
		||||
+++ b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
@@ -753,7 +753,13 @@ define Device/ubnt-unifiac-lite
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Tue, 17 May 2016 16:38:29 +0200
 | 
			
		||||
Subject: ar71xx: Generate sysupgrade images for OpenMesh devices
 | 
			
		||||
 | 
			
		||||
Some OpenWrt based firmwares like Gluon expect that a sysupgrade image
 | 
			
		||||
exists when a device firmware can be updated via sysupgrade. This image
 | 
			
		||||
wasn't created until now because OpenMesh devices use the same image for
 | 
			
		||||
factory and sysupgrade flash. Copying the image from *factory.bin to
 | 
			
		||||
*sysupgrade.bin is therefore enough to make the sysupgrade functionality
 | 
			
		||||
visible.
 | 
			
		||||
 | 
			
		||||
Reported-by: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624172/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
index 58118f2..7aee0c8 100644
 | 
			
		||||
--- a/target/linux/ar71xx/image/Makefile
 | 
			
		||||
+++ b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
@@ -1877,6 +1877,9 @@ define Image/Build/OpenMesh
 | 
			
		||||
 		"$(BUILD_DIR)/fwupgrade.cfg-$(4)" "fwupgrade.cfg" \
 | 
			
		||||
 		"$(KDIR_TMP)/vmlinux-$(2).uImage" "kernel" \
 | 
			
		||||
 		"$(KDIR)/root.$(1)" "rootfs"
 | 
			
		||||
+	if [ -e "$(call factoryname,$(1),$(2))" ]; then \
 | 
			
		||||
+		cp "$(call factoryname,$(1),$(2))" "$(call sysupname,$(1),$(2))"; \
 | 
			
		||||
+	fi
 | 
			
		||||
 endef
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
@ -10,10 +10,10 @@ Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
 | 
			
		||||
Backport of r49101
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
index 9a768cd..ae17853 100644
 | 
			
		||||
index d7dc9a1..337000c 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
@@ -590,6 +590,21 @@ wnr2000-v4)
 | 
			
		||||
@@ -592,6 +592,21 @@ wnr2000-v4)
 | 
			
		||||
 	ucidef_set_led_usbdev "usb" "USB" "netgear:amber:status" "1-1"
 | 
			
		||||
 	;;
 | 
			
		||||
 
 | 
			
		||||
@ -1,202 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:10:43 +0000
 | 
			
		||||
Subject: ar71xx: add kernel support for the OpenMesh MR1750 board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46926
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624173/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
 | 
			
		||||
index 9a81911..c5a3c9a 100644
 | 
			
		||||
--- a/target/linux/ar71xx/config-3.18
 | 
			
		||||
+++ b/target/linux/ar71xx/config-3.18
 | 
			
		||||
@@ -79,6 +79,7 @@ CONFIG_ATH79_MACH_JWAP003=y
 | 
			
		||||
 CONFIG_ATH79_MACH_MC_MAC1200R=y
 | 
			
		||||
 CONFIG_ATH79_MACH_MR16=y
 | 
			
		||||
 CONFIG_ATH79_MACH_MR12=y
 | 
			
		||||
+CONFIG_ATH79_MACH_MR1750=y
 | 
			
		||||
 CONFIG_ATH79_MACH_MR600=y
 | 
			
		||||
 CONFIG_ATH79_MACH_MR900=y
 | 
			
		||||
 CONFIG_ATH79_MACH_MYNET_N600=y
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..8ace02f
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
@@ -0,0 +1,129 @@
 | 
			
		||||
+/*
 | 
			
		||||
+ * MR1750 board support
 | 
			
		||||
+ *
 | 
			
		||||
+ * Copyright (c) 2012 Qualcomm Atheros
 | 
			
		||||
+ * Copyright (c) 2012-2013 Marek Lindner <marek@open-mesh.com>
 | 
			
		||||
+ *
 | 
			
		||||
+ * 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 <linux/platform_device.h>
 | 
			
		||||
+#include <linux/ar8216_platform.h>
 | 
			
		||||
+
 | 
			
		||||
+#include <asm/mach-ath79/ar71xx_regs.h>
 | 
			
		||||
+
 | 
			
		||||
+#include "common.h"
 | 
			
		||||
+#include "dev-ap9x-pci.h"
 | 
			
		||||
+#include "dev-gpio-buttons.h"
 | 
			
		||||
+#include "dev-eth.h"
 | 
			
		||||
+#include "dev-leds-gpio.h"
 | 
			
		||||
+#include "dev-m25p80.h"
 | 
			
		||||
+#include "dev-wmac.h"
 | 
			
		||||
+#include "machtypes.h"
 | 
			
		||||
+#include "pci.h"
 | 
			
		||||
+
 | 
			
		||||
+#define MR1750_GPIO_LED_LAN		12
 | 
			
		||||
+#define MR1750_GPIO_LED_WLAN_2G		13
 | 
			
		||||
+#define MR1750_GPIO_LED_STATUS_GREEN	19
 | 
			
		||||
+#define MR1750_GPIO_LED_STATUS_RED	21
 | 
			
		||||
+#define MR1750_GPIO_LED_POWER		22
 | 
			
		||||
+#define MR1750_GPIO_LED_WLAN_5G		23
 | 
			
		||||
+
 | 
			
		||||
+#define MR1750_GPIO_BTN_RESET		17
 | 
			
		||||
+
 | 
			
		||||
+#define MR1750_KEYS_POLL_INTERVAL	20	/* msecs */
 | 
			
		||||
+#define MR1750_KEYS_DEBOUNCE_INTERVAL	(3 * MR1750_KEYS_POLL_INTERVAL)
 | 
			
		||||
+
 | 
			
		||||
+#define MR1750_MAC0_OFFSET		0
 | 
			
		||||
+#define MR1750_WMAC_CALDATA_OFFSET	0x1000
 | 
			
		||||
+
 | 
			
		||||
+static struct gpio_led mr1750_leds_gpio[] __initdata = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "mr1750:blue:power",
 | 
			
		||||
+		.gpio		= MR1750_GPIO_LED_POWER,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	},
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "mr1750:blue:wan",
 | 
			
		||||
+		.gpio		= MR1750_GPIO_LED_LAN,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	},
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "mr1750:blue:wlan24",
 | 
			
		||||
+		.gpio		= MR1750_GPIO_LED_WLAN_2G,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	},
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "mr1750:blue:wlan58",
 | 
			
		||||
+		.gpio		= MR1750_GPIO_LED_WLAN_5G,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	},
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "mr1750:green:status",
 | 
			
		||||
+		.gpio		= MR1750_GPIO_LED_STATUS_GREEN,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	},
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "mr1750:red:status",
 | 
			
		||||
+		.gpio		= MR1750_GPIO_LED_STATUS_RED,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct gpio_keys_button mr1750_gpio_keys[] __initdata = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.desc		= "Reset button",
 | 
			
		||||
+		.type		= EV_KEY,
 | 
			
		||||
+		.code		= KEY_RESTART,
 | 
			
		||||
+		.debounce_interval = MR1750_KEYS_DEBOUNCE_INTERVAL,
 | 
			
		||||
+		.gpio		= MR1750_GPIO_BTN_RESET,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static void __init mr1750_setup(void)
 | 
			
		||||
+{
 | 
			
		||||
+	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
+	u8 mac[6];
 | 
			
		||||
+
 | 
			
		||||
+	ath79_eth0_pll_data.pll_1000 = 0xbe000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_100 = 0x80000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_10 = 0x80001313;
 | 
			
		||||
+
 | 
			
		||||
+	ath79_register_m25p80(NULL);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(mr1750_leds_gpio),
 | 
			
		||||
+				 mr1750_leds_gpio);
 | 
			
		||||
+	ath79_register_gpio_keys_polled(-1, MR1750_KEYS_POLL_INTERVAL,
 | 
			
		||||
+					ARRAY_SIZE(mr1750_gpio_keys),
 | 
			
		||||
+					mr1750_gpio_keys);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_init_mac(mac, art + MR1750_MAC0_OFFSET, 1);
 | 
			
		||||
+	ath79_register_wmac(art + MR1750_WMAC_CALDATA_OFFSET, mac);
 | 
			
		||||
+	ath79_register_pci();
 | 
			
		||||
+
 | 
			
		||||
+	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
			
		||||
+	ath79_register_mdio(0, 0x0);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_init_mac(ath79_eth0_data.mac_addr, art + MR1750_MAC0_OFFSET, 0);
 | 
			
		||||
+
 | 
			
		||||
+	/* GMAC0 is connected to the RMGII interface */
 | 
			
		||||
+	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
 | 
			
		||||
+	ath79_eth0_data.phy_mask = BIT(5);
 | 
			
		||||
+	ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
 | 
			
		||||
+
 | 
			
		||||
+	ath79_register_eth(0);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+MIPS_MACHINE(ATH79_MACH_MR1750, "MR1750", "OpenMesh MR1750", mr1750_setup);
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/815-MIPS-ath79-add-mr1750-support.patch b/target/linux/ar71xx/patches-3.18/815-MIPS-ath79-add-mr1750-support.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..d802a12
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/815-MIPS-ath79-add-mr1750-support.patch
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
+--- a/arch/mips/ath79/Kconfig
 | 
			
		||||
++++ b/arch/mips/ath79/Kconfig
 | 
			
		||||
+@@ -763,6 +763,16 @@ config ATH79_MACH_CAP4200AG
 | 
			
		||||
+ 	select ATH79_DEV_M25P80
 | 
			
		||||
+ 	select ATH79_DEV_WMAC
 | 
			
		||||
+ 
 | 
			
		||||
++config ATH79_MACH_MR1750
 | 
			
		||||
++	bool "OpenMesh MR1750 board support"
 | 
			
		||||
++	select SOC_QCA955X
 | 
			
		||||
++	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_MR900
 | 
			
		||||
+ 	bool "OpenMesh MR900 board support"
 | 
			
		||||
+ 	select SOC_QCA955X
 | 
			
		||||
+--- a/arch/mips/ath79/Makefile
 | 
			
		||||
++++ b/arch/mips/ath79/Makefile
 | 
			
		||||
+@@ -80,6 +80,7 @@ obj-$(CONFIG_ATH79_MACH_HORNET_UB)	+= ma
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_MC_MAC1200R)     += mach-mc-mac1200r.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_MR12)		+= mach-mr12.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_MR16)		+= mach-mr16.o
 | 
			
		||||
++obj-$(CONFIG_ATH79_MACH_MR1750)		+= mach-mr1750.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_MR600)		+= mach-mr600.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_MR900)		+= mach-mr900.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_MYNET_N600)	+= mach-mynet-n600.o
 | 
			
		||||
+--- a/arch/mips/ath79/machtypes.h
 | 
			
		||||
++++ b/arch/mips/ath79/machtypes.h
 | 
			
		||||
+@@ -69,6 +69,7 @@ enum ath79_mach_type {
 | 
			
		||||
+ 	ATH79_MACH_HORNET_UB,		/* ALFA Networks Hornet-UB */
 | 
			
		||||
+ 	ATH79_MACH_MR12,		/* Cisco Meraki MR12 */
 | 
			
		||||
+ 	ATH79_MACH_MR16,		/* Cisco Meraki MR16 */
 | 
			
		||||
++	ATH79_MACH_MR1750,		/* OpenMesh MR1750 */
 | 
			
		||||
+ 	ATH79_MACH_MR600V2,		/* OpenMesh MR600v2 */
 | 
			
		||||
+ 	ATH79_MACH_MR600,		/* OpenMesh MR600 */
 | 
			
		||||
+ 	ATH79_MACH_MR900,		/* OpenMesh MR900 */
 | 
			
		||||
@ -9,7 +9,7 @@ https://raw.githubusercontent.com/domino-team/OpenWrt-patches/master/AR150%2C%20
 | 
			
		||||
(and fixed indentation in target/linux/ar71xx/base-files/lib/ar71xx.sh)
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
index ae17853..dc8b8d6 100644
 | 
			
		||||
index 337000c..032acc9 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
@@ -181,6 +181,10 @@ dlan-pro-1200-ac)
 | 
			
		||||
@ -24,10 +24,10 @@ index ae17853..dc8b8d6 100644
 | 
			
		||||
 	ucidef_set_led_netdev "lan" "LAN" "gl-connect:green:lan" "eth1"
 | 
			
		||||
 	ucidef_set_led_wlan "wlan" "WLAN" "gl-connect:red:wlan" "phy0tpt"
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
index 4066506..89a2184 100755
 | 
			
		||||
index e5c64bb..b8ae576 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
@@ -381,6 +381,7 @@ dir-505-a1)
 | 
			
		||||
@@ -382,6 +382,7 @@ dir-505-a1)
 | 
			
		||||
 alfa-ap96 |\
 | 
			
		||||
 alfa-nx |\
 | 
			
		||||
 ap83 |\
 | 
			
		||||
@ -36,7 +36,7 @@ index 4066506..89a2184 100755
 | 
			
		||||
 jwap003 |\
 | 
			
		||||
 pb42 |\
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index fbf76c8..db908f9 100755
 | 
			
		||||
index 348e0f6..5119b36 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -500,6 +500,9 @@ ar71xx_board_detect() {
 | 
			
		||||
@ -50,7 +50,7 @@ index fbf76c8..db908f9 100755
 | 
			
		||||
 		name="epg5000"
 | 
			
		||||
 		;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index 4a4c476..aeb4577 100755
 | 
			
		||||
index 0f166eb..f33419f 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() {
 | 
			
		||||
@ -1,67 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:11:01 +0000
 | 
			
		||||
Subject: ar71xx: add user-space support for the OpenMesh MR1750 board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46927
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624174/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index 775aac6..44d2ddf 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -143,6 +143,9 @@ get_status_led() {
 | 
			
		||||
 	mr600v2)
 | 
			
		||||
 		status_led="mr600:blue:power"
 | 
			
		||||
 		;;
 | 
			
		||||
+	mr1750)
 | 
			
		||||
+		status_led="mr1750:blue:power"
 | 
			
		||||
+		;;
 | 
			
		||||
 	mr900 | \
 | 
			
		||||
 	mr900v2)
 | 
			
		||||
 		status_led="mr900:blue:power"
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
index a4b355a..c451124 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
@@ -239,6 +239,12 @@ mr600)
 | 
			
		||||
 	ucidef_set_led_wlan "wlan58" "WLAN58" "mr600:green:wlan58" "phy0tpt"
 | 
			
		||||
 	;;
 | 
			
		||||
 
 | 
			
		||||
+mr1750)
 | 
			
		||||
+	ucidef_set_led_netdev "lan" "LAN" "mr1750:blue:wan" "eth0"
 | 
			
		||||
+	ucidef_set_led_wlan "wlan58" "WLAN58" "mr1750:blue:wlan58" "phy0tpt"
 | 
			
		||||
+	ucidef_set_led_wlan "wlan24" "WLAN24" "mr1750:blue:wlan24" "phy1tpt"
 | 
			
		||||
+	;;
 | 
			
		||||
+
 | 
			
		||||
 mr900 | \
 | 
			
		||||
 mr900v2)
 | 
			
		||||
 	ucidef_set_led_netdev "lan" "LAN" "mr900:blue:wan" "eth0"
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
index 0a23756..4066506 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
@@ -334,6 +334,7 @@ eap300v2 |\
 | 
			
		||||
 eap7660d |\
 | 
			
		||||
 el-mini |\
 | 
			
		||||
 loco-m-xw |\
 | 
			
		||||
+mr1750 |\
 | 
			
		||||
 mr600 |\
 | 
			
		||||
 mr600v2 |\
 | 
			
		||||
 mr900 |\
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index 7fc951a..587d029 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -562,6 +562,9 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*MR600v2)
 | 
			
		||||
 		name="mr600v2"
 | 
			
		||||
 		;;
 | 
			
		||||
+	*MR1750)
 | 
			
		||||
+		name="mr1750"
 | 
			
		||||
+		;;
 | 
			
		||||
 	*MR600)
 | 
			
		||||
 		name="mr600"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -1,32 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:11:18 +0000
 | 
			
		||||
Subject: scripts/om-fwupgradecfg-gen.sh: add support for the MR1750
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46928
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624175/
 | 
			
		||||
 | 
			
		||||
diff --git a/scripts/om-fwupgradecfg-gen.sh b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
index e132954..c790214 100644
 | 
			
		||||
--- a/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
+++ b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 #
 | 
			
		||||
 
 | 
			
		||||
 usage() {
 | 
			
		||||
-	echo "Usage: $0 <OM2P|OM5P|MR600|MR900> <out file path> <kernel path> <rootfs path>"
 | 
			
		||||
+	echo "Usage: $0 <OM2P|OM5P|MR600|MR900|MR1750> <out file path> <kernel path> <rootfs path>"
 | 
			
		||||
 	rm -f $CFG_OUT
 | 
			
		||||
 	exit 1
 | 
			
		||||
 }
 | 
			
		||||
@@ -26,7 +26,7 @@ case $CE_TYPE in
 | 
			
		||||
 		FLASH_BS=262144
 | 
			
		||||
 		MD5_SKIP_BLOCKS=1
 | 
			
		||||
 		;;
 | 
			
		||||
-	OM5P|MR600|MR900)
 | 
			
		||||
+	OM5P|MR600|MR900|MR1750)
 | 
			
		||||
 		MAX_PART_SIZE=7808
 | 
			
		||||
 		KERNEL_FLASH_ADDR=0xb0000
 | 
			
		||||
 		FLASH_BS=65536
 | 
			
		||||
@ -1,55 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:11:24 +0000
 | 
			
		||||
Subject: ar71xx: enable sysupgrade for the OpenMesh MR1750
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46929
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624176/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
index 547116e..9ca0f5b 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
@@ -72,6 +72,11 @@ platform_check_image_openmesh()
 | 
			
		||||
 			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
 			return 1
 | 
			
		||||
 			;;
 | 
			
		||||
+		MR1750)
 | 
			
		||||
+			[ "$board" = "mr1750" ] && break
 | 
			
		||||
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
+			return 1
 | 
			
		||||
+			;;
 | 
			
		||||
 		MR600)
 | 
			
		||||
 			[ "$board" = "mr600" ] && break
 | 
			
		||||
 			[ "$board" = "mr600v2" ] && break
 | 
			
		||||
@@ -157,7 +162,7 @@ platform_do_upgrade_openmesh()
 | 
			
		||||
 			kernel_start_addr1=0x9f1c0000
 | 
			
		||||
 			kernel_start_addr2=0x9f8c0000
 | 
			
		||||
 			;;
 | 
			
		||||
-		OM5P|MR600|MR900)
 | 
			
		||||
+		OM5P|MR600|MR900|MR1750)
 | 
			
		||||
 			block_size=$((64 * 1024))
 | 
			
		||||
 			total_size=7995392
 | 
			
		||||
 			kernel_start_addr1=0x9f0b0000
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index 0e9833d..ac060ea 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -296,6 +296,7 @@ platform_check_image() {
 | 
			
		||||
 
 | 
			
		||||
 		return 0;
 | 
			
		||||
 		;;
 | 
			
		||||
+	mr1750 | \
 | 
			
		||||
 	mr600 | \
 | 
			
		||||
 	mr600v2 | \
 | 
			
		||||
 	mr900 | \
 | 
			
		||||
@@ -528,6 +529,7 @@ platform_do_upgrade() {
 | 
			
		||||
 	tew-673gru)
 | 
			
		||||
 		platform_do_upgrade_dir825b "$ARGV"
 | 
			
		||||
 		;;
 | 
			
		||||
+	mr1750 | \
 | 
			
		||||
 	mr600 | \
 | 
			
		||||
 	mr600v2 | \
 | 
			
		||||
 	mr900 | \
 | 
			
		||||
@ -1,23 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:11:35 +0000
 | 
			
		||||
Subject: package/om-watchdog: add OpenMesh MR1750 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46930
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624177/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/kernel/om-watchdog/files/om-watchdog.init b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
index 135fef7..c792968 100644
 | 
			
		||||
--- a/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
+++ b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
@@ -25,7 +25,7 @@ boot() {
 | 
			
		||||
 			"mr600v2")
 | 
			
		||||
 				service_start /sbin/om-watchdog 15
 | 
			
		||||
 				;;
 | 
			
		||||
-			"mr900"|"mr900v2")
 | 
			
		||||
+			"mr900"|"mr900v2"|"mr1750")
 | 
			
		||||
 				service_start /sbin/om-watchdog 16
 | 
			
		||||
 				;;
 | 
			
		||||
 		esac
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:11:43 +0000
 | 
			
		||||
Subject: package/uboot-envtools: add OpenMesh MR1750 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46931
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624178/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
index ec8541c..ef00f17 100644
 | 
			
		||||
--- a/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
+++ b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
@@ -21,6 +21,7 @@ carambola2 | \
 | 
			
		||||
 eap300v2 | \
 | 
			
		||||
 hornet-ub | \
 | 
			
		||||
 hornet-ub-x2 | \
 | 
			
		||||
+mr1750 | \
 | 
			
		||||
 mr600 | \
 | 
			
		||||
 mr600v2 | \
 | 
			
		||||
 mr900 | \
 | 
			
		||||
@ -1,57 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:11:51 +0000
 | 
			
		||||
Subject: ar71xx: create profile and build image for the OpenMesh MR1750 board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46932
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624179/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/generic/profiles/openmesh.mk b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
index 41b462e..06cf135 100644
 | 
			
		||||
--- a/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
+++ b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
@@ -49,9 +49,20 @@ endef
 | 
			
		||||
 
 | 
			
		||||
 $(eval $(call Profile,MR900))
 | 
			
		||||
 
 | 
			
		||||
+define Profile/MR1750
 | 
			
		||||
+        NAME:=OpenMesh MR1750
 | 
			
		||||
+        PACKAGES:=kmod-ath9k kmod-ath10k ath10k-firmware-qca988x
 | 
			
		||||
+endef
 | 
			
		||||
+
 | 
			
		||||
+define Profile/MR1750/Description
 | 
			
		||||
+        Package set optimized for the OpenMesh MR1750.
 | 
			
		||||
+endef
 | 
			
		||||
+
 | 
			
		||||
+$(eval $(call Profile,MR1750))
 | 
			
		||||
+
 | 
			
		||||
 define Profile/OPENMESH
 | 
			
		||||
 	NAME:=OpenMesh products
 | 
			
		||||
-	PACKAGES:=kmod-ath9k om-watchdog
 | 
			
		||||
+	PACKAGES:=kmod-ath9k kmod-ath10k om-watchdog
 | 
			
		||||
 endef
 | 
			
		||||
 
 | 
			
		||||
 define Profile/OPENMESH/Description
 | 
			
		||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
index 7aee0c8..0ebb7dc 100644
 | 
			
		||||
--- a/target/linux/ar71xx/image/Makefile
 | 
			
		||||
+++ b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
@@ -2045,6 +2045,7 @@ $(eval $(call SingleProfile,OpenMesh,squashfs-only,OM2P,om2p,,,,OM2P))
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,OM5P,om5p,,,,OM5P))
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,MR600,mr600,,,,MR600))
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,MR900,mr900,,,,MR900))
 | 
			
		||||
+$(eval $(call SingleProfile,OpenMesh,squashfs-only,MR1750,mr1750,,,,MR1750))
 | 
			
		||||
 
 | 
			
		||||
 $(eval $(call SingleProfile,PB4X,128k,ALL0305,all0305,ALL0305,ttyS0,115200))
 | 
			
		||||
 $(eval $(call SingleProfile,PB4X,128k,EAP7660D,eap7660d,EAP7660D,ttyS0,115200))
 | 
			
		||||
@@ -2138,7 +2139,7 @@ $(eval $(call MultiProfile,AP121,AP121_2M AP121_4M))
 | 
			
		||||
 $(eval $(call MultiProfile,DIR615IX,DIR615I1 DIR615I3))
 | 
			
		||||
 $(eval $(call MultiProfile,AP136,AP136_010 AP136_020))
 | 
			
		||||
 $(eval $(call MultiProfile,EWDORIN, EWDORINAP EWDORINRT EWDORIN16M))
 | 
			
		||||
-$(eval $(call MultiProfile,OPENMESH,OM2P OM5P MR600 MR900))
 | 
			
		||||
+$(eval $(call MultiProfile,OPENMESH,OM2P OM5P MR600 MR900 MR1750))
 | 
			
		||||
 $(eval $(call MultiProfile,TEW652BRP,TEW652BRP_FW TEW652BRP_RECOVERY))
 | 
			
		||||
 $(eval $(call MultiProfile,TLMR3220,TLMR3220V1))
 | 
			
		||||
 $(eval $(call MultiProfile,TLMR3420,TLMR3420V1))
 | 
			
		||||
@ -1,47 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Wed, 16 Mar 2016 09:27:01 +0000
 | 
			
		||||
Subject: ar71xx: Extend the list of bits in QCA955X_GMAC_REG_ETH_CFG
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49027
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624180/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch b/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch
 | 
			
		||||
index 8bf7658..797977f 100644
 | 
			
		||||
--- a/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch
 | 
			
		||||
@@ -207,7 +207,7 @@
 | 
			
		||||
  #define AR934X_GPIO_REG_FUNC		0x6c
 | 
			
		||||
  
 | 
			
		||||
  #define AR71XX_GPIO_COUNT		16
 | 
			
		||||
-@@ -560,4 +663,153 @@
 | 
			
		||||
+@@ -560,4 +663,170 @@
 | 
			
		||||
  #define AR934X_SRIF_DPLL2_OUTDIV_SHIFT	13
 | 
			
		||||
  #define AR934X_SRIF_DPLL2_OUTDIV_MASK	0x7
 | 
			
		||||
  
 | 
			
		||||
@@ -358,6 +358,23 @@
 | 
			
		||||
 +#define QCA955X_GMAC_REG_ETH_CFG	0x00
 | 
			
		||||
 +
 | 
			
		||||
 +#define QCA955X_ETH_CFG_RGMII_EN	BIT(0)
 | 
			
		||||
++#define QCA955X_ETH_CFG_MII_GE0		BIT(1)
 | 
			
		||||
++#define QCA955X_ETH_CFG_GMII_GE0	BIT(2)
 | 
			
		||||
++#define QCA955X_ETH_CFG_MII_GE0_MASTER	BIT(3)
 | 
			
		||||
++#define QCA955X_ETH_CFG_MII_GE0_SLAVE	BIT(4)
 | 
			
		||||
++#define QCA955X_ETH_CFG_GE0_ERR_EN	BIT(5)
 | 
			
		||||
 +#define QCA955X_ETH_CFG_GE0_SGMII	BIT(6)
 | 
			
		||||
++#define QCA955X_ETH_CFG_RMII_GE0	BIT(10)
 | 
			
		||||
++#define QCA955X_ETH_CFG_MII_CNTL_SPEED	BIT(11)
 | 
			
		||||
++#define QCA955X_ETH_CFG_RMII_GE0_MASTER	BIT(12)
 | 
			
		||||
++#define QCA955X_ETH_CFG_RXD_DELAY_MASK	0x3
 | 
			
		||||
++#define QCA955X_ETH_CFG_RXD_DELAY_SHIFT	14
 | 
			
		||||
++#define QCA955X_ETH_CFG_RDV_DELAY	BIT(16)
 | 
			
		||||
++#define QCA955X_ETH_CFG_RDV_DELAY_MASK	0x3
 | 
			
		||||
++#define QCA955X_ETH_CFG_RDV_DELAY_SHIFT	16
 | 
			
		||||
++#define QCA955X_ETH_CFG_TXD_DELAY_MASK	0x3
 | 
			
		||||
++#define QCA955X_ETH_CFG_TXD_DELAY_SHIFT	18
 | 
			
		||||
++#define QCA955X_ETH_CFG_TXE_DELAY_MASK	0x3
 | 
			
		||||
++#define QCA955X_ETH_CFG_TXE_DELAY_SHIFT	20
 | 
			
		||||
 +
 | 
			
		||||
  #endif /* __ASM_MACH_AR71XX_REGS_H */
 | 
			
		||||
@ -1,49 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Tue, 7 Jul 2015 13:47:39 +0000
 | 
			
		||||
Subject: ar71xx: Use *_eth_cfg helper for Open Mesh MR900 boards
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46241
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624181/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
index fe3e1fa..9c3164d 100644
 | 
			
		||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
@@ -94,24 +94,6 @@ static struct gpio_keys_button mr900_gpio_keys[] __initdata = {
 | 
			
		||||
 	},
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
-
 | 
			
		||||
-static void __init mr900_gmac_setup(void)
 | 
			
		||||
-{
 | 
			
		||||
-	void __iomem *base;
 | 
			
		||||
-	u32 t;
 | 
			
		||||
-
 | 
			
		||||
-	base = ioremap(QCA955X_GMAC_BASE, QCA955X_GMAC_SIZE);
 | 
			
		||||
-
 | 
			
		||||
-	t = __raw_readl(base + QCA955X_GMAC_REG_ETH_CFG);
 | 
			
		||||
-
 | 
			
		||||
-	t &= ~(QCA955X_ETH_CFG_RGMII_EN | QCA955X_ETH_CFG_GE0_SGMII);
 | 
			
		||||
-	t |= QCA955X_ETH_CFG_RGMII_EN;
 | 
			
		||||
-
 | 
			
		||||
-	__raw_writel(t, base + QCA955X_GMAC_REG_ETH_CFG);
 | 
			
		||||
-
 | 
			
		||||
-	iounmap(base);
 | 
			
		||||
-}
 | 
			
		||||
-
 | 
			
		||||
 static void __init mr900_setup(void)
 | 
			
		||||
 {
 | 
			
		||||
 	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
@@ -141,8 +123,7 @@ static void __init mr900_setup(void)
 | 
			
		||||
 	}
 | 
			
		||||
 	pdata->use_eeprom = true;
 | 
			
		||||
 
 | 
			
		||||
-	mr900_gmac_setup();
 | 
			
		||||
-
 | 
			
		||||
+	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
			
		||||
 	ath79_register_mdio(0, 0x0);
 | 
			
		||||
 
 | 
			
		||||
 	ath79_init_mac(ath79_eth0_data.mac_addr, art + MR900_MAC0_OFFSET, 0);
 | 
			
		||||
@ -1,79 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 24 Jul 2015 09:10:00 +0000
 | 
			
		||||
Subject: ar71xx: Allow to use ath79_gpio_output_select on QCA955x
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46459
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624182/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..e71b6e2
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
@@ -0,0 +1,63 @@
 | 
			
		||||
+--- a/arch/mips/ath79/gpio.c
 | 
			
		||||
++++ b/arch/mips/ath79/gpio.c
 | 
			
		||||
+@@ -187,15 +187,30 @@ void __init ath79_gpio_output_select(uns
 | 
			
		||||
+ {
 | 
			
		||||
+ 	void __iomem *base = ath79_gpio_base;
 | 
			
		||||
+ 	unsigned long flags;
 | 
			
		||||
+-	unsigned int reg;
 | 
			
		||||
++	unsigned int reg, reg_base;
 | 
			
		||||
++	unsigned long gpio_count;
 | 
			
		||||
+ 	u32 t, s;
 | 
			
		||||
+ 
 | 
			
		||||
+-	BUG_ON(!soc_is_ar934x() && !soc_is_qca953x() && !soc_is_qca956x());
 | 
			
		||||
++	if (soc_is_ar934x()) {
 | 
			
		||||
++		gpio_count = AR934X_GPIO_COUNT;
 | 
			
		||||
++		reg_base = AR934X_GPIO_REG_OUT_FUNC0;
 | 
			
		||||
++	} else if (soc_is_qca953x()) {
 | 
			
		||||
++		gpio_count = QCA953X_GPIO_COUNT;
 | 
			
		||||
++		reg_base = QCA953X_GPIO_REG_OUT_FUNC0;
 | 
			
		||||
++	} else if (soc_is_qca955x()) {
 | 
			
		||||
++		gpio_count = QCA955X_GPIO_COUNT;
 | 
			
		||||
++		reg_base = QCA955X_GPIO_REG_OUT_FUNC0;
 | 
			
		||||
++	} else if (soc_is_qca956x()) {
 | 
			
		||||
++		gpio_count = QCA956X_GPIO_COUNT;
 | 
			
		||||
++		reg_base = QCA956X_GPIO_REG_OUT_FUNC0;
 | 
			
		||||
++	} else {
 | 
			
		||||
++		BUG();
 | 
			
		||||
++	}
 | 
			
		||||
+ 
 | 
			
		||||
+-	if (gpio >= AR934X_GPIO_COUNT)
 | 
			
		||||
++	if (gpio >= gpio_count)
 | 
			
		||||
+ 		return;
 | 
			
		||||
+ 
 | 
			
		||||
+-	reg = AR934X_GPIO_REG_OUT_FUNC0 + 4 * (gpio / 4);
 | 
			
		||||
++	reg = reg_base + 4 * (gpio / 4);
 | 
			
		||||
+ 	s = 8 * (gpio % 4);
 | 
			
		||||
+ 
 | 
			
		||||
+ 	spin_lock_irqsave(&ath79_gpio_lock, flags);
 | 
			
		||||
+--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
 | 
			
		||||
++++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
 | 
			
		||||
+@@ -875,6 +875,14 @@
 | 
			
		||||
+ #define QCA953X_GPIO_OUT_MUX_LED_LINK4		44
 | 
			
		||||
+ #define QCA953X_GPIO_OUT_MUX_LED_LINK5		45
 | 
			
		||||
+ 
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC0	0x2c
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC1	0x30
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC2	0x34
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC3	0x38
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC4	0x3c
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC5	0x40
 | 
			
		||||
++#define QCA955X_GPIO_REG_FUNC		0x6c
 | 
			
		||||
++
 | 
			
		||||
+ #define QCA956X_GPIO_REG_OUT_FUNC0	0x2c
 | 
			
		||||
+ #define QCA956X_GPIO_REG_OUT_FUNC1	0x30
 | 
			
		||||
+ #define QCA956X_GPIO_REG_OUT_FUNC2	0x34
 | 
			
		||||
+@@ -1014,6 +1022,8 @@
 | 
			
		||||
+ #define AR934X_GPIO_OUT_EXT_LNA0	46
 | 
			
		||||
+ #define AR934X_GPIO_OUT_EXT_LNA1	47
 | 
			
		||||
+ 
 | 
			
		||||
++#define QCA955X_GPIO_OUT_GPIO		0
 | 
			
		||||
++
 | 
			
		||||
+ /*
 | 
			
		||||
+  * MII_CTRL block
 | 
			
		||||
+  */
 | 
			
		||||
@ -1,32 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Wed, 23 Mar 2016 12:52:27 +0000
 | 
			
		||||
Subject: ar71xx: Add support for ath79_gpio_function_* on QCA955X
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49074
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624183/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
index e71b6e2..0e87357 100644
 | 
			
		||||
--- a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
@@ -1,6 +1,16 @@
 | 
			
		||||
 --- a/arch/mips/ath79/gpio.c
 | 
			
		||||
 +++ b/arch/mips/ath79/gpio.c
 | 
			
		||||
-@@ -187,15 +187,30 @@ void __init ath79_gpio_output_select(uns
 | 
			
		||||
+@@ -146,7 +146,8 @@ static void __iomem *ath79_gpio_get_func
 | 
			
		||||
+ 	if (soc_is_ar71xx() ||
 | 
			
		||||
+ 	    soc_is_ar724x() ||
 | 
			
		||||
+ 	    soc_is_ar913x() ||
 | 
			
		||||
+-	    soc_is_ar933x())
 | 
			
		||||
++	    soc_is_ar933x() ||
 | 
			
		||||
++	    soc_is_qca955x())
 | 
			
		||||
+ 		reg = AR71XX_GPIO_REG_FUNC;
 | 
			
		||||
+ 	else if (soc_is_ar934x() ||
 | 
			
		||||
+ 		 soc_is_qca953x() ||
 | 
			
		||||
+@@ -187,15 +188,30 @@ void __init ath79_gpio_output_select(uns
 | 
			
		||||
  {
 | 
			
		||||
  	void __iomem *base = ath79_gpio_base;
 | 
			
		||||
  	unsigned long flags;
 | 
			
		||||
@ -1,159 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Wed, 23 Mar 2016 12:52:31 +0000
 | 
			
		||||
Subject: ar71xx: Add QCA955X GPIO mux and function definitions
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49075
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624184/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch b/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch
 | 
			
		||||
index 797977f..0126f6a 100644
 | 
			
		||||
--- a/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/601-MIPS-ath79-add-more-register-defines.patch
 | 
			
		||||
@@ -194,7 +194,7 @@
 | 
			
		||||
  #define AR933X_BOOTSTRAP_REF_CLK_40	BIT(0)
 | 
			
		||||
  
 | 
			
		||||
  #define AR934X_BOOTSTRAP_SW_OPTION8	BIT(23)
 | 
			
		||||
-@@ -529,6 +626,12 @@
 | 
			
		||||
+@@ -529,8 +626,22 @@
 | 
			
		||||
  #define AR71XX_GPIO_REG_INT_ENABLE	0x24
 | 
			
		||||
  #define AR71XX_GPIO_REG_FUNC		0x28
 | 
			
		||||
  
 | 
			
		||||
@@ -206,8 +206,18 @@
 | 
			
		||||
 +#define AR934X_GPIO_REG_OUT_FUNC5	0x40
 | 
			
		||||
  #define AR934X_GPIO_REG_FUNC		0x6c
 | 
			
		||||
  
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC0	0x2c
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC1	0x30
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC2	0x34
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC3	0x38
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC4	0x3c
 | 
			
		||||
++#define QCA955X_GPIO_REG_OUT_FUNC5	0x40
 | 
			
		||||
++#define QCA955X_GPIO_REG_FUNC		0x6c
 | 
			
		||||
++
 | 
			
		||||
  #define AR71XX_GPIO_COUNT		16
 | 
			
		||||
-@@ -560,4 +663,170 @@
 | 
			
		||||
+ #define AR7240_GPIO_COUNT		18
 | 
			
		||||
+ #define AR7241_GPIO_COUNT		20
 | 
			
		||||
+@@ -560,4 +671,235 @@
 | 
			
		||||
  #define AR934X_SRIF_DPLL2_OUTDIV_SHIFT	13
 | 
			
		||||
  #define AR934X_SRIF_DPLL2_OUTDIV_MASK	0x7
 | 
			
		||||
  
 | 
			
		||||
@@ -288,6 +298,71 @@
 | 
			
		||||
 +#define AR934X_GPIO_OUT_EXT_LNA0	46
 | 
			
		||||
 +#define AR934X_GPIO_OUT_EXT_LNA1	47
 | 
			
		||||
 +
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_CLK_OBS7_EN		BIT(9)
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_CLK_OBS6_EN		BIT(8)
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_CLK_OBS5_EN		BIT(7)
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_CLK_OBS4_EN		BIT(6)
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_CLK_OBS3_EN		BIT(5)
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_CLK_OBS2_EN		BIT(4)
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_CLK_OBS1_EN		BIT(3)
 | 
			
		||||
++#define QCA955X_GPIO_FUNC_JTAG_DISABLE		BIT(1)
 | 
			
		||||
++
 | 
			
		||||
++#define QCA955X_GPIO_OUT_GPIO		0
 | 
			
		||||
++#define QCA955X_MII_EXT_MDI		1
 | 
			
		||||
++#define QCA955X_SLIC_DATA_OUT		3
 | 
			
		||||
++#define QCA955X_SLIC_PCM_FS		4
 | 
			
		||||
++#define QCA955X_SLIC_PCM_CLK		5
 | 
			
		||||
++#define QCA955X_SPI_CLK			8
 | 
			
		||||
++#define QCA955X_SPI_CS_0		9
 | 
			
		||||
++#define QCA955X_SPI_CS_1		10
 | 
			
		||||
++#define QCA955X_SPI_CS_2		11
 | 
			
		||||
++#define QCA955X_SPI_MISO		12
 | 
			
		||||
++#define QCA955X_I2S_CLK			13
 | 
			
		||||
++#define QCA955X_I2S_WS			14
 | 
			
		||||
++#define QCA955X_I2S_SD			15
 | 
			
		||||
++#define QCA955X_I2S_MCK			16
 | 
			
		||||
++#define QCA955X_SPDIF_OUT		17
 | 
			
		||||
++#define QCA955X_UART1_TD		18
 | 
			
		||||
++#define QCA955X_UART1_RTS		19
 | 
			
		||||
++#define QCA955X_UART1_RD		20
 | 
			
		||||
++#define QCA955X_UART1_CTS		21
 | 
			
		||||
++#define QCA955X_UART0_SOUT		22
 | 
			
		||||
++#define QCA955X_SPDIF2_OUT		23
 | 
			
		||||
++#define QCA955X_LED_SGMII_SPEED0	24
 | 
			
		||||
++#define QCA955X_LED_SGMII_SPEED1	25
 | 
			
		||||
++#define QCA955X_LED_SGMII_DUPLEX	26
 | 
			
		||||
++#define QCA955X_LED_SGMII_LINK_UP	27
 | 
			
		||||
++#define QCA955X_SGMII_SPEED0_INVERT	28
 | 
			
		||||
++#define QCA955X_SGMII_SPEED1_INVERT	29
 | 
			
		||||
++#define QCA955X_SGMII_DUPLEX_INVERT	30
 | 
			
		||||
++#define QCA955X_SGMII_LINK_UP_INVERT	31
 | 
			
		||||
++#define QCA955X_GE1_MII_MDO		32
 | 
			
		||||
++#define QCA955X_GE1_MII_MDC		33
 | 
			
		||||
++#define QCA955X_SWCOM2			38
 | 
			
		||||
++#define QCA955X_SWCOM3			39
 | 
			
		||||
++#define QCA955X_MAC2_GPIO		40
 | 
			
		||||
++#define QCA955X_MAC3_GPIO		41
 | 
			
		||||
++#define QCA955X_ATT_LED			42
 | 
			
		||||
++#define QCA955X_PWR_LED			43
 | 
			
		||||
++#define QCA955X_TX_FRAME		44
 | 
			
		||||
++#define QCA955X_RX_CLEAR_EXTERNAL	45
 | 
			
		||||
++#define QCA955X_LED_NETWORK_EN		46
 | 
			
		||||
++#define QCA955X_LED_POWER_EN		47
 | 
			
		||||
++#define QCA955X_WMAC_GLUE_WOW		68
 | 
			
		||||
++#define QCA955X_RX_CLEAR_EXTENSION	70
 | 
			
		||||
++#define QCA955X_CP_NAND_CS1		73
 | 
			
		||||
++#define QCA955X_USB_SUSPEND		74
 | 
			
		||||
++#define QCA955X_ETH_TX_ERR		75
 | 
			
		||||
++#define QCA955X_DDR_DQ_OE		76
 | 
			
		||||
++#define QCA955X_CLKREQ_N_EP		77
 | 
			
		||||
++#define QCA955X_CLKREQ_N_RC		78
 | 
			
		||||
++#define QCA955X_CLK_OBS0		79
 | 
			
		||||
++#define QCA955X_CLK_OBS1		80
 | 
			
		||||
++#define QCA955X_CLK_OBS2		81
 | 
			
		||||
++#define QCA955X_CLK_OBS3		82
 | 
			
		||||
++#define QCA955X_CLK_OBS4		83
 | 
			
		||||
++#define QCA955X_CLK_OBS5		84
 | 
			
		||||
++
 | 
			
		||||
 +/*
 | 
			
		||||
 + * MII_CTRL block
 | 
			
		||||
 + */
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
index 0e87357..8a54859 100644
 | 
			
		||||
--- a/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/739-MIPS-ath79-add-gpio-func-register-for-QCA955x-SoC.patch
 | 
			
		||||
@@ -37,37 +37,12 @@
 | 
			
		||||
 +	}
 | 
			
		||||
  
 | 
			
		||||
 -	if (gpio >= AR934X_GPIO_COUNT)
 | 
			
		||||
+-		return;
 | 
			
		||||
 +	if (gpio >= gpio_count)
 | 
			
		||||
- 		return;
 | 
			
		||||
++ 		return;
 | 
			
		||||
  
 | 
			
		||||
 -	reg = AR934X_GPIO_REG_OUT_FUNC0 + 4 * (gpio / 4);
 | 
			
		||||
 +	reg = reg_base + 4 * (gpio / 4);
 | 
			
		||||
  	s = 8 * (gpio % 4);
 | 
			
		||||
  
 | 
			
		||||
  	spin_lock_irqsave(&ath79_gpio_lock, flags);
 | 
			
		||||
---- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
 | 
			
		||||
-+++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
 | 
			
		||||
-@@ -875,6 +875,14 @@
 | 
			
		||||
- #define QCA953X_GPIO_OUT_MUX_LED_LINK4		44
 | 
			
		||||
- #define QCA953X_GPIO_OUT_MUX_LED_LINK5		45
 | 
			
		||||
- 
 | 
			
		||||
-+#define QCA955X_GPIO_REG_OUT_FUNC0	0x2c
 | 
			
		||||
-+#define QCA955X_GPIO_REG_OUT_FUNC1	0x30
 | 
			
		||||
-+#define QCA955X_GPIO_REG_OUT_FUNC2	0x34
 | 
			
		||||
-+#define QCA955X_GPIO_REG_OUT_FUNC3	0x38
 | 
			
		||||
-+#define QCA955X_GPIO_REG_OUT_FUNC4	0x3c
 | 
			
		||||
-+#define QCA955X_GPIO_REG_OUT_FUNC5	0x40
 | 
			
		||||
-+#define QCA955X_GPIO_REG_FUNC		0x6c
 | 
			
		||||
-+
 | 
			
		||||
- #define QCA956X_GPIO_REG_OUT_FUNC0	0x2c
 | 
			
		||||
- #define QCA956X_GPIO_REG_OUT_FUNC1	0x30
 | 
			
		||||
- #define QCA956X_GPIO_REG_OUT_FUNC2	0x34
 | 
			
		||||
-@@ -1014,6 +1022,8 @@
 | 
			
		||||
- #define AR934X_GPIO_OUT_EXT_LNA0	46
 | 
			
		||||
- #define AR934X_GPIO_OUT_EXT_LNA1	47
 | 
			
		||||
- 
 | 
			
		||||
-+#define QCA955X_GPIO_OUT_GPIO		0
 | 
			
		||||
-+
 | 
			
		||||
- /*
 | 
			
		||||
-  * MII_CTRL block
 | 
			
		||||
-  */
 | 
			
		||||
@ -1,78 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Wed, 16 Mar 2016 09:27:11 +0000
 | 
			
		||||
Subject: ar71xx: Use PHY fixups for Open Mesh MR900
 | 
			
		||||
 | 
			
		||||
The delays of PHY/MAC on the MR900 are done by u-boot and OpenWrt in
 | 
			
		||||
different ways. u-boot only modifies the ETH_CFG of the QCA955x based on
 | 
			
		||||
the link speed. But OpenWrt can only modify the PHY delays based on the
 | 
			
		||||
link speed.
 | 
			
		||||
 | 
			
		||||
This can lead to communication problems when u-boot initializes the ETH_CFG
 | 
			
		||||
for a specific link speed (e.g. 10BASE-T) but then OpenWrt the sets the PHY
 | 
			
		||||
delays to an incompatible value.
 | 
			
		||||
 | 
			
		||||
Instead reset the ETH_CFG delay bits of the QCA955x to a specific value and
 | 
			
		||||
only rely on the AT803x PHY settings.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49030
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624185/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
index 9c3164d..3634bf0 100644
 | 
			
		||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
@@ -23,6 +23,7 @@
 | 
			
		||||
 #include <linux/ath9k_platform.h>
 | 
			
		||||
 
 | 
			
		||||
 #include <asm/mach-ath79/ar71xx_regs.h>
 | 
			
		||||
+#include <linux/platform_data/phy-at803x.h>
 | 
			
		||||
 
 | 
			
		||||
 #include "common.h"
 | 
			
		||||
 #include "dev-ap9x-pci.h"
 | 
			
		||||
@@ -94,15 +95,30 @@ static struct gpio_keys_button mr900_gpio_keys[] __initdata = {
 | 
			
		||||
 	},
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
+static struct at803x_platform_data mr900_at803x_data = {
 | 
			
		||||
+	.disable_smarteee = 1,
 | 
			
		||||
+	.enable_rgmii_rx_delay = 1,
 | 
			
		||||
+	.enable_rgmii_tx_delay = 0,
 | 
			
		||||
+	.fixup_rgmii_tx_delay = 1,
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct mdio_board_info mr900_mdio0_info[] = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.bus_id = "ag71xx-mdio.0",
 | 
			
		||||
+		.phy_addr = 5,
 | 
			
		||||
+		.platform_data = &mr900_at803x_data,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
 static void __init mr900_setup(void)
 | 
			
		||||
 {
 | 
			
		||||
 	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
 	u8 mac[6], pcie_mac[6];
 | 
			
		||||
 	struct ath9k_platform_data *pdata;
 | 
			
		||||
 
 | 
			
		||||
-	ath79_eth0_pll_data.pll_1000 = 0xbe000101;
 | 
			
		||||
-	ath79_eth0_pll_data.pll_100 = 0x80000101;
 | 
			
		||||
-	ath79_eth0_pll_data.pll_10 = 0x80001313;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_1000 = 0xae000000;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_100 = 0xa0000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_10 = 0xa0001313;
 | 
			
		||||
 
 | 
			
		||||
 	ath79_register_m25p80(NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -126,6 +142,9 @@ static void __init mr900_setup(void)
 | 
			
		||||
 	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
			
		||||
 	ath79_register_mdio(0, 0x0);
 | 
			
		||||
 
 | 
			
		||||
+	mdiobus_register_board_info(mr900_mdio0_info,
 | 
			
		||||
+				    ARRAY_SIZE(mr900_mdio0_info));
 | 
			
		||||
+
 | 
			
		||||
 	ath79_init_mac(ath79_eth0_data.mac_addr, art + MR900_MAC0_OFFSET, 0);
 | 
			
		||||
 
 | 
			
		||||
 	/* GMAC0 is connected to the RMGII interface */
 | 
			
		||||
@ -1,77 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Wed, 16 Mar 2016 09:27:14 +0000
 | 
			
		||||
Subject: ar71xx: Use PHY fixups for Open Mesh MR1750
 | 
			
		||||
 | 
			
		||||
The delays of PHY/MAC on the MR1750 are done by u-boot and OpenWrt in
 | 
			
		||||
different ways. u-boot only modifies the ETH_CFG of the QCA955x based on
 | 
			
		||||
the link speed. But OpenWrt can only modify the PHY delays based on the
 | 
			
		||||
link speed.
 | 
			
		||||
 | 
			
		||||
This can lead to communication problems when u-boot initializes the ETH_CFG
 | 
			
		||||
for a specific link speed (e.g. 10BASE-T) but then OpenWrt the sets the PHY
 | 
			
		||||
delays to an incompatible value.
 | 
			
		||||
 | 
			
		||||
Instead reset the ETH_CFG delay bits of the QCA955x to a specific value and
 | 
			
		||||
only rely on the AT803x PHY settings.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49031
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624186/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
index 8ace02f..f9e45bd 100644
 | 
			
		||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
@@ -22,6 +22,7 @@
 | 
			
		||||
 #include <linux/ar8216_platform.h>
 | 
			
		||||
 
 | 
			
		||||
 #include <asm/mach-ath79/ar71xx_regs.h>
 | 
			
		||||
+#include <linux/platform_data/phy-at803x.h>
 | 
			
		||||
 
 | 
			
		||||
 #include "common.h"
 | 
			
		||||
 #include "dev-ap9x-pci.h"
 | 
			
		||||
@@ -92,14 +93,29 @@ static struct gpio_keys_button mr1750_gpio_keys[] __initdata = {
 | 
			
		||||
 	},
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
+static struct at803x_platform_data mr1750_at803x_data = {
 | 
			
		||||
+	.disable_smarteee = 1,
 | 
			
		||||
+	.enable_rgmii_rx_delay = 1,
 | 
			
		||||
+	.enable_rgmii_tx_delay = 0,
 | 
			
		||||
+	.fixup_rgmii_tx_delay = 1,
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct mdio_board_info mr1750_mdio0_info[] = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.bus_id = "ag71xx-mdio.0",
 | 
			
		||||
+		.phy_addr = 5,
 | 
			
		||||
+		.platform_data = &mr1750_at803x_data,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
 static void __init mr1750_setup(void)
 | 
			
		||||
 {
 | 
			
		||||
 	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
 	u8 mac[6];
 | 
			
		||||
 
 | 
			
		||||
-	ath79_eth0_pll_data.pll_1000 = 0xbe000101;
 | 
			
		||||
-	ath79_eth0_pll_data.pll_100 = 0x80000101;
 | 
			
		||||
-	ath79_eth0_pll_data.pll_10 = 0x80001313;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_1000 = 0xae000000;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_100 = 0xa0000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_10 = 0xa0001313;
 | 
			
		||||
 
 | 
			
		||||
 	ath79_register_m25p80(NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -116,6 +132,9 @@ static void __init mr1750_setup(void)
 | 
			
		||||
 	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
			
		||||
 	ath79_register_mdio(0, 0x0);
 | 
			
		||||
 
 | 
			
		||||
+	mdiobus_register_board_info(mr1750_mdio0_info,
 | 
			
		||||
+				    ARRAY_SIZE(mr1750_mdio0_info));
 | 
			
		||||
+
 | 
			
		||||
 	ath79_init_mac(ath79_eth0_data.mac_addr, art + MR1750_MAC0_OFFSET, 0);
 | 
			
		||||
 
 | 
			
		||||
 	/* GMAC0 is connected to the RMGII interface */
 | 
			
		||||
@ -1,58 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Wed, 23 Mar 2016 12:52:09 +0000
 | 
			
		||||
Subject: ar71xx: Use private version of ath79_setup_qca955x_eth_cfg for MR900
 | 
			
		||||
 | 
			
		||||
The MR900 must unset some bits in ETH_CFG which were set by u-boot to work
 | 
			
		||||
correctly under OpenWrt. But the global function
 | 
			
		||||
ath79_setup_qca955x_eth_cfg will not unset all of them to increase the
 | 
			
		||||
backward compatiblity with older mach-* files. A private (simplified)
 | 
			
		||||
version for MR900 can be used instead.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49069
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624187/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
index 3634bf0..b439f58 100644
 | 
			
		||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr900.c
 | 
			
		||||
@@ -110,6 +110,28 @@ static struct mdio_board_info mr900_mdio0_info[] = {
 | 
			
		||||
 	},
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
+static void __init mr900_setup_qca955x_eth_cfg(u32 mask,
 | 
			
		||||
+					       unsigned int rxd,
 | 
			
		||||
+					       unsigned int rxdv,
 | 
			
		||||
+					       unsigned int txd,
 | 
			
		||||
+					       unsigned int txe)
 | 
			
		||||
+{
 | 
			
		||||
+	void __iomem *base;
 | 
			
		||||
+	u32 t;
 | 
			
		||||
+
 | 
			
		||||
+	base = ioremap(QCA955X_GMAC_BASE, QCA955X_GMAC_SIZE);
 | 
			
		||||
+
 | 
			
		||||
+	t = mask;
 | 
			
		||||
+	t |= rxd << QCA955X_ETH_CFG_RXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= rxdv << QCA955X_ETH_CFG_RDV_DELAY_SHIFT;
 | 
			
		||||
+	t |= txd << QCA955X_ETH_CFG_TXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= txe << QCA955X_ETH_CFG_TXE_DELAY_SHIFT;
 | 
			
		||||
+
 | 
			
		||||
+	__raw_writel(t, base + QCA955X_GMAC_REG_ETH_CFG);
 | 
			
		||||
+
 | 
			
		||||
+	iounmap(base);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 static void __init mr900_setup(void)
 | 
			
		||||
 {
 | 
			
		||||
 	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
@@ -139,7 +161,7 @@ static void __init mr900_setup(void)
 | 
			
		||||
 	}
 | 
			
		||||
 	pdata->use_eeprom = true;
 | 
			
		||||
 
 | 
			
		||||
-	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
			
		||||
+	mr900_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN, 3, 3, 0, 0);
 | 
			
		||||
 	ath79_register_mdio(0, 0x0);
 | 
			
		||||
 
 | 
			
		||||
 	mdiobus_register_board_info(mr900_mdio0_info,
 | 
			
		||||
@ -1,58 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Wed, 23 Mar 2016 12:52:12 +0000
 | 
			
		||||
Subject: ar71xx: Use private version of ath79_setup_qca955x_eth_cfg for MR1750
 | 
			
		||||
 | 
			
		||||
The MR1750 must unset some bits in ETH_CFG which were set by u-boot to work
 | 
			
		||||
correctly under OpenWrt. But the global function
 | 
			
		||||
ath79_setup_qca955x_eth_cfg will not unset all of them to increase the
 | 
			
		||||
backward compatiblity with older mach-* files. A private (simplified)
 | 
			
		||||
version for MR1750 can be used instead.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49070
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624188/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
index f9e45bd..e3c04e7 100644
 | 
			
		||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
@@ -108,6 +108,28 @@ static struct mdio_board_info mr1750_mdio0_info[] = {
 | 
			
		||||
 	},
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
+static void __init mr1750_setup_qca955x_eth_cfg(u32 mask,
 | 
			
		||||
+						unsigned int rxd,
 | 
			
		||||
+						unsigned int rxdv,
 | 
			
		||||
+						unsigned int txd,
 | 
			
		||||
+						unsigned int txe)
 | 
			
		||||
+{
 | 
			
		||||
+	void __iomem *base;
 | 
			
		||||
+	u32 t;
 | 
			
		||||
+
 | 
			
		||||
+	base = ioremap(QCA955X_GMAC_BASE, QCA955X_GMAC_SIZE);
 | 
			
		||||
+
 | 
			
		||||
+	t = mask;
 | 
			
		||||
+	t |= rxd << QCA955X_ETH_CFG_RXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= rxdv << QCA955X_ETH_CFG_RDV_DELAY_SHIFT;
 | 
			
		||||
+	t |= txd << QCA955X_ETH_CFG_TXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= txe << QCA955X_ETH_CFG_TXE_DELAY_SHIFT;
 | 
			
		||||
+
 | 
			
		||||
+	__raw_writel(t, base + QCA955X_GMAC_REG_ETH_CFG);
 | 
			
		||||
+
 | 
			
		||||
+	iounmap(base);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 static void __init mr1750_setup(void)
 | 
			
		||||
 {
 | 
			
		||||
 	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
@@ -129,7 +151,7 @@ static void __init mr1750_setup(void)
 | 
			
		||||
 	ath79_register_wmac(art + MR1750_WMAC_CALDATA_OFFSET, mac);
 | 
			
		||||
 	ath79_register_pci();
 | 
			
		||||
 
 | 
			
		||||
-	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
			
		||||
+	mr1750_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN, 3, 3, 0, 0);
 | 
			
		||||
 	ath79_register_mdio(0, 0x0);
 | 
			
		||||
 
 | 
			
		||||
 	mdiobus_register_board_info(mr1750_mdio0_info,
 | 
			
		||||
@ -1,43 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Mon, 14 Sep 2015 20:10:10 +0000
 | 
			
		||||
Subject: scripts/om-fwupgradecfg-gen.sh: Fix u-boot image md5sum check
 | 
			
		||||
 | 
			
		||||
The u-boot on Open Mesh devices checks the whole transfered image against a
 | 
			
		||||
md5sum. This is stored inside the option filemd5sum inside the
 | 
			
		||||
fwupgrade.cfg. The bootloader will not check it when this setting is
 | 
			
		||||
missing and could therefore write invalid images to the flash.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r46925
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624189/
 | 
			
		||||
 | 
			
		||||
diff --git a/scripts/om-fwupgradecfg-gen.sh b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
index c790214..fab1582 100644
 | 
			
		||||
--- a/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
+++ b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
@@ -48,6 +48,7 @@ ROOTFS_FLASH_ADDR=$(addr=$(($KERNEL_FLASH_ADDR + ($KERNEL_PART_SIZE * 1024))); p
 | 
			
		||||
 ROOTFS_SIZE=$(stat -c%s "$ROOTFS_PATH")
 | 
			
		||||
 ROOTFS_CHECK_BLOCKS=$((($ROOTFS_SIZE / $CHECK_BS) - $MD5_SKIP_BLOCKS))
 | 
			
		||||
 ROOTFS_MD5=$(md5=$(dd if=$ROOTFS_PATH bs=$CHECK_BS count=$ROOTFS_CHECK_BLOCKS 2>&- | md5sum); echo ${md5%% *})
 | 
			
		||||
+ROOTFS_MD5_FULL=$(md5=$(md5sum $ROOTFS_PATH); echo ${md5%% *})
 | 
			
		||||
 ROOTFS_CHECK_SIZE=$(printf '0x%x' $(($ROOTFS_CHECK_BLOCKS * $CHECK_BS)))
 | 
			
		||||
 ROOTFS_PART_SIZE=$(($MAX_PART_SIZE - $KERNEL_PART_SIZE))
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +56,7 @@ cat << EOF > $CFG_OUT
 | 
			
		||||
 [vmlinux]
 | 
			
		||||
 filename=kernel
 | 
			
		||||
 md5sum=$KERNEL_MD5
 | 
			
		||||
+filemd5sum=$KERNEL_MD5
 | 
			
		||||
 flashaddr=$KERNEL_FLASH_ADDR
 | 
			
		||||
 checksize=0x0
 | 
			
		||||
 cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; saveenv
 | 
			
		||||
@@ -63,6 +65,7 @@ cmd_fail=reset
 | 
			
		||||
 [rootfs]
 | 
			
		||||
 filename=rootfs
 | 
			
		||||
 md5sum=$ROOTFS_MD5
 | 
			
		||||
+filemd5sum=$ROOTFS_MD5_FULL
 | 
			
		||||
 flashaddr=$ROOTFS_FLASH_ADDR
 | 
			
		||||
 checksize=$ROOTFS_CHECK_SIZE
 | 
			
		||||
 cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; setenv rootfs_size_1 $ROOTFS_PART_SIZE; saveenv
 | 
			
		||||
@ -1,50 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:25:42 +0000
 | 
			
		||||
Subject: scripts/om-fwupgradecfg-gen.sh: Generate sha256sum for uboot verification
 | 
			
		||||
 | 
			
		||||
Future Open Mesh u-boot versions are changing the check of the image files
 | 
			
		||||
(vmlinux, rootfs) from md5 to sha256. Having both in them should be enough
 | 
			
		||||
to ensure backward and forward compatibility.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49140
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624190/
 | 
			
		||||
 | 
			
		||||
diff --git a/scripts/om-fwupgradecfg-gen.sh b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
index fab1582..e208e6d 100644
 | 
			
		||||
--- a/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
+++ b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
@@ -42,6 +42,7 @@ CHECK_BS=65536
 | 
			
		||||
 
 | 
			
		||||
 KERNEL_SIZE=$(stat -c%s "$KERNEL_PATH")
 | 
			
		||||
 KERNEL_MD5=$(md5=$(md5sum $KERNEL_PATH); echo ${md5%% *})
 | 
			
		||||
+KERNEL_SHA256=$(openssl dgst -sha256 $KERNEL_PATH | awk '{print $2}')
 | 
			
		||||
 KERNEL_PART_SIZE=$(size=$(($KERNEL_SIZE / $FLASH_BS)); [ $(($size * $FLASH_BS)) -lt $KERNEL_SIZE ] && size=$(($size + 1)); echo $(($size * $FLASH_BS / 1024)))
 | 
			
		||||
 
 | 
			
		||||
 ROOTFS_FLASH_ADDR=$(addr=$(($KERNEL_FLASH_ADDR + ($KERNEL_PART_SIZE * 1024))); printf "0x%x" $addr)
 | 
			
		||||
@@ -49,6 +50,7 @@ ROOTFS_SIZE=$(stat -c%s "$ROOTFS_PATH")
 | 
			
		||||
 ROOTFS_CHECK_BLOCKS=$((($ROOTFS_SIZE / $CHECK_BS) - $MD5_SKIP_BLOCKS))
 | 
			
		||||
 ROOTFS_MD5=$(md5=$(dd if=$ROOTFS_PATH bs=$CHECK_BS count=$ROOTFS_CHECK_BLOCKS 2>&- | md5sum); echo ${md5%% *})
 | 
			
		||||
 ROOTFS_MD5_FULL=$(md5=$(md5sum $ROOTFS_PATH); echo ${md5%% *})
 | 
			
		||||
+ROOTFS_SHA256_FULL=$(openssl dgst -sha256 $ROOTFS_PATH | awk '{print $2}')
 | 
			
		||||
 ROOTFS_CHECK_SIZE=$(printf '0x%x' $(($ROOTFS_CHECK_BLOCKS * $CHECK_BS)))
 | 
			
		||||
 ROOTFS_PART_SIZE=$(($MAX_PART_SIZE - $KERNEL_PART_SIZE))
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +59,7 @@ cat << EOF > $CFG_OUT
 | 
			
		||||
 filename=kernel
 | 
			
		||||
 md5sum=$KERNEL_MD5
 | 
			
		||||
 filemd5sum=$KERNEL_MD5
 | 
			
		||||
+filesha256sum=$KERNEL_SHA256
 | 
			
		||||
 flashaddr=$KERNEL_FLASH_ADDR
 | 
			
		||||
 checksize=0x0
 | 
			
		||||
 cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; saveenv
 | 
			
		||||
@@ -66,6 +69,7 @@ cmd_fail=reset
 | 
			
		||||
 filename=rootfs
 | 
			
		||||
 md5sum=$ROOTFS_MD5
 | 
			
		||||
 filemd5sum=$ROOTFS_MD5_FULL
 | 
			
		||||
+filesha256sum=$ROOTFS_SHA256_FULL
 | 
			
		||||
 flashaddr=$ROOTFS_FLASH_ADDR
 | 
			
		||||
 checksize=$ROOTFS_CHECK_SIZE
 | 
			
		||||
 cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; setenv rootfs_size_1 $ROOTFS_PART_SIZE; saveenv
 | 
			
		||||
@ -1,265 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:25:47 +0000
 | 
			
		||||
Subject: ar71xx: add kernel support for the OpenMesh OM5P-AC board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49141
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624191/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
 | 
			
		||||
index c5a3c9a..dd89357 100644
 | 
			
		||||
--- a/target/linux/ar71xx/config-3.18
 | 
			
		||||
+++ b/target/linux/ar71xx/config-3.18
 | 
			
		||||
@@ -91,6 +91,7 @@ CONFIG_ATH79_MACH_NBG460N=y
 | 
			
		||||
 CONFIG_ATH79_MACH_NBG6716=y
 | 
			
		||||
 CONFIG_ATH79_MACH_OM2P=y
 | 
			
		||||
 CONFIG_ATH79_MACH_OM5P=y
 | 
			
		||||
+CONFIG_ATH79_MACH_OM5P_AC=y
 | 
			
		||||
 CONFIG_ATH79_MACH_ONION_OMEGA=y
 | 
			
		||||
 CONFIG_ATH79_MACH_PB42=y
 | 
			
		||||
 CONFIG_ATH79_MACH_PB44=y
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-om5pac.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-om5pac.c
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..f6974af
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-om5pac.c
 | 
			
		||||
@@ -0,0 +1,193 @@
 | 
			
		||||
+/*
 | 
			
		||||
+ *  OpenMesh OM5P-AC support
 | 
			
		||||
+ *
 | 
			
		||||
+ *  Copyright (C) 2013 Marek Lindner <marek@open-mesh.com>
 | 
			
		||||
+ *  Copyright (C) 2014 Sven Eckelmann <sven@open-mesh.com>
 | 
			
		||||
+ *
 | 
			
		||||
+ *  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 <linux/gpio.h>
 | 
			
		||||
+#include <linux/mtd/mtd.h>
 | 
			
		||||
+#include <linux/mtd/partitions.h>
 | 
			
		||||
+#include <linux/platform_device.h>
 | 
			
		||||
+#include <linux/i2c.h>
 | 
			
		||||
+#include <linux/i2c-algo-bit.h>
 | 
			
		||||
+#include <linux/i2c-gpio.h>
 | 
			
		||||
+#include <linux/platform_data/phy-at803x.h>
 | 
			
		||||
+
 | 
			
		||||
+#include <asm/mach-ath79/ar71xx_regs.h>
 | 
			
		||||
+#include <asm/mach-ath79/ath79.h>
 | 
			
		||||
+
 | 
			
		||||
+#include "common.h"
 | 
			
		||||
+#include "dev-ap9x-pci.h"
 | 
			
		||||
+#include "dev-eth.h"
 | 
			
		||||
+#include "dev-leds-gpio.h"
 | 
			
		||||
+#include "dev-m25p80.h"
 | 
			
		||||
+#include "dev-wmac.h"
 | 
			
		||||
+#include "machtypes.h"
 | 
			
		||||
+#include "pci.h"
 | 
			
		||||
+
 | 
			
		||||
+#define OM5PAC_GPIO_LED_POWER	18
 | 
			
		||||
+#define OM5PAC_GPIO_LED_GREEN	21
 | 
			
		||||
+#define OM5PAC_GPIO_LED_RED	23
 | 
			
		||||
+#define OM5PAC_GPIO_LED_YELLOW	22
 | 
			
		||||
+#define OM5PAC_GPIO_LED_LAN	20
 | 
			
		||||
+#define OM5PAC_GPIO_LED_WAN	19
 | 
			
		||||
+#define OM5PAC_GPIO_I2C_SCL	12
 | 
			
		||||
+#define OM5PAC_GPIO_I2C_SDA	11
 | 
			
		||||
+
 | 
			
		||||
+#define OM5PAC_KEYS_POLL_INTERVAL	20	/* msecs */
 | 
			
		||||
+#define OM5PAC_KEYS_DEBOUNCE_INTERVAL	(3 * OM5PAC_KEYS_POLL_INTERVAL)
 | 
			
		||||
+
 | 
			
		||||
+#define OM5PAC_WMAC_CALDATA_OFFSET	0x1000
 | 
			
		||||
+
 | 
			
		||||
+static struct gpio_led om5pac_leds_gpio[] __initdata = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "om5pac:blue:power",
 | 
			
		||||
+		.gpio		= OM5PAC_GPIO_LED_POWER,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:red:wifi",
 | 
			
		||||
+		.gpio		= OM5PAC_GPIO_LED_RED,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:yellow:wifi",
 | 
			
		||||
+		.gpio		= OM5PAC_GPIO_LED_YELLOW,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:green:wifi",
 | 
			
		||||
+		.gpio		= OM5PAC_GPIO_LED_GREEN,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:blue:lan",
 | 
			
		||||
+		.gpio		= OM5PAC_GPIO_LED_LAN,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:blue:wan",
 | 
			
		||||
+		.gpio		= OM5PAC_GPIO_LED_WAN,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct flash_platform_data om5pac_flash_data = {
 | 
			
		||||
+	.type = "mx25l12805d",
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct i2c_gpio_platform_data om5pac_i2c_device_platdata = {
 | 
			
		||||
+	.sda_pin		= OM5PAC_GPIO_I2C_SDA,
 | 
			
		||||
+	.scl_pin		= OM5PAC_GPIO_I2C_SCL,
 | 
			
		||||
+	.udelay			= 10,
 | 
			
		||||
+	.sda_is_open_drain	= 1,
 | 
			
		||||
+	.scl_is_open_drain	= 1,
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct platform_device om5pac_i2c_device = {
 | 
			
		||||
+	.name		= "i2c-gpio",
 | 
			
		||||
+	.id		= 0,
 | 
			
		||||
+	.dev		= {
 | 
			
		||||
+		.platform_data	= &om5pac_i2c_device_platdata,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct i2c_board_info om5pac_i2c_devs[] __initdata = {
 | 
			
		||||
+	{
 | 
			
		||||
+		I2C_BOARD_INFO("tmp423", 0x4c),
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct at803x_platform_data om5pac_at803x_data = {
 | 
			
		||||
+	.disable_smarteee = 1,
 | 
			
		||||
+	.enable_rgmii_rx_delay = 1,
 | 
			
		||||
+	.enable_rgmii_tx_delay = 1,
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct mdio_board_info om5pac_mdio0_info[] = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.bus_id = "ag71xx-mdio.0",
 | 
			
		||||
+		.phy_addr = 1,
 | 
			
		||||
+		.platform_data = &om5pac_at803x_data,
 | 
			
		||||
+	},
 | 
			
		||||
+	{
 | 
			
		||||
+		.bus_id = "ag71xx-mdio.0",
 | 
			
		||||
+		.phy_addr = 2,
 | 
			
		||||
+		.platform_data = &om5pac_at803x_data,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static void __init om5p_ac_setup_qca955x_eth_cfg(u32 mask,
 | 
			
		||||
+						 unsigned int rxd,
 | 
			
		||||
+						 unsigned int rxdv,
 | 
			
		||||
+						 unsigned int txd,
 | 
			
		||||
+						 unsigned int txe)
 | 
			
		||||
+{
 | 
			
		||||
+	void __iomem *base;
 | 
			
		||||
+	u32 t;
 | 
			
		||||
+
 | 
			
		||||
+	base = ioremap(QCA955X_GMAC_BASE, QCA955X_GMAC_SIZE);
 | 
			
		||||
+
 | 
			
		||||
+	t = mask;
 | 
			
		||||
+	t |= rxd << QCA955X_ETH_CFG_RXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= rxdv << QCA955X_ETH_CFG_RDV_DELAY_SHIFT;
 | 
			
		||||
+	t |= txd << QCA955X_ETH_CFG_TXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= txe << QCA955X_ETH_CFG_TXE_DELAY_SHIFT;
 | 
			
		||||
+
 | 
			
		||||
+	__raw_writel(t, base + QCA955X_GMAC_REG_ETH_CFG);
 | 
			
		||||
+
 | 
			
		||||
+	iounmap(base);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static void __init om5p_ac_setup(void)
 | 
			
		||||
+{
 | 
			
		||||
+	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
+	u8 mac[6];
 | 
			
		||||
+
 | 
			
		||||
+	/* temperature sensor */
 | 
			
		||||
+	platform_device_register(&om5pac_i2c_device);
 | 
			
		||||
+	i2c_register_board_info(0, om5pac_i2c_devs,
 | 
			
		||||
+				ARRAY_SIZE(om5pac_i2c_devs));
 | 
			
		||||
+
 | 
			
		||||
+	ath79_gpio_output_select(OM5PAC_GPIO_LED_WAN, QCA955X_GPIO_OUT_GPIO);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_register_m25p80(&om5pac_flash_data);
 | 
			
		||||
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(om5pac_leds_gpio),
 | 
			
		||||
+				 om5pac_leds_gpio);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_init_mac(mac, art, 0x02);
 | 
			
		||||
+	ath79_register_wmac(art + OM5PAC_WMAC_CALDATA_OFFSET, mac);
 | 
			
		||||
+
 | 
			
		||||
+	om5p_ac_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN, 3, 3, 0, 0);
 | 
			
		||||
+	ath79_register_mdio(0, 0x0);
 | 
			
		||||
+
 | 
			
		||||
+	mdiobus_register_board_info(om5pac_mdio0_info,
 | 
			
		||||
+				    ARRAY_SIZE(om5pac_mdio0_info));
 | 
			
		||||
+
 | 
			
		||||
+	ath79_init_mac(ath79_eth0_data.mac_addr, art, 0x00);
 | 
			
		||||
+	ath79_init_mac(ath79_eth1_data.mac_addr, art, 0x01);
 | 
			
		||||
+
 | 
			
		||||
+	/* GMAC0 is connected to the PHY1 */
 | 
			
		||||
+	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
 | 
			
		||||
+	ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
 | 
			
		||||
+	ath79_eth0_data.phy_mask = BIT(1);
 | 
			
		||||
+	ath79_eth0_pll_data.pll_1000 = 0x82000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_100 = 0x80000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_10 = 0x80001313;
 | 
			
		||||
+	ath79_register_eth(0);
 | 
			
		||||
+
 | 
			
		||||
+	/* GMAC1 is connected to MDIO1 in SGMII mode */
 | 
			
		||||
+	ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
 | 
			
		||||
+	ath79_eth1_data.mii_bus_dev = &ath79_mdio0_device.dev;
 | 
			
		||||
+	ath79_eth1_data.phy_mask = BIT(2);
 | 
			
		||||
+	ath79_eth1_pll_data.pll_1000 = 0x03000101;
 | 
			
		||||
+	ath79_eth1_pll_data.pll_100 = 0x80000101;
 | 
			
		||||
+	ath79_eth1_pll_data.pll_10 = 0x80001313;
 | 
			
		||||
+	ath79_eth1_data.speed = SPEED_1000;
 | 
			
		||||
+	ath79_eth1_data.duplex = DUPLEX_FULL;
 | 
			
		||||
+	ath79_register_eth(1);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_register_pci();
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+MIPS_MACHINE(ATH79_MACH_OM5P_AC, "OM5P-AC", "OpenMesh OM5P AC", om5p_ac_setup);
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/815-MIPS-ath79-add-om5pac-support.patch b/target/linux/ar71xx/patches-3.18/815-MIPS-ath79-add-om5pac-support.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..4accd03
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/815-MIPS-ath79-add-om5pac-support.patch
 | 
			
		||||
@@ -0,0 +1,38 @@
 | 
			
		||||
+--- a/arch/mips/ath79/Kconfig
 | 
			
		||||
++++ b/arch/mips/ath79/Kconfig
 | 
			
		||||
+@@ -799,6 +799,15 @@ config ATH79_MACH_OM5P
 | 
			
		||||
+ 	select ATH79_DEV_M25P80
 | 
			
		||||
+ 	select ATH79_DEV_WMAC
 | 
			
		||||
+ 
 | 
			
		||||
++config ATH79_MACH_OM5P_AC
 | 
			
		||||
++	bool "OpenMesh OM5P-AC board support"
 | 
			
		||||
++	select SOC_QCA955X
 | 
			
		||||
++	select ATH79_DEV_AP9X_PCI if PCI
 | 
			
		||||
++	select ATH79_DEV_ETH
 | 
			
		||||
++	select ATH79_DEV_LEDS_GPIO
 | 
			
		||||
++	select ATH79_DEV_M25P80
 | 
			
		||||
++	select ATH79_DEV_WMAC
 | 
			
		||||
++
 | 
			
		||||
+ config ATH79_MACH_ONION_OMEGA
 | 
			
		||||
+ 	bool "ONION OMEGA support"
 | 
			
		||||
+ 	select SOC_AR933X
 | 
			
		||||
+--- a/arch/mips/ath79/Makefile
 | 
			
		||||
++++ b/arch/mips/ath79/Makefile
 | 
			
		||||
+@@ -100,6 +100,7 @@ obj-$(CONFIG_ATH79_MACH_MZK_W300NH)	+= m
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_NBG460N)	+= mach-nbg460n.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_OM2P)		+= mach-om2p.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_OM5P)		+= mach-om5p.o
 | 
			
		||||
++obj-$(CONFIG_ATH79_MACH_OM5P_AC)	+= mach-om5pac.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_ONION_OMEGA)	+= mach-onion-omega.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_PB42)		+= mach-pb42.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_PB44)		+= mach-pb44.o
 | 
			
		||||
+--- a/arch/mips/ath79/machtypes.h
 | 
			
		||||
++++ b/arch/mips/ath79/machtypes.h
 | 
			
		||||
+@@ -95,6 +95,7 @@ enum ath79_mach_type {
 | 
			
		||||
+ 	ATH79_MACH_OM2P_LC,		/* OpenMesh OM2P-LC */
 | 
			
		||||
+ 	ATH79_MACH_OM2Pv2,		/* OpenMesh OM2Pv2 */
 | 
			
		||||
+ 	ATH79_MACH_OM2P,		/* OpenMesh OM2P */
 | 
			
		||||
++	ATH79_MACH_OM5P_AC,		/* OpenMesh OM5P-AC */
 | 
			
		||||
+ 	ATH79_MACH_OM5P_AN,		/* OpenMesh OM5P-AN */
 | 
			
		||||
+ 	ATH79_MACH_OM5P,		/* OpenMesh OM5P */
 | 
			
		||||
+ 	ATH79_MACH_ONION_OMEGA,		/* ONION OMEGA */
 | 
			
		||||
@ -1,54 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:25:51 +0000
 | 
			
		||||
Subject: ar71xx: add user-space support for the OpenMesh OM5P-AC
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49142
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624192/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index 44d2ddf..a4051f2 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -178,6 +178,9 @@ get_status_led() {
 | 
			
		||||
 	om5p-an)
 | 
			
		||||
 		status_led="om5p:blue:power"
 | 
			
		||||
 		;;
 | 
			
		||||
+	om5p-ac)
 | 
			
		||||
+		status_led="om5pac:blue:power"
 | 
			
		||||
+		;;
 | 
			
		||||
 	onion-omega)
 | 
			
		||||
 		status_led="onion:amber:system"
 | 
			
		||||
 		;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
index c451124..9a768cd 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
@@ -304,6 +304,11 @@ om5p-an)
 | 
			
		||||
 	ucidef_set_led_netdev "port2" "port2" "om5p:blue:lan" "eth1"
 | 
			
		||||
 	;;
 | 
			
		||||
 
 | 
			
		||||
+om5p-ac)
 | 
			
		||||
+	ucidef_set_led_netdev "port1" "port1" "om5pac:blue:lan" "eth0"
 | 
			
		||||
+	ucidef_set_led_netdev "port2" "port2" "om5pac:blue:wan" "eth1"
 | 
			
		||||
+	;;
 | 
			
		||||
+
 | 
			
		||||
 qihoo-c301)
 | 
			
		||||
 	ucidef_set_led_wlan "wlan2g" "WLAN2G" "qihoo:red:status" "phy1tpt"
 | 
			
		||||
 	;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index 587d029..10b8048 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -616,6 +616,9 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*"OM5P AN")
 | 
			
		||||
 		name="om5p-an"
 | 
			
		||||
 		;;
 | 
			
		||||
+	*"OM5P AC")
 | 
			
		||||
+		name="om5p-ac"
 | 
			
		||||
+		;;
 | 
			
		||||
 	*"Onion Omega")
 | 
			
		||||
 		name="onion-omega"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -1,32 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:25:54 +0000
 | 
			
		||||
Subject: scripts/om-fwupgradecfg-gen.sh: add support for the OM5P-AC
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49143
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624193/
 | 
			
		||||
 | 
			
		||||
diff --git a/scripts/om-fwupgradecfg-gen.sh b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
index e208e6d..6c3b74c 100644
 | 
			
		||||
--- a/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
+++ b/scripts/om-fwupgradecfg-gen.sh
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
 #
 | 
			
		||||
 
 | 
			
		||||
 usage() {
 | 
			
		||||
-	echo "Usage: $0 <OM2P|OM5P|MR600|MR900|MR1750> <out file path> <kernel path> <rootfs path>"
 | 
			
		||||
+	echo "Usage: $0 <OM2P|OM5P|OM5PAC|MR600|MR900|MR1750> <out file path> <kernel path> <rootfs path>"
 | 
			
		||||
 	rm -f $CFG_OUT
 | 
			
		||||
 	exit 1
 | 
			
		||||
 }
 | 
			
		||||
@@ -26,7 +26,7 @@ case $CE_TYPE in
 | 
			
		||||
 		FLASH_BS=262144
 | 
			
		||||
 		MD5_SKIP_BLOCKS=1
 | 
			
		||||
 		;;
 | 
			
		||||
-	OM5P|MR600|MR900|MR1750)
 | 
			
		||||
+	OM5P|OM5PAC|MR600|MR900|MR1750)
 | 
			
		||||
 		MAX_PART_SIZE=7808
 | 
			
		||||
 		KERNEL_FLASH_ADDR=0xb0000
 | 
			
		||||
 		FLASH_BS=65536
 | 
			
		||||
@ -1,59 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:25:57 +0000
 | 
			
		||||
Subject: ar71xx: enable sysupgrade for the OpenMesh OM5P-AC
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49144
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624194/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
index 9ca0f5b..1cfead9 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
@@ -72,6 +72,11 @@ platform_check_image_openmesh()
 | 
			
		||||
 			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
 			return 1
 | 
			
		||||
 			;;
 | 
			
		||||
+		OM5PAC)
 | 
			
		||||
+			[ "$board" = "om5p-ac" ] && break
 | 
			
		||||
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
+			return 1
 | 
			
		||||
+			;;
 | 
			
		||||
 		MR1750)
 | 
			
		||||
 			[ "$board" = "mr1750" ] && break
 | 
			
		||||
 			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
@@ -162,7 +167,7 @@ platform_do_upgrade_openmesh()
 | 
			
		||||
 			kernel_start_addr1=0x9f1c0000
 | 
			
		||||
 			kernel_start_addr2=0x9f8c0000
 | 
			
		||||
 			;;
 | 
			
		||||
-		OM5P|MR600|MR900|MR1750)
 | 
			
		||||
+		OM5P|OM5PAC|MR600|MR900|MR1750)
 | 
			
		||||
 			block_size=$((64 * 1024))
 | 
			
		||||
 			total_size=7995392
 | 
			
		||||
 			kernel_start_addr1=0x9f0b0000
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index ac060ea..67c0661 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -307,7 +307,8 @@ platform_check_image() {
 | 
			
		||||
 	om2p-hsv2 | \
 | 
			
		||||
 	om2p-lc | \
 | 
			
		||||
 	om5p | \
 | 
			
		||||
-	om5p-an)
 | 
			
		||||
+	om5p-an | \
 | 
			
		||||
+	om5p-ac)
 | 
			
		||||
 		platform_check_image_openmesh "$magic_long" "$1" && return 0
 | 
			
		||||
 		return 1
 | 
			
		||||
 		;;
 | 
			
		||||
@@ -540,7 +541,8 @@ platform_do_upgrade() {
 | 
			
		||||
 	om2p-hsv2 | \
 | 
			
		||||
 	om2p-lc | \
 | 
			
		||||
 	om5p | \
 | 
			
		||||
-	om5p-an)
 | 
			
		||||
+	om5p-an | \
 | 
			
		||||
+	om5p-ac)
 | 
			
		||||
 		platform_do_upgrade_openmesh "$ARGV"
 | 
			
		||||
 		;;
 | 
			
		||||
 	unifi-outdoor-plus | \
 | 
			
		||||
@ -1,24 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:01 +0000
 | 
			
		||||
Subject: om-watchdog: add OpenMesh OM5P-AC support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49145
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624195/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/kernel/om-watchdog/files/om-watchdog.init b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
index c792968..8cec13b 100644
 | 
			
		||||
--- a/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
+++ b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
@@ -22,6 +22,9 @@ boot() {
 | 
			
		||||
 			"om5p"|"om5p-an")
 | 
			
		||||
 				service_start /sbin/om-watchdog 11
 | 
			
		||||
 				;;
 | 
			
		||||
+			"om5p-ac")
 | 
			
		||||
+				service_start /sbin/om-watchdog 17
 | 
			
		||||
+				;;
 | 
			
		||||
 			"mr600v2")
 | 
			
		||||
 				service_start /sbin/om-watchdog 15
 | 
			
		||||
 				;;
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:04 +0000
 | 
			
		||||
Subject: uboot-envtools: add OpenMesh OM5P-AC support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49146
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624196/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
index ef00f17..657b25f 100644
 | 
			
		||||
--- a/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
+++ b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
@@ -28,6 +28,7 @@ mr900 | \
 | 
			
		||||
 mr900v2 | \
 | 
			
		||||
 nbg6716 | \
 | 
			
		||||
 om5p-an | \
 | 
			
		||||
+om5p-ac | \
 | 
			
		||||
 om5p | \
 | 
			
		||||
 tube2h | \
 | 
			
		||||
 wndr3700)
 | 
			
		||||
@ -1,25 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:08 +0000
 | 
			
		||||
Subject: ar71xx: extract ath10k wifi board.bin for the OpenMesh OM5P-AC board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49147
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624197/
 | 
			
		||||
 | 
			
		||||
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 cde7aaf..c1f4b85 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
 | 
			
		||||
@@ -96,6 +96,10 @@ case "$FIRMWARE" in
 | 
			
		||||
 	rb-911g-5hpacd)
 | 
			
		||||
 		ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 20480 2116
 | 
			
		||||
 		;;
 | 
			
		||||
+	om5p-ac)
 | 
			
		||||
+		ath10kcal_extract "ART" 20480 2116
 | 
			
		||||
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
 | 
			
		||||
+		;;
 | 
			
		||||
 	esac
 | 
			
		||||
 	;;
 | 
			
		||||
 *)
 | 
			
		||||
@ -1,53 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:11 +0000
 | 
			
		||||
Subject: ar71xx: create profile and build image for the OpenMesh OM5P-AC board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49148
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624198/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/generic/profiles/openmesh.mk b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
index 06cf135..64aaa24 100644
 | 
			
		||||
--- a/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
+++ b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
@@ -27,6 +27,17 @@ endef
 | 
			
		||||
 
 | 
			
		||||
 $(eval $(call Profile,OM5P))
 | 
			
		||||
 
 | 
			
		||||
+define Profile/OM5PAC
 | 
			
		||||
+	NAME:=OpenMesh OM5P-AC
 | 
			
		||||
+	PACKAGES:=kmod-ath9k kmod-ath10k om-watchdog ath10k-firmware-qca988x
 | 
			
		||||
+endef
 | 
			
		||||
+
 | 
			
		||||
+define Profile/OM5PAC/Description
 | 
			
		||||
+	Package set optimized for the OpenMesh OM5P-AC.
 | 
			
		||||
+endef
 | 
			
		||||
+
 | 
			
		||||
+$(eval $(call Profile,OM5PAC))
 | 
			
		||||
+
 | 
			
		||||
 define Profile/MR600
 | 
			
		||||
         NAME:=OpenMesh MR600
 | 
			
		||||
         PACKAGES:=kmod-ath9k om-watchdog
 | 
			
		||||
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
index 0ebb7dc..0cf1df1 100644
 | 
			
		||||
--- a/target/linux/ar71xx/image/Makefile
 | 
			
		||||
+++ b/target/linux/ar71xx/image/Makefile
 | 
			
		||||
@@ -2043,6 +2043,7 @@ $(eval $(call SingleProfile,Netgear,64kraw,WPN824N,wpn824n,WPN824N,ttyS0,115200,
 | 
			
		||||
 
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,OM2P,om2p,,,,OM2P))
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,OM5P,om5p,,,,OM5P))
 | 
			
		||||
+$(eval $(call SingleProfile,OpenMesh,squashfs-only,OM5PAC,om5pac,,,,OM5PAC))
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,MR600,mr600,,,,MR600))
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,MR900,mr900,,,,MR900))
 | 
			
		||||
 $(eval $(call SingleProfile,OpenMesh,squashfs-only,MR1750,mr1750,,,,MR1750))
 | 
			
		||||
@@ -2139,7 +2140,7 @@ $(eval $(call MultiProfile,AP121,AP121_2M AP121_4M))
 | 
			
		||||
 $(eval $(call MultiProfile,DIR615IX,DIR615I1 DIR615I3))
 | 
			
		||||
 $(eval $(call MultiProfile,AP136,AP136_010 AP136_020))
 | 
			
		||||
 $(eval $(call MultiProfile,EWDORIN, EWDORINAP EWDORINRT EWDORIN16M))
 | 
			
		||||
-$(eval $(call MultiProfile,OPENMESH,OM2P OM5P MR600 MR900 MR1750))
 | 
			
		||||
+$(eval $(call MultiProfile,OPENMESH,OM2P OM5P OM5PAC MR600 MR900 MR1750))
 | 
			
		||||
 $(eval $(call MultiProfile,TEW652BRP,TEW652BRP_FW TEW652BRP_RECOVERY))
 | 
			
		||||
 $(eval $(call MultiProfile,TLMR3220,TLMR3220V1))
 | 
			
		||||
 $(eval $(call MultiProfile,TLMR3420,TLMR3420V1))
 | 
			
		||||
@ -1,289 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:15 +0000
 | 
			
		||||
Subject: ar71xx: add kernel support for the OpenMesh OM5P-ACv2 board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49149
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624199/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
 | 
			
		||||
index dd89357..514f7d5 100644
 | 
			
		||||
--- a/target/linux/ar71xx/config-3.18
 | 
			
		||||
+++ b/target/linux/ar71xx/config-3.18
 | 
			
		||||
@@ -92,6 +92,7 @@ CONFIG_ATH79_MACH_NBG6716=y
 | 
			
		||||
 CONFIG_ATH79_MACH_OM2P=y
 | 
			
		||||
 CONFIG_ATH79_MACH_OM5P=y
 | 
			
		||||
 CONFIG_ATH79_MACH_OM5P_AC=y
 | 
			
		||||
+CONFIG_ATH79_MACH_OM5P_ACv2=y
 | 
			
		||||
 CONFIG_ATH79_MACH_ONION_OMEGA=y
 | 
			
		||||
 CONFIG_ATH79_MACH_PB42=y
 | 
			
		||||
 CONFIG_ATH79_MACH_PB44=y
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-om5pacv2.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-om5pacv2.c
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..587ca32
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-om5pacv2.c
 | 
			
		||||
@@ -0,0 +1,216 @@
 | 
			
		||||
+/*
 | 
			
		||||
+ *  OpenMesh OM5P-ACv2 support
 | 
			
		||||
+ *
 | 
			
		||||
+ *  Copyright (C) 2013 Marek Lindner <marek@open-mesh.com>
 | 
			
		||||
+ *  Copyright (C) 2014-2016 Sven Eckelmann <sven@open-mesh.com>
 | 
			
		||||
+ *  Copyright (C) 2015 Open-Mesh - Jim Collar <jim.collar@eqware.net>
 | 
			
		||||
+ *
 | 
			
		||||
+ *  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 <linux/gpio.h>
 | 
			
		||||
+#include <linux/mdio-gpio.h>
 | 
			
		||||
+#include <linux/mtd/mtd.h>
 | 
			
		||||
+#include <linux/mtd/partitions.h>
 | 
			
		||||
+#include <linux/platform_device.h>
 | 
			
		||||
+#include <linux/i2c.h>
 | 
			
		||||
+#include <linux/i2c-algo-bit.h>
 | 
			
		||||
+#include <linux/i2c-gpio.h>
 | 
			
		||||
+#include <linux/platform_data/phy-at803x.h>
 | 
			
		||||
+
 | 
			
		||||
+#include <asm/mach-ath79/ar71xx_regs.h>
 | 
			
		||||
+#include <asm/mach-ath79/ath79.h>
 | 
			
		||||
+
 | 
			
		||||
+#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-wmac.h"
 | 
			
		||||
+#include "machtypes.h"
 | 
			
		||||
+#include "pci.h"
 | 
			
		||||
+
 | 
			
		||||
+#define OM5PACV2_GPIO_LED_POWER	14
 | 
			
		||||
+#define OM5PACV2_GPIO_LED_GREEN	13
 | 
			
		||||
+#define OM5PACV2_GPIO_LED_RED	23
 | 
			
		||||
+#define OM5PACV2_GPIO_LED_YELLOW	15
 | 
			
		||||
+#define OM5PACV2_GPIO_BTN_RESET	1
 | 
			
		||||
+#define OM5PACV2_GPIO_I2C_SCL	18
 | 
			
		||||
+#define OM5PACV2_GPIO_I2C_SDA	19
 | 
			
		||||
+#define OM5PACV2_GPIO_PA_DCDC	2
 | 
			
		||||
+#define OM5PACV2_GPIO_PA_HIGH	16
 | 
			
		||||
+
 | 
			
		||||
+#define OM5PACV2_KEYS_POLL_INTERVAL	20	/* msecs */
 | 
			
		||||
+#define OM5PACV2_KEYS_DEBOUNCE_INTERVAL	(3 * OM5PACV2_KEYS_POLL_INTERVAL)
 | 
			
		||||
+
 | 
			
		||||
+#define OM5PACV2_WMAC_CALDATA_OFFSET	0x1000
 | 
			
		||||
+
 | 
			
		||||
+static struct gpio_led om5pacv2_leds_gpio[] __initdata = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.name		= "om5pac:blue:power",
 | 
			
		||||
+		.gpio		= OM5PACV2_GPIO_LED_POWER,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:red:wifi",
 | 
			
		||||
+		.gpio		= OM5PACV2_GPIO_LED_RED,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:yellow:wifi",
 | 
			
		||||
+		.gpio		= OM5PACV2_GPIO_LED_YELLOW,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}, {
 | 
			
		||||
+		.name		= "om5pac:green:wifi",
 | 
			
		||||
+		.gpio		= OM5PACV2_GPIO_LED_GREEN,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct gpio_keys_button om5pacv2_gpio_keys[] __initdata = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.desc		= "reset",
 | 
			
		||||
+		.type		= EV_KEY,
 | 
			
		||||
+		.code		= KEY_RESTART,
 | 
			
		||||
+		.debounce_interval = OM5PACV2_KEYS_DEBOUNCE_INTERVAL,
 | 
			
		||||
+		.gpio		= OM5PACV2_GPIO_BTN_RESET,
 | 
			
		||||
+		.active_low	= 1,
 | 
			
		||||
+	}
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct i2c_gpio_platform_data om5pacv2_i2c_device_platdata = {
 | 
			
		||||
+	.sda_pin		= OM5PACV2_GPIO_I2C_SDA,
 | 
			
		||||
+	.scl_pin		= OM5PACV2_GPIO_I2C_SCL,
 | 
			
		||||
+	.udelay			= 10,
 | 
			
		||||
+	.sda_is_open_drain	= 1,
 | 
			
		||||
+	.scl_is_open_drain	= 1,
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct platform_device om5pacv2_i2c_device = {
 | 
			
		||||
+	.name		= "i2c-gpio",
 | 
			
		||||
+	.id		= 0,
 | 
			
		||||
+	.dev		= {
 | 
			
		||||
+		.platform_data	= &om5pacv2_i2c_device_platdata,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct i2c_board_info om5pacv2_i2c_devs[] __initdata = {
 | 
			
		||||
+	{
 | 
			
		||||
+		I2C_BOARD_INFO("tmp423", 0x4e),
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct flash_platform_data om5pacv2_flash_data = {
 | 
			
		||||
+	.type = "mx25l12805d",
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct at803x_platform_data om5pacv2_an_at803x_data = {
 | 
			
		||||
+	.disable_smarteee = 1,
 | 
			
		||||
+	.enable_rgmii_rx_delay = 1,
 | 
			
		||||
+	.enable_rgmii_tx_delay = 1,
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct at803x_platform_data om5pacv2_an_at8031_data = {
 | 
			
		||||
+	.disable_smarteee = 1,
 | 
			
		||||
+	.enable_rgmii_rx_delay = 1,
 | 
			
		||||
+	.enable_rgmii_tx_delay = 1,
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct mdio_board_info om5pacv2_an_mdio0_info[] = {
 | 
			
		||||
+	{
 | 
			
		||||
+		.bus_id = "ag71xx-mdio.0",
 | 
			
		||||
+		.phy_addr = 4,
 | 
			
		||||
+		.platform_data = &om5pacv2_an_at803x_data,
 | 
			
		||||
+	},
 | 
			
		||||
+	{
 | 
			
		||||
+		.bus_id = "ag71xx-mdio.1",
 | 
			
		||||
+		.phy_addr = 1,
 | 
			
		||||
+		.platform_data = &om5pacv2_an_at8031_data,
 | 
			
		||||
+	},
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static void __init om5p_acv2_setup_qca955x_eth_cfg(u32 mask,
 | 
			
		||||
+						   unsigned int rxd,
 | 
			
		||||
+						   unsigned int rxdv,
 | 
			
		||||
+						   unsigned int txd,
 | 
			
		||||
+						   unsigned int txe)
 | 
			
		||||
+{
 | 
			
		||||
+	void __iomem *base;
 | 
			
		||||
+	u32 t;
 | 
			
		||||
+
 | 
			
		||||
+	base = ioremap(QCA955X_GMAC_BASE, QCA955X_GMAC_SIZE);
 | 
			
		||||
+
 | 
			
		||||
+	t = mask;
 | 
			
		||||
+	t |= rxd << QCA955X_ETH_CFG_RXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= rxdv << QCA955X_ETH_CFG_RDV_DELAY_SHIFT;
 | 
			
		||||
+	t |= txd << QCA955X_ETH_CFG_TXD_DELAY_SHIFT;
 | 
			
		||||
+	t |= txe << QCA955X_ETH_CFG_TXE_DELAY_SHIFT;
 | 
			
		||||
+
 | 
			
		||||
+	__raw_writel(t, base + QCA955X_GMAC_REG_ETH_CFG);
 | 
			
		||||
+
 | 
			
		||||
+	iounmap(base);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static void __init om5p_acv2_setup(void)
 | 
			
		||||
+{
 | 
			
		||||
+	u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
 | 
			
		||||
+	u8 mac[6];
 | 
			
		||||
+
 | 
			
		||||
+	/* power amplifier high power, 4.2V at RFFM4203/4503 instead of 3.3 */
 | 
			
		||||
+	ath79_gpio_function_enable(QCA955X_GPIO_FUNC_JTAG_DISABLE);
 | 
			
		||||
+	ath79_gpio_output_select(OM5PACV2_GPIO_PA_DCDC, QCA955X_GPIO_OUT_GPIO);
 | 
			
		||||
+	ath79_gpio_output_select(OM5PACV2_GPIO_PA_HIGH, QCA955X_GPIO_OUT_GPIO);
 | 
			
		||||
+	gpio_request_one(OM5PACV2_GPIO_PA_DCDC, GPIOF_OUT_INIT_HIGH,
 | 
			
		||||
+			 "PA DC/DC");
 | 
			
		||||
+	gpio_request_one(OM5PACV2_GPIO_PA_HIGH, GPIOF_OUT_INIT_HIGH, "PA HIGH");
 | 
			
		||||
+
 | 
			
		||||
+	/* temperature sensor */
 | 
			
		||||
+	platform_device_register(&om5pacv2_i2c_device);
 | 
			
		||||
+	i2c_register_board_info(0, om5pacv2_i2c_devs,
 | 
			
		||||
+				ARRAY_SIZE(om5pacv2_i2c_devs));
 | 
			
		||||
+
 | 
			
		||||
+	ath79_register_m25p80(&om5pacv2_flash_data);
 | 
			
		||||
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(om5pacv2_leds_gpio),
 | 
			
		||||
+				 om5pacv2_leds_gpio);
 | 
			
		||||
+	ath79_register_gpio_keys_polled(-1, OM5PACV2_KEYS_POLL_INTERVAL,
 | 
			
		||||
+					ARRAY_SIZE(om5pacv2_gpio_keys),
 | 
			
		||||
+					om5pacv2_gpio_keys);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_init_mac(mac, art, 0x02);
 | 
			
		||||
+	ath79_register_wmac(art + OM5PACV2_WMAC_CALDATA_OFFSET, mac);
 | 
			
		||||
+
 | 
			
		||||
+	om5p_acv2_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN, 2, 2, 0, 0);
 | 
			
		||||
+	ath79_register_mdio(0, 0x0);
 | 
			
		||||
+	ath79_register_mdio(1, 0x0);
 | 
			
		||||
+
 | 
			
		||||
+	mdiobus_register_board_info(om5pacv2_an_mdio0_info,
 | 
			
		||||
+				    ARRAY_SIZE(om5pacv2_an_mdio0_info));
 | 
			
		||||
+
 | 
			
		||||
+	ath79_init_mac(ath79_eth0_data.mac_addr, art, 0x00);
 | 
			
		||||
+	ath79_init_mac(ath79_eth1_data.mac_addr, art, 0x01);
 | 
			
		||||
+
 | 
			
		||||
+	/* GMAC0 is connected to the PHY4 */
 | 
			
		||||
+	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
 | 
			
		||||
+	ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
 | 
			
		||||
+	ath79_eth0_data.phy_mask = BIT(4);
 | 
			
		||||
+	ath79_eth0_pll_data.pll_1000 = 0x82000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_100 = 0x80000101;
 | 
			
		||||
+	ath79_eth0_pll_data.pll_10 = 0x80001313;
 | 
			
		||||
+	ath79_register_eth(0);
 | 
			
		||||
+
 | 
			
		||||
+	/* GMAC1 is connected to MDIO1 in SGMII mode */
 | 
			
		||||
+	ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
 | 
			
		||||
+	ath79_eth1_data.mii_bus_dev = &ath79_mdio1_device.dev;
 | 
			
		||||
+	ath79_eth1_data.phy_mask = BIT(1);
 | 
			
		||||
+	ath79_eth1_pll_data.pll_1000 = 0x03000101;
 | 
			
		||||
+	ath79_eth1_pll_data.pll_100 = 0x80000101;
 | 
			
		||||
+	ath79_eth1_pll_data.pll_10 = 0x80001313;
 | 
			
		||||
+	ath79_eth1_data.speed = SPEED_1000;
 | 
			
		||||
+	ath79_eth1_data.duplex = DUPLEX_FULL;
 | 
			
		||||
+	ath79_register_eth(1);
 | 
			
		||||
+
 | 
			
		||||
+	ath79_register_pci();
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+MIPS_MACHINE(ATH79_MACH_OM5P_ACv2, "OM5P-ACv2", "OpenMesh OM5P ACv2", om5p_acv2_setup);
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/816-MIPS-ath79-add-om5pacv-support.patch b/target/linux/ar71xx/patches-3.18/816-MIPS-ath79-add-om5pacv-support.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..fbbf171
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/816-MIPS-ath79-add-om5pacv-support.patch
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
+--- a/arch/mips/ath79/Kconfig
 | 
			
		||||
++++ b/arch/mips/ath79/Kconfig
 | 
			
		||||
+@@ -808,6 +808,16 @@ config ATH79_MACH_OM5P_AC
 | 
			
		||||
+ 	select ATH79_DEV_M25P80
 | 
			
		||||
+ 	select ATH79_DEV_WMAC
 | 
			
		||||
+ 
 | 
			
		||||
++config ATH79_MACH_OM5P_ACv2
 | 
			
		||||
++	bool "OpenMesh OM5P-ACv2 board support"
 | 
			
		||||
++	select SOC_QCA955X
 | 
			
		||||
++	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_ONION_OMEGA
 | 
			
		||||
+ 	bool "ONION OMEGA support"
 | 
			
		||||
+ 	select SOC_AR933X
 | 
			
		||||
+--- a/arch/mips/ath79/Makefile
 | 
			
		||||
++++ b/arch/mips/ath79/Makefile
 | 
			
		||||
+@@ -101,6 +101,7 @@ obj-$(CONFIG_ATH79_MACH_NBG460N)	+= mach
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_OM2P)		+= mach-om2p.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_OM5P)		+= mach-om5p.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_OM5P_AC)	+= mach-om5pac.o
 | 
			
		||||
++obj-$(CONFIG_ATH79_MACH_OM5P_ACv2)	+= mach-om5pacv2.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_ONION_OMEGA)	+= mach-onion-omega.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_PB42)		+= mach-pb42.o
 | 
			
		||||
+ obj-$(CONFIG_ATH79_MACH_PB44)		+= mach-pb44.o
 | 
			
		||||
+--- a/arch/mips/ath79/machtypes.h
 | 
			
		||||
++++ b/arch/mips/ath79/machtypes.h
 | 
			
		||||
+@@ -96,6 +96,7 @@ enum ath79_mach_type {
 | 
			
		||||
+ 	ATH79_MACH_OM2Pv2,		/* OpenMesh OM2Pv2 */
 | 
			
		||||
+ 	ATH79_MACH_OM2P,		/* OpenMesh OM2P */
 | 
			
		||||
+ 	ATH79_MACH_OM5P_AC,		/* OpenMesh OM5P-AC */
 | 
			
		||||
++	ATH79_MACH_OM5P_ACv2,		/* OpenMesh OM5P-ACv2 */
 | 
			
		||||
+ 	ATH79_MACH_OM5P_AN,		/* OpenMesh OM5P-AN */
 | 
			
		||||
+ 	ATH79_MACH_OM5P,		/* OpenMesh OM5P */
 | 
			
		||||
+ 	ATH79_MACH_ONION_OMEGA,		/* ONION OMEGA */
 | 
			
		||||
@ -1,38 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:18 +0000
 | 
			
		||||
Subject: ar71xx: add user-space support for the OpenMesh OM5P-ACv2
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49150
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624200/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index a4051f2..d4d8b4e 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -178,7 +178,8 @@ get_status_led() {
 | 
			
		||||
 	om5p-an)
 | 
			
		||||
 		status_led="om5p:blue:power"
 | 
			
		||||
 		;;
 | 
			
		||||
-	om5p-ac)
 | 
			
		||||
+	om5p-ac | \
 | 
			
		||||
+	om5p-acv2)
 | 
			
		||||
 		status_led="om5pac:blue:power"
 | 
			
		||||
 		;;
 | 
			
		||||
 	onion-omega)
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index 10b8048..fbf76c8 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -619,6 +619,9 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*"OM5P AC")
 | 
			
		||||
 		name="om5p-ac"
 | 
			
		||||
 		;;
 | 
			
		||||
+	*"OM5P ACv2")
 | 
			
		||||
+		name="om5p-acv2"
 | 
			
		||||
+		;;
 | 
			
		||||
 	*"Onion Omega")
 | 
			
		||||
 		name="onion-omega"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -1,46 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:22 +0000
 | 
			
		||||
Subject: ar71xx: enable sysupgrade for the OpenMesh OM5P-ACv2
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49151
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624201/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
index 1cfead9..209cdaa 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
@@ -74,6 +74,7 @@ platform_check_image_openmesh()
 | 
			
		||||
 			;;
 | 
			
		||||
 		OM5PAC)
 | 
			
		||||
 			[ "$board" = "om5p-ac" ] && break
 | 
			
		||||
+			[ "$board" = "om5p-acv2" ] && break
 | 
			
		||||
 			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
 			return 1
 | 
			
		||||
 			;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index 67c0661..4a4c476 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -308,7 +308,8 @@ platform_check_image() {
 | 
			
		||||
 	om2p-lc | \
 | 
			
		||||
 	om5p | \
 | 
			
		||||
 	om5p-an | \
 | 
			
		||||
-	om5p-ac)
 | 
			
		||||
+	om5p-ac | \
 | 
			
		||||
+	om5p-acv2)
 | 
			
		||||
 		platform_check_image_openmesh "$magic_long" "$1" && return 0
 | 
			
		||||
 		return 1
 | 
			
		||||
 		;;
 | 
			
		||||
@@ -542,7 +543,8 @@ platform_do_upgrade() {
 | 
			
		||||
 	om2p-lc | \
 | 
			
		||||
 	om5p | \
 | 
			
		||||
 	om5p-an | \
 | 
			
		||||
-	om5p-ac)
 | 
			
		||||
+	om5p-ac | \
 | 
			
		||||
+	om5p-acv2)
 | 
			
		||||
 		platform_do_upgrade_openmesh "$ARGV"
 | 
			
		||||
 		;;
 | 
			
		||||
 	unifi-outdoor-plus | \
 | 
			
		||||
@ -1,23 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:25 +0000
 | 
			
		||||
Subject: om-watchdog: add OpenMesh OM5P-ACv2 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49152
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624202/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/kernel/om-watchdog/files/om-watchdog.init b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
index 8cec13b..6b96966 100644
 | 
			
		||||
--- a/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
+++ b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
@@ -13,7 +13,7 @@ boot() {
 | 
			
		||||
 		local board=$(ar71xx_board_name)
 | 
			
		||||
 
 | 
			
		||||
 		case "$board" in
 | 
			
		||||
-			"om2p"|"om2p-hs"|"om2p-hsv2")
 | 
			
		||||
+			"om2p"|"om2p-hs"|"om2p-hsv2"|"om5p-acv2")
 | 
			
		||||
 				service_start /sbin/om-watchdog 12
 | 
			
		||||
 				;;
 | 
			
		||||
 			"om2pv2"|"om2p-lc")
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:28 +0000
 | 
			
		||||
Subject: uboot-envtools: add OpenMesh OM5P-ACv2 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49153
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624203/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
index 657b25f..9071c11 100644
 | 
			
		||||
--- a/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
+++ b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
@@ -29,6 +29,7 @@ mr900v2 | \
 | 
			
		||||
 nbg6716 | \
 | 
			
		||||
 om5p-an | \
 | 
			
		||||
 om5p-ac | \
 | 
			
		||||
+om5p-acv2 | \
 | 
			
		||||
 om5p | \
 | 
			
		||||
 tube2h | \
 | 
			
		||||
 wndr3700)
 | 
			
		||||
@ -1,24 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:31 +0000
 | 
			
		||||
Subject: ar71xx: extract ath10k wifi board.bin for the OpenMesh OM5P-ACv2 board
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49154
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624204/
 | 
			
		||||
 | 
			
		||||
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 c1f4b85..d925a85 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
 | 
			
		||||
@@ -71,7 +71,8 @@ case "$FIRMWARE" in
 | 
			
		||||
 		ath10kcal_extract "caldata" 20480 2116
 | 
			
		||||
 		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
 | 
			
		||||
 		;;
 | 
			
		||||
-	mr1750)
 | 
			
		||||
+	mr1750 | \
 | 
			
		||||
+	om5p-acv2)
 | 
			
		||||
 		ath10kcal_extract "ART" 20480 2116
 | 
			
		||||
 		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
 | 
			
		||||
 		;;
 | 
			
		||||
@ -1,29 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Sat, 9 Apr 2016 10:26:34 +0000
 | 
			
		||||
Subject: ar71xx: add OM5P-ACv2 to the OM5P-AC profile
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Backport of r49155
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/624205/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/generic/profiles/openmesh.mk b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
index 64aaa24..c0919ed 100644
 | 
			
		||||
--- a/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
+++ b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
@@ -28,12 +28,12 @@ endef
 | 
			
		||||
 $(eval $(call Profile,OM5P))
 | 
			
		||||
 
 | 
			
		||||
 define Profile/OM5PAC
 | 
			
		||||
-	NAME:=OpenMesh OM5P-AC
 | 
			
		||||
+	NAME:=OpenMesh OM5P-AC/OM5P-ACv2
 | 
			
		||||
 	PACKAGES:=kmod-ath9k kmod-ath10k om-watchdog ath10k-firmware-qca988x
 | 
			
		||||
 endef
 | 
			
		||||
 
 | 
			
		||||
 define Profile/OM5PAC/Description
 | 
			
		||||
-	Package set optimized for the OpenMesh OM5P-AC.
 | 
			
		||||
+	Package set optimized for the OpenMesh OM5P-AC/OM5P-ACv2.
 | 
			
		||||
 endef
 | 
			
		||||
 
 | 
			
		||||
 $(eval $(call Profile,OM5PAC))
 | 
			
		||||
@ -1,24 +0,0 @@
 | 
			
		||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
 | 
			
		||||
Date: Wed, 15 Jun 2016 19:31:08 +0200
 | 
			
		||||
Subject: scripts: feeds: fix version detection for Make >= 4.2.1
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
 | 
			
		||||
 | 
			
		||||
Backport of LEDE df18b3756fef6a28d9194368d3156f0cd85fae19
 | 
			
		||||
 | 
			
		||||
diff --git a/scripts/feeds b/scripts/feeds
 | 
			
		||||
index f8f29cd..908e56c 100755
 | 
			
		||||
--- a/scripts/feeds
 | 
			
		||||
+++ b/scripts/feeds
 | 
			
		||||
@@ -22,7 +22,10 @@ my @mkver = split /\s+/, `$mk -v`, 4;
 | 
			
		||||
 my $valid_mk = 1;
 | 
			
		||||
 $mkver[0] =~ /^GNU/ or $valid_mk = 0;
 | 
			
		||||
 $mkver[1] =~ /^Make/ or $valid_mk = 0;
 | 
			
		||||
-$mkver[2] >= "3.81" or $valid_mk = 0;
 | 
			
		||||
+
 | 
			
		||||
+my ($mkv1, $mkv2) = split /\./, $mkver[2];
 | 
			
		||||
+($mkv1 >= 4 || ($mkv1 == 3 && $mkv2 >= 81)) or $valid_mk = 0;
 | 
			
		||||
+
 | 
			
		||||
 $valid_mk or die "Unsupported version of make found: $mk\n";
 | 
			
		||||
 
 | 
			
		||||
 my @feeds;
 | 
			
		||||
@ -1,33 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:48 +0200
 | 
			
		||||
Subject: ar71xx: add kernel support for the OpenMesh OM2P-HSv3
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637052/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-om2p.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-om2p.c
 | 
			
		||||
index 6b0bdc3..3b282a3 100644
 | 
			
		||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-om2p.c
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-om2p.c
 | 
			
		||||
@@ -223,3 +223,4 @@ static void __init om2p_hs_setup(void)
 | 
			
		||||
 
 | 
			
		||||
 MIPS_MACHINE(ATH79_MACH_OM2P_HS, "OM2P-HS", "OpenMesh OM2P HS", om2p_hs_setup);
 | 
			
		||||
 MIPS_MACHINE(ATH79_MACH_OM2P_HSv2, "OM2P-HSv2", "OpenMesh OM2P HSv2", om2p_hs_setup);
 | 
			
		||||
+MIPS_MACHINE(ATH79_MACH_OM2P_HSv3, "OM2P-HSv3", "OpenMesh OM2P HSv3", om2p_hs_setup);
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/817-MIPS-ath79-add-om2phsv3-support.patch b/target/linux/ar71xx/patches-3.18/817-MIPS-ath79-add-om2phsv3-support.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..7305b2e
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/817-MIPS-ath79-add-om2phsv3-support.patch
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
+--- a/arch/mips/ath79/machtypes.h
 | 
			
		||||
++++ b/arch/mips/ath79/machtypes.h
 | 
			
		||||
+@@ -88,6 +88,7 @@ enum ath79_mach_type {
 | 
			
		||||
+ 	ATH79_MACH_NBG460N,		/* Zyxel NBG460N/550N/550NH */
 | 
			
		||||
+ 	ATH79_MACH_NBG6716,		/* Zyxel NBG6716 */
 | 
			
		||||
+ 	ATH79_MACH_OM2P_HSv2,		/* OpenMesh OM2P-HSv2 */
 | 
			
		||||
++	ATH79_MACH_OM2P_HSv3,		/* OpenMesh OM2P-HSv3 */
 | 
			
		||||
+ 	ATH79_MACH_OM2P_HS,		/* OpenMesh OM2P-HS */
 | 
			
		||||
+ 	ATH79_MACH_OM2P_LC,		/* OpenMesh OM2P-LC */
 | 
			
		||||
+ 	ATH79_MACH_OM2Pv2,		/* OpenMesh OM2Pv2 */
 | 
			
		||||
@ -1,46 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:49 +0200
 | 
			
		||||
Subject: ar71xx: add user-space support for the OpenMesh OM2P-HSv3
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637053/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index d4d8b4e..aa02212 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -171,6 +171,7 @@ get_status_led() {
 | 
			
		||||
 	om2pv2 | \
 | 
			
		||||
 	om2p-hs | \
 | 
			
		||||
 	om2p-hsv2 | \
 | 
			
		||||
+	om2p-hsv3 | \
 | 
			
		||||
 	om2p-lc)
 | 
			
		||||
 		status_led="om2p:blue:power"
 | 
			
		||||
 		;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
index dc8b8d6..5767f48 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
@@ -297,6 +297,7 @@ om2p | \
 | 
			
		||||
 om2pv2 | \
 | 
			
		||||
 om2p-hs | \
 | 
			
		||||
 om2p-hsv2 | \
 | 
			
		||||
+om2p-hsv3 | \
 | 
			
		||||
 om2p-lc)
 | 
			
		||||
 	ucidef_set_led_netdev "port1" "port1" "om2p:blue:wan" "eth0"
 | 
			
		||||
 	ucidef_set_led_netdev "port2" "port2" "om2p:blue:lan" "eth1"
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index db908f9..dc51b03 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -610,6 +610,9 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*"OM2P HSv2")
 | 
			
		||||
 		name="om2p-hsv2"
 | 
			
		||||
 		;;
 | 
			
		||||
+	*"OM2P HSv3")
 | 
			
		||||
+		name="om2p-hsv3"
 | 
			
		||||
+		;;
 | 
			
		||||
 	*"OM2P LC")
 | 
			
		||||
 		name="om2p-lc"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:50 +0200
 | 
			
		||||
Subject: ar71xx: enable sysupgrade for the OpenMesh OM2P-HSv3
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637054/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
index 209cdaa..0e8ea27 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
@@ -63,6 +63,7 @@ platform_check_image_openmesh()
 | 
			
		||||
 			[ "$board" = "om2p-lc" ] && break
 | 
			
		||||
 			[ "$board" = "om2p-hs" ] && break
 | 
			
		||||
 			[ "$board" = "om2p-hsv2" ] && break
 | 
			
		||||
+			[ "$board" = "om2p-hsv3" ] && break
 | 
			
		||||
 			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
 			return 1
 | 
			
		||||
 			;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index aeb4577..9b26e73 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -306,6 +306,7 @@ platform_check_image() {
 | 
			
		||||
 	om2pv2 | \
 | 
			
		||||
 	om2p-hs | \
 | 
			
		||||
 	om2p-hsv2 | \
 | 
			
		||||
+	om2p-hsv3 | \
 | 
			
		||||
 	om2p-lc | \
 | 
			
		||||
 	om5p | \
 | 
			
		||||
 	om5p-an | \
 | 
			
		||||
@@ -541,6 +542,7 @@ platform_do_upgrade() {
 | 
			
		||||
 	om2pv2 | \
 | 
			
		||||
 	om2p-hs | \
 | 
			
		||||
 	om2p-hsv2 | \
 | 
			
		||||
+	om2p-hsv3 | \
 | 
			
		||||
 	om2p-lc | \
 | 
			
		||||
 	om5p | \
 | 
			
		||||
 	om5p-an | \
 | 
			
		||||
@ -1,21 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:51 +0200
 | 
			
		||||
Subject: package/om-watchdog: add OpenMesh OM2P-HSv3 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637055/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/kernel/om-watchdog/files/om-watchdog.init b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
index 6b96966..bf8a124 100644
 | 
			
		||||
--- a/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
+++ b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
@@ -13,7 +13,7 @@ boot() {
 | 
			
		||||
 		local board=$(ar71xx_board_name)
 | 
			
		||||
 
 | 
			
		||||
 		case "$board" in
 | 
			
		||||
-			"om2p"|"om2p-hs"|"om2p-hsv2"|"om5p-acv2")
 | 
			
		||||
+			"om2p"|"om2p-hs"|"om2p-hsv2"|"om2p-hsv3"|"om5p-acv2")
 | 
			
		||||
 				service_start /sbin/om-watchdog 12
 | 
			
		||||
 				;;
 | 
			
		||||
 			"om2pv2"|"om2p-lc")
 | 
			
		||||
@ -1,20 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:52 +0200
 | 
			
		||||
Subject: package/uboot-envtools: add OpenMesh OM2P-HSv3 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637056/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
index 9071c11..81c6481 100644
 | 
			
		||||
--- a/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
+++ b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
@@ -41,6 +41,7 @@ om2p | \
 | 
			
		||||
 om2pv2 | \
 | 
			
		||||
 om2p-hs | \
 | 
			
		||||
 om2p-hsv2 | \
 | 
			
		||||
+om2p-hsv3 | \
 | 
			
		||||
 om2p-lc)
 | 
			
		||||
 	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x40000"
 | 
			
		||||
 	;;
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:53 +0200
 | 
			
		||||
Subject: ar71xx: add OM2P-HSv3 to the OM2P profile
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637057/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/generic/profiles/openmesh.mk b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
index c0919ed..ddd3f8d 100644
 | 
			
		||||
--- a/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
+++ b/target/linux/ar71xx/generic/profiles/openmesh.mk
 | 
			
		||||
@@ -6,12 +6,12 @@
 | 
			
		||||
 #
 | 
			
		||||
 
 | 
			
		||||
 define Profile/OM2P
 | 
			
		||||
-	NAME:=OpenMesh OM2P/OM2Pv2/OM2P-HS/OM2P-HSv2/OM2P-LC
 | 
			
		||||
+	NAME:=OpenMesh OM2P/OM2Pv2/OM2P-HS/OM2P-HSv2/OM2P-HSv3/OM2P-LC
 | 
			
		||||
 	PACKAGES:=kmod-ath9k om-watchdog
 | 
			
		||||
 endef
 | 
			
		||||
 
 | 
			
		||||
 define Profile/OM2P/Description
 | 
			
		||||
-	Package set optimized for the OpenMesh OM2P/OM2Pv2/OM2P-HS/OM2P-HSv2/OM2P-LC.
 | 
			
		||||
+	Package set optimized for the OpenMesh OM2P/OM2Pv2/OM2P-HS/OM2P-HSv2/OM2P-HSv3/OM2P-LC.
 | 
			
		||||
 endef
 | 
			
		||||
 
 | 
			
		||||
 $(eval $(call Profile,OM2P))
 | 
			
		||||
@ -1,33 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:54 +0200
 | 
			
		||||
Subject: ar71xx: add kernel support for the OpenMesh MR1750v2
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637058/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
index e3c04e7..18101ce 100644
 | 
			
		||||
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
 | 
			
		||||
@@ -168,3 +168,4 @@ static void __init mr1750_setup(void)
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
 MIPS_MACHINE(ATH79_MACH_MR1750, "MR1750", "OpenMesh MR1750", mr1750_setup);
 | 
			
		||||
+MIPS_MACHINE(ATH79_MACH_MR1750V2, "MR1750v2", "OpenMesh MR1750v2", mr1750_setup);
 | 
			
		||||
diff --git a/target/linux/ar71xx/patches-3.18/818-MIPS-ath79-add-mr1750v2-support.patch b/target/linux/ar71xx/patches-3.18/818-MIPS-ath79-add-mr1750v2-support.patch
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..de732ec
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/target/linux/ar71xx/patches-3.18/818-MIPS-ath79-add-mr1750v2-support.patch
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
+--- a/arch/mips/ath79/machtypes.h
 | 
			
		||||
++++ b/arch/mips/ath79/machtypes.h
 | 
			
		||||
+@@ -76,6 +76,7 @@ enum ath79_mach_type {
 | 
			
		||||
+ 	ATH79_MACH_MR12,		/* Cisco Meraki MR12 */
 | 
			
		||||
+ 	ATH79_MACH_MR16,		/* Cisco Meraki MR16 */
 | 
			
		||||
+ 	ATH79_MACH_MR1750,		/* OpenMesh MR1750 */
 | 
			
		||||
++	ATH79_MACH_MR1750V2,		/* OpenMesh MR1750v2 */
 | 
			
		||||
+ 	ATH79_MACH_MR600V2,		/* OpenMesh MR600v2 */
 | 
			
		||||
+ 	ATH79_MACH_MR600,		/* OpenMesh MR600 */
 | 
			
		||||
+ 	ATH79_MACH_MR900,		/* OpenMesh MR900 */
 | 
			
		||||
@ -1,62 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:55 +0200
 | 
			
		||||
Subject: ar71xx: add user-space support for the OpenMesh MR1750v2
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637059/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
index aa02212..f182d60 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
 | 
			
		||||
@@ -143,7 +143,8 @@ get_status_led() {
 | 
			
		||||
 	mr600v2)
 | 
			
		||||
 		status_led="mr600:blue:power"
 | 
			
		||||
 		;;
 | 
			
		||||
-	mr1750)
 | 
			
		||||
+	mr1750 | \
 | 
			
		||||
+	mr1750v2)
 | 
			
		||||
 		status_led="mr1750:blue:power"
 | 
			
		||||
 		;;
 | 
			
		||||
 	mr900 | \
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
index 5767f48..032acc9 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
 | 
			
		||||
@@ -243,7 +243,8 @@ mr600)
 | 
			
		||||
 	ucidef_set_led_wlan "wlan58" "WLAN58" "mr600:green:wlan58" "phy0tpt"
 | 
			
		||||
 	;;
 | 
			
		||||
 
 | 
			
		||||
-mr1750)
 | 
			
		||||
+mr1750 | \
 | 
			
		||||
+mr1750v2)
 | 
			
		||||
 	ucidef_set_led_netdev "lan" "LAN" "mr1750:blue:wan" "eth0"
 | 
			
		||||
 	ucidef_set_led_wlan "wlan58" "WLAN58" "mr1750:blue:wlan58" "phy0tpt"
 | 
			
		||||
 	ucidef_set_led_wlan "wlan24" "WLAN24" "mr1750:blue:wlan24" "phy1tpt"
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
index 89a2184..b8ae576 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
 | 
			
		||||
@@ -335,6 +335,7 @@ eap7660d |\
 | 
			
		||||
 el-mini |\
 | 
			
		||||
 loco-m-xw |\
 | 
			
		||||
 mr1750 |\
 | 
			
		||||
+mr1750v2 |\
 | 
			
		||||
 mr600 |\
 | 
			
		||||
 mr600v2 |\
 | 
			
		||||
 mr900 |\
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
index dc51b03..5119b36 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | 
			
		||||
@@ -568,6 +568,9 @@ ar71xx_board_detect() {
 | 
			
		||||
 	*MR1750)
 | 
			
		||||
 		name="mr1750"
 | 
			
		||||
 		;;
 | 
			
		||||
+	*MR1750v2)
 | 
			
		||||
+		name="mr1750v2"
 | 
			
		||||
+		;;
 | 
			
		||||
 	*MR600)
 | 
			
		||||
 		name="mr600"
 | 
			
		||||
 		;;
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:56 +0200
 | 
			
		||||
Subject: ar71xx: enable sysupgrade for the OpenMesh MR1750v2
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637060/
 | 
			
		||||
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
index 0e8ea27..95d39bf 100644
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/openmesh.sh
 | 
			
		||||
@@ -81,6 +81,7 @@ platform_check_image_openmesh()
 | 
			
		||||
 			;;
 | 
			
		||||
 		MR1750)
 | 
			
		||||
 			[ "$board" = "mr1750" ] && break
 | 
			
		||||
+			[ "$board" = "mr1750v2" ] && break
 | 
			
		||||
 			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
 | 
			
		||||
 			return 1
 | 
			
		||||
 			;;
 | 
			
		||||
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
index 9b26e73..f33419f 100755
 | 
			
		||||
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | 
			
		||||
@@ -298,6 +298,7 @@ platform_check_image() {
 | 
			
		||||
 		return 0;
 | 
			
		||||
 		;;
 | 
			
		||||
 	mr1750 | \
 | 
			
		||||
+	mr1750v2 | \
 | 
			
		||||
 	mr600 | \
 | 
			
		||||
 	mr600v2 | \
 | 
			
		||||
 	mr900 | \
 | 
			
		||||
@@ -534,6 +535,7 @@ platform_do_upgrade() {
 | 
			
		||||
 		platform_do_upgrade_dir825b "$ARGV"
 | 
			
		||||
 		;;
 | 
			
		||||
 	mr1750 | \
 | 
			
		||||
+	mr1750v2 | \
 | 
			
		||||
 	mr600 | \
 | 
			
		||||
 	mr600v2 | \
 | 
			
		||||
 	mr900 | \
 | 
			
		||||
@ -1,21 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:57 +0200
 | 
			
		||||
Subject: package/om-watchdog: add OpenMesh MR1750v2 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637062/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/kernel/om-watchdog/files/om-watchdog.init b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
index bf8a124..8a1b66e 100644
 | 
			
		||||
--- a/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
+++ b/package/kernel/om-watchdog/files/om-watchdog.init
 | 
			
		||||
@@ -28,7 +28,7 @@ boot() {
 | 
			
		||||
 			"mr600v2")
 | 
			
		||||
 				service_start /sbin/om-watchdog 15
 | 
			
		||||
 				;;
 | 
			
		||||
-			"mr900"|"mr900v2"|"mr1750")
 | 
			
		||||
+			"mr900"|"mr900v2"|"mr1750"|"mr1750v2")
 | 
			
		||||
 				service_start /sbin/om-watchdog 16
 | 
			
		||||
 				;;
 | 
			
		||||
 		esac
 | 
			
		||||
@ -1,20 +0,0 @@
 | 
			
		||||
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
Date: Fri, 20 May 2016 18:03:58 +0200
 | 
			
		||||
Subject: package/uboot-envtools: add OpenMesh MR1750v2 support
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
 | 
			
		||||
 | 
			
		||||
Forwarded: https://patchwork.ozlabs.org/patch/637064/
 | 
			
		||||
 | 
			
		||||
diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
index 81c6481..459e73d 100644
 | 
			
		||||
--- a/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
+++ b/package/boot/uboot-envtools/files/ar71xx
 | 
			
		||||
@@ -22,6 +22,7 @@ eap300v2 | \
 | 
			
		||||
 hornet-ub | \
 | 
			
		||||
 hornet-ub-x2 | \
 | 
			
		||||
 mr1750 | \
 | 
			
		||||
+mr1750v2 | \
 | 
			
		||||
 mr600 | \
 | 
			
		||||
 mr600v2 | \
 | 
			
		||||
 mr900 | \
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user