[PATCH v2] Support DDRMC0 region 0 and 1

chrisj at rtems.org chrisj at rtems.org
Tue Jul 26 02:06:31 UTC 2022


Hi,

The Versal's DDRMC0 supports two separate regions. Region 0 is
from 0 up to 2G where the Versal's hard IP regions start. DDR
memory above the 2G mark is moved to region 1 and its base
address is in the A64 address space.

The patch will place all memory up to 2G in region 0 and if
more is present it is located in region 1. An MMU entry for the
region 1 memory is provided and the memory is added to the heap

V2:
- Resolve LPDDR address alias issue in the Versal NOC DDRMC 
  hardware configration. That was the crash I referred to in
  the v1 thread
- Tested building aarch64/xilinx_zynqmp_ilp32_zu3eg with 64bit
  unexpected sections ORIGIN
- Added BSP_FATAL_HEAP_EXTEND_ERROR error code
- Add a heap extend BSP assert if the extend fails
- Move SYSINIT to after the IDLE threads exist to provide the
  protected heap extend a context

Tested in a vck-190 using 8G of LPDDR with malloctest:

posix_memalign - alignment of 256 -- OK
posix_memalign - alignment of 512 -- OK           
posix_memalign - alignment of 1024 -- OK
posix_memalign - alignment of 2048 -- OK          
posix_memalign - alignment of 4096 -- OK
posix_memalign - alignment of 8192 -- OK          
posix_memalign - alignment of 16384 -- OK
posix_memalign - alignment of 32768 -- OK         
posix_memalign - alignment of 65536 -- OK
posix_memalign - alignment of 131072 -- OK        
posix_memalign - alignment of 262144 -- OK
posix_memalign - alignment of 524288 -- OK        
posix_memalign - alignment of 1048576 -- OK
posix_memalign - alignment of 2097152 -- OK       
posix_memalign - alignment of 4194304 -- OK
posix_memalign - alignment of 8388608 -- OK       
posix_memalign - alignment of 16777216 -- OK
posix_memalign - alignment of 33554432 -- OK      
posix_memalign - alignment of 67108864 -- OK
posix_memalign - alignment of 134217728 -- OK     
posix_memalign - alignment of 268435456 -- OK
posix_memalign - alignment of 536870912 -- OK     
posix_memalign - alignment of 1073741824 -- OK
posix_memalign - alignment of 2147483648 -- OK    
posix_memalign - alignment of 4294967296 -- OK
posix_memalign - alignment of 8589934592 -- OK    
posix_memalign - ran out of memory trying 8589934592

Note, 4G is the largest block available as the heap is
split into 2 pools.

Chris



More information about the devel mailing list