xref: /utopia/UTPA2-700.0.x/modules/ojpd_vdec_v1/hal/maxim/jpd/halJPD.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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