This is an automated email from the ASF dual-hosted git repository.

ligd pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit de77967144b43d6946be6b60bbacc22b52327544
Author: zhangyuan29 <[email protected]>
AuthorDate: Fri Aug 16 16:40:08 2024 +0800

    addrenv: support addrenv when mpu is used
    
    Conditionally enable MMU-specific configuration
    checks (CONFIG_MM_PGALLOC, CONFIG_MM_PGSIZE,
    address base/size definitions) only when
    CONFIG_ARCH_USE_MMU is defined. This allows
    addrenv support in MPU-based systems that
    don't use MMU paging.
    
    Signed-off-by: zhangyuan29 <[email protected]>
---
 include/nuttx/addrenv.h | 236 ++++++++++++++++++++++++------------------------
 1 file changed, 120 insertions(+), 116 deletions(-)

diff --git a/include/nuttx/addrenv.h b/include/nuttx/addrenv.h
index cfb4e93e834..8e253c88eee 100644
--- a/include/nuttx/addrenv.h
+++ b/include/nuttx/addrenv.h
@@ -55,51 +55,52 @@
 
 /* Pre-requisites */
 
-#ifndef CONFIG_MM_PGALLOC
-#  error CONFIG_MM_PGALLOC not defined
-#endif
+#ifdef CONFIG_ARCH_USE_MMU
+#  ifndef CONFIG_MM_PGALLOC
+#    error CONFIG_MM_PGALLOC not defined
+#  endif
 
-#ifndef CONFIG_MM_PGSIZE
-#  error CONFIG_MM_PGSIZE not defined
-#endif
+#  ifndef CONFIG_MM_PGSIZE
+#    error CONFIG_MM_PGSIZE not defined
+#  endif
 
 /* .text region */
 
-#ifndef CONFIG_ARCH_TEXT_VBASE
-#  error CONFIG_ARCH_TEXT_VBASE not defined
-#  define CONFIG_ARCH_TEXT_VBASE 0
-#endif
+#  ifndef CONFIG_ARCH_TEXT_VBASE
+#    error CONFIG_ARCH_TEXT_VBASE not defined
+#    define CONFIG_ARCH_TEXT_VBASE 0
+#  endif
 
-#if (CONFIG_ARCH_TEXT_VBASE & CONFIG_MM_MASK) != 0
-#  error CONFIG_ARCH_TEXT_VBASE not aligned to page boundary
-#endif
+#  if (CONFIG_ARCH_TEXT_VBASE & CONFIG_MM_MASK) != 0
+#    error CONFIG_ARCH_TEXT_VBASE not aligned to page boundary
+#  endif
 
-#ifndef CONFIG_ARCH_TEXT_NPAGES
-#  warning CONFIG_ARCH_TEXT_NPAGES not defined
-#  define CONFIG_ARCH_TEXT_NPAGES 1
-#endif
+#  ifndef CONFIG_ARCH_TEXT_NPAGES
+#    warning CONFIG_ARCH_TEXT_NPAGES not defined
+#    define CONFIG_ARCH_TEXT_NPAGES 1
+#  endif
 
-#define ARCH_TEXT_SIZE  (CONFIG_ARCH_TEXT_NPAGES * CONFIG_MM_PGSIZE)
-#define ARCH_TEXT_VEND  (CONFIG_ARCH_TEXT_VBASE + ARCH_TEXT_SIZE)
+#  define ARCH_TEXT_SIZE  (CONFIG_ARCH_TEXT_NPAGES * CONFIG_MM_PGSIZE)
+#  define ARCH_TEXT_VEND  (CONFIG_ARCH_TEXT_VBASE + ARCH_TEXT_SIZE)
 
 /* .bss/.data region */
 
-#ifndef CONFIG_ARCH_DATA_VBASE
-#  error CONFIG_ARCH_DATA_VBASE not defined
-#  define CONFIG_ARCH_DATA_VBASE ARCH_TEXT_VEND
-#endif
+#  ifndef CONFIG_ARCH_DATA_VBASE
+#    error CONFIG_ARCH_DATA_VBASE not defined
+#    define CONFIG_ARCH_DATA_VBASE ARCH_TEXT_VEND
+#  endif
 
-#if (CONFIG_ARCH_DATA_VBASE & CONFIG_MM_MASK) != 0
-#  error CONFIG_ARCH_DATA_VBASE not aligned to page boundary
-#endif
+#  if (CONFIG_ARCH_DATA_VBASE & CONFIG_MM_MASK) != 0
+#    error CONFIG_ARCH_DATA_VBASE not aligned to page boundary
+#  endif
 
