Changing DSPLink POOL size
From Texas Instruments Embedded Processors Wiki
Contents |
Introduction
DSPLink can be used by itself, or as part of Codec Engine (CE). This page gives details of changing the size of POOL used within DSPLink, when DSPLink is used 'raw'. The instructions are applicable when using DSPLink version 1.4x onwards, where the dynamic configuration feature was added.
IMPORTANT: When used within Codec Engine, any changes in the DSPLink configuration file are ignored and overridden by the Codec Engine provided dynamic configuration. The changes detailed on this page may need to be done in a different way. For example, the memory map changes must follow procedure mentioned at this article.
Overview
The default DSPLink memory map for any platform usually assumes the following:
- 1 MB shared memory between ARM & DSP
- 1 MB DSP memory for DSP code and data
- 0x70000 POOL size
Sometimes, the default POOL size may not be sufficient for buffer configuration as required for the system. In such cases, the DSPLink configuration must be modified to ensure sufficient size for the POOL
Error seen
If the POOL size is not sufficient for the buffer configuration passed to POOL_open API, the function returns with an error code DSP_ERANGE.
Example
For example, for the DSPLink SMAPOOL, if the buffers configured are:
- L buffers of size A
- M buffers of size B
- N buffers of size C
The total buffer size = (L x A) + (M x B) + (N x C)
If this total size plus size of control structures required for the POOL module exceeds the configured size in the DSPLink dynamic configuration, the error will be seen from POOL_open.
Fixing the error
The POOL configuration is present in the DSPLink dynamic configuration file $(DSPLINK)/config/all/CFG_[PLATFORM].c.
STATIC LINKCFG_Pool LINKCFG_poolTable_00 [] = { { "SMAPOOL", /* NAME : Name of the pool */ (Uint32) 1, /* MEMENTRY : Memory entry ID (-1 if not needed) */ (Uint32) 0x70000, /* POOLSIZE : Size of the pool (-1 if not needed) */ (Uint32) -1, /* IPSID : ID of the IPS used */ (Uint32) -1, /* IPSEVENTNO : IPS Event number associated with POOL */ 0x0, /* ARGUMENT1 : First Pool-specific argument */ 0x0 /* ARGUMENT2 : Second Pool-specific argument */ } } ;
The POOLSIZE is the one that indicates the size reserved for the pool. The error indicates that this size is not sufficient for the required configuration. The size needs to be increased.
Note: These instructions are also applicable for reducing POOL size if this size is not required.
Also note that if the POOL size is increased, it may have a corresponding impact on the size of the memory region from which this POOL size is allocated, i.e. MEMENTRY 1 (as in the configuration above).
STATIC LINKCFG_MemEntry LINKCFG_memTable_00 [] = { ... { 1, /* ENTRY : Entry number */ "DSPLINKMEM1", /* NAME : Name of the memory region */ 0x8FE05000, /* ADDRPHYS : Physical address */ 0x8FE05000, /* ADDRDSPVIRT : DSP virtual address */ (Uint32) -1, /* ADDRGPPVIRT : GPP virtual address (if known) */ 0xFB000, /* SIZE : Size of the memory region */ TRUE /* SHARED : Shared access memory? */ }, ... } ;
This size may also need to be increased.
Based on this other memory regions may need to be adjusted, and correspondingly, the full instructions for changing DSPLink memory map must be followed.
When used within Codec Engine, to change the memory map, the procedure documented here must be followed.
Leave a Comment
