1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94
95 ///////////////////////////////////////////////////////////////////////////////////////////////////
96 ///
97 /// file halJPD.c
98 /// @brief JPD hal interface
99 /// @author MStar Semiconductor Inc.
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101
102
103 //-------------------------------------------------------------------------------------------------
104 // Include Files
105 //-------------------------------------------------------------------------------------------------
106 // Common Definition
107 #include "MsCommon.h"
108 #include "MsOS.h"
109 #include "halCHIP.h"
110 // Internal Definition
111 //#include "regCHIP.h"
112 #include "drvMMIO.h" //get RIU base
113 #include "osalJPD.h"
114 #include "drvJPD.h"
115 #include "regJPD.h"
116 #include "halJPD.h"
117
118 #if USE_MJPEG_FUNCTION
119 #include "../vpu/regVPU.h" // For VPU
120 #include "../vpu/halVPU.h"
121 #endif
122
123 // MJPEG
124 #define USE_FW_HVD 1
125
126 #if USE_FW_HVD
127 #include "../hvd/fwHVD_if.h"
128 #define JPD_FW_VERSION "JPD.FW.00130062"
129 MS_BOOL HAL_HVD_LoadCode(MS_U32 u32DestAddr, MS_U32 u32Size, MS_U32 u32BinAddr, MS_U8 u8FwSrcType);
130 #else
131 #include "fwJPD.h"
132 #endif
133
134 // For MVD Power On
135 void HAL_MVD_RegSetBase(MS_U32 u32Base);
136 void HAL_MVD_PowerCtrl(MS_BOOL bOn);
137 void HAL_MVD_SetSyncClk(MS_BOOL bEnable);
138 MS_BOOL HAL_MVD_RstHW(void);
139
140 //-------------------------------------------------------------------------------------------------
141 // Driver Compiler Options
142 //-------------------------------------------------------------------------------------------------
143 #define HAL_JPD_ENABLE 1
144 #define HAL_JPD_DISABLE 0
145
146 #define HAL_JPD_MUTEX_SUPPORT HAL_JPD_ENABLE
147 #define HAL_JPD_MIU_PROTECT HAL_JPD_ENABLE
148
149
150 //-------------------------------------------------------------------------------------------------
151 // Local Defines
152 //-------------------------------------------------------------------------------------------------
153 #define JPD_EVENT_ALL 0x7F
154
155 #define __HAL_JPD_DelayMs(x) do { MS_U32 ticks=0; while((ticks++)>(x*10)); } while(0)
156
157 #define JPD_RIU_MAP u32JPDRiuBaseAdd //obtain in init
158
159 #define JPD_DEBUG_HAL_MSG(format, args...) do{if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_MSG) printf(format, ##args);}while(0)
160 #define JPD_DEBUG_HAL_ERR(format, args...) do{if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_ERR) printf(format, ##args);}while(0)
161
162 #ifndef READ_BYTE
163 #define READ_BYTE(_reg) (*(volatile MS_U8*)(_reg))
164 #define READ_WORD(_reg) (*(volatile MS_U16*)(_reg))
165 #define READ_LONG(_reg) (*(volatile MS_U32*)(_reg))
166 #define WRITE_BYTE(_reg, _val) { (*((volatile MS_U8*)(_reg))) = (MS_U8)(_val); }
167 #define WRITE_WORD(_reg, _val) { (*((volatile MS_U16*)(_reg))) = (MS_U16)(_val); }
168 #define WRITE_LONG(_reg, _val) { (*((volatile MS_U32*)(_reg))) = (MS_U32)(_val); }
169 #endif
170
171 #define JPD_READ_BYTE(addr) READ_BYTE( (JPD_RIU_MAP + (addr)) )
172 #define JPD_READ_WORD(addr) READ_WORD( (JPD_RIU_MAP + (addr)) )
173 #define JPD_WRITE_BYTE(addr, val) WRITE_BYTE( (JPD_RIU_MAP + (addr)), (val) )
174 #define JPD_WRITE_WORD(addr, val) WRITE_WORD( (JPD_RIU_MAP + (addr)), (val) )
175
176 #define JPD_MACRO_START do {
177 #define JPD_MACRO_END } while (0)
178
179 #define __HAL_JPD_ReadByte( u32Reg ) JPD_READ_BYTE(((u32Reg) << 1) - ((u32Reg) & 1))
180
181 #define __HAL_JPD_Read2Byte( u32Reg ) (JPD_READ_WORD((u32Reg)<<1))
182
183 #define __HAL_JPD_Read4Byte( u32Reg ) ( (MS_U32)JPD_READ_WORD((u32Reg)<<1) | ((MS_U32)JPD_READ_WORD(((u32Reg)+2)<<1)<<16 ) )
184
185 #define __HAL_JPD_ReadBit( u32Reg, u8Mask ) (JPD_READ_BYTE(((u32Reg)<<1) - ((u32Reg) & 1)) & (u8Mask))
186
187 #define __HAL_JPD_WriteBit( u32Reg, bEnable, u8Mask ) \
188 JPD_MACRO_START \
189 JPD_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) , (bEnable) ? (JPD_READ_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) ) | (u8Mask)) : \
190 (JPD_READ_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) ) & ~(u8Mask))); \
191 JPD_MACRO_END
192
193 #define __HAL_JPD_WriteByte( u32Reg, u8Val ) \
194 JPD_MACRO_START \
195 JPD_WRITE_BYTE(((u32Reg) << 1) - ((u32Reg) & 1), (u8Val)); \
196 JPD_MACRO_END
197
198 #define __HAL_JPD_Write2Byte( u32Reg, u16Val ) \
199 JPD_MACRO_START \
200 if ( ((u32Reg) & 0x01) ) \
201 { \
202 JPD_WRITE_BYTE(((u32Reg) << 1) - 1, (MS_U8)((u16Val))); \
203 JPD_WRITE_BYTE(((u32Reg) + 1) << 1, (MS_U8)((u16Val) >> 8)); \
204 } \
205 else \
206 { \
207 JPD_WRITE_WORD( ((u32Reg)<<1) , u16Val); \
208 } \
209 JPD_MACRO_END
210
211 #define __HAL_JPD_Write4Byte( u32Reg, u32Val ) \
212 JPD_MACRO_START \
213 if ((u32Reg) & 0x01) \
214 { \
215 JPD_WRITE_BYTE( ((u32Reg) << 1) - 1 , (u32Val)); \
216 JPD_WRITE_WORD( ((u32Reg) + 1)<<1 , ( (u32Val) >> 8)); \
217 JPD_WRITE_BYTE( (((u32Reg) + 3) << 1) , ((u32Val) >> 24)); \
218 } \
219 else \
220 { \
221 JPD_WRITE_WORD( (u32Reg)<<1 , (u32Val)); \
222 JPD_WRITE_WORD( ((u32Reg) + 2)<<1 , ((u32Val) >> 16)); \
223 } \
224 JPD_MACRO_END
225
226 //JPD mutex
227 #if (HAL_JPD_MUTEX_SUPPORT == HAL_JPD_ENABLE)
228 static MS_S32 _s32JPDMutexID = -1;
229 MS_U8 strJPD[10] = "JPD_Mutex";
230
231 #define __HAL_JPD_MutexCreate() \
232 JPD_MACRO_START \
233 if( _s32JPDMutexID < 0 ) \
234 { \
235 _s32JPDMutexID = OSAL_JPD_MutexCreate( strJPD ); \
236 } \
237 JPD_MACRO_END
238 #define __HAL_JPD_MutexDelete() \
239 JPD_MACRO_START \
240 if( _s32JPDMutexID >= 0 ) \
241 { \
242 OSAL_JPD_MutexDelete(_s32JPDMutexID); \
243 _s32JPDMutexID = -1; \
244 } \
245 JPD_MACRO_END
246 #define __HAL_JPD_MutexEntry() \
247 JPD_MACRO_START \
248 if( _s32JPDMutexID >= 0 ) \
249 { \
250 if (!OSAL_JPD_MutexObtain(_s32JPDMutexID, OSAL_JPD_MUTEX_TIMEOUT)) \
251 { \
252 JPD_DEBUG_HAL_MSG("[HAL JPD][%s][%06d] Mutex taking timeout\n", __FUNCTION__, __LINE__); \
253 } \
254 } \
255 JPD_MACRO_END
256 #define __HAL_JPD_MutexExit() \
257 JPD_MACRO_START \
258 if( _s32JPDMutexID >= 0 ) \
259 { \
260 OSAL_JPD_MutexRelease(_s32JPDMutexID); \
261 } \
262 JPD_MACRO_END
263 #else //HAL_JPD_MUTEX_SUPPORT
264 #define __HAL_JPD_MutexCreate()
265 #define __HAL_JPD_MutexDelete()
266 #define __HAL_JPD_MutexEntry()
267 #define __HAL_JPD_MutexExit()
268 #endif //HAL_JPD_MUTEX_SUPPORT
269
270 //-------------------------------------------------------------------------------------------------
271 // Local Structurs
272 //-------------------------------------------------------------------------------------------------
273
274 //-------------------------------------------------------------------------------------------------
275 // Global Variables
276 //-------------------------------------------------------------------------------------------------
277 MS_U32 u32JPDRiuBaseAdd = 0x0;
278
279 //-------------------------------------------------------------------------------------------------
280 // Local Variables
281 //-------------------------------------------------------------------------------------------------
282 static MS_U8 _pu8HalVer[] = JPD_HAL_VERSION;
283 static MS_U8 _pu8FwVer[] = JPD_FW_VERSION;
284 static MS_U8 _u8JPDHalDbgLevel = E_JPD_DEBUG_HAL_NONE;
285
286 //-------------------------------------------------------------------------------------------------
287 // Debug Functions
288 //-------------------------------------------------------------------------------------------------
289
290 //-------------------------------------------------------------------------------------------------
291 // Local Functions
292 //-------------------------------------------------------------------------------------------------
_HAL_JPD_SetMIUProtectMask(MS_BOOL bEnable)293 static void _HAL_JPD_SetMIUProtectMask(MS_BOOL bEnable)
294 {
295 #if (HAL_JPD_MIU_PROTECT == HAL_JPD_ENABLE)
296 __HAL_JPD_WriteBit(JPD_MIU0_RQ2_MASK+1, bEnable, JPD_MIU0_CLIENT_JPD);
297 __HAL_JPD_WriteBit(JPD_MIU1_RQ2_MASK+1, bEnable, JPD_MIU1_CLIENT_JPD);
298
299 JPD_DEBUG_HAL_MSG("_HAL_JPD_SetMIUProtectMask MIU0 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU0_RQ2_MASK));
300 JPD_DEBUG_HAL_MSG("_HAL_JPD_SetMIUProtectMask MIU1 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU1_RQ2_MASK));
301 #endif
302 return;
303 }
304
305 #if 0
306 MS_U8 _JPD_ReadByte(MS_U16 u16Reg)
307 {
308 if ((u16Reg % 2) == 0) // low byte
309 {
310 return _LOWBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
311 }
312 else // high byte
313 {
314 u16Reg -= 1;
315 return _HIGHBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
316 }
317 }
318
319 void _JPD_WriteByte(MS_U16 u16Reg, MS_U8 u8Value)
320 {
321 if ((u16Reg % 2) == 0) // low byte
322 {
323 _RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))
324 = u8Value | (_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))&0xFF00);
325 }
326 else // high byte
327 {
328 u16Reg -= 1 ;
329 _RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))
330 = (u8Value<<8) | (_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))&0x00FF);
331 }
332 }
333
334 MS_U16 _JPD_Read2Byte(MS_U16 u16Reg)
335 {
336 MS_U16 u16RegData;
337
338 if ((u16Reg % 2) == 0) // low byte
339 {
340 u16RegData = _RIU_REG16(JPD_RIU_MAP+((u16Reg)*2));
341 }
342 else // high byte
343 {
344 //0x2F05
345 u16Reg = u16Reg - 1;
346 u16RegData = _HIGHBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
347 u16Reg = u16Reg + 2;
348 u16RegData |= _LOWBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
349 }
350
351 return (u16RegData);
352 }
353
354 void _JPD_Write2Byte(MS_U16 u16Reg, MS_U16 u16Value)
355 {
356 if ((u16Reg % 2) == 0) // low byte
357 {
358 _RIU_REG16(JPD_RIU_MAP + ((u16Reg)*2)) = u16Value;
359 }
360 else // high byte
361 {
362 _JPD_WriteByte(u16Reg, (MS_U8)(u16Value&0x00FF));
363 _JPD_WriteByte(u16Reg+1, (MS_U8)(u16Value>>8));
364 }
365 }
366
367 MS_U32 _JPD_Read4Byte(MS_U16 u16Reg)
368 {
369 MS_U32 u32RegData = 0;
370
371 if ((u16Reg % 2) == 0) // low byte
372 {
373 u32RegData |= _JPD_Read2Byte(u16Reg);
374 u32RegData |= (_JPD_Read2Byte(u16Reg+2) << 16);
375 }
376 else // high byte
377 {
378 u32RegData |= _JPD_ReadByte(u16Reg);
379 u32RegData |= (_JPD_Read2Byte(u16Reg+1) << 8);
380 u32RegData |= (_JPD_ReadByte(u16Reg+3) << 24);
381 }
382
383 return (u32RegData);
384 }
385
386 void _JPD_Write4Byte(MS_U16 u16Reg, MS_U32 u32Value)
387 {
388 if ((u16Reg % 2) == 0) // low byte
389 {
390 _JPD_Write2Byte(u16Reg, (MS_U16)u32Value);
391 _JPD_Write2Byte(u16Reg+2, (MS_U16)(u32Value>>16));
392 }
393 else // high byte
394 {
395 _JPD_WriteByte(u16Reg, (MS_U8)(u32Value));
396 _JPD_Write2Byte(u16Reg+1, (MS_U16)(u32Value>>8));
397 _JPD_WriteByte(u16Reg+3, (MS_U8)(u32Value>>24));
398 }
399 }
400
401 /******************************************************************************/
402 ///
403 ///@param value \b IN
404 ///@param value \b OUT
405 ///@return status
406 /******************************************************************************/
407 void __HAL_JPD_Write4Byte(MS_U16 u16Reg, MS_U32 u32Value)
408 {
409 _JPD_Write4Byte(u16Reg, u32Value);
410
411 if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_REG)
412 {
413 MS_U32 read_value = _JPD_Read4Byte(u16Reg);
414 if(u32Value != read_value)
415 printf("Write Four Byte Failed!! Reg = 0x%04X, write_value = 0x%lX, read_value = 0x%lX\n", u16Reg, u32Value, read_value);
416 }
417 // WRITE_LONG(u16Reg, u32Value);
418 }
419
420 /******************************************************************************/
421 ///
422 ///@param value \b IN
423 ///@param value \b OUT
424 ///@return status
425 /******************************************************************************/
426 MS_U32 __HAL_JPD_Read4Byte(MS_U16 u16Reg)
427 {
428 return _JPD_Read4Byte(u16Reg);
429 // return READ_LONG(u16Reg);
430 }
431
432 /******************************************************************************/
433 ///
434 ///@param value \b IN
435 ///@param value \b OUT
436 ///@return status
437 /******************************************************************************/
438 void __HAL_JPD_Write2Byte(MS_U16 u16Reg, MS_U16 u16Value)
439 {
440 _JPD_Write2Byte(u16Reg, u16Value);
441
442 if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_REG)
443 {
444 MS_U16 read_value = _JPD_Read2Byte(u16Reg);
445 if(u16Value != read_value)
446 printf("Write Two Byte Failed!! Reg = 0x%04X, write_value = 0x%04X, read_value = 0x%04X\n", u16Reg, u16Value, read_value);
447 }
448 // WRITE_WORD(u16Reg, u16Value);
449 }
450
451 /******************************************************************************/
452 ///
453 ///@param value \b IN
454 ///@param value \b OUT
455 ///@return status
456 /******************************************************************************/
457 MS_U16 __HAL_JPD_Read2Byte(MS_U16 u16Reg)
458 {
459 return _JPD_Read2Byte(u16Reg);
460 // return READ_WORD(u16Reg);
461 }
462
463 /******************************************************************************/
464 ///
465 ///@param value \b IN
466 ///@param value \b OUT
467 ///@return status
468 /******************************************************************************/
469 void __HAL_JPD_WriteByte(MS_U16 u16Reg, MS_U8 u8Value)
470 {
471 _JPD_WriteByte(u16Reg, u8Value);
472
473 if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_REG)
474 {
475 MS_U8 read_value = _JPD_ReadByte(u16Reg);
476 if(u8Value != read_value)
477 printf("Write Two Byte Failed!! Reg = 0x%04X, write_value = 0x%04X, read_value = 0x%04X\n", u16Reg, u8Value, read_value);
478 }
479 // WRITE_BYTE(u16Reg, u8Value);
480 }
481
482 /******************************************************************************/
483 ///
484 ///@param value \b IN
485 ///@param value \b OUT
486 ///@return status
487 /******************************************************************************/
488 MS_U8 __HAL_JPD_ReadByte(MS_U16 u16Reg)
489 {
490 return _JPD_ReadByte(u16Reg);
491 // return READ_BYTE(u16Reg);
492 }
493
494 /******************************************************************************/
495 ///
496 ///@param value \b IN
497 ///@param value \b OUT
498 ///@return status
499 /******************************************************************************/
500 void __HAL_JPD_WriteBit(MS_U16 u16Reg, MS_BOOL status, MS_U8 u8Bit)
501 {
502 MS_U8 u8Tmp = __HAL_JPD_ReadByte(u16Reg);
503 if (status)
504 u8Tmp |= u8Bit;
505 else
506 u8Tmp &= (~u8Bit);
507 __HAL_JPD_WriteByte(u16Reg, u8Tmp);
508 }
509
510 /******************************************************************************/
511 ///
512 ///@param value \b IN
513 ///@param value \b OUT
514 ///@return status
515 /******************************************************************************/
516 MS_U8 __HAL_JPD_ReadBit(MS_U16 u16Reg, MS_U8 u8Bit)
517 {
518 MS_U8 u8Tmp = __HAL_JPD_ReadByte(u16Reg);
519 return (u8Tmp & u8Bit);
520 }
521 #endif
522
523
524 //-------------------------------------------------------------------------------------------------
525 // Global Functions
526 //-------------------------------------------------------------------------------------------------
527
528 /******************************************************************************/
529 ///
530 ///@param value \b IN
531 ///@param value \b OUT
532 ///@return status
533 /******************************************************************************/
HAL_JPD_SetMIU(MS_U8 u8Idx)534 void HAL_JPD_SetMIU(MS_U8 u8Idx)
535 {
536 #if (ENABLE_TEST_18_miu_sel_128M==true) \
537 ||(ENABLE_TEST_18_miu_sel_64M==true) \
538 ||(ENABLE_TEST_18_miu_sel_32M==true)
539 // This code is reserved for verification code TEST_18_miu_sel
540 // The value of BK_JPD_MCONFIG+1 would be modified at JPEG_StartDecode
541 // So we need to modify there too.
542 __HAL_JPD_WriteBit(JPD_MIU1_MIU_SEL2+1, 1,JPD_MIU1_CLIENT_JPD);
543 // __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 0, JPD_MIU_SEL); // 0 1
544 #if (ENABLE_TEST_18_miu_sel_128M==true)
545 __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 1, JPD_MIU_SEL); // 0 1 0 1
546 #elif (ENABLE_TEST_18_miu_sel_64M==true)
547 __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 2, JPD_MIU_SEL); // 0 1 0 1 0 1 0 1
548 #else
549 __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 3, JPD_MIU_SEL); // 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
550 #endif
551 #else
552 if(0 == __HAL_JPD_ReadBit(JPD_MIU1_MIU_SEL2+1, JPD_MIU1_CLIENT_JPD))
553 {
554 if(u8Idx)
555 {
556 __HAL_JPD_WriteBit(JPD_MIU0_MIU_SEL2+1, 1, JPD_MIU0_CLIENT_JPD);
557 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMIU : JPD_MIU0_MIU_SEL2 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU0_MIU_SEL2));
558 }
559 else
560 {
561 __HAL_JPD_WriteBit(JPD_MIU0_MIU_SEL2+1, 0, JPD_MIU0_CLIENT_JPD);
562 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMIU : JPD_MIU0_MIU_SEL2 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU0_MIU_SEL2));
563 }
564 }
565 else
566 {
567 __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 0, JPD_MIU_SEL);
568 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMIU : miu_hw_msel_en is active, BK_JPD_MCONFIG : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MCONFIG));
569 }
570
571 #endif
572 }
573
574 /******************************************************************************/
575 ///
576 ///@param value \b IN
577 ///@param value \b OUT
578 ///@return status
579 /******************************************************************************/
HAL_JPD_Set_S_Config(MS_U16 u16Value)580 void HAL_JPD_Set_S_Config(MS_U16 u16Value)
581 {
582 JPD_DEBUG_HAL_MSG("HAL_JPD_Set_S_Config : 0x%04X\n", u16Value);
583 __HAL_JPD_Write2Byte(BK_JPD_SCONFIG, u16Value);
584 JPD_DEBUG_HAL_MSG("HAL_JPD_Get_S_Config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_SCONFIG));
585 }
586
587 /******************************************************************************/
588 ///
589 ///@param value \b IN
590 ///@param value \b OUT
591 ///@return status
592 /******************************************************************************/
HAL_JPD_Get_S_Config(void)593 MS_U16 HAL_JPD_Get_S_Config(void)
594 {
595 return __HAL_JPD_Read2Byte(BK_JPD_SCONFIG);
596 }
597
598 /******************************************************************************/
599 ///
600 ///@param value \b IN
601 ///@param value \b OUT
602 ///@return status
603 /******************************************************************************/
HAL_JPD_Set_M_Config(MS_U16 u16Value)604 void HAL_JPD_Set_M_Config(MS_U16 u16Value)
605 {
606 JPD_DEBUG_HAL_MSG("HAL_JPD_Set_M_Config : 0x%04X\n", u16Value);
607 __HAL_JPD_Write2Byte(BK_JPD_MCONFIG, u16Value);
608 JPD_DEBUG_HAL_MSG("HAL_JPD_Get_M_Config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MCONFIG));
609 }
610
611 /******************************************************************************/
612 ///
613 ///@param value \b IN
614 ///@param value \b OUT
615 ///@return status
616 /******************************************************************************/
HAL_JPD_Get_M_Config(void)617 MS_U16 HAL_JPD_Get_M_Config(void)
618 {
619 return __HAL_JPD_Read2Byte(BK_JPD_MCONFIG);
620 }
621
622 /******************************************************************************/
623 ///
624 ///@param value \b IN
625 ///@param value \b OUT
626 ///@return status
627 /******************************************************************************/
HAL_JPD_SetIntEn(MS_U16 u16Value)628 void HAL_JPD_SetIntEn(MS_U16 u16Value)
629 {
630 JPD_DEBUG_HAL_MSG("HAL_JPD_SetIntEn : 0x%04X\n", u16Value);
631 __HAL_JPD_Write2Byte(BK_JPD_INTEN, u16Value);
632 JPD_DEBUG_HAL_MSG("HAL_JPD_GetIntEn : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_INTEN));
633 }
634
635 /******************************************************************************/
636 ///
637 ///@param value \b IN
638 ///@param value \b OUT
639 ///@return status
640 /******************************************************************************/
HAL_JPD_SetMRCBufFloorLow(MS_U16 u16Value)641 void HAL_JPD_SetMRCBufFloorLow(MS_U16 u16Value)
642 {
643 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufFloorLow : 0x%04X\n", u16Value);
644 __HAL_JPD_Write2Byte(BK_JPD_RBUF_FLOOR_L, u16Value);
645 JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufFloorLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_FLOOR_L));
646 }
647
648 /******************************************************************************/
649 ///
650 ///@param value \b IN
651 ///@param value \b OUT
652 ///@return status
653 /******************************************************************************/
HAL_JPD_SetMRCBufFloorHigh(MS_U16 u16Value)654 void HAL_JPD_SetMRCBufFloorHigh(MS_U16 u16Value)
655 {
656 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufFloorHigh : 0x%04X\n", u16Value);
657 __HAL_JPD_Write2Byte(BK_JPD_RBUF_FLOOR_H, u16Value);
658 JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufFloorHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_FLOOR_H));
659 }
660
661 /******************************************************************************/
662 ///
663 ///@param value \b IN
664 ///@param value \b OUT
665 ///@return status
666 /******************************************************************************/
HAL_JPD_SetMRCBufCeilLow(MS_U16 u16Value)667 void HAL_JPD_SetMRCBufCeilLow(MS_U16 u16Value)
668 {
669 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufCeilLow : 0x%04X\n", u16Value);
670 __HAL_JPD_Write2Byte(BK_JPD_RBUF_CEIL_L, u16Value);
671 JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufCeilLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_CEIL_L));
672 }
673
674 /******************************************************************************/
675 ///
676 ///@param value \b IN
677 ///@param value \b OUT
678 ///@return status
679 /******************************************************************************/
HAL_JPD_SetMRCBufCeilHigh(MS_U16 u16Value)680 void HAL_JPD_SetMRCBufCeilHigh(MS_U16 u16Value)
681 {
682 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufCeilHigh : 0x%04X\n", u16Value);
683 __HAL_JPD_Write2Byte(BK_JPD_RBUF_CEIL_H, u16Value);
684 JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufCeilHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_CEIL_H));
685 }
686
687 /******************************************************************************/
688 ///
689 ///@param value \b IN
690 ///@param value \b OUT
691 ///@return status
692 /******************************************************************************/
HAL_JPD_SetRCSMAddrLow(MS_U16 u16Value)693 void HAL_JPD_SetRCSMAddrLow(MS_U16 u16Value)
694 {
695 JPD_DEBUG_HAL_MSG("HAL_JPD_SetRCSMAddrLow : 0x%04X\n", u16Value);
696 __HAL_JPD_Write2Byte(BK_JPD_RCSMADR_L, u16Value);
697 JPD_DEBUG_HAL_MSG("HAL_JPD_GetRCSMAddrLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RCSMADR_L));
698 }
699
700 /******************************************************************************/
701 ///
702 ///@param value \b IN
703 ///@param value \b OUT
704 ///@return status
705 /******************************************************************************/
HAL_JPD_SetRCSMAddrHigh(MS_U16 u16Value)706 void HAL_JPD_SetRCSMAddrHigh(MS_U16 u16Value)
707 {
708 JPD_DEBUG_HAL_MSG("HAL_JPD_SetRCSMAddrHigh : 0x%04X\n", u16Value);
709 __HAL_JPD_Write2Byte(BK_JPD_RCSMADR_H, u16Value);
710 JPD_DEBUG_HAL_MSG("HAL_JPD_GetRCSMAddrHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RCSMADR_H));
711 }
712
713 /******************************************************************************/
714 ///
715 ///@param value \b IN
716 ///@param value \b OUT
717 ///@return status
718 /******************************************************************************/
HAL_JPD_SetMWCBufStAddrLow(MS_U16 u16Value)719 void HAL_JPD_SetMWCBufStAddrLow(MS_U16 u16Value)
720 {
721 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMWCBufStAddrLow : 0x%04X\n", u16Value);
722 __HAL_JPD_Write2Byte(BK_JPD_MWBF_SADR_L, u16Value);
723 JPD_DEBUG_HAL_MSG("HAL_JPD_GetMWCBufStAddrLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWBF_SADR_L));
724 }
725
726 /******************************************************************************/
727 ///
728 ///@param value \b IN
729 ///@param value \b OUT
730 ///@return status
731 /******************************************************************************/
HAL_JPD_SetMWCBufStAddrHigh(MS_U16 u16Value)732 void HAL_JPD_SetMWCBufStAddrHigh(MS_U16 u16Value)
733 {
734 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMWCBufStAddrHigh : 0x%04X\n", u16Value);
735 __HAL_JPD_Write2Byte(BK_JPD_MWBF_SADR_H, u16Value);
736 JPD_DEBUG_HAL_MSG("HAL_JPD_GetMWCBufStAddrHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWBF_SADR_H));
737 }
738
739 /******************************************************************************/
740 ///
741 ///@param value \b IN
742 ///@param value \b OUT
743 ///@return status
744 /******************************************************************************/
HAL_JPD_SetPic_H(MS_U16 u16Value)745 void HAL_JPD_SetPic_H(MS_U16 u16Value)
746 {
747 JPD_DEBUG_HAL_MSG("HAL_JPD_SetPic_H : 0x%04X\n", u16Value);
748 __HAL_JPD_Write2Byte(BK_JPD_PIC_H, u16Value);
749 JPD_DEBUG_HAL_MSG("HAL_JPD_GetPic_H : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_PIC_H));
750 }
751
752 /******************************************************************************/
753 ///
754 ///@param value \b IN
755 ///@param value \b OUT
756 ///@return status
757 /******************************************************************************/
HAL_JPD_SetPic_V(MS_U16 u16Value)758 void HAL_JPD_SetPic_V(MS_U16 u16Value)
759 {
760 JPD_DEBUG_HAL_MSG("HAL_JPD_SetPic_V : 0x%04X\n", u16Value);
761 __HAL_JPD_Write2Byte(BK_JPD_PIC_V, u16Value);
762 JPD_DEBUG_HAL_MSG("HAL_JPD_GetPic_V : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_PIC_V));
763 }
764
765 /******************************************************************************/
766 ///
767 ///@param value \b IN
768 ///@param value \b OUT
769 ///@return status
770 /******************************************************************************/
HAL_JPD_SetEventFlag(MS_U16 u16Value)771 void HAL_JPD_SetEventFlag(MS_U16 u16Value)
772 {
773 JPD_DEBUG_HAL_MSG("HAL_JPD_SetEventFlag : 0x%04X\n", u16Value);
774 __HAL_JPD_Write2Byte(BK_JPD_EVENTFLAG, u16Value);
775 JPD_DEBUG_HAL_MSG("HAL_JPD_GetEventFlag : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_EVENTFLAG));
776 }
777
778 /******************************************************************************/
779 ///
780 ///@param value \b IN
781 ///@param value \b OUT
782 ///@return status
783 /******************************************************************************/
HAL_JPD_GetEventFlag(void)784 MS_U16 HAL_JPD_GetEventFlag(void)
785 {
786 return __HAL_JPD_Read2Byte(BK_JPD_EVENTFLAG);
787 }
788
789 /******************************************************************************/
790 ///
791 ///@param value \b IN
792 ///@param value \b OUT
793 ///@return status
794 /******************************************************************************/
HAL_JPD_SetROI_H(MS_U16 u16Value)795 void HAL_JPD_SetROI_H(MS_U16 u16Value)
796 {
797 JPD_DEBUG_HAL_MSG("HAL_JPD_SetROI_H : 0x%04X\n", u16Value);
798 __HAL_JPD_Write2Byte(BK_JPD_ROI_H, u16Value);
799 JPD_DEBUG_HAL_MSG("HAL_JPD_GetROI_H : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_H));
800 }
801
802 /******************************************************************************/
803 ///
804 ///@param value \b IN
805 ///@param value \b OUT
806 ///@return status
807 /******************************************************************************/
HAL_JPD_SetROI_V(MS_U16 u16Value)808 void HAL_JPD_SetROI_V(MS_U16 u16Value)
809 {
810 JPD_DEBUG_HAL_MSG("HAL_JPD_SetROI_V : 0x%04X\n", u16Value);
811 __HAL_JPD_Write2Byte(BK_JPD_ROI_V, u16Value);
812 JPD_DEBUG_HAL_MSG("HAL_JPD_GetROI_V : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_V));
813 }
814
815 /******************************************************************************/
816 ///
817 ///@param value \b IN
818 ///@param value \b OUT
819 ///@return status
820 /******************************************************************************/
HAL_JPD_SetROIWidth(MS_U16 u16Value)821 void HAL_JPD_SetROIWidth(MS_U16 u16Value)
822 {
823 JPD_DEBUG_HAL_MSG("HAL_JPD_SetROIWidth : 0x%04X\n", u16Value);
824 __HAL_JPD_Write2Byte(BK_JPD_ROI_WIDTH, u16Value);
825 JPD_DEBUG_HAL_MSG("HAL_JPD_GetROIWidth : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_WIDTH));
826 }
827
828 /******************************************************************************/
829 ///
830 ///@param value \b IN
831 ///@param value \b OUT
832 ///@return status
833 /******************************************************************************/
HAL_JPD_SetROIHeight(MS_U16 u16Value)834 void HAL_JPD_SetROIHeight(MS_U16 u16Value)
835 {
836 JPD_DEBUG_HAL_MSG("HAL_JPD_SetROIHeight : 0x%04X\n", u16Value);
837 __HAL_JPD_Write2Byte(BK_JPD_ROI_HEIGHT, u16Value);
838 JPD_DEBUG_HAL_MSG("HAL_JPD_GetROIHeight : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_HEIGHT));
839 }
840
841 #if 0 // Unused function
842 /******************************************************************************/
843 ///
844 ///@param value \b IN
845 ///@param value \b OUT
846 ///@return status
847 /******************************************************************************/
848 MS_U16 HAL_JPD_GetCurMadrLow(void)
849 {
850 return __HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_L);
851 }
852
853 /******************************************************************************/
854 ///
855 ///@param value \b IN
856 ///@param value \b OUT
857 ///@return status
858 /******************************************************************************/
859 MS_U16 HAL_JPD_GetCurMadrHigh(void)
860 {
861 return __HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_H);
862 }
863 #endif
864
865 /******************************************************************************/
866 ///
867 ///@param value \b IN
868 ///@param value \b OUT
869 ///@return status
870 /******************************************************************************/
HAL_JPD_SetClock(MS_U16 u16Value)871 void HAL_JPD_SetClock(MS_U16 u16Value)
872 {
873 JPD_DEBUG_HAL_MSG("HAL_JPD_SetClock : 0x%04X\n", u16Value);
874 __HAL_JPD_Write2Byte(JPD_CLOCK, u16Value);
875 JPD_DEBUG_HAL_MSG("HAL_JPD_GetClock : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_CLOCK));
876 }
877
878 /******************************************************************************/
879 ///
880 ///@param value \b IN
881 ///@param value \b OUT
882 ///@return status
883 /******************************************************************************/
HAL_JPD_GetClock(void)884 MS_U16 HAL_JPD_GetClock(void)
885 {
886 return __HAL_JPD_Read2Byte(JPD_CLOCK);
887 }
888
889 /******************************************************************************/
890 ///
891 ///@param value \b IN
892 ///@param value \b OUT
893 ///@return status
894 /******************************************************************************/
HAL_JPD_PowerOn(void)895 void HAL_JPD_PowerOn(void)
896 {
897 MS_U16 u16reg_val;
898 //u16reg_val = MDrv_Read2Byte(_u16JPDClock_Addr);
899 u16reg_val = __HAL_JPD_Read2Byte(JPD_CLOCK);
900 u16reg_val = u16reg_val & 0xFFF2;
901 u16reg_val |= 0x000C; // set JPD disable [8] : 0, [3:2] : 11 192MHz
902 //MDrv_Write2Byte(_u16JPDClock_Addr, reg_val);
903 JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOn : SetClock : 0x%04X\n", u16reg_val);
904 __HAL_JPD_Write2Byte(JPD_CLOCK, u16reg_val);
905 JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOn : GetClock : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_CLOCK));
906
907
908 #if 0 // DEBUG
909 printf (" TSP STC : = 0x%lx\n", (MS_U32)(__HAL_JPD_Read2Byte(REG_TSP_STC_L) | (__HAL_JPD_Read2Byte(REG_TSP_STC_H) << 16))/90);
910 #endif
911 }
912
913 /******************************************************************************/
914 ///
915 ///@param value \b IN
916 ///@param value \b OUT
917 ///@return status
918 /******************************************************************************/
HAL_JPD_PowerOff(void)919 void HAL_JPD_PowerOff(void)
920 {
921 MS_U16 u16reg_val;
922 //u16reg_val = MDrv_Read2Byte(_u16JPDClock_Addr);
923 u16reg_val = __HAL_JPD_Read2Byte(JPD_CLOCK);
924 u16reg_val = u16reg_val & 0xFFF2;
925 u16reg_val |= 0x000D; // set JPD disable [8] : 1, [3:2] : 11 192MHz
926 //MDrv_Write2Byte(_u16JPDClock_Addr, reg_val);
927 JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOff : SetClock : 0x%04X\n", u16reg_val);
928 __HAL_JPD_Write2Byte(JPD_CLOCK, u16reg_val);
929 JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOff : GetClock : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_CLOCK));
930 }
931
932 /******************************************************************************/
933 ///
934 ///@param value \b IN
935 ///@param value \b OUT
936 ///@return status
937 /******************************************************************************/
HAL_JPD_InitRegBase(void)938 void HAL_JPD_InitRegBase(void)
939 {
940 MS_U32 u32NonPMBankSize;
941 if(!MDrv_MMIO_GetBASE(&u32JPDRiuBaseAdd, &u32NonPMBankSize, MS_MODULE_JPD))
942 {
943 JPD_DEBUG_HAL_ERR("Get RIUreg base Failed!!!\n");
944 }
945 else
946 {
947 JPD_DEBUG_HAL_MSG("RIUreg base = 0x%lX, length = %lu\n", u32JPDRiuBaseAdd, u32NonPMBankSize);
948 }
949 }
950
951 /******************************************************************************/
952 ///
953 ///@param value \b IN
954 ///@param value \b OUT
955 ///@return none
956 /******************************************************************************/
HAL_JPD_CreateMutex(void)957 void HAL_JPD_CreateMutex(void)
958 {
959 __HAL_JPD_MutexCreate();
960 }
961
962 /******************************************************************************/
963 ///
964 ///@param value \b IN
965 ///@param value \b OUT
966 ///@return none
967 /******************************************************************************/
HAL_JPD_DeleteMutex(void)968 void HAL_JPD_DeleteMutex(void)
969 {
970 __HAL_JPD_MutexDelete();
971 }
972
973 /******************************************************************************/
974 ///
975 ///@param value \b IN
976 ///@param value \b OUT
977 ///@return status
978 /******************************************************************************/
HAL_JPD_SetRSTIntv(MS_U16 u16Value)979 void HAL_JPD_SetRSTIntv(MS_U16 u16Value)
980 {
981 JPD_DEBUG_HAL_MSG("HAL_JPD_SetRSTIntv : 0x%04X\n", u16Value);
982 __HAL_JPD_Write2Byte(BK_JPD_RSTINTV, u16Value);
983 JPD_DEBUG_HAL_MSG("HAL_JPD_GetRSTIntv : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RSTINTV));
984 }
985
986 /******************************************************************************/
987 ///
988 ///@param value \b IN
989 ///@param value \b OUT
990 ///@return status
991 /******************************************************************************/
HAL_JPD_GetCurVidx(void)992 MS_U16 HAL_JPD_GetCurVidx(void)
993 {
994 return __HAL_JPD_Read2Byte(BK_JPD_CUR_VIDX);
995 }
996
997 /******************************************************************************/
998 ///
999 ///@param value \b IN
1000 ///@param value \b OUT
1001 ///@return status
1002 /******************************************************************************/
HAL_JPD_Set_TID_Addr(MS_U16 u16Value)1003 void HAL_JPD_Set_TID_Addr(MS_U16 u16Value)
1004 {
1005 JPD_DEBUG_HAL_MSG("HAL_JPD_Set_TID_Addr : 0x%04X\n", u16Value);
1006 __HAL_JPD_Write2Byte(BK_JPD_TID_ADR, u16Value);
1007 JPD_DEBUG_HAL_MSG("HAL_JPD_Get_TID_Addr : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_TID_ADR));
1008 }
1009
1010 /******************************************************************************/
1011 ///
1012 ///@param value \b IN
1013 ///@param value \b OUT
1014 ///@return status
1015 /******************************************************************************/
HAL_JPD_Set_TID_Dat(MS_U16 u16Value)1016 void HAL_JPD_Set_TID_Dat(MS_U16 u16Value)
1017 {
1018 __HAL_JPD_Write2Byte(BK_JPD_TID_DAT, u16Value);
1019 }
1020
HAL_JPD_Get_TID_Dat(void)1021 MS_U16 HAL_JPD_Get_TID_Dat(void)
1022 {
1023 return __HAL_JPD_Read2Byte(BK_JPD_TID_DAT);
1024 }
1025
1026 /******************************************************************************/
1027 ///
1028 ///@param value \b IN
1029 ///@param value \b OUT
1030 ///@return none
1031 /******************************************************************************/
HAL_JPD_SetDbgLevel(MS_U8 u8DbgLevel)1032 void HAL_JPD_SetDbgLevel(MS_U8 u8DbgLevel)
1033 {
1034 _u8JPDHalDbgLevel = u8DbgLevel;
1035 }
1036
1037 /******************************************************************************/
1038 ///
1039 ///@param value \b IN
1040 ///@param value \b OUT
1041 ///@return none
1042 /******************************************************************************/
HAL_JPD_GetLibVer(JPD_HAL_Version * pHalVer)1043 void HAL_JPD_GetLibVer(JPD_HAL_Version *pHalVer)
1044 {
1045 pHalVer->pu8HalVer = _pu8HalVer;
1046 pHalVer->pu8FwVer = _pu8FwVer;
1047 }
1048
1049 /******************************************************************************/
1050 ///Reset JPD
1051 ///@param value \b IN
1052 ///@param value \b OUT
1053 ///@return none
1054 /******************************************************************************/
HAL_JPD_Rst(void)1055 void HAL_JPD_Rst(void)
1056 {
1057 JPD_DEBUG_HAL_MSG("HAL_JPD_Rst : start!!\n");
1058 _HAL_JPD_SetMIUProtectMask(TRUE);
1059 //mif reset is high active
1060 HAL_JPD_Set_M_Config(HAL_JPD_Get_M_Config() | JPD_MIF_RST);
1061 HAL_JPD_Set_M_Config(HAL_JPD_Get_M_Config() & ~JPD_MIF_RST);
1062 // reset event flag
1063 __HAL_JPD_Write2Byte(BK_JPD_EVENTFLAG, JPD_EVENT_ALL);
1064 // reset : low active
1065 __HAL_JPD_Write2Byte(BK_JPD_SCONFIG, 0);
1066 __HAL_JPD_Write2Byte(BK_JPD_SCONFIG, JPD_SWRST);
1067 __HAL_JPD_Write2Byte(BK_JPD_INTEN, JPD_EVENT_ALL);
1068 JPD_DEBUG_HAL_MSG("Get S-config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_SCONFIG));
1069 JPD_DEBUG_HAL_MSG("Get M-config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MCONFIG));
1070 JPD_DEBUG_HAL_MSG("HAL Get INTEN : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_INTEN));
1071 JPD_DEBUG_HAL_MSG("HAL Get EVENTFLAG : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_EVENTFLAG));
1072 _HAL_JPD_SetMIUProtectMask(FALSE);
1073 JPD_DEBUG_HAL_MSG("HAL_JPD_Rst : end!!\n");
1074 }
1075
1076 /******************************************************************************/
1077 ///
1078 ///@param value \b IN
1079 ///@param value \b OUT
1080 ///@return none
1081 /******************************************************************************/
HAL_JPD_SetMWBuffLineNum(MS_U16 u16Value)1082 void HAL_JPD_SetMWBuffLineNum(MS_U16 u16Value)
1083 {
1084 JPD_DEBUG_HAL_MSG("HAL_JPD_SetMWBuffLineNum : 0x%04X\n", u16Value);
1085 __HAL_JPD_Write2Byte(BK_JPD_MWBF_LINE_NUM, u16Value);
1086 JPD_DEBUG_HAL_MSG("HAL_JPD_Get_MWBF_LINE_NUM : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWBF_LINE_NUM));
1087 }
1088
1089 /******************************************************************************/
1090 ///
1091 ///@param value \b IN
1092 ///@param value \b OUT
1093 ///@return status
1094 /******************************************************************************/
HAL_JPD_GetCurMRCAddr(void)1095 MS_U32 HAL_JPD_GetCurMRCAddr(void)
1096 {
1097 MS_U32 curMRCAddr = ((__HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_H) << 16) | __HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_L));
1098
1099 return curMRCAddr;
1100 }
1101
1102 /******************************************************************************/
1103 ///
1104 ///@param value \b IN
1105 ///@param value \b OUT
1106 ///@return status
1107 /******************************************************************************/
HAL_JPD_GetCurRow(void)1108 MS_U16 HAL_JPD_GetCurRow(void)
1109 {
1110 return __HAL_JPD_Read2Byte(BK_JPD_CUR_ROWP);
1111 }
1112
1113 /******************************************************************************/
1114 ///
1115 ///@param value \b IN
1116 ///@param value \b OUT
1117 ///@return status
1118 /******************************************************************************/
HAL_JPD_GetCurCol(void)1119 MS_U16 HAL_JPD_GetCurCol(void)
1120 {
1121 return __HAL_JPD_Read2Byte(BK_JPD_CUR_CLNP);
1122 }
1123
1124 /******************************************************************************/
1125 ///
1126 ///@param value \b IN
1127 ///@param value \b OUT
1128 ///@return none
1129 /******************************************************************************/
HAL_JPD_SetWriteProtect(MS_BOOL enable)1130 void HAL_JPD_SetWriteProtect(MS_BOOL enable)
1131 {
1132 __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, enable, JPD_MWC_WPEN);
1133 JPD_DEBUG_HAL_MSG("HAL_JPD_SetWriteProtect : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MCONFIG));
1134 }
1135
1136 /******************************************************************************/
1137 ///
1138 ///@param value \b IN
1139 ///@param value \b OUT
1140 ///@return status
1141 /******************************************************************************/
HAL_JPD_SetSpare(MS_U16 u16Value)1142 void HAL_JPD_SetSpare(MS_U16 u16Value)
1143 {
1144 JPD_DEBUG_HAL_MSG("HAL_JPD_SetSpare : 0x%04X\n", u16Value);
1145 __HAL_JPD_Write2Byte(BK_JPD_SPARE, u16Value);
1146 JPD_DEBUG_HAL_MSG("HAL_JPD_SetSpare : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_SPARE));
1147 }
1148
1149 /******************************************************************************/
1150 ///
1151 ///@param value \b IN
1152 ///@param value \b OUT
1153 ///@return status
1154 /******************************************************************************/
HAL_JPD_GetSpare(void)1155 MS_U16 HAL_JPD_GetSpare(void)
1156 {
1157 return __HAL_JPD_Read2Byte(BK_JPD_SPARE);
1158 }
1159
1160 #if USE_MJPEG_FUNCTION
1161 /*================================ MJPEG =====================================*/
1162
1163 /******************************************************************************/
1164 ///Stop VPU
1165 /******************************************************************************/
HAL_JPD_StopVPU(void)1166 void HAL_JPD_StopVPU(void)
1167 {
1168 //HAL_VPU_PowerCtrl(FALSE);
1169 HAL_VPU_DeInit();
1170 }
1171
1172 /******************************************************************************/
1173 ///Reset VPU
1174 ///@return success or fail
1175 /******************************************************************************/
HAL_JPD_RstVPU(void)1176 MS_BOOL HAL_JPD_RstVPU(void)
1177 {
1178 #if 1
1179 HAL_VPU_InitRegBase(u32JPDRiuBaseAdd);
1180
1181 return HAL_VPU_SwRst();
1182 #else
1183
1184 MS_U16 u16Timeout = 1000;
1185
1186 #ifdef MSOS_TYPE_ECOS
1187 __HAL_JPD_WriteByte(REG_CKG_SVD, (MS_U8)CKG_SVD_216MHZ);
1188 #elif defined(MSOS_TYPE_LINUX)
1189 __HAL_JPD_WriteByte(REG_CKG_SVD, (MS_U8)CKG_SVD_216MHZ);
1190 #else // NON-OS
1191 __HAL_JPD_WriteByte(REG_CKG_SVD, (MS_U8)CKG_SVD_240MHZ);
1192 #endif
1193 // T2 SVD RESET
1194 __HAL_JPD_WriteByte(REG_SVD_RESET, REG_SVD_RESET_SWRST | REG_SVD_RESET_CPURST);
1195 __HAL_JPD_DelayMs(1);
1196
1197 // Wait for reset done
1198 while(u16Timeout)
1199 {
1200 if((__HAL_JPD_ReadByte(REG_SVD_RESET) & (REG_SVD_RESET_SWRST_FIN|REG_SVD_RESET_CPURST_FIN))
1201 == (REG_SVD_RESET_SWRST_FIN|REG_SVD_RESET_CPURST_FIN))
1202 {
1203 break;
1204 }
1205 u16Timeout--;
1206 }
1207
1208 if(!u16Timeout) JPD_DEBUG_HAL_ERR(" HAL_JPD_RstVPU timeout\n");
1209
1210 return (u16Timeout>0) ? TRUE : FALSE;
1211 #endif
1212 }
1213
1214 /******************************************************************************/
1215 ///Release VPU
1216 /******************************************************************************/
HAL_JPD_ReleaseVPU(void)1217 void HAL_JPD_ReleaseVPU(void)
1218 {
1219 #if 1
1220 HAL_VPU_SwRstRelse();
1221 #else
1222 // Release REG_SVD_RESET_CPURST first
1223 __HAL_JPD_WriteBit(REG_SVD_RESET, FALSE, REG_SVD_RESET_CPURST);
1224 __HAL_JPD_DelayMs(1);
1225
1226 // Release REG_SVD_RESET_SWRST
1227 __HAL_JPD_WriteBit(REG_SVD_RESET, FALSE, REG_SVD_RESET_SWRST);
1228 __HAL_JPD_DelayMs(1);
1229 #endif
1230 }
1231
1232 /******************************************************************************/
1233 ///
1234 ///@param value \b IN
1235 ///@param value \b OUT
1236 ///@return status
1237 /******************************************************************************/
HAL_JPD_IsVPUOnMiu1(void)1238 MS_BOOL HAL_JPD_IsVPUOnMiu1(void)
1239 {
1240 if (__HAL_JPD_ReadByte(0x12F4) & JPD_BIT(6))
1241 return TRUE;
1242 return FALSE;
1243 }
1244
1245 /******************************************************************************/
1246 ///
1247 ///@param value \b IN
1248 ///@param value \b OUT
1249 ///@return status
1250 /******************************************************************************/
HAL_JPD_GetMiuBase(void)1251 MS_U32 HAL_JPD_GetMiuBase(void)
1252 {
1253 if (HAL_JPD_IsVPUOnMiu1())
1254 return HAL_MIU1_BASE;
1255
1256 return 0x00000000;
1257 }
1258
1259 extern MS_BOOL gbEnableTurboFWMode;
1260 /******************************************************************************/
1261 ///Load JPD Firmware for MJPEG
1262 ///@param u32Addr \b IN address to load firmware
1263 ///@return success or fail
1264 /******************************************************************************/
HAL_JPD_LoadCode(MS_PHYADDR u32Addr,MS_U32 u32Size,MS_PHYADDR u32BinAddr,MS_U8 u8FwSrcType)1265 MS_BOOL HAL_JPD_LoadCode(MS_PHYADDR u32Addr, MS_U32 u32Size, MS_PHYADDR u32BinAddr, MS_U8 u8FwSrcType)
1266 {
1267 MS_BOOL bNeedReloadFW = TRUE;
1268
1269 //Check whether need to reload fw or not
1270 if((TRUE == gbEnableTurboFWMode)
1271 && (FALSE == HAL_VPU_IsNeedReload(E_VPU_DECODER_MJPEG)))
1272 {
1273 bNeedReloadFW = FALSE;
1274 }
1275
1276 if(TRUE == bNeedReloadFW)
1277 {
1278 #if 0
1279 // VPU (available after T3)
1280 #else
1281 #if (USE_FW_HVD == 0)
1282 MS_U32 u32CodeSize;
1283 #endif
1284 // MS_U8 u8BDMAFlag;
1285 MS_U32 u32MiuBase = 0xFFFFFFFF;
1286
1287 //If we need to reload fw, need to reset vpu fw decoder type first.
1288 HAL_VPU_SetFWDecoder(E_VPU_DECODER_NONE);
1289
1290 //if (u32Addr != 0)
1291 if ((u32Addr & 0x7FF) != 0)
1292 {
1293 //JPD_DEBUG_HAL_ERR (" JPD Firmware load code address is not 0x00000000\n");
1294 JPD_DEBUG_HAL_ERR (" JPD Firmware load code address must be 2048 byte alignment!\n");
1295 return FALSE;
1296 }
1297 #if USE_FW_HVD
1298 JPD_DEBUG_HAL_MSG (" JPD Firmware load code address = 0x%lx\n", u32Addr);
1299 #else
1300 u32CodeSize = sizeof(u8FwJPD);
1301 JPD_DEBUG_HAL_MSG (" JPD Firmware load code address = 0x%lx\n", u32Addr);
1302 JPD_DEBUG_HAL_MSG (" JPD Firmware size = 0x%lx\n", u32CodeSize);
1303 #endif
1304
1305 #if 0 // Need to check if BDMA is ready or not
1306 // Use BDMA to copy firmware to correct address
1307 u8BDMAFlag = BDMACOPY_SRCMIU0 | BDMACOPY_ADDR_INC | BDMACOPY_CH1;
1308 // MIU judgement
1309 if (__HAL_JPD_ReadByte(0x12F4) & JPD_BIT(6))
1310 {
1311 u8BDMAFlag |= BDMACOPY_DSTMIU1;
1312 JPD_DEBUG_HAL_MSG (" VPU on MIU 1\n");
1313 }
1314 else
1315 {
1316 u8BDMAFlag |= BDMACOPY_DSTMIU0;
1317 JPD_DEBUG_HAL_MSG (" VPU on MIU 0\n");
1318 }
1319 MDrv_BDMA_COPY((MS_U32)&u8FwJPD[0], u32Addr, u32CodeSize, u8BDMAFlag);
1320 #else
1321
1322 #if 0
1323 if (HAL_JPD_IsVPUOnMiu1())
1324 {
1325 JPD_DEBUG_HAL_MSG (" VPU on MIU 1\n");
1326 u32Addr |= HAL_MIU1_BASE;
1327 }
1328 else
1329 {
1330 JPD_DEBUG_HAL_MSG (" VPU on MIU 0\n");
1331 }
1332 #endif
1333 u32MiuBase = u32Addr & HAL_MIU1_BASE;
1334 if (u32MiuBase)
1335 {
1336 JPD_DEBUG_HAL_MSG (" VPU on MIU 1\n");
1337 }
1338 else
1339 {
1340 JPD_DEBUG_HAL_MSG (" VPU on MIU 0\n");
1341 }
1342
1343 u32Addr = MS_PA2KSEG1((MS_U32)u32Addr); //PhysicalAddr to VirtualAddr
1344 u32BinAddr = MS_PA2KSEG1((MS_U32)u32BinAddr); //PhysicalAddr to VirtualAddr
1345 JPD_DEBUG_HAL_MSG (" Load JPD Firmware to 0x%lx\n", u32Addr);
1346
1347 #if USE_FW_HVD
1348 if (HAL_HVD_LoadCode(u32Addr, u32Size, u32BinAddr, u8FwSrcType) == FALSE)
1349 {
1350 JPD_DEBUG_HAL_ERR ("\n !!!Load Firmware Fail!!!\n\n");
1351 return FALSE;
1352 }
1353
1354 // Set Codec Type for HVD Firmware
1355 {
1356 volatile HVD_ShareMem *pHVDShareMem = NULL;
1357 pHVDShareMem = (HVD_ShareMem *)(u32Addr + HVD_SHARE_MEM_ST_OFFSET);
1358 pHVDShareMem->u32CodecType = E_HVD_Codec_MJPEG;
1359 }
1360 #else
1361 {
1362 MS_U32 ix;
1363 MS_U8 *pu8Fw = (MS_U8 *)(u32Addr);
1364 for (ix = 0; ix < u32CodeSize; ix++)
1365 {
1366 pu8Fw[ix] = u8FwJPD[ix];
1367 }
1368 }
1369 #endif
1370 #if 0
1371 {
1372 MS_U32 ix;
1373 MS_U8 *pu8Fw = (MS_U8 *)(u32Addr);
1374 for (ix = 0; ix < u32CodeSize; ix++)
1375 {
1376 if (pu8Fw[ix] != u8FwJPD[ix])
1377 {
1378 printf ("\n !!! Firmware data copy ERROR !!!\n");
1379 return FALSE;
1380 }
1381 }
1382 }
1383 #endif
1384 #endif
1385 #endif
1386 //When complete loading fw, set vpu fw decoder type
1387 HAL_VPU_SetFWDecoder(E_VPU_DECODER_MJPEG);
1388 }
1389
1390 return TRUE;
1391 }
1392
1393 /******************************************************************************/
1394 ///Config VPU
1395 ///@param u32StAddr \b IN: CPU binary code base address in DRAM.
1396 ///@param u8dlend_en \b IN: endian
1397 /// - 1, little endian
1398 /// - 0, big endian
1399 /******************************************************************************/
HAL_JPD_ConfigVPU(MS_PHYADDR u32StAddr,MS_U8 u8dlend_en)1400 void HAL_JPD_ConfigVPU(MS_PHYADDR u32StAddr, MS_U8 u8dlend_en)
1401 {
1402 #if 1
1403 HAL_VPU_CPUSetting(u32StAddr);
1404
1405 // MVD must be powered on to let vsync bypass to VPU
1406 HAL_MVD_RegSetBase(u32JPDRiuBaseAdd);
1407 //Set MVD Clock @ reg_CHIPTOP
1408 HAL_MVD_PowerCtrl(ENABLE);
1409 //Set MVD Clock aync
1410 // HAL_MVD_SetSyncClk(DISABLE);
1411 //MVD reset
1412 // HAL_MVD_RstHW();
1413
1414
1415 // Enable TSP for STC
1416 __HAL_JPD_Write2Byte(REG_TSP_CTRL, __HAL_JPD_Read2Byte(REG_TSP_CTRL) | REG_TSP_CPU_ENABLE | REG_TSP_SW_RSTZ);
1417 JPD_DEBUG_HAL_MSG(" Enable TSP for STC : [0x15F4] = 0x%x\n", __HAL_JPD_Read2Byte(REG_TSP_CTRL));
1418
1419 #else
1420 // get real MIU address
1421 u32StAddr = u32StAddr & JPD_MIU_ADDR_MASK;
1422
1423 JPD_DEBUG_HAL_MSG (" Set firmware address 0x%lx\n", u32StAddr);
1424
1425 // code base address
1426 __HAL_JPD_Write4Byte(REG_SVD_CPU_SDR_BASE_L, u32StAddr >> 4);
1427 // data offset
1428 __HAL_JPD_Write4Byte(REG_SVD_MIU_OFFSET_H0, u32StAddr >> 11);
1429
1430 __HAL_JPD_WriteByte(REG_SVD_LDEND_EN, (u8dlend_en & 0x01));
1431 #endif
1432 }
1433
1434
1435 /******************************************************************************/
1436 ///Check VPU MailBox ready or not
1437 ///@return TRUE or FALSE
1438 /// - TRUE, MailBox is free
1439 /// - FALSE, MailBox is busy
1440 ///@param u8MBox \b IN: MailBox to check
1441 /// - VPU_HI_MBOX0,
1442 /// - VPU_HI_MBOX1,
1443 /// - VPU_RISC_MBOX0,
1444 /// - VPU_RISC_MBOX1,
1445 /******************************************************************************/
HAL_JPD_IsVPUMBoxReady(MS_U8 u8MBox)1446 MS_BOOL HAL_JPD_IsVPUMBoxReady(MS_U8 u8MBox)
1447 {
1448 MS_BOOL bResult = FALSE;
1449 switch(u8MBox)
1450 {
1451 case VPU_HI_MBOX0:
1452 bResult = (__HAL_JPD_Read2Byte(VPU_REG_HI_MBOX_RDY) & VPU_REG_HI_MBOX0_RDY) ? FALSE : TRUE;
1453 break;
1454 case VPU_HI_MBOX1:
1455 bResult = (__HAL_JPD_Read2Byte(VPU_REG_HI_MBOX_RDY) & VPU_REG_HI_MBOX1_RDY) ? FALSE : TRUE;
1456 break;
1457 case VPU_RISC_MBOX0:
1458 bResult = (__HAL_JPD_Read2Byte(VPU_REG_RISC_MBOX_RDY) & VPU_REG_RISC_MBOX0_RDY) ? TRUE: FALSE;
1459 break;
1460 case VPU_RISC_MBOX1:
1461 bResult = (__HAL_JPD_Read2Byte(VPU_REG_RISC_MBOX_RDY) & VPU_REG_RISC_MBOX1_RDY) ? TRUE: FALSE;
1462 break;
1463 default:
1464 break;
1465 }
1466 return bResult;
1467 }
1468
1469 /******************************************************************************/
1470 ///Read message from VPU
1471 ///@return TRUE or FALSE
1472 /// - TRUE, success
1473 /// - FALSE, failed
1474 ///@param u8MBox \b IN: MailBox to read
1475 /// - VPU_RISC_MBOX0
1476 /// - VPU_RISC_MBOX1
1477 ///@param u32Msg \b OUT: message read
1478 /******************************************************************************/
HAL_JPD_ReadVPUMBox(MS_U8 u8MBox,MS_U32 * u32Msg)1479 MS_BOOL HAL_JPD_ReadVPUMBox(MS_U8 u8MBox, MS_U32 *u32Msg)
1480 {
1481 MS_BOOL bResult = TRUE;
1482 switch(u8MBox)
1483 {
1484 case VPU_RISC_MBOX0:
1485 *u32Msg = ((MS_U32)(__HAL_JPD_Read2Byte(VPU_REG_RISC_MBOX0_H)) << 16) |
1486 ((MS_U32)(__HAL_JPD_Read2Byte(VPU_REG_RISC_MBOX0_L)));
1487 break;
1488 case VPU_RISC_MBOX1:
1489 *u32Msg = ((MS_U32)(__HAL_JPD_Read2Byte(VPU_REG_RISC_MBOX1_H)) << 16) |
1490 ((MS_U32)(__HAL_JPD_Read2Byte(VPU_REG_RISC_MBOX1_L)));
1491 //__HAL_JPD_WriteBit(VPU_REG_RISC_MBOX_CLR, FALSE, VPU_REG_RISC_MBOX1_CLR);
1492 break;
1493 default:
1494 bResult = FALSE;
1495 break;
1496 }
1497 return bResult;
1498 }
1499
1500 ///-----------------------------------------------------------------------------
1501 /// Send message to VPU
1502 /// @return TRUE or FALSE
1503 /// - TRUE, Success
1504 /// - FALSE, Failed
1505 /// @param u8MBox \b IN: MailBox
1506 /// - VPU_HI_MBOX0,
1507 /// - VPU_HI_MBOX1,
1508 ///-----------------------------------------------------------------------------
HAL_JPD_SendVPUMBox(MS_U8 u8MBox,MS_U32 u32Msg)1509 MS_BOOL HAL_JPD_SendVPUMBox(MS_U8 u8MBox, MS_U32 u32Msg)
1510 {
1511 MS_BOOL bResult = TRUE;
1512 switch(u8MBox)
1513 {
1514 case VPU_HI_MBOX0:
1515 __HAL_JPD_Write4Byte(VPU_REG_HI_MBOX0_L, u32Msg);
1516 __HAL_JPD_WriteBit(VPU_REG_HI_MBOX_SET, TRUE, VPU_REG_HI_MBOX0_SET);
1517 break;
1518 case VPU_HI_MBOX1:
1519 __HAL_JPD_Write4Byte(VPU_REG_HI_MBOX1_L, u32Msg);
1520 __HAL_JPD_WriteBit(VPU_REG_HI_MBOX_SET, TRUE, VPU_REG_HI_MBOX1_SET);
1521 break;
1522 default:
1523 bResult = FALSE;
1524 break;
1525 }
1526 return bResult;
1527 }
1528
1529 ///-----------------------------------------------------------------------------
1530 /// Clear VPU RISC MBox
1531 /// @return TRUE or FALSE
1532 /// - TRUE, Success
1533 /// - FALSE, Failed
1534 /// @param u8MBox \b IN: MailBox
1535 /// - VPU_RISC_MBOX0,
1536 /// - VPU_RISC_MBOX1,
1537 ///-----------------------------------------------------------------------------
HAL_JPD_ClearVPUMBox(MS_U8 u8MBox,MS_BOOL bFlag)1538 MS_BOOL HAL_JPD_ClearVPUMBox(MS_U8 u8MBox, MS_BOOL bFlag)
1539 {
1540 MS_BOOL bResult = TRUE;
1541 switch(u8MBox)
1542 {
1543 case VPU_RISC_MBOX0:
1544 __HAL_JPD_WriteBit(VPU_REG_RISC_MBOX_CLR, bFlag, VPU_REG_RISC_MBOX0_CLR);
1545 break;
1546 case VPU_RISC_MBOX1:
1547 __HAL_JPD_WriteBit(VPU_REG_RISC_MBOX_CLR, bFlag, VPU_REG_RISC_MBOX1_CLR);
1548 break;
1549 default:
1550 bResult = FALSE;
1551 break;
1552 }
1553 return bResult;
1554 }
1555
HAL_JPD_InitVPU(MS_BOOL bInMIU1)1556 MS_BOOL HAL_JPD_InitVPU(MS_BOOL bInMIU1)
1557 {
1558 VPU_Init_Params VPUInitParams = { E_VPU_CLOCK_216MHZ, FALSE, -1, MSOS_WAIT_FOREVER, FALSE, E_VPU_DECODER_MJPEG};
1559 HAL_VPU_InitRegBase(u32JPDRiuBaseAdd);
1560
1561 if(bInMIU1)
1562 {
1563 VPUInitParams.bInMIU1 = TRUE;
1564 }
1565 else
1566 {
1567 VPUInitParams.bInMIU1 = FALSE;
1568 }
1569 return HAL_VPU_Init(&VPUInitParams);
1570 }
1571
HAL_JPD_Get_Chip_ID(void)1572 MJPEG_MSTAR_CHIP_ID HAL_JPD_Get_Chip_ID(void)
1573 {
1574 return E_MJPEG_MSTAR_CHIP_T8;
1575 }
1576
1577 #endif
1578
1579