-#ifndef CONFIG_ARCH_DATA_NPAGES
-#  warning CONFIG_ARCH_DATA_NPAGES not defined
-#  define CONFIG_ARCH_DATA_NPAGES 1
-#endif
+#  ifndef CONFIG_ARCH_DATA_NPAGES
+#    warning CONFIG_ARCH_DATA_NPAGES not defined
+#    define CONFIG_ARCH_DATA_NPAGES 1
+#  endif
 
-#define ARCH_DATA_SIZE  (CONFIG_ARCH_DATA_NPAGES * CONFIG_MM_PGSIZE)
-#define ARCH_DATA_VEND  (CONFIG_ARCH_DATA_VBASE + ARCH_DATA_SIZE)
+#  define ARCH_DATA_SIZE  (CONFIG_ARCH_DATA_NPAGES * CONFIG_MM_PGSIZE)
+#  define ARCH_DATA_VEND  (CONFIG_ARCH_DATA_VBASE + ARCH_DATA_SIZE)
 
 /* Reserved .bss/.data region.  In the kernel build (CONFIG_BUILD_KERNEL),
  * the region at the beginning of the .bss/.data region is reserved for use
@@ -123,130 +124,133 @@
 
 /* Heap region */
 
-#ifndef CONFIG_ARCH_HEAP_VBASE
-#  error CONFIG_ARCH_HEAP_VBASE not defined
-#  define CONFIG_ARCH_HEAP_VBASE ARCH_DATA_VEND
-#endif
+#  ifndef CONFIG_ARCH_HEAP_VBASE
+#    error CONFIG_ARCH_HEAP_VBASE not defined
+#    define CONFIG_ARCH_HEAP_VBASE ARCH_DATA_VEND
+#  endif
 
-#if (CONFIG_ARCH_HEAP_VBASE & CONFIG_MM_MASK) != 0
-#  error CONFIG_ARCH_HEAP_VBASE not aligned to page boundary
-#endif
+#  if (CONFIG_ARCH_HEAP_VBASE & CONFIG_MM_MASK) != 0
+#    error CONFIG_ARCH_HEAP_VBASE not aligned to page boundary
+#  endif
 
-#ifndef CONFIG_ARCH_HEAP_NPAGES
-#  warning CONFIG_ARCH_HEAP_NPAGES not defined
-#  define CONFIG_ARCH_HEAP_NPAGES 1
-#endif
+#  ifndef CONFIG_ARCH_HEAP_NPAGES
+#    warning CONFIG_ARCH_HEAP_NPAGES not defined
+#    define CONFIG_ARCH_HEAP_NPAGES 1
+#  endif
 
-#define ARCH_HEAP_SIZE  (CONFIG_ARCH_HEAP_NPAGES * CONFIG_MM_PGSIZE)
-#define ARCH_HEAP_VEND  (CONFIG_ARCH_HEAP_VBASE + ARCH_HEAP_SIZE)
+#  define ARCH_HEAP_SIZE  (CONFIG_ARCH_HEAP_NPAGES * CONFIG_MM_PGSIZE)
+#  define ARCH_HEAP_VEND  (CONFIG_ARCH_HEAP_VBASE + ARCH_HEAP_SIZE)
 
-#ifdef CONFIG_ARCH_STACK_DYNAMIC
+#  ifdef CONFIG_ARCH_STACK_DYNAMIC
   /* User stack region */
 
-#  ifndef CONFIG_ARCH_STACK_VBASE
-#    error CONFIG_ARCH_STACK_VBASE not defined
-#    define CONFIG_ARCH_STACK_VBASE ARCH_HEAP_VEND
-#  endif
+#    ifndef CONFIG_ARCH_STACK_VBASE
+#      error CONFIG_ARCH_STACK_VBASE not defined
+#      define CONFIG_ARCH_STACK_VBASE ARCH_HEAP_VEND
+#    endif
 
-#  if (CONFIG_ARCH_STACK_VBASE & CONFIG_MM_MASK) != 0
-#    error CONFIG_ARCH_STACK_VBASE not aligned to page boundary
-#  endif
+#    if (CONFIG_ARCH_STACK_VBASE & CONFIG_MM_MASK) != 0
+#      error CONFIG_ARCH_STACK_VBASE not aligned to page boundary
+#    endif
 
