diff options
author | Tom Rini <trini@konsulko.com> | 2017-03-18 09:01:44 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-03-18 20:28:01 -0400 |
commit | 3a649407a49b041ceb826d55b5919dc8297f8965 (patch) | |
tree | 7ebd285b96a3f3299c31052d423b1b688acd697f /arch | |
parent | ae9b57b50b2dfad6fefb37af95991362f79abcd3 (diff) | |
download | u-boot-3a649407a49b041ceb826d55b5919dc8297f8965.tar.gz |
arm: Migrate SYS_THUMB_BUILD to Kconfig, introduce SPL_SYS_THUMB_BUILD
Today, we have cases where we wish to build all of U-Boot in Thumb2 mode for
various reasons. We also have cases where we only build SPL in Thumb2 mode due
to size constraints and wish to build the rest of the system in ARM mode. So
in this migration we introduce a new symbol as well, SPL_SYS_THUMB_BUILD to
control if we build everything or just SPL (or in theory, just U-Boot) in
Thumb2 mode.
Signed-off-by: Tom Rini <trini@konsulko.com>
Acked-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/Kconfig | 31 | ||||
-rw-r--r-- | arch/arm/config.mk | 8 | ||||
-rw-r--r-- | arch/arm/cpu/arm920t/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/cpu/arm926ejs/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/cpu/arm926ejs/cache.c | 2 | ||||
-rw-r--r-- | arch/arm/cpu/armv7/cache_v7_asm.S | 2 | ||||
-rw-r--r-- | arch/arm/cpu/pxa/cache.c | 2 | ||||
-rw-r--r-- | arch/arm/include/asm/assembler.h | 2 | ||||
-rw-r--r-- | arch/arm/include/asm/cache.h | 2 | ||||
-rw-r--r-- | arch/arm/include/asm/setjmp.h | 2 | ||||
-rw-r--r-- | arch/arm/lib/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/lib/cache.c | 2 | ||||
-rw-r--r-- | arch/arm/lib/crt0.S | 2 | ||||
-rw-r--r-- | arch/arm/lib/lib1funcs.S | 2 | ||||
-rw-r--r-- | arch/arm/lib/memcpy.S | 2 | ||||
-rw-r--r-- | arch/arm/lib/memset.S | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/arm926ejs/Makefile | 8 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/Makefile | 2 |
18 files changed, 57 insertions, 20 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 7c5012acdf..d6b0cea63f 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -181,6 +181,25 @@ config SEMIHOSTING the hosted environment to call out to the emulator to retrieve files from the host machine. +config SYS_THUMB_BUILD + bool "Build U-Boot using the Thumb instruction set" + depends on !ARM64 + help + Use this flag to build U-Boot using the Thumb instruction set for + ARM architectures. Thumb instruction set provides better code + density. For ARM architectures that support Thumb2 this flag will + result in Thumb2 code generated by GCC. + +config SPL_SYS_THUMB_BUILD + bool "Build SPL using the Thumb instruction set" + default y if SYS_THUMB_BUILD + depends on !ARM64 + help + Use this flag to build SPL using the Thumb instruction set for + ARM architectures. Thumb instruction set provides better code + density. For ARM architectures that support Thumb2 this flag will + result in Thumb2 code generated by GCC. + config SYS_L2CACHE_OFF bool "L2cache off" help @@ -571,6 +590,7 @@ config ARCH_KEYSTONE bool "TI Keystone" select CPU_V7 select SUPPORT_SPL + select SYS_THUMB_BUILD select CMD_POWEROFF config ARCH_MESON @@ -595,6 +615,7 @@ config ARCH_MX6 select SYS_FSL_HAS_SEC if SECURE_BOOT select SYS_FSL_SEC_COMPAT_4 select SYS_FSL_SEC_LE + select SYS_THUMB_BUILD if SPL config ARCH_MX5 bool "Freescale MX5" @@ -654,6 +675,7 @@ config OMAP34XX imply SPL_NAND_SUPPORT imply SPL_POWER_SUPPORT imply SPL_SERIAL_SUPPORT + imply SYS_THUMB_BUILD config OMAP44XX bool "OMAP44XX SoC" @@ -671,11 +693,13 @@ config OMAP44XX imply SPL_NAND_SUPPORT imply SPL_POWER_SUPPORT imply SPL_SERIAL_SUPPORT + imply SYS_THUMB_BUILD config OMAP54XX bool "OMAP54XX SoC" select ARCH_OMAP2 select ARM_ERRATA_798870 + select SYS_THUMB_BUILD imply SPL_DISPLAY_PRINT imply SPL_ENV_SUPPORT imply SPL_EXT_SUPPORT @@ -693,6 +717,7 @@ config OMAP54XX config AM43XX bool "AM43XX SoC" select ARCH_OMAP2 + imply SYS_THUMB_BUILD help Support for AM43xx SOC from Texas Instruments. The AM43xx high performance SOC features a Cortex-A9 @@ -703,6 +728,7 @@ config AM43XX config AM33XX bool "AM33XX SoC" select ARCH_OMAP2 + imply SYS_THUMB_BUILD help Support for AM335x SOC from Texas Instruments. The AM335x high performance SOC features a Cortex-A8 @@ -715,6 +741,7 @@ config ARCH_RMOBILE select DM select DM_SERIAL select BOARD_EARLY_INIT_F + imply SYS_THUMB_BUILD config TARGET_S32V234EVB bool "Support s32v234evb" @@ -744,6 +771,7 @@ config ARCH_SOCFPGA select ARCH_EARLY_INIT_R select ARCH_MISC_INIT select SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION + select SYS_THUMB_BUILD config TARGET_CM_T43 bool "Support cm_t43" @@ -766,6 +794,7 @@ config ARCH_SUNXI select SPL_STACK_R if SUPPORT_SPL select SPL_SYS_MALLOC_SIMPLE if SUPPORT_SPL select SYS_NS16550 + select SPL_SYS_THUMB_BUILD if !ARM64 select USB if DISTRO_DEFAULTS select USB_STORAGE if DISTRO_DEFAULTS select USB_KEYBOARD if DISTRO_DEFAULTS @@ -1095,6 +1124,7 @@ config STM32 select CPU_V7M select DM select DM_SERIAL + select SYS_THUMB_BUILD config ARCH_STI bool "Support STMicrolectronics SoCs" @@ -1114,6 +1144,7 @@ config ARCH_ROCKCHIP select DM select SPL_DM if SPL select SYS_MALLOC_F + select SYS_THUMB_BUILD if !ARM64 select SPL_SYS_MALLOC_SIMPLE if SPL select DM_GPIO select DM_I2C diff --git a/arch/arm/config.mk b/arch/arm/config.mk index 3a81f131e2..08d7d1bc69 100644 --- a/arch/arm/config.mk +++ b/arch/arm/config.mk @@ -31,7 +31,7 @@ PLATFORM_RELFLAGS += $(LLVM_RELFLAGS) PLATFORM_CPPFLAGS += -D__ARM__ # Choose between ARM/Thumb instruction sets -ifeq ($(CONFIG_SYS_THUMB_BUILD),y) +ifeq ($(CONFIG_$(SPL_)SYS_THUMB_BUILD),y) AFLAGS_IMPLICIT_IT := $(call as-option,-Wa$(comma)-mimplicit-it=always) PF_CPPFLAGS_ARM := $(AFLAGS_IMPLICIT_IT) \ $(call cc-option, -mthumb -mthumb-interwork,\ @@ -44,8 +44,7 @@ PF_CPPFLAGS_ARM := $(call cc-option,-marm,) \ endif # Only test once -ifneq ($(CONFIG_SPL_BUILD),y) -ifeq ($(CONFIG_SYS_THUMB_BUILD),y) +ifeq ($(CONFIG_$(SPL_)SYS_THUMB_BUILD),y) archprepare: checkthumb checkthumb: @@ -57,7 +56,6 @@ checkthumb: false; \ fi endif -endif # Try if EABI is supported, else fall back to old API, # i. e. for example: @@ -99,7 +97,7 @@ LDFLAGS_u-boot += -pie # # http://sourceware.org/bugzilla/show_bug.cgi?id=12532 # -ifeq ($(CONFIG_SYS_THUMB_BUILD),y) +ifeq ($(CONFIG_$(SPL_)SYS_THUMB_BUILD),y) ifeq ($(GAS_BUG_12532),) export GAS_BUG_12532:=$(shell if [ $(call binutils-version) -lt 0222 ] ; \ then echo y; else echo n; fi) diff --git a/arch/arm/cpu/arm920t/Makefile b/arch/arm/cpu/arm920t/Makefile index 1832b9d148..7aa432a6fc 100644 --- a/arch/arm/cpu/arm920t/Makefile +++ b/arch/arm/cpu/arm920t/Makefile @@ -16,6 +16,6 @@ obj-$(CONFIG_S3C24X0) += s3c24x0/ # some files can only build in ARM mode -ifdef CONFIG_SYS_THUMB_BUILD +ifdef CONFIG_$(SPL_)SYS_THUMB_BUILD CFLAGS_cpu.o := -marm endif diff --git a/arch/arm/cpu/arm926ejs/Makefile b/arch/arm/cpu/arm926ejs/Makefile index fe78922170..0f730117c0 100644 --- a/arch/arm/cpu/arm926ejs/Makefile +++ b/arch/arm/cpu/arm926ejs/Makefile @@ -23,7 +23,7 @@ obj-$(if $(filter spear,$(SOC)),y) += spear/ # some files can only build in ARM or THUMB2, not THUMB1 -ifdef CONFIG_SYS_THUMB_BUILD +ifdef CONFIG_$(SPL_)SYS_THUMB_BUILD ifndef CONFIG_HAS_THUMB2 CFLAGS_cpu.o := -marm diff --git a/arch/arm/cpu/arm926ejs/cache.c b/arch/arm/cpu/arm926ejs/cache.c index 02cb24c24f..d56e594af2 100644 --- a/arch/arm/cpu/arm926ejs/cache.c +++ b/arch/arm/cpu/arm926ejs/cache.c @@ -63,6 +63,6 @@ void flush_dcache_all(void) __weak void l2_cache_disable(void) {} -#if defined CONFIG_SYS_THUMB_BUILD +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) __weak void invalidate_l2_cache(void) {} #endif diff --git a/arch/arm/cpu/armv7/cache_v7_asm.S b/arch/arm/cpu/armv7/cache_v7_asm.S index a433628bf5..bd27ab219c 100644 --- a/arch/arm/cpu/armv7/cache_v7_asm.S +++ b/arch/arm/cpu/armv7/cache_v7_asm.S @@ -7,7 +7,7 @@ #include <linux/sizes.h> #include <asm/system.h> -#ifdef CONFIG_SYS_THUMB_BUILD +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) #define ARM(x...) #define THUMB(x...) x #else diff --git a/arch/arm/cpu/pxa/cache.c b/arch/arm/cpu/pxa/cache.c index d26354e1aa..30e1e34707 100644 --- a/arch/arm/cpu/pxa/cache.c +++ b/arch/arm/cpu/pxa/cache.c @@ -52,6 +52,6 @@ void flush_dcache_all(void) __weak void l2_cache_disable(void) {} -#if defined CONFIG_SYS_THUMB_BUILD +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) __weak void invalidate_l2_cache(void) {} #endif diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index d24be2d484..b146918586 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h @@ -77,7 +77,7 @@ * We disable it especially for Thumb builds since those instructions * are not made in a Thumb ready way... */ -#ifdef CONFIG_SYS_THUMB_BUILD +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) #define CALGN(code...) #else #define CALGN(code...) code diff --git a/arch/arm/include/asm/cache.h b/arch/arm/include/asm/cache.h index 5400cbe18f..fac65d8d7c 100644 --- a/arch/arm/include/asm/cache.h +++ b/arch/arm/include/asm/cache.h @@ -16,7 +16,7 @@ /* * Invalidate L2 Cache using co-proc instruction */ -#ifdef CONFIG_SYS_THUMB_BUILD +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) void invalidate_l2_cache(void); #else static inline void invalidate_l2_cache(void) diff --git a/arch/arm/include/asm/setjmp.h b/arch/arm/include/asm/setjmp.h index df9934b267..c3399a7e15 100644 --- a/arch/arm/include/asm/setjmp.h +++ b/arch/arm/include/asm/setjmp.h @@ -39,7 +39,7 @@ static inline int setjmp(jmp_buf jmp) "x30", "cc", "memory"); #else asm volatile( -#ifdef CONFIG_SYS_THUMB_BUILD +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) ".align 2\n" "adr r0, jmp_target\n" "add r0, r0, $1\n" diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile index 166fa9e3da..b95e10599b 100644 --- a/arch/arm/lib/Makefile +++ b/arch/arm/lib/Makefile @@ -71,7 +71,7 @@ asflags-y += -DCONFIG_ARM_ASM_UNIFIED # some files can only build in ARM or THUMB2, not THUMB1 -ifdef CONFIG_SYS_THUMB_BUILD +ifdef CONFIG_$(SPL_)SYS_THUMB_BUILD asflags-$(CONFIG_HAS_THUMB2) += -DCONFIG_THUMB2_KERNEL ifndef CONFIG_HAS_THUMB2 diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c index 4f72f8914c..7683386ad9 100644 --- a/arch/arm/lib/cache.c +++ b/arch/arm/lib/cache.c @@ -107,7 +107,7 @@ phys_addr_t noncached_alloc(size_t size, size_t align) } #endif /* CONFIG_SYS_NONCACHED_MEMORY */ -#if defined(CONFIG_SYS_THUMB_BUILD) +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) void invalidate_l2_cache(void) { unsigned int val = 0; diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S index 2c4867ab7f..fa81317717 100644 --- a/arch/arm/lib/crt0.S +++ b/arch/arm/lib/crt0.S @@ -156,7 +156,7 @@ clbss_l:cmp r0, r1 /* while not at end of BSS */ mov r0, r9 /* gd_t */ ldr r1, [r9, #GD_RELOCADDR] /* dest_addr */ /* call board_init_r */ -#if defined(CONFIG_SYS_THUMB_BUILD) +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) ldr lr, =board_init_r /* this is auto-relocated! */ bx lr #else diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S index 76968cee17..6e29cbf2ab 100644 --- a/arch/arm/lib/lib1funcs.S +++ b/arch/arm/lib/lib1funcs.S @@ -368,7 +368,7 @@ ENDPROC(Ldiv0) .popsection /* Thumb-1 specialities */ -#if defined(CONFIG_SYS_THUMB_BUILD) && !defined(CONFIG_HAS_THUMB2) +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) && !defined(CONFIG_HAS_THUMB2) .pushsection .text.__gnu_thumb1_case_sqi, "ax" ENTRY(__gnu_thumb1_case_sqi) push {r1} diff --git a/arch/arm/lib/memcpy.S b/arch/arm/lib/memcpy.S index 00602e9cf8..588b3f8971 100644 --- a/arch/arm/lib/memcpy.S +++ b/arch/arm/lib/memcpy.S @@ -56,7 +56,7 @@ /* Prototype: void *memcpy(void *dest, const void *src, size_t n); */ .syntax unified -#if defined(CONFIG_SYS_THUMB_BUILD) && !defined(MEMCPY_NO_THUMB_BUILD) +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) && !defined(MEMCPY_NO_THUMB_BUILD) .thumb .thumb_func #endif diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S index df053a31d5..cc4cc44cbb 100644 --- a/arch/arm/lib/memset.S +++ b/arch/arm/lib/memset.S @@ -16,7 +16,7 @@ .align 5 .syntax unified -#if defined(CONFIG_SYS_THUMB_BUILD) && !defined(MEMSET_NO_THUMB_BUILD) +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) && !defined(MEMSET_NO_THUMB_BUILD) .thumb .thumb_func #endif diff --git a/arch/arm/mach-at91/arm926ejs/Makefile b/arch/arm/mach-at91/arm926ejs/Makefile index d36e15a51c..624ccd7c2f 100644 --- a/arch/arm/mach-at91/arm926ejs/Makefile +++ b/arch/arm/mach-at91/arm926ejs/Makefile @@ -27,3 +27,11 @@ obj-y += timer.o ifndef CONFIG_SKIP_LOWLEVEL_INIT obj-y += lowlevel_init.o endif + +ifdef CONFIG_$(SPL_)SYS_THUMB_BUILD +ifndef CONFIG_HAS_THUMB2 + +CFLAGS_cache.o := -marm + +endif +endif diff --git a/arch/arm/mach-orion5x/Makefile b/arch/arm/mach-orion5x/Makefile index 33dcad40f2..5249aa8844 100644 --- a/arch/arm/mach-orion5x/Makefile +++ b/arch/arm/mach-orion5x/Makefile @@ -19,7 +19,7 @@ endif # some files can only build in ARM or THUMB2, not THUMB1 -ifdef CONFIG_SYS_THUMB_BUILD +ifdef CONFIG_$(SPL_)SYS_THUMB_BUILD ifndef CONFIG_HAS_THUMB2 CFLAGS_cpu.o := -marm |