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.

SysLink MMU Support

From Texas Instruments Wiki
Jump to: navigation, search

Introduction

This article describes how users of various devices can enable slave-side MMU when using SysLink. It applies to the 2.00.00.78 GA release and compatible.

Default MMU settings

In SysLink 2.x, the default MMU enable settings vary per device:

  • OMAP3 - the DSP MMU is enabled
  • TI816X - L2 MMU is disabled, DEMMU (also known as the System MMU) is disabled
  • TI814X - L2 MMU is disabled, DEMMU (also known as the System MMU) is disabled
  • OMAP-L138 - the DSP doesn't have an MMU (so it's disabled and can't be changed)

Changing the Default

To modify the default setting, you must assign the SysLink_params variable (a String var defined in SysLink.h) prior to the first app's call to SysLink_setup(). Typically, slaveloader (or similar) is used to load slaves, and is the first app to call SysLink_setup(), so this change is done in slaveloader. To enable an MMU on a device where the default is disabled, you would modify slaveloader like this:

#include <ti/syslink/SysLink.h>
 
/* Enable the L2 MMU on TI81XX devices */
SysLink_params = "ProcMgr.proc[VPSS-M3].mmuEnable=TRUE;";
 
SysLink_setup();

Modifying the Virt/Phys Memory Map

To add virt/phys memory map regions, the ProcMgr_map() and ProcMgr_unmap() APIs are provided.

The slaveloader example provides a nice feature to provide this virt/phys map via a well-formed text file - commonly referred to as 'memmap.txt' - though it can be named anything.

The syntax for memmap.txt is described in the examples included in the slaveloader example directory. As you can see, it closely reflects the underlying ProcMgr_map() API:

# Comments are ok, with a '#' as the first char in a line
# Addresses and masks are typically set in hexidecimal
 
# Format is "procName, slaveVirt, slavePhys, mastPhys, size, mask, cache"
#
# mask values can be a bitwise OR of these values:
#    * 0x1 - MasterKnlVirt
#    * 0x2 - MasterUsrVirt
#    * 0x4 - SlaveVirt
#
# cache value can be 0 or 1.  It is only used when mask bits 0x1 or 0x2 are
# set, and it indicates whether the region will have the cached enabled
# on the Master processor.  (The slave processor's cacheability of each region
# is typically set via the slave OS's configuration scripts)
#    * 0 - non-cached
#    * 1 - cached
 
 
# DDR (code/data) - 8 MB, MasterKnlVirt | SlaveVirt, noncached
VIDEO-M3, 0x8F000000, 0x8F000000, 0x8F000000, 0x700000, 0x5, 0
 
# SR#0 - 16 MB, MasterKnlVirt | SlaveVirt, noncached
VIDEO-M3, 0x8E000000, 0x8E000000, 0x8E000000, 0x1000000, 0x5, 0
 
# SR#1 - 12 MB, MasterKnlVirt | SlaveVirt, noncached
VIDEO-M3, 0x8D000000, 0x8D000000, 0x8D000000, 0xC00000, 0x5, 0
 
# PRCM on L3 - 64 KB, MasterKnlVirt | SlaveVirt, noncached
VIDEO-M3, 0x480C0000, 0x480C0000, 0x480C0000, 0x10000, 0x5, 0
 
 
# DDR (code/data) - 8 MB, MasterKnlVirt | SlaveVirt, noncached
VPSS-M3, 0x8F800000, 0x8F800000, 0x8F800000, 0x700000, 0x5, 0
 
# SR#0 - 16 MB, MasterKnlVirt | SlaveVirt, noncached
VPSS-M3, 0x8E000000, 0x8E000000, 0x8E000000, 0x1000000, 0x5, 0
 
# SR#1 - 12 MB, MasterKnlVirt | SlaveVirt, noncached
VPSS-M3, 0x8D000000, 0x8D000000, 0x8D000000, 0xC00000, 0x5, 0
 
# PRCM on L3 - 64 KB, MasterKnlVirt | SlaveVirt, noncached
VPSS-M3, 0x480C0000, 0x480C0000, 0x480C0000, 0x10000, 0x5, 0

Open Issues and Notes

  • While SysLink's slaveloader example provides the ability to pass a 'memmap.txt' file, SysLink users that don't use slaveloader will have to explicitly call ProcMgr_map() - potentially inventing their own memmap.txt-like parsers. If there's enough interest, slaveloader's memmap.txt parsing may be promoted into a formal SysLink API (e.g. ProcMgr_mapFromFile()).
  • In the 2.00.00.78 GA release, the slaveloader app must be modified and rebuilt to change the enable/disable setting from the platform-specific defaults. In the 2.00.01.79 GA release, the SL_PARAMS environment variable can be set to override the built it SysLink_params variable, removing this modify/rebuild step. This was tracked as SDOCM00082640.
  • As of SysLink 2.20, enabling the TI81XX DEMMU (also known as the System MMU, used by the DSP) is not supported. This is tracked as SDOCM00080419, which is not currently planned.