-#  ifndef CONFIG_ARCH_STACK_NPAGES
-#    warning CONFIG_ARCH_STACK_NPAGES not defined
-#    define CONFIG_ARCH_STACK_NPAGES 1
-#  endif
+#    ifndef CONFIG_ARCH_STACK_NPAGES
+#      warning CONFIG_ARCH_STACK_NPAGES not defined
+#      define CONFIG_ARCH_STACK_NPAGES 1
+#    endif
 
-#  define ARCH_STACK_SIZE (CONFIG_ARCH_STACK_NPAGES * CONFIG_MM_PGSIZE)
-#  define ARCH_STACK_VEND (CONFIG_ARCH_STACK_VBASE + ARCH_STACK_SIZE)
+#    define ARCH_STACK_SIZE (CONFIG_ARCH_STACK_NPAGES * CONFIG_MM_PGSIZE)
+#    define ARCH_STACK_VEND (CONFIG_ARCH_STACK_VBASE + ARCH_STACK_SIZE)
 
-#ifdef CONFIG_ARCH_KERNEL_STACK
+#  ifdef CONFIG_ARCH_KERNEL_STACK
 /* Kernel stack */
 
-#  ifndef CONFIG_ARCH_KERNEL_STACKSIZE
-#    define CONFIG_ARCH_KERNEL_STACKSIZE 1568
+#    ifndef CONFIG_ARCH_KERNEL_STACKSIZE
+#      define CONFIG_ARCH_KERNEL_STACKSIZE 1568
+#    endif
 #  endif
-#endif
 
   /* A single page scratch region used for temporary mappings */
 
-#  define __ARCH_SHM_VBASE ARCH_STACK_VEND
-#else
+#    define __ARCH_SHM_VBASE ARCH_STACK_VEND
+#  else
   /* A single page scratch region used for temporary mappings */
 
-#  define __ARCH_SHM_VBASE ARCH_HEAP_VEND
-#endif
+#    define __ARCH_SHM_VBASE ARCH_HEAP_VEND
+#  endif
 
 /* Shared memory regions */
 
-#ifdef CONFIG_ARCH_VMA_MAPPING
-#  ifndef CONFIG_ARCH_SHM_VBASE
-#    error CONFIG_ARCH_SHM_VBASE not defined
-#    define CONFIG_ARCH_SHM_VBASE __ARCH_SHM_VBASE
-#  endif
+#  ifdef CONFIG_ARCH_VMA_MAPPING
+#    ifndef CONFIG_ARCH_SHM_VBASE
+#      error CONFIG_ARCH_SHM_VBASE not defined
+#      define CONFIG_ARCH_SHM_VBASE __ARCH_SHM_VBASE
+#    endif
 
-#  if (CONFIG_ARCH_SHM_VBASE & CONFIG_MM_MASK) != 0
-#    error CONFIG_ARCH_SHM_VBASE not aligned to page boundary
-#  endif
+#    if (CONFIG_ARCH_SHM_VBASE & CONFIG_MM_MASK) != 0
+#      error CONFIG_ARCH_SHM_VBASE not aligned to page boundary
+#    endif
 
-#  ifndef CONFIG_ARCH_SHM_MAXREGIONS
-#    warning CONFIG_ARCH_SHM_MAXREGIONS not defined
-#    define CONFIG_ARCH_SHM_MAXREGIONS 1
-#  endif
+#    ifndef CONFIG_ARCH_SHM_MAXREGIONS
+#      warning CONFIG_ARCH_SHM_MAXREGIONS not defined
+#      define CONFIG_ARCH_SHM_MAXREGIONS 1
+#    endif
 
-#  ifndef CONFIG_ARCH_SHM_NPAGES
-#    warning CONFIG_ARCH_SHM_NPAGES not defined
-#    define CONFIG_ARCH_SHM_NPAGES 1
-#  endif
+#    ifndef CONFIG_ARCH_SHM_NPAGES
+#      warning CONFIG_ARCH_SHM_NPAGES not defined
+#      define CONFIG_ARCH_SHM_NPAGES 1
+#    endif
 
-#  define ARCH_SHM_SIZE       (CONFIG_ARCH_SHM_NPAGES * CONFIG_MM_PGSIZE)
-#  define ARCH_SHM_VEND       (CONFIG_ARCH_SHM_VBASE + ARCH_SHM_SIZE - 1)
+#    define ARCH_SHM_SIZE       (CONFIG_ARCH_SHM_NPAGES * CONFIG_MM_PGSIZE)
+#    define ARCH_SHM_VEND       (CONFIG_ARCH_SHM_VBASE + ARCH_SHM_SIZE - 1)
 
