xref: /utopia/UTPA2-700.0.x/modules/ojpd_vdec_v2/hal/M7821/jpd_ex/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 
119 // MJPEG
120 #define USE_FW_HVD      1
121 
122 #if USE_FW_HVD
123 #include "../hvd_ex/fwHVD_if.h"
124 #define JPD_FW_VERSION  "JPD.FW.00130062"
125 #else
126 #include "fwJPD.h"
127 #endif
128 
129 // For MVD Power On
130 void HAL_MVD_RegSetBase(MS_U32 u32Base);
131 void HAL_MVD_PowerCtrl(MS_BOOL bOn);
132 void HAL_MVD_SetSyncClk(MS_BOOL bEnable);
133 MS_BOOL HAL_MVD_RstHW(void);
134 
135 //-------------------------------------------------------------------------------------------------
136 //  Driver Compiler Options
137 //-------------------------------------------------------------------------------------------------
138 #define HAL_JPD_ENABLE      1
139 #define HAL_JPD_DISABLE     0
140 
141 #define HAL_JPD_MUTEX_SUPPORT   HAL_JPD_ENABLE
142 #define HAL_JPD_MIU_PROTECT     HAL_JPD_ENABLE
143 
144 
145 //-------------------------------------------------------------------------------------------------
146 //  Local Defines
147 //-------------------------------------------------------------------------------------------------
148 #define JPD_EVENT_ALL       0x7F
149 
150 #define __HAL_JPD_DelayMs(x)      do { MS_U32 ticks=0; while((ticks++)>(x*10)); } while(0)
151 
152 #define JPD_RIU_MAP u32JPDRiuBaseAdd  //obtain in init
153 
154 #define JPD_DEBUG_HAL_MSG(format, args...)  do{if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_MSG) printf(format, ##args);}while(0)
155 #define JPD_DEBUG_HAL_ERR(format, args...)  do{if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_ERR) printf(format, ##args);}while(0)
156 
157 #ifndef READ_BYTE
158 #define READ_BYTE(_reg)             (*(volatile MS_U8*)(_reg))
159 #define READ_WORD(_reg)             (*(volatile MS_U16*)(_reg))
160 #define READ_LONG(_reg)             (*(volatile MS_U32*)(_reg))
161 #define WRITE_BYTE(_reg, _val)      { (*((volatile MS_U8*)(_reg))) = (MS_U8)(_val); }
162 #define WRITE_WORD(_reg, _val)      { (*((volatile MS_U16*)(_reg))) = (MS_U16)(_val); }
163 #define WRITE_LONG(_reg, _val)      { (*((volatile MS_U32*)(_reg))) = (MS_U32)(_val); }
164 #endif
165 
166 #define JPD_READ_BYTE(addr)         READ_BYTE( (JPD_RIU_MAP + (addr)) )
167 #define JPD_READ_WORD(addr)         READ_WORD( (JPD_RIU_MAP + (addr)) )
168 #define JPD_WRITE_BYTE(addr, val)   WRITE_BYTE( (JPD_RIU_MAP + (addr)), (val) )
169 #define JPD_WRITE_WORD(addr, val)   WRITE_WORD( (JPD_RIU_MAP + (addr)), (val) )
170 
171 #define JPD_MACRO_START     do {
172 #define JPD_MACRO_END       } while (0)
173 
174 #define __HAL_JPD_ReadByte( u32Reg )   JPD_READ_BYTE(((u32Reg) << 1) - ((u32Reg) & 1))
175 
176 #define __HAL_JPD_Read2Byte( u32Reg )    (JPD_READ_WORD((u32Reg)<<1))
177 
178 #define __HAL_JPD_Read4Byte( u32Reg )   ( (MS_U32)JPD_READ_WORD((u32Reg)<<1) | ((MS_U32)JPD_READ_WORD(((u32Reg)+2)<<1)<<16 ) )
179 
180 #define __HAL_JPD_ReadBit( u32Reg, u8Mask )   (JPD_READ_BYTE(((u32Reg)<<1) - ((u32Reg) & 1)) & (u8Mask))
181 
182 #define __HAL_JPD_WriteBit( u32Reg, bEnable, u8Mask ) \
183     JPD_MACRO_START \
184     JPD_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) , (bEnable) ? (JPD_READ_BYTE(  (((u32Reg) <<1) - ((u32Reg) & 1))  ) |  (u8Mask)) : \
185                                 (JPD_READ_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) ) & ~(u8Mask))); \
186     JPD_MACRO_END
187 
188 #define __HAL_JPD_WriteByte( u32Reg, u8Val ) \
189     JPD_MACRO_START \
190     JPD_WRITE_BYTE(((u32Reg) << 1) - ((u32Reg) & 1), (u8Val)); \
191     JPD_MACRO_END
192 
193 #define __HAL_JPD_Write2Byte( u32Reg, u16Val ) \
194     JPD_MACRO_START \
195     if ( ((u32Reg) & 0x01) ) \
196     { \
197         JPD_WRITE_BYTE(((u32Reg) << 1) - 1, (MS_U8)((u16Val))); \
198         JPD_WRITE_BYTE(((u32Reg) + 1) << 1, (MS_U8)((u16Val) >> 8)); \
199     } \
200     else \
201     { \
202         JPD_WRITE_WORD( ((u32Reg)<<1) ,  u16Val); \
203     } \
204     JPD_MACRO_END
205 
206 #define __HAL_JPD_Write4Byte( u32Reg, u32Val ) \
207     JPD_MACRO_START \
208     if ((u32Reg) & 0x01) \
209     { \
210         JPD_WRITE_BYTE( ((u32Reg) << 1) - 1 ,  (u32Val)); \
211         JPD_WRITE_WORD( ((u32Reg) + 1)<<1 , ( (u32Val) >> 8)); \
212         JPD_WRITE_BYTE( (((u32Reg) + 3) << 1) ,  ((u32Val) >> 24)); \
213     } \
214     else \
215     { \
216         JPD_WRITE_WORD( (u32Reg)<<1 , (u32Val)); \
217         JPD_WRITE_WORD(  ((u32Reg) + 2)<<1 ,  ((u32Val) >> 16)); \
218     } \
219     JPD_MACRO_END
220 
221 //JPD mutex
222 #if (HAL_JPD_MUTEX_SUPPORT == HAL_JPD_ENABLE)
223 static MS_S32 _s32JPDMutexID = -1;
224 MS_U8 strJPD[10] = "JPD_Mutex";
225 
226 #define __HAL_JPD_MutexCreate() \
227     JPD_MACRO_START \
228     if( _s32JPDMutexID < 0 ) \
229     { \
230         _s32JPDMutexID = OSAL_JPD_MutexCreate( strJPD ); \
231     } \
232     JPD_MACRO_END
233 #define __HAL_JPD_MutexDelete() \
234     JPD_MACRO_START \
235     if( _s32JPDMutexID >= 0 ) \
236     { \
237         OSAL_JPD_MutexDelete(_s32JPDMutexID); \
238         _s32JPDMutexID = -1; \
239     } \
240     JPD_MACRO_END
241 #define  __HAL_JPD_MutexEntry() \
242     JPD_MACRO_START \
243     if( _s32JPDMutexID >= 0 ) \
244     { \
245         if (!OSAL_JPD_MutexObtain(_s32JPDMutexID, OSAL_JPD_MUTEX_TIMEOUT)) \
246         { \
247             JPD_DEBUG_HAL_MSG("[HAL JPD][%s][%06d] Mutex taking timeout\n", __FUNCTION__, __LINE__); \
248         } \
249     } \
250     JPD_MACRO_END
251 #define __HAL_JPD_MutexExit() \
252     JPD_MACRO_START \
253     if( _s32JPDMutexID >= 0 ) \
254     { \
255         OSAL_JPD_MutexRelease(_s32JPDMutexID); \
256     } \
257     JPD_MACRO_END
258 #else //HAL_JPD_MUTEX_SUPPORT
259 #define __HAL_JPD_MutexCreate()
260 #define __HAL_JPD_MutexDelete()
261 #define __HAL_JPD_MutexEntry()
262 #define __HAL_JPD_MutexExit()
263 #endif //HAL_JPD_MUTEX_SUPPORT
264 
265 #define MAX_MJPEG_DEC_NUM 2
266 
267 //-------------------------------------------------------------------------------------------------
268 //  Local Structurs
269 //-------------------------------------------------------------------------------------------------
270 
271 //-------------------------------------------------------------------------------------------------
272 //  Global Variables
273 //-------------------------------------------------------------------------------------------------
274 MS_U32 u32JPDRiuBaseAdd = 0x0;
275 
276 //-------------------------------------------------------------------------------------------------
277 //  Local Variables
278 //-------------------------------------------------------------------------------------------------
279 static MS_U8 _pu8HalVer[] = JPD_HAL_VERSION;
280 static MS_U8 _pu8FwVer[] = JPD_FW_VERSION;
281 static MS_U8 _u8JPDHalDbgLevel = E_JPD_DEBUG_HAL_NONE;
282 
283 //-------------------------------------------------------------------------------------------------
284 //  Debug Functions
285 //-------------------------------------------------------------------------------------------------
286 
287 //-------------------------------------------------------------------------------------------------
288 //  Local Functions
289 //-------------------------------------------------------------------------------------------------
_HAL_JPD_SetMIUProtectMask(MS_BOOL bEnable)290 static void _HAL_JPD_SetMIUProtectMask(MS_BOOL bEnable)
291 {
292 #if (HAL_JPD_MIU_PROTECT == HAL_JPD_ENABLE)
293     __HAL_JPD_WriteBit(JPD_MIU0_RQ2_MASK+1, bEnable, JPD_MIU0_CLIENT_JPD);
294     __HAL_JPD_WriteBit(JPD_MIU1_RQ2_MASK+1, bEnable, JPD_MIU1_CLIENT_JPD);
295 
296     JPD_DEBUG_HAL_MSG("_HAL_JPD_SetMIUProtectMask MIU0 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU0_RQ2_MASK));
297     JPD_DEBUG_HAL_MSG("_HAL_JPD_SetMIUProtectMask MIU1 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU1_RQ2_MASK));
298 #endif
299     return;
300 }
301 
302 #if 0
303 MS_U8 _JPD_ReadByte(MS_U16 u16Reg)
304 {
305     if ((u16Reg % 2) == 0) // low byte
306     {
307         return _LOWBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
308     }
309     else // high byte
310     {
311         u16Reg -= 1;
312         return _HIGHBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
313     }
314 }
315 
316 void _JPD_WriteByte(MS_U16 u16Reg, MS_U8 u8Value)
317 {
318     if ((u16Reg % 2) == 0) // low byte
319     {
320         _RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))
321             =  u8Value | (_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))&0xFF00);
322     }
323     else // high byte
324     {
325         u16Reg -= 1 ;
326         _RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))
327             =  (u8Value<<8) | (_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2))&0x00FF);
328     }
329 }
330 
331 MS_U16 _JPD_Read2Byte(MS_U16 u16Reg)
332 {
333     MS_U16 u16RegData;
334 
335     if ((u16Reg % 2) == 0) // low byte
336     {
337        u16RegData = _RIU_REG16(JPD_RIU_MAP+((u16Reg)*2));
338     }
339     else // high byte
340     {
341        //0x2F05
342         u16Reg = u16Reg - 1;
343         u16RegData = _HIGHBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
344         u16Reg = u16Reg + 2;
345         u16RegData |= _LOWBYTE(_RIU_REG16(JPD_RIU_MAP+((u16Reg)*2)));
346     }
347 
348     return (u16RegData);
349 }
350 
351 void _JPD_Write2Byte(MS_U16 u16Reg, MS_U16 u16Value)
352 {
353     if ((u16Reg % 2) == 0) // low byte
354     {
355         _RIU_REG16(JPD_RIU_MAP + ((u16Reg)*2)) = u16Value;
356     }
357     else // high byte
358     {
359         _JPD_WriteByte(u16Reg, (MS_U8)(u16Value&0x00FF));
360         _JPD_WriteByte(u16Reg+1, (MS_U8)(u16Value>>8));
361     }
362 }
363 
364 MS_U32 _JPD_Read4Byte(MS_U16 u16Reg)
365 {
366     MS_U32 u32RegData = 0;
367 
368     if ((u16Reg % 2) == 0) // low byte
369     {
370         u32RegData |= _JPD_Read2Byte(u16Reg);
371         u32RegData |= (_JPD_Read2Byte(u16Reg+2) << 16);
372     }
373     else // high byte
374     {
375         u32RegData |= _JPD_ReadByte(u16Reg);
376         u32RegData |= (_JPD_Read2Byte(u16Reg+1) << 8);
377         u32RegData |= (_JPD_ReadByte(u16Reg+3) << 24);
378     }
379 
380     return (u32RegData);
381 }
382 
383 void _JPD_Write4Byte(MS_U16 u16Reg, MS_U32 u32Value)
384 {
385     if ((u16Reg % 2) == 0) // low byte
386     {
387         _JPD_Write2Byte(u16Reg, (MS_U16)u32Value);
388         _JPD_Write2Byte(u16Reg+2, (MS_U16)(u32Value>>16));
389     }
390     else // high byte
391     {
392         _JPD_WriteByte(u16Reg, (MS_U8)(u32Value));
393         _JPD_Write2Byte(u16Reg+1, (MS_U16)(u32Value>>8));
394         _JPD_WriteByte(u16Reg+3, (MS_U8)(u32Value>>24));
395     }
396 }
397 
398 /******************************************************************************/
399 ///
400 ///@param value \b IN
401 ///@param value \b OUT
402 ///@return status
403 /******************************************************************************/
404 void __HAL_JPD_Write4Byte(MS_U16 u16Reg, MS_U32 u32Value)
405 {
406     _JPD_Write4Byte(u16Reg, u32Value);
407 
408     if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_REG)
409     {
410         MS_U32 read_value = _JPD_Read4Byte(u16Reg);
411         if(u32Value != read_value)
412             printf("Write Four Byte Failed!! Reg = 0x%04X, write_value = 0x%lX, read_value = 0x%lX\n", u16Reg, u32Value, read_value);
413     }
414 //    WRITE_LONG(u16Reg, u32Value);
415 }
416 
417 /******************************************************************************/
418 ///
419 ///@param value \b IN
420 ///@param value \b OUT
421 ///@return status
422 /******************************************************************************/
423 MS_U32 __HAL_JPD_Read4Byte(MS_U16 u16Reg)
424 {
425     return _JPD_Read4Byte(u16Reg);
426 //    return READ_LONG(u16Reg);
427 }
428 
429 /******************************************************************************/
430 ///
431 ///@param value \b IN
432 ///@param value \b OUT
433 ///@return status
434 /******************************************************************************/
435 void __HAL_JPD_Write2Byte(MS_U16 u16Reg, MS_U16 u16Value)
436 {
437     _JPD_Write2Byte(u16Reg, u16Value);
438 
439     if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_REG)
440     {
441         MS_U16 read_value = _JPD_Read2Byte(u16Reg);
442         if(u16Value != read_value)
443             printf("Write Two Byte Failed!! Reg = 0x%04X, write_value = 0x%04X, read_value = 0x%04X\n", u16Reg, u16Value, read_value);
444     }
445 //    WRITE_WORD(u16Reg, u16Value);
446 }
447 
448 /******************************************************************************/
449 ///
450 ///@param value \b IN
451 ///@param value \b OUT
452 ///@return status
453 /******************************************************************************/
454 MS_U16 __HAL_JPD_Read2Byte(MS_U16 u16Reg)
455 {
456     return _JPD_Read2Byte(u16Reg);
457 //    return READ_WORD(u16Reg);
458 }
459 
460 /******************************************************************************/
461 ///
462 ///@param value \b IN
463 ///@param value \b OUT
464 ///@return status
465 /******************************************************************************/
466 void __HAL_JPD_WriteByte(MS_U16 u16Reg, MS_U8 u8Value)
467 {
468     _JPD_WriteByte(u16Reg, u8Value);
469 
470     if(_u8JPDHalDbgLevel & E_JPD_DEBUG_HAL_REG)
471     {
472         MS_U8 read_value = _JPD_ReadByte(u16Reg);
473         if(u8Value != read_value)
474             printf("Write Two Byte Failed!! Reg = 0x%04X, write_value = 0x%04X, read_value = 0x%04X\n", u16Reg, u8Value, read_value);
475     }
476 //    WRITE_BYTE(u16Reg, u8Value);
477 }
478 
479 /******************************************************************************/
480 ///
481 ///@param value \b IN
482 ///@param value \b OUT
483 ///@return status
484 /******************************************************************************/
485 MS_U8 __HAL_JPD_ReadByte(MS_U16 u16Reg)
486 {
487     return _JPD_ReadByte(u16Reg);
488 //    return READ_BYTE(u16Reg);
489 }
490 
491 /******************************************************************************/
492 ///
493 ///@param value \b IN
494 ///@param value \b OUT
495 ///@return status
496 /******************************************************************************/
497 void __HAL_JPD_WriteBit(MS_U16 u16Reg, MS_BOOL status, MS_U8 u8Bit)
498 {
499     MS_U8 u8Tmp = __HAL_JPD_ReadByte(u16Reg);
500     if (status)
501         u8Tmp |= u8Bit;
502     else
503         u8Tmp &= (~u8Bit);
504     __HAL_JPD_WriteByte(u16Reg, u8Tmp);
505 }
506 
507 /******************************************************************************/
508 ///
509 ///@param value \b IN
510 ///@param value \b OUT
511 ///@return status
512 /******************************************************************************/
513 MS_U8 __HAL_JPD_ReadBit(MS_U16 u16Reg, MS_U8 u8Bit)
514 {
515     MS_U8 u8Tmp = __HAL_JPD_ReadByte(u16Reg);
516     return (u8Tmp & u8Bit);
517 }
518 #endif
519 
520 
521 //-------------------------------------------------------------------------------------------------
522 //  Global Functions
523 //-------------------------------------------------------------------------------------------------
HAL_JPD_SelectOJPD()524 void HAL_JPD_SelectOJPD()
525 {
526     __HAL_JPD_WriteBit(JPD_MIU_GROUP2_I64+1, 1, JPD_MIU0_CLIENT_JPD_CS2);
527     __HAL_JPD_WriteBit(JPD_MIU_GROUP2_I64+1, 1, JPD_MIU0_CLIENT_JPD_CS3);
528     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE, 0, NJPD_TOP_MARB_P0_ENABLE);
529     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE, 0, NJPD_TOP_MARB_P1_ENABLE);
530     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P2_ENABLE);
531     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P0_W_BYPASS_ENABLE);
532     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P1_W_BYPASS_ENABLE);
533     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P2_W_BYPASS_ENABLE);
534     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P0_R_BYPASS_ENABLE);
535     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE+1, 1, NJPD_TOP_MARB_P1_R_BYPASS_ENABLE);
536     __HAL_JPD_WriteBit(BK_NJPD1_TOP_MARB_PORT_ENABLE+1, 1, NJPD_TOP_MARB_P2_R_BYPASS_ENABLE);
537     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE, 0, NJPD_TOP_MARB_P0_ENABLE);
538     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE, 0, NJPD_TOP_MARB_P1_ENABLE);
539     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P2_ENABLE);
540     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P0_W_BYPASS_ENABLE);
541     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P1_W_BYPASS_ENABLE);
542     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P2_W_BYPASS_ENABLE);
543     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE, 1, NJPD_TOP_MARB_P0_R_BYPASS_ENABLE);
544     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE+1, 1, NJPD_TOP_MARB_P1_R_BYPASS_ENABLE);
545     __HAL_JPD_WriteBit(BK_NJPD2_TOP_MARB_PORT_ENABLE+1, 1, NJPD_TOP_MARB_P2_R_BYPASS_ENABLE);
546 
547     __HAL_JPD_Write2Byte(BK_NJPD1_SPARE00, 0x7B);
548     __HAL_JPD_Write2Byte(BK_NJPD2_SPARE00, 0x7B);
549 
550 }
551 
552 
553 /******************************************************************************/
554 ///
555 ///@param value \b IN
556 ///@param value \b OUT
557 ///@return status
558 /******************************************************************************/
HAL_JPD_SetMIU(MS_U8 u8Idx)559 void HAL_JPD_SetMIU(MS_U8 u8Idx)
560 {
561 #if (ENABLE_TEST_18_miu_sel_128M==true) \
562     ||(ENABLE_TEST_18_miu_sel_64M==true) \
563     ||(ENABLE_TEST_18_miu_sel_32M==true)
564     // This code is reserved for verification code TEST_18_miu_sel
565     // The value of BK_JPD_MCONFIG+1 would be modified at JPEG_StartDecode
566     // So we need to modify there too.
567     __HAL_JPD_WriteBit(JPD_MIU1_MIU_SEL2+1, 1,JPD_MIU1_CLIENT_JPD);
568 //        __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 0, JPD_MIU_SEL);     // 0 1
569     #if (ENABLE_TEST_18_miu_sel_128M==true)
570         __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 1, JPD_MIU_SEL);     // 0 1 0 1
571     #elif (ENABLE_TEST_18_miu_sel_64M==true)
572         __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 2, JPD_MIU_SEL);     // 0 1 0 1 0 1 0 1
573     #else
574         __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
575     #endif
576 #else
577     if(0 == __HAL_JPD_ReadBit(JPD_MIU1_MIU_SEL2+1, JPD_MIU1_CLIENT_JPD))
578     {
579         if(u8Idx)
580         {
581             __HAL_JPD_WriteBit(JPD_MIU0_MIU_SEL2+1, 1, JPD_MIU0_CLIENT_JPD);
582             JPD_DEBUG_HAL_MSG("HAL_JPD_SetMIU : JPD_MIU0_MIU_SEL2 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU0_MIU_SEL2));
583         }
584         else
585         {
586             __HAL_JPD_WriteBit(JPD_MIU0_MIU_SEL2+1, 0, JPD_MIU0_CLIENT_JPD);
587             JPD_DEBUG_HAL_MSG("HAL_JPD_SetMIU : JPD_MIU0_MIU_SEL2 : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_MIU0_MIU_SEL2));
588         }
589     }
590     else
591     {
592         __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, 0, JPD_MIU_SEL);
593         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));
594     }
595 
596 #endif
597 }
598 
599 /******************************************************************************/
600 ///
601 ///@param value \b IN
602 ///@param value \b OUT
603 ///@return status
604 /******************************************************************************/
HAL_JPD_Set_S_Config(MS_U16 u16Value)605 void HAL_JPD_Set_S_Config(MS_U16 u16Value)
606 {
607     JPD_DEBUG_HAL_MSG("HAL_JPD_Set_S_Config : 0x%04X\n", u16Value);
608     __HAL_JPD_Write2Byte(BK_JPD_SCONFIG, u16Value);
609     JPD_DEBUG_HAL_MSG("HAL_JPD_Get_S_Config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_SCONFIG));
610 }
611 
612 /******************************************************************************/
613 ///
614 ///@param value \b IN
615 ///@param value \b OUT
616 ///@return status
617 /******************************************************************************/
HAL_JPD_Get_S_Config(void)618 MS_U16 HAL_JPD_Get_S_Config(void)
619 {
620     return __HAL_JPD_Read2Byte(BK_JPD_SCONFIG);
621 }
622 
623 /******************************************************************************/
624 ///
625 ///@param value \b IN
626 ///@param value \b OUT
627 ///@return status
628 /******************************************************************************/
HAL_JPD_Set_M_Config(MS_U16 u16Value)629 void HAL_JPD_Set_M_Config(MS_U16 u16Value)
630 {
631     JPD_DEBUG_HAL_MSG("HAL_JPD_Set_M_Config : 0x%04X\n", u16Value);
632     __HAL_JPD_Write2Byte(BK_JPD_MCONFIG, u16Value);
633     JPD_DEBUG_HAL_MSG("HAL_JPD_Get_M_Config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MCONFIG));
634 }
635 
636 /******************************************************************************/
637 ///
638 ///@param value \b IN
639 ///@param value \b OUT
640 ///@return status
641 /******************************************************************************/
HAL_JPD_Get_M_Config(void)642 MS_U16 HAL_JPD_Get_M_Config(void)
643 {
644     return __HAL_JPD_Read2Byte(BK_JPD_MCONFIG);
645 }
646 
647 /******************************************************************************/
648 ///
649 ///@param value \b IN
650 ///@param value \b OUT
651 ///@return status
652 /******************************************************************************/
HAL_JPD_SetIntEn(MS_U16 u16Value)653 void HAL_JPD_SetIntEn(MS_U16 u16Value)
654 {
655     JPD_DEBUG_HAL_MSG("HAL_JPD_SetIntEn : 0x%04X\n", u16Value);
656     __HAL_JPD_Write2Byte(BK_JPD_INTEN, u16Value);
657     JPD_DEBUG_HAL_MSG("HAL_JPD_GetIntEn : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_INTEN));
658 }
659 
660 /******************************************************************************/
661 ///
662 ///@param value \b IN
663 ///@param value \b OUT
664 ///@return status
665 /******************************************************************************/
HAL_JPD_SetMRCBufFloorLow(MS_U16 u16Value)666 void HAL_JPD_SetMRCBufFloorLow(MS_U16 u16Value)
667 {
668     JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufFloorLow : 0x%04X\n", u16Value);
669     __HAL_JPD_Write2Byte(BK_JPD_RBUF_FLOOR_L, u16Value);
670     JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufFloorLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_FLOOR_L));
671 }
672 
673 /******************************************************************************/
674 ///
675 ///@param value \b IN
676 ///@param value \b OUT
677 ///@return status
678 /******************************************************************************/
HAL_JPD_SetMRCBufFloorHigh(MS_U16 u16Value)679 void HAL_JPD_SetMRCBufFloorHigh(MS_U16 u16Value)
680 {
681     JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufFloorHigh : 0x%04X\n", u16Value);
682     __HAL_JPD_Write2Byte(BK_JPD_RBUF_FLOOR_H, u16Value);
683     JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufFloorHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_FLOOR_H));
684 }
685 
686 /******************************************************************************/
687 ///
688 ///@param value \b IN
689 ///@param value \b OUT
690 ///@return status
691 /******************************************************************************/
HAL_JPD_SetMRCBufCeilLow(MS_U16 u16Value)692 void HAL_JPD_SetMRCBufCeilLow(MS_U16 u16Value)
693 {
694     JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufCeilLow : 0x%04X\n", u16Value);
695     __HAL_JPD_Write2Byte(BK_JPD_RBUF_CEIL_L, u16Value);
696     JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufCeilLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_CEIL_L));
697 }
698 
699 /******************************************************************************/
700 ///
701 ///@param value \b IN
702 ///@param value \b OUT
703 ///@return status
704 /******************************************************************************/
HAL_JPD_SetMRCBufCeilHigh(MS_U16 u16Value)705 void HAL_JPD_SetMRCBufCeilHigh(MS_U16 u16Value)
706 {
707     JPD_DEBUG_HAL_MSG("HAL_JPD_SetMRCBufCeilHigh : 0x%04X\n", u16Value);
708     __HAL_JPD_Write2Byte(BK_JPD_RBUF_CEIL_H, u16Value);
709     JPD_DEBUG_HAL_MSG("HAL_JPD_GetMRCBufCeilHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RBUF_CEIL_H));
710 }
711 
712 /******************************************************************************/
713 ///
714 ///@param value \b IN
715 ///@param value \b OUT
716 ///@return status
717 /******************************************************************************/
HAL_JPD_SetRCSMAddrLow(MS_U16 u16Value)718 void HAL_JPD_SetRCSMAddrLow(MS_U16 u16Value)
719 {
720     JPD_DEBUG_HAL_MSG("HAL_JPD_SetRCSMAddrLow : 0x%04X\n", u16Value);
721     __HAL_JPD_Write2Byte(BK_JPD_RCSMADR_L, u16Value);
722     JPD_DEBUG_HAL_MSG("HAL_JPD_GetRCSMAddrLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RCSMADR_L));
723 }
724 
725 /******************************************************************************/
726 ///
727 ///@param value \b IN
728 ///@param value \b OUT
729 ///@return status
730 /******************************************************************************/
HAL_JPD_SetRCSMAddrHigh(MS_U16 u16Value)731 void HAL_JPD_SetRCSMAddrHigh(MS_U16 u16Value)
732 {
733     JPD_DEBUG_HAL_MSG("HAL_JPD_SetRCSMAddrHigh : 0x%04X\n", u16Value);
734     __HAL_JPD_Write2Byte(BK_JPD_RCSMADR_H, u16Value);
735     JPD_DEBUG_HAL_MSG("HAL_JPD_GetRCSMAddrHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RCSMADR_H));
736 }
737 
738 /******************************************************************************/
739 ///
740 ///@param value \b IN
741 ///@param value \b OUT
742 ///@return status
743 /******************************************************************************/
HAL_JPD_SetMWCBufStAddrLow(MS_U16 u16Value)744 void HAL_JPD_SetMWCBufStAddrLow(MS_U16 u16Value)
745 {
746     JPD_DEBUG_HAL_MSG("HAL_JPD_SetMWCBufStAddrLow : 0x%04X\n", u16Value);
747     __HAL_JPD_Write2Byte(BK_JPD_MWBF_SADR_L, u16Value);
748     JPD_DEBUG_HAL_MSG("HAL_JPD_GetMWCBufStAddrLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWBF_SADR_L));
749 }
750 
751 /******************************************************************************/
752 ///
753 ///@param value \b IN
754 ///@param value \b OUT
755 ///@return status
756 /******************************************************************************/
HAL_JPD_SetMWCBufStAddrHigh(MS_U16 u16Value)757 void HAL_JPD_SetMWCBufStAddrHigh(MS_U16 u16Value)
758 {
759     JPD_DEBUG_HAL_MSG("HAL_JPD_SetMWCBufStAddrHigh : 0x%04X\n", u16Value);
760     __HAL_JPD_Write2Byte(BK_JPD_MWBF_SADR_H, u16Value);
761     JPD_DEBUG_HAL_MSG("HAL_JPD_GetMWCBufStAddrHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWBF_SADR_H));
762 }
763 
764 /******************************************************************************/
765 ///
766 ///@param value \b IN
767 ///@param value \b OUT
768 ///@return status
769 /******************************************************************************/
HAL_JPD_SetPic_H(MS_U16 u16Value)770 void HAL_JPD_SetPic_H(MS_U16 u16Value)
771 {
772     JPD_DEBUG_HAL_MSG("HAL_JPD_SetPic_H : 0x%04X\n", u16Value);
773     __HAL_JPD_Write2Byte(BK_JPD_PIC_H, u16Value);
774     JPD_DEBUG_HAL_MSG("HAL_JPD_GetPic_H : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_PIC_H));
775 }
776 
777 /******************************************************************************/
778 ///
779 ///@param value \b IN
780 ///@param value \b OUT
781 ///@return status
782 /******************************************************************************/
HAL_JPD_SetPic_V(MS_U16 u16Value)783 void HAL_JPD_SetPic_V(MS_U16 u16Value)
784 {
785     JPD_DEBUG_HAL_MSG("HAL_JPD_SetPic_V : 0x%04X\n", u16Value);
786     __HAL_JPD_Write2Byte(BK_JPD_PIC_V, u16Value);
787     JPD_DEBUG_HAL_MSG("HAL_JPD_GetPic_V : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_PIC_V));
788 }
789 
790 /******************************************************************************/
791 ///
792 ///@param value \b IN
793 ///@param value \b OUT
794 ///@return status
795 /******************************************************************************/
HAL_JPD_SetEventFlag(MS_U16 u16Value)796 void HAL_JPD_SetEventFlag(MS_U16 u16Value)
797 {
798     JPD_DEBUG_HAL_MSG("HAL_JPD_SetEventFlag : 0x%04X\n", u16Value);
799     __HAL_JPD_Write2Byte(BK_JPD_EVENTFLAG, u16Value);
800     JPD_DEBUG_HAL_MSG("HAL_JPD_GetEventFlag : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_EVENTFLAG));
801 }
802 
803 /******************************************************************************/
804 ///
805 ///@param value \b IN
806 ///@param value \b OUT
807 ///@return status
808 /******************************************************************************/
HAL_JPD_GetEventFlag(void)809 MS_U16 HAL_JPD_GetEventFlag(void)
810 {
811     return __HAL_JPD_Read2Byte(BK_JPD_EVENTFLAG);
812 }
813 
814 /******************************************************************************/
815 ///
816 ///@param value \b IN
817 ///@param value \b OUT
818 ///@return status
819 /******************************************************************************/
HAL_JPD_SetROI_H(MS_U16 u16Value)820 void HAL_JPD_SetROI_H(MS_U16 u16Value)
821 {
822     JPD_DEBUG_HAL_MSG("HAL_JPD_SetROI_H : 0x%04X\n", u16Value);
823     __HAL_JPD_Write2Byte(BK_JPD_ROI_H, u16Value);
824     JPD_DEBUG_HAL_MSG("HAL_JPD_GetROI_H : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_H));
825 }
826 
827 /******************************************************************************/
828 ///
829 ///@param value \b IN
830 ///@param value \b OUT
831 ///@return status
832 /******************************************************************************/
HAL_JPD_SetROI_V(MS_U16 u16Value)833 void HAL_JPD_SetROI_V(MS_U16 u16Value)
834 {
835     JPD_DEBUG_HAL_MSG("HAL_JPD_SetROI_V : 0x%04X\n", u16Value);
836     __HAL_JPD_Write2Byte(BK_JPD_ROI_V, u16Value);
837     JPD_DEBUG_HAL_MSG("HAL_JPD_GetROI_V : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_V));
838 }
839 
840 /******************************************************************************/
841 ///
842 ///@param value \b IN
843 ///@param value \b OUT
844 ///@return status
845 /******************************************************************************/
HAL_JPD_SetROIWidth(MS_U16 u16Value)846 void HAL_JPD_SetROIWidth(MS_U16 u16Value)
847 {
848     JPD_DEBUG_HAL_MSG("HAL_JPD_SetROIWidth : 0x%04X\n", u16Value);
849     __HAL_JPD_Write2Byte(BK_JPD_ROI_WIDTH, u16Value);
850     JPD_DEBUG_HAL_MSG("HAL_JPD_GetROIWidth : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_WIDTH));
851 }
852 
853 /******************************************************************************/
854 ///
855 ///@param value \b IN
856 ///@param value \b OUT
857 ///@return status
858 /******************************************************************************/
HAL_JPD_SetROIHeight(MS_U16 u16Value)859 void HAL_JPD_SetROIHeight(MS_U16 u16Value)
860 {
861     JPD_DEBUG_HAL_MSG("HAL_JPD_SetROIHeight : 0x%04X\n", u16Value);
862     __HAL_JPD_Write2Byte(BK_JPD_ROI_HEIGHT, u16Value);
863     JPD_DEBUG_HAL_MSG("HAL_JPD_GetROIHeight : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_ROI_HEIGHT));
864 }
865 
866 #if 0 // Unused function
867 /******************************************************************************/
868 ///
869 ///@param value \b IN
870 ///@param value \b OUT
871 ///@return status
872 /******************************************************************************/
873 MS_U16 HAL_JPD_GetCurMadrLow(void)
874 {
875     return __HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_L);
876 }
877 
878 /******************************************************************************/
879 ///
880 ///@param value \b IN
881 ///@param value \b OUT
882 ///@return status
883 /******************************************************************************/
884 MS_U16 HAL_JPD_GetCurMadrHigh(void)
885 {
886     return __HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_H);
887 }
888 #endif
889 
890 /******************************************************************************/
891 ///
892 ///@param value \b IN
893 ///@param value \b OUT
894 ///@return status
895 /******************************************************************************/
HAL_JPD_SetClock(MS_U16 u16Value)896 void HAL_JPD_SetClock(MS_U16 u16Value)
897 {
898     JPD_DEBUG_HAL_MSG("HAL_JPD_SetClock : 0x%04X\n", u16Value);
899     __HAL_JPD_Write2Byte(JPD_CLOCK, u16Value);
900     JPD_DEBUG_HAL_MSG("HAL_JPD_GetClock : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_CLOCK));
901 }
902 
903 /******************************************************************************/
904 ///
905 ///@param value \b IN
906 ///@param value \b OUT
907 ///@return status
908 /******************************************************************************/
HAL_JPD_GetClock(void)909 MS_U16 HAL_JPD_GetClock(void)
910 {
911     return __HAL_JPD_Read2Byte(JPD_CLOCK);
912 }
913 
914 /******************************************************************************/
915 ///
916 ///@param value \b IN
917 ///@param value \b OUT
918 ///@return status
919 /******************************************************************************/
HAL_JPD_PowerOn(void)920 void HAL_JPD_PowerOn(void)
921 {
922     MS_U16 u16reg_val;
923     //u16reg_val = MDrv_Read2Byte(_u16JPDClock_Addr);
924     u16reg_val = __HAL_JPD_Read2Byte(JPD_CLOCK);
925     u16reg_val = u16reg_val & 0xFFF2;
926     u16reg_val |= 0x000C;  // set JPD disable [8] : 0, [3:2] : 11 192MHz
927     //MDrv_Write2Byte(_u16JPDClock_Addr, reg_val);
928     JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOn : SetClock : 0x%04X\n", u16reg_val);
929     __HAL_JPD_Write2Byte(JPD_CLOCK, u16reg_val);
930     JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOn : GetClock : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_CLOCK));
931 
932     HAL_JPD_SelectOJPD();
933     #if 0 // DEBUG
934     printf ("   TSP STC : = 0x%lx\n", (MS_U32)(__HAL_JPD_Read2Byte(REG_TSP_STC_L) | (__HAL_JPD_Read2Byte(REG_TSP_STC_H) << 16))/90);
935     #endif
936 }
937 
938 /******************************************************************************/
939 ///
940 ///@param value \b IN
941 ///@param value \b OUT
942 ///@return status
943 /******************************************************************************/
HAL_JPD_PowerOff(void)944 void HAL_JPD_PowerOff(void)
945 {
946     MS_U16 u16reg_val;
947     //u16reg_val = MDrv_Read2Byte(_u16JPDClock_Addr);
948     u16reg_val = __HAL_JPD_Read2Byte(JPD_CLOCK);
949     u16reg_val = u16reg_val & 0xFFF2;
950     u16reg_val |= 0x000D;  // set JPD disable [8] : 1, [3:2] : 11 192MHz
951     //MDrv_Write2Byte(_u16JPDClock_Addr, reg_val);
952     JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOff : SetClock : 0x%04X\n", u16reg_val);
953     __HAL_JPD_Write2Byte(JPD_CLOCK, u16reg_val);
954     JPD_DEBUG_HAL_MSG("HAL_JPD_PowerOff : GetClock : 0x%04X\n", __HAL_JPD_Read2Byte(JPD_CLOCK));
955 }
956 
957 /******************************************************************************/
958 ///
959 ///@param value \b IN
960 ///@param value \b OUT
961 ///@return status
962 /******************************************************************************/
HAL_JPD_InitRegBase(void)963 void HAL_JPD_InitRegBase(void)
964 {
965     MS_U32 u32NonPMBankSize;
966     if(!MDrv_MMIO_GetBASE(&u32JPDRiuBaseAdd, &u32NonPMBankSize, MS_MODULE_JPD))
967     {
968         JPD_DEBUG_HAL_ERR("Get RIUreg base Failed!!!\n");
969     }
970     else
971     {
972         JPD_DEBUG_HAL_MSG("RIUreg base = 0x%lX, length = %lu\n", u32JPDRiuBaseAdd, u32NonPMBankSize);
973     }
974 }
975 
976 /******************************************************************************/
977 ///
978 ///@param value \b IN
979 ///@param value \b OUT
980 ///@return none
981 /******************************************************************************/
HAL_JPD_CreateMutex(void)982 void HAL_JPD_CreateMutex(void)
983 {
984     __HAL_JPD_MutexCreate();
985 }
986 
987 /******************************************************************************/
988 ///
989 ///@param value \b IN
990 ///@param value \b OUT
991 ///@return none
992 /******************************************************************************/
HAL_JPD_DeleteMutex(void)993 void HAL_JPD_DeleteMutex(void)
994 {
995     __HAL_JPD_MutexDelete();
996 }
997 
998 /******************************************************************************/
999 ///
1000 ///@param value \b IN
1001 ///@param value \b OUT
1002 ///@return status
1003 /******************************************************************************/
HAL_JPD_SetRSTIntv(MS_U16 u16Value)1004 void HAL_JPD_SetRSTIntv(MS_U16 u16Value)
1005 {
1006     JPD_DEBUG_HAL_MSG("HAL_JPD_SetRSTIntv : 0x%04X\n", u16Value);
1007     __HAL_JPD_Write2Byte(BK_JPD_RSTINTV, u16Value);
1008     JPD_DEBUG_HAL_MSG("HAL_JPD_GetRSTIntv : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_RSTINTV));
1009 }
1010 
1011 /******************************************************************************/
1012 ///
1013 ///@param value \b IN
1014 ///@param value \b OUT
1015 ///@return status
1016 /******************************************************************************/
HAL_JPD_GetCurVidx(void)1017 MS_U16 HAL_JPD_GetCurVidx(void)
1018 {
1019     return __HAL_JPD_Read2Byte(BK_JPD_CUR_VIDX);
1020 }
1021 
1022 /******************************************************************************/
1023 ///
1024 ///@param value \b IN
1025 ///@param value \b OUT
1026 ///@return status
1027 /******************************************************************************/
HAL_JPD_Set_TID_Addr(MS_U16 u16Value)1028 void HAL_JPD_Set_TID_Addr(MS_U16 u16Value)
1029 {
1030     JPD_DEBUG_HAL_MSG("HAL_JPD_Set_TID_Addr : 0x%04X\n", u16Value);
1031     __HAL_JPD_Write2Byte(BK_JPD_TID_ADR, u16Value);
1032     JPD_DEBUG_HAL_MSG("HAL_JPD_Get_TID_Addr : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_TID_ADR));
1033 }
1034 
1035 /******************************************************************************/
1036 ///
1037 ///@param value \b IN
1038 ///@param value \b OUT
1039 ///@return status
1040 /******************************************************************************/
HAL_JPD_Set_TID_Dat(MS_U16 u16Value)1041 void HAL_JPD_Set_TID_Dat(MS_U16 u16Value)
1042 {
1043     __HAL_JPD_Write2Byte(BK_JPD_TID_DAT, u16Value);
1044 }
1045 
HAL_JPD_Get_TID_Dat(void)1046 MS_U16 HAL_JPD_Get_TID_Dat(void)
1047 {
1048     return __HAL_JPD_Read2Byte(BK_JPD_TID_DAT);
1049 }
1050 
1051 /******************************************************************************/
1052 ///
1053 ///@param value \b IN
1054 ///@param value \b OUT
1055 ///@return none
1056 /******************************************************************************/
HAL_JPD_SetDbgLevel(MS_U8 u8DbgLevel)1057 void HAL_JPD_SetDbgLevel(MS_U8 u8DbgLevel)
1058 {
1059     _u8JPDHalDbgLevel = u8DbgLevel;
1060 }
1061 
1062 /******************************************************************************/
1063 ///
1064 ///@param value \b IN
1065 ///@param value \b OUT
1066 ///@return none
1067 /******************************************************************************/
HAL_JPD_GetLibVer(JPD_HAL_Version * pHalVer)1068 void HAL_JPD_GetLibVer(JPD_HAL_Version *pHalVer)
1069 {
1070     pHalVer->pu8HalVer = _pu8HalVer;
1071     pHalVer->pu8FwVer = _pu8FwVer;
1072 }
1073 
1074 /******************************************************************************/
1075 ///Reset JPD
1076 ///@param value \b IN
1077 ///@param value \b OUT
1078 ///@return none
1079 /******************************************************************************/
HAL_JPD_Rst(void)1080 void HAL_JPD_Rst(void)
1081 {
1082     JPD_DEBUG_HAL_MSG("HAL_JPD_Rst : start!!\n");
1083     _HAL_JPD_SetMIUProtectMask(TRUE);
1084     //mif reset is high active
1085     HAL_JPD_Set_M_Config(HAL_JPD_Get_M_Config() | JPD_MIF_RST);
1086     HAL_JPD_Set_M_Config(HAL_JPD_Get_M_Config() & ~JPD_MIF_RST);
1087     // reset event flag
1088     __HAL_JPD_Write2Byte(BK_JPD_EVENTFLAG, JPD_EVENT_ALL);
1089     // reset : low active
1090     __HAL_JPD_Write2Byte(BK_JPD_SCONFIG, 0);
1091     __HAL_JPD_Write2Byte(BK_JPD_SCONFIG, JPD_SWRST);
1092     __HAL_JPD_Write2Byte(BK_JPD_INTEN, JPD_EVENT_ALL);
1093     JPD_DEBUG_HAL_MSG("Get S-config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_SCONFIG));
1094     JPD_DEBUG_HAL_MSG("Get M-config : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MCONFIG));
1095     JPD_DEBUG_HAL_MSG("HAL Get INTEN : 0x%04X\n",  __HAL_JPD_Read2Byte(BK_JPD_INTEN));
1096     JPD_DEBUG_HAL_MSG("HAL Get EVENTFLAG : 0x%04X\n",  __HAL_JPD_Read2Byte(BK_JPD_EVENTFLAG));
1097     _HAL_JPD_SetMIUProtectMask(FALSE);
1098     JPD_DEBUG_HAL_MSG("HAL_JPD_Rst : end!!\n");
1099 }
1100 
1101 /******************************************************************************/
1102 ///
1103 ///@param value \b IN
1104 ///@param value \b OUT
1105 ///@return none
1106 /******************************************************************************/
HAL_JPD_SetMWBuffLineNum(MS_U16 u16Value)1107 void HAL_JPD_SetMWBuffLineNum(MS_U16 u16Value)
1108 {
1109     JPD_DEBUG_HAL_MSG("HAL_JPD_SetMWBuffLineNum : 0x%04X\n", u16Value);
1110     __HAL_JPD_Write2Byte(BK_JPD_MWBF_LINE_NUM, u16Value);
1111     JPD_DEBUG_HAL_MSG("HAL_JPD_Get_MWBF_LINE_NUM : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWBF_LINE_NUM));
1112 }
1113 
1114 /******************************************************************************/
1115 ///
1116 ///@param value \b IN
1117 ///@param value \b OUT
1118 ///@return status
1119 /******************************************************************************/
HAL_JPD_GetCurMRCAddr(void)1120 MS_U32 HAL_JPD_GetCurMRCAddr(void)
1121 {
1122     MS_U32 curMRCAddr = ((__HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_H) << 16) | __HAL_JPD_Read2Byte(BK_JPD_CUR_MADR_L));
1123 
1124     return curMRCAddr;
1125 }
1126 
1127 /******************************************************************************/
1128 ///
1129 ///@param value \b IN
1130 ///@param value \b OUT
1131 ///@return status
1132 /******************************************************************************/
HAL_JPD_GetCurRow(void)1133 MS_U16 HAL_JPD_GetCurRow(void)
1134 {
1135     return __HAL_JPD_Read2Byte(BK_JPD_CUR_ROWP);
1136 }
1137 
1138 /******************************************************************************/
1139 ///
1140 ///@param value \b IN
1141 ///@param value \b OUT
1142 ///@return status
1143 /******************************************************************************/
HAL_JPD_GetCurCol(void)1144 MS_U16 HAL_JPD_GetCurCol(void)
1145 {
1146     return __HAL_JPD_Read2Byte(BK_JPD_CUR_CLNP);
1147 }
1148 
1149 /******************************************************************************/
1150 ///
1151 ///@param value \b IN
1152 ///@param value \b OUT
1153 ///@return none
1154 /******************************************************************************/
HAL_JPD_SetWriteProtect(MS_BOOL enable)1155 void HAL_JPD_SetWriteProtect(MS_BOOL enable)
1156 {
1157     __HAL_JPD_WriteBit(BK_JPD_MCONFIG+1, enable, JPD_MWC_WPEN);
1158     JPD_DEBUG_HAL_MSG("HAL_JPD_SetWriteProtect : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MCONFIG));
1159 }
1160 
1161 #if (JPD_SUPPORT_AUTO_PROTECT==true)
1162 /******************************************************************************/
1163 ///
1164 ///@param value \b IN
1165 ///@param value \b OUT
1166 ///@return none
1167 /******************************************************************************/
HAL_JPD_SetAutoProtect(MS_BOOL enable)1168 void HAL_JPD_SetAutoProtect(MS_BOOL enable)
1169 {
1170     __HAL_JPD_WriteBit(BK_JPD_AUTO_PROTECT, enable, JPD_AUTO_PROTECT);
1171     JPD_DEBUG_HAL_MSG("HAL_JPD_SetAutoProtect : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_AUTO_PROTECT));
1172 }
1173 
1174 /******************************************************************************/
1175 ///
1176 ///@param value \b IN
1177 ///@param value \b OUT
1178 ///@return status
1179 /******************************************************************************/
HAL_JPD_SetWPENAddrHigh(MS_U16 u16Value)1180 void HAL_JPD_SetWPENAddrHigh(MS_U16 u16Value)
1181 {
1182     JPD_DEBUG_HAL_MSG("HAL_JPD_SetWPENAddrHigh : 0x%04X\n", u16Value);
1183     __HAL_JPD_Write2Byte(BK_JPD_MWC_WPEN_H, u16Value);
1184     JPD_DEBUG_HAL_MSG("HAL_JPD_SetWPENAddrHigh : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWC_WPEN_H));
1185 }
1186 
1187 /******************************************************************************/
1188 ///
1189 ///@param value \b IN
1190 ///@param value \b OUT
1191 ///@return status
1192 /******************************************************************************/
HAL_JPD_SetWPENAddrLow(MS_U16 u16Value)1193 void HAL_JPD_SetWPENAddrLow(MS_U16 u16Value)
1194 {
1195     JPD_DEBUG_HAL_MSG("HAL_JPD_SetWPENAddrLow : 0x%04X\n", u16Value);
1196     __HAL_JPD_Write2Byte(BK_JPD_MWC_WPEN_L, u16Value);
1197     JPD_DEBUG_HAL_MSG("HAL_JPD_SetWPENAddrLow : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_MWC_WPEN_L));
1198 }
1199 #endif
1200 
1201 /******************************************************************************/
1202 ///
1203 ///@param value \b IN
1204 ///@param value \b OUT
1205 ///@return status
1206 /******************************************************************************/
HAL_JPD_SetSpare(MS_U16 u16Value)1207 void HAL_JPD_SetSpare(MS_U16 u16Value)
1208 {
1209     JPD_DEBUG_HAL_MSG("HAL_JPD_SetSpare : 0x%04X\n", u16Value);
1210     __HAL_JPD_Write2Byte(BK_JPD_SPARE, u16Value);
1211     JPD_DEBUG_HAL_MSG("HAL_JPD_SetSpare : 0x%04X\n", __HAL_JPD_Read2Byte(BK_JPD_SPARE));
1212 }
1213 
1214 /******************************************************************************/
1215 ///
1216 ///@param value \b IN
1217 ///@param value \b OUT
1218 ///@return status
1219 /******************************************************************************/
HAL_JPD_GetSpare(void)1220 MS_U16 HAL_JPD_GetSpare(void)
1221 {
1222     return __HAL_JPD_Read2Byte(BK_JPD_SPARE);
1223 }
1224 
1225 
1226