From b1e9033ff5f1e7b0c67b861f2c3a6b777b9dba0c Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Sat, 26 Nov 2016 18:15:09 +0000 Subject: [PATCH] alarm/uboot-odroid-c1 to 2011.03-14 --- .../0001-remove-cross-compiling.patch | 12 +- .../0002-sd_fusing-tweaks.patch | 6 +- ...gcc-do-not-redefine-__gnu_attributes.patch | 69 ++ ...-include-linux-compiler-.h-with-Linu.patch | 461 ++++++++++++ ...er_gcc-prevent-redefining-attributes.patch | 74 ++ ...-include-linux-compiler-.h-with-Linu.patch | 704 ++++++++++++++++++ .../0007-ARM-asm-io.h-use-static-inline.patch | 73 ++ .../0008-arm-board-use-__weak.patch | 67 ++ ...009-add-vframe_provider_s-definition.patch | 38 + ...ain.c-make-show_boot_progress-__weak.patch | 31 + alarm/uboot-odroid-c1/0011-wait_ms-fix.patch | 25 + alarm/uboot-odroid-c1/PKGBUILD | 41 +- alarm/uboot-odroid-c1/boot.ini | 61 +- 13 files changed, 1626 insertions(+), 36 deletions(-) create mode 100644 alarm/uboot-odroid-c1/0003-compiler_gcc-do-not-redefine-__gnu_attributes.patch create mode 100644 alarm/uboot-odroid-c1/0004-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch create mode 100644 alarm/uboot-odroid-c1/0005-compiler_gcc-prevent-redefining-attributes.patch create mode 100644 alarm/uboot-odroid-c1/0006-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch create mode 100644 alarm/uboot-odroid-c1/0007-ARM-asm-io.h-use-static-inline.patch create mode 100644 alarm/uboot-odroid-c1/0008-arm-board-use-__weak.patch create mode 100644 alarm/uboot-odroid-c1/0009-add-vframe_provider_s-definition.patch create mode 100644 alarm/uboot-odroid-c1/0010-common-main.c-make-show_boot_progress-__weak.patch create mode 100644 alarm/uboot-odroid-c1/0011-wait_ms-fix.patch diff --git a/alarm/uboot-odroid-c1/0001-remove-cross-compiling.patch b/alarm/uboot-odroid-c1/0001-remove-cross-compiling.patch index fa8c5aae7..22f545996 100644 --- a/alarm/uboot-odroid-c1/0001-remove-cross-compiling.patch +++ b/alarm/uboot-odroid-c1/0001-remove-cross-compiling.patch @@ -1,7 +1,7 @@ -From 199913f814f1c21d612514ee6455940096fdaf50 Mon Sep 17 00:00:00 2001 +From aa73697d6a66f2c5f6cd01782fe3636099b2d866 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Sun, 21 Dec 2014 18:04:05 -0700 -Subject: [PATCH 1/2] remove cross-compiling +Subject: [PATCH 01/11] remove cross-compiling --- arch/arm/config.mk | 2 +- @@ -22,15 +22,15 @@ index 0f9bffe..ecd547a 100755 ifeq ($(BOARD),omap2420h4) diff --git a/arch/arm/cpu/aml_meson/config.mk b/arch/arm/cpu/aml_meson/config.mk -index 151ef9a..c0b0b2e 100755 +index d157356..feeff1b 100755 --- a/arch/arm/cpu/aml_meson/config.mk +++ b/arch/arm/cpu/aml_meson/config.mk @@ -1,4 +1,4 @@ --CROSS_COMPILE=arm-none-eabi- -+#CROSS_COMPILE=arm-none-eabi- +-CROSS_COMPILE?=arm-none-eabi- ++#CROSS_COMPILE?=arm-none-eabi- ARM_CPU=cortex-a9 PLATFORM_CPPFLAGS += $(call cc-option,-mcpu=cortex-a9 -ffixed-r8 -mno-long-calls -Wall -fPIC ) PF_CPPFLAGS_NO_UNALIGNED := $(call cc-option, -mno-unaligned-access,) -- -2.2.1 +2.10.2 diff --git a/alarm/uboot-odroid-c1/0002-sd_fusing-tweaks.patch b/alarm/uboot-odroid-c1/0002-sd_fusing-tweaks.patch index 04b85efa3..49dd1b3b6 100644 --- a/alarm/uboot-odroid-c1/0002-sd_fusing-tweaks.patch +++ b/alarm/uboot-odroid-c1/0002-sd_fusing-tweaks.patch @@ -1,7 +1,7 @@ -From 8464678df565088ae553a204be9b3ce3e16f5d57 Mon Sep 17 00:00:00 2001 +From f4c89d91d5defcaa6aed1371c2dac62c7d1da1f4 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Mon, 22 Dec 2014 09:55:32 -0700 -Subject: [PATCH 2/2] sd_fusing tweaks +Subject: [PATCH 02/11] sd_fusing tweaks --- sd_fuse/sd_fusing.sh | 13 ++++++------- @@ -37,5 +37,5 @@ index f0ce95a..f65980a 100755 -echo FINISH +echo "Successfully wrote U-Boot to $1" -- -2.2.1 +2.10.2 diff --git a/alarm/uboot-odroid-c1/0003-compiler_gcc-do-not-redefine-__gnu_attributes.patch b/alarm/uboot-odroid-c1/0003-compiler_gcc-do-not-redefine-__gnu_attributes.patch new file mode 100644 index 000000000..ce6c83a52 --- /dev/null +++ b/alarm/uboot-odroid-c1/0003-compiler_gcc-do-not-redefine-__gnu_attributes.patch @@ -0,0 +1,69 @@ +From b9a695d881dcc3fb379be01bf1fb49e1a0b2059a Mon Sep 17 00:00:00 2001 +From: Jeroen Hofstee +Date: Sat, 10 Aug 2013 17:16:50 +0200 +Subject: [PATCH 03/11] compiler_gcc: do not redefine __gnu_attributes + +gcc allows extensions to be non compiler specific by defining +__* macros for the attributes supported by gcc. Having a +different definition causes many warnings during the build +(cdefs.h on FreeBSD uses __attribute((__pure__)) where u-boot +uses __attribute__((pure)) for example). Do not redefine +these macros to suppress these warnings. + +This patch ignores the checkpatch warning: +WARNING: __packed is preferred over __attribute__((packed)) + +Signed-off-by: Jeroen Hofstee +--- + include/linux/compiler-gcc.h | 12 +++++++++--- + include/linux/compiler-gcc4.h | 4 +++- + 2 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h +index 73dcf80..9896e54 100644 +--- a/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -50,7 +50,9 @@ + #endif + + #define __deprecated __attribute__((deprecated)) +-#define __packed __attribute__((packed)) ++#ifndef __packed ++# define __packed __attribute__((packed)) ++#endif + #define __weak __attribute__((weak)) + + /* +@@ -73,8 +75,12 @@ + * would be. + * [...] + */ +-#define __pure __attribute__((pure)) +-#define __aligned(x) __attribute__((aligned(x))) ++#ifndef __pure ++# define __pure __attribute__((pure)) ++#endif ++#ifndef __aligned ++# define __aligned(x) __attribute__((aligned(x))) ++#endif + #define __printf(a,b) __attribute__((format(printf,a,b))) + #define noinline __attribute__((noinline)) + #define __attribute_const__ __attribute__((__const__)) +diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h +index 94dea3f..27d11ca 100644 +--- a/include/linux/compiler-gcc4.h ++++ b/include/linux/compiler-gcc4.h +@@ -12,7 +12,9 @@ + #define __used __attribute__((__used__)) + #define __must_check __attribute__((warn_unused_result)) + #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) +-#define __always_inline inline __attribute__((always_inline)) ++#ifndef __always_inline ++# define __always_inline inline __attribute__((always_inline)) ++#endif + + /* + * A trick to suppress uninitialized variable warning without generating any +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0004-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch b/alarm/uboot-odroid-c1/0004-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch new file mode 100644 index 000000000..4a975ec30 --- /dev/null +++ b/alarm/uboot-odroid-c1/0004-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch @@ -0,0 +1,461 @@ +From 7fb05ba00f8f51d55d78124144a885628bec1be7 Mon Sep 17 00:00:00 2001 +From: Masahiro Yamada +Date: Thu, 4 Sep 2014 02:40:58 +0900 +Subject: [PATCH 04/11] compiler*.h: sync include/linux/compiler*.h with Linux + 3.16 + +Copy them from Linux v3.16 tag. +My main motivation of this commit is to add compiler-clang.h. + +Signed-off-by: Masahiro Yamada +Cc: Jeroen Hofstee +--- + include/linux/compiler-clang.h | 12 ++++++ + include/linux/compiler-gcc.h | 57 ++++++++++++++++++-------- + include/linux/compiler-gcc4.h | 59 +++++++++++++++++++-------- + include/linux/compiler-intel.h | 39 ++++++++++++++++++ + include/linux/compiler.h | 92 +++++++++++++++++++++++++++++++++++++++++- + 5 files changed, 224 insertions(+), 35 deletions(-) + create mode 100644 include/linux/compiler-clang.h + create mode 100644 include/linux/compiler-intel.h + +diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h +new file mode 100644 +index 0000000..d1e49d5 +--- /dev/null ++++ b/include/linux/compiler-clang.h +@@ -0,0 +1,12 @@ ++#ifndef __LINUX_COMPILER_H ++#error "Please don't include directly, include instead." ++#endif ++ ++/* Some compiler specific definitions are overwritten here ++ * for Clang compiler ++ */ ++ ++#ifdef uninitialized_var ++#undef uninitialized_var ++#define uninitialized_var(x) x = *(&(x)) ++#endif +diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h +index 9896e54..02ae99e 100644 +--- a/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -5,6 +5,9 @@ + /* + * Common definitions for all gcc versions go here. + */ ++#define GCC_VERSION (__GNUC__ * 10000 \ ++ + __GNUC_MINOR__ * 100 \ ++ + __GNUC_PATCHLEVEL__) + + + /* Optimization barrier */ +@@ -34,9 +37,15 @@ + __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)) ++ ++#ifdef __CHECKER__ ++#define __must_be_array(arr) 0 ++#else + /* &a[0] degrades to a pointer: a different type from an array */ +-#define __must_be_array(a) \ +- BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof(&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, +@@ -44,15 +53,18 @@ + */ + #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ + !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) +-# define inline inline __attribute__((always_inline)) +-# define __inline__ __inline__ __attribute__((always_inline)) +-# define __inline __inline __attribute__((always_inline)) ++# 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 + #endif + + #define __deprecated __attribute__((deprecated)) +-#ifndef __packed +-# define __packed __attribute__((packed)) +-#endif ++#define __packed __attribute__((packed)) + #define __weak __attribute__((weak)) + + /* +@@ -60,8 +72,12 @@ + * 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. GCC 4.[56] currently fail to enforce ++ * this, so we must do so ourselves. See GCC PR44290. + */ +-#define __naked __attribute__((naked)) notrace ++#define __naked __attribute__((naked)) noinline __noclone notrace + + #define __noreturn __attribute__((noreturn)) + +@@ -75,13 +91,10 @@ + * would be. + * [...] + */ +-#ifndef __pure +-# define __pure __attribute__((pure)) +-#endif +-#ifndef __aligned +-# define __aligned(x) __attribute__((aligned(x))) +-#endif +-#define __printf(a,b) __attribute__((format(printf,a,b))) ++#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 noinline __attribute__((noinline)) + #define __attribute_const__ __attribute__((__const__)) + #define __maybe_unused __attribute__((unused)) +@@ -91,3 +104,15 @@ + #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) + #define gcc_header(x) _gcc_header(x) + #include gcc_header(__GNUC__) ++ ++#if !defined(__noclone) ++#define __noclone /* not needed */ ++#endif ++ ++/* ++ * A trick to suppress uninitialized variable warning without generating any ++ * code ++ */ ++#define uninitialized_var(x) x = x ++ ++#define __always_inline inline __attribute__((always_inline)) +diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h +index 27d11ca..2507fd2 100644 +--- a/include/linux/compiler-gcc4.h ++++ b/include/linux/compiler-gcc4.h +@@ -4,7 +4,7 @@ + + /* GCC 4.1.[01] miscompiles __weak */ + #ifdef __KERNEL__ +-# if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1 ++# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 + # error Your version of gcc miscompiles the __weak directive + # endif + #endif +@@ -12,17 +12,12 @@ + #define __used __attribute__((__used__)) + #define __must_check __attribute__((warn_unused_result)) + #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) +-#ifndef __always_inline +-# define __always_inline inline __attribute__((always_inline)) +-#endif + +-/* +- * A trick to suppress uninitialized variable warning without generating any +- * code +- */ +-#define uninitialized_var(x) x = x ++#if GCC_VERSION >= 40100 && GCC_VERSION < 40600 ++# define __compiletime_object_size(obj) __builtin_object_size(obj, 0) ++#endif + +-#if __GNUC_MINOR__ >= 3 ++#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 +@@ -38,8 +33,15 @@ + the kernel context */ + #define __cold __attribute__((__cold__)) + ++#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) + +-#if __GNUC_MINOR__ >= 5 ++#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 +@@ -50,14 +52,37 @@ + * unreleased. Really, we need to have autoconf for the kernel. + */ + #define unreachable() __builtin_unreachable() +-#endif + ++/* 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 + +-#if __GNUC_MINOR__ > 0 +-#define __compiletime_object_size(obj) __builtin_object_size(obj, 0) ++/* ++ * 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 __GNUC_MINOR__ >= 4 +-#define __compiletime_warning(message) __attribute__((warning(message))) +-#define __compiletime_error(message) __attribute__((error(message))) ++#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600) ++#define __HAVE_BUILTIN_BSWAP16__ + #endif ++#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ +diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h +new file mode 100644 +index 0000000..69d86fe +--- /dev/null ++++ b/include/linux/compiler-intel.h +@@ -0,0 +1,39 @@ ++#ifndef __LINUX_COMPILER_H ++#error "Please don't include directly, include instead." ++#endif ++ ++#ifdef __ECC ++ ++/* Some compiler specific definitions are overwritten here ++ * for Intel ECC compiler ++ */ ++ ++#include ++ ++/* Intel ECC compiler doesn't support gcc specific asm stmts. ++ * It uses intrinsics to do the equivalent things. ++ */ ++#undef RELOC_HIDE ++#undef OPTIMIZER_HIDE_VAR ++ ++#define RELOC_HIDE(ptr, off) \ ++ ({ unsigned long __ptr; \ ++ __ptr = (unsigned long) (ptr); \ ++ (typeof(ptr)) (__ptr + (off)); }) ++ ++/* This should act as an optimization barrier on var. ++ * Given that this compiler does not have inline assembly, a compiler barrier ++ * is the best we can do. ++ */ ++#define OPTIMIZER_HIDE_VAR(var) barrier() ++ ++/* Intel ECC compiler doesn't support __builtin_types_compatible_p() */ ++#define __must_be_array(a) 0 ++ ++#endif ++ ++#ifndef __HAVE_BUILTIN_BSWAP16__ ++/* icc has this, but it's called _bswap16 */ ++#define __HAVE_BUILTIN_BSWAP16__ ++#define __builtin_bswap16 _bswap16 ++#endif +diff --git a/include/linux/compiler.h b/include/linux/compiler.h +index 5be3dab..d5ad7b1 100644 +--- a/include/linux/compiler.h ++++ b/include/linux/compiler.h +@@ -5,16 +5,23 @@ + + #ifdef __CHECKER__ + # define __user __attribute__((noderef, address_space(1))) +-# define __kernel /* default address space */ ++# define __kernel __attribute__((address_space(0))) + # define __safe __attribute__((safe)) + # define __force __attribute__((force)) + # define __nocast __attribute__((nocast)) + # define __iomem __attribute__((noderef, address_space(2))) ++# define __must_hold(x) __attribute__((context(x,1,1))) + # define __acquires(x) __attribute__((context(x,0,1))) + # define __releases(x) __attribute__((context(x,1,0))) + # define __acquire(x) __context__(x,1) + # define __release(x) __context__(x,-1) + # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) ++# define __percpu __attribute__((noderef, address_space(3))) ++#ifdef CONFIG_SPARSE_RCU_POINTER ++# define __rcu __attribute__((noderef, address_space(4))) ++#else ++# define __rcu ++#endif + extern void __chk_user_ptr(const volatile void __user *); + extern void __chk_io_ptr(const volatile void __iomem *); + #else +@@ -27,13 +34,20 @@ extern void __chk_io_ptr(const volatile void __iomem *); + # define __chk_user_ptr(x) (void)0 + # define __chk_io_ptr(x) (void)0 + # define __builtin_warning(x, y...) (1) ++# define __must_hold(x) + # define __acquires(x) + # define __releases(x) + # define __acquire(x) (void)0 + # define __release(x) (void)0 + # define __cond_lock(x,c) (c) ++# define __percpu ++# define __rcu + #endif + ++/* Indirect macros required for expanded argument pasting, eg. __LINE__. */ ++#define ___PASTE(a,b) a##b ++#define __PASTE(a,b) ___PASTE(a,b) ++ + #ifdef __KERNEL__ + + #ifdef __GNUC__ +@@ -49,6 +63,13 @@ extern void __chk_io_ptr(const volatile void __iomem *); + # include + #endif + ++/* Clang compiler defines __GNUC__. So we will overwrite implementations ++ * coming from above header files here ++ */ ++#ifdef __clang__ ++#include ++#endif ++ + /* + * Generic compiler-dependent macros required for kernel + * build go below this comment. Actual compiler/compiler version +@@ -156,6 +177,15 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + (typeof(ptr)) (__ptr + (off)); }) + #endif + ++#ifndef OPTIMIZER_HIDE_VAR ++#define OPTIMIZER_HIDE_VAR(var) barrier() ++#endif ++ ++/* Not-quite-unique ID. */ ++#ifndef __UNIQUE_ID ++# define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __LINE__) ++#endif ++ + #endif /* __KERNEL__ */ + + #endif /* __ASSEMBLY__ */ +@@ -228,7 +258,7 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + + /* + * Rather then using noinline to prevent stack consumption, use +- * noinline_for_stack instead. For documentaiton reasons. ++ * noinline_for_stack instead. For documentation reasons. + */ + #define noinline_for_stack noinline + +@@ -270,11 +300,20 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + # define __section(S) __attribute__ ((__section__(#S))) + #endif + ++#ifndef __visible ++#define __visible ++#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)) + #endif + ++/* 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)) ++#endif ++ + /* Compile time object size, -1 for unknown */ + #ifndef __compiletime_object_size + # define __compiletime_object_size(obj) -1 +@@ -284,8 +323,49 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + #endif + #ifndef __compiletime_error + # define __compiletime_error(message) ++/* ++ * Sparse complains of variable sized arrays due to the temporary variable in ++ * __compiletime_assert. Unfortunately we can't just expand it out to make ++ * sparse see a constant array size without breaking compiletime_assert on old ++ * versions of GCC (e.g. 4.2.4), so hide the array from sparse altogether. ++ */ ++# ifndef __CHECKER__ ++# define __compiletime_error_fallback(condition) \ ++ do { ((void)sizeof(char[1 - 2 * condition])); } while (0) ++# endif ++#endif ++#ifndef __compiletime_error_fallback ++# define __compiletime_error_fallback(condition) do { } while (0) + #endif + ++#define __compiletime_assert(condition, msg, prefix, suffix) \ ++ do { \ ++ bool __cond = !(condition); \ ++ extern void prefix ## suffix(void) __compiletime_error(msg); \ ++ if (__cond) \ ++ prefix ## suffix(); \ ++ __compiletime_error_fallback(__cond); \ ++ } while (0) ++ ++#define _compiletime_assert(condition, msg, prefix, suffix) \ ++ __compiletime_assert(condition, msg, prefix, suffix) ++ ++/** ++ * compiletime_assert - break build and emit msg if condition is false ++ * @condition: a compile-time constant condition to check ++ * @msg: a message to emit if condition is false ++ * ++ * In tradition of POSIX assert, this macro will break the build if the ++ * supplied condition is *false*, emitting the supplied error message if the ++ * compiler has support to do so. ++ */ ++#define compiletime_assert(condition, msg) \ ++ _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) ++ ++#define compiletime_assert_atomic_type(t) \ ++ compiletime_assert(__native_word(t), \ ++ "Need native word sized stores/loads for atomicity.") ++ + /* + * Prevent the compiler from merging or refetching accesses. The compiler + * is also forbidden from reordering successive instances of ACCESS_ONCE(), +@@ -300,4 +380,12 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + */ + #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) + ++/* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */ ++#ifdef CONFIG_KPROBES ++# define __kprobes __attribute__((__section__(".kprobes.text"))) ++# define nokprobe_inline __always_inline ++#else ++# define __kprobes ++# define nokprobe_inline inline ++#endif + #endif /* __LINUX_COMPILER_H */ +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0005-compiler_gcc-prevent-redefining-attributes.patch b/alarm/uboot-odroid-c1/0005-compiler_gcc-prevent-redefining-attributes.patch new file mode 100644 index 000000000..f7dfa43a1 --- /dev/null +++ b/alarm/uboot-odroid-c1/0005-compiler_gcc-prevent-redefining-attributes.patch @@ -0,0 +1,74 @@ +From 55075316860027e915db4e68b1aa6f1e1aabe743 Mon Sep 17 00:00:00 2001 +From: Jeroen Hofstee +Date: Thu, 18 Sep 2014 20:10:27 +0200 +Subject: [PATCH 05/11] compiler_gcc: prevent redefining attributes + +The libc headers on FreeBSD and likely related projects as well contain an +header file, cdefs.h which provides similiar functionality as linux/compiler.h. +It provides compiler independent defines like __weak __packed, to allow +compiling with multiple compilers which might have a different syntax for such +extension. + +Since that header file is included in multiple standard headers, like stddef.h +and stdarg.h, multiple definitions of those defines will be present if both are +included. When compiling u-boot the compiler will warn about it hundreds of +times since e.g. common.h will include both files indirectly. + +commit 7ea50d52849fe8ffa5b5b74c979b60b1045d6fc9 "compiler_gcc: do not redefine +__gnu_attributes" prevented such redefinitions, but this was undone by commit +fb8ffd7cfc68b3dc44e182356a207d784cb30b34 "compiler*.h: sync +include/linux/compiler*.h with Linux 3.16". + +Add the checks back where necessary to prevent such warnings. + +As the original patch this checkpatch warning is ignored: +"WARNING: Adding new packed members is to be done with care" + +Cc: Masahiro Yamada +Cc: Tom Rini +Signed-off-by: Jeroen Hofstee +Acked-by: Masahiro Yamada +--- + include/linux/compiler-gcc.h | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h +index 02ae99e..e057bd2 100644 +--- a/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -64,8 +64,12 @@ + #endif + + #define __deprecated __attribute__((deprecated)) ++#ifndef __packed + #define __packed __attribute__((packed)) ++#endif ++#ifndef __weak + #define __weak __attribute__((weak)) ++#endif + + /* + * it doesn't make sense on ARM (currently the only user of __naked) to trace +@@ -91,8 +95,12 @@ + * would be. + * [...] + */ ++#ifndef __pure + #define __pure __attribute__((pure)) ++#endif ++#ifndef __aligned + #define __aligned(x) __attribute__((aligned(x))) ++#endif + #define __printf(a, b) __attribute__((format(printf, a, b))) + #define __scanf(a, b) __attribute__((format(scanf, a, b))) + #define noinline __attribute__((noinline)) +@@ -115,4 +123,6 @@ + */ + #define uninitialized_var(x) x = x + ++#ifndef __always_inline + #define __always_inline inline __attribute__((always_inline)) ++#endif +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0006-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch b/alarm/uboot-odroid-c1/0006-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch new file mode 100644 index 000000000..8bf5354aa --- /dev/null +++ b/alarm/uboot-odroid-c1/0006-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch @@ -0,0 +1,704 @@ +From 90586ad56c76d3f42888539c53e17f56616eab62 Mon Sep 17 00:00:00 2001 +From: Tom Rini +Date: Mon, 29 Feb 2016 11:34:15 -0500 +Subject: [PATCH 06/11] compiler*.h: sync include/linux/compiler*.h with Linux + 4.5-rc6 + +Copy these from Linux v4.5-rc6 tag. + +This is needed so that we can keep up with newer gcc versions. Note +that we don't have the uapi/ hierarchy from the kernel so continue to +use + +Signed-off-by: Tom Rini +--- + include/linux/compiler-gcc.h | 259 ++++++++++++++++++++++++++++++++--------- + include/linux/compiler-gcc4.h | 88 -------------- + include/linux/compiler-intel.h | 5 + + include/linux/compiler.h | 178 ++++++++++++++++++++++++++-- + 4 files changed, 383 insertions(+), 147 deletions(-) + delete mode 100644 include/linux/compiler-gcc4.h + +diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h +index e057bd2..22ab246 100644 +--- a/include/linux/compiler-gcc.h ++++ b/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 a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h +deleted file mode 100644 +index 2507fd2..0000000 +--- a/include/linux/compiler-gcc4.h ++++ /dev/null +@@ -1,88 +0,0 @@ +-#ifndef __LINUX_COMPILER_H +-#error "Please don't include directly, include instead." +-#endif +- +-/* 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 __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 a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h +index 69d86fe..58daccc 100644 +--- a/include/linux/compiler-intel.h ++++ b/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 a/include/linux/compiler.h b/include/linux/compiler.h +index d5ad7b1..020ad16 100644 +--- a/include/linux/compiler.h ++++ b/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 + #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 ++ ++#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 +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0007-ARM-asm-io.h-use-static-inline.patch b/alarm/uboot-odroid-c1/0007-ARM-asm-io.h-use-static-inline.patch new file mode 100644 index 000000000..45bc183b9 --- /dev/null +++ b/alarm/uboot-odroid-c1/0007-ARM-asm-io.h-use-static-inline.patch @@ -0,0 +1,73 @@ +From 284fae8f7785a969c8e8b0ba986ab17017f0a0b5 Mon Sep 17 00:00:00 2001 +From: Jeroen Hofstee +Date: Sun, 22 Jun 2014 23:10:39 +0200 +Subject: [PATCH 07/11] ARM:asm:io.h use static inline + +When compiling u-boot with W=1 the extern inline void for +read* is likely causing the most noise. gcc / clang will +warn there is never a actual declaration for these functions. +Instead of declaring these extern make them static inline so +it is actually declared. + +cc: Albert ARIBAUD +Signed-off-by: Jeroen Hofstee +--- + arch/arm/include/asm/io.h | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h +index 385faed..fc87233 100644 +--- a/arch/arm/include/asm/io.h ++++ b/arch/arm/include/asm/io.h +@@ -75,42 +75,42 @@ static inline phys_addr_t virt_to_phys(void * vaddr) + #define __arch_putw(v,a) (*(volatile unsigned short *)(a) = (v)) + #define __arch_putl(v,a) (*(volatile unsigned int *)(a) = (v)) + +-extern inline void __raw_writesb(unsigned int addr, const void *data, int bytelen) ++static inline void __raw_writesb(unsigned int addr, const void *data, int bytelen) + { + uint8_t *buf = (uint8_t *)data; + while(bytelen--) + __arch_putb(*buf++, addr); + } + +-extern inline void __raw_writesw(unsigned int addr, const void *data, int wordlen) ++static inline void __raw_writesw(unsigned int addr, const void *data, int wordlen) + { + uint16_t *buf = (uint16_t *)data; + while(wordlen--) + __arch_putw(*buf++, addr); + } + +-extern inline void __raw_writesl(unsigned int addr, const void *data, int longlen) ++static inline void __raw_writesl(unsigned int addr, const void *data, int longlen) + { + uint32_t *buf = (uint32_t *)data; + while(longlen--) + __arch_putl(*buf++, addr); + } + +-extern inline void __raw_readsb(unsigned int addr, void *data, int bytelen) ++static inline void __raw_readsb(unsigned int addr, void *data, int bytelen) + { + uint8_t *buf = (uint8_t *)data; + while(bytelen--) + *buf++ = __arch_getb(addr); + } + +-extern inline void __raw_readsw(unsigned int addr, void *data, int wordlen) ++static inline void __raw_readsw(unsigned int addr, void *data, int wordlen) + { + uint16_t *buf = (uint16_t *)data; + while(wordlen--) + *buf++ = __arch_getw(addr); + } + +-extern inline void __raw_readsl(unsigned int addr, void *data, int longlen) ++static inline void __raw_readsl(unsigned int addr, void *data, int longlen) + { + uint32_t *buf = (uint32_t *)data; + while(longlen--) +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0008-arm-board-use-__weak.patch b/alarm/uboot-odroid-c1/0008-arm-board-use-__weak.patch new file mode 100644 index 000000000..93fd61313 --- /dev/null +++ b/alarm/uboot-odroid-c1/0008-arm-board-use-__weak.patch @@ -0,0 +1,67 @@ +From cb23dda9dbd03a51839d3c01a08f95c70fb9ec8d Mon Sep 17 00:00:00 2001 +From: Jeroen Hofstee +Date: Wed, 8 Oct 2014 22:57:21 +0200 +Subject: [PATCH 08/11] arm: board: use __weak + +Signed-off-by: Jeroen Hofstee +Acked-by: Albert ARIBAUD +--- + arch/arm/lib/board.c | 31 ++++++++++--------------------- + 1 file changed, 10 insertions(+), 21 deletions(-) + +diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c +index 79b839f..d233271 100644 +--- a/arch/arm/lib/board.c ++++ b/arch/arm/lib/board.c +@@ -120,24 +120,15 @@ int __g_nTStep_4BC722B3__ = 0; + ************************************************************************ + * May be supplied by boards if desired + */ +-void inline __coloured_LED_init (void) {} +-void coloured_LED_init (void) __attribute__((weak, alias("__coloured_LED_init"))); +-void inline __red_LED_on (void) {} +-void red_LED_on (void) __attribute__((weak, alias("__red_LED_on"))); +-void inline __red_LED_off(void) {} +-void red_LED_off(void) __attribute__((weak, alias("__red_LED_off"))); +-void inline __green_LED_on(void) {} +-void green_LED_on(void) __attribute__((weak, alias("__green_LED_on"))); +-void inline __green_LED_off(void) {} +-void green_LED_off(void) __attribute__((weak, alias("__green_LED_off"))); +-void inline __yellow_LED_on(void) {} +-void yellow_LED_on(void) __attribute__((weak, alias("__yellow_LED_on"))); +-void inline __yellow_LED_off(void) {} +-void yellow_LED_off(void) __attribute__((weak, alias("__yellow_LED_off"))); +-void inline __blue_LED_on(void) {} +-void blue_LED_on(void) __attribute__((weak, alias("__blue_LED_on"))); +-void inline __blue_LED_off(void) {} +-void blue_LED_off(void) __attribute__((weak, alias("__blue_LED_off"))); ++__attribute__((__weak__)) void coloured_LED_init(void) {} ++__attribute__((__weak__)) void red_led_on(void) {} ++__attribute__((__weak__)) void red_led_off(void) {} ++__attribute__((__weak__)) void green_led_on(void) {} ++__attribute__((__weak__)) void green_led_off(void) {} ++__attribute__((__weak__)) void yellow_led_on(void) {} ++__attribute__((__weak__)) void yellow_led_off(void) {} ++__attribute__((__weak__)) void blue_led_on(void) {} ++__attribute__((__weak__)) void blue_led_off(void) {} + + /************************************************************************ + * Init Utilities * +@@ -259,13 +250,11 @@ typedef int (init_fnc_t) (void); + + int print_cpuinfo (void); + +-void __dram_init_banksize(void) ++__attribute__((__weak__)) void dram_init_banksize(void) + { + gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; + gd->bd->bi_dram[0].size = gd->ram_size; + } +-void dram_init_banksize(void) +- __attribute__((weak, alias("__dram_init_banksize"))); + + #ifdef CONFIG_AML_EFUSE_INIT_PLUS + extern int efuse_aml_init_plus(void); +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0009-add-vframe_provider_s-definition.patch b/alarm/uboot-odroid-c1/0009-add-vframe_provider_s-definition.patch new file mode 100644 index 000000000..d2b444ae3 --- /dev/null +++ b/alarm/uboot-odroid-c1/0009-add-vframe_provider_s-definition.patch @@ -0,0 +1,38 @@ +From 4a5181de15e0a299aeb75a818410ddb2d584cec0 Mon Sep 17 00:00:00 2001 +From: Kevin Mihelich +Date: Fri, 25 Nov 2016 22:15:09 -0700 +Subject: [PATCH 09/11] add vframe_provider_s definition + +--- + arch/arm/include/asm/arch-m8b/osd_hw_def.h | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/arch/arm/include/asm/arch-m8b/osd_hw_def.h b/arch/arm/include/asm/arch-m8b/osd_hw_def.h +index c24301d..a777221 100644 +--- a/arch/arm/include/asm/arch-m8b/osd_hw_def.h ++++ b/arch/arm/include/asm/arch-m8b/osd_hw_def.h +@@ -1,6 +1,7 @@ + #ifndef _OSD_HW_DEF_H + #define _OSD_HW_DEF_H + #include ++#include + + /************************************************************************ + ** +@@ -206,6 +207,13 @@ typedef struct vframe_operations_s { + int (*vf_states)(vframe_states_t *states, void* op_arg); + } vframe_operations_t; + ++typedef struct vframe_provider_s { ++ const char *name; ++ const struct vframe_operations_s *ops; ++ void* op_arg; ++ struct list_head list; ++} vframe_provider_t; ++ + /************************************************************************ + ** + ** func declare part +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0010-common-main.c-make-show_boot_progress-__weak.patch b/alarm/uboot-odroid-c1/0010-common-main.c-make-show_boot_progress-__weak.patch new file mode 100644 index 000000000..1db0fbc56 --- /dev/null +++ b/alarm/uboot-odroid-c1/0010-common-main.c-make-show_boot_progress-__weak.patch @@ -0,0 +1,31 @@ +From 53e15da95d23324ec42c247b0d42b71b6005b0ab Mon Sep 17 00:00:00 2001 +From: Jeroen Hofstee +Date: Thu, 26 Jun 2014 20:18:31 +0200 +Subject: [PATCH 10/11] common: main.c: make show_boot_progress __weak + +This not only looks a bit better it also prevents a +warning with W=1 (no previous prototype). + +Signed-off-by: Jeroen Hofstee +Acked-by: Simon Glass +--- + common/main.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/common/main.c b/common/main.c +index 5312e7d..115c985 100644 +--- a/common/main.c ++++ b/common/main.c +@@ -63,8 +63,7 @@ extern int __g_nTStep_4BC722B3__; + /* + * Board-specific Platform code can reimplement show_boot_progress () if needed + */ +-void inline __show_boot_progress (int val) {} +-void show_boot_progress (int val) __attribute__((weak, alias("__show_boot_progress"))); ++__attribute__((weak)) void show_boot_progress(int val) {} + + #if defined(CONFIG_UPDATE_TFTP) + void update_tftp (void); +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/0011-wait_ms-fix.patch b/alarm/uboot-odroid-c1/0011-wait_ms-fix.patch new file mode 100644 index 000000000..9c6b7a400 --- /dev/null +++ b/alarm/uboot-odroid-c1/0011-wait_ms-fix.patch @@ -0,0 +1,25 @@ +From c853a932ea53d3bec9e4509d263245421b07af4d Mon Sep 17 00:00:00 2001 +From: Kevin Mihelich +Date: Fri, 25 Nov 2016 22:48:48 -0700 +Subject: [PATCH 11/11] wait_ms fix + +--- + include/usb.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/usb.h b/include/usb.h +index 97ea37b..d3acbd5 100644 +--- a/include/usb.h ++++ b/include/usb.h +@@ -197,7 +197,7 @@ int usb_submit_int_msg(struct usb_device *dev, unsigned long pipe, + void *buffer, int transfer_len, int interval); + void usb_disable_asynch(int disable); + int usb_maxpacket(struct usb_device *dev, unsigned long pipe); +-inline void wait_ms(unsigned long ms); ++extern inline void wait_ms(unsigned long ms); + int usb_get_configuration_no(struct usb_device *dev, unsigned char *buffer, + int cfgno); + int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type, +-- +2.10.2 + diff --git a/alarm/uboot-odroid-c1/PKGBUILD b/alarm/uboot-odroid-c1/PKGBUILD index 703701c5d..b79e2672a 100644 --- a/alarm/uboot-odroid-c1/PKGBUILD +++ b/alarm/uboot-odroid-c1/PKGBUILD @@ -5,7 +5,7 @@ buildarch=4 pkgname=uboot-odroid-c1 pkgver=2011.03 -pkgrel=13 +pkgrel=14 pkgdesc="U-Boot for ODROID-C1" arch=('armv7h') url="https://github.com/hardkernel/u-boot" @@ -13,21 +13,48 @@ license=('GPL') install=$pkgname.install makedepends=('git' 'bc') backup=('boot/boot.ini') -_commit=c878e20536aa4924aca6b29e641cf5b9864a9f38 +_commit=86125f8efd6b3a3fc0839a03e1c0e9507999449d source=("https://github.com/hardkernel/u-boot/archive/${_commit}.tar.gz" 'boot.ini' '0001-remove-cross-compiling.patch' - '0002-sd_fusing-tweaks.patch') -md5sums=('1e90cad486793d08f57502d311d0f9a6' - '40091a757b21e80cbc7b87157cd5597b' - 'fb9e00cfdc765b60c61b42060bde6fc2' - 'beeec86a4903a3ce6d1e7956ad9250c4') + '0002-sd_fusing-tweaks.patch' + '0003-compiler_gcc-do-not-redefine-__gnu_attributes.patch' + '0004-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch' + '0005-compiler_gcc-prevent-redefining-attributes.patch' + '0006-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch' + '0007-ARM-asm-io.h-use-static-inline.patch' + '0008-arm-board-use-__weak.patch' + '0009-add-vframe_provider_s-definition.patch' + '0010-common-main.c-make-show_boot_progress-__weak.patch' + '0011-wait_ms-fix.patch') +md5sums=('7f964216ab4577e4272e4d3dff2529d2' + '6ed787aa2102054cc3264ca02157a1f7' + '73747be79c5bb654ee58c6f380c57d8a' + '7601eb51e42e57b53b9d09dad2091f69' + '14fae8682ce2a257453f7c6ef4af6db3' + 'e17606271ce9cc51f5043b53b54a1132' + 'e6e7ba4c25daf9d6a2c4752861cd38db' + '80a2585e733fa0ae83facaa0b26c3cd5' + 'f110315cde83e591fda57967ecc7c6d5' + '420ae0ecf8772c3af3f06ef311f5ad20' + '2ee3e8fb68a8c7c3b5ac5ba687e4ed41' + '42319d0ca8043cdfae865e069ebcfd0d' + 'c2ac220ab5c0d7c1bce12e677b40c096') prepare() { cd u-boot-${_commit} git apply ../0001-remove-cross-compiling.patch git apply ../0002-sd_fusing-tweaks.patch + git apply ../0003-compiler_gcc-do-not-redefine-__gnu_attributes.patch + git apply ../0004-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch + git apply ../0005-compiler_gcc-prevent-redefining-attributes.patch + git apply ../0006-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch + git apply ../0007-ARM-asm-io.h-use-static-inline.patch + git apply ../0008-arm-board-use-__weak.patch + git apply ../0009-add-vframe_provider_s-definition.patch + git apply ../0010-common-main.c-make-show_boot_progress-__weak.patch + git apply ../0011-wait_ms-fix.patch } build() { diff --git a/alarm/uboot-odroid-c1/boot.ini b/alarm/uboot-odroid-c1/boot.ini index c98dd1231..72b387965 100644 --- a/alarm/uboot-odroid-c1/boot.ini +++ b/alarm/uboot-odroid-c1/boot.ini @@ -4,35 +4,40 @@ ODROIDC-UBOOT-CONFIG # Uncomment only a single Line! The line with setenv written. # At least one mode must be selected. -# setenv m "vga" # 640x480 -# setenv m "480p" # 720x480 -# setenv m "576p" # 720x576 -# setenv m "800x480p60hz" # 800x480 -# setenv m "800x600p60hz" # 800x600 -# setenv m "1024x600p60hz" # 1024x600 -# setenv m "1024x768p60hz" # 1024x768 -# setenv m "1360x768p60hz" # 1360x768 -# setenv m "1440x900p60hz" # 1440x900 -# setenv m "1600x900p60hz" # 1600x900 -# setenv m "1680x1050p60hz" # 1680x1050 -# setenv m "720p" # 720p 1280x720 -# setenv m "800p" # 1280x800 -# setenv m "sxga" # 1280x1024 -# setenv m "1080i50hz" # 1080I@50Hz -# setenv m "1080p24hz" # 1080P@24Hz -# setenv m "1080p50hz" # 1080P@50Hz -setenv m "1080p" # 1080P@60Hz -# setenv m "1920x1200" # 1920x1200 +# setenv m "vga" # 640x480 +# setenv m "480p" # 720x480 +# setenv m "576p" # 720x576 +# setenv m "800x480p60hz" # 800x480 +# setenv m "800x600p60hz" # 800x600 +# setenv m "1024x600p60hz" # 1024x600 +# setenv m "1024x768p60hz" # 1024x768 +# setenv m "1360x768p60hz" # 1360x768 +# setenv m "1440x900p60hz" # 1440x900 +# setenv m "1600x900p60hz" # 1600x900 +# setenv m "1680x1050p60hz" # 1680x1050 +# setenv m "720p" # 720p 1280x720 +# setenv m "800p" # 1280x800 +# setenv m "sxga" # 1280x1024 +# setenv m "1080i50hz" # 1080I@50Hz +# setenv m "1080p24hz" # 1080P@24Hz +# setenv m "1080p50hz" # 1080P@50Hz +setenv m "1080p" # 1080P@60Hz +# setenv m "1920x1200" # 1920x1200 # HDMI DVI Mode Configuration setenv vout_mode "hdmi" # setenv vout_mode "dvi" +# setenv vout_mode "vga" # HDMI BPP Mode setenv m_bpp "32" # setenv m_bpp "24" # setenv m_bpp "16" +# Monitor output +# Controls if HDMI PHY should output anything to the monitor +setenv monitor_onoff "false" # true or false + # HDMI Hotplug Force (HPD) # 1 = Enables HOTPlug Detection # 0 = Disables HOTPlug Detection and force the connected status @@ -43,11 +48,17 @@ setenv hpd "0" # 0 = Disables HDMI CEC setenv cec "0" +# PCM5102 I2S Audio DAC +# PCM5102 is an I2S Audio Dac Addon board for ODROID-C1+ +# Uncomment the line below to __ENABLE__ support for this Addon board. +# setenv enabledac "enabledac" + # UHS Card Configuration # Uncomment the line below to __DISABLE__ UHS-1 MicroSD support # This might break boot for some brand models of cards. setenv disableuhs "disableuhs" + # Disable VPU (Video decoding engine, Saves RAM!!!) # 0 = disabled # 1 = enabled @@ -58,10 +69,20 @@ setenv vpu "1" # 1 = enabled setenv hdmioutput "1" +# CPU Max Frequency +# Possible Values: 96 192 312 408 504 600 720 816 +# 1008 1200 1320 1488 1536 1632 1728 and 1824 +setenv max_freq "1536" +# setenv max_freq "1632" +# setenv max_freq "1728" +# setenv max_freq "1824" + +########################################### + if test "${hpd}" = "0"; then setenv hdmi_hpd "disablehpd=true"; fi if test "${cec}" = "1"; then setenv hdmi_cec "hdmitx=cecf"; fi -setenv bootargs "console=ttyS0,115200n8 console=tty0 root=/dev/mmcblk0p1 rootwait rw no_console_suspend vdaccfg=0xa000 logo=osd1,loaded,0x7900000,720p,full dmfc=3 cvbsmode=576cvbs hdmimode=${m} m_bpp=${m_bpp} vout=${vout_mode} ${disableuhs} ${hdmi_hpd} ${hdmi_cec}" +setenv bootargs "console=tty0 console=ttyS0,115200n8 root=/dev/mmcblk0p1 rootwait rw no_console_suspend vdaccfg=0xa000 logo=osd1,loaded,0x7900000,720p,full dmfc=3 cvbsmode=576cvbs hdmimode=${m} m_bpp=${m_bpp} vout=${vout_mode} ${disableuhs} ${hdmi_hpd} ${hdmi_cec} ${enabledac} monitor_onoff=${monitor_onoff} max_freq=${max_freq}" ext4load mmc 0:1 0x21000000 /boot/uImage ext4load mmc 0:1 0x21800000 /boot/dtbs/meson8b_odroidc.dtb fdt addr 21800000