-#  define ARCH_SCRATCH_VBASE   ARCH_SHM_VEND
-#else
-#  define ARCH_SCRATCH_VBASE   __ARCH_SHM_VBASE
-#endif
-
-#ifdef CONFIG_MM_KMAP
-#  ifndef CONFIG_ARCH_KMAP_VBASE
-#    error CONFIG_ARCH_KMAP_VBASE not defined
+#    define ARCH_SCRATCH_VBASE   ARCH_SHM_VEND
+#  else
+#    define ARCH_SCRATCH_VBASE   __ARCH_SHM_VBASE
 #  endif
 
-#  if (CONFIG_ARCH_KMAP_VBASE & CONFIG_MM_MASK) != 0
-#    error CONFIG_ARCH_KMAP_VBASE not aligned to page boundary
-#  endif
+#  ifdef CONFIG_MM_KMAP
+#    ifndef CONFIG_ARCH_KMAP_VBASE
+#      error CONFIG_ARCH_KMAP_VBASE not defined
+#    endif
 
-#  ifndef CONFIG_ARCH_KMAP_NPAGES
-#    error CONFIG_ARCH_KMAP_NPAGES not defined
-#  endif
+#    if (CONFIG_ARCH_KMAP_VBASE & CONFIG_MM_MASK) != 0
+#      error CONFIG_ARCH_KMAP_VBASE not aligned to page boundary
+#    endif
 
-#  define ARCH_KMAP_SIZE       (CONFIG_ARCH_KMAP_NPAGES * CONFIG_MM_PGSIZE)
-#  define ARCH_KMAP_VEND       (CONFIG_ARCH_KMAP_VBASE + ARCH_KMAP_SIZE - 1)
-#endif
+#    ifndef CONFIG_ARCH_KMAP_NPAGES
+#      error CONFIG_ARCH_KMAP_NPAGES not defined
+#    endif
+
+#    define ARCH_KMAP_SIZE       (CONFIG_ARCH_KMAP_NPAGES * CONFIG_MM_PGSIZE)
+#    define ARCH_KMAP_VEND       (CONFIG_ARCH_KMAP_VBASE + ARCH_KMAP_SIZE - 1)
+#  endif
 
 /* There is no need to use the scratch memory region if the page pool memory
  * is statically mapped.
  */
 
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
+#  ifdef CONFIG_ARCH_PGPOOL_MAPPING
 
-#  ifndef CONFIG_ARCH_PGPOOL_PBASE
-#    error CONFIG_ARCH_PGPOOL_PBASE not defined
-#  endif
+#    ifndef CONFIG_ARCH_PGPOOL_PBASE
+#      error CONFIG_ARCH_PGPOOL_PBASE not defined
+#    endif
 
-#  ifndef CONFIG_ARCH_PGPOOL_VBASE
-#    error CONFIG_ARCH_PGPOOL_VBASE not defined
-#  endif
+#    ifndef CONFIG_ARCH_PGPOOL_VBASE
+#      error CONFIG_ARCH_PGPOOL_VBASE not defined
+#    endif
 
-#  ifndef CONFIG_ARCH_PGPOOL_SIZE
-#    error CONFIG_ARCH_PGPOOL_SIZE not defined
-#  endif
+#    ifndef CONFIG_ARCH_PGPOOL_SIZE
+#      error CONFIG_ARCH_PGPOOL_SIZE not defined
+#    endif
 
-#  define CONFIG_ARCH_PGPOOL_PEND \
-     (CONFIG_ARCH_PGPOOL_PBASE + CONFIG_ARCH_PGPOOL_SIZE)
-#  define CONFIG_ARCH_PGPOOL_VEND \
-     (CONFIG_ARCH_PGPOOL_VBASE + CONFIG_ARCH_PGPOOL_SIZE)
+#    define CONFIG_ARCH_PGPOOL_PEND \
+       (CONFIG_ARCH_PGPOOL_PBASE + CONFIG_ARCH_PGPOOL_SIZE)
+#    define CONFIG_ARCH_PGPOOL_VEND \
+       (CONFIG_ARCH_PGPOOL_VBASE + CONFIG_ARCH_PGPOOL_SIZE)
 
+#  endif
+#else
+#  define ARCH_HEAP_SIZE CONFIG_ELF_STACKSIZE
 #endif
 
 #ifndef __ASSEMBLY__

Reply via email to