9.3. How To Take Care Of Remote Core Memory Map Updates

9.3.1. Introduction

The use of DDR memory for remote core firmware image needs to be accounted for on the A72 side running QNX. Whenever there are updates to the memory usage by the PSDK RTOS, we would need to take care of the below on the PSDK QNX side.

  • Make sure QNX Kernel is aware of the usage so that these regions of memory is reserved for remote core use only.

  • The QNX IPC resource manager used for communication between processors in a multi-processor environment need to be aware of the VRING memory to be used to communicate with the remote cores.

  • The Shared Memory Allocator resource manager (shmemallocator) make use of shared memory region that need to be in-sync with the remote core usage.

9.3.2. PSDK QNX memory map updates

9.3.2.1. Memory Carveout entry to QNX Startup

Memory sections with pre-defined physical addresses must be set aside in the QNX BSP IFS build file so that the memory is not given to other programs and can be used solely by the remote cores

Specify a section to be set aside by modifying the startup line to use the “-r” option. For example, to reserve 0x70000000 bytes, at physical address 0xA0000000, on J7 QNX BSP, the build file the arguments would be (highlighted below):

[+keeplinked] startup-j721e-evm -v -r0xA0000000,0x60000000,1 -r0x880000000,0x10000000,1

9.3.2.2. IPC VRING memory resource

The QNX IPC resource manager is used for communication between processors in a multi-processor environment. The QNX IPC resource manager needs to be aware of the VRING memory to be used by remote cores. This is specified by the VRING_BASE_ADDRESS define in the tiipc_mgr_private.h file of QNX IPC resource manager source code.

Note

See the file ${PSDK_QNX_PATH}/qnx/resmgr/ipc_qnx_rsmgr/resmgr/src/tiipc_mgr_private.h for VRING_BASE_ADDRESS address used.

9.3.2.3. Shared Memory resource

The Shared Memory Allocator resource manager (shmemallocator) make use of a shared memory region that need to be in-sync with the remote core usage. This is specified by the SH_MEM_BLOCK1_START & SH_MEM_BLOCK1_SIZE, define in the SharedMemoryAllocator.c file of Shared Memory Allocator resource manager source code.

Note

See the file ${PSDK_QNX_PATH}/qnx/sharedmemallocator/resmgr/SharedMemoryAllocator.c for SH_MEM_BLOCK1_START address used.