Please note as of Wednesday, August 15th, 2018 this wiki has been set to read only. If you are a TI Employee and require Edit ability please contact x0211426 from the company directory.

Changing DSPLink POOL size

From Texas Instruments Wiki
Jump to: navigation, search

END OF LIFE

DSP Link is still available for download, but no further releases or updates are planned. Please see IPC Software Options for details and alternatives.

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.