Browse Source

Add experimental support for STM32F769

Add single/double precision support for Cortex-M7.
Mostly from Alex, some minor cleanup and kernel
mini config from me.

Signed-off-by: Alex Brand <tecnologic86@gmail.com>
Waldemar Brodkorb 7 years ago
parent
commit
7d058c4a56

+ 7 - 2
package/afboot-stm32/Makefile

@@ -4,13 +4,13 @@
 include $(ADK_TOPDIR)/rules.mk
 
 PKG_NAME:=		afboot-stm32
-PKG_VERSION:=		f7f109f0c6f65534ae50f9243a7356c5002a9b87
+PKG_VERSION:=		8e9e03159ce47629d40dbed4c50c1879b69bb197
 PKG_RELEASE:=		1
 PKG_DESCR:=		bootloader for stm32 devices
 PKG_SECTION:=		base/boot
 PKG_SITES:=		https://github.com/mcoquelin-stm32/afboot-stm32.git
 
-PKG_SYSTEM_DEPENDS:=	st-stm32f429
+PKG_SYSTEM_DEPENDS:=	st-stm32f429 st-stm32f769
 
 include $(ADK_TOPDIR)/mk/package.mk
 
@@ -20,6 +20,11 @@ CONFIG_STYLE:=		manual
 INSTALL_STYLE:=		manual
 
 afboot-stm32-install:
+ifeq ($(ADK_TARGET_SYSTEM_ST_STM32F429),y)
 	$(CP) $(WRKBUILD)/stm32f429i-disco.bin $(FW_DIR)
+endif
+ifeq ($(ADK_TARGET_SYSTEM_ST_STM32F769),y)
+	$(CP) $(WRKBUILD)/stm32746g-eval.bin $(FW_DIR)
+endif
 
 include $(ADK_TOPDIR)/mk/pkg-bottom.mk

+ 3 - 3
package/afboot-stm32/patches/patch-Makefile

@@ -1,5 +1,5 @@
---- afboot-stm32-f7f109f0c6f65534ae50f9243a7356c5002a9b87.orig/Makefile	2016-04-24 20:35:00.000000000 +0200
-+++ afboot-stm32-f7f109f0c6f65534ae50f9243a7356c5002a9b87/Makefile	2016-04-24 20:36:36.000000000 +0200
+--- afboot-stm32-8e9e03159ce47629d40dbed4c50c1879b69bb197.orig/Makefile	2017-01-19 06:54:21.000000000 +0100
++++ afboot-stm32-8e9e03159ce47629d40dbed4c50c1879b69bb197/Makefile	2017-01-19 06:55:03.370200767 +0100
 @@ -1,14 +1,15 @@
  CROSS_COMPILE ?= arm-none-eabi-
  
@@ -17,7 +17,7 @@
  
 -CFLAGS := -mthumb -mcpu=cortex-m4
 +CFLAGS ?= 
-+CFLAGS += -mthumb -mcpu=cortex-m4
++CFLAGS += -mthumb
  CFLAGS += -ffunction-sections -fdata-sections
  CFLAGS += -Os -std=gnu99 -Wall
  LINKERFLAGS := -nostartfiles --gc-sections

+ 11 - 0
target/arm/kernel/st-stm32f769

@@ -0,0 +1,11 @@
+CONFIG_ARM_SINGLE_ARMV7M=y
+CONFIG_ARCH_STM32=y
+CONFIG_SET_MEM_PARAM=y
+CONFIG_DRAM_BASE=0x90000000
+CONFIG_FLASH_MEM_BASE=0x08000000
+CONFIG_FLASH_SIZE=0x00200000
+CONFIG_XIP_KERNEL=y
+CONFIG_XIP_PHYS_ADDR=0x08008000
+CONFIG_SERIAL_NONSTANDARD=y
+CONFIG_SERIAL_STM32=y
+CONFIG_SERIAL_STM32_CONSOLE=y

+ 14 - 0
target/arm/systems/st-stm32f769

@@ -0,0 +1,14 @@
+config ADK_TARGET_SYSTEM_ST_STM32F769
+	bool "STMicroelectronics STM32F769"
+	depends on ADK_EXPERIMENTAL
+	depends on ADK_TARGET_LITTLE_ENDIAN
+	select ADK_TARGET_CPU_ARM_CORTEX_M7
+	select ADK_TARGET_HARD_FLOAT_DP
+	select ADK_TARGET_ARCH_ARM_WITH_THUMB
+	select ADK_TARGET_WITH_SERIAL
+	select ADK_TARGET_UCLINUX
+	select ADK_TARGET_KERNEL_XIPIMAGE
+	select ADK_PACKAGE_AFBOOT_STM32
+	help
+	  STMicroelectronics STM32F769
+

+ 1 - 0
target/config/Config.in.cpu

@@ -1959,6 +1959,7 @@ config ADK_TARGET_CPU_TYPE
 	default "cortex_a17" if ADK_TARGET_CPU_ARM_CORTEX_A17
 	default "cortex_m3" if ADK_TARGET_CPU_ARM_CORTEX_M3
 	default "cortex_m4" if ADK_TARGET_CPU_ARM_CORTEX_M4
+	default "cortex_m7" if ADK_TARGET_CPU_ARM_CORTEX_M7
 	default "arm1176jzf_s" if ADK_TARGET_CPU_ARM_ARM1176JZF_S
 	default "arm926ej_s" if ADK_TARGET_CPU_ARM_ARM926EJ_S
 	default "mpcore" if ADK_TARGET_CPU_ARM_ARM11MPCORE

