Removes all references to OMAP4 and TI81xx devices in QNX codebase
[ipc/ipcdev.git] / qnx / src / ipc3x_dev / ti / syslink / family / common / ClockOps.c
1 /*
2  *  @file   ClockOps.c
3  *
4  *  @brief      Generic clock module interface across platforms and OS
5  *
6  *
7  *  ============================================================================
8  *
9  *  Copyright (c) 2008-2013, Texas Instruments Incorporated
10  *
11  *  Redistribution and use in source and binary forms, with or without
12  *  modification, are permitted provided that the following conditions
13  *  are met:
14  *
15  *  *  Redistributions of source code must retain the above copyright
16  *     notice, this list of conditions and the following disclaimer.
17  *
18  *  *  Redistributions in binary form must reproduce the above copyright
19  *     notice, this list of conditions and the following disclaimer in the
20  *     documentation and/or other materials provided with the distribution.
21  *
22  *  *  Neither the name of Texas Instruments Incorporated nor the names of
23  *     its contributors may be used to endorse or promote products derived
24  *     from this software without specific prior written permission.
25  *
26  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
28  *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
30  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
33  *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
34  *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
35  *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
36  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  *  Contact information for paper mail:
38  *  Texas Instruments
39  *  Post Office Box 655303
40  *  Dallas, Texas 75265
41  *  Contact information:
42  *  http://www-k.ext.ti.com/sc/technical-support/product-information-centers.htm?
43  *  DCMP=TIHomeTracking&HQS=Other+OT+home_d_contact
44  *  ============================================================================
45  *
46  */
49 /* Standard headers */
50 #include <ti/syslink/Std.h>
51 /* Module level headers */
52 #include <ti/syslink/inc/ClockOps.h>
54 /* standard include for reg access */
55 #include <stdint.h>
56 #include <sys/mman.h>
57 #include <hw/inout.h>
59 //#include <ti/syslink/inc/ClockOps.h>
60 #include <ti/syslink/utils/Trace.h>
61 #include <ti/syslink/utils/String.h>
64 #if defined (__cplusplus)
65 extern "C" {
66 #endif
68 /*Function Prototypes */
69 void prcm_enable(UInt32 clkstctrl, UInt32 clkctrl, UInt32 regVal1, UInt32 regVal2, UInt32 cmpVal1, UInt32 cmpVal2, UInt32 wait1, UInt32 wait2);
70 void GEMSSClkEnable(void);
71 void GEMSSClkDisable(void);;
72 void DucatiClkEnable(void) ;
73 void DucatiClkDisable(void) ;
74 void prcm_disable_spinbox(void);
75 void prcm_disable_mailbox(void);
76 void prcm_disable_gptimer4(void);
80 #define LAST_CORE 1
82 String handleArray[] = {
84 "spinbox_ick",
85 "mailbox_ick",
86 "gpt4_ick",
87 "gpt4_fck",
88 "mmu_ick",
89 "mmu_cfg_ick",
90 "gem_ick" /* dsp_ick string is changed in latest linux release to gem_ick*/
91 };
93 typedef enum {
94     SPINBOX=1,
95     MAILBOX=2,
96     IGPTIMER4=3,
97     FGPTIMER4=4,
98     MMU=5,
99     MMUCFG=6,
100     DSP=7,
101     DUCATI=8
102 }clkType;
104 /* =============================================================================
105  *  Macros and types
106  * =============================================================================
107  */
108 #define PRCM_BASE_ADDR              0x48180000
109 #define PRCM_SIZE                   0x00003000
110 #define PM_ACTIVE_PWRSTST           0x00000A04
112 #define CM_MMU_CLKSTCTRL            0x0000140C
113 #define CM_ALWON_MMUDATA_CLKCTRL    0x0000159C
114 #define CM_MMUCFG_CLKSTCTRL         0x00001410
115 #define CM_ALWON_MMUCFG_CLKCTRL     0x000015A8
117 #define GEM_L2RAM_BASE_ADDR         0x40800000
118 #define GEM_L2RAM_SIZE              0x00040000
119 #define DSPMEM_SLEEP                0x00000650
121 #define OSC_0                       20
122 #define OSC_1                       20
123 #define PLL_BASE_ADDRESS            0x481C5000
124 #define DSP_PLL_BASE                (PLL_BASE_ADDRESS+0x080)
125 #define DSPBOOTADDR                 0x00000048
126 #define CM_ALWON_SPINBOX_CLKCTRL    0x00001598
127 #define CM_ALWON_MAILBOX_CLKCTRL    0x00001594
128 #define CM_ALWON_L3_SLOW_CLKSTCTRL  0x00001400
129 #define CM_ALWON_TIMER_4_CLKCTRL    0x0000157C
130 #define CTRL_MODULE_BASE_ADDR       0x48140000
132 #define RM_DEFAULT_RSTCTRL          0x00000B10
133 #define RM_DEFAULT_RSTST            0x00000B14
134 #define CM_DEFAULT_DUCATI_CLKSTCTRL 0x00000518
135 #define CM_DEFAULT_DUCATI_CLKCTRL   0x00000574
137 /* for gptimer4 fck */
138 #define CM_SYSCLK18_CLKSEL          0x00000378
139 #define CM_DMTIMER_CLKSRC           0x000002E0
140 #define CM_SYSCLK18_CLKSRC          0x000002F0
141 #define CM_DPLL_SYSCLK18_CLKSEL     (PRCM_BASE_ADDR+CM_SYSCLK18_CLKSEL)
142 #define SYSCLK18_CLKSRC             (PLL_BASE_ADDRESS+CM_SYSCLK18_CLKSRC)
143 #define DMTIMER_CLKSRC              (PLL_BASE_ADDRESS+CM_DMTIMER_CLKSRC)
145 #define ADPLLJ_CLKCRTL_HS2    0x00000801 //HS2 Mode,TINTZ =1  --used by all PLL's except HDMI
147 /* ISS PLL releated defines */
148 #define ISS_PLL_BASE            (PLL_BASE_ADDRESS+0x140)
151 //ADPLL intrnal Offset Registers
152 #define CLKCTRL                                 0x4
153 #define TENABLE                                 0x8
154 #define TENABLEDIV                              0xC
155 #define M2NDIV                                  0x10
156 #define MN2DIV                                  0x14
157 #define STATUS                                  0x24
159 /*!
160  *  @brief  PRM address for GEM
161  */
162 #define CM_GEM_CLKSTCTRL                0x400
163 /*!
164  *  @brief  Clock mgmt for GEM
165  */
166 #define CM_ACTIVE_GEM_CLKCTRL           0x420
167 /*!
168  *  @brief  Reset control for GEM
169  */
170 #define RM_ACTIVE_RSTCTRL               0xA10
171 /*!
172  *  @brief  Reset status for GEM
173  */
174 #define RM_ACTIVE_RSTST                 0xA14
176 #define REMAP(x)             (mmap_device_io(4,x))
177 #define UNMAP(x)             (munmap_device_io(x,4))
178 #define REGWR(x,y)           (out32(x,y))
179 #define REGRD(x)             (in32(x))
180 #define REGRDMWR(x, mask, val) REGWR(x,((REGRD(x) & mask) | val))
182 /* =============================================================================
183  * Static globals
184  * =============================================================================
185  */
186 UInt32 refSpinCount = 0;
187 UInt32 refMboxCount = 0;
188 UInt32 refGptimer4ick = 0;
189 UInt32 refGptimer4fck = 0;
190 UInt32 refDSP = 0;
191 UInt32 refDucati = 0;
193 /*!
194  *  @brief      Function returns the clock handle .
195  *
196  *  @clkHandle   clk handle returned to corresponding clk name
197  *  @clkname     name of clk for which handle is to be obtained
198  *
199  */
200 Ptr
201 ClockOps_get (ClockOps_Handle handle, String clkName)
203     clkType ctype = SPINBOX;
205     if (!String_cmp(clkName,"spinbox_ick")) {
206         ctype = SPINBOX;
207     }
208     else if (!String_cmp(clkName,"mailbox_ick")) {
209         ctype = MAILBOX;
210     }
211     else if (!String_cmp(clkName,"gpt4_ick")) {
212         ctype = IGPTIMER4;
213     }
214     else if (!String_cmp(clkName,"gpt4_fck")) {
215         ctype = FGPTIMER4;
216     }
217     else if (!String_cmp(clkName,"mmu_ick")) {
218         ctype = MMU;
219     }
220     else if (!String_cmp(clkName,"mmu_cfg_ick")) {
221         ctype = MMUCFG;
222     }
223 /* dsp_ick string is changed in latest linux release to gem_ick*/
224     else if (!String_cmp(clkName,"gem_ick")) {
225         ctype = DSP;
226     }
227     else if (!String_cmp(clkName,"ducati_ick")) {
228         ctype = DUCATI;
229     }
230     else {
231         /* should not come here */
232     }
234     return ((Ptr)ctype);
237 /*!
238  *  @brief      Function returns the clock handle .
239  *
240  *  @clkHandle   clk handle returned to corresponding clk name
241  *  @clkname     name of clk for which handle is to be obtained
242  *
243  */
244 Void
245 ClockOps_put(ClockOps_Handle handle, Ptr clkHandle)
247     //clk_put((struct clk *)clkHandle);
249 /*!
250  *  @brief      Function returns the clock handle .
251  *
252  *  @clkHandle   clk handle returned to corresponding clk name
253  *  @clkname     name of clk for which handle is to be obtained
254  *
255  *  @sa         ClockOps_put
256  */
257 Int32
258 ClockOps_enable(ClockOps_Handle handle, Ptr clkHandle)
260     return 1;
262 /*!
263  *  @brief      Function returns the clock handle .
264  *
265  *  @clkHandle   clk handle returned to corresponding clk name
266  *  @clkname     name of clk for which handle is to be obtained
267  *
268  *  @sa         ClockOps_put
269  */
270 Void
271 ClockOps_disable(ClockOps_Handle handle, Ptr clkHandle)
275 /*!
276  *  @brief      Function returns the clock handle .
277  *
278  *  @clkHandle   clk handle returned to corresponding clk name
279  *  @clkname     name of clk for which handle is to be obtained
280  *
281  *  @sa         ClockOps_put
282  */
283 ULong
284 ClockOps_getRate(ClockOps_Handle handle, Ptr clkHandle)
286     //return(clk_get_rate((struct clk *)clkHandle));
287     return 1;
290 /*!
291  *  @brief      Function returns the clock handle .
292  *
293  *  @clkHandle   clk handle returned to corresponding clk name
294  *  @clkname     name of clk for which handle is to be obtained
295  *
296  *  @sa         ClockOps_put
297  */
298 Int32
299 ClockOps_setRate(ClockOps_Handle handle, Ptr clkHandle, ULong rate)
301     //return (clk_set_rate((struct clk *)clkHandle, rate));
302     return 1;
305 void PLL_Clocks_Config(UInt32 Base_Address,UInt32 OSC_FREQ,UInt32 N,UInt32 M,UInt32 M2,UInt32 CLKCTRL_VAL)
310 #if defined (__cplusplus)
313 #endif