From: Angela Stegmaier Date: Fri, 3 May 2013 14:02:31 +0000 (-0500) Subject: QNX IPC: DSP1 - Need to Enable DSP_SYSTEM Config for MMU0 X-Git-Tag: 3.00.00.18_eng~2 X-Git-Url: https://git.ti.com/gitweb?p=ipc%2Fipcdev.git;a=commitdiff_plain;h=d76a5620974872019cb1f88c8eb5739d30fb80ee QNX IPC: DSP1 - Need to Enable DSP_SYSTEM Config for MMU0 If using DSP1 with the MMU enabled, need to also enable the global config for MMU0 through the DSP_SYS_MMU_CONFIG MMU0_EN bit. Signed-off-by: Angela Stegmaier --- diff --git a/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspHalReset.c b/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspHalReset.c index 842ad17..5e6bb19 100644 --- a/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspHalReset.c +++ b/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspHalReset.c @@ -94,6 +94,8 @@ extern "C" { #define RM_DSP_RSTCTRL 0x410 #define RM_DSP_RSTST 0x414 +#define DSP_SYS_MMU_CONFIG_OFFSET 0x18 + /* ============================================================================= * APIs called by VAYUDSPPROC module * ============================================================================= @@ -114,6 +116,7 @@ VAYUDSP_halResetCtrl(Ptr halObj, VAYUDspHal_ResetCmd cmd) VAYUDSP_HalObject * halObject = NULL; UInt32 cmBase; UInt32 prmBase; + UInt32 mmuSysBase; UInt32 addr; UInt32 val; Int32 counter = 10; @@ -126,6 +129,7 @@ VAYUDSP_halResetCtrl(Ptr halObj, VAYUDspHal_ResetCmd cmd) halObject = (VAYUDSP_HalObject *)halObj; cmBase = halObject->cmBase; prmBase = halObject->prmBase; + mmuSysBase = halObject->mmuSysBase; switch (cmd) { case Processor_ResetCtrlCmd_Reset: @@ -208,6 +212,11 @@ VAYUDSP_halResetCtrl(Ptr halObj, VAYUDspHal_ResetCmd cmd) #endif Osal_printf("DSP:RST2 released!\n"); OUTREG32(addr, 0x2); + + /* enable MMU0 through global system register */ + val = INREG32(mmuSysBase + DSP_SYS_MMU_CONFIG_OFFSET); + OUTREG32(mmuSysBase + DSP_SYS_MMU_CONFIG_OFFSET, (val & ~0x1) | 0x1); + Osal_printf("DSP:SYS_MMU_CONFIG MMU0 enabled!\n"); } break; diff --git a/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspPhyShmem.c b/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspPhyShmem.c index c6875f5..189fe4b 100644 --- a/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspPhyShmem.c +++ b/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspPhyShmem.c @@ -206,6 +206,22 @@ VAYUDSP_phyShmemInit (Ptr halObj) halObject->mmuBase = mapInfo.dst; } + mapInfo.src = DSP_SYS_MMU_CONFIG_BASE; + mapInfo.size = DSP_SYS_MMU_CONFIG_SIZE; + mapInfo.isCached = FALSE; + status = Memory_map (&mapInfo); + if (status < 0) { + GT_setFailureReason (curTrace, + GT_4CLASS, + "VAYUDSP_phyShmemInit", + status, + "Failure in Memory_map for SYS MMU base registers"); + halObject->mmuSysBase = 0; + } + else { + halObject->mmuSysBase = mapInfo.dst; + } + GT_1trace(curTrace, GT_LEAVE, "<-- VAYUDSP_phyShmemInit: 0x%x", status); /*! @retval PROCESSOR_SUCCESS Operation successful */ @@ -249,6 +265,21 @@ VAYUDSP_phyShmemExit (Ptr halObj) halObject->mmuBase = 0 ; } + unmapInfo.addr = halObject->mmuSysBase; + unmapInfo.size = DSP_SYS_MMU_CONFIG_SIZE; + unmapInfo.isCached = FALSE; + if (unmapInfo.addr != 0) { + status = Memory_unmap (&unmapInfo); + if (status < 0) { + GT_setFailureReason (curTrace, + GT_4CLASS, + "VAYUDSP_phyShmemExit", + status, + "Failure in Memory_Unmap for SYS MMU base registers"); + } + halObject->mmuSysBase = 0 ; + } + unmapInfo.addr = halObject->cmBase; unmapInfo.size = CM_SIZE; unmapInfo.isCached = FALSE; diff --git a/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspHal.h b/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspHal.h index 9d4d67e..a0d5f51 100644 --- a/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspHal.h +++ b/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspHal.h @@ -88,6 +88,8 @@ typedef struct VAYUDSP_HalObject_tag { /*!< Virtual base address of the General Control module. */ UInt32 mmuBase; /*!< Base address of the MMU module. */ + UInt32 mmuSysBase; + /*!< Base address of the MMU module. */ UInt32 procId; /*!< Processor ID. */ VAYUDSP_HalMmuObject mmuObj; diff --git a/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspPhyShmem.h b/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspPhyShmem.h index cb0a7d6..8249470 100644 --- a/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspPhyShmem.h +++ b/qnx/src/ipc3x_dev/ti/syslink/inc/knl/VAYUDspPhyShmem.h @@ -112,6 +112,12 @@ extern "C" { #define CM_SIZE 0x00002000 +#define DSP_SYS_MMU_CONFIG_BASE 0x40D00000 +/*! + * @brief size to be ioremapped. + */ +#define DSP_SYS_MMU_CONFIG_SIZE 0x1000 + #define MMU_BASE 0x40D01000 /*! * @brief size to be ioremapped.