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