mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 01:59:02 +00:00
cb0c8da7c2
compat-wireless/backports now contains a bcm47xx_nvram.h file to backport some of the functions in it which are used by the bcmfmac driver. This file just checks for the kernel versions and provide an empty implementations on older kernel versions. This is OK on most systems, but on bcm47xx / bcm53xx systems we want to call the real functions here. This commit removes the file from backports in our build process like we do it with the bcma and ssb header files. Instead we add a recent version into our kernel so all code uses only one header file. On bcm47xx / bcm53xx the real implementations of this code will be used. Reported-by: Hante Meuleman <meuleman@broadcom.com> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 47467
54 lines
2.0 KiB
Diff
54 lines
2.0 KiB
Diff
From 71a0a72456b48de972d7ed613b06a22a3aa9057f Mon Sep 17 00:00:00 2001
|
|
From: Yousong Zhou <yszhou4tech@gmail.com>
|
|
Date: Sat, 26 Sep 2015 13:41:43 +0800
|
|
Subject: [PATCH] MIPS: UAPI: Ignore __arch_swab{16,32,64} when using MIPS16
|
|
|
|
Some GCC versions (e.g. 4.8.3) can incorrectly inline a function with
|
|
MIPS32 instructions into another function with MIPS16 code [1], causing
|
|
the assembler to genereate incorrect binary code or fail right away
|
|
complaining about unrecognized opcode.
|
|
|
|
In the case of __arch_swab{16,32}, when inlined by the compiler with
|
|
flags `-mips32r2 -mips16 -Os', the assembler can fail with the following
|
|
error.
|
|
|
|
{standard input}:79: Error: unrecognized opcode `wsbh $2,$2'
|
|
|
|
For performance concerns and to workaround the issue already existing in
|
|
older compilers, just ignore these 2 functions when compiling with
|
|
mips16 enabled.
|
|
|
|
[1] Inlining nomips16 function into mips16 function can result in
|
|
undefined builtins, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55777
|
|
|
|
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
|
|
Cc: Maciej W. Rozycki <macro@linux-mips.org>
|
|
Cc: linux-mips@linux-mips.org
|
|
Patchwork: https://patchwork.linux-mips.org/patch/11241/
|
|
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
|
|
---
|
|
arch/mips/include/uapi/asm/swab.h | 7 ++++---
|
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
|
|
--- a/arch/mips/include/uapi/asm/swab.h
|
|
+++ b/arch/mips/include/uapi/asm/swab.h
|
|
@@ -13,8 +13,9 @@
|
|
|
|
#define __SWAB_64_THRU_32__
|
|
|
|
-#if (defined(__mips_isa_rev) && (__mips_isa_rev >= 2)) || \
|
|
- defined(_MIPS_ARCH_LOONGSON3A)
|
|
+#if !defined(__mips16) && \
|
|
+ ((defined(__mips_isa_rev) && (__mips_isa_rev >= 2)) || \
|
|
+ defined(_MIPS_ARCH_LOONGSON3A))
|
|
|
|
static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
|
|
{
|
|
@@ -65,5 +66,5 @@ static inline __attribute_const__ __u64
|
|
}
|
|
#define __arch_swab64 __arch_swab64
|
|
#endif /* __mips64 */
|
|
-#endif /* MIPS R2 or newer or Loongson 3A */
|
|
+#endif /* (not __mips16) and (MIPS R2 or newer or Loongson 3A) */
|
|
#endif /* _ASM_SWAB_H */
|