From 1241960d4ab5f04fd38e98f677d0d7f5a051dd78 Mon Sep 17 00:00:00 2001 From: Titus von Boxberg Date: Tue, 18 Jul 2017 07:34:20 +0200 Subject: [PATCH] STM32F7: Switch from CCM to DTCM --- arch/arm/src/stm32f7/stm32_ccm.h | 149 ----------------------------- arch/arm/src/stm32f7/stm32_dma2d.c | 25 ++--- 2 files changed, 8 insertions(+), 166 deletions(-) delete mode 100755 arch/arm/src/stm32f7/stm32_ccm.h diff --git a/arch/arm/src/stm32f7/stm32_ccm.h b/arch/arm/src/stm32f7/stm32_ccm.h deleted file mode 100755 index 28c14bb57b..0000000000 --- a/arch/arm/src/stm32f7/stm32_ccm.h +++ /dev/null @@ -1,149 +0,0 @@ -/**************************************************************************** - * arch/arm/src/stm32/stm32_ccm.h - * - * Copyright (C) 2013 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * Based on a prototype by Petteri Aimonen - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -#ifndef __ARCH_ARM_SRC_STM32F7_STM32_CCM_H -#define __ARCH_ARM_SRC_STM32F7_STM32_CCM_H - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include - -#include - -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ -/* Configuration ************************************************************/ -/* Assume that we can support the CCM heap */ - -#define HAVE_CCM_HEAP 1 - -/* Only the STM32 F2, F3, and F4 have CCM memory */ - -#if defined(CONFIG_STM32F7_STM32F30XX) -# define CCM_START 0x10000000 -# define CCM_END 0x10002000 -#elif defined(CONFIG_STM32F7_STM32F20XX) || defined(CONFIG_STM32F7_STM32F4XXX) || \ - defined(CONFIG_STM32F7_STM32F33XX) -# define CCM_START 0x10000000 -# define CCM_END 0x10010000 -#else -# undef HAVE_CCM_HEAP -#endif - -/* In order to use the CCM heap, it had to have been excluded from the main - * heap. - */ - -#ifndef CONFIG_STM32F7_CCMEXCLUDE -# undef HAVE_CCM_HEAP -#endif - -/* Can we support the CCM heap? */ - -#ifdef HAVE_CCM_HEAP - -/* ccm_initialize must be called early in initialization in order to - * initialize the CCM heap. - */ - -#define ccm_initialize() \ - mm_initialize(&g_ccm_heap, (FAR void *)CCM_START, CCM_END-CCM_START) - -/* The ccm_addregion interface could be used if, for example, you want to - * add some other memory region to the CCM heap. I don't really know why - * you might want to do that, but the functionality is essentially free. - */ - -#define ccm_addregion(b,s) mm_addregion(&g_ccm_heap, b, s); - -/* Then, once g_ccm_heap has been setup by ccm_initialize(), these memory - * allocators can be used just like the standard memory allocators. - */ - -#define ccm_malloc(s) mm_malloc(&g_ccm_heap, s) -#define ccm_zalloc(s) mm_zalloc(&g_ccm_heap, s) -#define ccm_calloc(n,s) mm_calloc(&g_ccm_heap, n,s) -#define ccm_free(p) mm_free(&g_ccm_heap, p) -#define ccm_realloc(p,s) mm_realloc(&g_ccm_heap, p, s) -#define ccm_memalign(a,s) mm_memalign(&g_ccm_heap, a, s) - -/**************************************************************************** - * Public Types - ****************************************************************************/ - -#ifndef __ASSEMBLY__ - -/**************************************************************************** - * Public Data - ****************************************************************************/ - -#ifdef __cplusplus -#define EXTERN extern "C" -extern "C" -{ -#else -#define EXTERN extern -#endif - -EXTERN struct mm_heap_s g_ccm_heap; - -/**************************************************************************** - * Public Function Prototypes - ****************************************************************************/ - -#undef EXTERN -#ifdef __cplusplus -} -#endif - -/**************************************************************************** - * Name: ccm_procfs_register - * - * Description: - * Register the CCM procfs file system entry - * - ****************************************************************************/ - -#ifdef CONFIG_STM32F7_CCM_PROCFS -int ccm_procfs_register(void); -#endif - -#endif /* __ASSEMBLY__ */ -#endif /* HAVE_CCM_HEAP */ -#endif /* __ARCH_ARM_SRC_STM32F7_STM32_CCM_H */ diff --git a/arch/arm/src/stm32f7/stm32_dma2d.c b/arch/arm/src/stm32f7/stm32_dma2d.c index cdd632e3c3..912ff2a5ff 100644 --- a/arch/arm/src/stm32f7/stm32_dma2d.c +++ b/arch/arm/src/stm32f7/stm32_dma2d.c @@ -58,10 +58,9 @@ #include "up_arch.h" #include "up_internal.h" -// #include "stm32.h" #include "chip/stm32_ltdc.h" #include "chip/stm32_dma2d.h" -#include "chip/stm32_ccm.h" +#include "chip/stm32_dtcm.h" #include "stm32_dma2d.h" #include "stm32_ltdc.h" #include "stm32_gpio.h" @@ -155,12 +154,6 @@ # endif #endif -/* check ccm heap allocation */ - -#if !defined(CONFIG_STM32F7_CCMEXCLUDE) && !defined(CONFIG_ARCH_CHIP_STM32F7) -# error "Enable CONFIG_STM32F7_CCMEXCLUDE from the heap allocation" -#endif - /**************************************************************************** * Private Types ****************************************************************************/ @@ -809,10 +802,10 @@ static FAR struct stm32_dma2d_s * stm32_dma2d_lalloc(void) { FAR struct stm32_dma2d_s *layer; -#ifdef HAVE_CCM_HEAP - /* First try to allocate from the ccm heap */ +#ifdef HAVE_DTCM_HEAP + /* First try to allocate from the dtcm heap */ - layer = ccm_malloc(sizeof(struct stm32_dma2d_s)); + layer = dtcm_malloc(sizeof(struct stm32_dma2d_s)); if (!layer) { @@ -842,10 +835,10 @@ static void stm32_dma2d_lfree(FAR struct stm32_dma2d_s *layer) { if (layer) { -#ifdef HAVE_CCM_HEAP - if (((uint32_t)layer & 0xf0000000) == 0x10000000) +#ifdef HAVE_DTCM_HEAP + if ( (void*)(DTCM_START) <= layer && layer <= (void*)(DTCM_END) ) { - ccm_free(layer); + dtcm_free(layer); } else { @@ -2034,11 +2027,9 @@ FAR struct dma2d_layer_s *up_dma2dcreatelayer(fb_coord_t width, /* Allocate 32-bit aligned memory for the layer buffer. As reported in * mm_memalign 8-byte alignment is guaranteed by normal malloc calls. * We have also ensure memory is allocated from the SRAM1/2/3 block. - * The CCM block is only accessible through the D-BUS but not by - * the AHB-BUS. Ensure that CONFIG_STM32F7_CCMEXCLUDE is set! */ - fbmem = kmm_zalloc(fblen); + fbmem = kmm_zalloc(fblen); /* STM32F7: Should use DTCM ? */ if (fbmem) {