From 7d058c4a562635ab8ffa2d79d2795fe225912c38 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Thu, 19 Jan 2017 06:57:39 +0100 Subject: 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 --- package/afboot-stm32/Makefile | 9 +++++++-- package/afboot-stm32/patches/patch-Makefile | 6 +++--- target/arm/kernel/st-stm32f769 | 11 +++++++++++ target/arm/systems/st-stm32f769 | 14 ++++++++++++++ target/config/Config.in.cpu | 1 + target/config/Config.in.float | 12 ++++++++++-- target/config/Config.in.fpu | 3 ++- toolchain/uclibc-ng/Makefile | 12 ++++++++++++ 8 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 target/arm/kernel/st-stm32f769 create mode 100644 target/arm/systems/st-stm32f769 diff --git a/package/afboot-stm32/Makefile b/package/afboot-stm32/Makefile index 3cd774eb0..127b9c21a 100644 --- a/package/afboot-stm32/Makefile +++ b/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 diff --git a/package/afboot-stm32/patches/patch-Makefile b/package/afboot-stm32/patches/patch-Makefile index 98ea48693..4fbb034c6 100644 --- a/package/afboot-stm32/patches/patch-Makefile +++ b/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 diff --git a/target/arm/kernel/st-stm32f769 b/target/arm/kernel/st-stm32f769 new file mode 100644 index 000000000..c56087a1b --- /dev/null +++ b/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 diff --git a/target/arm/systems/st-stm32f769 b/target/arm/systems/st-stm32f769 new file mode 100644 index 000000000..2227e16db --- /dev/null +++ b/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 + diff --git a/target/config/Config.in.cpu b/target/config/Config.in.cpu index b270ebebc..7d24b3d79 100644 --- a/target/config/Config.in.cpu +++ b/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 diff --git a/target/config/Config.in.float b/target/config/Config.in.float index 693010633..8a17873c4 100644 --- a/target/config/Config.in.float +++ b/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 diff --git a/target/config/Config.in.fpu b/target/config/Config.in.fpu index 9b6c396f7..1ea04be3e 100644 --- a/target/config/Config.in.fpu +++ b/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 diff --git a/toolchain/uclibc-ng/Makefile b/toolchain/uclibc-ng/Makefile index f21e8802f..9c8f3c736 100644 --- a/toolchain/uclibc-ng/Makefile +++ b/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 -- cgit v1.2.3