3bd4f7b69e98a113792165853c305a420f17aeeb
[ipc/ipcdev.git] / qnx / src / ipc3x_dev / ti / syslink / family / common / vayu / vayuipu / vayucore1 / VAYUIpuCore1HalReset.c
1 /*
2  *  @file   VAYUIpuCore1HalReset.c
3  *
4  *  @brief      Reset control module.
5  *
6  *              This module is responsible for handling reset-related hardware-
7  *              specific operations.
8  *              The implementation is specific to VAYUIPUCORE1.
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 #include <ti/syslink/Std.h>
56 /* OSAL & Utils headers */
57 #include <ti/syslink/utils/Trace.h>
58 #include <Bitops.h>
60 /* Module level headers */
61 #include <_ProcDefs.h>
62 #include <Processor.h>
64 /* Hardware Abstraction Layer headers */
65 #include <VAYUIpuHal.h>
66 #include <VAYUIpuCore1HalReset.h>
68 #include <hw/inout.h>
70 #if defined (__cplusplus)
71 extern "C" {
72 #endif
75 /* =============================================================================
76  *  Macros and types
77  * =============================================================================
78  */
79 /* M4 PRCM Regs*/
80 #define RM_IPU_RSTCTRL_OFFSET        0x210
81 #define RM_IPU_RSTST_OFFSET          0x214
83 #define CM_IPU_CLKSTCTRL_OFFSET      0x200
84 #define CM_IPU_IPU_CLKCTRL_OFFSET    0x220
87 /* =============================================================================
88  * APIs called by VAYUIPUCORE1PROC module
89  * =============================================================================
90  */
91 /*!
92  *  @brief      Function to control reset operations
93  *
94  *  @param      halObj  Pointer to the HAL object
95  *  @param      cmd     Reset control command
96  *  @param      arg     Arguments specific to the reset control command
97  *
98  *  @sa
99  */
100 Int
101 VAYUIPUCORE1_halResetCtrl (Ptr halObj, Processor_ResetCtrlCmd cmd)
103     Int                 status    = PROCESSOR_SUCCESS;
104     VAYUIPU_HalObject * halObject = NULL;
105     UInt32              cmBase;
106     UInt32              prmBase;
107     UInt32              reg       = 0;
109     GT_2trace (curTrace, GT_ENTER, "VAYUIPUCORE1_halResetCtrl", halObj, cmd);
111     GT_assert (curTrace, (halObj != NULL));
112     GT_assert (curTrace, (cmd < Processor_ResetCtrlCmd_EndValue));
114     halObject = (VAYUIPU_HalObject *) halObj ;
115     cmBase = halObject->cmBase;
116     prmBase = halObject->prmBase;
118     switch (cmd) {
119         case Processor_ResetCtrlCmd_Reset:
120         {
121             /*Put ONLY Benelli M4_1 to Reset*/
122             /* Put IPU core 1 into reset */
123             SETBITREG32(prmBase + RM_IPU_RSTCTRL_OFFSET, 1);
124             /* Read back the reset control register */
125             reg = INREG32(prmBase + RM_IPU_RSTCTRL_OFFSET);
126         }
127         break ;
129         case Processor_ResetCtrlCmd_MMU_Reset:
130         {
131             /* Do nothing, handled by M4_0 MMU_Reset */
132         }
133         break;
135         case Processor_ResetCtrlCmd_MMU_Release:
136         {
137             /* Do nothing, handled by M4_0 MMU_Release */
138         }
139         break;
141         case Processor_ResetCtrlCmd_Release:
142         {
143             /*Bring ONLY Benelli M4_1 out of Reset*/
144             /* De-assert RST1, and clear the Reset status */
145             Osal_printf("De-assert RST2\n");
146             CLRBITREG32(prmBase + RM_IPU_RSTCTRL_OFFSET, 1);
148 #ifndef VAYU_VIRTIO // skip this check for now
149             while (!(INREG32(prmBase + RM_IPU_RSTST_OFFSET) & 0x2));
150             Osal_printf("RST2 released!");
151             SETBITREG32(prmBase + RM_IPU_RSTST_OFFSET, 1);
152 #endif
154             /* Setting to HW_AUTO Mode */
155             reg = INREG32(cmBase + CM_IPU_CLKSTCTRL_OFFSET);
156             reg &= ~0x3;
157             reg |= 0x3;
158             OUTREG32(cmBase + CM_IPU_CLKSTCTRL_OFFSET, reg);
159         }
160         break;
162         case Processor_ResetCtrlCmd_PeripheralUp:
163         {
164             /* Nothing to be done to bringup the peripherals for this device. */
165         }
166         break;
168         default:
169         {
170             /*! @retval PROCESSOR_E_INVALIDARG Invalid argument */
171             status = PROCESSOR_E_INVALIDARG;
172             GT_setFailureReason (curTrace,
173                                  GT_4CLASS,
174                                  "VAYUIPUCORE1_halResetCtrl",
175                                  status,
176                                  "Unsupported reset ctrl cmd specified");
177         }
178         break ;
179     }
181     GT_1trace (curTrace, GT_LEAVE, "VAYUIPUCORE1_halResetCtrl",status);
183     /*! @retval PROCESSOR_SUCCESS Operation successful */
184     return status;
188 #if defined (__cplusplus)
190 #endif