+ 10 - 2
target/config/Config.in.float

@@ -11,7 +11,15 @@ depends on ADK_TARGET_ARCH_ARM || \
 
 config ADK_TARGET_HARD_FLOAT
 	bool "hard-float"
-	depends on ADK_TARGET_CPU_WITH_FPU
+	depends on ADK_TARGET_CPU_WITH_FPU && !ADK_TARGET_CPU_WITH_FPU_FPV5
+
+config ADK_TARGET_HARD_FLOAT_SP
+	bool "hard-float-single-precision"
+	depends on ADK_TARGET_CPU_WITH_FPU && ADK_TARGET_CPU_WITH_FPU_FPV5
+
+config ADK_TARGET_HARD_FLOAT_DP
+	bool "hard-float-double-precision"
+	depends on ADK_TARGET_CPU_WITH_FPU && ADK_TARGET_CPU_WITH_FPU_FPV5
 
 config ADK_TARGET_SOFT_FLOAT
 	bool "soft-float"
@@ -26,6 +34,6 @@ config ADK_TARGET_FLOAT
 	string
 	depends on !ADK_TARGET_ARCH_M68K \
 		&& !ADK_TARGET_ARCH_NIOS2
-	default "hard" if ADK_TARGET_HARD_FLOAT
+	default "hard" if ADK_TARGET_HARD_FLOAT || ADK_TARGET_HARD_FLOAT_SP || ADK_TARGET_HARD_FLOAT_DP
 	default "soft" if ADK_TARGET_SOFT_FLOAT
 	default "softfp" if ADK_TARGET_SOFTFP_FLOAT

+ 2 - 1
target/config/Config.in.fpu

@@ -18,7 +18,8 @@ config ADK_TARGET_FPU
 	default "vfpv3-fp16" if ADK_TARGET_CPU_ARM_CORTEX_A9 && !ADK_TARGET_ARCH_ARM_WITH_NEON
 	default "vfpv4" if ADK_TARGET_CPU_ARM_CORTEX_A15 && !ADK_TARGET_ARCH_ARM_WITH_NEON
 	default "fpv4-sp-d16" if ADK_TARGET_CPU_ARM_CORTEX_M4
-	default "fpv5-sp-d16" if ADK_TARGET_CPU_ARM_CORTEX_M7
+	default "fpv5-sp-d16" if ADK_TARGET_CPU_ARM_CORTEX_M7 && ADK_TARGET_HARD_FLOAT_SP
+	default "fpv5-d16" if ADK_TARGET_CPU_ARM_CORTEX_M7 && ADK_TARGET_HARD_FLOAT_DP
 	default "neon-fp16" if ADK_TARGET_CPU_ARM_CORTEX_A5 && ADK_TARGET_ARCH_ARM_WITH_NEON
 	default "neon-vfpv4" if ADK_TARGET_CPU_ARM_CORTEX_A7 && ADK_TARGET_ARCH_ARM_WITH_NEON
 	default "neon" if ADK_TARGET_CPU_ARM_CORTEX_A8 && ADK_TARGET_ARCH_ARM_WITH_NEON

+ 12 - 0
toolchain/uclibc-ng/Makefile

@@ -18,9 +18,13 @@ TARGET_CFLAGS:=	$(filter-out -ffast-math,$(TARGET_CFLAGS))
 
 ifeq ($(ADK_BUILD_COMPILER_GCC),y)
 ifeq ($(ADK_TARGET_HARD_FLOAT),y)
+ifeq ($(ADK_TARGET_HARD_FLOAT_SP),y)
+ifeq ($(ADK_TARGET_HARD_FLOAT_DP),y)
 ifeq ($(ADK_TARGET_ARCH_ARM),y)
 TARGET_CFLAGS+=		-Wa,-mfloat-abi=hard
 endif
+endif
+endif
 ifeq ($(ADK_TARGET_ARCH_MIPS),y)
 TARGET_CFLAGS+=		-Wa,-mhard-float
 endif
@@ -63,6 +67,14 @@ ifeq ($(ADK_TARGET_HARD_FLOAT),y)
 	$(SED) 's/.*\(UCLIBC_HAS_FPU\).*/\1=y/' ${WRKBUILD}/.config
 	$(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/# \1 is not set/' ${WRKBUILD}/.config
 endif
+ifeq ($(ADK_TARGET_HARD_FLOAT_SP),y)
+	$(SED) 's/.*\(UCLIBC_HAS_FPU\).*/\1=y/' ${WRKBUILD}/.config
+	$(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/# \1 is not set/' ${WRKBUILD}/.config
+endif
+ifeq ($(ADK_TARGET_HARD_FLOAT_DP),y)
+	$(SED) 's/.*\(UCLIBC_HAS_FPU\).*/\1=y/' ${WRKBUILD}/.config
+	$(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/# \1 is not set/' ${WRKBUILD}/.config
+endif
 ifeq ($(ADK_TARGET_BINFMT_FDPIC),y)
 	$(SED) 's/.*\(UCLIBC_FORMAT_FDPIC_ELF\).*/\1=y/' ${WRKBUILD}/.config
 	$(SED) 's/.*\(UCLIBC_FORMAT_FLAT\).*/# \1 is not set/' ${WRKBUILD}/.config