d8eec303f8adfa23c808a8e2769da25efcb47e9c
[ipc/ipcdev.git] / qnx / src / ipc3x_dev / ti / syslink / family / common / vayu / vayudsp / VAYUDspPhyShmem.c
1 /*
2  *  @file   VAYUDspPhyShmem.c
3  *
4  *  @brief      Shared memory physical interface file for VAYUDSP.
5  *
6  *              This module is responsible for handling boot-related hardware-
7  *              specific operations.
8  *              The implementation is specific to VAYUDSP.
9  *
10  *
11  *  ============================================================================
12  *
13  *  Copyright (c) 2013, Texas Instruments Incorporated
14  *
15  *  Redistribution and use in source and binary forms, with or without
16  *  modification, are permitted provided that the following conditions
17  *  are met:
18  *
19  *  *  Redistributions of source code must retain the above copyright
20  *     notice, this list of conditions and the following disclaimer.
21  *
22  *  *  Redistributions in binary form must reproduce the above copyright
23  *     notice, this list of conditions and the following disclaimer in the
24  *     documentation and/or other materials provided with the distribution.
25  *
26  *  *  Neither the name of Texas Instruments Incorporated nor the names of
27  *     its contributors may be used to endorse or promote products derived
28  *     from this software without specific prior written permission.
29  *
30  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
31  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
32  *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
33  *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
34  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
35  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
36  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
37  *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
38  *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
39  *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
40  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41  *  Contact information for paper mail:
42  *  Texas Instruments
43  *  Post Office Box 655303
44  *  Dallas, Texas 75265
45  *  Contact information:
46  *  http://www-k.ext.ti.com/sc/technical-support/product-information-centers.htm?
47  *  DCMP=TIHomeTracking&HQS=Other+OT+home_d_contact
48  *  ============================================================================
49  *
50  */
54 /* Standard headers */
55 #include <ti/syslink/Std.h>
57 /* OSAL and utils */
58 #include <ti/syslink/utils/Memory.h>
60 #include <ti/syslink/utils/Trace.h>
62 /* Module headers */
63 #include <_ProcDefs.h>
64 #include <Processor.h>
67 /* Hardware Abstraction Layer headers */
68 #include <VAYUDspHal.h>
69 #include <VAYUDspHalBoot.h>
70 #include <VAYUDspHalReset.h>
71 #include <VAYUDspPhyShmem.h>
72 #include <VAYUDspHalMmu.h>
75 #if defined (__cplusplus)
76 extern "C" {
77 #endif
80 /* =============================================================================
81  *  Macros and types
82  * =============================================================================
83  */
86 /* =============================================================================
87  * APIs called by VAYUDSPPROC module
88  * =============================================================================
89  */
90 /*!
91  *  @brief      Function to initialize Shared Driver/device.
92  *
93  *  @param      halObj  Pointer to the HAL object
94  *
95  *  @sa         VAYUDSP_phyShmemExit
96  *              Memory_map
97  */
98 Int
99 VAYUDSP_phyShmemInit (Ptr halObj)
101     Int                  status    = PROCESSOR_SUCCESS;
102     VAYUDSP_HalObject *  halObject = NULL;
103     Memory_MapInfo       mapInfo;
105     GT_1trace (curTrace, GT_ENTER, "VAYUDSP_phyShmemInit", halObj);
107     GT_assert (curTrace,(halObj != NULL));
109     halObject = (VAYUDSP_HalObject *) halObj;
111     mapInfo.src = DSP_BOOT_ADDR;
112     mapInfo.size = DSP_BOOT_ADDR_SIZE;
113     mapInfo.isCached = FALSE;
115     status = Memory_map (&mapInfo);
117     if (status < 0) {
118         GT_setFailureReason (curTrace,
119                              GT_4CLASS,
120                              "VAYUDSP_phyShmemInit",
121                              status,
122                              "Failure in Memory_map for MMU base registers");
123         halObject->generalCtrlBase = 0;
124     }
125     else {
126         halObject->generalCtrlBase = mapInfo.dst;
127     }
129     mapInfo.src      = DSP_BOOT_STAT;
130     mapInfo.size     = DSP_BOOT_STAT_SIZE;
131     mapInfo.isCached = FALSE;
132     status = Memory_map (&mapInfo);
133     if (status < 0) {
134         GT_setFailureReason (curTrace,
135                              GT_4CLASS,
136                              "VAYUDSP_phyShmemInit",
137                              status,
138                              "Failure in Memory_map for MMU base registers");
139         halObject->bootStatBase = 0;
140     }
141     else {
142         halObject->bootStatBase = mapInfo.dst;
143     }
145     mapInfo.src      = L2_RAM_CLK_ENABLE;
146     mapInfo.size     = L2_RAM_CLK_ENABLE_SIZE;
147     mapInfo.isCached = FALSE;
148     status = Memory_map (&mapInfo);
149     if (status < 0) {
150         GT_setFailureReason (curTrace,
151                              GT_4CLASS,
152                              "VAYUDSP_phyShmemInit",
153                              status,
154                              "Failure in Memory_map for MMU base registers");
155         halObject->l2ClkBase = 0;
156     }
157     else {
158         halObject->l2ClkBase = mapInfo.dst;
159     }
161     mapInfo.src      = CM_BASE_ADDR;
162     mapInfo.size     = CM_SIZE;
163     mapInfo.isCached = FALSE;
164     status = Memory_map (&mapInfo);
165     if (status < 0) {
166         GT_setFailureReason (curTrace,
167                              GT_4CLASS,
168                              "VAYUDSP_phyShmemInit",
169                              status,
170                              "Failure in Memory_map for MMU base registers");
171         halObject->cmBase = 0;
172     }
173     else {
174         halObject->cmBase = mapInfo.dst;
175     }
177     mapInfo.src      = PRM_BASE_ADDR;
178     mapInfo.size     = PRM_SIZE;
179     mapInfo.isCached = FALSE;
180     status = Memory_map (&mapInfo);
181     if (status < 0) {
182         GT_setFailureReason (curTrace,
183                              GT_4CLASS,
184                              "VAYUDSP_phyShmemInit",
185                              status,
186                              "Failure in Memory_map for MMU base registers");
187         halObject->prmBase = 0;
188     }
189     else {
190         halObject->prmBase = mapInfo.dst;
191     }
193     mapInfo.src      = MMU_BASE;
194     mapInfo.size     = MMU_SIZE;
195     mapInfo.isCached = FALSE;
196     status = Memory_map (&mapInfo);
197     if (status < 0) {
198         GT_setFailureReason (curTrace,
199                              GT_4CLASS,
200                              "VAYUDSP_phyShmemInit",
201                              status,
202                              "Failure in Memory_map for MMU base registers");
203         halObject->mmuBase = 0;
204     }
205     else {
206         halObject->mmuBase = mapInfo.dst;
207     }
209     mapInfo.src      = DSP_SYS_MMU_CONFIG_BASE;
210     mapInfo.size     = DSP_SYS_MMU_CONFIG_SIZE;
211     mapInfo.isCached = FALSE;
212     status = Memory_map (&mapInfo);
213     if (status < 0) {
214         GT_setFailureReason (curTrace,
215                              GT_4CLASS,
216                              "VAYUDSP_phyShmemInit",
217                              status,
218                              "Failure in Memory_map for SYS MMU base registers");
219         halObject->mmuSysBase = 0;
220     }
221     else {
222         halObject->mmuSysBase = mapInfo.dst;
223     }
225     mapInfo.src      = CTRL_MODULE_BASE;
226     mapInfo.size     = CTRL_MODULE_SIZE;
227     mapInfo.isCached = FALSE;
228     status = Memory_map (&mapInfo);
229     if (status < 0) {
230         GT_setFailureReason (curTrace,
231                              GT_4CLASS,
232                              "VAYUDSP_phyShmemInit",
233                              status,
234                              "Failure in Memory_map for Ctrl Module base registers");
235         halObject->ctrlModBase = 0;
236     }
237     else {
238         halObject->ctrlModBase = mapInfo.dst;
239     }
241     GT_1trace(curTrace, GT_LEAVE, "<-- VAYUDSP_phyShmemInit: 0x%x", status);
243     /*! @retval PROCESSOR_SUCCESS Operation successful */
244     return status;
248 /*!
249  *  @brief      Function to finalize Shared Driver/device.
250  *
251  *  @param      halObj  Pointer to the HAL object
252  *
253  *  @sa         VAYUDSP_phyShmemInit
254  *              Memory_Unmap
255  */
256 Int
257 VAYUDSP_phyShmemExit (Ptr halObj)
259     Int                  status    = PROCESSOR_SUCCESS;
260     VAYUDSP_HalObject *  halObject = NULL;
261     Memory_UnmapInfo     unmapInfo;
263     GT_1trace (curTrace, GT_ENTER, "VAYUDSP_phyShmemExit", halObj);
265     GT_assert (curTrace, (halObj != NULL));
267     halObject = (VAYUDSP_HalObject *) halObj;
269     unmapInfo.addr = halObject->ctrlModBase;
270     unmapInfo.size = CTRL_MODULE_SIZE;
271     unmapInfo.isCached = FALSE;
272     if (unmapInfo.addr != 0) {
273         status = Memory_unmap (&unmapInfo);
274         if (status < 0) {
275             GT_setFailureReason (curTrace,
276                               GT_4CLASS,
277                               "VAYUDSP_phyShmemExit",
278                               status,
279                               "Failure in Memory_Unmap for Ctrl Module base registers");
280         }
281         halObject->ctrlModBase = 0 ;
282     }
284     unmapInfo.addr = halObject->mmuBase;
285     unmapInfo.size = MMU_SIZE;
286     unmapInfo.isCached = FALSE;
287     if (unmapInfo.addr != 0) {
288         status = Memory_unmap (&unmapInfo);
289         if (status < 0) {
290             GT_setFailureReason (curTrace,
291                               GT_4CLASS,
292                               "VAYUDSP_phyShmemExit",
293                               status,
294                               "Failure in Memory_Unmap for MMU base registers");
295         }
296         halObject->mmuBase = 0 ;
297     }
299     unmapInfo.addr = halObject->mmuSysBase;
300     unmapInfo.size = DSP_SYS_MMU_CONFIG_SIZE;
301     unmapInfo.isCached = FALSE;
302     if (unmapInfo.addr != 0) {
303         status = Memory_unmap (&unmapInfo);
304         if (status < 0) {
305             GT_setFailureReason (curTrace,
306                               GT_4CLASS,
307                               "VAYUDSP_phyShmemExit",
308                               status,
309                               "Failure in Memory_Unmap for SYS MMU base registers");
310         }
311         halObject->mmuSysBase = 0 ;
312     }
314     unmapInfo.addr = halObject->cmBase;
315     unmapInfo.size = CM_SIZE;
316     unmapInfo.isCached = FALSE;
317     if (unmapInfo.addr != 0) {
318         status = Memory_unmap (&unmapInfo);
319         if (status < 0) {
320             GT_setFailureReason (curTrace,
321                               GT_4CLASS,
322                               "VAYUDSP_phyShmemExit",
323                               status,
324                               "Failure in Memory_Unmap for CM base registers");
325         }
326         halObject->cmBase = 0 ;
327     }
329     unmapInfo.addr = halObject->prmBase;
330     unmapInfo.size = PRM_SIZE;
331     unmapInfo.isCached = FALSE;
332     if (unmapInfo.addr != 0) {
333         status = Memory_unmap (&unmapInfo);
334         if (status < 0) {
335             GT_setFailureReason (curTrace,
336                               GT_4CLASS,
337                               "VAYUDSP_phyShmemExit",
338                               status,
339                               "Failure in Memory_Unmap for MMU base registers");
340         }
341         halObject->prmBase = 0 ;
342     }
344     unmapInfo.addr = halObject->l2ClkBase;
345     unmapInfo.size = L2_RAM_CLK_ENABLE_SIZE;
346     unmapInfo.isCached = FALSE;
347     if (unmapInfo.addr != 0) {
348         status = Memory_unmap (&unmapInfo);
349         if (status < 0) {
350             GT_setFailureReason (curTrace,
351                               GT_4CLASS,
352                               "VAYUDSP_phyShmemExit",
353                               status,
354                               "Failure in Memory_Unmap for MMU base registers");
355         }
356         halObject->l2ClkBase = 0 ;
357     }
359     unmapInfo.addr = halObject->bootStatBase;
360     unmapInfo.size = DSP_BOOT_STAT_SIZE;
361     unmapInfo.isCached = FALSE;
362     if (unmapInfo.addr != 0) {
363         status = Memory_unmap (&unmapInfo);
364         if (status < 0) {
365             GT_setFailureReason (curTrace,
366                               GT_4CLASS,
367                               "VAYUDSP_phyShmemExit",
368                               status,
369                               "Failure in Memory_Unmap for MMU base registers");
370         }
371         halObject->bootStatBase = 0 ;
372     }
374     unmapInfo.addr = halObject->generalCtrlBase;
375     unmapInfo.size = DSP_BOOT_ADDR_SIZE;
376     unmapInfo.isCached = FALSE;
377     if (unmapInfo.addr != 0) {
378         status = Memory_unmap (&unmapInfo);
379         if (status < 0) {
380             GT_setFailureReason (curTrace,
381                               GT_4CLASS,
382                               "VAYUDSP_phyShmemExit",
383                               status,
384                               "Failure in Memory_Unmap for MMU base registers");
385         }
386         halObject->generalCtrlBase = 0 ;
387     }
390     GT_1trace (curTrace, GT_LEAVE, "VAYUDSP_phyShmemExit",status);
392     /*! @retval PROCESSOR_SUCCESS Operation successful */
393     return status;
397 #if defined (__cplusplus)
400 #endif