xref: /utopia/UTPA2-700.0.x/modules/xc/hal/mooney/xc/mhal_sc.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi //==============================================================================
95*53ee8cc1Swenshuai.xi // [mhal_sc.c]
96*53ee8cc1Swenshuai.xi // Date: 20081203
97*53ee8cc1Swenshuai.xi // Descriptions: Add a new layer for HW setting
98*53ee8cc1Swenshuai.xi //==============================================================================
99*53ee8cc1Swenshuai.xi #define  MHAL_SC_C
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
102*53ee8cc1Swenshuai.xi #include <asm/div64.h>
103*53ee8cc1Swenshuai.xi #else
104*53ee8cc1Swenshuai.xi #define do_div(x,y) ((x)/=(y))
105*53ee8cc1Swenshuai.xi #endif
106*53ee8cc1Swenshuai.xi #include "UFO.h"
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi // Common Definition
109*53ee8cc1Swenshuai.xi #include "MsCommon.h"
110*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
111*53ee8cc1Swenshuai.xi #include "MsOS.h"
112*53ee8cc1Swenshuai.xi #include "mhal_xc_chip_config.h"
113*53ee8cc1Swenshuai.xi #include "utopia.h"
114*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
115*53ee8cc1Swenshuai.xi #include "xc_hwreg_utility2.h"
116*53ee8cc1Swenshuai.xi #include "xc_Analog_Reg.h"
117*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
118*53ee8cc1Swenshuai.xi #include "apiXC.h"
119*53ee8cc1Swenshuai.xi #include "drv_sc_display.h"
120*53ee8cc1Swenshuai.xi #include "drv_sc_isr.h"
121*53ee8cc1Swenshuai.xi #include "apiXC_Adc.h"
122*53ee8cc1Swenshuai.xi #include "apiXC_PCMonitor.h"
123*53ee8cc1Swenshuai.xi #include "apiXC_ModeParse.h"
124*53ee8cc1Swenshuai.xi #include "apiXC_Auto.h"
125*53ee8cc1Swenshuai.xi #include "drvXC_HDMI_if.h"
126*53ee8cc1Swenshuai.xi #include "mvideo_context.h"
127*53ee8cc1Swenshuai.xi #include "drv_sc_ip.h"
128*53ee8cc1Swenshuai.xi #include "mhal_dynamicscaling.h"
129*53ee8cc1Swenshuai.xi #include "mdrv_sc_dynamicscaling.h"
130*53ee8cc1Swenshuai.xi #include "drvMVOP.h"
131*53ee8cc1Swenshuai.xi #include "drvIPAUTH.h"
132*53ee8cc1Swenshuai.xi #include "drvIPAUTH.h"
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi #if (LD_ENABLE==1)
135*53ee8cc1Swenshuai.xi #include "mdrv_ld.h"
136*53ee8cc1Swenshuai.xi #include "mdrv_ldalgo.h"
137*53ee8cc1Swenshuai.xi #endif
138*53ee8cc1Swenshuai.xi #include "mdrv_sc_3d.h"
139*53ee8cc1Swenshuai.xi #include "drv_sc_menuload.h"
140*53ee8cc1Swenshuai.xi #include "drvXC_ADC_Internal.h"
141*53ee8cc1Swenshuai.xi #include "mhal_sc.h"
142*53ee8cc1Swenshuai.xi #if FRC_INSIDE
143*53ee8cc1Swenshuai.xi #include "mdrv_frc.h"
144*53ee8cc1Swenshuai.xi #include "mhal_frc.h"
145*53ee8cc1Swenshuai.xi #endif
146*53ee8cc1Swenshuai.xi #include "XC_private.h"
147*53ee8cc1Swenshuai.xi #include "mhal_menuload.h"
148*53ee8cc1Swenshuai.xi #include "halCHIP.h"
149*53ee8cc1Swenshuai.xi #include "drvSYS.h"
150*53ee8cc1Swenshuai.xi #include "drv_sc_scaling.h"
151*53ee8cc1Swenshuai.xi #include "drvSEAL.h"
152*53ee8cc1Swenshuai.xi #include "drvMIU.h"
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi #ifndef DONT_USE_CMA
155*53ee8cc1Swenshuai.xi #if (XC_SUPPORT_CMA ==TRUE)
156*53ee8cc1Swenshuai.xi #include "drvCMAPool.h"
157*53ee8cc1Swenshuai.xi #include "msos/linux/ion_uapi.h"
158*53ee8cc1Swenshuai.xi #include "msos/linux/mdrv_cma_pool_st.h"
159*53ee8cc1Swenshuai.xi #endif
160*53ee8cc1Swenshuai.xi #endif
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi #if (defined (ANDROID) && defined(UFO_XC_DS_PQ))
163*53ee8cc1Swenshuai.xi #include "drvPQ_Define.h"
164*53ee8cc1Swenshuai.xi #endif
165*53ee8cc1Swenshuai.xi #include <assert.h>
166*53ee8cc1Swenshuai.xi #ifdef ANDROID
167*53ee8cc1Swenshuai.xi #include <cutils/log.h>
168*53ee8cc1Swenshuai.xi #ifndef LOGE
169*53ee8cc1Swenshuai.xi #define printf(format, args...)          ALOGE(format, ##args);
170*53ee8cc1Swenshuai.xi #else
171*53ee8cc1Swenshuai.xi #define printf(format, args...)          LOGE(format, ##args);
172*53ee8cc1Swenshuai.xi #endif
173*53ee8cc1Swenshuai.xi #endif
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi #define DBG_EN  0
176*53ee8cc1Swenshuai.xi #if DBG_EN
177*53ee8cc1Swenshuai.xi #define SC_DBG(x)   x
178*53ee8cc1Swenshuai.xi #define FPLL_DBG(x) x
179*53ee8cc1Swenshuai.xi #else
180*53ee8cc1Swenshuai.xi #define SC_DBG(x)
181*53ee8cc1Swenshuai.xi #define FPLL_DBG(x)
182*53ee8cc1Swenshuai.xi #endif
183*53ee8cc1Swenshuai.xi #define new_chakra
184*53ee8cc1Swenshuai.xi 
185*53ee8cc1Swenshuai.xi #define IS_OUTPUT_4K2K()   ((pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Width > 3000) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Height > 2000))
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi //==============================================================================
188*53ee8cc1Swenshuai.xi //==============================================================================
189*53ee8cc1Swenshuai.xi MS_VIRT _XC_RIU_BASE;
190*53ee8cc1Swenshuai.xi MS_VIRT _PM_RIU_BASE;
191*53ee8cc1Swenshuai.xi 
192*53ee8cc1Swenshuai.xi MS_VIRT _DVI_ATOP_RIU_BASE;
193*53ee8cc1Swenshuai.xi MS_VIRT _DVI_DTOP_RIU_BASE;
194*53ee8cc1Swenshuai.xi MS_VIRT _HDCP_RIU_BASE;
195*53ee8cc1Swenshuai.xi MS_VIRT _DVI_EQ_RIU_BASE;
196*53ee8cc1Swenshuai.xi MS_VIRT _ADC_DTOPB_RIU_BASE;
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi MS_VIRT _DDC_RIU_BASE;
199*53ee8cc1Swenshuai.xi MS_VIRT _PM_SLEEP_RIU_BASE;
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi MS_U32 u32DTVPatchTimer;
202*53ee8cc1Swenshuai.xi MS_BOOL bPreFDMaskStatse;
203*53ee8cc1Swenshuai.xi MS_U16 u16FDMaskCount;
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi #ifndef DONT_USE_CMA
206*53ee8cc1Swenshuai.xi #if (XC_SUPPORT_CMA ==TRUE)
207*53ee8cc1Swenshuai.xi MS_U32 u32CMAPatchTimer_Main ;
208*53ee8cc1Swenshuai.xi #endif
209*53ee8cc1Swenshuai.xi #endif
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi #ifdef UFO_XC_AUTO_DOWNLOAD
212*53ee8cc1Swenshuai.xi #define DEBUG_HDR 0
213*53ee8cc1Swenshuai.xi #define  AUTO_DOWNLOAD_HDR_TMO_SRAM_MAX_ADDR     512
214*53ee8cc1Swenshuai.xi #define  AUTO_DOWNLOAD_HDR_3DLUT_SRAM_MAX_ADDR     4944
215*53ee8cc1Swenshuai.xi 
216*53ee8cc1Swenshuai.xi // HDR client of auto download has these following formats, include format0 and format1.
217*53ee8cc1Swenshuai.xi //
218*53ee8cc1Swenshuai.xi // Format0:
219*53ee8cc1Swenshuai.xi //127      125          116 115         112                             60        57                                   0
220*53ee8cc1Swenshuai.xi // | [x[2]] | [addr(10)] | 0 | [sel0(3)] |           [data1]             | sel1(3) |              [data0]              |
221*53ee8cc1Swenshuai.xi //                               sel0 = 1                            x(52) sel1 = 1              wd0(19),wd1(19),wd2(19)
222*53ee8cc1Swenshuai.xi //                               sel0 = 2     x(4),wd0(16),wd1(16),wd2(16) sel1 = 2         x(9),wd0(16),wd1(16),wd2(16)
223*53ee8cc1Swenshuai.xi //                               sel0 = 3                    x(40),wd0(12) sel1 = 3                        x(45),wd0(12)
224*53ee8cc1Swenshuai.xi //                               sel0 = 4   idx(4),wd0(16),wd1(16),wd2(16) sel1 = 4  x(5),idx(4),wd0(16),wd1(16),wd2(16)
225*53ee8cc1Swenshuai.xi // sel:   0: disable
226*53ee8cc1Swenshuai.xi //        1: De-gamma
227*53ee8cc1Swenshuai.xi //        2: Gamma
228*53ee8cc1Swenshuai.xi //        3: TMO
229*53ee8cc1Swenshuai.xi //        4: 3D-lut
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi // Format1:
232*53ee8cc1Swenshuai.xi //127      125          116 115          112                             60        57                                   0
233*53ee8cc1Swenshuai.xi // | [x[2]] | [addr(10)] | 1 | [ctrl0(3)] |           [data1]             | sel1(3) |              [data0]              |
234*53ee8cc1Swenshuai.xi //                                                                    x(52) sel1 = 0
235*53ee8cc1Swenshuai.xi //                                           idx(4),wd0(16),wd1(16),wd2(16) sel1 = 4      x(10),degam(19),gam(16),tmo(16)
236*53ee8cc1Swenshuai.xi // ctrl:                 bit: 114  113 112
237*53ee8cc1Swenshuai.xi //                          |degam|gam|tmo|
238*53ee8cc1Swenshuai.xi // sel:   0: disable
239*53ee8cc1Swenshuai.xi //        4: 3D-lut
240*53ee8cc1Swenshuai.xi //
241*53ee8cc1Swenshuai.xi // HW designer recommand using format1.
242*53ee8cc1Swenshuai.xi // These following definitions write datas of tmo/gamma/de-gamma/3d-lut separately by format1,
243*53ee8cc1Swenshuai.xi // please refer to definition of WRITE_TMO_DATA_FORMAT_1, WRITE_GAMMA_DATA_FORMAT_1, WRITE_DEGAMMA_DATA_FORMAT_1 and WRITE_3DLUT_DATA_FORMAT_1.
244*53ee8cc1Swenshuai.xi #define WRITE_TMO_DATA_FORMAT_1(baseaddr, index, value) \
245*53ee8cc1Swenshuai.xi     *(baseaddr) = (((*(baseaddr)) & 0xC0) | (((index) >> 4) & 0x3F));\
246*53ee8cc1Swenshuai.xi     *(baseaddr + 1) = ((((index) << 4) & 0xF0) | ((*(baseaddr + 1)) & 0x0F) | 0x09);\
247*53ee8cc1Swenshuai.xi     *(baseaddr + 14) = ((*(baseaddr + 14) & 0xF0) | (((value) >> 8) & 0x0F));\
248*53ee8cc1Swenshuai.xi     *(baseaddr + 15) = ((value) & 0xFF);
249*53ee8cc1Swenshuai.xi 
250*53ee8cc1Swenshuai.xi #define WRITE_GAMMA_DATA_FORMAT_1(baseaddr, index, value) \
251*53ee8cc1Swenshuai.xi     *(baseaddr) = (((*(baseaddr)) & 0xC0) | (((index) >> 4) & 0x3F));\
252*53ee8cc1Swenshuai.xi     *(baseaddr + 1) = ((((index) << 4) & 0xF0) | ((*(baseaddr + 1)) & 0x0F) | 0x0A);\
253*53ee8cc1Swenshuai.xi     *(baseaddr + 14) = ((*(baseaddr + 14) & 0x0F) | (((value) << 4) & 0xF0));\
254*53ee8cc1Swenshuai.xi     *(baseaddr + 13) = (((value) >> 4) & 0xFF);\
255*53ee8cc1Swenshuai.xi     *(baseaddr + 12) = ((*(baseaddr + 12) & 0xF0) | (((value) >> 12) & 0x0F));
256*53ee8cc1Swenshuai.xi 
257*53ee8cc1Swenshuai.xi #define WRITE_DEGAMMA_DATA_FORMAT_1(baseaddr, index, value) \
258*53ee8cc1Swenshuai.xi     *(baseaddr) = (((*(baseaddr)) & 0xC0) | (((index) >> 4) & 0x3F));\
259*53ee8cc1Swenshuai.xi     *(baseaddr + 1) = ((((index) << 4) & 0xF0) | ((*(baseaddr + 1)) & 0x0F) | 0x0C);\
260*53ee8cc1Swenshuai.xi     *(baseaddr + 12) = ((*(baseaddr + 12) & 0x0F) | (((value) << 4) & 0xF0));\
261*53ee8cc1Swenshuai.xi     *(baseaddr + 11) = (((value) >> 4) & 0xFF);\
262*53ee8cc1Swenshuai.xi     *(baseaddr + 10) = ((*(baseaddr + 10) & 0x80) | (((value) >> 12) & 0x7F));
263*53ee8cc1Swenshuai.xi 
264*53ee8cc1Swenshuai.xi #define WRITE_3DLUT_DATA_FORMAT_1(baseaddr, index, subindex, rval, gval, bval) \
265*53ee8cc1Swenshuai.xi     *(baseaddr) = (((*(baseaddr)) & 0xC0) | (((index) >> 4) & 0x3F));\
266*53ee8cc1Swenshuai.xi     *(baseaddr + 1) = ((((index) << 4) & 0xF0) | ((*(baseaddr + 1)) & 0x0F) | 0x08);\
267*53ee8cc1Swenshuai.xi     *(baseaddr + 8) = ((*(baseaddr + 8) & 0xF1) | 0x08);\
268*53ee8cc1Swenshuai.xi     *(baseaddr + 8) = ((*(baseaddr + 8) & 0x0F) | (((bval) << 4) & 0xF0));\
269*53ee8cc1Swenshuai.xi     *(baseaddr + 7) = (((bval) >> 4) & 0xFF);\
270*53ee8cc1Swenshuai.xi     *(baseaddr + 6) = ((*(baseaddr + 6) & 0xF0) | (((bval) >> 12) & 0x0F));\
271*53ee8cc1Swenshuai.xi     *(baseaddr + 6) = ((*(baseaddr + 6) & 0x0F) | (((gval) << 4) & 0xF0));\
272*53ee8cc1Swenshuai.xi     *(baseaddr + 5) = (((gval) >> 4) & 0xFF);\
273*53ee8cc1Swenshuai.xi     *(baseaddr + 4) = ((*(baseaddr + 4) & 0xF0) | (((gval) >> 12) & 0x0F));\
274*53ee8cc1Swenshuai.xi     *(baseaddr + 4) = ((*(baseaddr + 4) & 0x0F) | (((rval) << 4) & 0xF0));\
275*53ee8cc1Swenshuai.xi     *(baseaddr + 3) = (((rval) >> 4) & 0xFF);\
276*53ee8cc1Swenshuai.xi     *(baseaddr + 2) = ((*(baseaddr + 2) & 0xF0) | (((rval) >> 12) & 0x0F));\
277*53ee8cc1Swenshuai.xi     *(baseaddr + 2) = ((*(baseaddr + 2) & 0x0F) | (((subindex) << 4) & 0xF0));
278*53ee8cc1Swenshuai.xi 
279*53ee8cc1Swenshuai.xi // The following definition clear bits of format1's ctrl & sel.
280*53ee8cc1Swenshuai.xi #define CLEAR_HDR_DATA_FORMAT_1(baseaddr) \
281*53ee8cc1Swenshuai.xi     *(baseaddr + 1) = ((*(baseaddr + 1)) & 0xF8);\
282*53ee8cc1Swenshuai.xi     *(baseaddr + 8) = (*(baseaddr + 8) & 0xF1);
283*53ee8cc1Swenshuai.xi 
284*53ee8cc1Swenshuai.xi static MS_U32 _au32_3dlut_entry_num[8] = {736, 656, 656, 576, 656, 576, 576, 512};
285*53ee8cc1Swenshuai.xi #endif
286*53ee8cc1Swenshuai.xi 
287*53ee8cc1Swenshuai.xi 
288*53ee8cc1Swenshuai.xi // Put this function here because hwreg_utility2 only for hal.
Hal_SC_init_riu_base(MS_VIRT u32riu_base,MS_VIRT u32PMriu_base)289*53ee8cc1Swenshuai.xi void Hal_SC_init_riu_base(MS_VIRT u32riu_base, MS_VIRT u32PMriu_base)
290*53ee8cc1Swenshuai.xi {
291*53ee8cc1Swenshuai.xi     _XC_RIU_BASE = u32PMriu_base;
292*53ee8cc1Swenshuai.xi     _PM_RIU_BASE = u32PMriu_base;
293*53ee8cc1Swenshuai.xi 
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi     _DVI_ATOP_RIU_BASE = u32PMriu_base;
296*53ee8cc1Swenshuai.xi     _DVI_DTOP_RIU_BASE = u32PMriu_base;
297*53ee8cc1Swenshuai.xi     _HDCP_RIU_BASE = u32PMriu_base;
298*53ee8cc1Swenshuai.xi     _DVI_EQ_RIU_BASE = u32PMriu_base;
299*53ee8cc1Swenshuai.xi     _ADC_DTOPB_RIU_BASE = u32PMriu_base;
300*53ee8cc1Swenshuai.xi 
301*53ee8cc1Swenshuai.xi     _DDC_RIU_BASE =u32PMriu_base;
302*53ee8cc1Swenshuai.xi     _PM_SLEEP_RIU_BASE =u32PMriu_base;
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi }
305*53ee8cc1Swenshuai.xi 
306*53ee8cc1Swenshuai.xi //=========================================================//
307*53ee8cc1Swenshuai.xi // Function : Hal_SC_setfield
308*53ee8cc1Swenshuai.xi // Description:
309*53ee8cc1Swenshuai.xi //=========================================================//
Hal_SC_setfield(void * pInstance,MS_U16 reg_1D,MS_U16 reg_21,MS_U16 reg_23,SCALER_WIN eWindow)310*53ee8cc1Swenshuai.xi void Hal_SC_setfield(void *pInstance, MS_U16 reg_1D, MS_U16 reg_21, MS_U16 reg_23, SCALER_WIN eWindow )
311*53ee8cc1Swenshuai.xi {
312*53ee8cc1Swenshuai.xi     //printf("reg_1D=%x, reg_21=%x, reg_23=%x\n", reg_1D, reg_21, reg_23);
313*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
314*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
315*53ee8cc1Swenshuai.xi 
316*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
317*53ee8cc1Swenshuai.xi     {
318*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, (reg_1D<<8), 0xEF00);
319*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, reg_21, 0x3FFF);
320*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_23_L, (reg_23<<8), HBMASK);
321*53ee8cc1Swenshuai.xi     }
322*53ee8cc1Swenshuai.xi     else
323*53ee8cc1Swenshuai.xi     {
324*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, (reg_1D<<8), 0xEF00);
325*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, reg_21, 0x3FFF);
326*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_23_L, (reg_23<<8), HBMASK);
327*53ee8cc1Swenshuai.xi     }
328*53ee8cc1Swenshuai.xi //    printf("%x ",SC_R2BYTEMSK(REG_SC_BK01_1D_L, HBMASK));
329*53ee8cc1Swenshuai.xi //    printf("%x ",SC_R2BYTEMSK(REG_SC_BK01_21_L, 0x3FFF));
330*53ee8cc1Swenshuai.xi //    printf("%x ",SC_R2BYTEMSK(REG_SC_BK01_23_L, HBMASK));
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi //    printf("%x ",SC_R4BYTE(REG_SC_BK01_21_L));
333*53ee8cc1Swenshuai.xi //    printf("%x ",SC_R4BYTE(REG_SC_BK01_23_L));
334*53ee8cc1Swenshuai.xi }
335*53ee8cc1Swenshuai.xi 
336*53ee8cc1Swenshuai.xi //=========================================================//
337*53ee8cc1Swenshuai.xi // Function : Hal_SC_de_only_en
338*53ee8cc1Swenshuai.xi // Description: DE Only. HSYNC and VSYNC are ignored.
339*53ee8cc1Swenshuai.xi //#0: Disable.
340*53ee8cc1Swenshuai.xi //#1: Enable.
341*53ee8cc1Swenshuai.xi //=========================================================//
Hal_SC_de_only_en(void * pInstance,MS_BOOL benable,SCALER_WIN eWindow)342*53ee8cc1Swenshuai.xi void Hal_SC_de_only_en(void *pInstance, MS_BOOL benable, SCALER_WIN eWindow)
343*53ee8cc1Swenshuai.xi {
344*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
345*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
348*53ee8cc1Swenshuai.xi     {
349*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, (benable ? BIT(6):0), BIT(6));
350*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L, (benable ? BIT(4):0), BIT(4)); // SW patch for HDMI switch, Auto search HST jistter mask filter force off
351*53ee8cc1Swenshuai.xi     }
352*53ee8cc1Swenshuai.xi     else
353*53ee8cc1Swenshuai.xi     {
354*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, (benable ? BIT(6):0), BIT(6));
355*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_2F_L, (benable ? BIT(4):0), BIT(4)); // SW patch for HDMI switch, Auto search HST jistter mask filter force off
356*53ee8cc1Swenshuai.xi     }
357*53ee8cc1Swenshuai.xi }
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi //=========================================================//
360*53ee8cc1Swenshuai.xi // Function : Hal_SC_de_direct_en
361*53ee8cc1Swenshuai.xi // Description: Digital Input Horizontal Sample Range
362*53ee8cc1Swenshuai.xi //#0: Use DE as sample range, only V position can be adjusted.
363*53ee8cc1Swenshuai.xi //#1: Use SPRHST and SPRHDC as sample range, both H and V position can be adjusted.
364*53ee8cc1Swenshuai.xi //=========================================================//
Hal_SC_de_direct_en(void * pInstance,MS_BOOL benable,SCALER_WIN eWindow)365*53ee8cc1Swenshuai.xi void Hal_SC_de_direct_en(void *pInstance, MS_BOOL benable, SCALER_WIN eWindow)
366*53ee8cc1Swenshuai.xi {
367*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
368*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
369*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
370*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, (benable ? BIT(7):0), BIT(7));
371*53ee8cc1Swenshuai.xi     else
372*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, (benable ? BIT(7):0), BIT(7));
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi }
375*53ee8cc1Swenshuai.xi 
Hal_SC_set_ficlk(void * pInstance,MS_BOOL bPreDown,SCALER_WIN eWindow)376*53ee8cc1Swenshuai.xi void Hal_SC_set_ficlk(void *pInstance, MS_BOOL bPreDown, SCALER_WIN eWindow)
377*53ee8cc1Swenshuai.xi {
378*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
379*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
380*53ee8cc1Swenshuai.xi     if(E_XC_DEVICE0 == psXCInstPri->u32DeviceID)
381*53ee8cc1Swenshuai.xi     {
382*53ee8cc1Swenshuai.xi         // monaco is not needed it
383*53ee8cc1Swenshuai.xi #if 0
384*53ee8cc1Swenshuai.xi         if( eWindow == MAIN_WINDOW )
385*53ee8cc1Swenshuai.xi         {
386*53ee8cc1Swenshuai.xi             if (bPreDown)
387*53ee8cc1Swenshuai.xi             {
388*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_CKG_FICLK_F2, CKG_FICLK_F2_IDCLK2, CKG_FICLK_F2_MASK); // clk_idclk2
389*53ee8cc1Swenshuai.xi             }
390*53ee8cc1Swenshuai.xi             else
391*53ee8cc1Swenshuai.xi             {
392*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_CKG_FICLK_F2, CKG_FICLK_F2_FCLK, CKG_FICLK_F2_MASK); // clk_fclk
393*53ee8cc1Swenshuai.xi             }
394*53ee8cc1Swenshuai.xi         }
395*53ee8cc1Swenshuai.xi         else
396*53ee8cc1Swenshuai.xi         {
397*53ee8cc1Swenshuai.xi             if (bPreDown)
398*53ee8cc1Swenshuai.xi             {
399*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_CKG_FICLK_F1, CKG_FICLK_F1_IDCLK1, CKG_FICLK_F1_MASK); // clk_idclk1
400*53ee8cc1Swenshuai.xi             }
401*53ee8cc1Swenshuai.xi             else
402*53ee8cc1Swenshuai.xi             {
403*53ee8cc1Swenshuai.xi                 W2BYTEMSK(REG_CKG_FICLK_F1, CKG_FICLK_F1_FCLK, CKG_FICLK_F1_MASK); // clk_fclk
404*53ee8cc1Swenshuai.xi             }
405*53ee8cc1Swenshuai.xi         }
406*53ee8cc1Swenshuai.xi #endif
407*53ee8cc1Swenshuai.xi     }
408*53ee8cc1Swenshuai.xi     else //E_XC_DEVICE1 == psXCInstPri->u32DeviceID
409*53ee8cc1Swenshuai.xi     {
410*53ee8cc1Swenshuai.xi         if (bPreDown)
411*53ee8cc1Swenshuai.xi         {
412*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_CKG_S2_FICLK2_F2, CKG_S2_FICLK2_F2_IDCLK2, CKG_S2_FICLK2_F2_MASK); // clk_edclk
413*53ee8cc1Swenshuai.xi         }
414*53ee8cc1Swenshuai.xi         else
415*53ee8cc1Swenshuai.xi         {
416*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_CKG_S2_FICLK2_F2, CKG_S2_FICLK2_F2_FCLK, CKG_S2_FICLK2_F2_MASK); // clk_fclk
417*53ee8cc1Swenshuai.xi         }
418*53ee8cc1Swenshuai.xi     }
419*53ee8cc1Swenshuai.xi }
420*53ee8cc1Swenshuai.xi 
Hal_SC_set_shiftline(void * pInstance,MS_U8 u8Val,SCALER_WIN eWindow)421*53ee8cc1Swenshuai.xi void Hal_SC_set_shiftline(void *pInstance, MS_U8 u8Val, SCALER_WIN eWindow )
422*53ee8cc1Swenshuai.xi {
423*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
424*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
425*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
426*53ee8cc1Swenshuai.xi     {
427*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_2F_L, (u8Val & 0x07)<<8, (BIT(10)|BIT(9)|BIT(8)));
428*53ee8cc1Swenshuai.xi     }
429*53ee8cc1Swenshuai.xi     else
430*53ee8cc1Swenshuai.xi     {
431*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_2F_L, (u8Val & 0x03)<<13, (BIT(14)|BIT(13)));
432*53ee8cc1Swenshuai.xi     }
433*53ee8cc1Swenshuai.xi }
434*53ee8cc1Swenshuai.xi 
Hal_SC_set_422_cbcr_swap(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)435*53ee8cc1Swenshuai.xi void Hal_SC_set_422_cbcr_swap(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
436*53ee8cc1Swenshuai.xi {
437*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
438*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
439*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
440*53ee8cc1Swenshuai.xi     {
441*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_0A_L, bEnable ? BIT(6) : 0, BIT(6));
442*53ee8cc1Swenshuai.xi     }
443*53ee8cc1Swenshuai.xi     else
444*53ee8cc1Swenshuai.xi     {
445*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK04_0A_L, bEnable ? BIT(6) : 0, BIT(6));
446*53ee8cc1Swenshuai.xi     }
447*53ee8cc1Swenshuai.xi }
448*53ee8cc1Swenshuai.xi 
Hal_SC_set_pre_align_pixel(void * pInstance,MS_BOOL bEnable,MS_U16 pixels,SCALER_WIN eWindow)449*53ee8cc1Swenshuai.xi void Hal_SC_set_pre_align_pixel(void *pInstance, MS_BOOL bEnable, MS_U16 pixels, SCALER_WIN eWindow)
450*53ee8cc1Swenshuai.xi {
451*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
452*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
453*53ee8cc1Swenshuai.xi     if (bEnable)
454*53ee8cc1Swenshuai.xi     {
455*53ee8cc1Swenshuai.xi         if ( eWindow == MAIN_WINDOW )
456*53ee8cc1Swenshuai.xi         {
457*53ee8cc1Swenshuai.xi             // Enable pre align pixel for mirror mode.
458*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_2A_L, BIT(15), BIT(15));
459*53ee8cc1Swenshuai.xi 
460*53ee8cc1Swenshuai.xi             // Number of pixels need to be inserted. (U3 has 15 pixels)
461*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_2A_L, pixels << 8 , 0x1F00);
462*53ee8cc1Swenshuai.xi         }
463*53ee8cc1Swenshuai.xi         else
464*53ee8cc1Swenshuai.xi         {
465*53ee8cc1Swenshuai.xi             // Enable pre align pixel for mirror mode.
466*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK04_2A_L, BIT(15), BIT(15));
467*53ee8cc1Swenshuai.xi 
468*53ee8cc1Swenshuai.xi             // Number of pixels need to be inserted. (U3 has 15 pixels)
469*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK04_2A_L, pixels << 8 , 0x1F00);
470*53ee8cc1Swenshuai.xi         }
471*53ee8cc1Swenshuai.xi 
472*53ee8cc1Swenshuai.xi     }
473*53ee8cc1Swenshuai.xi     else
474*53ee8cc1Swenshuai.xi     {
475*53ee8cc1Swenshuai.xi         if ( eWindow == MAIN_WINDOW )
476*53ee8cc1Swenshuai.xi         {
477*53ee8cc1Swenshuai.xi             // Disable pre align pixel for mirror mode.
478*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_2A_L, 0x00 , BIT(15));
479*53ee8cc1Swenshuai.xi         }
480*53ee8cc1Swenshuai.xi         else
481*53ee8cc1Swenshuai.xi         {
482*53ee8cc1Swenshuai.xi             // Disable pre align pixel for mirror mode.
483*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK04_2A_L, 0x00 , BIT(15));
484*53ee8cc1Swenshuai.xi         }
485*53ee8cc1Swenshuai.xi     }
486*53ee8cc1Swenshuai.xi }
487*53ee8cc1Swenshuai.xi 
Hal_XC_Set_FreeFRCMD(void * pInstance,MS_BOOL bEnable)488*53ee8cc1Swenshuai.xi void Hal_XC_Set_FreeFRCMD(void *pInstance, MS_BOOL bEnable)
489*53ee8cc1Swenshuai.xi {
490*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
491*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
492*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_05_L, bEnable? BIT(5) : 0, BIT(5));
493*53ee8cc1Swenshuai.xi }
494*53ee8cc1Swenshuai.xi 
495*53ee8cc1Swenshuai.xi // Obsolete in M10/J2/A5
Hal_SC_set_linearmem_mode(MS_BOOL bEnable,SCALER_WIN eWindow)496*53ee8cc1Swenshuai.xi void Hal_SC_set_linearmem_mode(MS_BOOL bEnable, SCALER_WIN eWindow)
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi }
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi // This function will return 8/10/12/14/16 field mode or 8 frame mode.
501*53ee8cc1Swenshuai.xi // Otherwise it return IMAGE_STORE_2_FRAMES
Hal_SC_GetFrameStoreMode(void * pInstance,SCALER_WIN eWindow)502*53ee8cc1Swenshuai.xi XC_FRAME_STORE_NUMBER Hal_SC_GetFrameStoreMode(void *pInstance, SCALER_WIN eWindow)
503*53ee8cc1Swenshuai.xi {
504*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
505*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
506*53ee8cc1Swenshuai.xi     MS_U16 u16FrameCount = 0x00;
507*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
508*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
509*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
510*53ee8cc1Swenshuai.xi     {
511*53ee8cc1Swenshuai.xi         u16FrameCount = 0x1F & SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_19_L);
512*53ee8cc1Swenshuai.xi     }
513*53ee8cc1Swenshuai.xi     else
514*53ee8cc1Swenshuai.xi     {
515*53ee8cc1Swenshuai.xi         u16FrameCount = 0x1F & SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_59_L);
516*53ee8cc1Swenshuai.xi     }
517*53ee8cc1Swenshuai.xi 
518*53ee8cc1Swenshuai.xi     switch( u16FrameCount) // Get field type.
519*53ee8cc1Swenshuai.xi     {
520*53ee8cc1Swenshuai.xi         default:
521*53ee8cc1Swenshuai.xi             if (gSrcInfo[MAIN_WINDOW].bInterlace)
522*53ee8cc1Swenshuai.xi             {
523*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_4_FIELDS;
524*53ee8cc1Swenshuai.xi             }
525*53ee8cc1Swenshuai.xi             else
526*53ee8cc1Swenshuai.xi             {
527*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_2_FRAMES;
528*53ee8cc1Swenshuai.xi             }
529*53ee8cc1Swenshuai.xi         case 3:
530*53ee8cc1Swenshuai.xi             return IMAGE_STORE_3_FRAMES;
531*53ee8cc1Swenshuai.xi         case 4:
532*53ee8cc1Swenshuai.xi             if (gSrcInfo[MAIN_WINDOW].bInterlace)
533*53ee8cc1Swenshuai.xi             {
534*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_4_FIELDS;
535*53ee8cc1Swenshuai.xi             }
536*53ee8cc1Swenshuai.xi             else
537*53ee8cc1Swenshuai.xi             {
538*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_4_FRAMES;
539*53ee8cc1Swenshuai.xi             }
540*53ee8cc1Swenshuai.xi         case 6:
541*53ee8cc1Swenshuai.xi             if (gSrcInfo[MAIN_WINDOW].bInterlace)
542*53ee8cc1Swenshuai.xi             {
543*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_6_FIELDS;
544*53ee8cc1Swenshuai.xi             }
545*53ee8cc1Swenshuai.xi             else
546*53ee8cc1Swenshuai.xi             {
547*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_6_FRAMES;
548*53ee8cc1Swenshuai.xi             }
549*53ee8cc1Swenshuai.xi         case 8:
550*53ee8cc1Swenshuai.xi             if (gSrcInfo[MAIN_WINDOW].bInterlace)
551*53ee8cc1Swenshuai.xi             {
552*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_8_FIELDS;
553*53ee8cc1Swenshuai.xi             }
554*53ee8cc1Swenshuai.xi             else
555*53ee8cc1Swenshuai.xi             {
556*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_8_FRAMES;
557*53ee8cc1Swenshuai.xi             }
558*53ee8cc1Swenshuai.xi         case 10:
559*53ee8cc1Swenshuai.xi             return IMAGE_STORE_10_FIELDS;
560*53ee8cc1Swenshuai.xi         case 12:
561*53ee8cc1Swenshuai.xi             if (gSrcInfo[MAIN_WINDOW].bInterlace)
562*53ee8cc1Swenshuai.xi             {
563*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_12_FIELDS;
564*53ee8cc1Swenshuai.xi             }
565*53ee8cc1Swenshuai.xi             else
566*53ee8cc1Swenshuai.xi             {
567*53ee8cc1Swenshuai.xi                 return IMAGE_STORE_12_FRAMES;
568*53ee8cc1Swenshuai.xi             }
569*53ee8cc1Swenshuai.xi         case 14:
570*53ee8cc1Swenshuai.xi             return IMAGE_STORE_14_FIELDS;
571*53ee8cc1Swenshuai.xi         case 16:
572*53ee8cc1Swenshuai.xi             return IMAGE_STORE_16_FIELDS;
573*53ee8cc1Swenshuai.xi 
574*53ee8cc1Swenshuai.xi     }
575*53ee8cc1Swenshuai.xi 
576*53ee8cc1Swenshuai.xi     return IMAGE_STORE_UNDEFINE;
577*53ee8cc1Swenshuai.xi }
578*53ee8cc1Swenshuai.xi 
Hal_SC_set_wr_bank_mapping(void * pInstance,MS_U8 u8val,SCALER_WIN eWindow)579*53ee8cc1Swenshuai.xi void Hal_SC_set_wr_bank_mapping(void *pInstance, MS_U8 u8val, SCALER_WIN eWindow)
580*53ee8cc1Swenshuai.xi {
581*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
582*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
583*53ee8cc1Swenshuai.xi     SC_DBG(printf("Set WR bank mapping SC_BK12_07/47_L[15:13]= 0x%x\n", ((MS_U16)u8val)<<13));
584*53ee8cc1Swenshuai.xi 
585*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
586*53ee8cc1Swenshuai.xi     {
587*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, ((MS_U16)u8val)<<13, BIT(15)|BIT(14)|BIT(13));
588*53ee8cc1Swenshuai.xi     }
589*53ee8cc1Swenshuai.xi     else
590*53ee8cc1Swenshuai.xi     {
591*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, ((MS_U16)u8val)<<13, BIT(15)|BIT(14)|BIT(13));
592*53ee8cc1Swenshuai.xi     }
593*53ee8cc1Swenshuai.xi }
594*53ee8cc1Swenshuai.xi 
Hal_SC_set_frcm_wr_bank_mapping(void * pInstance,MS_U8 u8val,SCALER_WIN eWindow)595*53ee8cc1Swenshuai.xi void Hal_SC_set_frcm_wr_bank_mapping(void *pInstance, MS_U8 u8val, SCALER_WIN eWindow)
596*53ee8cc1Swenshuai.xi {
597*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
598*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
599*53ee8cc1Swenshuai.xi     SC_DBG(printf("Set WR bank mapping SC_BK12_07/47_L[15:13]= 0x%x\n", ((MS_U16)u8val)<<13));
600*53ee8cc1Swenshuai.xi 
601*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
602*53ee8cc1Swenshuai.xi     {
603*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_07_L, ((MS_U16)u8val)<<13, BIT(15)|BIT(14)|BIT(13));
604*53ee8cc1Swenshuai.xi     }
605*53ee8cc1Swenshuai.xi     else
606*53ee8cc1Swenshuai.xi     {
607*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_47_L, ((MS_U16)u8val)<<13, BIT(15)|BIT(14)|BIT(13));
608*53ee8cc1Swenshuai.xi     }
609*53ee8cc1Swenshuai.xi }
610*53ee8cc1Swenshuai.xi 
Hal_SC_set_wr_bank_mapping_num(void * pInstance,MS_U8 u8Val,SCALER_WIN eWindow)611*53ee8cc1Swenshuai.xi void Hal_SC_set_wr_bank_mapping_num(void *pInstance, MS_U8 u8Val, SCALER_WIN eWindow)
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi     Hal_SC_set_wr_bank_mapping(pInstance, u8Val, eWindow);
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi 
Hal_SC_Get_WR_Bank_Mapping(void * pInstance,SCALER_WIN eWindow)616*53ee8cc1Swenshuai.xi MS_U8 Hal_SC_Get_WR_Bank_Mapping(void *pInstance, SCALER_WIN eWindow)
617*53ee8cc1Swenshuai.xi {
618*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
619*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
620*53ee8cc1Swenshuai.xi     MS_U8 u8val = 0;
621*53ee8cc1Swenshuai.xi 
622*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
623*53ee8cc1Swenshuai.xi     {
624*53ee8cc1Swenshuai.xi         u8val = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, BIT(15)|BIT(14)|BIT(13)) >> 13;
625*53ee8cc1Swenshuai.xi     }
626*53ee8cc1Swenshuai.xi     else
627*53ee8cc1Swenshuai.xi     {
628*53ee8cc1Swenshuai.xi         u8val = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, BIT(15)|BIT(14)|BIT(13)) >> 13;
629*53ee8cc1Swenshuai.xi     }
630*53ee8cc1Swenshuai.xi     SC_DBG(printf("Get WR bank mapping SC_BK12_07/47_L[15:13]= 0x%x\n", ((MS_U16)u8val)<<13));
631*53ee8cc1Swenshuai.xi     return u8val;
632*53ee8cc1Swenshuai.xi }
633*53ee8cc1Swenshuai.xi 
Hal_SC_Get_WR_Bank_Mapping_Num(void * pInstance,SCALER_WIN eWindow)634*53ee8cc1Swenshuai.xi MS_U8 Hal_SC_Get_WR_Bank_Mapping_Num(void *pInstance, SCALER_WIN eWindow)
635*53ee8cc1Swenshuai.xi {
636*53ee8cc1Swenshuai.xi     return Hal_SC_Get_WR_Bank_Mapping(pInstance, eWindow);
637*53ee8cc1Swenshuai.xi }
638*53ee8cc1Swenshuai.xi 
Hal_SC_set_csc(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)639*53ee8cc1Swenshuai.xi void Hal_SC_set_csc(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
640*53ee8cc1Swenshuai.xi {
641*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
642*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
643*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
644*53ee8cc1Swenshuai.xi     {
645*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_40_L, (bEnable ? BIT(3):0), BIT(3));
646*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_01_L, (bEnable ? BIT(2):0), BIT(2));
647*53ee8cc1Swenshuai.xi     }
648*53ee8cc1Swenshuai.xi     else
649*53ee8cc1Swenshuai.xi     {
650*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK04_40_L, (bEnable ? BIT(3):0), BIT(3));
651*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK04_01_L, (bEnable ? BIT(2):0), BIT(2));
652*53ee8cc1Swenshuai.xi     }
653*53ee8cc1Swenshuai.xi }
654*53ee8cc1Swenshuai.xi 
Hal_SC_get_ip2_csc(void * pInstance,SCALER_WIN eWindow)655*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_get_ip2_csc(void *pInstance, SCALER_WIN eWindow)
656*53ee8cc1Swenshuai.xi {
657*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
658*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
659*53ee8cc1Swenshuai.xi     MS_BOOL bYUVInput;
660*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
661*53ee8cc1Swenshuai.xi     {
662*53ee8cc1Swenshuai.xi         // If it has CSC, it shows it must be RGB input.
663*53ee8cc1Swenshuai.xi         // Because in scaler, it must be YUV. So if input is RGB, then we need to do CSC
664*53ee8cc1Swenshuai.xi         bYUVInput = ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_40_L, BIT(3) ))? FALSE:TRUE;
665*53ee8cc1Swenshuai.xi     }
666*53ee8cc1Swenshuai.xi     else
667*53ee8cc1Swenshuai.xi     {
668*53ee8cc1Swenshuai.xi         bYUVInput = ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_40_L, BIT(3) ))? FALSE:TRUE;
669*53ee8cc1Swenshuai.xi     }
670*53ee8cc1Swenshuai.xi     return bYUVInput;
671*53ee8cc1Swenshuai.xi }
672*53ee8cc1Swenshuai.xi 
Hal_SC_set_delayline(void * pInstance,MS_U8 u8DelayLines,SCALER_WIN eWindow)673*53ee8cc1Swenshuai.xi void Hal_SC_set_delayline(void *pInstance, MS_U8 u8DelayLines, SCALER_WIN eWindow )
674*53ee8cc1Swenshuai.xi {
675*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
676*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
677*53ee8cc1Swenshuai.xi     //skip bit7, which is other usage
678*53ee8cc1Swenshuai.xi     MS_U16 u16DelayLines = ((MS_U16)u8DelayLines) & 0xFF;
679*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
680*53ee8cc1Swenshuai.xi     {
681*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_1C_L, (u16DelayLines<<4), (BIT(9)|BIT(8)|BIT(7)|BIT(6)|BIT(5)|BIT(4)));
682*53ee8cc1Swenshuai.xi     }
683*53ee8cc1Swenshuai.xi     else
684*53ee8cc1Swenshuai.xi     {
685*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_1C_L, (u16DelayLines<<4), (BIT(9)|BIT(8)|BIT(7)|BIT(6)|BIT(5)|BIT(4)));
686*53ee8cc1Swenshuai.xi     }
687*53ee8cc1Swenshuai.xi }
688*53ee8cc1Swenshuai.xi 
Hal_SC_set_write_limit(void * pInstance,MS_PHY u32WritelimitAddrBase,SCALER_WIN eWindow)689*53ee8cc1Swenshuai.xi void Hal_SC_set_write_limit(void *pInstance, MS_PHY u32WritelimitAddrBase, SCALER_WIN eWindow)
690*53ee8cc1Swenshuai.xi {
691*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
692*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
693*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
694*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
695*53ee8cc1Swenshuai.xi 
696*53ee8cc1Swenshuai.xi     MS_PHY u32MinLimitAddress = 0;
697*53ee8cc1Swenshuai.xi     MS_PHY u32MaxLimitAddress = 0;
698*53ee8cc1Swenshuai.xi 
699*53ee8cc1Swenshuai.xi #ifndef DONT_USE_CMA
700*53ee8cc1Swenshuai.xi #if (XC_SUPPORT_CMA ==TRUE)
701*53ee8cc1Swenshuai.xi #if ((HW_DESIGN_4K2K_VER == 4)||(HW_DESIGN_4K2K_VER == 6))
702*53ee8cc1Swenshuai.xi     #if (defined (ANDROID))
703*53ee8cc1Swenshuai.xi     if(pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].isEnable == FALSE)
704*53ee8cc1Swenshuai.xi     {
705*53ee8cc1Swenshuai.xi         UNUSED(u32WritelimitAddrBase);
706*53ee8cc1Swenshuai.xi         UNUSED(eWindow);
707*53ee8cc1Swenshuai.xi         return;
708*53ee8cc1Swenshuai.xi     }
709*53ee8cc1Swenshuai.xi     #endif
710*53ee8cc1Swenshuai.xi #endif
711*53ee8cc1Swenshuai.xi #endif
712*53ee8cc1Swenshuai.xi #endif
713*53ee8cc1Swenshuai.xi 
714*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
715*53ee8cc1Swenshuai.xi     // in Monaco, the 4K data path need to setup the IPM write on the FRCM base, and the max/min limit region also need to change
716*53ee8cc1Swenshuai.xi     if(gSrcInfo[eWindow].stCapWin.width > 3800)
717*53ee8cc1Swenshuai.xi     {
718*53ee8cc1Swenshuai.xi         u32MinLimitAddress = MHal_XC_GetFRCMBufAddress(pInstance, eWindow)/BYTE_PER_WORD ;
719*53ee8cc1Swenshuai.xi         if((MHal_XC_GetFRCMBufAddress(pInstance, eWindow) + MHal_XC_GetFRCMBufSize(pInstance, eWindow))!=0)
720*53ee8cc1Swenshuai.xi             u32MaxLimitAddress = (MHal_XC_GetFRCMBufAddress(pInstance, eWindow) + MHal_XC_GetFRCMBufSize(pInstance, eWindow))/BYTE_PER_WORD - 1;
721*53ee8cc1Swenshuai.xi         else
722*53ee8cc1Swenshuai.xi             u32MaxLimitAddress = u32MinLimitAddress;
723*53ee8cc1Swenshuai.xi     }
724*53ee8cc1Swenshuai.xi     //monaco mm DS VB size always be 4k2k , mvop timing is 4k2k , 2p mode
725*53ee8cc1Swenshuai.xi     else if ((pXCResourcePrivate->sthal_SC.bDynamicScalingEnable || pXCResourcePrivate->stdrvXC_Dynamicscaling._bDSForceIndexEnable[eWindow] ) &&
726*53ee8cc1Swenshuai.xi             (gSrcInfo[eWindow].Status2.u16VirtualBox_Width >= 0xF00) && (gSrcInfo[eWindow].Status2.u16VirtualBox_Height>= 0x870))
727*53ee8cc1Swenshuai.xi     {
728*53ee8cc1Swenshuai.xi         u32MinLimitAddress = MHal_XC_GetFRCMBufAddress(pInstance, eWindow)/BYTE_PER_WORD ;
729*53ee8cc1Swenshuai.xi         if((MHal_XC_GetFRCMBufAddress(pInstance, eWindow) + MHal_XC_GetFRCMBufSize(pInstance, eWindow))!=0)
730*53ee8cc1Swenshuai.xi             u32MaxLimitAddress = (MHal_XC_GetFRCMBufAddress(pInstance, eWindow) + MHal_XC_GetFRCMBufSize(pInstance, eWindow))/BYTE_PER_WORD - 1;
731*53ee8cc1Swenshuai.xi         else
732*53ee8cc1Swenshuai.xi             u32MaxLimitAddress = u32MinLimitAddress;
733*53ee8cc1Swenshuai.xi     }
734*53ee8cc1Swenshuai.xi     else
735*53ee8cc1Swenshuai.xi #endif
736*53ee8cc1Swenshuai.xi     {
737*53ee8cc1Swenshuai.xi         u32MinLimitAddress = MHal_XC_GetDNRBufAddress(pInstance, eWindow)/BYTE_PER_WORD ;
738*53ee8cc1Swenshuai.xi         if((MHal_XC_GetDNRBufAddress(pInstance, eWindow) + MHal_XC_GetDNRBufSize(pInstance, eWindow))!=0)
739*53ee8cc1Swenshuai.xi             u32MaxLimitAddress = (MHal_XC_GetDNRBufAddress(pInstance, eWindow) + MHal_XC_GetDNRBufSize(pInstance, eWindow))/BYTE_PER_WORD - 1;
740*53ee8cc1Swenshuai.xi         else
741*53ee8cc1Swenshuai.xi             u32MaxLimitAddress = u32MinLimitAddress;
742*53ee8cc1Swenshuai.xi     }
743*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"eWindow=%x, MHal_XC_GetDNRBufAddress=%tx, MHal_XC_GetDNRBufSize=%tx\n", eWindow, (ptrdiff_t)(MHal_XC_GetDNRBufAddress(pInstance, eWindow)/BYTE_PER_WORD ), (ptrdiff_t)((MHal_XC_GetDNRBufSize(pInstance, eWindow))/BYTE_PER_WORD));
744*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"eWindow=%x, u32MinLimitAddress=%tx, u32MaxLimitAddress=%tx\n", eWindow, (ptrdiff_t)u32MinLimitAddress, (ptrdiff_t)u32MaxLimitAddress);
745*53ee8cc1Swenshuai.xi 
746*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
747*53ee8cc1Swenshuai.xi     {
748*53ee8cc1Swenshuai.xi         /// need to disable the r/w request, when change the write limit base
749*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, BIT(0)|BIT(1), BIT(0)|BIT(1));
750*53ee8cc1Swenshuai.xi         if (IsHMirrorMode(eWindow) && IsEnableDualMode(eWindow))
751*53ee8cc1Swenshuai.xi         {
752*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_38_L, ((u32WritelimitAddrBase&BIT(31))?BIT(4):0),BIT(4)); //F2 memory address limit enable
753*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_48_L, u32MinLimitAddress); //F2 memory min address
754*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_4A_L, u32MaxLimitAddress); //F2 memory max address
755*53ee8cc1Swenshuai.xi         }
756*53ee8cc1Swenshuai.xi         else
757*53ee8cc1Swenshuai.xi         {
758*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_38_L, ((u32WritelimitAddrBase&BIT(31))?BIT(0):0),BIT(0)); //F2 memory address limit enable
759*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_40_L, u32MinLimitAddress); //F2 memory min address
760*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_42_L, u32MaxLimitAddress); //F2 memory max address
761*53ee8cc1Swenshuai.xi         }
762*53ee8cc1Swenshuai.xi         /// need to enable the r/w request
763*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, 0x00, BIT(0)|BIT(1));
764*53ee8cc1Swenshuai.xi     }
765*53ee8cc1Swenshuai.xi     else
766*53ee8cc1Swenshuai.xi     {
767*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, BIT(0)|BIT(1), BIT(0)|BIT(1));
768*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_38_L, ((u32WritelimitAddrBase&BIT(31))?BIT(1):0),BIT(1)); //F1 memory address limit enable
769*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_44_L, u32MinLimitAddress); //F1 memory min address
770*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_46_L, u32MaxLimitAddress); //F1 memory max address
771*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, 0x00, BIT(0)|BIT(1));
772*53ee8cc1Swenshuai.xi     }
773*53ee8cc1Swenshuai.xi }
774*53ee8cc1Swenshuai.xi 
Hal_SC_set_frcm_write_limit(void * pInstance,MS_PHY u32WritelimitAddrBase,SCALER_WIN eWindow)775*53ee8cc1Swenshuai.xi void Hal_SC_set_frcm_write_limit(void *pInstance, MS_PHY u32WritelimitAddrBase, SCALER_WIN eWindow)
776*53ee8cc1Swenshuai.xi {
777*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
778*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
779*53ee8cc1Swenshuai.xi     MS_PHY u32MinLimitAddress = MHal_XC_GetFRCMBufAddress(pInstance, eWindow)/BYTE_PER_WORD ;
780*53ee8cc1Swenshuai.xi     MS_PHY u32MaxLimitAddress = 0;
781*53ee8cc1Swenshuai.xi 
782*53ee8cc1Swenshuai.xi     if((MHal_XC_GetFRCMBufAddress(pInstance, eWindow) + MHal_XC_GetFRCMBufSize(pInstance, eWindow))!=0)
783*53ee8cc1Swenshuai.xi         u32MaxLimitAddress = (MHal_XC_GetFRCMBufAddress(pInstance, eWindow) + MHal_XC_GetFRCMBufSize(pInstance, eWindow))/BYTE_PER_WORD - 1;
784*53ee8cc1Swenshuai.xi     else
785*53ee8cc1Swenshuai.xi         u32MaxLimitAddress = u32MinLimitAddress;
786*53ee8cc1Swenshuai.xi 
787*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
788*53ee8cc1Swenshuai.xi     {
789*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_50_L, ((u32WritelimitAddrBase&BIT(31))?BIT(4):0),BIT(4)); //F2 memory address limit enable
790*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_64_L, u32MinLimitAddress); //F2 memory min address
791*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_66_L, u32MaxLimitAddress); //F2 memory max address
792*53ee8cc1Swenshuai.xi     }
793*53ee8cc1Swenshuai.xi     else
794*53ee8cc1Swenshuai.xi     {
795*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_50_L, ((u32WritelimitAddrBase&BIT(31))?BIT(5):0),BIT(5)); //F1 memory address limit enable
796*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_68_L, u32MinLimitAddress); //F1 memory min address
797*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_6A_L, u32MaxLimitAddress); //F1 memory max address
798*53ee8cc1Swenshuai.xi     }
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi }
801*53ee8cc1Swenshuai.xi 
Hal_SC_set_dual_write_limit(void * pInstance,MS_PHY u32WritelimitAddrBase,SCALER_WIN eWindow)802*53ee8cc1Swenshuai.xi void Hal_SC_set_dual_write_limit(void *pInstance, MS_PHY u32WritelimitAddrBase, SCALER_WIN eWindow)
803*53ee8cc1Swenshuai.xi {
804*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
805*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
806*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
807*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
808*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
809*53ee8cc1Swenshuai.xi 
810*53ee8cc1Swenshuai.xi     MS_PHY u32MinLimitAddress = 0;
811*53ee8cc1Swenshuai.xi     MS_PHY u32MaxLimitAddress = 0;
812*53ee8cc1Swenshuai.xi 
813*53ee8cc1Swenshuai.xi     u32MinLimitAddress = MHal_XC_GetDualDNRBufAddress(pInstance, eWindow)/BYTE_PER_WORD ;
814*53ee8cc1Swenshuai.xi     if((MHal_XC_GetDualDNRBufAddress(pInstance, eWindow) + MHal_XC_GetDualDNRBufSize(pInstance, eWindow))!=0)
815*53ee8cc1Swenshuai.xi         u32MaxLimitAddress = (MHal_XC_GetDualDNRBufAddress(pInstance, eWindow) + MHal_XC_GetDualDNRBufSize(pInstance, eWindow))/BYTE_PER_WORD - 1;
816*53ee8cc1Swenshuai.xi     else
817*53ee8cc1Swenshuai.xi         u32MaxLimitAddress = u32MinLimitAddress;
818*53ee8cc1Swenshuai.xi 
819*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"eWindow=%x, MHal_XC_GetDNRBufAddress=%tx, MHal_XC_GetDNRBufSize=%tx\n", eWindow, (ptrdiff_t)(MHal_XC_GetDNRBufAddress(pInstance, eWindow)/BYTE_PER_WORD ), (ptrdiff_t)((MHal_XC_GetDNRBufSize(pInstance, eWindow))/BYTE_PER_WORD));
820*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"eWindow=%x, u32MinLimitAddress=%tx, u32MaxLimitAddress=%tx\n", eWindow, (ptrdiff_t)u32MinLimitAddress, (ptrdiff_t)u32MaxLimitAddress);
821*53ee8cc1Swenshuai.xi 
822*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
823*53ee8cc1Swenshuai.xi     {
824*53ee8cc1Swenshuai.xi         /// need to disable the r/w request, when change the write limit base
825*53ee8cc1Swenshuai.xi         /// For SCMI0/1 use the same IPM r/w request.
826*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, BIT(0)|BIT(1), BIT(0)|BIT(1));
827*53ee8cc1Swenshuai.xi         if (IsHMirrorMode(eWindow) && IsEnableDualMode(eWindow))
828*53ee8cc1Swenshuai.xi         {
829*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_38_L, ((u32WritelimitAddrBase&BIT(31))?BIT(0):0),BIT(0)); //F2 memory address limit enable
830*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_40_L, u32MinLimitAddress); //F2 memory min address
831*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_42_L, u32MaxLimitAddress); //F2 memory max address
832*53ee8cc1Swenshuai.xi 
833*53ee8cc1Swenshuai.xi         }
834*53ee8cc1Swenshuai.xi         else
835*53ee8cc1Swenshuai.xi         {
836*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_38_L, ((u32WritelimitAddrBase&BIT(31))?BIT(4):0),BIT(4)); //F2 memory address limit enable
837*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_48_L, u32MinLimitAddress); //F2 memory min address
838*53ee8cc1Swenshuai.xi             SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0D_4A_L, u32MaxLimitAddress); //F2 memory max address
839*53ee8cc1Swenshuai.xi         }
840*53ee8cc1Swenshuai.xi         /// need to enable the r/w request
841*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, 0x00, BIT(0)|BIT(1));
842*53ee8cc1Swenshuai.xi     }
843*53ee8cc1Swenshuai.xi #endif
844*53ee8cc1Swenshuai.xi }
845*53ee8cc1Swenshuai.xi 
Hal_SC_set_opm_write_limit(void * pInstance,MS_BOOL bEnable,MS_BOOL bFlag,MS_U32 u32OPWlimitAddr,SCALER_WIN eWindow)846*53ee8cc1Swenshuai.xi void Hal_SC_set_opm_write_limit(void *pInstance, MS_BOOL bEnable, MS_BOOL bFlag, MS_U32 u32OPWlimitAddr, SCALER_WIN eWindow)
847*53ee8cc1Swenshuai.xi {
848*53ee8cc1Swenshuai.xi #if 0
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi     MS_U16 u16temp = 0x00;
851*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
852*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi     // Only support address of Main_Window
855*53ee8cc1Swenshuai.xi     if (eWindow != MAIN_WINDOW )
856*53ee8cc1Swenshuai.xi         return;
857*53ee8cc1Swenshuai.xi 
858*53ee8cc1Swenshuai.xi     // Bit 0 ~ 24
859*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_5E_L, u32OPWlimitAddr & 0xFFFF);
860*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_5F_L, (u32OPWlimitAddr >> 16) & 0x1FF);
861*53ee8cc1Swenshuai.xi 
862*53ee8cc1Swenshuai.xi     // OPW limit enable
863*53ee8cc1Swenshuai.xi     if (bEnable)
864*53ee8cc1Swenshuai.xi         u16temp = BIT(9);
865*53ee8cc1Swenshuai.xi 
866*53ee8cc1Swenshuai.xi     // OPW limit flag 0: maximum 1:minimum
867*53ee8cc1Swenshuai.xi     if (bFlag)
868*53ee8cc1Swenshuai.xi         u16temp |= BIT(10);
869*53ee8cc1Swenshuai.xi 
870*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_5F_L,u16temp ,BIT(9) | BIT(10) );
871*53ee8cc1Swenshuai.xi #endif
872*53ee8cc1Swenshuai.xi }
873*53ee8cc1Swenshuai.xi 
Hal_SC_is_extra_req_en(void * pInstance,MS_U16 * pu16MainHStart,MS_U16 * pu16MainHEnd,MS_U16 * pu16SubHStart,MS_U16 * pu16SubHEnd)874*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_is_extra_req_en(void *pInstance,
875*53ee8cc1Swenshuai.xi     MS_U16 *pu16MainHStart, MS_U16 *pu16MainHEnd,
876*53ee8cc1Swenshuai.xi     MS_U16 *pu16SubHStart,  MS_U16 *pu16SubHEnd)
877*53ee8cc1Swenshuai.xi {
878*53ee8cc1Swenshuai.xi     MS_BOOL bEn = FALSE;
879*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
880*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
881*53ee8cc1Swenshuai.xi 
882*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
883*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
884*53ee8cc1Swenshuai.xi 
885*53ee8cc1Swenshuai.xi     MS_U16 u16MainHStart, u16SubHStart;
886*53ee8cc1Swenshuai.xi     MS_U16 u16MainHEnd, u16SubHEnd;
887*53ee8cc1Swenshuai.xi 
888*53ee8cc1Swenshuai.xi     u16MainHStart = pu16MainHStart == NULL ? SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_08_L) : *pu16MainHStart;
889*53ee8cc1Swenshuai.xi     u16MainHEnd   = pu16MainHEnd   == NULL ? SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_09_L) : *pu16MainHEnd;
890*53ee8cc1Swenshuai.xi     u16SubHStart  = pu16SubHStart  == NULL ? SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_07_L) : *pu16SubHStart;
891*53ee8cc1Swenshuai.xi     u16SubHEnd    = pu16SubHEnd    == NULL ? SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_08_L) : *pu16SubHEnd;
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi     if( SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, BIT(1))
894*53ee8cc1Swenshuai.xi         &&(((psXCInstPri->u32DeviceID == 0) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
895*53ee8cc1Swenshuai.xi              ||(psXCInstPri->u32DeviceID == 1))
896*53ee8cc1Swenshuai.xi       ) // Only Legacy mode use old rule for extra enable
897*53ee8cc1Swenshuai.xi     {
898*53ee8cc1Swenshuai.xi         if(u16MainHStart > u16SubHStart || u16MainHEnd < u16SubHEnd)
899*53ee8cc1Swenshuai.xi         {
900*53ee8cc1Swenshuai.xi             bEn = FALSE;
901*53ee8cc1Swenshuai.xi         }
902*53ee8cc1Swenshuai.xi         else
903*53ee8cc1Swenshuai.xi         {
904*53ee8cc1Swenshuai.xi             bEn = TRUE;
905*53ee8cc1Swenshuai.xi         }
906*53ee8cc1Swenshuai.xi     }
907*53ee8cc1Swenshuai.xi     else
908*53ee8cc1Swenshuai.xi     {
909*53ee8cc1Swenshuai.xi         bEn = FALSE;
910*53ee8cc1Swenshuai.xi     }
911*53ee8cc1Swenshuai.xi #if DBG_EN
912*53ee8cc1Swenshuai.xi     SC_DBG(printf("Sub=%d, MainHs=%d, SubHs=%d, MainHe=%d, SubHe=%d :: Extra=%d\n",
913*53ee8cc1Swenshuai.xi      SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, BIT(1)),
914*53ee8cc1Swenshuai.xi      u16MainHStart, u16SubHStart, u16MainHEnd, u16SubHEnd, bEn));
915*53ee8cc1Swenshuai.xi #endif
916*53ee8cc1Swenshuai.xi     return bEn;
917*53ee8cc1Swenshuai.xi 
918*53ee8cc1Swenshuai.xi }
919*53ee8cc1Swenshuai.xi 
920*53ee8cc1Swenshuai.xi #if 0 //Dual not support switch miu select dynamicly.
921*53ee8cc1Swenshuai.xi //#ifdef UFO_XC_SUPPORT_DUAL_MIU
922*53ee8cc1Swenshuai.xi #if (MIU_SEL_USE_XC_INTERNAL == FALSE)
923*53ee8cc1Swenshuai.xi // Miu opm1 opm2 need to be switched just under Dual Mirror case, so it should be Called in runtime.
924*53ee8cc1Swenshuai.xi // This API just for swap OPM when miu select control by miu arb.
925*53ee8cc1Swenshuai.xi static void _Hal_SC_adjust_dual_miu_setting(void *pInstance, MS_PHY u32FBAddress, MS_PHY u32DualFBAddress, MS_BOOL bMirrorWithDual, MS_U16 *pu16OPMLeftMiuSel, MS_U16 *pu16OPMRightMiuSel)
926*53ee8cc1Swenshuai.xi {
927*53ee8cc1Swenshuai.xi     MS_U8 u8MIUSel = 0;
928*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MIUSel, u32FBAddress, u32FBAddress);
929*53ee8cc1Swenshuai.xi     if (u8MIUSel == 0)
930*53ee8cc1Swenshuai.xi     {
931*53ee8cc1Swenshuai.xi         //IPM0 OPM0 access miu0
932*53ee8cc1Swenshuai.xi         *pu16OPMLeftMiuSel = 0x0;
933*53ee8cc1Swenshuai.xi     }
934*53ee8cc1Swenshuai.xi     else if(u8MIUSel == 1)
935*53ee8cc1Swenshuai.xi     {
936*53ee8cc1Swenshuai.xi         // OPM0 access miu 1
937*53ee8cc1Swenshuai.xi         *pu16OPMLeftMiuSel = 0x1;
938*53ee8cc1Swenshuai.xi     }
939*53ee8cc1Swenshuai.xi     else if(u8MIUSel == 2)
940*53ee8cc1Swenshuai.xi     {
941*53ee8cc1Swenshuai.xi         // OPM0 access miu 1
942*53ee8cc1Swenshuai.xi         *pu16OPMLeftMiuSel = 0x2;
943*53ee8cc1Swenshuai.xi     }
944*53ee8cc1Swenshuai.xi 
945*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MIUSel, u32DualFBAddress, u32DualFBAddress);
946*53ee8cc1Swenshuai.xi     if (u8MIUSel == 0)
947*53ee8cc1Swenshuai.xi     {
948*53ee8cc1Swenshuai.xi         //IPM0 OPM0 access miu0
949*53ee8cc1Swenshuai.xi         *pu16OPMRightMiuSel = 0x0;
950*53ee8cc1Swenshuai.xi     }
951*53ee8cc1Swenshuai.xi     else if(u8MIUSel == 1)
952*53ee8cc1Swenshuai.xi     {
953*53ee8cc1Swenshuai.xi         // OPM0 access miu 1
954*53ee8cc1Swenshuai.xi         *pu16OPMRightMiuSel = 0x1;
955*53ee8cc1Swenshuai.xi     }
956*53ee8cc1Swenshuai.xi     else if(u8MIUSel == 2)
957*53ee8cc1Swenshuai.xi     {
958*53ee8cc1Swenshuai.xi         // OPM0 access miu 1
959*53ee8cc1Swenshuai.xi         *pu16OPMRightMiuSel = 0x2;
960*53ee8cc1Swenshuai.xi     }
961*53ee8cc1Swenshuai.xi 
962*53ee8cc1Swenshuai.xi     if (bMirrorWithDual)
963*53ee8cc1Swenshuai.xi     {
964*53ee8cc1Swenshuai.xi         MS_U16 u16Tmp = *pu16OPMLeftMiuSel;
965*53ee8cc1Swenshuai.xi         *pu16OPMLeftMiuSel = *pu16OPMRightMiuSel;
966*53ee8cc1Swenshuai.xi         *pu16OPMRightMiuSel = u16Tmp;
967*53ee8cc1Swenshuai.xi     }
968*53ee8cc1Swenshuai.xi 
969*53ee8cc1Swenshuai.xi }
970*53ee8cc1Swenshuai.xi 
971*53ee8cc1Swenshuai.xi #else
972*53ee8cc1Swenshuai.xi //the patch to reset the miu selection ,becuase HW always swaps the miu selection on dual or without dual.
973*53ee8cc1Swenshuai.xi static void _Hal_SC_adjust_swap_miu_setting(void *pInstance,MS_PHY u32FBAddress)
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi     MS_U8 u8MIUSel = 0;
976*53ee8cc1Swenshuai.xi     MS_U8 u8MIUSel_temp= 0;
977*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
978*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
979*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
980*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
981*53ee8cc1Swenshuai.xi     u8MIUSel_temp = SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, BIT(4)) >> 3;
982*53ee8cc1Swenshuai.xi     u8MIUSel_temp = u8MIUSel_temp | (SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, BIT(4)) >> 4);
983*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MIUSel, u32FBAddress, u32FBAddress);
984*53ee8cc1Swenshuai.xi     if(u8MIUSel_temp != u8MIUSel)
985*53ee8cc1Swenshuai.xi     {
986*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, (u8MIUSel & BIT(0)) << 4 , 0x0010);
987*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, ((u8MIUSel & BIT(1)) >> 1) << 4 , 0x0010);
988*53ee8cc1Swenshuai.xi     }
989*53ee8cc1Swenshuai.xi     else
990*53ee8cc1Swenshuai.xi     {
991*53ee8cc1Swenshuai.xi         printf("The miu has been set correctly function %s line %d parars \n",__FUNCTION__,__LINE__);
992*53ee8cc1Swenshuai.xi     }
993*53ee8cc1Swenshuai.xi }
994*53ee8cc1Swenshuai.xi static void _Hal_SC_adjust_swap_miu_setting_burst(void *pInstance,MS_PHY u32FBAddress)
995*53ee8cc1Swenshuai.xi {
996*53ee8cc1Swenshuai.xi     MS_U8 u8MIUSel = 0;
997*53ee8cc1Swenshuai.xi     MS_U8 u8MIUSel_temp= 0;
998*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
999*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1000*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
1001*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
1002*53ee8cc1Swenshuai.xi     u8MIUSel_temp = SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, BIT(4)) >> 3;
1003*53ee8cc1Swenshuai.xi     u8MIUSel_temp = u8MIUSel_temp | (SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, BIT(4)) >> 4);
1004*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MIUSel, u32FBAddress, u32FBAddress);
1005*53ee8cc1Swenshuai.xi     if(u8MIUSel_temp != u8MIUSel)
1006*53ee8cc1Swenshuai.xi     {
1007*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_05_L, (u8MIUSel & BIT(0)) << 4 ,BIT(4));
1008*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK51_05_L, ((u8MIUSel & BIT(1)) >> 1) << 4 ,BIT(4));
1009*53ee8cc1Swenshuai.xi     }
1010*53ee8cc1Swenshuai.xi     else
1011*53ee8cc1Swenshuai.xi     {
1012*53ee8cc1Swenshuai.xi         printf("The miu has been set correctly function %s line %d parars \n",__FUNCTION__,__LINE__);
1013*53ee8cc1Swenshuai.xi     }
1014*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
1015*53ee8cc1Swenshuai.xi }
1016*53ee8cc1Swenshuai.xi #endif
1017*53ee8cc1Swenshuai.xi #endif
1018*53ee8cc1Swenshuai.xi 
_Hal_SC_fill_main_sw_db_burst(void * pInstance,P_SC_SWDB_INFO pDBreg)1019*53ee8cc1Swenshuai.xi static void _Hal_SC_fill_main_sw_db_burst(void *pInstance, P_SC_SWDB_INFO pDBreg)
1020*53ee8cc1Swenshuai.xi {
1021*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1022*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1023*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
1024*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
1025*53ee8cc1Swenshuai.xi 
1026*53ee8cc1Swenshuai.xi     if(Hal_SC_is_extra_req_en(pInstance, &pDBreg->u16H_DisStart, &pDBreg->u16H_DisEnd, NULL, NULL))
1027*53ee8cc1Swenshuai.xi     {
1028*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, BIT(15), BIT(15));
1029*53ee8cc1Swenshuai.xi     }
1030*53ee8cc1Swenshuai.xi     else
1031*53ee8cc1Swenshuai.xi     {
1032*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, 0, BIT(15));
1033*53ee8cc1Swenshuai.xi     }
1034*53ee8cc1Swenshuai.xi 
1035*53ee8cc1Swenshuai.xi     //H pre-scaling
1036*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK02_04_L, (MS_U16)(pDBreg->u32H_PreScalingRatio>>00), 0xFFFF);
1037*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK02_05_L, (MS_U16)(pDBreg->u32H_PreScalingRatio>>16), 0xFFFF);
1038*53ee8cc1Swenshuai.xi     //V pre-scaling
1039*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK02_08_L, (MS_U16)(pDBreg->u32V_PreScalingRatio>>00), 0xFFFF);
1040*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK02_09_L, (MS_U16)(pDBreg->u32V_PreScalingRatio>>16), 0xFFFF);
1041*53ee8cc1Swenshuai.xi     //H post-scaling
1042*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_07_L, (MS_U16)(pDBreg->u32H_PostScalingRatio>>00), 0xFFFF);
1043*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_08_L, (MS_U16)(pDBreg->u32H_PostScalingRatio>>16), 0xFFFF);
1044*53ee8cc1Swenshuai.xi     //V post-scaling
1045*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_09_L, (MS_U16)(pDBreg->u32V_PostScalingRatio>>00), 0xFFFF);
1046*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_0A_L, (MS_U16)(pDBreg->u32V_PostScalingRatio>>16), 0xFFFF);
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi     //SCMI: vertical limitation
1049*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_18_L, (MS_U16)(pDBreg->u16VWritelimit), 0xFFFF);
1050*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1A_L, (MS_U16)(pDBreg->u32DNRBase1>>00), 0xFFFF);
1051*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1B_L, (MS_U16)(pDBreg->u32DNRBase1>>16), 0xFFFF);
1052*53ee8cc1Swenshuai.xi 
1053*53ee8cc1Swenshuai.xi     //SCMI: IPM address 0
1054*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_08_L, (MS_U16)(pDBreg->u32DNRBase0>>00), 0xFFFF);
1055*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_09_L, (MS_U16)(pDBreg->u32DNRBase0>>16), 0xFFFF);
1056*53ee8cc1Swenshuai.xi     //SCMI: DNR address 1
1057*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1A_L, (MS_U16)(pDBreg->u32DNRBase1>>00), 0xFFFF);
1058*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1B_L, (MS_U16)(pDBreg->u32DNRBase1>>16), 0xFFFF);
1059*53ee8cc1Swenshuai.xi     //SCMI: DNR address 2
1060*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_0C_L, (MS_U16)(pDBreg->u32DNRBase2>>00), 0xFFFF);
1061*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_0D_L, (MS_U16)(pDBreg->u32DNRBase2>>16), 0xFFFF);
1062*53ee8cc1Swenshuai.xi 
1063*53ee8cc1Swenshuai.xi     //SCMI: DNR offset
1064*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_0E_L, (MS_U16)(pDBreg->u16DNROffset>>00), 0xFFFF);
1065*53ee8cc1Swenshuai.xi     //SCMI: DNR fetch
1066*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_0F_L, (MS_U16)(pDBreg->u16DNRFetch>>00), 0xFFFF);
1067*53ee8cc1Swenshuai.xi 
1068*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1C_L, 0x0, 0xFFFF); //always disable IP H mirror line offset note:ds will enable this register at vdec firmware
1069*53ee8cc1Swenshuai.xi 
1070*53ee8cc1Swenshuai.xi     //SCMI: OPM address 0
1071*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_10_L, (MS_U16)(pDBreg->u32OPMBase0>>00), 0xFFFF);
1072*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_11_L, (MS_U16)(pDBreg->u32OPMBase0>>16), 0xFFFF);
1073*53ee8cc1Swenshuai.xi     //SCMI: OPM address 1
1074*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_12_L, (MS_U16)(pDBreg->u32OPMBase1>>00), 0xFFFF);
1075*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_13_L, (MS_U16)(pDBreg->u32OPMBase1>>16), 0xFFFF);
1076*53ee8cc1Swenshuai.xi     //SCMI: OPM address 2
1077*53ee8cc1Swenshuai.xi     //    MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_14_L, (MS_U16)(pDBreg->u32OPMBase2>>00), 0xFFFF);
1078*53ee8cc1Swenshuai.xi     //    MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_15_L, (MS_U16)(pDBreg->u32OPMBase2>>16), 0xFFFF);
1079*53ee8cc1Swenshuai.xi     //SCMI: OPM offset
1080*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_16_L, (MS_U16)(pDBreg->u16OPMOffset>>00), 0xFFFF);
1081*53ee8cc1Swenshuai.xi     //SCMI: OPM fetch
1082*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_17_L, (MS_U16)(pDBreg->u16OPMFetch>>00), 0xFFFF);
1083*53ee8cc1Swenshuai.xi 
1084*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
1085*53ee8cc1Swenshuai.xi     if (psXCInstPri->u32DeviceID == 0) // Dual miu just support sc0 main window for main window.
1086*53ee8cc1Swenshuai.xi     {
1087*53ee8cc1Swenshuai.xi         if (IsEnableDualMode(MAIN_WINDOW))
1088*53ee8cc1Swenshuai.xi         {
1089*53ee8cc1Swenshuai.xi #if 0 // Dual do not support switch MIU setting Dynamic.
1090*53ee8cc1Swenshuai.xi #if (MIU_SEL_USE_XC_INTERNAL == FALSE)
1091*53ee8cc1Swenshuai.xi             MS_U16 u16OPMLeftMiuSel = 0;
1092*53ee8cc1Swenshuai.xi             MS_U16 u16OPMRightMiuSel = 0;
1093*53ee8cc1Swenshuai.xi             if(IsHMirrorMode(MAIN_WINDOW))
1094*53ee8cc1Swenshuai.xi             {
1095*53ee8cc1Swenshuai.xi                 _Hal_SC_adjust_dual_miu_setting(pInstance, pXCResourcePrivate->stdrvXC_Scaling._au32PreFBAddress[MAIN_WINDOW],
1096*53ee8cc1Swenshuai.xi                                                 pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW], TRUE, &u16OPMLeftMiuSel, &u16OPMRightMiuSel);
1097*53ee8cc1Swenshuai.xi             }
1098*53ee8cc1Swenshuai.xi             else
1099*53ee8cc1Swenshuai.xi             {
1100*53ee8cc1Swenshuai.xi                 _Hal_SC_adjust_dual_miu_setting(pInstance, pXCResourcePrivate->stdrvXC_Scaling._au32PreFBAddress[MAIN_WINDOW],
1101*53ee8cc1Swenshuai.xi                                                 pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW], FALSE, &u16OPMLeftMiuSel, &u16OPMRightMiuSel);
1102*53ee8cc1Swenshuai.xi             }
1103*53ee8cc1Swenshuai.xi 
1104*53ee8cc1Swenshuai.xi             // miu request0  IPM/OPM LSB
1105*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK7F_10_L, ((u16OPMLeftMiuSel & BIT(0)) << 1)|(u16OPMLeftMiuSel & BIT(0)), BIT(1)| BIT(0));
1106*53ee8cc1Swenshuai.xi             // miu request0  IPM/OPM MSB
1107*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK7F_18_L, (u16OPMLeftMiuSel & BIT(1))|((u16OPMLeftMiuSel & BIT(1)) >> 1), BIT(1)| BIT(0));
1108*53ee8cc1Swenshuai.xi             // miu request1  IPM/OPM
1109*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK7F_19_L, (u16OPMRightMiuSel << 2)| u16OPMRightMiuSel , BIT(3)| BIT(2) | BIT(1)| BIT(0));
1110*53ee8cc1Swenshuai.xi #else
1111*53ee8cc1Swenshuai.xi             _Hal_SC_adjust_swap_miu_setting_burst(pInstance,pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW]);
1112*53ee8cc1Swenshuai.xi #endif
1113*53ee8cc1Swenshuai.xi #endif
1114*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_08_L, (MS_U16)(pDBreg->u32DualDNRBase0 >> 0), 0xFFFF);  //F2_1 IPM base addr
1115*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_09_L, (MS_U16)(pDBreg->u32DualDNRBase0 >> 16), 0xFFFF);
1116*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_0E_L, (MS_U16)(pDBreg->u16DualDNROffset), 0x1FFF);  //F2_1 IPM offset
1117*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_0F_L, (MS_U16)(pDBreg->u16DualDNRFetch), 0x1FFF);  //F2_1 IPM fetch number
1118*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_10_L, (MS_U16)(pDBreg->u32DualOPMBase0 >> 0), 0xFFFF);  //F2_1 OPM base addr
1119*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_11_L, (MS_U16)(pDBreg->u32DualOPMBase0 >> 16), 0xFFFF);
1120*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_16_L, (MS_U16)(pDBreg->u16DualOPMOffset), 0x1FFF);  //F2_1 OPM offset
1121*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK52_17_L, (MS_U16)(pDBreg->u16DualOPMFetch), 0x1FFF);  //F2_1 OPM fetch number
1122*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK11_28_L, (MS_U16)(pDBreg->u16DualDNRFetch + pXCResourcePrivate->stdrvXC_MVideo_Context.stDBreg.u16DNRFetch), 0x1FFF);  //F2 IPM total fetch
1123*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK11_29_L, (MS_U16)(BIT(15)|(pDBreg->u16DualOPMFetch + pXCResourcePrivate->stdrvXC_MVideo_Context.stDBreg.u16OPMFetch)), 0x1FFF | BIT(15));  //F2 OPM total fetch
1124*53ee8cc1Swenshuai.xi 
1125*53ee8cc1Swenshuai.xi         }
1126*53ee8cc1Swenshuai.xi         else
1127*53ee8cc1Swenshuai.xi         {
1128*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK11_29_L, 0, BIT(15));
1129*53ee8cc1Swenshuai.xi #if 0 // Dual do not support switch MIU setting Dynamic.
1130*53ee8cc1Swenshuai.xi #if (MIU_SEL_USE_XC_INTERNAL == FALSE)
1131*53ee8cc1Swenshuai.xi             MS_U16 u16OPMLeftMiuSel = 0;
1132*53ee8cc1Swenshuai.xi             MS_U16 u16OPMRightMiuSel = 0;
1133*53ee8cc1Swenshuai.xi             _Hal_SC_adjust_dual_miu_setting(pInstance, pXCResourcePrivate->stdrvXC_Scaling._au32PreFBAddress[MAIN_WINDOW],
1134*53ee8cc1Swenshuai.xi                                             pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW], FALSE, &u16OPMLeftMiuSel, &u16OPMRightMiuSel);
1135*53ee8cc1Swenshuai.xi             // miu request0  IPM/OPM LSB
1136*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK7F_10_L, ((u16OPMLeftMiuSel & BIT(0)) << 1)|(u16OPMLeftMiuSel & BIT(0)), BIT(1)| BIT(0));
1137*53ee8cc1Swenshuai.xi             // miu request0  IPM/OPM MSB
1138*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK7F_18_L, (u16OPMLeftMiuSel & BIT(1))|((u16OPMLeftMiuSel & BIT(1)) >> 1), BIT(1)| BIT(0));
1139*53ee8cc1Swenshuai.xi             // miu request1  IPM/OPM
1140*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK7F_19_L, (u16OPMRightMiuSel << 2)| u16OPMRightMiuSel , BIT(3)| BIT(2) | BIT(1)| BIT(0));
1141*53ee8cc1Swenshuai.xi #endif
1142*53ee8cc1Swenshuai.xi #endif
1143*53ee8cc1Swenshuai.xi         }
1144*53ee8cc1Swenshuai.xi     }
1145*53ee8cc1Swenshuai.xi #endif
1146*53ee8cc1Swenshuai.xi 
1147*53ee8cc1Swenshuai.xi     //PIP
1148*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_15_L, (MS_U16)(pDBreg->u16VLen>>00), 0xFFFF); // Write V length
1149*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_1D_L, (MS_U16)(pDBreg->u16LBOffset&0xFF), 0x00FF);
1150*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_1C_L, (MS_U16)(pDBreg->u16DispOffset&0xFF), 0x00FF);
1151*53ee8cc1Swenshuai.xi     // if LB Offset > externded pixels of bottom A session,
1152*53ee8cc1Swenshuai.xi     // there would be garbage on the left side of sub video
1153*53ee8cc1Swenshuai.xi     if (pDBreg->u16LBOffset > SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_14_L, 0x00FF))
1154*53ee8cc1Swenshuai.xi     {
1155*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_14_L, (pDBreg->u16LBOffset&0xFF), 0x00FF);
1156*53ee8cc1Swenshuai.xi     }
1157*53ee8cc1Swenshuai.xi 
1158*53ee8cc1Swenshuai.xi #if defined(UFO_XC_HDR) && defined(UFO_XC_HDR_VERSION) && (UFO_XC_HDR_VERSION == 2)
1159*53ee8cc1Swenshuai.xi     //HDR input DE Window info
1160*53ee8cc1Swenshuai.xi     if (gSrcInfo[MAIN_WINDOW].bR_FBL)
1161*53ee8cc1Swenshuai.xi     {
1162*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK79_08_L, (MS_U16)(gSrcInfo[MAIN_WINDOW].stCropWin.width>>00), 0x1FFF);
1163*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK79_09_L, (MS_U16)(gSrcInfo[MAIN_WINDOW].stCropWin.height>>00), 0x0FFF);
1164*53ee8cc1Swenshuai.xi     }
1165*53ee8cc1Swenshuai.xi     else
1166*53ee8cc1Swenshuai.xi     {
1167*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK79_08_L, (MS_U16)(pDBreg->u16H_CapSize>>00), 0x1FFF);
1168*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK79_09_L, (MS_U16)(pDBreg->u16V_CapSize>>00), 0x0FFF);
1169*53ee8cc1Swenshuai.xi     }
1170*53ee8cc1Swenshuai.xi #endif
1171*53ee8cc1Swenshuai.xi 
1172*53ee8cc1Swenshuai.xi     /// before enable ML bit mask feature, the capture size for 2P setting BK01_07[15] need to be considered
1173*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, BIT(15)))
1174*53ee8cc1Swenshuai.xi         pDBreg->u16H_CapSize |= 0x8000;
1175*53ee8cc1Swenshuai.xi     else
1176*53ee8cc1Swenshuai.xi         pDBreg->u16H_CapSize |= 0x0000;
1177*53ee8cc1Swenshuai.xi 
1178*53ee8cc1Swenshuai.xi         //capture window
1179*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_04_L, (MS_U16)(pDBreg->u16V_CapStart>>00), 0xFFFF);
1180*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_05_L, (MS_U16)(pDBreg->u16H_CapStart>>00), 0xFFFF);
1181*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_06_L, (MS_U16)(pDBreg->u16V_CapSize>>00), 0xFFFF);
1182*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_07_L, (MS_U16)(pDBreg->u16H_CapSize>>00), 0xFFFF);
1183*53ee8cc1Swenshuai.xi 
1184*53ee8cc1Swenshuai.xi         //Display window
1185*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_08_L, (MS_U16)(pDBreg->u16H_DisStart>>00), VOP_DISPLAY_HSTART_MASK);
1186*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_09_L, (MS_U16)(pDBreg->u16H_DisEnd>>00), VOP_DISPLAY_HEND_MASK);
1187*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0A_L, (MS_U16)(pDBreg->u16V_DisStart>>00), 0xFFFF);
1188*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0B_L, (MS_U16)(pDBreg->u16V_DisEnd>>00), 0xFFFF);
1189*53ee8cc1Swenshuai.xi 
1190*53ee8cc1Swenshuai.xi   //  MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1C_L, 0x0, 0xFFFF); //always disable IP H mirror line offset note:ds will enable this register at vdec firmware
1191*53ee8cc1Swenshuai.xi 
1192*53ee8cc1Swenshuai.xi #if SUPPORT_2_FRAME_MIRROR
1193*53ee8cc1Swenshuai.xi 
1194*53ee8cc1Swenshuai.xi     if( (gSrcInfo[MAIN_WINDOW].Status2.eFrameStoreNumber == IMAGE_STORE_2_FRAMES) && (!gSrcInfo[MAIN_WINDOW].bInterlace) && (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK2A_02_L, BIT(15)) == 0))
1195*53ee8cc1Swenshuai.xi     {
1196*53ee8cc1Swenshuai.xi         // 2_frmae_mirror cannot work when UC on
1197*53ee8cc1Swenshuai.xi 
1198*53ee8cc1Swenshuai.xi         //SCMI: DNR address 1
1199*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1A_L, (MS_U16)(pDBreg->u32DNRBase1>>00), 0xFFFF);
1200*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_1B_L, (MS_U16)(pDBreg->u32DNRBase1>>16), 0xFFFF);
1201*53ee8cc1Swenshuai.xi 
1202*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_30_L, 0x4000,0xFFFF);// enable two frame mirror
1203*53ee8cc1Swenshuai.xi 
1204*53ee8cc1Swenshuai.xi         if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_01_L, 0x0001) == 0 )//compress mode
1205*53ee8cc1Swenshuai.xi         {
1206*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK08_32_L, 0x20,0x00F0); // opm_ce_lcnt_inv
1207*53ee8cc1Swenshuai.xi         }
1208*53ee8cc1Swenshuai.xi     }
1209*53ee8cc1Swenshuai.xi     else
1210*53ee8cc1Swenshuai.xi     {
1211*53ee8cc1Swenshuai.xi         if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK2A_02_L, BIT(15)) == BIT(15))
1212*53ee8cc1Swenshuai.xi         {
1213*53ee8cc1Swenshuai.xi             printf("@@ [%s,%5d] 2_frmae_mirror cannot work when UC on  \n",__func__,__LINE__);
1214*53ee8cc1Swenshuai.xi         }
1215*53ee8cc1Swenshuai.xi 
1216*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_30_L, 0x0000,0xFFFF);// disable two frame mirror
1217*53ee8cc1Swenshuai.xi     }
1218*53ee8cc1Swenshuai.xi #endif
1219*53ee8cc1Swenshuai.xi 
1220*53ee8cc1Swenshuai.xi     MS_U16 u16reg = 0;
1221*53ee8cc1Swenshuai.xi     if (((psXCInstPri->u32DeviceID == 0) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
1222*53ee8cc1Swenshuai.xi         ||(psXCInstPri->u32DeviceID == 1))
1223*53ee8cc1Swenshuai.xi     {
1224*53ee8cc1Swenshuai.xi         u16reg = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK08_32_L);
1225*53ee8cc1Swenshuai.xi     }
1226*53ee8cc1Swenshuai.xi     else
1227*53ee8cc1Swenshuai.xi     {
1228*53ee8cc1Swenshuai.xi         u16reg = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK33_32_L);
1229*53ee8cc1Swenshuai.xi     }
1230*53ee8cc1Swenshuai.xi 
1231*53ee8cc1Swenshuai.xi 
1232*53ee8cc1Swenshuai.xi     if(pDBreg->bOpmLcntInv_En)
1233*53ee8cc1Swenshuai.xi     {
1234*53ee8cc1Swenshuai.xi         u16reg |= BIT(5);
1235*53ee8cc1Swenshuai.xi     }
1236*53ee8cc1Swenshuai.xi     else
1237*53ee8cc1Swenshuai.xi     {
1238*53ee8cc1Swenshuai.xi         u16reg &= ~ BIT(5);
1239*53ee8cc1Swenshuai.xi     }
1240*53ee8cc1Swenshuai.xi 
1241*53ee8cc1Swenshuai.xi 
1242*53ee8cc1Swenshuai.xi     //monaco/muji 3D mode need control sub for some output format, or else the edge of object in the image may shake
1243*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
1244*53ee8cc1Swenshuai.xi     E_XC_3D_OUTPUT_MODE e3DOutputFormat = MDrv_XC_Get_3D_Output_Mode(pInstance);
1245*53ee8cc1Swenshuai.xi     if((e3DOutputFormat == E_XC_3D_OUTPUT_LINE_ALTERNATIVE)
1246*53ee8cc1Swenshuai.xi         || (e3DOutputFormat == E_XC_3D_OUTPUT_TOP_BOTTOM) || (e3DOutputFormat == E_XC_3D_OUTPUT_TOP_BOTTOM_HW)
1247*53ee8cc1Swenshuai.xi         || (e3DOutputFormat == E_XC_3D_OUTPUT_SIDE_BY_SIDE_HALF) || (e3DOutputFormat == E_XC_3D_OUTPUT_SIDE_BY_SIDE_HALF_HW)
1248*53ee8cc1Swenshuai.xi         || (e3DOutputFormat == E_XC_3D_OUTPUT_FRAME_PACKING))
1249*53ee8cc1Swenshuai.xi     {
1250*53ee8cc1Swenshuai.xi         //Hal_SC_set_opm_lcnt_inv(pInstance, bopm_lcnt_inv, SUB_WINDOW);
1251*53ee8cc1Swenshuai.xi         if(pDBreg->bOpmLcntInv_En)
1252*53ee8cc1Swenshuai.xi         {
1253*53ee8cc1Swenshuai.xi             u16reg |= BIT(4);
1254*53ee8cc1Swenshuai.xi         }
1255*53ee8cc1Swenshuai.xi         else
1256*53ee8cc1Swenshuai.xi         {
1257*53ee8cc1Swenshuai.xi             u16reg &= ~ BIT(4);
1258*53ee8cc1Swenshuai.xi         }
1259*53ee8cc1Swenshuai.xi     }
1260*53ee8cc1Swenshuai.xi #endif
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi     if (((psXCInstPri->u32DeviceID == 0) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
1263*53ee8cc1Swenshuai.xi         ||(psXCInstPri->u32DeviceID == 1))
1264*53ee8cc1Swenshuai.xi     {
1265*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK08_32_L, u16reg, 0xFFFF);
1266*53ee8cc1Swenshuai.xi     }
1267*53ee8cc1Swenshuai.xi     else
1268*53ee8cc1Swenshuai.xi     {
1269*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK33_32_L, u16reg, 0xFFFF);
1270*53ee8cc1Swenshuai.xi     }
1271*53ee8cc1Swenshuai.xi }
1272*53ee8cc1Swenshuai.xi 
_Hal_SC_fill_sub_sw_db_burst(void * pInstance,P_SC_SWDB_INFO pDBreg)1273*53ee8cc1Swenshuai.xi static void _Hal_SC_fill_sub_sw_db_burst(void *pInstance, P_SC_SWDB_INFO pDBreg)
1274*53ee8cc1Swenshuai.xi {
1275*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1276*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1277*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
1278*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
1279*53ee8cc1Swenshuai.xi 
1280*53ee8cc1Swenshuai.xi     if(Hal_SC_is_extra_req_en(pInstance, NULL, NULL, &pDBreg->u16H_DisStart, &pDBreg->u16H_DisEnd))
1281*53ee8cc1Swenshuai.xi     {
1282*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, BIT(15), BIT(15));
1283*53ee8cc1Swenshuai.xi     }
1284*53ee8cc1Swenshuai.xi     else
1285*53ee8cc1Swenshuai.xi     {
1286*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, 0, BIT(15));
1287*53ee8cc1Swenshuai.xi     }
1288*53ee8cc1Swenshuai.xi 
1289*53ee8cc1Swenshuai.xi     //H pre-scaling
1290*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK04_04_L, (MS_U16)(pDBreg->u32H_PreScalingRatio>>00), 0xFFFF);
1291*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK04_05_L, (MS_U16)(pDBreg->u32H_PreScalingRatio>>16), 0xFFFF);
1292*53ee8cc1Swenshuai.xi     //V pre-scaling
1293*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK04_08_L, (MS_U16)(pDBreg->u32V_PreScalingRatio>>00), 0xFFFF);
1294*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK04_09_L, (MS_U16)(pDBreg->u32V_PreScalingRatio>>16), 0xFFFF);
1295*53ee8cc1Swenshuai.xi 
1296*53ee8cc1Swenshuai.xi     //H post-scaling
1297*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_27_L, (MS_U16)(pDBreg->u32H_PostScalingRatio>>00), 0xFFFF);
1298*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_28_L, (MS_U16)(pDBreg->u32H_PostScalingRatio>>16), 0xFFFF);
1299*53ee8cc1Swenshuai.xi     //V post-scaling
1300*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_29_L, (MS_U16)(pDBreg->u32V_PostScalingRatio>>00), 0xFFFF);
1301*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_2A_L, (MS_U16)(pDBreg->u32V_PostScalingRatio>>16), 0xFFFF);
1302*53ee8cc1Swenshuai.xi 
1303*53ee8cc1Swenshuai.xi     //SCMI: vertical limitation
1304*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_58_L, (MS_U16)(pDBreg->u16VWritelimit), 0xFFFF);
1305*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_5A_L, (MS_U16)(pDBreg->u32WritelimitBase>>00), 0xFFFF);
1306*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_5B_L, (MS_U16)(pDBreg->u32WritelimitBase>>16), 0xFFFF);
1307*53ee8cc1Swenshuai.xi     //SCMI: IPM address 0
1308*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_48_L, (MS_U16)(pDBreg->u32DNRBase0>>00), 0xFFFF);
1309*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_49_L, (MS_U16)(pDBreg->u32DNRBase0>>16), 0xFFFF);
1310*53ee8cc1Swenshuai.xi     //SCMI: DNR address 1
1311*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_4A_L, (MS_U16)(pDBreg->u32DNRBase1>>00), 0xFFFF);
1312*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_4B_L, (MS_U16)(pDBreg->u32DNRBase1>>16), 0xFFFF);
1313*53ee8cc1Swenshuai.xi     //SCMI: DNR address 2
1314*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_4C_L, (MS_U16)(pDBreg->u32DNRBase2>>00), 0xFFFF);
1315*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_4D_L, (MS_U16)(pDBreg->u32DNRBase2>>16), 0xFFFF);
1316*53ee8cc1Swenshuai.xi     //SCMI: DNR offset
1317*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_4E_L, (MS_U16)(pDBreg->u16DNROffset>>00), 0xFFFF);
1318*53ee8cc1Swenshuai.xi     //SCMI: DNR fetch
1319*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_4F_L, (MS_U16)(pDBreg->u16DNRFetch>>00), 0xFFFF);
1320*53ee8cc1Swenshuai.xi     //SCMI: OPM address 0
1321*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_50_L, (MS_U16)(pDBreg->u32OPMBase0>>00), 0xFFFF);
1322*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_51_L, (MS_U16)(pDBreg->u32OPMBase0>>16), 0xFFFF);
1323*53ee8cc1Swenshuai.xi     //SCMI: OPM address 1
1324*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_52_L, (MS_U16)(pDBreg->u32OPMBase1>>00), 0xFFFF);
1325*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_53_L, (MS_U16)(pDBreg->u32OPMBase1>>16), 0xFFFF);
1326*53ee8cc1Swenshuai.xi     //SCMI: OPM address 2
1327*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_54_L, (MS_U16)(pDBreg->u32OPMBase2>>00), 0xFFFF);
1328*53ee8cc1Swenshuai.xi     //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_55_L, (MS_U16)(pDBreg->u32OPMBase2>>16), 0xFFFF);
1329*53ee8cc1Swenshuai.xi     //SCMI: OPM offset
1330*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_56_L, (MS_U16)(pDBreg->u16OPMOffset>>00), 0xFFFF);
1331*53ee8cc1Swenshuai.xi     //SCMI: OPM fetch
1332*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_57_L, (MS_U16)(pDBreg->u16OPMFetch>>00), 0xFFFF);
1333*53ee8cc1Swenshuai.xi     //PIP
1334*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_16_L, (MS_U16)(pDBreg->u16VLen>>00), 0xFFFF); // Write V length
1335*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_1D_L, (MS_U16)((pDBreg->u16LBOffset&0xFF)<<8), 0xFF00);
1336*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_1C_L, (MS_U16)((pDBreg->u16DispOffset&0xFF)<<8), 0xFF00);
1337*53ee8cc1Swenshuai.xi 
1338*53ee8cc1Swenshuai.xi     /// before enable ML bit mask feature, the capture size for 2P setting BK03_07[15] need to be considered
1339*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, BIT(15)))
1340*53ee8cc1Swenshuai.xi         pDBreg->u16H_CapSize |= 0x8000;
1341*53ee8cc1Swenshuai.xi     else
1342*53ee8cc1Swenshuai.xi         pDBreg->u16H_CapSize |= 0x0000;
1343*53ee8cc1Swenshuai.xi 
1344*53ee8cc1Swenshuai.xi     // capture window
1345*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_04_L, (MS_U16)(pDBreg->u16V_CapStart>>00), 0xFFFF);
1346*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_05_L, (MS_U16)(pDBreg->u16H_CapStart>>00), 0xFFFF);
1347*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_06_L, (MS_U16)(pDBreg->u16V_CapSize>>00), 0xFFFF);
1348*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_07_L, (MS_U16)(pDBreg->u16H_CapSize>>00), 0xFFFF);
1349*53ee8cc1Swenshuai.xi 
1350*53ee8cc1Swenshuai.xi     //Display window
1351*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_07_L, (MS_U16)(pDBreg->u16H_DisStart>>00), 0xFFFF);
1352*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_08_L, (MS_U16)(pDBreg->u16H_DisEnd>>00), 0xFFFF);
1353*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_09_L, (MS_U16)(pDBreg->u16V_DisStart>>00), 0xFFFF);
1354*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_0A_L, (MS_U16)(pDBreg->u16V_DisEnd>>00), 0xFFFF);
1355*53ee8cc1Swenshuai.xi 
1356*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_5C_L, 0x0, 0x1FFF); //always disable IP H mirror line offset note:ds will enable this register at vdec firmware
1357*53ee8cc1Swenshuai.xi 
1358*53ee8cc1Swenshuai.xi     MS_U16 u16reg = 0;
1359*53ee8cc1Swenshuai.xi     if (((psXCInstPri->u32DeviceID == 0) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
1360*53ee8cc1Swenshuai.xi         ||(psXCInstPri->u32DeviceID == 1))
1361*53ee8cc1Swenshuai.xi     {
1362*53ee8cc1Swenshuai.xi         u16reg = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK08_32_L);
1363*53ee8cc1Swenshuai.xi     }
1364*53ee8cc1Swenshuai.xi     else
1365*53ee8cc1Swenshuai.xi     {
1366*53ee8cc1Swenshuai.xi         u16reg = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK33_32_L);
1367*53ee8cc1Swenshuai.xi     }
1368*53ee8cc1Swenshuai.xi 
1369*53ee8cc1Swenshuai.xi     if(pDBreg->bOpmLcntInv_En)
1370*53ee8cc1Swenshuai.xi     {
1371*53ee8cc1Swenshuai.xi         u16reg |= BIT(4);
1372*53ee8cc1Swenshuai.xi     }
1373*53ee8cc1Swenshuai.xi     else
1374*53ee8cc1Swenshuai.xi     {
1375*53ee8cc1Swenshuai.xi         u16reg &= ~ BIT(4);
1376*53ee8cc1Swenshuai.xi     }
1377*53ee8cc1Swenshuai.xi 
1378*53ee8cc1Swenshuai.xi     if (((psXCInstPri->u32DeviceID == 0) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
1379*53ee8cc1Swenshuai.xi         ||(psXCInstPri->u32DeviceID == 1))
1380*53ee8cc1Swenshuai.xi     {
1381*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK08_32_L, u16reg, 0xFFFF);
1382*53ee8cc1Swenshuai.xi     }
1383*53ee8cc1Swenshuai.xi     else
1384*53ee8cc1Swenshuai.xi     {
1385*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK33_32_L, u16reg, 0xFFFF);
1386*53ee8cc1Swenshuai.xi     }
1387*53ee8cc1Swenshuai.xi }
1388*53ee8cc1Swenshuai.xi 
Hal_SC_sw_db_burst(void * pInstance,P_SC_SWDB_INFO pDBreg,SCALER_WIN eWindow)1389*53ee8cc1Swenshuai.xi void Hal_SC_sw_db_burst(void *pInstance, P_SC_SWDB_INFO pDBreg, SCALER_WIN eWindow )
1390*53ee8cc1Swenshuai.xi {
1391*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
1392*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
1393*53ee8cc1Swenshuai.xi     static MS_BOOL bEnable = FALSE;
1394*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1395*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1396*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
1397*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
1398*53ee8cc1Swenshuai.xi #endif
1399*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
1400*53ee8cc1Swenshuai.xi     {
1401*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
1402*53ee8cc1Swenshuai.xi         if(!IsEnableDualMode(MAIN_WINDOW) && bEnable)
1403*53ee8cc1Swenshuai.xi         {
1404*53ee8cc1Swenshuai.xi             MDrv_XC_wait_output_vsync(pInstance, 1, 50, eWindow);
1405*53ee8cc1Swenshuai.xi             /// Before reset need to mask the XC R/W
1406*53ee8cc1Swenshuai.xi             MDrv_MIU_MaskReq(0, MIU_CLIENT_SC_IPMAIN_RW);
1407*53ee8cc1Swenshuai.xi             MDrv_MIU_MaskReq(1, MIU_CLIENT_SC_OPMAIN_RW);
1408*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
1409*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_29_L, 0x00, BIT(15));
1410*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
1411*53ee8cc1Swenshuai.xi             MDrv_MIU_UnMaskReq(0, MIU_CLIENT_SC_IPMAIN_RW);
1412*53ee8cc1Swenshuai.xi             MDrv_MIU_UnMaskReq(1, MIU_CLIENT_SC_OPMAIN_RW);
1413*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
1414*53ee8cc1Swenshuai.xi             bEnable = FALSE;
1415*53ee8cc1Swenshuai.xi         }
1416*53ee8cc1Swenshuai.xi #endif
1417*53ee8cc1Swenshuai.xi         _Hal_SC_fill_main_sw_db_burst(pInstance, pDBreg);
1418*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_Fire(pInstance, TRUE);
1419*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
1420*53ee8cc1Swenshuai.xi         if (IsEnableDualMode(MAIN_WINDOW))
1421*53ee8cc1Swenshuai.xi         {
1422*53ee8cc1Swenshuai.xi             MDrv_XC_wait_output_vsync(pInstance, 1, 50, eWindow);
1423*53ee8cc1Swenshuai.xi             /// Before reset need to mask the XC R/W
1424*53ee8cc1Swenshuai.xi             MDrv_MIU_MaskReq(0, MIU_CLIENT_SC_IPMAIN_RW);
1425*53ee8cc1Swenshuai.xi             MDrv_MIU_MaskReq(1, MIU_CLIENT_SC_OPMAIN_RW);
1426*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
1427*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_29_L, BIT(15), BIT(15));
1428*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
1429*53ee8cc1Swenshuai.xi             MDrv_MIU_UnMaskReq(0, MIU_CLIENT_SC_IPMAIN_RW);
1430*53ee8cc1Swenshuai.xi             MDrv_MIU_UnMaskReq(1, MIU_CLIENT_SC_OPMAIN_RW);
1431*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
1432*53ee8cc1Swenshuai.xi             bEnable = TRUE;
1433*53ee8cc1Swenshuai.xi         }
1434*53ee8cc1Swenshuai.xi #endif
1435*53ee8cc1Swenshuai.xi     }
1436*53ee8cc1Swenshuai.xi     else
1437*53ee8cc1Swenshuai.xi     {
1438*53ee8cc1Swenshuai.xi         _Hal_SC_fill_sub_sw_db_burst(pInstance, pDBreg);
1439*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_Fire(pInstance, TRUE);
1440*53ee8cc1Swenshuai.xi     }
1441*53ee8cc1Swenshuai.xi 
1442*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
1443*53ee8cc1Swenshuai.xi }
1444*53ee8cc1Swenshuai.xi 
Hal_SC_dual_sw_db_burst(void * pInstance,P_SC_SWDB_INFO pMainDBreg,P_SC_SWDB_INFO pSubDBreg)1445*53ee8cc1Swenshuai.xi void Hal_SC_dual_sw_db_burst(void *pInstance, P_SC_SWDB_INFO pMainDBreg, P_SC_SWDB_INFO pSubDBreg)
1446*53ee8cc1Swenshuai.xi {
1447*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
1448*53ee8cc1Swenshuai.xi 
1449*53ee8cc1Swenshuai.xi     _Hal_SC_fill_main_sw_db_burst(pInstance, pMainDBreg);
1450*53ee8cc1Swenshuai.xi     _Hal_SC_fill_sub_sw_db_burst(pInstance, pSubDBreg);
1451*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
1452*53ee8cc1Swenshuai.xi 
1453*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
1454*53ee8cc1Swenshuai.xi }
1455*53ee8cc1Swenshuai.xi 
Hal_SC_sw_db(void * pInstance,P_SC_SWDB_INFO pDBreg,SCALER_WIN eWindow)1456*53ee8cc1Swenshuai.xi void Hal_SC_sw_db(void *pInstance, P_SC_SWDB_INFO pDBreg, SCALER_WIN eWindow )
1457*53ee8cc1Swenshuai.xi {
1458*53ee8cc1Swenshuai.xi     MS_U32 u32LcentInvReg = 0;
1459*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1460*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1461*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
1462*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
1463*53ee8cc1Swenshuai.xi 
1464*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"[%s,%5d] [DS] bDynamicScalingEnable%d  \n",__func__,__LINE__,pXCResourcePrivate->sthal_SC.bDynamicScalingEnable);
1465*53ee8cc1Swenshuai.xi 
1466*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
1467*53ee8cc1Swenshuai.xi     {
1468*53ee8cc1Swenshuai.xi         if(Hal_SC_is_extra_req_en(pInstance, &pDBreg->u16H_DisStart, &pDBreg->u16H_DisEnd, NULL, NULL))
1469*53ee8cc1Swenshuai.xi         {
1470*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, BIT(15), BIT(15));
1471*53ee8cc1Swenshuai.xi         }
1472*53ee8cc1Swenshuai.xi         else
1473*53ee8cc1Swenshuai.xi         {
1474*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, 0, BIT(15));
1475*53ee8cc1Swenshuai.xi         }
1476*53ee8cc1Swenshuai.xi 
1477*53ee8cc1Swenshuai.xi         // H pre-scaling
1478*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_04_L, pDBreg->u32H_PreScalingRatio);
1479*53ee8cc1Swenshuai.xi         // V pre-scaling
1480*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_08_L, pDBreg->u32V_PreScalingRatio);
1481*53ee8cc1Swenshuai.xi         // H post-scaling
1482*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_07_L, pDBreg->u32H_PostScalingRatio);
1483*53ee8cc1Swenshuai.xi         // V post-scaling
1484*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_09_L, pDBreg->u32V_PostScalingRatio);
1485*53ee8cc1Swenshuai.xi 
1486*53ee8cc1Swenshuai.xi         //SCMI
1487*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_18_L, pDBreg->u16VWritelimit); // Set vertical limitation
1488*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_1A_L, pDBreg->u32DNRBase1);
1489*53ee8cc1Swenshuai.xi 
1490*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_08_L, pDBreg->u32DNRBase0);     // input address0
1491*53ee8cc1Swenshuai.xi         //SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0A_L, pDBreg->u32DNRBase1);     // input address1
1492*53ee8cc1Swenshuai.xi         //SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0C_L, pDBreg->u32DNRBase2);     // input address2
1493*53ee8cc1Swenshuai.xi 
1494*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0E_L, pDBreg->u16DNROffset);// input Offset
1495*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0F_L, pDBreg->u16DNRFetch); // input fetch
1496*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_1C_L, 0x0, 0xFFFF);         //always disable IP H mirror line offset note:ds will enable this register at vdec firmware
1497*53ee8cc1Swenshuai.xi 
1498*53ee8cc1Swenshuai.xi 
1499*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_10_L, pDBreg->u32OPMBase0); // output address0
1500*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_12_L, pDBreg->u32OPMBase1); // output address1
1501*53ee8cc1Swenshuai.xi //      SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_14_L, pDBreg->u32OPMBase2); // output address2
1502*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_16_L, pDBreg->u16OPMOffset); // output offset
1503*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_17_L, pDBreg->u16OPMFetch);  // output fetch
1504*53ee8cc1Swenshuai.xi 
1505*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
1506*53ee8cc1Swenshuai.xi                 if (psXCInstPri->u32DeviceID == 0) // Dual miu just support sc0 main window for main window.
1507*53ee8cc1Swenshuai.xi                 {
1508*53ee8cc1Swenshuai.xi                     if(IsEnableDualMode(eWindow))
1509*53ee8cc1Swenshuai.xi                     {
1510*53ee8cc1Swenshuai.xi #if 0 // Dual miu do not support switch miu select dynamicly.
1511*53ee8cc1Swenshuai.xi #if (MIU_SEL_USE_XC_INTERNAL == FALSE)
1512*53ee8cc1Swenshuai.xi                         MS_U16 u16OPMLeftMiuSel = 0;
1513*53ee8cc1Swenshuai.xi                         MS_U16 u16OPMRightMiuSel = 0;
1514*53ee8cc1Swenshuai.xi                         if(IsHMirrorMode(eWindow))
1515*53ee8cc1Swenshuai.xi                         {
1516*53ee8cc1Swenshuai.xi                             _Hal_SC_adjust_dual_miu_setting(pInstance, pXCResourcePrivate->stdrvXC_Scaling._au32PreFBAddress[MAIN_WINDOW],
1517*53ee8cc1Swenshuai.xi                                                             pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW], TRUE, &u16OPMLeftMiuSel, &u16OPMRightMiuSel);
1518*53ee8cc1Swenshuai.xi                         }
1519*53ee8cc1Swenshuai.xi                         else
1520*53ee8cc1Swenshuai.xi                         {
1521*53ee8cc1Swenshuai.xi                             _Hal_SC_adjust_dual_miu_setting(pInstance, pXCResourcePrivate->stdrvXC_Scaling._au32PreFBAddress[MAIN_WINDOW],
1522*53ee8cc1Swenshuai.xi                                                             pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW], FALSE, &u16OPMLeftMiuSel, &u16OPMRightMiuSel);
1523*53ee8cc1Swenshuai.xi                         }
1524*53ee8cc1Swenshuai.xi                         // miu request0  IPM/OPM LSB
1525*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_10_L, ((u16OPMLeftMiuSel & BIT(0)) << 1)|(u16OPMLeftMiuSel & BIT(0)), BIT(1)| BIT(0));
1526*53ee8cc1Swenshuai.xi                         // miu request0  IPM/OPM MSB
1527*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_18_L, (u16OPMLeftMiuSel & BIT(1))|((u16OPMLeftMiuSel & BIT(1)) >> 1), BIT(1)| BIT(0));
1528*53ee8cc1Swenshuai.xi                         // miu request1  IPM/OPM
1529*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_19_L, (u16OPMRightMiuSel << 2)| u16OPMRightMiuSel , BIT(3)| BIT(2) | BIT(1)| BIT(0));
1530*53ee8cc1Swenshuai.xi #else
1531*53ee8cc1Swenshuai.xi                         _Hal_SC_adjust_swap_miu_setting(pInstance,pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW]);
1532*53ee8cc1Swenshuai.xi #endif
1533*53ee8cc1Swenshuai.xi #endif
1534*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_08_L, pDBreg->u32DualDNRBase0 >> 0, 0xFFFF);  //F2_1 IPM base addr
1535*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_09_L, pDBreg->u32DualDNRBase0 >> 16, 0x03FF);
1536*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_0E_L, pDBreg->u16DualDNROffset, 0x1FFF);  //F2_1 IPM offset
1537*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_0F_L, pDBreg->u16DualDNRFetch, 0x1FFF);  //F2_1 IPM fetch number
1538*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_10_L, pDBreg->u32DualOPMBase0 >> 0, 0xFFFF);  //F2_1 OPM base addr
1539*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_11_L, pDBreg->u32DualOPMBase0 >> 16, 0x03FF);
1540*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_16_L, pDBreg->u16DualOPMOffset, 0x1FFF);  //F2_1 OPM offset
1541*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_17_L, pDBreg->u16DualOPMFetch, 0x1FFF);  //F2_1 OPM fetch number
1542*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_28_L, pDBreg->u16DualDNRFetch + pDBreg->u16DNRFetch, 0x1FFF);  //F2 IPM total fetch
1543*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_29_L, pDBreg->u16DualOPMFetch + pDBreg->u16OPMFetch, 0x1FFF);  //F2 OPM total fetch
1544*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_29_L, BIT(15), BIT(15));  //Enable SCMI MIU Dual mode
1545*53ee8cc1Swenshuai.xi                     }
1546*53ee8cc1Swenshuai.xi                     else
1547*53ee8cc1Swenshuai.xi                     {
1548*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(0, REG_SC_BK11_29_L, 0, BIT(15));
1549*53ee8cc1Swenshuai.xi #if 0 // Dual miu do not support switch miu dynamicly.
1550*53ee8cc1Swenshuai.xi #if (MIU_SEL_USE_XC_INTERNAL == FALSE)
1551*53ee8cc1Swenshuai.xi                         MS_U16 u16OPMLeftMiuSel = 0;
1552*53ee8cc1Swenshuai.xi                         MS_U16 u16OPMRightMiuSel = 0;
1553*53ee8cc1Swenshuai.xi                         _Hal_SC_adjust_dual_miu_setting(pInstance, pXCResourcePrivate->stdrvXC_Scaling._au32PreFBAddress[MAIN_WINDOW],
1554*53ee8cc1Swenshuai.xi                                                         pXCResourcePrivate->stdrvXC_Scaling._u32PreDualFBAddress[MAIN_WINDOW], FALSE, &u16OPMLeftMiuSel, &u16OPMRightMiuSel);
1555*53ee8cc1Swenshuai.xi                         // miu request0  IPM/OPM LSB
1556*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_10_L, ((u16OPMLeftMiuSel & BIT(0)) << 1)|(u16OPMLeftMiuSel & BIT(0)), BIT(1)| BIT(0));
1557*53ee8cc1Swenshuai.xi                         // miu request0  IPM/OPM MSB
1558*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_18_L, (u16OPMLeftMiuSel & BIT(1))|((u16OPMLeftMiuSel & BIT(1)) >> 1), BIT(1)| BIT(0));
1559*53ee8cc1Swenshuai.xi                         // miu request1  IPM/OPM
1560*53ee8cc1Swenshuai.xi                         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_19_L, (u16OPMRightMiuSel << 2)| u16OPMRightMiuSel , BIT(3)| BIT(2) | BIT(1)| BIT(0));
1561*53ee8cc1Swenshuai.xi #else
1562*53ee8cc1Swenshuai.xi                         _Hal_SC_adjust_swap_miu_setting(pInstance,pXCResourcePrivate->stdrvXC_Scaling._au32PreFBAddress[MAIN_WINDOW]);
1563*53ee8cc1Swenshuai.xi #endif
1564*53ee8cc1Swenshuai.xi #endif
1565*53ee8cc1Swenshuai.xi                     }
1566*53ee8cc1Swenshuai.xi                 }
1567*53ee8cc1Swenshuai.xi #endif
1568*53ee8cc1Swenshuai.xi 
1569*53ee8cc1Swenshuai.xi         //PIP
1570*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK20_15_L, pDBreg->u16VLen); // Write V length
1571*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_1D_L, (pDBreg->u16LBOffset&0xFF), 0xFF);
1572*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_1C_L, (pDBreg->u16DispOffset&0xFF), 0xFF);
1573*53ee8cc1Swenshuai.xi         // if LB Offset > externded pixels of bottom A session,
1574*53ee8cc1Swenshuai.xi         // there would be garbage on the left side of sub video
1575*53ee8cc1Swenshuai.xi         if (pDBreg->u16LBOffset > SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_14_L, 0xFF))
1576*53ee8cc1Swenshuai.xi         {
1577*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_14_L, (pDBreg->u16LBOffset&0xFF), 0xFF);
1578*53ee8cc1Swenshuai.xi         }
1579*53ee8cc1Swenshuai.xi 
1580*53ee8cc1Swenshuai.xi #if defined(UFO_XC_HDR) && defined(UFO_XC_HDR_VERSION) && (UFO_XC_HDR_VERSION == 2)
1581*53ee8cc1Swenshuai.xi         //HDR input DE Window info
1582*53ee8cc1Swenshuai.xi         if (gSrcInfo[MAIN_WINDOW].bR_FBL)
1583*53ee8cc1Swenshuai.xi         {
1584*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK79_08_L, (MS_U16)(gSrcInfo[MAIN_WINDOW].stCropWin.width>>00), 0x1FFF);
1585*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK79_09_L, (MS_U16)(gSrcInfo[MAIN_WINDOW].stCropWin.height>>00), 0x0FFF);
1586*53ee8cc1Swenshuai.xi         }
1587*53ee8cc1Swenshuai.xi         else
1588*53ee8cc1Swenshuai.xi         {
1589*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK79_08_L, (MS_U16)(pDBreg->u16H_CapSize>>00), 0x1FFF);
1590*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK79_09_L, (MS_U16)(pDBreg->u16V_CapSize>>00), 0x0FFF);
1591*53ee8cc1Swenshuai.xi         }
1592*53ee8cc1Swenshuai.xi #endif
1593*53ee8cc1Swenshuai.xi 
1594*53ee8cc1Swenshuai.xi         /// before enable ML bit mask feature, the capture size for 2P setting BK01_07[15] need to be considered
1595*53ee8cc1Swenshuai.xi         if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, BIT(15)))
1596*53ee8cc1Swenshuai.xi             pDBreg->u16H_CapSize |= 0x8000;
1597*53ee8cc1Swenshuai.xi         else
1598*53ee8cc1Swenshuai.xi             pDBreg->u16H_CapSize |= 0x0000;
1599*53ee8cc1Swenshuai.xi 
1600*53ee8cc1Swenshuai.xi         // capture window
1601*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, pDBreg->u16V_CapStart); // Capture V start
1602*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, pDBreg->u16H_CapStart); // Capture H start
1603*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_06_L, pDBreg->u16V_CapSize);  // Capture V size
1604*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, pDBreg->u16H_CapSize);  // Capture H size
1605*53ee8cc1Swenshuai.xi 
1606*53ee8cc1Swenshuai.xi         //Display window
1607*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_08_L, pDBreg->u16H_DisStart); // Display H start
1608*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_09_L, pDBreg->u16H_DisEnd);   // Display H end
1609*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0A_L, pDBreg->u16V_DisStart); // Display V start
1610*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0B_L, pDBreg->u16V_DisEnd);   // Display V end
1611*53ee8cc1Swenshuai.xi 
1612*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_1C_L, 0x0, 0xFFFF);         //always disable IP H mirror line offset note:ds will enable this register at vdec firmware
1613*53ee8cc1Swenshuai.xi 
1614*53ee8cc1Swenshuai.xi // 2_frame_mirror setting
1615*53ee8cc1Swenshuai.xi #if SUPPORT_2_FRAME_MIRROR
1616*53ee8cc1Swenshuai.xi         // 2_frmae_mirror cannot work when UC on
1617*53ee8cc1Swenshuai.xi         if( (gSrcInfo[eWindow].Status2.eFrameStoreNumber == IMAGE_STORE_2_FRAMES) && (!gSrcInfo[eWindow].bInterlace) && (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK2A_02_L, BIT(15)) == 0))
1618*53ee8cc1Swenshuai.xi         {
1619*53ee8cc1Swenshuai.xi             //SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_1A_L, pDBreg->u32DNRBase1);  // IPM base1
1620*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_30_L, 0x4000, BIT(14));   // enable two frame mirror
1621*53ee8cc1Swenshuai.xi 
1622*53ee8cc1Swenshuai.xi             if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_01_L, 0x0001) == 0 )//compress mode
1623*53ee8cc1Swenshuai.xi             {
1624*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_32_L, 0X20 ,0x00F0 );   // opm_ce_lcnt_inv
1625*53ee8cc1Swenshuai.xi             }
1626*53ee8cc1Swenshuai.xi         }
1627*53ee8cc1Swenshuai.xi         else
1628*53ee8cc1Swenshuai.xi         {
1629*53ee8cc1Swenshuai.xi             if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK2A_02_L, BIT(15)) == BIT(15))
1630*53ee8cc1Swenshuai.xi             {
1631*53ee8cc1Swenshuai.xi                 printf("@@ [%s,%5d] 2_frmae_mirror cannot work when UC on  \n",__func__,__LINE__);
1632*53ee8cc1Swenshuai.xi             }
1633*53ee8cc1Swenshuai.xi 
1634*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_30_L, 0x00 , BIT(14)); // disable two frame mirror
1635*53ee8cc1Swenshuai.xi         }
1636*53ee8cc1Swenshuai.xi #endif
1637*53ee8cc1Swenshuai.xi         if (((psXCInstPri->u32DeviceID == 0) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
1638*53ee8cc1Swenshuai.xi             ||(psXCInstPri->u32DeviceID == 1))
1639*53ee8cc1Swenshuai.xi         {
1640*53ee8cc1Swenshuai.xi             u32LcentInvReg = REG_SC_BK08_32_L;
1641*53ee8cc1Swenshuai.xi         }
1642*53ee8cc1Swenshuai.xi         else
1643*53ee8cc1Swenshuai.xi         {
1644*53ee8cc1Swenshuai.xi             u32LcentInvReg = REG_SC_BK33_32_L;
1645*53ee8cc1Swenshuai.xi         }
1646*53ee8cc1Swenshuai.xi 
1647*53ee8cc1Swenshuai.xi         if(pDBreg->bOpmLcntInv_En)
1648*53ee8cc1Swenshuai.xi         {
1649*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32LcentInvReg, BIT(5), BIT(5));
1650*53ee8cc1Swenshuai.xi         }
1651*53ee8cc1Swenshuai.xi         else
1652*53ee8cc1Swenshuai.xi         {
1653*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32LcentInvReg, 0x00, BIT(5));
1654*53ee8cc1Swenshuai.xi         }
1655*53ee8cc1Swenshuai.xi 
1656*53ee8cc1Swenshuai.xi         //monaco/muji 3D mode need control sub for some output format, or else the edge of object in the image may shake
1657*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
1658*53ee8cc1Swenshuai.xi         E_XC_3D_OUTPUT_MODE e3DOutputFormat = MDrv_XC_Get_3D_Output_Mode(pInstance);
1659*53ee8cc1Swenshuai.xi         if((e3DOutputFormat == E_XC_3D_OUTPUT_LINE_ALTERNATIVE)
1660*53ee8cc1Swenshuai.xi             || (e3DOutputFormat == E_XC_3D_OUTPUT_TOP_BOTTOM) || (e3DOutputFormat == E_XC_3D_OUTPUT_TOP_BOTTOM_HW)
1661*53ee8cc1Swenshuai.xi             || (e3DOutputFormat == E_XC_3D_OUTPUT_SIDE_BY_SIDE_HALF) || (e3DOutputFormat == E_XC_3D_OUTPUT_SIDE_BY_SIDE_HALF_HW)
1662*53ee8cc1Swenshuai.xi             || (e3DOutputFormat == E_XC_3D_OUTPUT_FRAME_PACKING))
1663*53ee8cc1Swenshuai.xi         {
1664*53ee8cc1Swenshuai.xi             //Hal_SC_set_opm_lcnt_inv(pInstance, bopm_lcnt_inv, SUB_WINDOW);
1665*53ee8cc1Swenshuai.xi             if(pDBreg->bOpmLcntInv_En)
1666*53ee8cc1Swenshuai.xi             {
1667*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32LcentInvReg, BIT(4), BIT(4));
1668*53ee8cc1Swenshuai.xi             }
1669*53ee8cc1Swenshuai.xi             else
1670*53ee8cc1Swenshuai.xi             {
1671*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32LcentInvReg, 0x00, BIT(4));
1672*53ee8cc1Swenshuai.xi             }
1673*53ee8cc1Swenshuai.xi         }
1674*53ee8cc1Swenshuai.xi #endif
1675*53ee8cc1Swenshuai.xi     }
1676*53ee8cc1Swenshuai.xi     else
1677*53ee8cc1Swenshuai.xi     {
1678*53ee8cc1Swenshuai.xi         if(Hal_SC_is_extra_req_en(pInstance, NULL, NULL, &pDBreg->u16H_DisStart, &pDBreg->u16H_DisEnd))
1679*53ee8cc1Swenshuai.xi         {
1680*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, BIT(15), BIT(15));
1681*53ee8cc1Swenshuai.xi         }
1682*53ee8cc1Swenshuai.xi         else
1683*53ee8cc1Swenshuai.xi         {
1684*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, 0, BIT(15));
1685*53ee8cc1Swenshuai.xi         }
1686*53ee8cc1Swenshuai.xi 
1687*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK04_04_L, pDBreg->u32H_PreScalingRatio);   // H pre-scaling
1688*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK04_08_L, pDBreg->u32V_PreScalingRatio);   // V pre-scaling
1689*53ee8cc1Swenshuai.xi 
1690*53ee8cc1Swenshuai.xi         //HVSP
1691*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_27_L, pDBreg->u32H_PostScalingRatio);  // H post-scaling
1692*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_29_L, pDBreg->u32V_PostScalingRatio);  // V post-scaling
1693*53ee8cc1Swenshuai.xi 
1694*53ee8cc1Swenshuai.xi         //SCMI
1695*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_58_L, pDBreg->u16VWritelimit); // Set vertical limitation
1696*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_5A_L, pDBreg->u32WritelimitBase);
1697*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_48_L, pDBreg->u32DNRBase0);     // input address0
1698*53ee8cc1Swenshuai.xi         //SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4A_L, pDBreg->u32DNRBase1); // input address1
1699*53ee8cc1Swenshuai.xi         //SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4C_L, pDBreg->u32DNRBase2); // input address2
1700*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4E_L, pDBreg->u16DNROffset);// input Offset
1701*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4F_L, pDBreg->u16DNRFetch); // input fetch
1702*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_50_L, pDBreg->u32OPMBase0); // output address0
1703*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_52_L, pDBreg->u32OPMBase1); // output address1
1704*53ee8cc1Swenshuai.xi         //SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_54_L, pDBreg->u32OPMBase2); // output address2
1705*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_56_L, pDBreg->u16OPMOffset); // output offset
1706*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_57_L, pDBreg->u16OPMFetch);  // output fetch
1707*53ee8cc1Swenshuai.xi         //PIP
1708*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK20_16_L, pDBreg->u16VLen); // Write V length
1709*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_1D_L, (pDBreg->u16LBOffset&0xFF)<<8, 0xFF00);
1710*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_1C_L, (pDBreg->u16DispOffset&0xFF)<<8, 0xFF00);
1711*53ee8cc1Swenshuai.xi 
1712*53ee8cc1Swenshuai.xi         // capture window
1713*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, pDBreg->u16V_CapStart); // Capture V start
1714*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, pDBreg->u16H_CapStart); // Capture H start
1715*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_06_L, pDBreg->u16V_CapSize);  // Capture V size
1716*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, pDBreg->u16H_CapSize);  // Capture H size
1717*53ee8cc1Swenshuai.xi 
1718*53ee8cc1Swenshuai.xi         //Display window
1719*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_07_L, pDBreg->u16H_DisStart); // Display H start
1720*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_08_L, pDBreg->u16H_DisEnd);   // Display H end
1721*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_09_L, pDBreg->u16V_DisStart); // Display V start
1722*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_0A_L, pDBreg->u16V_DisEnd);   // Display V end
1723*53ee8cc1Swenshuai.xi 
1724*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_5C_L, 0x0, 0x1FFF);         //always disable IP H mirror line offset note:ds will enable this register at vdec firmware
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi         if (((psXCInstPri->u32DeviceID == 0) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
1727*53ee8cc1Swenshuai.xi             ||(psXCInstPri->u32DeviceID == 1))
1728*53ee8cc1Swenshuai.xi         {
1729*53ee8cc1Swenshuai.xi             u32LcentInvReg = REG_SC_BK08_32_L;
1730*53ee8cc1Swenshuai.xi         }
1731*53ee8cc1Swenshuai.xi         else
1732*53ee8cc1Swenshuai.xi         {
1733*53ee8cc1Swenshuai.xi             u32LcentInvReg = REG_SC_BK33_32_L;
1734*53ee8cc1Swenshuai.xi         }
1735*53ee8cc1Swenshuai.xi 
1736*53ee8cc1Swenshuai.xi         if(pDBreg->bOpmLcntInv_En)
1737*53ee8cc1Swenshuai.xi         {
1738*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32LcentInvReg, BIT(4), BIT(4));
1739*53ee8cc1Swenshuai.xi         }
1740*53ee8cc1Swenshuai.xi         else
1741*53ee8cc1Swenshuai.xi         {
1742*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32LcentInvReg, 0x00, BIT(4));
1743*53ee8cc1Swenshuai.xi         }
1744*53ee8cc1Swenshuai.xi     }
1745*53ee8cc1Swenshuai.xi }
1746*53ee8cc1Swenshuai.xi 
1747*53ee8cc1Swenshuai.xi #if (defined (ANDROID) && defined(UFO_XC_DS_PQ))
1748*53ee8cc1Swenshuai.xi extern stDS_PQ_REG DS_REG[DS_PQ_MAX_NUM];
1749*53ee8cc1Swenshuai.xi extern MS_U16 DS_REG_CNT;
1750*53ee8cc1Swenshuai.xi #endif
Hal_SC_SWDS_AddCmd(void * pInstance,P_SC_SWDB_INFO pDBreg,SCALER_WIN eWindow)1751*53ee8cc1Swenshuai.xi void Hal_SC_SWDS_AddCmd(void *pInstance, P_SC_SWDB_INFO pDBreg, SCALER_WIN eWindow)
1752*53ee8cc1Swenshuai.xi {
1753*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1754*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1755*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
1756*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
1757*53ee8cc1Swenshuai.xi 
1758*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"[%s,%5d] [DS] eWindow:%d bDynamicScalingEnable%d  \n",__func__,__LINE__,eWindow,pXCResourcePrivate->sthal_SC.bDynamicScalingEnable);
1759*53ee8cc1Swenshuai.xi #if (defined (ANDROID) && defined(UFO_XC_DS_PQ))
1760*53ee8cc1Swenshuai.xi     MS_U16 cnt_x = 0;
1761*53ee8cc1Swenshuai.xi     MS_U16 u16TempRegVal = 0;
1762*53ee8cc1Swenshuai.xi #endif
1763*53ee8cc1Swenshuai.xi 
1764*53ee8cc1Swenshuai.xi     XC_DS_CMDCNT PSTXC_DS_CMDCNT;
1765*53ee8cc1Swenshuai.xi 
1766*53ee8cc1Swenshuai.xi     PSTXC_DS_CMDCNT.u16CMDCNT_IPM =0;
1767*53ee8cc1Swenshuai.xi     PSTXC_DS_CMDCNT.u16CMDCNT_IPS =0;
1768*53ee8cc1Swenshuai.xi     PSTXC_DS_CMDCNT.u16CMDCNT_OPM =0;
1769*53ee8cc1Swenshuai.xi     PSTXC_DS_CMDCNT.u16CMDCNT_OPS =0;
1770*53ee8cc1Swenshuai.xi 
1771*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
1772*53ee8cc1Swenshuai.xi     {
1773*53ee8cc1Swenshuai.xi         if(pXCResourcePrivate->sthal_SC.bDynamicScalingEnable)
1774*53ee8cc1Swenshuai.xi         {
1775*53ee8cc1Swenshuai.xi             pXCResourcePrivate->sthal_SC.u8DynamicScalingNextIndex[MAIN_WINDOW] = pXCResourcePrivate->sthal_SC.u8DynamicScalingCurrentIndex_Ring[MAIN_WINDOW];
1776*53ee8cc1Swenshuai.xi 
1777*53ee8cc1Swenshuai.xi //Command Priority:
1778*53ee8cc1Swenshuai.xi //1.GOP
1779*53ee8cc1Swenshuai.xi //2.MVOP
1780*53ee8cc1Swenshuai.xi //3.XC
1781*53ee8cc1Swenshuai.xi 
1782*53ee8cc1Swenshuai.xi             MS_U32 ActiveSWClearEn = 0;
1783*53ee8cc1Swenshuai.xi             MS_U32 u32SW_Reset_Enable = 0;
1784*53ee8cc1Swenshuai.xi             //ActiveSWClearEn enable in first DS IP command ;
1785*53ee8cc1Swenshuai.xi             u32SW_Reset_Enable = 0x0400; // bit10: reg_ds_ipm_active_sel: 0:HW 1:SW
1786*53ee8cc1Swenshuai.xi             ActiveSWClearEn = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK1F_17_L, 0xFFFF);
1787*53ee8cc1Swenshuai.xi             ActiveSWClearEn |= u32SW_Reset_Enable;
1788*53ee8cc1Swenshuai.xi 
1789*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK1F_17_L,(MS_U16)(ActiveSWClearEn),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1790*53ee8cc1Swenshuai.xi 
1791*53ee8cc1Swenshuai.xi             //XC_PRINTF("[%s,%5d] bR_FBL:%d bFBL:%d  \n",__func__,__LINE__,gSrcInfo[MAIN_WINDOW].bR_FBL,gSrcInfo[MAIN_WINDOW].bFBL);
1792*53ee8cc1Swenshuai.xi             //XC_PRINTF("[%s,%5d] Crop(x,y,w,h)=(%d,%d,%d,%d) \n",__func__,__LINE__,gSrcInfo[eWindow].stCropWin.x,gSrcInfo[eWindow].stCropWin.y,gSrcInfo[eWindow].stCropWin.width,gSrcInfo[eWindow].stCropWin.height);
1793*53ee8cc1Swenshuai.xi #ifdef UFO_XC_FB_LEVEL
1794*53ee8cc1Swenshuai.xi             if((gSrcInfo[MAIN_WINDOW].eFBLevel == E_XC_FB_LEVEL_FBL)
1795*53ee8cc1Swenshuai.xi                  || (gSrcInfo[MAIN_WINDOW].eFBLevel == E_XC_FB_LEVEL_RFBL_DI)
1796*53ee8cc1Swenshuai.xi             )
1797*53ee8cc1Swenshuai.xi #else
1798*53ee8cc1Swenshuai.xi             if((gSrcInfo[MAIN_WINDOW].bR_FBL) || (gSrcInfo[MAIN_WINDOW].bFBL))//set MVOP crop info
1799*53ee8cc1Swenshuai.xi #endif
1800*53ee8cc1Swenshuai.xi             {
1801*53ee8cc1Swenshuai.xi                 // GET MVOP crop info first
1802*53ee8cc1Swenshuai.xi                 MVOP_Handle stHdl = { E_MVOP_MODULE_MAIN };
1803*53ee8cc1Swenshuai.xi                 MVOP_XCGetCrop stCropInfo;
1804*53ee8cc1Swenshuai.xi                 stCropInfo.u16XStart = gSrcInfo[eWindow].stCropWin.x;
1805*53ee8cc1Swenshuai.xi                 stCropInfo.u16YStart = gSrcInfo[eWindow].stCropWin.y;
1806*53ee8cc1Swenshuai.xi                 stCropInfo.u16XSize = gSrcInfo[eWindow].stCropWin.width;
1807*53ee8cc1Swenshuai.xi                 stCropInfo.u16YSize = gSrcInfo[eWindow].stCropWin.height;
1808*53ee8cc1Swenshuai.xi 
1809*53ee8cc1Swenshuai.xi                 MDrv_MVOP_GetCommand(&stHdl, E_MVOP_CMD_GET_CROP_FOR_XC, &stCropInfo, sizeof(MVOP_XCGetCrop));
1810*53ee8cc1Swenshuai.xi 
1811*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_H_START,stCropInfo.u16XStart,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);         //0xFFFF000A 0840XXXX
1812*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_V_START,0x2000|stCropInfo.u16YStart,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);  //0xFFFF000A 0841XXXX
1813*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_H_SIZE,stCropInfo.u16XSize,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);           //0xFFFF000A 0842XXXX
1814*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_V_SIZE,stCropInfo.u16YSize,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);           //0xFFFF000A 0843XXXX
1815*53ee8cc1Swenshuai.xi                 pDBreg->u16LBOffset = 0; // mvop do crop, align in 2pixel, so xc don't need crop
1816*53ee8cc1Swenshuai.xi             }
1817*53ee8cc1Swenshuai.xi             else
1818*53ee8cc1Swenshuai.xi             {
1819*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_H_START,0x0,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);     //0xFFFF000A 0840XXXX
1820*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_V_START,0x2000,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);  //0xFFFF000A 0841XXXX
1821*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_H_SIZE,0x0,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);      //0xFFFF000A 0842XXXX
1822*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_MVOP_CROP_V_SIZE,0x0,DS_IP,DS_MVOP,&PSTXC_DS_CMDCNT);      //0xFFFF000A 0843XXXX
1823*53ee8cc1Swenshuai.xi             }
1824*53ee8cc1Swenshuai.xi 
1825*53ee8cc1Swenshuai.xi             //H pre-scaling
1826*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_04_L,(MS_U16)(pDBreg->u32H_PreScalingRatio>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 8104XXXX
1827*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_05_L,(MS_U16)(pDBreg->u32H_PreScalingRatio>>16),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 8105XXXX
1828*53ee8cc1Swenshuai.xi             //V pre-scaling
1829*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_08_L,(MS_U16)(pDBreg->u32V_PreScalingRatio>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 8108XXXX
1830*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_09_L,(MS_U16)(pDBreg->u32V_PreScalingRatio>>16),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 8109XXXX
1831*53ee8cc1Swenshuai.xi             //H post-scaling
1832*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK23_07_L,(MS_U16)(pDBreg->u32H_PostScalingRatio>>00),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 9187XXXX
1833*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK23_08_L,(MS_U16)(pDBreg->u32H_PostScalingRatio>>16),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 9188XXXX
1834*53ee8cc1Swenshuai.xi             //V post-scaling
1835*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK23_09_L,(MS_U16)(pDBreg->u32V_PostScalingRatio>>00),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 9189XXXX
1836*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK23_0A_L,(MS_U16)(pDBreg->u32V_PostScalingRatio>>16),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 918AXXXX
1837*53ee8cc1Swenshuai.xi 
1838*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_18_L,(MS_U16)(pDBreg->u16VWritelimit>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 8918XXXX
1839*53ee8cc1Swenshuai.xi 
1840*53ee8cc1Swenshuai.xi             if(IsVMirrorMode(MAIN_WINDOW))
1841*53ee8cc1Swenshuai.xi             {
1842*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_08_L,(MS_U16)(pDBreg->u32DNRBase0>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1843*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_09_L,(MS_U16)(pDBreg->u32DNRBase0>>16),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1844*53ee8cc1Swenshuai.xi             }
1845*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_0F_L,(MS_U16)(pDBreg->u16DNRFetch>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 890FXXXX
1846*53ee8cc1Swenshuai.xi 
1847*53ee8cc1Swenshuai.xi             //H_mirror_offset
1848*53ee8cc1Swenshuai.xi             if(IsHMirrorMode(MAIN_WINDOW)||IsVMirrorMode(MAIN_WINDOW))
1849*53ee8cc1Swenshuai.xi             {
1850*53ee8cc1Swenshuai.xi                 XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"[%s,%5d] [DS] VB_width:%d framNum:%d u8BitPerPixel:%d  \n",__func__,__LINE__,gSrcInfo[MAIN_WINDOW].Status2.u16XCVirtualBoxWidth,MDrv_XC_TransFrameNumToFactor(pInstance,gSrcInfo[MAIN_WINDOW].Status2.eFrameStoreNumber, gSrcInfo[MAIN_WINDOW].bLinearMode, _FIELD_PACKING_MODE_SUPPORTED),gSrcInfo[MAIN_WINDOW].u8BitPerPixel);
1851*53ee8cc1Swenshuai.xi 
1852*53ee8cc1Swenshuai.xi                 MS_U32 H_mirror_offset;
1853*53ee8cc1Swenshuai.xi                 H_mirror_offset = (gSrcInfo[MAIN_WINDOW].Status2.u16XCVirtualBoxWidth * gSrcInfo[MAIN_WINDOW].u8BitPerPixel / 8 * MDrv_XC_TransFrameNumToFactor(pInstance,gSrcInfo[MAIN_WINDOW].Status2.eFrameStoreNumber, gSrcInfo[MAIN_WINDOW].bLinearMode, _FIELD_PACKING_MODE_SUPPORTED)) / BYTE_PER_WORD;
1854*53ee8cc1Swenshuai.xi 
1855*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_1C_L,H_mirror_offset,DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 891CXXXX
1856*53ee8cc1Swenshuai.xi             }
1857*53ee8cc1Swenshuai.xi             else
1858*53ee8cc1Swenshuai.xi             {
1859*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_1C_L,0x0000,DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 891CXXXX
1860*53ee8cc1Swenshuai.xi             }
1861*53ee8cc1Swenshuai.xi 
1862*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_10_L, (MS_U16)(pDBreg->u32OPMBase0>>00),DS_OP,DS_XC,&PSTXC_DS_CMDCNT); // OPM base0  //0xFFFF0009 8910XXXX
1863*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_11_L,(MS_U16)(pDBreg->u32OPMBase0>>16),DS_OP,DS_XC,&PSTXC_DS_CMDCNT); // OPM base0   //0xFFFF0009 8911XXXX
1864*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK12_17_L,(MS_U16)(pDBreg->u16OPMFetch>>00),DS_OP,DS_XC,&PSTXC_DS_CMDCNT); // OPM fetch   //0xFFFF0009 8917XXXX
1865*53ee8cc1Swenshuai.xi             //Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK20_15_L, (MS_U16)(pDBreg->u16VLen>>00),DS_OP,DS_XC,&PSTXC_DS_CMDCNT); // V Len
1866*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK20_1D_L,(MS_U16)(pDBreg->u16LBOffset&0xFF),DS_OP,DS_XC,&PSTXC_DS_CMDCNT); //LBOffset    //0xFFFF0009 901DXXXX
1867*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK20_1D_L,(MS_U16)(pDBreg->u16LBOffset&0xFF),DS_OP,DS_XC,&PSTXC_DS_CMDCNT); //LBOffset    //0xFFFF0009 901DXXXX
1868*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK20_15_L, (MS_U16)(pDBreg->u16VLen>>00),DS_OP,DS_XC,&PSTXC_DS_CMDCNT); // V Len          //0xFFFF0009 9015XXXX
1869*53ee8cc1Swenshuai.xi 
1870*53ee8cc1Swenshuai.xi #if defined(UFO_XC_HDR) && defined(UFO_XC_HDR_VERSION) && (UFO_XC_HDR_VERSION == 2)
1871*53ee8cc1Swenshuai.xi             //HDR input DE Window info
1872*53ee8cc1Swenshuai.xi             if (gSrcInfo[MAIN_WINDOW].bR_FBL)
1873*53ee8cc1Swenshuai.xi             {
1874*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK79_08_L,(MS_U16)(gSrcInfo[MAIN_WINDOW].stCropWin.width>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1875*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK79_09_L,(MS_U16)(gSrcInfo[MAIN_WINDOW].stCropWin.height>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1876*53ee8cc1Swenshuai.xi             }
1877*53ee8cc1Swenshuai.xi             else
1878*53ee8cc1Swenshuai.xi             {
1879*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK79_08_L,(MS_U16)(pDBreg->u16H_CapSize>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1880*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK79_09_L,(MS_U16)(pDBreg->u16V_CapSize>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1881*53ee8cc1Swenshuai.xi             }
1882*53ee8cc1Swenshuai.xi #endif
1883*53ee8cc1Swenshuai.xi 
1884*53ee8cc1Swenshuai.xi             //Cap info
1885*53ee8cc1Swenshuai.xi             /// before enable ML bit mask feature, the capture size for 2P setting BK01_07[15] need to be considered
1886*53ee8cc1Swenshuai.xi             if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, BIT(15)))
1887*53ee8cc1Swenshuai.xi                 pDBreg->u16H_CapSize |= 0x8000;
1888*53ee8cc1Swenshuai.xi             else
1889*53ee8cc1Swenshuai.xi                 pDBreg->u16H_CapSize |= 0x0000;
1890*53ee8cc1Swenshuai.xi 
1891*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK01_06_L,(MS_U16)(pDBreg->u16V_CapSize>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 8086XXXX
1892*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK01_07_L,(MS_U16)(pDBreg->u16H_CapSize>>00),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);//0xFFFF0009 8087XXXX
1893*53ee8cc1Swenshuai.xi 
1894*53ee8cc1Swenshuai.xi             //Disp info
1895*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK10_08_L,(MS_U16)(pDBreg->u16H_DisStart),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);  //0xFFFF0009 8808XXXX
1896*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK10_09_L,(MS_U16)(pDBreg->u16H_DisEnd),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);    //0xFFFF0009 8809XXXX
1897*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK10_0A_L,(MS_U16)(pDBreg->u16V_DisStart),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);  //0xFFFF0009 880AXXXX
1898*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK10_0B_L,(MS_U16)(pDBreg->u16V_DisEnd),DS_OP,DS_XC,&PSTXC_DS_CMDCNT);    //0xFFFF0009 880BXXXX
1899*53ee8cc1Swenshuai.xi 
1900*53ee8cc1Swenshuai.xi #if (SUPPORT_KERNEL_DS == 0)//if SUPPORT_KERNEL_DS is true,this cmd will be set in kernel ds
1901*53ee8cc1Swenshuai.xi             //toggle reg_ds_ipm_active_set in last DS IP command
1902*53ee8cc1Swenshuai.xi             MS_U32 u32SW_Reset_IPM = 0;
1903*53ee8cc1Swenshuai.xi             u32SW_Reset_IPM = 0x0100 ;//bit8 : reg_ds_ipm_active_set
1904*53ee8cc1Swenshuai.xi             ActiveSWClearEn |= u32SW_Reset_IPM;
1905*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK1F_17_L,(MS_U16)(ActiveSWClearEn),DS_IP,DS_XC,&PSTXC_DS_CMDCNT);
1906*53ee8cc1Swenshuai.xi #endif
1907*53ee8cc1Swenshuai.xi #if (defined (ANDROID) && defined(UFO_XC_DS_PQ))
1908*53ee8cc1Swenshuai.xi             if(DS_REG_CNT > DS_PQ_MAX_NUM)
1909*53ee8cc1Swenshuai.xi             {
1910*53ee8cc1Swenshuai.xi                 MS_ASSERT(0);
1911*53ee8cc1Swenshuai.xi             }
1912*53ee8cc1Swenshuai.xi             if(eWindow != MAIN_WINDOW)
1913*53ee8cc1Swenshuai.xi             {
1914*53ee8cc1Swenshuai.xi                 MS_ASSERT(0);
1915*53ee8cc1Swenshuai.xi             }
1916*53ee8cc1Swenshuai.xi             for(cnt_x = 0 ;cnt_x < DS_REG_CNT; cnt_x++)
1917*53ee8cc1Swenshuai.xi             {
1918*53ee8cc1Swenshuai.xi                 u16TempRegVal = SC_R2BYTE(psXCInstPri->u32DeviceID, DS_REG[cnt_x].u16Addr);
1919*53ee8cc1Swenshuai.xi                 u16TempRegVal = (u16TempRegVal & ~DS_REG[cnt_x].u16Mask) | DS_REG[cnt_x].u16Value;
1920*53ee8cc1Swenshuai.xi                 Hal_SC_WriteSWDSCommand(pInstance,eWindow,DS_REG[cnt_x].u16Addr,u16TempRegVal,DS_OP,DS_XC,&PSTXC_DS_CMDCNT);
1921*53ee8cc1Swenshuai.xi             }
1922*53ee8cc1Swenshuai.xi             DS_REG_CNT = 0;
1923*53ee8cc1Swenshuai.xi #endif
1924*53ee8cc1Swenshuai.xi             //MS_U8 u8MaxCmdCnt = pXCResourcePrivate->sthal_SC.u8DynamicScalingIndexDepth * 2;// It has two 64bit commands per MIU bus width
1925*53ee8cc1Swenshuai.xi             MS_U32 u32MaxCmdCnt = pXCResourcePrivate->sthal_SC.u16DynamicScalingIndexDepth_Ext * 2;// It has two 64bit commands per MIU bus width
1926*53ee8cc1Swenshuai.xi 
1927*53ee8cc1Swenshuai.xi             //XC_PRINTF("[%s,%5d] u16CMDCNT_IPM:%d   u32MaxCmdCnt:%d \n",__func__,__LINE__,PSTXC_DS_CMDCNT.u16CMDCNT_IPM,u32MaxCmdCnt);
1928*53ee8cc1Swenshuai.xi             //XC_PRINTF("[%s,%5d] u16CMDCNT_OPM:%d   u32MaxCmdCnt:%d \n",__func__,__LINE__,PSTXC_DS_CMDCNT.u16CMDCNT_OPM,u32MaxCmdCnt);
1929*53ee8cc1Swenshuai.xi             if(PSTXC_DS_CMDCNT.u16CMDCNT_IPM < u32MaxCmdCnt)
1930*53ee8cc1Swenshuai.xi             {
1931*53ee8cc1Swenshuai.xi                 Hal_SC_Add_NullCommand(pInstance,MAIN_WINDOW,DS_IP,&PSTXC_DS_CMDCNT);
1932*53ee8cc1Swenshuai.xi             }
1933*53ee8cc1Swenshuai.xi             if(PSTXC_DS_CMDCNT.u16CMDCNT_OPM < u32MaxCmdCnt)
1934*53ee8cc1Swenshuai.xi             {
1935*53ee8cc1Swenshuai.xi                 Hal_SC_Add_NullCommand(pInstance,MAIN_WINDOW,DS_OP,&PSTXC_DS_CMDCNT);
1936*53ee8cc1Swenshuai.xi             }
1937*53ee8cc1Swenshuai.xi 
1938*53ee8cc1Swenshuai.xi         }
1939*53ee8cc1Swenshuai.xi     }
1940*53ee8cc1Swenshuai.xi }
1941*53ee8cc1Swenshuai.xi 
Hal_SC_SWDS_Fire(void * pInstance,P_SC_SWDB_INFO pDBreg,SCALER_WIN eWindow)1942*53ee8cc1Swenshuai.xi void Hal_SC_SWDS_Fire(void *pInstance, P_SC_SWDB_INFO pDBreg, SCALER_WIN eWindow)
1943*53ee8cc1Swenshuai.xi {
1944*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1945*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1946*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
1947*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
1948*53ee8cc1Swenshuai.xi 
1949*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.u8DynamicScalingCurrentIndex[eWindow]++;
1950*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"[%s,%5d] [DS] CurIdx:%d  \n",__func__,__LINE__,(int)pXCResourcePrivate->sthal_SC.u8DynamicScalingCurrentIndex[eWindow]);
1951*53ee8cc1Swenshuai.xi 
1952*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.u8DynamicScalingCurrentIndex_Ring[eWindow] = pXCResourcePrivate->sthal_SC.u8DynamicScalingCurrentIndex[eWindow] % DS_BUFFER_NUM_EX;
1953*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"[%s,%5d] [DS] CurIdx_Ring:%d  \n",__func__,__LINE__,(int)pXCResourcePrivate->sthal_SC.u8DynamicScalingCurrentIndex_Ring[eWindow])
1954*53ee8cc1Swenshuai.xi }
1955*53ee8cc1Swenshuai.xi 
Hal_SC_VIP_Peaking_Setting(void * pInstance,SCALER_WIN eWindow)1956*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_VIP_Peaking_Setting(void *pInstance, SCALER_WIN eWindow)
1957*53ee8cc1Swenshuai.xi {
1958*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
1959*53ee8cc1Swenshuai.xi     return E_APIXC_RET_FAIL_FUN_NOT_SUPPORT;
1960*53ee8cc1Swenshuai.xi }
1961*53ee8cc1Swenshuai.xi 
Hal_SC_support_source_to_ve(void * pInstance,MS_U16 * pOutputCapability)1962*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_support_source_to_ve(void *pInstance, MS_U16* pOutputCapability)
1963*53ee8cc1Swenshuai.xi {
1964*53ee8cc1Swenshuai.xi     *pOutputCapability = E_XC_IP | E_XC_OP2 | E_XC_OVERLAP;
1965*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
1966*53ee8cc1Swenshuai.xi }
1967*53ee8cc1Swenshuai.xi 
Hal_SC_set_output_capture_enable(void * pInstance,MS_BOOL bEnable,E_XC_SOURCE_TO_VE eSourceToVE)1968*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_set_output_capture_enable(void *pInstance, MS_BOOL bEnable,E_XC_SOURCE_TO_VE eSourceToVE)
1969*53ee8cc1Swenshuai.xi {
1970*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1971*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1972*53ee8cc1Swenshuai.xi     MS_BOOL bCaptureEna;
1973*53ee8cc1Swenshuai.xi     MS_U16 u16CaptureSrc;
1974*53ee8cc1Swenshuai.xi     // Current only support IP and OP2
1975*53ee8cc1Swenshuai.xi     bCaptureEna = bEnable;
1976*53ee8cc1Swenshuai.xi     switch(eSourceToVE)
1977*53ee8cc1Swenshuai.xi     {
1978*53ee8cc1Swenshuai.xi         case E_XC_VOP2:
1979*53ee8cc1Swenshuai.xi         case E_XC_OVERLAP:  // compatible to previous IC, overlap is before osd blending
1980*53ee8cc1Swenshuai.xi             u16CaptureSrc = 0;
1981*53ee8cc1Swenshuai.xi             break;
1982*53ee8cc1Swenshuai.xi         case E_XC_OP2:
1983*53ee8cc1Swenshuai.xi             u16CaptureSrc = 1;
1984*53ee8cc1Swenshuai.xi             break;
1985*53ee8cc1Swenshuai.xi         case E_XC_BRI:
1986*53ee8cc1Swenshuai.xi             u16CaptureSrc = 3;
1987*53ee8cc1Swenshuai.xi             break;
1988*53ee8cc1Swenshuai.xi         default:
1989*53ee8cc1Swenshuai.xi             u16CaptureSrc = 0;
1990*53ee8cc1Swenshuai.xi             bCaptureEna = FALSE;
1991*53ee8cc1Swenshuai.xi             break;
1992*53ee8cc1Swenshuai.xi     }
1993*53ee8cc1Swenshuai.xi 
1994*53ee8cc1Swenshuai.xi     if(bCaptureEna)
1995*53ee8cc1Swenshuai.xi     {
1996*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, BIT(11), BIT(11));    // Disable
1997*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, u16CaptureSrc<<4, BMASK(7:4));            // Disable
1998*53ee8cc1Swenshuai.xi     }
1999*53ee8cc1Swenshuai.xi     else
2000*53ee8cc1Swenshuai.xi     {
2001*53ee8cc1Swenshuai.xi         //DIP and VE Opcapture both need enable this bit, so dont disable it.
2002*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, 0, BIT(11));   // Disable
2003*53ee8cc1Swenshuai.xi     }
2004*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK; // Support Scaler OP -> VE
2005*53ee8cc1Swenshuai.xi }
2006*53ee8cc1Swenshuai.xi 
2007*53ee8cc1Swenshuai.xi /******************************************************************************/
2008*53ee8cc1Swenshuai.xi ///Set output DE window size
2009*53ee8cc1Swenshuai.xi ///@param pstWindow \b IN
2010*53ee8cc1Swenshuai.xi ///-  pointer to window information
2011*53ee8cc1Swenshuai.xi /******************************************************************************/
Hal_SC_set_de_window(void * pInstance,XC_PANEL_INFO * pPanel_Info)2012*53ee8cc1Swenshuai.xi void Hal_SC_set_de_window(void *pInstance, XC_PANEL_INFO *pPanel_Info)
2013*53ee8cc1Swenshuai.xi {
2014*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2015*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2016*53ee8cc1Swenshuai.xi #ifdef new_chakra
2017*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_04_L, pPanel_Info->u16HStart);                                // DE H start
2018*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_05_L, pPanel_Info->u16HStart + pPanel_Info->u16Width - 1);    // DE H end
2019*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_06_L, pPanel_Info->u16VStart);                                // DE V start
2020*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_07_L, pPanel_Info->u16VStart + pPanel_Info->u16Height - 1);   // DE V end
2021*53ee8cc1Swenshuai.xi #else
2022*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_04_L, pPanel_Info->u16HStart);                                // DE H start
2023*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_05_L, pPanel_Info->u16HStart + pPanel_Info->u16Width - 1);    // DE H end
2024*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_06_L, pSrcInfo->u8DE_V_Start);                                // DE V start
2025*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_07_L, pSrcInfo->u16DE_V_End);   // DE V end
2026*53ee8cc1Swenshuai.xi #endif
2027*53ee8cc1Swenshuai.xi }
2028*53ee8cc1Swenshuai.xi 
Hal_SC_get_disp_de_window(void * pInstance,MS_WINDOW_TYPE * pWin)2029*53ee8cc1Swenshuai.xi void Hal_SC_get_disp_de_window(void *pInstance, MS_WINDOW_TYPE *pWin)
2030*53ee8cc1Swenshuai.xi {
2031*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2032*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2033*53ee8cc1Swenshuai.xi     pWin->x = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_04_L);
2034*53ee8cc1Swenshuai.xi     pWin->y = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_06_L);
2035*53ee8cc1Swenshuai.xi     pWin->width = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_05_L) - pWin->x + 1;
2036*53ee8cc1Swenshuai.xi     pWin->height= SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_07_L) - pWin->y + 1;
2037*53ee8cc1Swenshuai.xi }
2038*53ee8cc1Swenshuai.xi 
Hal_SC_Get_DNRBase0(void * pInstance,SCALER_WIN eWindow)2039*53ee8cc1Swenshuai.xi MS_PHY Hal_SC_Get_DNRBase0(void *pInstance, SCALER_WIN eWindow)
2040*53ee8cc1Swenshuai.xi {
2041*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2042*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2043*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2044*53ee8cc1Swenshuai.xi     {
2045*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_08_L);     // input address0
2046*53ee8cc1Swenshuai.xi     }
2047*53ee8cc1Swenshuai.xi     else
2048*53ee8cc1Swenshuai.xi     {
2049*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_48_L);     // input address0
2050*53ee8cc1Swenshuai.xi     }
2051*53ee8cc1Swenshuai.xi }
2052*53ee8cc1Swenshuai.xi 
Hal_SC_Get_DNRBase1(void * pInstance,SCALER_WIN eWindow)2053*53ee8cc1Swenshuai.xi MS_PHY Hal_SC_Get_DNRBase1(void *pInstance, SCALER_WIN eWindow)
2054*53ee8cc1Swenshuai.xi {
2055*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2056*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2057*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2058*53ee8cc1Swenshuai.xi     {
2059*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0A_L);     // input address1
2060*53ee8cc1Swenshuai.xi     }
2061*53ee8cc1Swenshuai.xi     else
2062*53ee8cc1Swenshuai.xi     {
2063*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4A_L);     // input address1
2064*53ee8cc1Swenshuai.xi     }
2065*53ee8cc1Swenshuai.xi }
2066*53ee8cc1Swenshuai.xi 
Hal_SC_Get_OPMBase0(void * pInstance,SCALER_WIN eWindow)2067*53ee8cc1Swenshuai.xi MS_PHY Hal_SC_Get_OPMBase0(void *pInstance, SCALER_WIN eWindow)
2068*53ee8cc1Swenshuai.xi {
2069*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2070*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2071*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2072*53ee8cc1Swenshuai.xi     {
2073*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_10_L);     // output address0
2074*53ee8cc1Swenshuai.xi     }
2075*53ee8cc1Swenshuai.xi     else
2076*53ee8cc1Swenshuai.xi     {
2077*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_50_L);     // output address0
2078*53ee8cc1Swenshuai.xi     }
2079*53ee8cc1Swenshuai.xi }
2080*53ee8cc1Swenshuai.xi 
Hal_SC_Get_OPMBase1(void * pInstance,SCALER_WIN eWindow)2081*53ee8cc1Swenshuai.xi MS_PHY Hal_SC_Get_OPMBase1(void *pInstance, SCALER_WIN eWindow)
2082*53ee8cc1Swenshuai.xi {
2083*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2084*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2085*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2086*53ee8cc1Swenshuai.xi     {
2087*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_12_L);     // output address1
2088*53ee8cc1Swenshuai.xi     }
2089*53ee8cc1Swenshuai.xi     else
2090*53ee8cc1Swenshuai.xi     {
2091*53ee8cc1Swenshuai.xi         return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_52_L);     // output address1
2092*53ee8cc1Swenshuai.xi     }
2093*53ee8cc1Swenshuai.xi }
2094*53ee8cc1Swenshuai.xi 
Hal_SC_Get_FRCMBaseAddr(void * pInstance,MS_U8 u8id,SCALER_WIN eWindow)2095*53ee8cc1Swenshuai.xi MS_PHY Hal_SC_Get_FRCMBaseAddr(void *pInstance, MS_U8 u8id,SCALER_WIN eWindow)
2096*53ee8cc1Swenshuai.xi {
2097*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2098*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2099*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2100*53ee8cc1Swenshuai.xi     {
2101*53ee8cc1Swenshuai.xi         if(u8id == 0)
2102*53ee8cc1Swenshuai.xi             return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_08_L);     // frcm_w base address0
2103*53ee8cc1Swenshuai.xi         else if(u8id == 1)
2104*53ee8cc1Swenshuai.xi             return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_1A_L);     // frcm_w base address1
2105*53ee8cc1Swenshuai.xi         else //if(u8id == 2)
2106*53ee8cc1Swenshuai.xi             return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_0C_L);     // frcm_w base address2
2107*53ee8cc1Swenshuai.xi     }
2108*53ee8cc1Swenshuai.xi     else
2109*53ee8cc1Swenshuai.xi     {
2110*53ee8cc1Swenshuai.xi         if(u8id == 0)
2111*53ee8cc1Swenshuai.xi             return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_48_L);     // frcm_w base address0
2112*53ee8cc1Swenshuai.xi         else if(u8id == 1)
2113*53ee8cc1Swenshuai.xi             return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_4A_L);     // frcm_w base address1
2114*53ee8cc1Swenshuai.xi         else //if(u8id == 2)
2115*53ee8cc1Swenshuai.xi             return SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_4C_L);     // frcm_w base address2
2116*53ee8cc1Swenshuai.xi     }
2117*53ee8cc1Swenshuai.xi }
2118*53ee8cc1Swenshuai.xi 
Hal_SC_Get_LBOffset(void * pInstance,SCALER_WIN eWindow)2119*53ee8cc1Swenshuai.xi MS_U8 Hal_SC_Get_LBOffset(void *pInstance, SCALER_WIN eWindow)
2120*53ee8cc1Swenshuai.xi {
2121*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2122*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2123*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2124*53ee8cc1Swenshuai.xi     {
2125*53ee8cc1Swenshuai.xi         return SC_R2BYTEMSK(0, REG_SC_BK20_1D_L, 0x00FF);
2126*53ee8cc1Swenshuai.xi     }
2127*53ee8cc1Swenshuai.xi     else
2128*53ee8cc1Swenshuai.xi     {
2129*53ee8cc1Swenshuai.xi         return (SC_R2BYTEMSK(0, REG_SC_BK20_1D_L, 0xFF00) >> 8);
2130*53ee8cc1Swenshuai.xi     }
2131*53ee8cc1Swenshuai.xi }
2132*53ee8cc1Swenshuai.xi 
Hal_SC_Set_LBOffset(void * pInstance,MS_U8 u8LBOffset,SCALER_WIN eWindow)2133*53ee8cc1Swenshuai.xi void Hal_SC_Set_LBOffset(void *pInstance, MS_U8 u8LBOffset, SCALER_WIN eWindow)
2134*53ee8cc1Swenshuai.xi {
2135*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2136*53ee8cc1Swenshuai.xi     {
2137*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0, REG_SC_BK20_1D_L, u8LBOffset, 0x00FF);
2138*53ee8cc1Swenshuai.xi     }
2139*53ee8cc1Swenshuai.xi     else
2140*53ee8cc1Swenshuai.xi     {
2141*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0, REG_SC_BK20_1D_L, u8LBOffset << 8, 0xFF00);
2142*53ee8cc1Swenshuai.xi     }
2143*53ee8cc1Swenshuai.xi }
2144*53ee8cc1Swenshuai.xi 
Hal_SC_set_DNRBase0(void * pInstance,MS_PHY u32DNRBase0,SCALER_WIN eWindow)2145*53ee8cc1Swenshuai.xi void Hal_SC_set_DNRBase0(void *pInstance, MS_PHY u32DNRBase0, SCALER_WIN eWindow)
2146*53ee8cc1Swenshuai.xi {
2147*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2148*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2149*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2150*53ee8cc1Swenshuai.xi     {
2151*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_08_L, u32DNRBase0 / BYTE_PER_WORD);     // input address0
2152*53ee8cc1Swenshuai.xi     }
2153*53ee8cc1Swenshuai.xi     else
2154*53ee8cc1Swenshuai.xi     {
2155*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_48_L, u32DNRBase0 / BYTE_PER_WORD);     // input address0
2156*53ee8cc1Swenshuai.xi     }
2157*53ee8cc1Swenshuai.xi }
2158*53ee8cc1Swenshuai.xi 
Hal_SC_set_DNRBase1(void * pInstance,MS_PHY u32DNRBase1,SCALER_WIN eWindow)2159*53ee8cc1Swenshuai.xi void Hal_SC_set_DNRBase1(void *pInstance, MS_PHY u32DNRBase1, SCALER_WIN eWindow)
2160*53ee8cc1Swenshuai.xi {
2161*53ee8cc1Swenshuai.xi     UNUSED(u32DNRBase1);
2162*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2163*53ee8cc1Swenshuai.xi }
2164*53ee8cc1Swenshuai.xi 
Hal_SC_set_DNRBase2(void * pInstance,MS_PHY u32DNRBase2,SCALER_WIN eWindow)2165*53ee8cc1Swenshuai.xi void Hal_SC_set_DNRBase2(void *pInstance, MS_PHY u32DNRBase2, SCALER_WIN eWindow)
2166*53ee8cc1Swenshuai.xi {
2167*53ee8cc1Swenshuai.xi     UNUSED(u32DNRBase2);
2168*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2169*53ee8cc1Swenshuai.xi }
2170*53ee8cc1Swenshuai.xi 
Hal_SC_set_OPMBase0(void * pInstance,MS_PHY u32OPMBase0,SCALER_WIN eWindow)2171*53ee8cc1Swenshuai.xi void Hal_SC_set_OPMBase0(void *pInstance, MS_PHY u32OPMBase0, SCALER_WIN eWindow)
2172*53ee8cc1Swenshuai.xi {
2173*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2174*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2175*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2176*53ee8cc1Swenshuai.xi     {
2177*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_10_L, u32OPMBase0 / BYTE_PER_WORD);     // input address0
2178*53ee8cc1Swenshuai.xi     }
2179*53ee8cc1Swenshuai.xi     else
2180*53ee8cc1Swenshuai.xi     {
2181*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_50_L, u32OPMBase0 / BYTE_PER_WORD);     // input address0
2182*53ee8cc1Swenshuai.xi     }
2183*53ee8cc1Swenshuai.xi }
2184*53ee8cc1Swenshuai.xi 
Hal_SC_set_OPMBase1(void * pInstance,MS_PHY u32OPMBase1,SCALER_WIN eWindow)2185*53ee8cc1Swenshuai.xi void Hal_SC_set_OPMBase1(void *pInstance, MS_PHY u32OPMBase1, SCALER_WIN eWindow)
2186*53ee8cc1Swenshuai.xi {
2187*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2188*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2189*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2190*53ee8cc1Swenshuai.xi     {
2191*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_12_L, u32OPMBase1 / BYTE_PER_WORD);     // input address1
2192*53ee8cc1Swenshuai.xi     }
2193*53ee8cc1Swenshuai.xi     else
2194*53ee8cc1Swenshuai.xi     {
2195*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_52_L, u32OPMBase1 / BYTE_PER_WORD);     // input address1
2196*53ee8cc1Swenshuai.xi     }
2197*53ee8cc1Swenshuai.xi }
2198*53ee8cc1Swenshuai.xi 
Hal_SC_set_OPMBase2(void * pInstance,MS_PHY u32OPMBase2,SCALER_WIN eWindow)2199*53ee8cc1Swenshuai.xi void Hal_SC_set_OPMBase2(void *pInstance, MS_PHY u32OPMBase2, SCALER_WIN eWindow)
2200*53ee8cc1Swenshuai.xi {
2201*53ee8cc1Swenshuai.xi     UNUSED(u32OPMBase2);
2202*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2203*53ee8cc1Swenshuai.xi }
2204*53ee8cc1Swenshuai.xi 
Hal_SC_set_FRCM_WBase0(void * pInstance,MS_PHY u32FRCM_WBase0,SCALER_WIN eWindow)2205*53ee8cc1Swenshuai.xi void Hal_SC_set_FRCM_WBase0(void *pInstance, MS_PHY u32FRCM_WBase0, SCALER_WIN eWindow)
2206*53ee8cc1Swenshuai.xi {
2207*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2208*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2209*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2210*53ee8cc1Swenshuai.xi     {
2211*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_08_L, u32FRCM_WBase0 / BYTE_PER_WORD);     // input address0
2212*53ee8cc1Swenshuai.xi     }
2213*53ee8cc1Swenshuai.xi     else
2214*53ee8cc1Swenshuai.xi     {
2215*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_48_L, u32FRCM_WBase0 / BYTE_PER_WORD);     // input address0
2216*53ee8cc1Swenshuai.xi     }
2217*53ee8cc1Swenshuai.xi }
2218*53ee8cc1Swenshuai.xi 
Hal_SC_set_FRCM_WBase1(void * pInstance,MS_PHY u32FRCM_WBase1,SCALER_WIN eWindow)2219*53ee8cc1Swenshuai.xi void Hal_SC_set_FRCM_WBase1(void *pInstance, MS_PHY u32FRCM_WBase1, SCALER_WIN eWindow)
2220*53ee8cc1Swenshuai.xi {
2221*53ee8cc1Swenshuai.xi     UNUSED(u32FRCM_WBase1);
2222*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2223*53ee8cc1Swenshuai.xi }
2224*53ee8cc1Swenshuai.xi 
Hal_SC_set_FRCM_WBase2(void * pInstance,MS_PHY u32FRCM_WBase2,SCALER_WIN eWindow)2225*53ee8cc1Swenshuai.xi void Hal_SC_set_FRCM_WBase2(void *pInstance, MS_PHY u32FRCM_WBase2, SCALER_WIN eWindow)
2226*53ee8cc1Swenshuai.xi {
2227*53ee8cc1Swenshuai.xi     UNUSED(u32FRCM_WBase2);
2228*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2229*53ee8cc1Swenshuai.xi }
2230*53ee8cc1Swenshuai.xi 
Hal_SC_set_FRCM_RBase0(void * pInstance,MS_PHY u32FRCM_RBase0,SCALER_WIN eWindow)2231*53ee8cc1Swenshuai.xi void Hal_SC_set_FRCM_RBase0(void *pInstance, MS_PHY u32FRCM_RBase0, SCALER_WIN eWindow)
2232*53ee8cc1Swenshuai.xi {
2233*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2234*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2235*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2236*53ee8cc1Swenshuai.xi     {
2237*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_10_L, u32FRCM_RBase0 / BYTE_PER_WORD);     // input address0
2238*53ee8cc1Swenshuai.xi     }
2239*53ee8cc1Swenshuai.xi     else
2240*53ee8cc1Swenshuai.xi     {
2241*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_50_L, u32FRCM_RBase0 / BYTE_PER_WORD);     // input address0
2242*53ee8cc1Swenshuai.xi     }
2243*53ee8cc1Swenshuai.xi }
2244*53ee8cc1Swenshuai.xi 
Hal_SC_set_FRCM_RBase1(void * pInstance,MS_PHY u32FRCM_RBase1,SCALER_WIN eWindow)2245*53ee8cc1Swenshuai.xi void Hal_SC_set_FRCM_RBase1(void *pInstance, MS_PHY u32FRCM_RBase1, SCALER_WIN eWindow)
2246*53ee8cc1Swenshuai.xi {
2247*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2248*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2249*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2250*53ee8cc1Swenshuai.xi     {
2251*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_12_L, u32FRCM_RBase1 / BYTE_PER_WORD);     // input address1
2252*53ee8cc1Swenshuai.xi     }
2253*53ee8cc1Swenshuai.xi     else
2254*53ee8cc1Swenshuai.xi     {
2255*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_52_L, u32FRCM_RBase1 / BYTE_PER_WORD);     // input address1
2256*53ee8cc1Swenshuai.xi     }
2257*53ee8cc1Swenshuai.xi }
2258*53ee8cc1Swenshuai.xi 
Hal_SC_set_FRCM_RBase2(void * pInstance,MS_PHY u32FRCM_RBase2,SCALER_WIN eWindow)2259*53ee8cc1Swenshuai.xi void Hal_SC_set_FRCM_RBase2(void *pInstance, MS_PHY u32FRCM_RBase2, SCALER_WIN eWindow)
2260*53ee8cc1Swenshuai.xi {
2261*53ee8cc1Swenshuai.xi     UNUSED(u32FRCM_RBase2);
2262*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2263*53ee8cc1Swenshuai.xi }
2264*53ee8cc1Swenshuai.xi 
Hal_SC_set_Dual_DNRBase0(void * pInstance,MS_PHY u32DNRBase0,SCALER_WIN eWindow)2265*53ee8cc1Swenshuai.xi void Hal_SC_set_Dual_DNRBase0(void *pInstance, MS_PHY u32DNRBase0, SCALER_WIN eWindow)
2266*53ee8cc1Swenshuai.xi {
2267*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2268*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2269*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2270*53ee8cc1Swenshuai.xi     {
2271*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_08_L, u32DNRBase0 / BYTE_PER_WORD);     // input address0
2272*53ee8cc1Swenshuai.xi     }
2273*53ee8cc1Swenshuai.xi     else
2274*53ee8cc1Swenshuai.xi     {
2275*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_48_L, u32DNRBase0 / BYTE_PER_WORD);     // input address0
2276*53ee8cc1Swenshuai.xi     }
2277*53ee8cc1Swenshuai.xi }
2278*53ee8cc1Swenshuai.xi 
Hal_SC_set_Dual_DNRBase1(void * pInstance,MS_PHY u32DNRBase1,SCALER_WIN eWindow)2279*53ee8cc1Swenshuai.xi void Hal_SC_set_Dual_DNRBase1(void *pInstance, MS_PHY u32DNRBase1, SCALER_WIN eWindow)
2280*53ee8cc1Swenshuai.xi {
2281*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2282*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2283*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2284*53ee8cc1Swenshuai.xi     {
2285*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_1A_L, u32DNRBase1 / BYTE_PER_WORD);     // input address0
2286*53ee8cc1Swenshuai.xi     }
2287*53ee8cc1Swenshuai.xi     else
2288*53ee8cc1Swenshuai.xi     {
2289*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_5A_L, u32DNRBase1 / BYTE_PER_WORD);     // input address0
2290*53ee8cc1Swenshuai.xi     }
2291*53ee8cc1Swenshuai.xi 
2292*53ee8cc1Swenshuai.xi }
2293*53ee8cc1Swenshuai.xi 
Hal_SC_set_Dual_DNRBase2(void * pInstance,MS_PHY u32DNRBase2,SCALER_WIN eWindow)2294*53ee8cc1Swenshuai.xi void Hal_SC_set_Dual_DNRBase2(void *pInstance, MS_PHY u32DNRBase2, SCALER_WIN eWindow)
2295*53ee8cc1Swenshuai.xi {
2296*53ee8cc1Swenshuai.xi     UNUSED(u32DNRBase2);
2297*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2298*53ee8cc1Swenshuai.xi }
2299*53ee8cc1Swenshuai.xi 
Hal_SC_set_Dual_OPMBase0(void * pInstance,MS_PHY u32OPMBase0,SCALER_WIN eWindow)2300*53ee8cc1Swenshuai.xi void Hal_SC_set_Dual_OPMBase0(void *pInstance, MS_PHY u32OPMBase0, SCALER_WIN eWindow)
2301*53ee8cc1Swenshuai.xi {
2302*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2303*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2304*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2305*53ee8cc1Swenshuai.xi     {
2306*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_10_L, u32OPMBase0 / BYTE_PER_WORD);     // input address0
2307*53ee8cc1Swenshuai.xi     }
2308*53ee8cc1Swenshuai.xi     else
2309*53ee8cc1Swenshuai.xi     {
2310*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_50_L, u32OPMBase0 / BYTE_PER_WORD);     // input address0
2311*53ee8cc1Swenshuai.xi     }
2312*53ee8cc1Swenshuai.xi }
2313*53ee8cc1Swenshuai.xi 
Hal_SC_set_Dual_OPMBase1(void * pInstance,MS_PHY u32OPMBase1,SCALER_WIN eWindow)2314*53ee8cc1Swenshuai.xi void Hal_SC_set_Dual_OPMBase1(void *pInstance, MS_PHY u32OPMBase1, SCALER_WIN eWindow)
2315*53ee8cc1Swenshuai.xi {
2316*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2317*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2318*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2319*53ee8cc1Swenshuai.xi     {
2320*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_12_L, u32OPMBase1 / BYTE_PER_WORD);     // input address1
2321*53ee8cc1Swenshuai.xi     }
2322*53ee8cc1Swenshuai.xi     else
2323*53ee8cc1Swenshuai.xi     {
2324*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_52_L, u32OPMBase1 / BYTE_PER_WORD);     // input address1
2325*53ee8cc1Swenshuai.xi     }
2326*53ee8cc1Swenshuai.xi }
2327*53ee8cc1Swenshuai.xi 
Hal_SC_set_Dual_OPMBase2(void * pInstance,MS_PHY u32OPMBase2,SCALER_WIN eWindow)2328*53ee8cc1Swenshuai.xi void Hal_SC_set_Dual_OPMBase2(void *pInstance, MS_PHY u32OPMBase2, SCALER_WIN eWindow)
2329*53ee8cc1Swenshuai.xi {
2330*53ee8cc1Swenshuai.xi     UNUSED(u32OPMBase2);
2331*53ee8cc1Swenshuai.xi     UNUSED(eWindow);
2332*53ee8cc1Swenshuai.xi }
2333*53ee8cc1Swenshuai.xi 
Hal_SC_set_WriteVLength(void * pInstance,SCALER_WIN eWindow)2334*53ee8cc1Swenshuai.xi void Hal_SC_set_WriteVLength(void *pInstance, SCALER_WIN eWindow)
2335*53ee8cc1Swenshuai.xi {
2336*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2337*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2338*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2339*53ee8cc1Swenshuai.xi     {
2340*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK20_15_L, 0x0);     // Write V length
2341*53ee8cc1Swenshuai.xi     }
2342*53ee8cc1Swenshuai.xi     else
2343*53ee8cc1Swenshuai.xi     {
2344*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK20_16_L, 0x0);     // Write V length
2345*53ee8cc1Swenshuai.xi     }
2346*53ee8cc1Swenshuai.xi }
2347*53ee8cc1Swenshuai.xi 
Hal_SC_set_memoryaddress(void * pInstance,MS_PHY u32DNRBase0,MS_PHY u32DNRBase1,MS_PHY u32DNRBase2,MS_PHY u32OPMBase0,MS_PHY u32OPMBase1,MS_PHY u32OPMBase2,SCALER_WIN eWindow)2348*53ee8cc1Swenshuai.xi void Hal_SC_set_memoryaddress(void *pInstance, MS_PHY u32DNRBase0, MS_PHY u32DNRBase1, MS_PHY u32DNRBase2, MS_PHY u32OPMBase0, MS_PHY u32OPMBase1, MS_PHY u32OPMBase2, SCALER_WIN eWindow)
2349*53ee8cc1Swenshuai.xi {
2350*53ee8cc1Swenshuai.xi     Hal_SC_set_DNRBase0(pInstance, u32DNRBase0, eWindow);
2351*53ee8cc1Swenshuai.xi     Hal_SC_set_DNRBase1(pInstance, u32DNRBase1, eWindow);
2352*53ee8cc1Swenshuai.xi     Hal_SC_set_DNRBase2(pInstance, u32DNRBase2, eWindow);
2353*53ee8cc1Swenshuai.xi     Hal_SC_set_OPMBase0(pInstance, u32OPMBase0, eWindow);
2354*53ee8cc1Swenshuai.xi     Hal_SC_set_OPMBase1(pInstance, u32OPMBase1, eWindow);
2355*53ee8cc1Swenshuai.xi     Hal_SC_set_OPMBase2(pInstance, u32OPMBase2, eWindow);
2356*53ee8cc1Swenshuai.xi }
2357*53ee8cc1Swenshuai.xi 
Hal_SC_set_frcm_memoryaddress(void * pInstance,MS_PHY u32FRCM_WBase0,MS_PHY u32FRCM_WBase1,MS_PHY u32FRCM_WBase2,MS_PHY u32FRCM_RBase0,MS_PHY u32FRCM_RBase1,MS_PHY u32FRCM_RBase2,SCALER_WIN eWindow)2358*53ee8cc1Swenshuai.xi void Hal_SC_set_frcm_memoryaddress(void *pInstance, MS_PHY u32FRCM_WBase0, MS_PHY u32FRCM_WBase1, MS_PHY u32FRCM_WBase2, MS_PHY u32FRCM_RBase0, MS_PHY u32FRCM_RBase1, MS_PHY u32FRCM_RBase2, SCALER_WIN eWindow)
2359*53ee8cc1Swenshuai.xi {
2360*53ee8cc1Swenshuai.xi     Hal_SC_set_FRCM_WBase0(pInstance, u32FRCM_WBase0, eWindow);
2361*53ee8cc1Swenshuai.xi     Hal_SC_set_FRCM_WBase1(pInstance, u32FRCM_WBase1, eWindow);
2362*53ee8cc1Swenshuai.xi     Hal_SC_set_FRCM_WBase2(pInstance, u32FRCM_WBase2, eWindow);
2363*53ee8cc1Swenshuai.xi     Hal_SC_set_FRCM_RBase0(pInstance, u32FRCM_RBase0, eWindow);
2364*53ee8cc1Swenshuai.xi     Hal_SC_set_FRCM_RBase1(pInstance, u32FRCM_RBase1, eWindow);
2365*53ee8cc1Swenshuai.xi     Hal_SC_set_FRCM_RBase2(pInstance, u32FRCM_RBase2, eWindow);
2366*53ee8cc1Swenshuai.xi }
2367*53ee8cc1Swenshuai.xi 
Hal_SC_set_dual_memoryaddress(void * pInstance,MS_PHY u32DNRBase0,MS_PHY u32DNRBase1,MS_PHY u32DNRBase2,MS_PHY u32OPMBase0,MS_PHY u32OPMBase1,MS_PHY u32OPMBase2,SCALER_WIN eWindow)2368*53ee8cc1Swenshuai.xi void Hal_SC_set_dual_memoryaddress(void *pInstance, MS_PHY u32DNRBase0, MS_PHY u32DNRBase1, MS_PHY u32DNRBase2, MS_PHY u32OPMBase0, MS_PHY u32OPMBase1, MS_PHY u32OPMBase2, SCALER_WIN eWindow)
2369*53ee8cc1Swenshuai.xi {
2370*53ee8cc1Swenshuai.xi     Hal_SC_set_Dual_DNRBase0(pInstance, u32DNRBase0, eWindow);
2371*53ee8cc1Swenshuai.xi     Hal_SC_set_Dual_DNRBase1(pInstance, u32DNRBase1, eWindow);
2372*53ee8cc1Swenshuai.xi     Hal_SC_set_Dual_DNRBase2(pInstance, u32DNRBase2, eWindow);
2373*53ee8cc1Swenshuai.xi     Hal_SC_set_Dual_OPMBase0(pInstance, u32OPMBase0, eWindow);
2374*53ee8cc1Swenshuai.xi     Hal_SC_set_Dual_OPMBase1(pInstance, u32OPMBase1, eWindow);
2375*53ee8cc1Swenshuai.xi     Hal_SC_set_Dual_OPMBase2(pInstance, u32OPMBase2, eWindow);
2376*53ee8cc1Swenshuai.xi }
2377*53ee8cc1Swenshuai.xi 
Hal_SC_get_miu0mask(void)2378*53ee8cc1Swenshuai.xi static SC_MIUMASK_t Hal_SC_get_miu0mask(void)
2379*53ee8cc1Swenshuai.xi {
2380*53ee8cc1Swenshuai.xi     SC_MIUMASK_t mask;
2381*53ee8cc1Swenshuai.xi 
2382*53ee8cc1Swenshuai.xi     mask.u16MiuG0Mask = MDrv_Read2Byte(MIU0_G0_REQUEST_MASK);
2383*53ee8cc1Swenshuai.xi     mask.u16MiuG1Mask = MDrv_Read2Byte(MIU0_G1_REQUEST_MASK);
2384*53ee8cc1Swenshuai.xi     mask.u16MiuG2Mask = MDrv_Read2Byte(MIU0_G2_REQUEST_MASK);
2385*53ee8cc1Swenshuai.xi     mask.u16MiuG3Mask = MDrv_Read2Byte(MIU0_G3_REQUEST_MASK);
2386*53ee8cc1Swenshuai.xi     mask.u16MiuG4Mask = MDrv_Read2Byte(MIU0_G4_REQUEST_MASK);
2387*53ee8cc1Swenshuai.xi     mask.u16MiuG5Mask = MDrv_Read2Byte(MIU0_G5_REQUEST_MASK);
2388*53ee8cc1Swenshuai.xi 
2389*53ee8cc1Swenshuai.xi     return mask;
2390*53ee8cc1Swenshuai.xi }
2391*53ee8cc1Swenshuai.xi 
Hal_SC_get_miu1mask(void)2392*53ee8cc1Swenshuai.xi static SC_MIUMASK_t Hal_SC_get_miu1mask(void)
2393*53ee8cc1Swenshuai.xi {
2394*53ee8cc1Swenshuai.xi     SC_MIUMASK_t mask;
2395*53ee8cc1Swenshuai.xi 
2396*53ee8cc1Swenshuai.xi     mask.u16MiuG0Mask = MDrv_Read2Byte(MIU1_G0_REQUEST_MASK);
2397*53ee8cc1Swenshuai.xi     mask.u16MiuG1Mask = MDrv_Read2Byte(MIU1_G1_REQUEST_MASK);
2398*53ee8cc1Swenshuai.xi     mask.u16MiuG2Mask = MDrv_Read2Byte(MIU1_G2_REQUEST_MASK);
2399*53ee8cc1Swenshuai.xi     mask.u16MiuG3Mask = MDrv_Read2Byte(MIU1_G3_REQUEST_MASK);
2400*53ee8cc1Swenshuai.xi     mask.u16MiuG4Mask = MDrv_Read2Byte(MIU1_G4_REQUEST_MASK);
2401*53ee8cc1Swenshuai.xi     mask.u16MiuG5Mask = MDrv_Read2Byte(MIU1_G5_REQUEST_MASK);
2402*53ee8cc1Swenshuai.xi 
2403*53ee8cc1Swenshuai.xi     return mask;
2404*53ee8cc1Swenshuai.xi }
2405*53ee8cc1Swenshuai.xi 
Hal_SC_set_miu0mask(SC_MIUMASK_t mask)2406*53ee8cc1Swenshuai.xi static void Hal_SC_set_miu0mask(SC_MIUMASK_t mask)
2407*53ee8cc1Swenshuai.xi {
2408*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU0_G0_REQUEST_MASK, mask.u16MiuG0Mask);
2409*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU0_G1_REQUEST_MASK, mask.u16MiuG1Mask);
2410*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU0_G2_REQUEST_MASK, mask.u16MiuG2Mask);
2411*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU0_G3_REQUEST_MASK, mask.u16MiuG3Mask);
2412*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU0_G4_REQUEST_MASK, mask.u16MiuG4Mask);
2413*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU0_G5_REQUEST_MASK, mask.u16MiuG5Mask);
2414*53ee8cc1Swenshuai.xi }
2415*53ee8cc1Swenshuai.xi 
Hal_SC_set_miu1mask(SC_MIUMASK_t mask)2416*53ee8cc1Swenshuai.xi static void Hal_SC_set_miu1mask(SC_MIUMASK_t mask)
2417*53ee8cc1Swenshuai.xi {
2418*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU1_G0_REQUEST_MASK, mask.u16MiuG0Mask);
2419*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU1_G1_REQUEST_MASK, mask.u16MiuG1Mask);
2420*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU1_G2_REQUEST_MASK, mask.u16MiuG2Mask);
2421*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU1_G3_REQUEST_MASK, mask.u16MiuG3Mask);
2422*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU1_G4_REQUEST_MASK, mask.u16MiuG4Mask);
2423*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(MIU1_G5_REQUEST_MASK, mask.u16MiuG5Mask);
2424*53ee8cc1Swenshuai.xi }
2425*53ee8cc1Swenshuai.xi 
Hal_SC_Enable_MiuMask(void * pInstance)2426*53ee8cc1Swenshuai.xi void Hal_SC_Enable_MiuMask(void *pInstance)
2427*53ee8cc1Swenshuai.xi {
2428*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2429*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2430*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2431*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2432*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0MaskOld = Hal_SC_get_miu0mask();
2433*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1MaskOld = Hal_SC_get_miu1mask();
2434*53ee8cc1Swenshuai.xi 
2435*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0Mask = pXCResourcePrivate->sthal_SC.Miu0MaskOld;
2436*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1Mask = pXCResourcePrivate->sthal_SC.Miu1MaskOld;
2437*53ee8cc1Swenshuai.xi 
2438*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0Mask.u16MiuG0Mask |= MIU_SC_G0REQUEST_MASK;
2439*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0Mask.u16MiuG1Mask |= MIU_SC_G1REQUEST_MASK;
2440*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0Mask.u16MiuG2Mask |= MIU_SC_G2REQUEST_MASK;
2441*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0Mask.u16MiuG3Mask |= MIU_SC_G3REQUEST_MASK;
2442*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0Mask.u16MiuG4Mask |= MIU_SC_G4REQUEST_MASK;
2443*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu0Mask.u16MiuG5Mask |= MIU_SC_G5REQUEST_MASK;
2444*53ee8cc1Swenshuai.xi 
2445*53ee8cc1Swenshuai.xi 
2446*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1Mask.u16MiuG0Mask |= MIU_SC_G0REQUEST_MASK;
2447*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1Mask.u16MiuG1Mask |= MIU_SC_G1REQUEST_MASK;
2448*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1Mask.u16MiuG2Mask |= MIU_SC_G2REQUEST_MASK;
2449*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1Mask.u16MiuG3Mask |= MIU_SC_G3REQUEST_MASK;
2450*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1Mask.u16MiuG4Mask |= MIU_SC_G4REQUEST_MASK;
2451*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC.Miu1Mask.u16MiuG5Mask |= MIU_SC_G5REQUEST_MASK;
2452*53ee8cc1Swenshuai.xi 
2453*53ee8cc1Swenshuai.xi     Hal_SC_set_miu0mask(pXCResourcePrivate->sthal_SC.Miu0Mask);
2454*53ee8cc1Swenshuai.xi     Hal_SC_set_miu1mask(pXCResourcePrivate->sthal_SC.Miu1Mask);
2455*53ee8cc1Swenshuai.xi }
2456*53ee8cc1Swenshuai.xi 
Hal_SC_Disable_MiuMask(void * pInstance)2457*53ee8cc1Swenshuai.xi void Hal_SC_Disable_MiuMask(void *pInstance)
2458*53ee8cc1Swenshuai.xi {
2459*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2460*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2461*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2462*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2463*53ee8cc1Swenshuai.xi     Hal_SC_set_miu0mask(pXCResourcePrivate->sthal_SC.Miu0MaskOld);
2464*53ee8cc1Swenshuai.xi     Hal_SC_set_miu1mask(pXCResourcePrivate->sthal_SC.Miu1MaskOld);
2465*53ee8cc1Swenshuai.xi }
2466*53ee8cc1Swenshuai.xi 
Hal_SC_set_miusel(void * pInstance,MS_U8 u8MIUSel)2467*53ee8cc1Swenshuai.xi void Hal_SC_set_miusel(void *pInstance, MS_U8 u8MIUSel)
2468*53ee8cc1Swenshuai.xi {
2469*53ee8cc1Swenshuai.xi     // Scaler control MIU by itself
2470*53ee8cc1Swenshuai.xi     // So MIU1 IP-select is set to 1. At this moment, MIU0 Miu select is not working.
2471*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2472*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2473*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2474*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2475*53ee8cc1Swenshuai.xi #if 0 // remove and decided by miu_setting.txt
2476*53ee8cc1Swenshuai.xi     // MIU 1, GROUP0~5: 0x78~0x7D
2477*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xF2, 0x60, 0x60); // IP select, group1, for [5]DIPW, [6]LD
2478*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xF3, 0x80, 0x80); // IP select, group1, for [f]MC2D
2479*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xFA, 0xE0, 0xE0); // IP select, group5
2480*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xFB, 0xF7, 0xF7); // IP select, group5
2481*53ee8cc1Swenshuai.xi #endif
2482*53ee8cc1Swenshuai.xi 
2483*53ee8cc1Swenshuai.xi 
2484*53ee8cc1Swenshuai.xi #if 0
2485*53ee8cc1Swenshuai.xi     // When MIU select controlled by XC internal via BK12_05, IPM/OPM just access the same MIU only.
2486*53ee8cc1Swenshuai.xi     // For monet Mirror under enbale dual MIU, IPM/OPM need access different miu,
2487*53ee8cc1Swenshuai.xi     // so miu select must be controlled by MIU (BK7F_10[1..0]).
2488*53ee8cc1Swenshuai.xi     if (u8MIUSel == 0)
2489*53ee8cc1Swenshuai.xi     {
2490*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_10_L, 0x0, BIT(0) | BIT(1));
2491*53ee8cc1Swenshuai.xi     }
2492*53ee8cc1Swenshuai.xi     else
2493*53ee8cc1Swenshuai.xi     {
2494*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_10_L, BIT(0) | BIT(1), BIT(0) | BIT(1));
2495*53ee8cc1Swenshuai.xi     }
2496*53ee8cc1Swenshuai.xi #endif
2497*53ee8cc1Swenshuai.xi 
2498*53ee8cc1Swenshuai.xi #if 1
2499*53ee8cc1Swenshuai.xi     if (u8MIUSel==0)
2500*53ee8cc1Swenshuai.xi     {
2501*53ee8cc1Swenshuai.xi         ///SCM
2502*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2503*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2504*53ee8cc1Swenshuai.xi 
2505*53ee8cc1Swenshuai.xi         if (!IsEnableDualMode(MAIN_WINDOW))
2506*53ee8cc1Swenshuai.xi         {
2507*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2508*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2509*53ee8cc1Swenshuai.xi         }
2510*53ee8cc1Swenshuai.xi         else
2511*53ee8cc1Swenshuai.xi         {
2512*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0010, 0x0010);     // reg_miu_select_f2 to MIU0
2513*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2514*53ee8cc1Swenshuai.xi         }
2515*53ee8cc1Swenshuai.xi 
2516*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU0
2517*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU0
2518*53ee8cc1Swenshuai.xi     }
2519*53ee8cc1Swenshuai.xi     else if(u8MIUSel==1)
2520*53ee8cc1Swenshuai.xi     {
2521*53ee8cc1Swenshuai.xi         ///SCM
2522*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_05_L, 0x0010, 0x0010);     // reg_miu_select_f2 to MIU1
2523*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU1
2524*53ee8cc1Swenshuai.xi 
2525*53ee8cc1Swenshuai.xi         if (!IsEnableDualMode(MAIN_WINDOW))
2526*53ee8cc1Swenshuai.xi         {
2527*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0010, 0x0010);     // reg_miu_select_f2 to MIU1
2528*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU1
2529*53ee8cc1Swenshuai.xi         }
2530*53ee8cc1Swenshuai.xi         else
2531*53ee8cc1Swenshuai.xi         {
2532*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2533*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2534*53ee8cc1Swenshuai.xi         }
2535*53ee8cc1Swenshuai.xi 
2536*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_44_L, 0x4000, 0x4000);     // reg_miu_select_f1 to MIU1
2537*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU1
2538*53ee8cc1Swenshuai.xi     }
2539*53ee8cc1Swenshuai.xi     else if(u8MIUSel==2)
2540*53ee8cc1Swenshuai.xi     {
2541*53ee8cc1Swenshuai.xi         ///SCM
2542*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU1
2543*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_05_L, 0x0010, 0x0010);     // reg_miu_select_f2 to MIU1
2544*53ee8cc1Swenshuai.xi         if (!IsEnableDualMode(MAIN_WINDOW))
2545*53ee8cc1Swenshuai.xi         {
2546*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU1
2547*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0010, 0x0010);     // reg_miu_select_f2 to MIU1
2548*53ee8cc1Swenshuai.xi         }
2549*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU1
2550*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_44_L, 0x4000, 0x4000);     // reg_miu_select_f1 to MIU1
2551*53ee8cc1Swenshuai.xi     }
2552*53ee8cc1Swenshuai.xi #endif
2553*53ee8cc1Swenshuai.xi }
2554*53ee8cc1Swenshuai.xi 
Hal_SC_get_miusel(void * pInstance,SC_MIUSEL_t * stMIUSel)2555*53ee8cc1Swenshuai.xi void Hal_SC_get_miusel(void *pInstance, SC_MIUSEL_t* stMIUSel)
2556*53ee8cc1Swenshuai.xi {
2557*53ee8cc1Swenshuai.xi #if 1
2558*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(0, REG_SC_BK12_05_L, BIT(4)))
2559*53ee8cc1Swenshuai.xi     {
2560*53ee8cc1Swenshuai.xi         stMIUSel-> u8MainFBSel = 1;
2561*53ee8cc1Swenshuai.xi     }
2562*53ee8cc1Swenshuai.xi     else
2563*53ee8cc1Swenshuai.xi     {
2564*53ee8cc1Swenshuai.xi         if(SC_R2BYTEMSK(0, REG_SC_BK11_05_L, BIT(4)))
2565*53ee8cc1Swenshuai.xi         {
2566*53ee8cc1Swenshuai.xi             stMIUSel-> u8MainFBSel = 2;
2567*53ee8cc1Swenshuai.xi         }
2568*53ee8cc1Swenshuai.xi         else
2569*53ee8cc1Swenshuai.xi         {
2570*53ee8cc1Swenshuai.xi             stMIUSel-> u8MainFBSel = 0;
2571*53ee8cc1Swenshuai.xi         }
2572*53ee8cc1Swenshuai.xi     }
2573*53ee8cc1Swenshuai.xi 
2574*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(0, REG_SC_BK32_05_L, BIT(4)))
2575*53ee8cc1Swenshuai.xi     {
2576*53ee8cc1Swenshuai.xi         stMIUSel-> u8SubFBSel = 1;
2577*53ee8cc1Swenshuai.xi     }
2578*53ee8cc1Swenshuai.xi     else
2579*53ee8cc1Swenshuai.xi     {
2580*53ee8cc1Swenshuai.xi         if(SC_R2BYTEMSK(0, REG_SC_BK31_05_L, BIT(4)))
2581*53ee8cc1Swenshuai.xi         {
2582*53ee8cc1Swenshuai.xi             stMIUSel-> u8SubFBSel = 2;
2583*53ee8cc1Swenshuai.xi         }
2584*53ee8cc1Swenshuai.xi         else
2585*53ee8cc1Swenshuai.xi         {
2586*53ee8cc1Swenshuai.xi             stMIUSel-> u8SubFBSel = 0;
2587*53ee8cc1Swenshuai.xi         }
2588*53ee8cc1Swenshuai.xi     }
2589*53ee8cc1Swenshuai.xi #else
2590*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(0, REG_SC_BK7F_10_L, BIT(0)))
2591*53ee8cc1Swenshuai.xi     {
2592*53ee8cc1Swenshuai.xi         stMIUSel-> u8MainFBSel = 1;
2593*53ee8cc1Swenshuai.xi     }
2594*53ee8cc1Swenshuai.xi     else
2595*53ee8cc1Swenshuai.xi     {
2596*53ee8cc1Swenshuai.xi         stMIUSel-> u8MainFBSel = 0;
2597*53ee8cc1Swenshuai.xi     }
2598*53ee8cc1Swenshuai.xi #endif
2599*53ee8cc1Swenshuai.xi }
2600*53ee8cc1Swenshuai.xi 
Hal_SC_set_dual_miusel(void * pInstance,MS_U8 u8MIUSel)2601*53ee8cc1Swenshuai.xi void Hal_SC_set_dual_miusel(void *pInstance, MS_U8 u8MIUSel)
2602*53ee8cc1Swenshuai.xi {
2603*53ee8cc1Swenshuai.xi     // Scaler control MIU by itself
2604*53ee8cc1Swenshuai.xi     // So MIU1 IP-select is set to 1. At this moment, MIU0 Miu select is not working.
2605*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2606*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2607*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2608*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2609*53ee8cc1Swenshuai.xi #if 0 // remove and decided by miu_setting.txt
2610*53ee8cc1Swenshuai.xi     // MIU 1, GROUP0~5: 0x78~0x7D
2611*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xF2, 0x60, 0x60); // IP select, group1, for [5]DIPW, [6]LD
2612*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xF3, 0x80, 0x80); // IP select, group1, for [f]MC2D
2613*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xFA, 0xE0, 0xE0); // IP select, group5
2614*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xFB, 0xF7, 0xF7); // IP select, group5
2615*53ee8cc1Swenshuai.xi #endif
2616*53ee8cc1Swenshuai.xi     // For monet BK52_05 can not work and need not to be set.
2617*53ee8cc1Swenshuai.xi     // When MIU select controlled by XC internal, XC dual miu auto adjust BK12_05[4]
2618*53ee8cc1Swenshuai.xi     // When MIU select cntrolled by MIU, xc dual miu auto adjust BK7F_10[1..0]
2619*53ee8cc1Swenshuai.xi #if 1
2620*53ee8cc1Swenshuai.xi     if (u8MIUSel==0)
2621*53ee8cc1Swenshuai.xi     {
2622*53ee8cc1Swenshuai.xi         ///SCM
2623*53ee8cc1Swenshuai.xi         if (IsEnableDualMode(MAIN_WINDOW))
2624*53ee8cc1Swenshuai.xi         {
2625*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2626*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU0
2627*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU0
2628*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU0
2629*53ee8cc1Swenshuai.xi         }
2630*53ee8cc1Swenshuai.xi     }
2631*53ee8cc1Swenshuai.xi     else if(u8MIUSel==1)
2632*53ee8cc1Swenshuai.xi     {
2633*53ee8cc1Swenshuai.xi         ///SCM
2634*53ee8cc1Swenshuai.xi 
2635*53ee8cc1Swenshuai.xi         if (IsEnableDualMode(MAIN_WINDOW))
2636*53ee8cc1Swenshuai.xi         {
2637*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0010, 0x0010);     // reg_miu_select_f2 to MIU1
2638*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU1
2639*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_44_L, 0x4000, 0x4000);     // reg_miu_select_f1 to MIU1
2640*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU1
2641*53ee8cc1Swenshuai.xi         }
2642*53ee8cc1Swenshuai.xi     }
2643*53ee8cc1Swenshuai.xi     else if(u8MIUSel==2)
2644*53ee8cc1Swenshuai.xi     {
2645*53ee8cc1Swenshuai.xi         ///SCM
2646*53ee8cc1Swenshuai.xi         if (IsEnableDualMode(MAIN_WINDOW))
2647*53ee8cc1Swenshuai.xi         {
2648*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_05_L, 0x0000, 0x0010);     // reg_miu_select_f2 to MIU1
2649*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_05_L, 0x0010, 0x0010);     // reg_miu_select_f2 to MIU1
2650*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK52_44_L, 0x0000, 0x4000);     // reg_miu_select_f1 to MIU1
2651*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK51_44_L, 0x4000, 0x4000);     // reg_miu_select_f1 to MIU1
2652*53ee8cc1Swenshuai.xi         }
2653*53ee8cc1Swenshuai.xi     }
2654*53ee8cc1Swenshuai.xi 
2655*53ee8cc1Swenshuai.xi     //SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK7F_10_L, 0x0, BIT(0) | BIT(1));
2656*53ee8cc1Swenshuai.xi #endif
2657*53ee8cc1Swenshuai.xi }
2658*53ee8cc1Swenshuai.xi 
Hal_SC_AdjustIpmWriteLimite(void * pInstance,MS_BOOL bIsLeft,MS_BOOL bNeedSwap,SCALER_WIN eWindow)2659*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_AdjustIpmWriteLimite(void *pInstance, MS_BOOL bIsLeft, MS_BOOL bNeedSwap, SCALER_WIN eWindow)
2660*53ee8cc1Swenshuai.xi {
2661*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2662*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2663*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2664*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2665*53ee8cc1Swenshuai.xi     MS_PHY u32WLimitBase = 0x00;
2666*53ee8cc1Swenshuai.xi     if ((psXCInstPri->u32DeviceID > 0) || (eWindow != MAIN_WINDOW))
2667*53ee8cc1Swenshuai.xi     {
2668*53ee8cc1Swenshuai.xi         return FALSE;
2669*53ee8cc1Swenshuai.xi     }
2670*53ee8cc1Swenshuai.xi 
2671*53ee8cc1Swenshuai.xi     if (bIsLeft == TRUE)
2672*53ee8cc1Swenshuai.xi     {
2673*53ee8cc1Swenshuai.xi         if (bNeedSwap == TRUE)
2674*53ee8cc1Swenshuai.xi         {
2675*53ee8cc1Swenshuai.xi             u32WLimitBase = ((pXCResourcePrivate->stdrvXC_Scaling._u32DNRBaseAddr0[eWindow] + pXCResourcePrivate->stdrvXC_Scaling._u32DNRBufSize[eWindow]) / BYTE_PER_WORD - 1)  | F2_WRITE_LIMIT_EN;;
2676*53ee8cc1Swenshuai.xi             MDrv_SC_set_dual_write_limit(pInstance, u32WLimitBase , eWindow);
2677*53ee8cc1Swenshuai.xi         }
2678*53ee8cc1Swenshuai.xi         else
2679*53ee8cc1Swenshuai.xi         {
2680*53ee8cc1Swenshuai.xi             u32WLimitBase = ((pXCResourcePrivate->stdrvXC_Scaling._u32DNRBaseAddr0[eWindow] + pXCResourcePrivate->stdrvXC_Scaling._u32DNRBufSize[eWindow]) / BYTE_PER_WORD - 1)  | F2_WRITE_LIMIT_EN;
2681*53ee8cc1Swenshuai.xi             MDrv_SC_set_write_limit(pInstance, u32WLimitBase , eWindow);
2682*53ee8cc1Swenshuai.xi         }
2683*53ee8cc1Swenshuai.xi     }
2684*53ee8cc1Swenshuai.xi     else
2685*53ee8cc1Swenshuai.xi     {
2686*53ee8cc1Swenshuai.xi         if (bNeedSwap == TRUE)
2687*53ee8cc1Swenshuai.xi         {
2688*53ee8cc1Swenshuai.xi             u32WLimitBase = ((pXCResourcePrivate->stdrvXC_Scaling._u32DualMiuDNRBaseAddr0[eWindow] + pXCResourcePrivate->stdrvXC_Scaling._u32DualMiuDNRBufSize[eWindow]) / BYTE_PER_WORD - 1) ;
2689*53ee8cc1Swenshuai.xi             MDrv_SC_set_write_limit(pInstance, u32WLimitBase , eWindow);
2690*53ee8cc1Swenshuai.xi         }
2691*53ee8cc1Swenshuai.xi         else
2692*53ee8cc1Swenshuai.xi         {
2693*53ee8cc1Swenshuai.xi             u32WLimitBase = ((pXCResourcePrivate->stdrvXC_Scaling._u32DualMiuDNRBaseAddr0[eWindow] + pXCResourcePrivate->stdrvXC_Scaling._u32DualMiuDNRBufSize[eWindow]) / BYTE_PER_WORD - 1) ;
2694*53ee8cc1Swenshuai.xi             MDrv_SC_set_dual_write_limit(pInstance, u32WLimitBase , eWindow);
2695*53ee8cc1Swenshuai.xi         }
2696*53ee8cc1Swenshuai.xi     }
2697*53ee8cc1Swenshuai.xi     return TRUE;
2698*53ee8cc1Swenshuai.xi }
2699*53ee8cc1Swenshuai.xi 
Hal_SC_set_dual_disable(void * pInstance)2700*53ee8cc1Swenshuai.xi void Hal_SC_set_dual_disable(void *pInstance)
2701*53ee8cc1Swenshuai.xi {
2702*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2703*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2704*53ee8cc1Swenshuai.xi 
2705*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_29_L, 0, BIT(15)); // reg_miu_select_f1 to MIU1
2706*53ee8cc1Swenshuai.xi }
2707*53ee8cc1Swenshuai.xi 
Hal_SC_get_dual_miusel(void * pInstance,SC_MIUSEL_t * stMIUSel)2708*53ee8cc1Swenshuai.xi void Hal_SC_get_dual_miusel(void *pInstance, SC_MIUSEL_t* stMIUSel)
2709*53ee8cc1Swenshuai.xi {
2710*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(0, REG_SC_BK52_05_L, BIT(4)))
2711*53ee8cc1Swenshuai.xi     {
2712*53ee8cc1Swenshuai.xi         stMIUSel->u8MainFBSel = 1;
2713*53ee8cc1Swenshuai.xi     }
2714*53ee8cc1Swenshuai.xi     else
2715*53ee8cc1Swenshuai.xi     {
2716*53ee8cc1Swenshuai.xi         if(SC_R2BYTEMSK(0, REG_SC_BK51_05_L, BIT(4)))
2717*53ee8cc1Swenshuai.xi         {
2718*53ee8cc1Swenshuai.xi             stMIUSel->u8MainFBSel = 2;
2719*53ee8cc1Swenshuai.xi         }
2720*53ee8cc1Swenshuai.xi         else
2721*53ee8cc1Swenshuai.xi         {
2722*53ee8cc1Swenshuai.xi             stMIUSel->u8MainFBSel = 0;
2723*53ee8cc1Swenshuai.xi         }
2724*53ee8cc1Swenshuai.xi     }
2725*53ee8cc1Swenshuai.xi 
2726*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(0, REG_SC_BK52_44_L, BIT(4)))
2727*53ee8cc1Swenshuai.xi     {
2728*53ee8cc1Swenshuai.xi         stMIUSel->u8SubFBSel = 1;
2729*53ee8cc1Swenshuai.xi     }
2730*53ee8cc1Swenshuai.xi     else
2731*53ee8cc1Swenshuai.xi     {
2732*53ee8cc1Swenshuai.xi         if(SC_R2BYTEMSK(0, REG_SC_BK51_44_L, BIT(4)))
2733*53ee8cc1Swenshuai.xi         {
2734*53ee8cc1Swenshuai.xi             stMIUSel->u8SubFBSel = 2;
2735*53ee8cc1Swenshuai.xi         }
2736*53ee8cc1Swenshuai.xi         else
2737*53ee8cc1Swenshuai.xi         {
2738*53ee8cc1Swenshuai.xi             stMIUSel->u8SubFBSel = 0;
2739*53ee8cc1Swenshuai.xi         }
2740*53ee8cc1Swenshuai.xi     }
2741*53ee8cc1Swenshuai.xi }
2742*53ee8cc1Swenshuai.xi 
Hal_SC_set_blsk(void * pInstance,MS_BOOL bEn)2743*53ee8cc1Swenshuai.xi void Hal_SC_set_blsk(void *pInstance, MS_BOOL bEn)
2744*53ee8cc1Swenshuai.xi {
2745*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2746*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2747*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_21_L, bEn ? BIT(12) : 0, BIT(12));
2748*53ee8cc1Swenshuai.xi }
2749*53ee8cc1Swenshuai.xi 
Hal_SC_set_blsk_burst(void * pInstance,MS_BOOL bEn)2750*53ee8cc1Swenshuai.xi void Hal_SC_set_blsk_burst(void *pInstance, MS_BOOL bEn)
2751*53ee8cc1Swenshuai.xi {
2752*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
2753*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_21_L, bEn ? BIT(12) : 0, BIT(12));
2754*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
2755*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
2756*53ee8cc1Swenshuai.xi }
2757*53ee8cc1Swenshuai.xi 
Hal_SC_set_main_black_screen_burst(void * pInstance,MS_BOOL bEn)2758*53ee8cc1Swenshuai.xi void Hal_SC_set_main_black_screen_burst(void *pInstance, MS_BOOL bEn)
2759*53ee8cc1Swenshuai.xi {
2760*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
2761*53ee8cc1Swenshuai.xi 
2762*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_19_L, bEn ? BIT(1) : 0, BIT(1));
2763*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
2764*53ee8cc1Swenshuai.xi 
2765*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
2766*53ee8cc1Swenshuai.xi }
2767*53ee8cc1Swenshuai.xi 
Hal_SC_set_main_sub_black_screen_burst(void * pInstance,MS_BOOL bEn)2768*53ee8cc1Swenshuai.xi void Hal_SC_set_main_sub_black_screen_burst(void *pInstance, MS_BOOL bEn)
2769*53ee8cc1Swenshuai.xi {
2770*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
2771*53ee8cc1Swenshuai.xi 
2772*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_19_L, bEn ? (BIT(5)|BIT(1)) : 0, (BIT(6)|BIT(5)|BIT(1)));
2773*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
2774*53ee8cc1Swenshuai.xi 
2775*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
2776*53ee8cc1Swenshuai.xi }
2777*53ee8cc1Swenshuai.xi 
Hal_SC_set_main_black_screen(void * pInstance,MS_BOOL bEn)2778*53ee8cc1Swenshuai.xi void Hal_SC_set_main_black_screen(void *pInstance, MS_BOOL bEn)
2779*53ee8cc1Swenshuai.xi {
2780*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2781*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2782*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, bEn ? BIT(1) : 0, BIT(1));
2783*53ee8cc1Swenshuai.xi }
2784*53ee8cc1Swenshuai.xi 
Hal_SC_set_main_sub_black_screen(void * pInstance,MS_BOOL bEn)2785*53ee8cc1Swenshuai.xi void Hal_SC_set_main_sub_black_screen(void *pInstance, MS_BOOL bEn)
2786*53ee8cc1Swenshuai.xi {
2787*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2788*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2789*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, bEn ? (BIT(5)|BIT(1)) : 0, (BIT(6)|BIT(5)|BIT(1)));
2790*53ee8cc1Swenshuai.xi }
2791*53ee8cc1Swenshuai.xi 
Hal_SC_set_sub_blue_screen_burst(void * pInstance,MS_BOOL bEn,MS_BOOL bBlue)2792*53ee8cc1Swenshuai.xi void Hal_SC_set_sub_blue_screen_burst(void *pInstance, MS_BOOL bEn, MS_BOOL bBlue)
2793*53ee8cc1Swenshuai.xi {
2794*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
2795*53ee8cc1Swenshuai.xi 
2796*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_19_L, bBlue ? BIT(6) : 0, BIT(6));
2797*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_19_L, bEn ? BIT(5) : 0, BIT(5));
2798*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
2799*53ee8cc1Swenshuai.xi 
2800*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
2801*53ee8cc1Swenshuai.xi }
2802*53ee8cc1Swenshuai.xi 
Hal_SC_set_sub_blue_screen(void * pInstance,MS_BOOL bEn,MS_BOOL bBlue)2803*53ee8cc1Swenshuai.xi void Hal_SC_set_sub_blue_screen(void *pInstance, MS_BOOL bEn, MS_BOOL bBlue)
2804*53ee8cc1Swenshuai.xi {
2805*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2806*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2807*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, bBlue ? BIT(6) : 0, BIT(6));
2808*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, bEn ? BIT(5) : 0, BIT(5));
2809*53ee8cc1Swenshuai.xi }
2810*53ee8cc1Swenshuai.xi 
Hal_SC_IP_Memory_Write_Request(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2811*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_IP_Memory_Write_Request(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2812*53ee8cc1Swenshuai.xi {
2813*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2814*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2815*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2816*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2817*53ee8cc1Swenshuai.xi     if(MAIN_WINDOW == eWindow)
2818*53ee8cc1Swenshuai.xi     {
2819*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, bEnable? 0 : BIT(0) , BIT(0));
2820*53ee8cc1Swenshuai.xi     }
2821*53ee8cc1Swenshuai.xi     else
2822*53ee8cc1Swenshuai.xi     {
2823*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, bEnable? 0 : BIT(0) , BIT(0));
2824*53ee8cc1Swenshuai.xi     }
2825*53ee8cc1Swenshuai.xi 
2826*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
2827*53ee8cc1Swenshuai.xi }
2828*53ee8cc1Swenshuai.xi 
Hal_SC_IP_Memory_Read_Request(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2829*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_IP_Memory_Read_Request(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2830*53ee8cc1Swenshuai.xi {
2831*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2832*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2833*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2834*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2835*53ee8cc1Swenshuai.xi     if(MAIN_WINDOW == eWindow)
2836*53ee8cc1Swenshuai.xi     {
2837*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, bEnable? 0 : BIT(14) , BIT(14));
2838*53ee8cc1Swenshuai.xi     }
2839*53ee8cc1Swenshuai.xi     else
2840*53ee8cc1Swenshuai.xi     {
2841*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_42_L, bEnable? 0 : BIT(14) , BIT(14));
2842*53ee8cc1Swenshuai.xi     }
2843*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
2844*53ee8cc1Swenshuai.xi }
2845*53ee8cc1Swenshuai.xi 
Hal_SC_OP_Memory_Write_Request(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2846*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_OP_Memory_Write_Request(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2847*53ee8cc1Swenshuai.xi {
2848*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2849*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2850*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_67_L, bEnable? 0 : BIT(1) , BIT(1));//This will stop OPW and OP memory write request
2851*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
2852*53ee8cc1Swenshuai.xi }
2853*53ee8cc1Swenshuai.xi 
Hal_SC_frcmw_Memory_Write_Request(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2854*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_frcmw_Memory_Write_Request(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2855*53ee8cc1Swenshuai.xi {
2856*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2857*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2858*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2859*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2860*53ee8cc1Swenshuai.xi     if(MAIN_WINDOW == eWindow)
2861*53ee8cc1Swenshuai.xi     {
2862*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_07_L, bEnable? 0 : BIT(0) , BIT(0));
2863*53ee8cc1Swenshuai.xi     }
2864*53ee8cc1Swenshuai.xi     else
2865*53ee8cc1Swenshuai.xi     {
2866*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_47_L, bEnable? 0 : BIT(0) , BIT(0));
2867*53ee8cc1Swenshuai.xi     }
2868*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
2869*53ee8cc1Swenshuai.xi }
2870*53ee8cc1Swenshuai.xi 
Hal_SC_frcmr_Memory_Read_Request(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2871*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_frcmr_Memory_Read_Request(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2872*53ee8cc1Swenshuai.xi {
2873*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
2874*53ee8cc1Swenshuai.xi }
2875*53ee8cc1Swenshuai.xi 
Hal_SC_disable_inputsource_burst(void * pInstance,MS_BOOL bDisable,SCALER_WIN eWindow)2876*53ee8cc1Swenshuai.xi void Hal_SC_disable_inputsource_burst(void *pInstance, MS_BOOL bDisable, SCALER_WIN eWindow)
2877*53ee8cc1Swenshuai.xi {
2878*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2879*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2880*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2881*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2882*53ee8cc1Swenshuai.xi 
2883*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
2884*53ee8cc1Swenshuai.xi 
2885*53ee8cc1Swenshuai.xi     // HW PIP architeucture
2886*53ee8cc1Swenshuai.xi     // Becasue BK3_02[8] and BK20_11[15] can not be enabled toghter,
2887*53ee8cc1Swenshuai.xi     // otherwise garbage will be showed,we need to use BK12_47[0] to instead.
2888*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
2889*53ee8cc1Swenshuai.xi     {
2890*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_02_L, (bDisable ? BIT(7):0), BIT(7));
2891*53ee8cc1Swenshuai.xi     }
2892*53ee8cc1Swenshuai.xi     else
2893*53ee8cc1Swenshuai.xi     {
2894*53ee8cc1Swenshuai.xi         //MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_02_L, (bDisable ? BIT(7):0), BIT(7));
2895*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_47_L, (bDisable ? BIT(0) : 0), BIT(0));
2896*53ee8cc1Swenshuai.xi         #if (HW_DESIGN_4K2K_VER == 4)
2897*53ee8cc1Swenshuai.xi             if ((psXCInstPri->u32DeviceID==0)
2898*53ee8cc1Swenshuai.xi                 && !(pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
2899*53ee8cc1Swenshuai.xi             {
2900*53ee8cc1Swenshuai.xi                  MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK32_47_L, (bDisable ? BIT(0) : 0), BIT(0));
2901*53ee8cc1Swenshuai.xi             }
2902*53ee8cc1Swenshuai.xi         #endif
2903*53ee8cc1Swenshuai.xi     }
2904*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
2905*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
2906*53ee8cc1Swenshuai.xi }
2907*53ee8cc1Swenshuai.xi 
Hal_SC_disable_inputsource(void * pInstance,MS_BOOL bDisable,SCALER_WIN eWindow)2908*53ee8cc1Swenshuai.xi void Hal_SC_disable_inputsource(void *pInstance, MS_BOOL bDisable, SCALER_WIN eWindow)
2909*53ee8cc1Swenshuai.xi {
2910*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2911*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2912*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
2913*53ee8cc1Swenshuai.xi     {
2914*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, (bDisable ? BIT(7):0), BIT(7));
2915*53ee8cc1Swenshuai.xi     }
2916*53ee8cc1Swenshuai.xi     else
2917*53ee8cc1Swenshuai.xi     {
2918*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_02_L, (bDisable ? BIT(7):0), BIT(7));
2919*53ee8cc1Swenshuai.xi     }
2920*53ee8cc1Swenshuai.xi }
2921*53ee8cc1Swenshuai.xi 
2922*53ee8cc1Swenshuai.xi 
Hal_SC_Is_InputSource_Disable(void * pInstance,SCALER_WIN eWindow)2923*53ee8cc1Swenshuai.xi MS_U16 Hal_SC_Is_InputSource_Disable(void *pInstance, SCALER_WIN eWindow)
2924*53ee8cc1Swenshuai.xi {
2925*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2926*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2927*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
2928*53ee8cc1Swenshuai.xi         return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L)&0x80);
2929*53ee8cc1Swenshuai.xi     else
2930*53ee8cc1Swenshuai.xi     {
2931*53ee8cc1Swenshuai.xi         if((SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L)&0x01) == 0)
2932*53ee8cc1Swenshuai.xi         {
2933*53ee8cc1Swenshuai.xi             return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_02_L)&0x80);
2934*53ee8cc1Swenshuai.xi         }
2935*53ee8cc1Swenshuai.xi         else
2936*53ee8cc1Swenshuai.xi         {
2937*53ee8cc1Swenshuai.xi             return TRUE;
2938*53ee8cc1Swenshuai.xi         }
2939*53ee8cc1Swenshuai.xi     }
2940*53ee8cc1Swenshuai.xi }
2941*53ee8cc1Swenshuai.xi 
2942*53ee8cc1Swenshuai.xi 
Hal_SC_set_nosignal_color(void * pInstance,MS_U8 u8Color,SCALER_WIN eWindow)2943*53ee8cc1Swenshuai.xi void Hal_SC_set_nosignal_color(void *pInstance, MS_U8 u8Color,SCALER_WIN eWindow)
2944*53ee8cc1Swenshuai.xi {
2945*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2946*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2947*53ee8cc1Swenshuai.xi     if (MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
2948*53ee8cc1Swenshuai.xi     {
2949*53ee8cc1Swenshuai.xi         _MLOAD_ENTRY(pInstance);
2950*53ee8cc1Swenshuai.xi         if ( eWindow == MAIN_WINDOW )
2951*53ee8cc1Swenshuai.xi         {
2952*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_24_L, u8Color, LBMASK);
2953*53ee8cc1Swenshuai.xi         }
2954*53ee8cc1Swenshuai.xi         else
2955*53ee8cc1Swenshuai.xi         {
2956*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_17_L, ((MS_U16)u8Color)<<8, HBMASK);
2957*53ee8cc1Swenshuai.xi         }
2958*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_Fire(pInstance, TRUE);
2959*53ee8cc1Swenshuai.xi         _MLOAD_RETURN(pInstance);
2960*53ee8cc1Swenshuai.xi     }
2961*53ee8cc1Swenshuai.xi     else
2962*53ee8cc1Swenshuai.xi     {
2963*53ee8cc1Swenshuai.xi         if ( eWindow == MAIN_WINDOW )
2964*53ee8cc1Swenshuai.xi         {
2965*53ee8cc1Swenshuai.xi #ifdef new_chakra
2966*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_24_L, u8Color, LBMASK);
2967*53ee8cc1Swenshuai.xi #else
2968*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_24_L, u8Color, LBMASK);
2969*53ee8cc1Swenshuai.xi #endif
2970*53ee8cc1Swenshuai.xi         }
2971*53ee8cc1Swenshuai.xi         else
2972*53ee8cc1Swenshuai.xi         {
2973*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_17_L, ((MS_U16)u8Color)<<8, HBMASK);
2974*53ee8cc1Swenshuai.xi         }
2975*53ee8cc1Swenshuai.xi     }
2976*53ee8cc1Swenshuai.xi }
2977*53ee8cc1Swenshuai.xi 
Hal_SC_set_fbl(void * pInstance,MS_BOOL bEn)2978*53ee8cc1Swenshuai.xi void Hal_SC_set_fbl(void *pInstance, MS_BOOL bEn)
2979*53ee8cc1Swenshuai.xi {
2980*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2981*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2982*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, (bEn ? BIT(7): 0), BIT(7));  //Enable/Disable FBL
2983*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, (bEn ? BIT(14):0), BIT(14)); //F2 force IP read request disable
2984*53ee8cc1Swenshuai.xi 
2985*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, (bEn ? 0x3:0), 0x3); //F2 IP read/write request disable
2986*53ee8cc1Swenshuai.xi }
2987*53ee8cc1Swenshuai.xi 
Hal_SC_get_fbl(void * pInstance)2988*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_get_fbl(void *pInstance)
2989*53ee8cc1Swenshuai.xi {
2990*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2991*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2992*53ee8cc1Swenshuai.xi     return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, BIT(7));  //Enable/Disable FBL
2993*53ee8cc1Swenshuai.xi }
2994*53ee8cc1Swenshuai.xi 
Hal_SC_set_freezeimg_burst(void * pInstance,MS_BOOL bEn,SCALER_WIN eWindow)2995*53ee8cc1Swenshuai.xi void Hal_SC_set_freezeimg_burst(void *pInstance, MS_BOOL bEn, SCALER_WIN eWindow)
2996*53ee8cc1Swenshuai.xi {
2997*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
2998*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
2999*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
3000*53ee8cc1Swenshuai.xi     {
3001*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_01_L, (bEn<<11), BIT(11));
3002*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK32_01_L, (bEn<<11), BIT(11));
3003*53ee8cc1Swenshuai.xi     }
3004*53ee8cc1Swenshuai.xi     else
3005*53ee8cc1Swenshuai.xi     {
3006*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_41_L, (bEn<<11), BIT(11));
3007*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK32_41_L, (bEn<<11), BIT(11));
3008*53ee8cc1Swenshuai.xi     }
3009*53ee8cc1Swenshuai.xi #else
3010*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
3011*53ee8cc1Swenshuai.xi     {
3012*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_01_L, (bEn<<11), BIT(11));
3013*53ee8cc1Swenshuai.xi     }
3014*53ee8cc1Swenshuai.xi     else
3015*53ee8cc1Swenshuai.xi     {
3016*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_41_L, (bEn<<11), BIT(11));
3017*53ee8cc1Swenshuai.xi     }
3018*53ee8cc1Swenshuai.xi #endif
3019*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
3020*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
3021*53ee8cc1Swenshuai.xi }
3022*53ee8cc1Swenshuai.xi 
3023*53ee8cc1Swenshuai.xi 
Hal_SC_set_freezeimg(void * pInstance,MS_BOOL bEn,SCALER_WIN eWindow)3024*53ee8cc1Swenshuai.xi void Hal_SC_set_freezeimg(void *pInstance, MS_BOOL bEn, SCALER_WIN eWindow)
3025*53ee8cc1Swenshuai.xi {
3026*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3027*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3028*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
3029*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
3030*53ee8cc1Swenshuai.xi     {
3031*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, (bEn<<11), BIT(11));
3032*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_01_L, (bEn<<11), BIT(11));
3033*53ee8cc1Swenshuai.xi     }
3034*53ee8cc1Swenshuai.xi     else
3035*53ee8cc1Swenshuai.xi     {
3036*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_41_L, (bEn<<11), BIT(11));
3037*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_41_L, (bEn<<11), BIT(11));
3038*53ee8cc1Swenshuai.xi     }
3039*53ee8cc1Swenshuai.xi #else
3040*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
3041*53ee8cc1Swenshuai.xi     {
3042*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, (bEn<<11), BIT(11));
3043*53ee8cc1Swenshuai.xi     }
3044*53ee8cc1Swenshuai.xi     else
3045*53ee8cc1Swenshuai.xi     {
3046*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_41_L, (bEn<<11), BIT(11));
3047*53ee8cc1Swenshuai.xi     }
3048*53ee8cc1Swenshuai.xi #endif
3049*53ee8cc1Swenshuai.xi }
3050*53ee8cc1Swenshuai.xi 
Hal_SC_set_frcm_freezeimg(void * pInstance,MS_BOOL bEn,SCALER_WIN eWindow)3051*53ee8cc1Swenshuai.xi void Hal_SC_set_frcm_freezeimg(void *pInstance, MS_BOOL bEn, SCALER_WIN eWindow)
3052*53ee8cc1Swenshuai.xi {
3053*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3054*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3055*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
3056*53ee8cc1Swenshuai.xi     {
3057*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_01_L, (bEn<<11), BIT(11));
3058*53ee8cc1Swenshuai.xi     }
3059*53ee8cc1Swenshuai.xi     else
3060*53ee8cc1Swenshuai.xi     {
3061*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_41_L, (bEn<<11), BIT(11));
3062*53ee8cc1Swenshuai.xi     }
3063*53ee8cc1Swenshuai.xi }
3064*53ee8cc1Swenshuai.xi 
Hal_SC_get_freezeimg(void * pInstance,SCALER_WIN eWindow)3065*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_get_freezeimg(void *pInstance, SCALER_WIN eWindow)
3066*53ee8cc1Swenshuai.xi {
3067*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3068*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3069*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
3070*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
3071*53ee8cc1Swenshuai.xi     {
3072*53ee8cc1Swenshuai.xi         return (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_01_L, BIT(11)) ? TRUE: FALSE);
3073*53ee8cc1Swenshuai.xi     }
3074*53ee8cc1Swenshuai.xi     else
3075*53ee8cc1Swenshuai.xi     {
3076*53ee8cc1Swenshuai.xi         return (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_41_L, BIT(11)) ? TRUE: FALSE);
3077*53ee8cc1Swenshuai.xi     }
3078*53ee8cc1Swenshuai.xi #else
3079*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW )
3080*53ee8cc1Swenshuai.xi     {
3081*53ee8cc1Swenshuai.xi         return (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, BIT(11)) ? TRUE: FALSE);
3082*53ee8cc1Swenshuai.xi     }
3083*53ee8cc1Swenshuai.xi     else
3084*53ee8cc1Swenshuai.xi     {
3085*53ee8cc1Swenshuai.xi         return (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_41_L, BIT(11)) ? TRUE: FALSE);
3086*53ee8cc1Swenshuai.xi     }
3087*53ee8cc1Swenshuai.xi #endif
3088*53ee8cc1Swenshuai.xi }
3089*53ee8cc1Swenshuai.xi 
Hal_SC_exwith_miuprotect_swreset(void * pInstance,MS_U8 x)3090*53ee8cc1Swenshuai.xi void Hal_SC_exwith_miuprotect_swreset(void *pInstance, MS_U8 x)
3091*53ee8cc1Swenshuai.xi {
3092*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3093*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3094*53ee8cc1Swenshuai.xi     //reset IP1F2
3095*53ee8cc1Swenshuai.xi     //select pattern generator source
3096*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, x, x);
3097*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(2);
3098*53ee8cc1Swenshuai.xi 
3099*53ee8cc1Swenshuai.xi     //select pattern generator source
3100*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0, x);
3101*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(2);
3102*53ee8cc1Swenshuai.xi }
3103*53ee8cc1Swenshuai.xi 
Hal_SC_ip_Init_for_internal_timing(void * pInstance,XC_Internal_TimingType timingtype,SCALER_WIN eWindow)3104*53ee8cc1Swenshuai.xi void Hal_SC_ip_Init_for_internal_timing(void *pInstance, XC_Internal_TimingType timingtype, SCALER_WIN eWindow)
3105*53ee8cc1Swenshuai.xi {
3106*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3107*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3108*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
3109*53ee8cc1Swenshuai.xi     {
3110*53ee8cc1Swenshuai.xi         if(Hal_SC_ip_get_IPAutoNoSignal(pInstance, eWindow)) Hal_SC_ip_set_IPAutoNoSignal(pInstance, DISABLE, eWindow);
3111*53ee8cc1Swenshuai.xi 
3112*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_02_L, 0x104) ;  //Video source
3113*53ee8cc1Swenshuai.xi         Hal_SC_exwith_miuprotect_swreset(pInstance, REST_IP_F1);  //when source is changed, we must reset it to make it work
3114*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, 0x890);
3115*53ee8cc1Swenshuai.xi 
3116*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, 0x01, 0x03);   //force progressive mode
3117*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, BIT(15), BIT(15));   //auto gain 10bit
3118*53ee8cc1Swenshuai.xi 
3119*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, 0x020);  //capture V start
3120*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, 0x50) ;  //capture H start
3121*53ee8cc1Swenshuai.xi 
3122*53ee8cc1Swenshuai.xi         switch (timingtype)
3123*53ee8cc1Swenshuai.xi         {
3124*53ee8cc1Swenshuai.xi             case E_XC_480P:
3125*53ee8cc1Swenshuai.xi             default:
3126*53ee8cc1Swenshuai.xi 
3127*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_06_L, 0x1c0) ; // V size
3128*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, 0x280) ; // h size
3129*53ee8cc1Swenshuai.xi 
3130*53ee8cc1Swenshuai.xi                 break;
3131*53ee8cc1Swenshuai.xi             case E_XC_720P:
3132*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_06_L, 0x290) ; // V size (720 - 64) = 656 = 0x290
3133*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, 0x460) ; // h size (1280 - 160) = 1120 = 0x460
3134*53ee8cc1Swenshuai.xi 
3135*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4E_L, 0x0800); //DNR Offset
3136*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4F_L, 0x0460); //DNR Fetch
3137*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_56_L, 0x0800); //OPM Offsest
3138*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_57_L, 0x0460); //OPM Fetch
3139*53ee8cc1Swenshuai.xi 
3140*53ee8cc1Swenshuai.xi                 break;
3141*53ee8cc1Swenshuai.xi             case E_XC_1080P:
3142*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_06_L, 0x3F8) ; // V size (1080 - 64) = 1016 = 0x3F8
3143*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, 0x6E0) ; // h size (1920 - 160) = 1760 = 0x6E0
3144*53ee8cc1Swenshuai.xi 
3145*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4E_L, 0x0800); //DNR Offset
3146*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_4F_L, 0x06E0); //DNR Fetch
3147*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_56_L, 0x0800); //OPM Offsest
3148*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_57_L, 0x06E0); //OPM Fetch
3149*53ee8cc1Swenshuai.xi                 break;
3150*53ee8cc1Swenshuai.xi         }
3151*53ee8cc1Swenshuai.xi     }
3152*53ee8cc1Swenshuai.xi     else
3153*53ee8cc1Swenshuai.xi     {
3154*53ee8cc1Swenshuai.xi         if(Hal_SC_ip_get_IPAutoNoSignal(pInstance, eWindow)) Hal_SC_ip_set_IPAutoNoSignal(pInstance, DISABLE, eWindow);
3155*53ee8cc1Swenshuai.xi 
3156*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, 0x104) ;  //Video source
3157*53ee8cc1Swenshuai.xi         Hal_SC_exwith_miuprotect_swreset(pInstance, REST_IP_F2);  //when source is changed, we must reset it to make it work
3158*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, 0x890);
3159*53ee8cc1Swenshuai.xi 
3160*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, 0x01, 0x03);   //force progressive mode
3161*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, BIT(15), BIT(15));   //auto gain 10bit
3162*53ee8cc1Swenshuai.xi 
3163*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, 0x020);  //capture V start
3164*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, 0x50) ;  //capture H start
3165*53ee8cc1Swenshuai.xi 
3166*53ee8cc1Swenshuai.xi         switch (timingtype)
3167*53ee8cc1Swenshuai.xi         {
3168*53ee8cc1Swenshuai.xi             case E_XC_480P:
3169*53ee8cc1Swenshuai.xi             default:
3170*53ee8cc1Swenshuai.xi 
3171*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_06_L, 0x1c0) ; // V size
3172*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, 0x280) ; // h size
3173*53ee8cc1Swenshuai.xi 
3174*53ee8cc1Swenshuai.xi                 break;
3175*53ee8cc1Swenshuai.xi             case E_XC_720P:
3176*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_06_L, 0x290) ; // V size (720 - 64) = 656 = 0x290
3177*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, 0x460) ; // h size (1280 - 160) = 1120 = 0x460
3178*53ee8cc1Swenshuai.xi 
3179*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0E_L, 0x0800); //DNR Offset
3180*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0F_L, 0x0460); //DNR Fetch
3181*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_16_L, 0x0800); //OPM Offsest
3182*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_17_L, 0x0460); //OPM Fetch
3183*53ee8cc1Swenshuai.xi 
3184*53ee8cc1Swenshuai.xi                 break;
3185*53ee8cc1Swenshuai.xi             case E_XC_1080P:
3186*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_06_L, 0x3F8) ; // V size (1080 - 64) = 1016 = 0x3F8
3187*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, 0x6E0) ; // h size (1920 - 160) = 1760 = 0x6E0
3188*53ee8cc1Swenshuai.xi 
3189*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0E_L, 0x0800); //DNR Offset
3190*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0F_L, 0x06E0); //DNR Fetch
3191*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_16_L, 0x0800); //OPM Offsest
3192*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_17_L, 0x06E0); //OPM Fetch
3193*53ee8cc1Swenshuai.xi                 break;
3194*53ee8cc1Swenshuai.xi         }
3195*53ee8cc1Swenshuai.xi 
3196*53ee8cc1Swenshuai.xi     }
3197*53ee8cc1Swenshuai.xi }
3198*53ee8cc1Swenshuai.xi 
Hal_SC_rgb_average_info(void * pInstance,MS_U16 u16mask,SCALER_WIN eWindow)3199*53ee8cc1Swenshuai.xi MS_U16 Hal_SC_rgb_average_info(void *pInstance, MS_U16 u16mask, SCALER_WIN eWindow)
3200*53ee8cc1Swenshuai.xi {
3201*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3202*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3203*53ee8cc1Swenshuai.xi     MS_U16 u16value;
3204*53ee8cc1Swenshuai.xi 
3205*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3206*53ee8cc1Swenshuai.xi     {
3207*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0F_L, u16mask, 0x0F);
3208*53ee8cc1Swenshuai.xi         u16value=SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_11_L);
3209*53ee8cc1Swenshuai.xi     }
3210*53ee8cc1Swenshuai.xi     else
3211*53ee8cc1Swenshuai.xi     {
3212*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0F_L, u16mask, 0x0F);
3213*53ee8cc1Swenshuai.xi         u16value=SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_11_L);
3214*53ee8cc1Swenshuai.xi     }
3215*53ee8cc1Swenshuai.xi 
3216*53ee8cc1Swenshuai.xi     return u16value;
3217*53ee8cc1Swenshuai.xi }
3218*53ee8cc1Swenshuai.xi 
3219*53ee8cc1Swenshuai.xi 
Hal_SC_autogain_enable(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)3220*53ee8cc1Swenshuai.xi void Hal_SC_autogain_enable(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
3221*53ee8cc1Swenshuai.xi {
3222*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3223*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3224*53ee8cc1Swenshuai.xi     //auto gain enable
3225*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3226*53ee8cc1Swenshuai.xi     {
3227*53ee8cc1Swenshuai.xi         if(bEnable)
3228*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_SC_BK01_0E_L, 0x11, 0x11);
3229*53ee8cc1Swenshuai.xi         else
3230*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_SC_BK01_0E_L, 0x00, 0x11);
3231*53ee8cc1Swenshuai.xi     }
3232*53ee8cc1Swenshuai.xi     else
3233*53ee8cc1Swenshuai.xi     {
3234*53ee8cc1Swenshuai.xi         if(bEnable)
3235*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_SC_BK03_0E_L, 0x11, 0x11);
3236*53ee8cc1Swenshuai.xi         else
3237*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_SC_BK03_0E_L, 0x00, 0x11);
3238*53ee8cc1Swenshuai.xi     }
3239*53ee8cc1Swenshuai.xi }
3240*53ee8cc1Swenshuai.xi 
Hal_SC_autogain_status(void * pInstance,SCALER_WIN eWindow)3241*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_autogain_status(void *pInstance, SCALER_WIN eWindow)
3242*53ee8cc1Swenshuai.xi {
3243*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3244*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3245*53ee8cc1Swenshuai.xi     MS_BOOL bvalue;
3246*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3247*53ee8cc1Swenshuai.xi         bvalue = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, BIT(1));
3248*53ee8cc1Swenshuai.xi     else
3249*53ee8cc1Swenshuai.xi         bvalue = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, BIT(1));
3250*53ee8cc1Swenshuai.xi 
3251*53ee8cc1Swenshuai.xi     return bvalue;
3252*53ee8cc1Swenshuai.xi 
3253*53ee8cc1Swenshuai.xi }
3254*53ee8cc1Swenshuai.xi 
Hal_SC_set_mirror(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)3255*53ee8cc1Swenshuai.xi void Hal_SC_set_mirror(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
3256*53ee8cc1Swenshuai.xi {
3257*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3258*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3259*53ee8cc1Swenshuai.xi     MS_U32 u32NoSigReg, u32MirrorReg;
3260*53ee8cc1Swenshuai.xi 
3261*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3262*53ee8cc1Swenshuai.xi     {
3263*53ee8cc1Swenshuai.xi         u32NoSigReg = REG_SC_BK01_02_L;
3264*53ee8cc1Swenshuai.xi         u32MirrorReg = REG_SC_BK12_03_L;
3265*53ee8cc1Swenshuai.xi     }
3266*53ee8cc1Swenshuai.xi     else
3267*53ee8cc1Swenshuai.xi     {
3268*53ee8cc1Swenshuai.xi         u32NoSigReg = REG_SC_BK03_02_L;
3269*53ee8cc1Swenshuai.xi         u32MirrorReg = REG_SC_BK12_43_L;
3270*53ee8cc1Swenshuai.xi 
3271*53ee8cc1Swenshuai.xi     }
3272*53ee8cc1Swenshuai.xi 
3273*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32NoSigReg, BIT(7), BIT(7));
3274*53ee8cc1Swenshuai.xi 
3275*53ee8cc1Swenshuai.xi     if( bEnable )
3276*53ee8cc1Swenshuai.xi     {
3277*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32MirrorReg, (BIT(12)|BIT(13)), (BIT(12)|BIT(13)));
3278*53ee8cc1Swenshuai.xi     }
3279*53ee8cc1Swenshuai.xi     else
3280*53ee8cc1Swenshuai.xi     {
3281*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32MirrorReg, 0x0, (BIT(12)|BIT(13)));
3282*53ee8cc1Swenshuai.xi     }
3283*53ee8cc1Swenshuai.xi }
3284*53ee8cc1Swenshuai.xi 
Hal_SC_set_frcm_mirror(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)3285*53ee8cc1Swenshuai.xi void Hal_SC_set_frcm_mirror(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
3286*53ee8cc1Swenshuai.xi {
3287*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3288*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3289*53ee8cc1Swenshuai.xi     MS_U32 u32NoSigReg = 0, u32MirrorReg = 0;
3290*53ee8cc1Swenshuai.xi 
3291*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3292*53ee8cc1Swenshuai.xi     {
3293*53ee8cc1Swenshuai.xi         u32NoSigReg = REG_SC_BK01_02_L;
3294*53ee8cc1Swenshuai.xi         u32MirrorReg = REG_SC_BK32_03_L;
3295*53ee8cc1Swenshuai.xi     }
3296*53ee8cc1Swenshuai.xi     else
3297*53ee8cc1Swenshuai.xi     {
3298*53ee8cc1Swenshuai.xi         u32NoSigReg = REG_SC_BK03_02_L;
3299*53ee8cc1Swenshuai.xi         u32MirrorReg = REG_SC_BK32_43_L;
3300*53ee8cc1Swenshuai.xi     }
3301*53ee8cc1Swenshuai.xi 
3302*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32NoSigReg, BIT(7), BIT(7));
3303*53ee8cc1Swenshuai.xi 
3304*53ee8cc1Swenshuai.xi     if( bEnable )
3305*53ee8cc1Swenshuai.xi     {
3306*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32MirrorReg, (BIT(12)|BIT(13)), (BIT(12)|BIT(13)));
3307*53ee8cc1Swenshuai.xi     }
3308*53ee8cc1Swenshuai.xi     else
3309*53ee8cc1Swenshuai.xi     {
3310*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, u32MirrorReg, 0x0, (BIT(12)|BIT(13)));
3311*53ee8cc1Swenshuai.xi     }
3312*53ee8cc1Swenshuai.xi }
3313*53ee8cc1Swenshuai.xi 
Hal_SC_GetAVDStatus(void)3314*53ee8cc1Swenshuai.xi MS_U16 Hal_SC_GetAVDStatus(void)
3315*53ee8cc1Swenshuai.xi {
3316*53ee8cc1Swenshuai.xi     return MDrv_Read2Byte(L_BK_AFEC(0x66));
3317*53ee8cc1Swenshuai.xi }
3318*53ee8cc1Swenshuai.xi 
Hal_SC_set_rep_window(void * pInstance,MS_BOOL bEnable,MS_U16 x,MS_U16 y,MS_U16 w,MS_U16 h,MS_U8 u8Color)3319*53ee8cc1Swenshuai.xi void Hal_SC_set_rep_window(void *pInstance, MS_BOOL bEnable,MS_U16 x,MS_U16 y,MS_U16 w,MS_U16 h,MS_U8 u8Color)
3320*53ee8cc1Swenshuai.xi {
3321*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3322*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3323*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, bEnable?BIT(9):0x0, BIT(9));
3324*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_42_L,x);
3325*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_43_L,x + w);
3326*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_44_L,y);
3327*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_45_L,y + h);
3328*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, (~u8Color)<<8, 0xFF00);
3329*53ee8cc1Swenshuai.xi }
3330*53ee8cc1Swenshuai.xi 
3331*53ee8cc1Swenshuai.xi //--------------------------------------------------
3332*53ee8cc1Swenshuai.xi //update display window registers with input window
3333*53ee8cc1Swenshuai.xi //IN:
3334*53ee8cc1Swenshuai.xi //   pdspwin: input window info
3335*53ee8cc1Swenshuai.xi //--------------------------------------------------
Hal_SC_set_disp_window(void * pInstance,SCALER_WIN eWindow,MS_WINDOW_TYPE * pdspwin)3336*53ee8cc1Swenshuai.xi void Hal_SC_set_disp_window(void *pInstance, SCALER_WIN eWindow, MS_WINDOW_TYPE *pdspwin)
3337*53ee8cc1Swenshuai.xi {
3338*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3339*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3340*53ee8cc1Swenshuai.xi     if (MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
3341*53ee8cc1Swenshuai.xi     {
3342*53ee8cc1Swenshuai.xi         _MLOAD_ENTRY(pInstance);
3343*53ee8cc1Swenshuai.xi 
3344*53ee8cc1Swenshuai.xi         if(eWindow == MAIN_WINDOW)
3345*53ee8cc1Swenshuai.xi         {
3346*53ee8cc1Swenshuai.xi             //Display window
3347*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_08_L, pdspwin->x,0x1FFF);                  // Display H start
3348*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_09_L, pdspwin->x+pdspwin->width-1,0x1FFF);   // Display H end
3349*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0A_L, pdspwin->y,0xFFF);                  // Display V start
3350*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0B_L, pdspwin->y+pdspwin->height-1,0xFFF);  // Display V end
3351*53ee8cc1Swenshuai.xi         }
3352*53ee8cc1Swenshuai.xi         else
3353*53ee8cc1Swenshuai.xi         {
3354*53ee8cc1Swenshuai.xi             //Display window
3355*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_07_L, pdspwin->x,0xFFF);                  // Display H start
3356*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_08_L, pdspwin->x+pdspwin->width-1,0xFFF);   // Display H end
3357*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_09_L, pdspwin->y,0xFFF);                  // Display V start
3358*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_0A_L, pdspwin->y+pdspwin->height-1,0xFFF);  // Display V end
3359*53ee8cc1Swenshuai.xi         }
3360*53ee8cc1Swenshuai.xi 
3361*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_Fire(pInstance, TRUE);
3362*53ee8cc1Swenshuai.xi         _MLOAD_RETURN(pInstance);
3363*53ee8cc1Swenshuai.xi     }
3364*53ee8cc1Swenshuai.xi     else
3365*53ee8cc1Swenshuai.xi     {
3366*53ee8cc1Swenshuai.xi         if(eWindow == MAIN_WINDOW)
3367*53ee8cc1Swenshuai.xi         {
3368*53ee8cc1Swenshuai.xi             //Display window
3369*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_08_L, pdspwin->x);                  // Display H start
3370*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_09_L, pdspwin->x+pdspwin->width-1);   // Display H end
3371*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0A_L, pdspwin->y);                  // Display V start
3372*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0B_L, pdspwin->y+pdspwin->height-1);  // Display V end
3373*53ee8cc1Swenshuai.xi         }
3374*53ee8cc1Swenshuai.xi         else
3375*53ee8cc1Swenshuai.xi         {
3376*53ee8cc1Swenshuai.xi             //Display window
3377*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_07_L, pdspwin->x);                  // Display H start
3378*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_08_L, pdspwin->x+pdspwin->width-1);   // Display H end
3379*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_09_L, pdspwin->y);                  // Display V start
3380*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_0A_L, pdspwin->y+pdspwin->height-1);  // Display V end
3381*53ee8cc1Swenshuai.xi         }
3382*53ee8cc1Swenshuai.xi     }
3383*53ee8cc1Swenshuai.xi }
3384*53ee8cc1Swenshuai.xi 
3385*53ee8cc1Swenshuai.xi //--------------------------------------------------
3386*53ee8cc1Swenshuai.xi //get display window registers setting
3387*53ee8cc1Swenshuai.xi //OUT:
3388*53ee8cc1Swenshuai.xi //   pdspwin: Pointer for ouput disp window register
3389*53ee8cc1Swenshuai.xi //--------------------------------------------------
Hal_SC_get_disp_window(void * pInstance,SCALER_WIN eWindow,MS_WINDOW_TYPE * pdspwin)3390*53ee8cc1Swenshuai.xi void Hal_SC_get_disp_window(void *pInstance, SCALER_WIN eWindow, MS_WINDOW_TYPE *pdspwin)
3391*53ee8cc1Swenshuai.xi {
3392*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3393*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3394*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3395*53ee8cc1Swenshuai.xi     {
3396*53ee8cc1Swenshuai.xi         //Display window
3397*53ee8cc1Swenshuai.xi         pdspwin->x = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_08_L);                   // Display H start
3398*53ee8cc1Swenshuai.xi         pdspwin->width  = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_09_L) - pdspwin->x + 1; // Display H end
3399*53ee8cc1Swenshuai.xi         pdspwin->y = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0A_L);                   // Display V start
3400*53ee8cc1Swenshuai.xi         pdspwin->height = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0B_L) - pdspwin->y + 1; // Display V end
3401*53ee8cc1Swenshuai.xi     }
3402*53ee8cc1Swenshuai.xi     else
3403*53ee8cc1Swenshuai.xi     {
3404*53ee8cc1Swenshuai.xi         //Display window
3405*53ee8cc1Swenshuai.xi         pdspwin->x = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_07_L);                   // Display H start
3406*53ee8cc1Swenshuai.xi         pdspwin->width  = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_08_L) - pdspwin->x + 1; // Display H end
3407*53ee8cc1Swenshuai.xi         pdspwin->y = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_09_L);                   // Display V start
3408*53ee8cc1Swenshuai.xi         pdspwin->height = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_0A_L) - pdspwin->y + 1; // Display V end
3409*53ee8cc1Swenshuai.xi     }
3410*53ee8cc1Swenshuai.xi }
3411*53ee8cc1Swenshuai.xi 
Hal_SC_set_Fclk(void * pInstance,EN_SET_FCLK_CASE enCase)3412*53ee8cc1Swenshuai.xi void Hal_SC_set_Fclk(void *pInstance, EN_SET_FCLK_CASE enCase)
3413*53ee8cc1Swenshuai.xi {
3414*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3415*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3416*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
3417*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
3418*53ee8cc1Swenshuai.xi 
3419*53ee8cc1Swenshuai.xi     if (enCase == EN_FCLK_FBL)
3420*53ee8cc1Swenshuai.xi     {
3421*53ee8cc1Swenshuai.xi         if(E_XC_DEVICE0 == psXCInstPri->u32DeviceID)
3422*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(REG_CKG_FCLK, CKG_FCLK_345MHZ, CKG_FCLK_MASK);
3423*53ee8cc1Swenshuai.xi         else
3424*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(REG_CKG_S2_FCLK, CKG_S2_FCLK_345MHZ, CKG_S2_FCLK_MASK);
3425*53ee8cc1Swenshuai.xi     }
3426*53ee8cc1Swenshuai.xi     else
3427*53ee8cc1Swenshuai.xi     {
3428*53ee8cc1Swenshuai.xi         if(E_XC_DEVICE0 == psXCInstPri->u32DeviceID)
3429*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(REG_CKG_FCLK, CKG_FCLK_DEFAULT, CKG_FCLK_MASK);
3430*53ee8cc1Swenshuai.xi         else
3431*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(REG_CKG_S2_FCLK, CKG_S2_FCLK_320MHZ, CKG_S2_FCLK_MASK);
3432*53ee8cc1Swenshuai.xi     }
3433*53ee8cc1Swenshuai.xi }
3434*53ee8cc1Swenshuai.xi 
Hal_SC_get_framebuf_Info(void * pInstance,SC_FRAMEBUF_INFO_t * pFrameBufInfo,SCALER_WIN eWindow)3435*53ee8cc1Swenshuai.xi void Hal_SC_get_framebuf_Info(void *pInstance, SC_FRAMEBUF_INFO_t *pFrameBufInfo, SCALER_WIN eWindow)
3436*53ee8cc1Swenshuai.xi {
3437*53ee8cc1Swenshuai.xi     MS_U8 u8Reg;
3438*53ee8cc1Swenshuai.xi 
3439*53ee8cc1Swenshuai.xi     if (!pFrameBufInfo) return;
3440*53ee8cc1Swenshuai.xi 
3441*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3442*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3443*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
3444*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
3445*53ee8cc1Swenshuai.xi 
3446*53ee8cc1Swenshuai.xi     pFrameBufInfo->u32IPMBase0 = ((SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_09_L:REG_SC_BK12_49_L, 0x00FF)<<16) |
3447*53ee8cc1Swenshuai.xi                                     (SC_R2BYTE(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_08_L:REG_SC_BK12_48_L))) * BYTE_PER_WORD;
3448*53ee8cc1Swenshuai.xi     pFrameBufInfo->u32IPMBase1 = ((SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_0B_L:REG_SC_BK12_4B_L, 0x00FF)<<16) |
3449*53ee8cc1Swenshuai.xi                                     (SC_R2BYTE(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_0A_L:REG_SC_BK12_4A_L))) * BYTE_PER_WORD;
3450*53ee8cc1Swenshuai.xi     pFrameBufInfo->u32IPMBase2 = ((SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_0D_L:REG_SC_BK12_4D_L, 0x00FF)<<16) |
3451*53ee8cc1Swenshuai.xi                                     (SC_R2BYTE(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_0C_L:REG_SC_BK12_4C_L))) * BYTE_PER_WORD;
3452*53ee8cc1Swenshuai.xi     pFrameBufInfo->u16IPMOffset = SC_R2BYTE(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_0E_L:REG_SC_BK12_4E_L);
3453*53ee8cc1Swenshuai.xi     pFrameBufInfo->u16IPMFetch = SC_R2BYTE(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_0F_L:REG_SC_BK12_4F_L);
3454*53ee8cc1Swenshuai.xi     pFrameBufInfo->u16VLength = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_18_L:REG_SC_BK12_58_L, 0x0FFF);
3455*53ee8cc1Swenshuai.xi     pFrameBufInfo->bLinearAddrMode = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_03_L:REG_SC_BK12_43_L, BIT(4));
3456*53ee8cc1Swenshuai.xi     pFrameBufInfo->bYCSeparate = ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_02_L:REG_SC_BK12_42_L, BIT(10)) )?TRUE:FALSE;
3457*53ee8cc1Swenshuai.xi     pFrameBufInfo->u32WriteLimitBase = SC_R4BYTE(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK0D_42_L:REG_SC_BK0D_44_L);
3458*53ee8cc1Swenshuai.xi     // frcm write base address limit
3459*53ee8cc1Swenshuai.xi     #if 0
3460*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
3461*53ee8cc1Swenshuai.xi     if ((psXCInstPri->u32DeviceID==0)
3462*53ee8cc1Swenshuai.xi        && !(pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
3463*53ee8cc1Swenshuai.xi     {
3464*53ee8cc1Swenshuai.xi         pFrameBufInfo->u32FRCMWriteLimitBase = SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_1A_L);
3465*53ee8cc1Swenshuai.xi     }
3466*53ee8cc1Swenshuai.xi #endif
3467*53ee8cc1Swenshuai.xi     #endif
3468*53ee8cc1Swenshuai.xi     pFrameBufInfo->u8BitPerPixel = 24;//default
3469*53ee8cc1Swenshuai.xi 
3470*53ee8cc1Swenshuai.xi     u8Reg = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_01_L:REG_SC_BK12_41_L, 0x00FF);
3471*53ee8cc1Swenshuai.xi     if (u8Reg & 0x30)
3472*53ee8cc1Swenshuai.xi     {//444
3473*53ee8cc1Swenshuai.xi         pFrameBufInfo->bMemFormat422 = FALSE;
3474*53ee8cc1Swenshuai.xi         if (u8Reg & 0x10)
3475*53ee8cc1Swenshuai.xi         { // 444 8BIT
3476*53ee8cc1Swenshuai.xi             pFrameBufInfo->u8BitPerPixel = 24;
3477*53ee8cc1Swenshuai.xi         }
3478*53ee8cc1Swenshuai.xi         else
3479*53ee8cc1Swenshuai.xi         { // 444 10BIT
3480*53ee8cc1Swenshuai.xi             pFrameBufInfo->u8BitPerPixel = 32;
3481*53ee8cc1Swenshuai.xi         }
3482*53ee8cc1Swenshuai.xi         pFrameBufInfo->bInterlace = FALSE;
3483*53ee8cc1Swenshuai.xi     }
3484*53ee8cc1Swenshuai.xi     else
3485*53ee8cc1Swenshuai.xi     {//422
3486*53ee8cc1Swenshuai.xi         pFrameBufInfo->bMemFormat422 = TRUE;
3487*53ee8cc1Swenshuai.xi 
3488*53ee8cc1Swenshuai.xi         if((BIT(8)|BIT(9)) == SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_02_L:REG_SC_BK12_42_L, BIT(8)|BIT(9))) //user mode
3489*53ee8cc1Swenshuai.xi         {
3490*53ee8cc1Swenshuai.xi             MS_U8 u8MemFmt = SC_R2BYTE(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_02_L:REG_SC_BK12_42_L) & 0x0F;
3491*53ee8cc1Swenshuai.xi             if((4 == u8MemFmt) || (5 == u8MemFmt) || (6 == u8MemFmt))
3492*53ee8cc1Swenshuai.xi             {
3493*53ee8cc1Swenshuai.xi                 pFrameBufInfo->u8BitPerPixel = 20;
3494*53ee8cc1Swenshuai.xi             }
3495*53ee8cc1Swenshuai.xi             else if((8 == u8MemFmt) || (9 == u8MemFmt) || (10 == u8MemFmt) || (11 == u8MemFmt))
3496*53ee8cc1Swenshuai.xi             {
3497*53ee8cc1Swenshuai.xi                 pFrameBufInfo->u8BitPerPixel = 24;
3498*53ee8cc1Swenshuai.xi             }
3499*53ee8cc1Swenshuai.xi         }
3500*53ee8cc1Swenshuai.xi         else
3501*53ee8cc1Swenshuai.xi         {
3502*53ee8cc1Swenshuai.xi             u8Reg = (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_01_L:REG_SC_BK12_41_L, 0xFF00)) >> 8;
3503*53ee8cc1Swenshuai.xi 
3504*53ee8cc1Swenshuai.xi             switch(u8Reg & 0x77)
3505*53ee8cc1Swenshuai.xi             {
3506*53ee8cc1Swenshuai.xi                 case 0x25:
3507*53ee8cc1Swenshuai.xi                     pFrameBufInfo->u8BitPerPixel = 24;
3508*53ee8cc1Swenshuai.xi                     pFrameBufInfo->bInterlace = TRUE;
3509*53ee8cc1Swenshuai.xi                     break;
3510*53ee8cc1Swenshuai.xi                 case 0x24:
3511*53ee8cc1Swenshuai.xi                     pFrameBufInfo->u8BitPerPixel = 20;
3512*53ee8cc1Swenshuai.xi                     pFrameBufInfo->bInterlace = TRUE;
3513*53ee8cc1Swenshuai.xi                     break;
3514*53ee8cc1Swenshuai.xi                 case 0x27:
3515*53ee8cc1Swenshuai.xi                     pFrameBufInfo->u8BitPerPixel = 16;
3516*53ee8cc1Swenshuai.xi                     pFrameBufInfo->bInterlace = TRUE;
3517*53ee8cc1Swenshuai.xi                     break;
3518*53ee8cc1Swenshuai.xi                 case 0x21:
3519*53ee8cc1Swenshuai.xi                     if(BIT(1) == SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_04_L:REG_SC_BK12_44_L, BIT(0)|BIT(1)))
3520*53ee8cc1Swenshuai.xi                     {
3521*53ee8cc1Swenshuai.xi                         pFrameBufInfo->u8BitPerPixel = 24;
3522*53ee8cc1Swenshuai.xi                     }
3523*53ee8cc1Swenshuai.xi                     else
3524*53ee8cc1Swenshuai.xi                     {
3525*53ee8cc1Swenshuai.xi                         pFrameBufInfo->u8BitPerPixel = 20;
3526*53ee8cc1Swenshuai.xi                     }
3527*53ee8cc1Swenshuai.xi                     pFrameBufInfo->bInterlace = FALSE;
3528*53ee8cc1Swenshuai.xi                     break;
3529*53ee8cc1Swenshuai.xi                 case 0x20:
3530*53ee8cc1Swenshuai.xi                     pFrameBufInfo->u8BitPerPixel = 16;
3531*53ee8cc1Swenshuai.xi                     pFrameBufInfo->bInterlace = FALSE;
3532*53ee8cc1Swenshuai.xi                     break;
3533*53ee8cc1Swenshuai.xi                 case 0x00:
3534*53ee8cc1Swenshuai.xi                 default:
3535*53ee8cc1Swenshuai.xi                     pFrameBufInfo->u8BitPerPixel = 16;
3536*53ee8cc1Swenshuai.xi                     pFrameBufInfo->bInterlace = FALSE;
3537*53ee8cc1Swenshuai.xi                     break;
3538*53ee8cc1Swenshuai.xi             }
3539*53ee8cc1Swenshuai.xi         }
3540*53ee8cc1Swenshuai.xi     }
3541*53ee8cc1Swenshuai.xi 
3542*53ee8cc1Swenshuai.xi     //In M10/J2/A5/A6/A3, New SCMI
3543*53ee8cc1Swenshuai.xi     pFrameBufInfo->u8FBNum = (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, (eWindow == MAIN_WINDOW)?REG_SC_BK12_19_L:REG_SC_BK12_59_L, 0x1F));
3544*53ee8cc1Swenshuai.xi 
3545*53ee8cc1Swenshuai.xi #if 0
3546*53ee8cc1Swenshuai.xi     printf("base0=0x%x, base1=0x%x, base2=0x%x, offset=%u, 422=%u, i=%u, bpp=%u, fbnum=%u\n",
3547*53ee8cc1Swenshuai.xi         (unsigned int)pFrameBufInfo->u32IPMBase0,
3548*53ee8cc1Swenshuai.xi         (unsigned int)pFrameBufInfo->u32IPMBase1,
3549*53ee8cc1Swenshuai.xi         (unsigned int)pFrameBufInfo->u32IPMBase2,
3550*53ee8cc1Swenshuai.xi         pFrameBufInfo->u16IPMOffset,
3551*53ee8cc1Swenshuai.xi         pFrameBufInfo->bMemFormat422,
3552*53ee8cc1Swenshuai.xi         pFrameBufInfo->bInterlace,
3553*53ee8cc1Swenshuai.xi         pFrameBufInfo->u8BitPerPixel,
3554*53ee8cc1Swenshuai.xi         pFrameBufInfo->u8FBNum);
3555*53ee8cc1Swenshuai.xi #endif
3556*53ee8cc1Swenshuai.xi }
Hal_SC_set_framebuf_Info(void * pInstance,SC_FRAMEBUF_INFO_t pFrameBufInfo)3557*53ee8cc1Swenshuai.xi void Hal_SC_set_framebuf_Info(void *pInstance, SC_FRAMEBUF_INFO_t pFrameBufInfo)
3558*53ee8cc1Swenshuai.xi {
3559*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3560*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3561*53ee8cc1Swenshuai.xi     MS_PHY u32IPMBase0, u32IPMBase1, u32IPMBase2;
3562*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
3563*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
3564*53ee8cc1Swenshuai.xi 
3565*53ee8cc1Swenshuai.xi     u32IPMBase0=pFrameBufInfo.u32IPMBase0/BYTE_PER_WORD;
3566*53ee8cc1Swenshuai.xi     u32IPMBase1=pFrameBufInfo.u32IPMBase1/BYTE_PER_WORD;
3567*53ee8cc1Swenshuai.xi     u32IPMBase2=pFrameBufInfo.u32IPMBase2/BYTE_PER_WORD;
3568*53ee8cc1Swenshuai.xi 
3569*53ee8cc1Swenshuai.xi     //Step 5.4, Memory Limit V : BK12_18[15] = 1, BK12_18[12:0] to the real V line number
3570*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_18_L, (pFrameBufInfo.u16VLength|0x8000),0x8FFF);
3571*53ee8cc1Swenshuai.xi 
3572*53ee8cc1Swenshuai.xi //    u32WritelimitBase = ((u32IPMBase0 + u32MemSize) / BYTE_PER_WORD - 1) | 0x2000000;
3573*53ee8cc1Swenshuai.xi     SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_1A_L, pFrameBufInfo.u32IPMBase1);
3574*53ee8cc1Swenshuai.xi     // frcm write base address limit
3575*53ee8cc1Swenshuai.xi     #if 0
3576*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
3577*53ee8cc1Swenshuai.xi     if ((psXCInstPri->u32DeviceID==0)
3578*53ee8cc1Swenshuai.xi        && !(pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
3579*53ee8cc1Swenshuai.xi     {
3580*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK32_1A_L, pFrameBufInfo.u32FRCMWriteLimitBase);
3581*53ee8cc1Swenshuai.xi     }
3582*53ee8cc1Swenshuai.xi #endif
3583*53ee8cc1Swenshuai.xi     #endif
3584*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_09_L, (MS_U16)(u32IPMBase0 & 0xFF0000)>>16,0x00FF);
3585*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_08_L, (MS_U16)(u32IPMBase0 & 0xFFFF));
3586*53ee8cc1Swenshuai.xi 
3587*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_0B_L, (MS_U16)(u32IPMBase1 & 0xFF0000)>>16,0x00FF);
3588*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0A_L, (MS_U16)(u32IPMBase1 & 0xFFFF));
3589*53ee8cc1Swenshuai.xi 
3590*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_0D_L, (MS_U16)(u32IPMBase2 & 0xFF0000)>>16,0x00FF);
3591*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0C_L, (MS_U16)(u32IPMBase2 & 0xFFFF));
3592*53ee8cc1Swenshuai.xi 
3593*53ee8cc1Swenshuai.xi 
3594*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0E_L, pFrameBufInfo.u16IPMOffset);
3595*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_0F_L, pFrameBufInfo.u16IPMFetch);
3596*53ee8cc1Swenshuai.xi //    SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_18_L, (pFrameBufInfo.u16VLength|0x1000),0x1FFF);
3597*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_03_L, ((pFrameBufInfo.bLinearAddrMode)?BIT(4):0),BIT(4));
3598*53ee8cc1Swenshuai.xi 
3599*53ee8cc1Swenshuai.xi }
3600*53ee8cc1Swenshuai.xi 
Hal_SC_get_cs_det_cnt(void * pInstance,SCALER_WIN eWindow)3601*53ee8cc1Swenshuai.xi MS_U8 Hal_SC_get_cs_det_cnt(void *pInstance, SCALER_WIN eWindow)
3602*53ee8cc1Swenshuai.xi {
3603*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3604*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3605*53ee8cc1Swenshuai.xi     MS_U8 u8val;
3606*53ee8cc1Swenshuai.xi 
3607*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3608*53ee8cc1Swenshuai.xi     {
3609*53ee8cc1Swenshuai.xi         u8val = ((SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_0C_L) & 0xFF00) >> 8);
3610*53ee8cc1Swenshuai.xi     }
3611*53ee8cc1Swenshuai.xi     else
3612*53ee8cc1Swenshuai.xi     {
3613*53ee8cc1Swenshuai.xi         u8val = ((SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_0C_L) & 0xFF00) >> 8);
3614*53ee8cc1Swenshuai.xi     }
3615*53ee8cc1Swenshuai.xi     return u8val;
3616*53ee8cc1Swenshuai.xi }
3617*53ee8cc1Swenshuai.xi 
Hal_SC_set_cs_det_cnt(void * pInstance,MS_U8 u8val,SCALER_WIN eWindow)3618*53ee8cc1Swenshuai.xi void Hal_SC_set_cs_det_cnt(void *pInstance, MS_U8 u8val, SCALER_WIN eWindow)
3619*53ee8cc1Swenshuai.xi {
3620*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3621*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3622*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3623*53ee8cc1Swenshuai.xi     {
3624*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0C_L, (((MS_U16)u8val)<<8), 0xFF00);
3625*53ee8cc1Swenshuai.xi     }
3626*53ee8cc1Swenshuai.xi     else
3627*53ee8cc1Swenshuai.xi     {
3628*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0C_L, (((MS_U16)u8val)<<8), 0xFF00);
3629*53ee8cc1Swenshuai.xi     }
3630*53ee8cc1Swenshuai.xi }
3631*53ee8cc1Swenshuai.xi 
Hal_SC_get_plus_width(void * pInstance,SCALER_WIN eWindow)3632*53ee8cc1Swenshuai.xi MS_U8 Hal_SC_get_plus_width(void *pInstance, SCALER_WIN eWindow)
3633*53ee8cc1Swenshuai.xi {
3634*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3635*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3636*53ee8cc1Swenshuai.xi     MS_U8 u8val;
3637*53ee8cc1Swenshuai.xi 
3638*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3639*53ee8cc1Swenshuai.xi     {
3640*53ee8cc1Swenshuai.xi         u8val = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_22_L) & 0x00FF);
3641*53ee8cc1Swenshuai.xi     }
3642*53ee8cc1Swenshuai.xi     else
3643*53ee8cc1Swenshuai.xi     {
3644*53ee8cc1Swenshuai.xi         u8val = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_22_L) & 0x00FF);
3645*53ee8cc1Swenshuai.xi     }
3646*53ee8cc1Swenshuai.xi     return u8val;
3647*53ee8cc1Swenshuai.xi }
3648*53ee8cc1Swenshuai.xi 
Hal_SC_set_opm_fetch(void * pInstance,SCALER_WIN eWindow,MS_U16 u16OPMFetch)3649*53ee8cc1Swenshuai.xi void Hal_SC_set_opm_fetch(void *pInstance, SCALER_WIN eWindow, MS_U16 u16OPMFetch)
3650*53ee8cc1Swenshuai.xi {
3651*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3652*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3653*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3654*53ee8cc1Swenshuai.xi     {
3655*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_17_L, u16OPMFetch, 0x0FFF);
3656*53ee8cc1Swenshuai.xi     }
3657*53ee8cc1Swenshuai.xi     else
3658*53ee8cc1Swenshuai.xi     {
3659*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_57_L, u16OPMFetch, 0x0FFF);
3660*53ee8cc1Swenshuai.xi     }
3661*53ee8cc1Swenshuai.xi }
3662*53ee8cc1Swenshuai.xi 
Hal_SC_get_opm_fetch(void * pInstance,SCALER_WIN eWindow)3663*53ee8cc1Swenshuai.xi MS_U16 Hal_SC_get_opm_fetch(void *pInstance, SCALER_WIN eWindow)
3664*53ee8cc1Swenshuai.xi {
3665*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3666*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3667*53ee8cc1Swenshuai.xi     MS_U16 u16Val = 0;
3668*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3669*53ee8cc1Swenshuai.xi     {
3670*53ee8cc1Swenshuai.xi         u16Val = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_17_L) & 0x0FFF;
3671*53ee8cc1Swenshuai.xi     }
3672*53ee8cc1Swenshuai.xi     else
3673*53ee8cc1Swenshuai.xi     {
3674*53ee8cc1Swenshuai.xi         u16Val = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_57_L) & 0x0FFF;
3675*53ee8cc1Swenshuai.xi     }
3676*53ee8cc1Swenshuai.xi     return u16Val;
3677*53ee8cc1Swenshuai.xi }
3678*53ee8cc1Swenshuai.xi 
HAL_SC_get_dnr_setting(void * pInstance,SCALER_WIN eWindow)3679*53ee8cc1Swenshuai.xi MS_U8 HAL_SC_get_dnr_setting(void *pInstance, SCALER_WIN eWindow)
3680*53ee8cc1Swenshuai.xi {
3681*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3682*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3683*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3684*53ee8cc1Swenshuai.xi         return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK06_21_L, BIT(1)|BIT(0));
3685*53ee8cc1Swenshuai.xi     else
3686*53ee8cc1Swenshuai.xi         return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK06_01_L, BIT(1)|BIT(0));
3687*53ee8cc1Swenshuai.xi }
3688*53ee8cc1Swenshuai.xi 
HAL_SC_enable_field_avg_y(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)3689*53ee8cc1Swenshuai.xi void HAL_SC_enable_field_avg_y(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
3690*53ee8cc1Swenshuai.xi {
3691*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3692*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3693*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3694*53ee8cc1Swenshuai.xi     {
3695*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK05_21_L, bEnable ? BIT(6) : 0, BIT(6));
3696*53ee8cc1Swenshuai.xi     }
3697*53ee8cc1Swenshuai.xi     else
3698*53ee8cc1Swenshuai.xi     {
3699*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK05_01_L, bEnable ? BIT(6) : 0, BIT(6));
3700*53ee8cc1Swenshuai.xi     }
3701*53ee8cc1Swenshuai.xi 
3702*53ee8cc1Swenshuai.xi }
3703*53ee8cc1Swenshuai.xi 
HAL_SC_enable_field_avg_c(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)3704*53ee8cc1Swenshuai.xi void HAL_SC_enable_field_avg_c(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
3705*53ee8cc1Swenshuai.xi {
3706*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3707*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3708*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3709*53ee8cc1Swenshuai.xi     {
3710*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK05_21_L, bEnable ? BIT(7) : 0, BIT(7));
3711*53ee8cc1Swenshuai.xi     }
3712*53ee8cc1Swenshuai.xi     else
3713*53ee8cc1Swenshuai.xi     {
3714*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK05_01_L, bEnable ? BIT(7) : 0, BIT(7));
3715*53ee8cc1Swenshuai.xi     }
3716*53ee8cc1Swenshuai.xi }
3717*53ee8cc1Swenshuai.xi 
HAL_SC_enable_dnr(void * pInstance,MS_U8 u8Val,SCALER_WIN eWindow)3718*53ee8cc1Swenshuai.xi void HAL_SC_enable_dnr(void *pInstance, MS_U8 u8Val, SCALER_WIN eWindow)
3719*53ee8cc1Swenshuai.xi {
3720*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3721*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3722*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3723*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK06_21_L, u8Val, BIT(1)|BIT(0));
3724*53ee8cc1Swenshuai.xi     else
3725*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK06_01_L, u8Val, BIT(1)|BIT(0));
3726*53ee8cc1Swenshuai.xi }
3727*53ee8cc1Swenshuai.xi 
HAL_SC_VOP_Set_Contrast_En(void * pInstance,MS_BOOL bEenable,SCALER_WIN eWindow)3728*53ee8cc1Swenshuai.xi void HAL_SC_VOP_Set_Contrast_En(void *pInstance, MS_BOOL bEenable, SCALER_WIN eWindow)
3729*53ee8cc1Swenshuai.xi {
3730*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3731*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3732*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3733*53ee8cc1Swenshuai.xi     {
3734*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_53_L, (MS_U16)(bEenable?BIT(0):0), BIT(0));
3735*53ee8cc1Swenshuai.xi     }
3736*53ee8cc1Swenshuai.xi     else
3737*53ee8cc1Swenshuai.xi     {
3738*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_53_L, (MS_U16)(bEenable?BIT(8):0), BIT(8));
3739*53ee8cc1Swenshuai.xi     }
3740*53ee8cc1Swenshuai.xi }
HAL_SC_VOP_Set_Contrast_Value(void * pInstance,MS_XC_VOP_CHANNEL_t eVop_Channel,MS_U16 u16Val,SCALER_WIN eWindow)3741*53ee8cc1Swenshuai.xi void HAL_SC_VOP_Set_Contrast_Value(void *pInstance, MS_XC_VOP_CHANNEL_t eVop_Channel, MS_U16 u16Val, SCALER_WIN eWindow)
3742*53ee8cc1Swenshuai.xi {
3743*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3744*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3745*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3746*53ee8cc1Swenshuai.xi     {
3747*53ee8cc1Swenshuai.xi         switch(eVop_Channel)
3748*53ee8cc1Swenshuai.xi         {
3749*53ee8cc1Swenshuai.xi             default:
3750*53ee8cc1Swenshuai.xi             case XC_VOP_CHR:
3751*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_47_L, u16Val, 0x0FFF);
3752*53ee8cc1Swenshuai.xi                 break;
3753*53ee8cc1Swenshuai.xi             case XC_VOP_CHG:
3754*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_48_L, u16Val, 0x0FFF);
3755*53ee8cc1Swenshuai.xi                 break;
3756*53ee8cc1Swenshuai.xi             case XC_VOP_CHB:
3757*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_49_L, u16Val, 0x0FFF);
3758*53ee8cc1Swenshuai.xi                 break;
3759*53ee8cc1Swenshuai.xi             case XC_VOP_ALL:
3760*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_47_L, u16Val, 0x0FFF);
3761*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_48_L, u16Val, 0x0FFF);
3762*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_49_L, u16Val, 0x0FFF);
3763*53ee8cc1Swenshuai.xi                 break;
3764*53ee8cc1Swenshuai.xi         }
3765*53ee8cc1Swenshuai.xi     }
3766*53ee8cc1Swenshuai.xi     else
3767*53ee8cc1Swenshuai.xi     {
3768*53ee8cc1Swenshuai.xi         switch(eVop_Channel)
3769*53ee8cc1Swenshuai.xi         {
3770*53ee8cc1Swenshuai.xi             default:
3771*53ee8cc1Swenshuai.xi             case XC_VOP_CHR:
3772*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4A_L, u16Val, 0x0FFF);
3773*53ee8cc1Swenshuai.xi                 break;
3774*53ee8cc1Swenshuai.xi             case XC_VOP_CHG:
3775*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4B_L, u16Val, 0x0FFF);
3776*53ee8cc1Swenshuai.xi                 break;
3777*53ee8cc1Swenshuai.xi             case XC_VOP_CHB:
3778*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4C_L, u16Val, 0x0FFF);
3779*53ee8cc1Swenshuai.xi                 break;
3780*53ee8cc1Swenshuai.xi             case XC_VOP_ALL:
3781*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4A_L, u16Val, 0x0FFF);
3782*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4B_L, u16Val, 0x0FFF);
3783*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4C_L, u16Val, 0x0FFF);
3784*53ee8cc1Swenshuai.xi                 break;
3785*53ee8cc1Swenshuai.xi         }
3786*53ee8cc1Swenshuai.xi     }
3787*53ee8cc1Swenshuai.xi }
3788*53ee8cc1Swenshuai.xi 
HAL_SC_VOP_Set_Brightness_En(void * pInstance,MS_BOOL bEenable,SCALER_WIN eWindow)3789*53ee8cc1Swenshuai.xi void HAL_SC_VOP_Set_Brightness_En(void *pInstance, MS_BOOL bEenable, SCALER_WIN eWindow)
3790*53ee8cc1Swenshuai.xi {
3791*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3792*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3793*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3794*53ee8cc1Swenshuai.xi     {
3795*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_53_L, (MS_U16)(bEenable?BIT(1):0), BIT(1));
3796*53ee8cc1Swenshuai.xi     }
3797*53ee8cc1Swenshuai.xi     else
3798*53ee8cc1Swenshuai.xi     {
3799*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_53_L, (MS_U16)(bEenable?BIT(9):0), BIT(9));
3800*53ee8cc1Swenshuai.xi     }
3801*53ee8cc1Swenshuai.xi }
HAL_SC_VOP_Set_Brightness_Value(void * pInstance,MS_XC_VOP_CHANNEL_t eVop_Channel,MS_U16 u16Val,SCALER_WIN eWindow)3802*53ee8cc1Swenshuai.xi void HAL_SC_VOP_Set_Brightness_Value(void *pInstance, MS_XC_VOP_CHANNEL_t eVop_Channel, MS_U16 u16Val, SCALER_WIN eWindow)
3803*53ee8cc1Swenshuai.xi {
3804*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3805*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3806*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
3807*53ee8cc1Swenshuai.xi     {
3808*53ee8cc1Swenshuai.xi         switch(eVop_Channel)
3809*53ee8cc1Swenshuai.xi         {
3810*53ee8cc1Swenshuai.xi             default:
3811*53ee8cc1Swenshuai.xi             case XC_VOP_CHR:
3812*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4D_L, u16Val, 0x07FF);
3813*53ee8cc1Swenshuai.xi                 break;
3814*53ee8cc1Swenshuai.xi             case XC_VOP_CHG:
3815*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4E_L, u16Val, 0x07FF);
3816*53ee8cc1Swenshuai.xi                 break;
3817*53ee8cc1Swenshuai.xi             case XC_VOP_CHB:
3818*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4F_L, u16Val, 0x07FF);
3819*53ee8cc1Swenshuai.xi                 break;
3820*53ee8cc1Swenshuai.xi             case XC_VOP_ALL:
3821*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4D_L, u16Val, 0x07FF);
3822*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4E_L, u16Val, 0x07FF);
3823*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_4F_L, u16Val, 0x07FF);
3824*53ee8cc1Swenshuai.xi                 break;
3825*53ee8cc1Swenshuai.xi         }
3826*53ee8cc1Swenshuai.xi     }
3827*53ee8cc1Swenshuai.xi     else
3828*53ee8cc1Swenshuai.xi     {
3829*53ee8cc1Swenshuai.xi         switch(eVop_Channel)
3830*53ee8cc1Swenshuai.xi         {
3831*53ee8cc1Swenshuai.xi             default:
3832*53ee8cc1Swenshuai.xi             case XC_VOP_CHR:
3833*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_50_L, u16Val, 0x07FF);
3834*53ee8cc1Swenshuai.xi                 break;
3835*53ee8cc1Swenshuai.xi             case XC_VOP_CHG:
3836*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_51_L, u16Val, 0x07FF);
3837*53ee8cc1Swenshuai.xi                 break;
3838*53ee8cc1Swenshuai.xi             case XC_VOP_CHB:
3839*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_52_L, u16Val, 0x07FF);
3840*53ee8cc1Swenshuai.xi                 break;
3841*53ee8cc1Swenshuai.xi             case XC_VOP_ALL:
3842*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_50_L, u16Val, 0x07FF);
3843*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_51_L, u16Val, 0x07FF);
3844*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_52_L, u16Val, 0x07FF);
3845*53ee8cc1Swenshuai.xi                 break;
3846*53ee8cc1Swenshuai.xi         }
3847*53ee8cc1Swenshuai.xi     }
3848*53ee8cc1Swenshuai.xi }
3849*53ee8cc1Swenshuai.xi 
HAL_SC_Set_FB_Num(void * pInstance,SCALER_WIN eWindow,XC_FRAME_STORE_NUMBER enFBType,MS_BOOL bInterlace)3850*53ee8cc1Swenshuai.xi void HAL_SC_Set_FB_Num(void *pInstance, SCALER_WIN eWindow, XC_FRAME_STORE_NUMBER enFBType, MS_BOOL bInterlace)
3851*53ee8cc1Swenshuai.xi {
3852*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3853*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3854*53ee8cc1Swenshuai.xi     MS_U8 u8FrameCount = 2;
3855*53ee8cc1Swenshuai.xi 
3856*53ee8cc1Swenshuai.xi     switch( enFBType )
3857*53ee8cc1Swenshuai.xi     {
3858*53ee8cc1Swenshuai.xi         case IMAGE_STORE_2_FRAMES:
3859*53ee8cc1Swenshuai.xi             u8FrameCount = 2;
3860*53ee8cc1Swenshuai.xi             break;
3861*53ee8cc1Swenshuai.xi         case IMAGE_STORE_3_FRAMES:
3862*53ee8cc1Swenshuai.xi             u8FrameCount = 3;
3863*53ee8cc1Swenshuai.xi             break;
3864*53ee8cc1Swenshuai.xi         case IMAGE_STORE_4_FRAMES:
3865*53ee8cc1Swenshuai.xi             u8FrameCount = 4;
3866*53ee8cc1Swenshuai.xi             break;
3867*53ee8cc1Swenshuai.xi         case IMAGE_STORE_6_FRAMES:
3868*53ee8cc1Swenshuai.xi             u8FrameCount = 6;
3869*53ee8cc1Swenshuai.xi             break;
3870*53ee8cc1Swenshuai.xi         case IMAGE_STORE_8_FRAMES:
3871*53ee8cc1Swenshuai.xi             u8FrameCount = 8;
3872*53ee8cc1Swenshuai.xi             break;
3873*53ee8cc1Swenshuai.xi         case IMAGE_STORE_12_FRAMES:
3874*53ee8cc1Swenshuai.xi             u8FrameCount = 12;
3875*53ee8cc1Swenshuai.xi             break;
3876*53ee8cc1Swenshuai.xi         default:
3877*53ee8cc1Swenshuai.xi             break;
3878*53ee8cc1Swenshuai.xi     }
3879*53ee8cc1Swenshuai.xi 
3880*53ee8cc1Swenshuai.xi     if (!bInterlace)
3881*53ee8cc1Swenshuai.xi     {
3882*53ee8cc1Swenshuai.xi         if (eWindow == MAIN_WINDOW)
3883*53ee8cc1Swenshuai.xi         {
3884*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_19_L, u8FrameCount , BITMASK(4:0) );
3885*53ee8cc1Swenshuai.xi         }
3886*53ee8cc1Swenshuai.xi         else
3887*53ee8cc1Swenshuai.xi         {
3888*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_59_L, u8FrameCount , BITMASK(4:0) );
3889*53ee8cc1Swenshuai.xi         }
3890*53ee8cc1Swenshuai.xi     }
3891*53ee8cc1Swenshuai.xi }
3892*53ee8cc1Swenshuai.xi 
HAL_SC_Enable_VInitFactor(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)3893*53ee8cc1Swenshuai.xi void HAL_SC_Enable_VInitFactor(void *pInstance, MS_BOOL bEnable,SCALER_WIN eWindow)
3894*53ee8cc1Swenshuai.xi {
3895*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3896*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3897*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
3898*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK23_13_L, (MS_U16)(bEnable?BIT(0):0), BIT(0));
3899*53ee8cc1Swenshuai.xi     else
3900*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK23_33_L, (MS_U16)(bEnable?BIT(0):0), BIT(0));
3901*53ee8cc1Swenshuai.xi }
3902*53ee8cc1Swenshuai.xi 
HAL_SC_Set_VInitFactorOne(void * pInstance,MS_U32 u32Value,SCALER_WIN eWindow)3903*53ee8cc1Swenshuai.xi void HAL_SC_Set_VInitFactorOne(void *pInstance, MS_U32 u32Value,SCALER_WIN eWindow)
3904*53ee8cc1Swenshuai.xi {
3905*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3906*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3907*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
3908*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_03_L, u32Value);
3909*53ee8cc1Swenshuai.xi     else
3910*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_23_L, u32Value);
3911*53ee8cc1Swenshuai.xi }
3912*53ee8cc1Swenshuai.xi 
HAL_SC_Set_VInitFactorTwo(void * pInstance,MS_U32 u32Value,SCALER_WIN eWindow)3913*53ee8cc1Swenshuai.xi void HAL_SC_Set_VInitFactorTwo(void *pInstance, MS_U32 u32Value,SCALER_WIN eWindow)
3914*53ee8cc1Swenshuai.xi {
3915*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3916*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3917*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
3918*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_05_L, u32Value);
3919*53ee8cc1Swenshuai.xi     else
3920*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_25_L, u32Value);
3921*53ee8cc1Swenshuai.xi }
3922*53ee8cc1Swenshuai.xi 
HAL_SC_Set_vsd_output_line_count(void * pInstance,MS_BOOL bEnable,MS_U32 u32LineCount,SCALER_WIN eWindow)3923*53ee8cc1Swenshuai.xi void HAL_SC_Set_vsd_output_line_count(void *pInstance, MS_BOOL bEnable,MS_U32 u32LineCount,SCALER_WIN eWindow)
3924*53ee8cc1Swenshuai.xi {
3925*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3926*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3927*53ee8cc1Swenshuai.xi     MS_U16 u16OutputLineCount = 0x00;
3928*53ee8cc1Swenshuai.xi 
3929*53ee8cc1Swenshuai.xi     if (bEnable)
3930*53ee8cc1Swenshuai.xi     {
3931*53ee8cc1Swenshuai.xi         u16OutputLineCount = BIT(15);
3932*53ee8cc1Swenshuai.xi         u16OutputLineCount |= (MS_U16)(u32LineCount & 0x1FFF);
3933*53ee8cc1Swenshuai.xi     }
3934*53ee8cc1Swenshuai.xi 
3935*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
3936*53ee8cc1Swenshuai.xi     {
3937*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_37_L, u16OutputLineCount);
3938*53ee8cc1Swenshuai.xi     }
3939*53ee8cc1Swenshuai.xi     else
3940*53ee8cc1Swenshuai.xi     {
3941*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK04_37_L, u16OutputLineCount);
3942*53ee8cc1Swenshuai.xi     }
3943*53ee8cc1Swenshuai.xi 
3944*53ee8cc1Swenshuai.xi }
3945*53ee8cc1Swenshuai.xi 
3946*53ee8cc1Swenshuai.xi /*
3947*53ee8cc1Swenshuai.xi  bEnable : Enable input line count.
3948*53ee8cc1Swenshuai.xi  bUserMode : 1 -> the input line count will ref u32UserLineCount
3949*53ee8cc1Swenshuai.xi                    0 -> the input line count will ref V capture win
3950*53ee8cc1Swenshuai.xi */
HAL_SC_Set_vsd_input_line_count(void * pInstance,MS_BOOL bEnable,MS_BOOL bUserMode,MS_U32 u32UserLineCount,SCALER_WIN eWindow)3951*53ee8cc1Swenshuai.xi void HAL_SC_Set_vsd_input_line_count(void *pInstance, MS_BOOL bEnable,MS_BOOL bUserMode,MS_U32 u32UserLineCount,SCALER_WIN eWindow)
3952*53ee8cc1Swenshuai.xi {
3953*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3954*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3955*53ee8cc1Swenshuai.xi     MS_U16 u16InputLineCount = 0x00;
3956*53ee8cc1Swenshuai.xi 
3957*53ee8cc1Swenshuai.xi     if (bEnable)
3958*53ee8cc1Swenshuai.xi     {
3959*53ee8cc1Swenshuai.xi         u16InputLineCount = BIT(15);
3960*53ee8cc1Swenshuai.xi 
3961*53ee8cc1Swenshuai.xi         if (bUserMode)
3962*53ee8cc1Swenshuai.xi         {
3963*53ee8cc1Swenshuai.xi             u16InputLineCount |= BIT(14);
3964*53ee8cc1Swenshuai.xi             u16InputLineCount |= (MS_U16)(u32UserLineCount & 0x1FFF);
3965*53ee8cc1Swenshuai.xi         }
3966*53ee8cc1Swenshuai.xi     }
3967*53ee8cc1Swenshuai.xi 
3968*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
3969*53ee8cc1Swenshuai.xi     {
3970*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_36_L, u16InputLineCount);
3971*53ee8cc1Swenshuai.xi     }
3972*53ee8cc1Swenshuai.xi     else
3973*53ee8cc1Swenshuai.xi     {
3974*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK04_36_L, u16InputLineCount);
3975*53ee8cc1Swenshuai.xi     }
3976*53ee8cc1Swenshuai.xi 
3977*53ee8cc1Swenshuai.xi }
3978*53ee8cc1Swenshuai.xi 
Hal_SC_CheckSubWinPreScaling(MS_U16 u16ScaleDst,MS_BOOL bInterlace)3979*53ee8cc1Swenshuai.xi MS_U32 Hal_SC_CheckSubWinPreScaling(MS_U16 u16ScaleDst,MS_BOOL bInterlace)
3980*53ee8cc1Swenshuai.xi {
3981*53ee8cc1Swenshuai.xi     UNUSED(u16ScaleDst);
3982*53ee8cc1Swenshuai.xi     UNUSED(bInterlace);
3983*53ee8cc1Swenshuai.xi     //New chip sub window unnecessary to the same with the main window's pre scaling setting.
3984*53ee8cc1Swenshuai.xi     return 0;
3985*53ee8cc1Swenshuai.xi }
3986*53ee8cc1Swenshuai.xi 
HAL_SC_FilmMode_Patch1(void * pInstance)3987*53ee8cc1Swenshuai.xi void HAL_SC_FilmMode_Patch1(void *pInstance)
3988*53ee8cc1Swenshuai.xi {
3989*53ee8cc1Swenshuai.xi #if 1
3990*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
3991*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
3992*53ee8cc1Swenshuai.xi     MS_U16 u16Value;
3993*53ee8cc1Swenshuai.xi     MS_U16 u16RegValue;
3994*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
3995*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
3996*53ee8cc1Swenshuai.xi 
3997*53ee8cc1Swenshuai.xi     u16RegValue = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK22_7D_L, 0xFF);
3998*53ee8cc1Swenshuai.xi     if(pXCResourcePrivate->sthal_SC.g_bCntFlg)
3999*53ee8cc1Swenshuai.xi         pXCResourcePrivate->sthal_SC.g_u16TmpValue = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0A_02_L, 0xFF);
4000*53ee8cc1Swenshuai.xi 
4001*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0A_21_L, BIT(6)))
4002*53ee8cc1Swenshuai.xi     {
4003*53ee8cc1Swenshuai.xi         //Counter
4004*53ee8cc1Swenshuai.xi         if(pXCResourcePrivate->sthal_SC.u8Time_count != 0xFF)
4005*53ee8cc1Swenshuai.xi             pXCResourcePrivate->sthal_SC.u8Time_count ++;
4006*53ee8cc1Swenshuai.xi 
4007*53ee8cc1Swenshuai.xi         if(pXCResourcePrivate->sthal_SC.u8Time_count < u16RegValue)  // fake out duration
4008*53ee8cc1Swenshuai.xi            u16Value = 0x06;      // madi fake out enable
4009*53ee8cc1Swenshuai.xi         else
4010*53ee8cc1Swenshuai.xi            u16Value = 0x00;      // madi fake out disable
4011*53ee8cc1Swenshuai.xi 
4012*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0A_25_L, (0x10<<8), 0xFF00);
4013*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0A_02_L, 0x22, 0xFF);
4014*53ee8cc1Swenshuai.xi         pXCResourcePrivate->sthal_SC.g_bCntFlg = 0;
4015*53ee8cc1Swenshuai.xi     }
4016*53ee8cc1Swenshuai.xi     else
4017*53ee8cc1Swenshuai.xi     {
4018*53ee8cc1Swenshuai.xi         pXCResourcePrivate->sthal_SC.u8Time_count = 0;
4019*53ee8cc1Swenshuai.xi         u16Value = 0x00;      // madi fake out disable
4020*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0A_25_L, (0x08<<8), 0xFF00);
4021*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0A_02_L, pXCResourcePrivate->sthal_SC.g_u16TmpValue, 0xFF);
4022*53ee8cc1Swenshuai.xi         pXCResourcePrivate->sthal_SC.g_bCntFlg = 1;
4023*53ee8cc1Swenshuai.xi     }
4024*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0A_21_L, u16Value, BIT(2)|BIT(1));
4025*53ee8cc1Swenshuai.xi 
4026*53ee8cc1Swenshuai.xi #else
4027*53ee8cc1Swenshuai.xi     MS_U8 u8Bank, u8Value;
4028*53ee8cc1Swenshuai.xi     MS_U8 u8RegValue;
4029*53ee8cc1Swenshuai.xi 
4030*53ee8cc1Swenshuai.xi     static MS_U8 u8Time_count = 0;
4031*53ee8cc1Swenshuai.xi 
4032*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, REG_BANK_MADI); //bk22
4033*53ee8cc1Swenshuai.xi     u8RegValue = MDrv_ReadByte(L_BK_MADI(0x7D));
4034*53ee8cc1Swenshuai.xi 
4035*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, REG_BANK_FILM);
4036*53ee8cc1Swenshuai.xi 
4037*53ee8cc1Swenshuai.xi 
4038*53ee8cc1Swenshuai.xi     if(MDrv_ReadRegBit(L_BK_FILM(0x21), BIT(6)))
4039*53ee8cc1Swenshuai.xi     {
4040*53ee8cc1Swenshuai.xi         //Counter
4041*53ee8cc1Swenshuai.xi         if(u8Time_count != 0xFF)
4042*53ee8cc1Swenshuai.xi             u8Time_count ++;
4043*53ee8cc1Swenshuai.xi 
4044*53ee8cc1Swenshuai.xi         if(u8Time_count < u8RegValue)  // fake out duration
4045*53ee8cc1Swenshuai.xi            u8Value = 0x06;      // madi fake out enable
4046*53ee8cc1Swenshuai.xi         else
4047*53ee8cc1Swenshuai.xi            u8Value = 0x00;      // madi fake out disable
4048*53ee8cc1Swenshuai.xi 
4049*53ee8cc1Swenshuai.xi         MDrv_WriteByte(H_BK_FILM(0x25), 0x10);
4050*53ee8cc1Swenshuai.xi 
4051*53ee8cc1Swenshuai.xi     }
4052*53ee8cc1Swenshuai.xi     else
4053*53ee8cc1Swenshuai.xi     {
4054*53ee8cc1Swenshuai.xi         u8Time_count = 0;
4055*53ee8cc1Swenshuai.xi         u8Value = 0x00;      // madi fake out disable
4056*53ee8cc1Swenshuai.xi         MDrv_WriteByte(H_BK_FILM(0x25), 0x08);
4057*53ee8cc1Swenshuai.xi     }
4058*53ee8cc1Swenshuai.xi 
4059*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(L_BK_FILM(0x21), u8Value, BIT(2)|BIT(1));
4060*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, u8Bank);
4061*53ee8cc1Swenshuai.xi #endif
4062*53ee8cc1Swenshuai.xi }
4063*53ee8cc1Swenshuai.xi 
HAL_SC_EnableFPLL(void)4064*53ee8cc1Swenshuai.xi void HAL_SC_EnableFPLL(void)
4065*53ee8cc1Swenshuai.xi {
4066*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(L_BK_LPLL(0x0C), BIT(3), BIT(3));
4067*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(L_BK_LPLL(0x0C),      0, BIT(6));
4068*53ee8cc1Swenshuai.xi }
4069*53ee8cc1Swenshuai.xi 
4070*53ee8cc1Swenshuai.xi 
_HAL_SC_GetFPLLPhaseDiffISR(SC_INT_SRC eIntNum,void * pParam)4071*53ee8cc1Swenshuai.xi static void _HAL_SC_GetFPLLPhaseDiffISR(SC_INT_SRC eIntNum, void *pParam)
4072*53ee8cc1Swenshuai.xi {
4073*53ee8cc1Swenshuai.xi     volatile MS_XC_GET_FPLL_PHASEDIFF * pFpllPhaseDiff = (volatile MS_XC_GET_FPLL_PHASEDIFF *) pParam;
4074*53ee8cc1Swenshuai.xi 
4075*53ee8cc1Swenshuai.xi     pFpllPhaseDiff->u16PhaseDiff = MDrv_Read2Byte(L_BK_LPLL(0x11));
4076*53ee8cc1Swenshuai.xi     pFpllPhaseDiff->eFpllDir = (MDrv_Read2Byte(L_BK_LPLL(0x12)) & BIT(0)) == BIT(0) ? E_XC_FPLL_DIR_UP : E_XC_FPLL_DIR_DOWN;
4077*53ee8cc1Swenshuai.xi     pFpllPhaseDiff->u8Debounce++;
4078*53ee8cc1Swenshuai.xi 
4079*53ee8cc1Swenshuai.xi     if(pFpllPhaseDiff->u8Debounce > 3)
4080*53ee8cc1Swenshuai.xi     {
4081*53ee8cc1Swenshuai.xi         if(pFpllPhaseDiff->u16PhaseDiff < 0x200)
4082*53ee8cc1Swenshuai.xi         {
4083*53ee8cc1Swenshuai.xi             pFpllPhaseDiff->eFpllResult = E_XC_FPLL_RES_FINISHED;
4084*53ee8cc1Swenshuai.xi         }
4085*53ee8cc1Swenshuai.xi         else
4086*53ee8cc1Swenshuai.xi         {
4087*53ee8cc1Swenshuai.xi             if(pFpllPhaseDiff->u8Debounce > 90)
4088*53ee8cc1Swenshuai.xi             {
4089*53ee8cc1Swenshuai.xi                 pFpllPhaseDiff->eFpllResult = E_XC_FPLL_RES_TIMEOUT;
4090*53ee8cc1Swenshuai.xi             }
4091*53ee8cc1Swenshuai.xi         }
4092*53ee8cc1Swenshuai.xi     }
4093*53ee8cc1Swenshuai.xi }
4094*53ee8cc1Swenshuai.xi 
HAL_SC_WaitFPLLDone(void * pInstance)4095*53ee8cc1Swenshuai.xi MS_BOOL HAL_SC_WaitFPLLDone(void *pInstance)
4096*53ee8cc1Swenshuai.xi {
4097*53ee8cc1Swenshuai.xi     MS_XC_GET_FPLL_PHASEDIFF stGetFpllPhaseDiff = {0, 0, E_XC_FPLL_DIR_UNKNOWN, E_XC_FPLL_RES_WAITING};
4098*53ee8cc1Swenshuai.xi 
4099*53ee8cc1Swenshuai.xi     MDrv_XC_InterruptAttach(pInstance, SC_INT_VSINT, _HAL_SC_GetFPLLPhaseDiffISR, (void *) &stGetFpllPhaseDiff);
4100*53ee8cc1Swenshuai.xi     while(*(volatile MS_BOOL*)(&(stGetFpllPhaseDiff.eFpllResult)) == E_XC_FPLL_RES_WAITING);
4101*53ee8cc1Swenshuai.xi     MDrv_XC_InterruptDeAttach(pInstance, SC_INT_VSINT, _HAL_SC_GetFPLLPhaseDiffISR, (void *) &stGetFpllPhaseDiff);
4102*53ee8cc1Swenshuai.xi 
4103*53ee8cc1Swenshuai.xi     if(stGetFpllPhaseDiff.eFpllResult == E_XC_FPLL_RES_FINISHED)
4104*53ee8cc1Swenshuai.xi     {
4105*53ee8cc1Swenshuai.xi         return TRUE;
4106*53ee8cc1Swenshuai.xi     }
4107*53ee8cc1Swenshuai.xi     else
4108*53ee8cc1Swenshuai.xi     {
4109*53ee8cc1Swenshuai.xi         return FALSE;
4110*53ee8cc1Swenshuai.xi     }
4111*53ee8cc1Swenshuai.xi }
4112*53ee8cc1Swenshuai.xi 
HAL_SC_GetOutputVFreqX100(MS_U32 u32XTAL_Clock)4113*53ee8cc1Swenshuai.xi MS_U16 HAL_SC_GetOutputVFreqX100(MS_U32 u32XTAL_Clock)
4114*53ee8cc1Swenshuai.xi {
4115*53ee8cc1Swenshuai.xi     return ((MS_U16) ((u32XTAL_Clock * 100) / MDrv_Read4Byte(L_BK_LPLL(0x23))));
4116*53ee8cc1Swenshuai.xi }
4117*53ee8cc1Swenshuai.xi 
4118*53ee8cc1Swenshuai.xi //Line buffer offset between Main and Sub, MAX(Main+Sub) = 1920+960
4119*53ee8cc1Swenshuai.xi //Main Win Line buffer offset , start from max size of main's
HAL_SC_SetMainLineBufferOffset(void * pInstance,MS_U16 u16Linebuffer)4120*53ee8cc1Swenshuai.xi void HAL_SC_SetMainLineBufferOffset(void *pInstance, MS_U16 u16Linebuffer)
4121*53ee8cc1Swenshuai.xi {
4122*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4123*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4124*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK20_12_L, u16Linebuffer);
4125*53ee8cc1Swenshuai.xi }
4126*53ee8cc1Swenshuai.xi 
4127*53ee8cc1Swenshuai.xi //Line buffer offset between Main and Sub, MAX(Main+Sub) = 1920+960
4128*53ee8cc1Swenshuai.xi //Sub Win Line buffer offset , start from max size of main's
HAL_SC_SetSubLineBufferOffset(void * pInstance,MS_U16 u16Linebuffer)4129*53ee8cc1Swenshuai.xi void HAL_SC_SetSubLineBufferOffset(void *pInstance, MS_U16 u16Linebuffer)
4130*53ee8cc1Swenshuai.xi {
4131*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4132*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4133*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK20_13_L, u16Linebuffer);
4134*53ee8cc1Swenshuai.xi }
4135*53ee8cc1Swenshuai.xi 
4136*53ee8cc1Swenshuai.xi //Select the trig mode
4137*53ee8cc1Swenshuai.xi //0: Line base(Line Buffer Mode)
4138*53ee8cc1Swenshuai.xi //1: Fill line buffer(Ring Buffer Mode)
HAL_SC_SetDisplay_LineBuffer_Mode(void * pInstance,MS_BOOL bEnable)4139*53ee8cc1Swenshuai.xi void HAL_SC_SetDisplay_LineBuffer_Mode(void *pInstance, MS_BOOL bEnable)
4140*53ee8cc1Swenshuai.xi {
4141*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4142*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4143*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_1F_L, (bEnable ? BIT(4) : 0), BIT(4));
4144*53ee8cc1Swenshuai.xi }
4145*53ee8cc1Swenshuai.xi 
4146*53ee8cc1Swenshuai.xi //Select the start mode
4147*53ee8cc1Swenshuai.xi //0: start at advance 1 display line
4148*53ee8cc1Swenshuai.xi //1: start at faling edge of Vsync_init
HAL_SC_SetDisplay_Start_Mode(void * pInstance,MS_BOOL bEnable)4149*53ee8cc1Swenshuai.xi void HAL_SC_SetDisplay_Start_Mode(void *pInstance, MS_BOOL bEnable)
4150*53ee8cc1Swenshuai.xi {
4151*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4152*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4153*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_1F_L, (bEnable ? BIT(5) : 0), BIT(5));
4154*53ee8cc1Swenshuai.xi }
4155*53ee8cc1Swenshuai.xi 
4156*53ee8cc1Swenshuai.xi //bk20_10[10]: Fill the main window's line buffer in vertical blanking for pip left and up corner
4157*53ee8cc1Swenshuai.xi //bk20_10[11]: Fill the sub window's line buffer in vertical blanking for pip left and down corner
HAL_SC_FillLineBuffer(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)4158*53ee8cc1Swenshuai.xi void HAL_SC_FillLineBuffer(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
4159*53ee8cc1Swenshuai.xi {
4160*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4161*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4162*53ee8cc1Swenshuai.xi     if(bEnable)
4163*53ee8cc1Swenshuai.xi     {
4164*53ee8cc1Swenshuai.xi         if(eWindow == MAIN_WINDOW)
4165*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, BIT(10), BIT(10));
4166*53ee8cc1Swenshuai.xi         else
4167*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, BIT(11), BIT(11));
4168*53ee8cc1Swenshuai.xi     }
4169*53ee8cc1Swenshuai.xi     else
4170*53ee8cc1Swenshuai.xi     {
4171*53ee8cc1Swenshuai.xi         if(eWindow == MAIN_WINDOW)
4172*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, 0, BIT(10));
4173*53ee8cc1Swenshuai.xi         else
4174*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, 0, BIT(11));
4175*53ee8cc1Swenshuai.xi     }
4176*53ee8cc1Swenshuai.xi }
4177*53ee8cc1Swenshuai.xi 
Hal_SC_enable_window(void * pInstance,MS_BOOL bEn,SCALER_WIN eWindow)4178*53ee8cc1Swenshuai.xi void Hal_SC_enable_window(void *pInstance, MS_BOOL bEn,SCALER_WIN eWindow)
4179*53ee8cc1Swenshuai.xi {
4180*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4181*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4182*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4183*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4184*53ee8cc1Swenshuai.xi 
4185*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
4186*53ee8cc1Swenshuai.xi     {
4187*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, bEn ? BIT(0) : 0, BIT(0));
4188*53ee8cc1Swenshuai.xi     }
4189*53ee8cc1Swenshuai.xi     else
4190*53ee8cc1Swenshuai.xi     {
4191*53ee8cc1Swenshuai.xi         // Sub prefill line must be enable, when PIP on (enable input source of sub win)
4192*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, BIT(11) , BIT(11));
4193*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, bEn ? BIT(1) : 0, BIT(1));
4194*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK58_10_L, bEn ? BIT(0) : 0, BIT(0));
4195*53ee8cc1Swenshuai.xi     }
4196*53ee8cc1Swenshuai.xi #ifdef XC_SUPPORT_2STEP_SCALING
4197*53ee8cc1Swenshuai.xi     if ((MDrv_XC_IsSupport2StepScaling() == TRUE) && MDrv_XC_GetMWEStatus(pInstance))
4198*53ee8cc1Swenshuai.xi     {
4199*53ee8cc1Swenshuai.xi         if (bEn == TRUE)
4200*53ee8cc1Swenshuai.xi         {
4201*53ee8cc1Swenshuai.xi             if (SC_R2BYTEMSK(0, REG_SC_BK4F_10_L, BIT(0)) == BIT(0)) // enable 2-step scaling.
4202*53ee8cc1Swenshuai.xi             {
4203*53ee8cc1Swenshuai.xi                 P_SC_SWDB_INFO pDBreg = &pXCResourcePrivate->stdrvXC_MVideo_Context.stDBreg;
4204*53ee8cc1Swenshuai.xi                 // Disable 2 Step Scaling
4205*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK4F_10_L, 0, BIT(0));
4206*53ee8cc1Swenshuai.xi                 // Adjust XC  postScaling
4207*53ee8cc1Swenshuai.xi                 MS_U32 u32TmpScaling = 0;
4208*53ee8cc1Swenshuai.xi                 //H post-scaling
4209*53ee8cc1Swenshuai.xi                 u32TmpScaling = pDBreg->u32H_PostScalingRatio & (~0x1000000L);
4210*53ee8cc1Swenshuai.xi                 u32TmpScaling = u32TmpScaling/2;
4211*53ee8cc1Swenshuai.xi                 u32TmpScaling |= 0x1000000L;
4212*53ee8cc1Swenshuai.xi 
4213*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_07_L, (MS_U16)(u32TmpScaling>>00), 0xFFFF);
4214*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_08_L, (MS_U16)(u32TmpScaling>>16), 0xFFFF);
4215*53ee8cc1Swenshuai.xi 
4216*53ee8cc1Swenshuai.xi                 //V post-scaling
4217*53ee8cc1Swenshuai.xi                 u32TmpScaling = pDBreg->u32V_PostScalingRatio & (~0x1000000L);
4218*53ee8cc1Swenshuai.xi                 u32TmpScaling = u32TmpScaling/2;
4219*53ee8cc1Swenshuai.xi                 u32TmpScaling |= 0x1000000L;
4220*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_09_L, (MS_U16)(u32TmpScaling>>00), 0xFFFF);
4221*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_0A_L, (MS_U16)(u32TmpScaling>>16), 0xFFFF);
4222*53ee8cc1Swenshuai.xi             }
4223*53ee8cc1Swenshuai.xi         }
4224*53ee8cc1Swenshuai.xi         else
4225*53ee8cc1Swenshuai.xi         {
4226*53ee8cc1Swenshuai.xi             if (SC_R2BYTEMSK(0, REG_SC_BK4F_10_L, BIT(0)) == 0) // Disable 2-step scaling.
4227*53ee8cc1Swenshuai.xi             {
4228*53ee8cc1Swenshuai.xi                 P_SC_SWDB_INFO pDBreg = &pXCResourcePrivate->stdrvXC_MVideo_Context.stDBreg;
4229*53ee8cc1Swenshuai.xi                 // Restore 2 Step Scaling
4230*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK4F_10_L, BIT(0), BIT(0));
4231*53ee8cc1Swenshuai.xi                 // Restore XC postScaling
4232*53ee8cc1Swenshuai.xi                 //H post-scaling
4233*53ee8cc1Swenshuai.xi 
4234*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_07_L, (MS_U16)((pDBreg->u32H_PostScalingRatio)>>00), 0xFFFF);
4235*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_08_L, (MS_U16)((pDBreg->u32H_PostScalingRatio)>>16), 0xFFFF);
4236*53ee8cc1Swenshuai.xi                 //V post-scaling
4237*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_09_L, (MS_U16)((pDBreg->u32V_PostScalingRatio)>>00), 0xFFFF);
4238*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(0, REG_SC_BK23_0A_L, (MS_U16)((pDBreg->u32V_PostScalingRatio)>>16), 0xFFFF);
4239*53ee8cc1Swenshuai.xi             }
4240*53ee8cc1Swenshuai.xi         }
4241*53ee8cc1Swenshuai.xi     }
4242*53ee8cc1Swenshuai.xi 
4243*53ee8cc1Swenshuai.xi #endif
4244*53ee8cc1Swenshuai.xi }
4245*53ee8cc1Swenshuai.xi 
_Hal_SC_GetInputVPeriod(void * pInstance,SCALER_WIN eWindow)4246*53ee8cc1Swenshuai.xi static MS_U16 _Hal_SC_GetInputVPeriod(void *pInstance, SCALER_WIN eWindow)
4247*53ee8cc1Swenshuai.xi {
4248*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4249*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4250*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4251*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4252*53ee8cc1Swenshuai.xi     MS_U16 u16VFreq = gSrcInfo[eWindow].u16InputVFreq * 10;
4253*53ee8cc1Swenshuai.xi     SC_DBG(printf("(100000+u16VFreq/2)/u16VFreq)=%u, u16VFreq=%u\n",((100000+u16VFreq/2)/u16VFreq), u16VFreq));
4254*53ee8cc1Swenshuai.xi     if(u16VFreq == 0)
4255*53ee8cc1Swenshuai.xi     {
4256*53ee8cc1Swenshuai.xi         return 0;
4257*53ee8cc1Swenshuai.xi     }
4258*53ee8cc1Swenshuai.xi     else
4259*53ee8cc1Swenshuai.xi     {
4260*53ee8cc1Swenshuai.xi         return ((100000+u16VFreq/2)/u16VFreq); //Period = 1000/(vfreq/100)
4261*53ee8cc1Swenshuai.xi     }
4262*53ee8cc1Swenshuai.xi }
4263*53ee8cc1Swenshuai.xi 
Hal_SC_enable_window_burst(void * pInstance,MS_BOOL bEn,SCALER_WIN eWindow)4264*53ee8cc1Swenshuai.xi void Hal_SC_enable_window_burst(void *pInstance, MS_BOOL bEn,SCALER_WIN eWindow)
4265*53ee8cc1Swenshuai.xi {
4266*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4267*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4268*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4269*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4270*53ee8cc1Swenshuai.xi     _MLOAD_ENTRY(pInstance);
4271*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
4272*53ee8cc1Swenshuai.xi     {
4273*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_10_L, bEn ? BIT(0) : 0, BIT(0));
4274*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_Fire(pInstance, TRUE);
4275*53ee8cc1Swenshuai.xi     }
4276*53ee8cc1Swenshuai.xi     else
4277*53ee8cc1Swenshuai.xi     {
4278*53ee8cc1Swenshuai.xi         if(bEn == TRUE)
4279*53ee8cc1Swenshuai.xi         {
4280*53ee8cc1Swenshuai.xi             MS_U16 u16extra_req = 0;
4281*53ee8cc1Swenshuai.xi             MS_U16 u16Delaytime = 0;
4282*53ee8cc1Swenshuai.xi 
4283*53ee8cc1Swenshuai.xi             // When Main is foreground, sub is background, extra must enable.
4284*53ee8cc1Swenshuai.xi             u16extra_req = 0x01;
4285*53ee8cc1Swenshuai.xi 
4286*53ee8cc1Swenshuai.xi             if(Hal_SC_is_extra_req_en(pInstance, NULL, NULL , NULL , NULL))
4287*53ee8cc1Swenshuai.xi             {
4288*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, BIT(15), BIT(15));
4289*53ee8cc1Swenshuai.xi                 u16extra_req = u16extra_req | 0x8000;
4290*53ee8cc1Swenshuai.xi             }
4291*53ee8cc1Swenshuai.xi 
4292*53ee8cc1Swenshuai.xi             // HW PIP architeucture
4293*53ee8cc1Swenshuai.xi             // Becasue BK3_02[8] and BK20_11[15] should enable together, otherwise garbage will be showed,
4294*53ee8cc1Swenshuai.xi             // we need to use BK12_47[0] to instead. And the default value of BK3_02[8] is 1. So, we need
4295*53ee8cc1Swenshuai.xi             // to set it to 0 in this function.
4296*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, u16extra_req , 0x800F);
4297*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_02_L, 0, 0x0080);
4298*53ee8cc1Swenshuai.xi 
4299*53ee8cc1Swenshuai.xi             // Sub prefill line must be enable, when PIP on (enable input source of sub win)
4300*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_10_L, BIT(11), BIT(11) );
4301*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_Fire(pInstance, TRUE);
4302*53ee8cc1Swenshuai.xi             //if we let REG_SC_BK20_10_L[1] to enable with other register settings in the same menuload fire
4303*53ee8cc1Swenshuai.xi             //it will produce a rectangular horizontal noise. so we move outside to let those register settings
4304*53ee8cc1Swenshuai.xi             //to be set first then let REG_SC_BK20_10_L[1] on.
4305*53ee8cc1Swenshuai.xi 
4306*53ee8cc1Swenshuai.xi             //betwen REG_SC_BK03_02_L[7] and REG_SC_BK20_10_L[1], we need to delay time of wr mapping mode,
4307*53ee8cc1Swenshuai.xi             // to let the data fill in xc sub buffer
4308*53ee8cc1Swenshuai.xi             u16Delaytime = _Hal_SC_GetInputVPeriod(pInstance, eWindow) * (Hal_SC_Get_WR_Bank_Mapping(pInstance, eWindow) + 1);
4309*53ee8cc1Swenshuai.xi             MsOS_DelayTask(u16Delaytime);
4310*53ee8cc1Swenshuai.xi 
4311*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_10_L, BIT(1), BIT(1));
4312*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK58_10_L, BIT(0), BIT(0));
4313*53ee8cc1Swenshuai.xi #ifdef XC_SUPPORT_2STEP_SCALING
4314*53ee8cc1Swenshuai.xi             if ((MDrv_XC_IsSupport2StepScaling() == TRUE) && MDrv_XC_GetMWEStatus(pInstance))
4315*53ee8cc1Swenshuai.xi             {
4316*53ee8cc1Swenshuai.xi                 if (SC_R2BYTEMSK(0, REG_SC_BK4F_10_L, BIT(0)) == BIT(0)) // enable 2-step scaling.
4317*53ee8cc1Swenshuai.xi                 {
4318*53ee8cc1Swenshuai.xi                     P_SC_SWDB_INFO pDBreg = &pXCResourcePrivate->stdrvXC_MVideo_Context.stDBreg;
4319*53ee8cc1Swenshuai.xi                     // Disable 2 Step Scaling
4320*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK4F_10_L, 0, BIT(0));
4321*53ee8cc1Swenshuai.xi                     // Adjust XC  postScaling
4322*53ee8cc1Swenshuai.xi                     MS_U32 u32TmpScaling = 0;
4323*53ee8cc1Swenshuai.xi 
4324*53ee8cc1Swenshuai.xi                     //H post-scaling
4325*53ee8cc1Swenshuai.xi                     u32TmpScaling = pDBreg->u32H_PostScalingRatio & (~0x1000000L);
4326*53ee8cc1Swenshuai.xi                     u32TmpScaling = u32TmpScaling/2;
4327*53ee8cc1Swenshuai.xi                     u32TmpScaling |= 0x1000000L;
4328*53ee8cc1Swenshuai.xi                     //H post-scaling
4329*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_07_L, (MS_U16)(u32TmpScaling>>00), 0xFFFF);
4330*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_08_L, (MS_U16)(u32TmpScaling>>16), 0xFFFF);
4331*53ee8cc1Swenshuai.xi                     //V post-scaling
4332*53ee8cc1Swenshuai.xi                     u32TmpScaling = pDBreg->u32V_PostScalingRatio & (~0x1000000L);
4333*53ee8cc1Swenshuai.xi                     u32TmpScaling = u32TmpScaling/2;
4334*53ee8cc1Swenshuai.xi                     u32TmpScaling |= 0x1000000L;
4335*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_09_L, (MS_U16)(u32TmpScaling>>00), 0xFFFF);
4336*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_0A_L, (MS_U16)(u32TmpScaling>>16), 0xFFFF);
4337*53ee8cc1Swenshuai.xi                 }
4338*53ee8cc1Swenshuai.xi             }
4339*53ee8cc1Swenshuai.xi #endif
4340*53ee8cc1Swenshuai.xi 
4341*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_Fire(pInstance, TRUE);
4342*53ee8cc1Swenshuai.xi         }
4343*53ee8cc1Swenshuai.xi         else
4344*53ee8cc1Swenshuai.xi         {
4345*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK58_10_L, 0, BIT(0));
4346*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_10_L, 0, BIT(1));
4347*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_Fire(pInstance, TRUE);
4348*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_02_L, 0x0080, 0x0080);
4349*53ee8cc1Swenshuai.xi #ifdef XC_SUPPORT_2STEP_SCALING
4350*53ee8cc1Swenshuai.xi             if ((MDrv_XC_IsSupport2StepScaling() == TRUE) && MDrv_XC_GetMWEStatus(pInstance))
4351*53ee8cc1Swenshuai.xi             {
4352*53ee8cc1Swenshuai.xi                 if (SC_R2BYTEMSK(0, REG_SC_BK4F_10_L, BIT(0)) == 0) // Disable 2-step scaling.
4353*53ee8cc1Swenshuai.xi                 {
4354*53ee8cc1Swenshuai.xi                     P_SC_SWDB_INFO pDBreg = &pXCResourcePrivate->stdrvXC_MVideo_Context.stDBreg;
4355*53ee8cc1Swenshuai.xi                     // Restore 2 Step Scaling
4356*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK4F_10_L, BIT(0), BIT(0));
4357*53ee8cc1Swenshuai.xi                     // Restore XC postScaling
4358*53ee8cc1Swenshuai.xi                     //H post-scaling
4359*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_07_L, (MS_U16)((pDBreg->u32H_PostScalingRatio)>>00), 0xFFFF);
4360*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_08_L, (MS_U16)((pDBreg->u32H_PostScalingRatio)>>16), 0xFFFF);
4361*53ee8cc1Swenshuai.xi                     //V post-scaling
4362*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_09_L, (MS_U16)((pDBreg->u32V_PostScalingRatio)>>00), 0xFFFF);
4363*53ee8cc1Swenshuai.xi                     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK23_0A_L, (MS_U16)((pDBreg->u32V_PostScalingRatio)>>16), 0xFFFF);
4364*53ee8cc1Swenshuai.xi                 }
4365*53ee8cc1Swenshuai.xi             }
4366*53ee8cc1Swenshuai.xi #endif
4367*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_Fire(pInstance, TRUE);
4368*53ee8cc1Swenshuai.xi         }
4369*53ee8cc1Swenshuai.xi     }
4370*53ee8cc1Swenshuai.xi     _MLOAD_RETURN(pInstance);
4371*53ee8cc1Swenshuai.xi }
4372*53ee8cc1Swenshuai.xi 
Hal_SC_set_trigger_signal(void)4373*53ee8cc1Swenshuai.xi void Hal_SC_set_trigger_signal(void)
4374*53ee8cc1Swenshuai.xi {
4375*53ee8cc1Swenshuai.xi     // only used in U4
4376*53ee8cc1Swenshuai.xi }
4377*53ee8cc1Swenshuai.xi 
Hal_SC_Set_OSD2VE(void * pInstance,EN_VOP_SEL_OSD_XC2VE_MUX eVOPSelOSD_MUX)4378*53ee8cc1Swenshuai.xi void Hal_SC_Set_OSD2VE(void *pInstance, EN_VOP_SEL_OSD_XC2VE_MUX  eVOPSelOSD_MUX)
4379*53ee8cc1Swenshuai.xi {
4380*53ee8cc1Swenshuai.xi     UNUSED(eVOPSelOSD_MUX);
4381*53ee8cc1Swenshuai.xi }
4382*53ee8cc1Swenshuai.xi 
Hal_SC_IsOPMFetchPatch_Enable(void)4383*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_IsOPMFetchPatch_Enable(void)
4384*53ee8cc1Swenshuai.xi {
4385*53ee8cc1Swenshuai.xi     //Patch for Janus u01 and T4 U01/02: OPMFetch need +2
4386*53ee8cc1Swenshuai.xi     return FALSE;
4387*53ee8cc1Swenshuai.xi }
Hal_SC_Check_HNonLinearScaling(void * pInstance)4388*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_Check_HNonLinearScaling(void *pInstance)
4389*53ee8cc1Swenshuai.xi {
4390*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4391*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4392*53ee8cc1Swenshuai.xi     MS_U16 u16Offset = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_15_L)>>8);
4393*53ee8cc1Swenshuai.xi     MS_U16 u16MaxOffset = ((SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_07_L) & 0xFFFFFF)>>12);
4394*53ee8cc1Swenshuai.xi     //Non-Linear scaling Postive offset, the maximum offset is HPstRatio[23:12]
4395*53ee8cc1Swenshuai.xi     if(((u16Offset & BIT(7)) == 0) && (u16Offset > u16MaxOffset))
4396*53ee8cc1Swenshuai.xi     {
4397*53ee8cc1Swenshuai.xi         return FALSE;
4398*53ee8cc1Swenshuai.xi     }
4399*53ee8cc1Swenshuai.xi     return TRUE;
4400*53ee8cc1Swenshuai.xi }
4401*53ee8cc1Swenshuai.xi 
4402*53ee8cc1Swenshuai.xi //IP2 Pre-Filter enable
Hal_SC_IP2_PreFilter_Enable(void * pInstance,MS_BOOL bEnable)4403*53ee8cc1Swenshuai.xi void Hal_SC_IP2_PreFilter_Enable(void* pInstance, MS_BOOL bEnable)
4404*53ee8cc1Swenshuai.xi {
4405*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4406*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4407*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_48_L, (bEnable?BIT(15):0), BIT(15));
4408*53ee8cc1Swenshuai.xi }
4409*53ee8cc1Swenshuai.xi 
Hal_SC_Set_extra_fetch_line(void * pInstance,MS_U8 u8val)4410*53ee8cc1Swenshuai.xi void Hal_SC_Set_extra_fetch_line(void *pInstance, MS_U8 u8val)
4411*53ee8cc1Swenshuai.xi {
4412*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4413*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4414*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_17_L, ((MS_U16)(u8val & 0x0F))<<8, 0x0F00);
4415*53ee8cc1Swenshuai.xi }
4416*53ee8cc1Swenshuai.xi 
Hal_SC_Set_extra_adv_line(void * pInstance,MS_U8 u8val)4417*53ee8cc1Swenshuai.xi void Hal_SC_Set_extra_adv_line(void *pInstance, MS_U8 u8val)
4418*53ee8cc1Swenshuai.xi {
4419*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4420*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4421*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_17_L, ((MS_U16)(u8val & 0x0F))<<12, 0xF000);
4422*53ee8cc1Swenshuai.xi }
4423*53ee8cc1Swenshuai.xi 
HAL_SC_Set_FPLL_Limit(void * pInstance,MS_U32 * u32PllSet,MS_U32 u32LowBound,MS_U32 u32UpBound,MS_BOOL _bInFPLLDbgMode,MS_U32 _U32LimitD5D6D7)4424*53ee8cc1Swenshuai.xi void HAL_SC_Set_FPLL_Limit(void *pInstance, MS_U32 *u32PllSet, MS_U32 u32LowBound, MS_U32 u32UpBound, MS_BOOL _bInFPLLDbgMode, MS_U32 _U32LimitD5D6D7)
4425*53ee8cc1Swenshuai.xi {
4426*53ee8cc1Swenshuai.xi     MS_U32 u32LpllLimitLow, u32LpllLimitHigh;
4427*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4428*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4429*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4430*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4431*53ee8cc1Swenshuai.xi     //printf("Fpll_Limit: Set %lx, bound (%lx -> %lx)\n", *u32PllSet, u32UpBound, u32LowBound);
4432*53ee8cc1Swenshuai.xi 
4433*53ee8cc1Swenshuai.xi     if(_bInFPLLDbgMode)
4434*53ee8cc1Swenshuai.xi     {
4435*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(L_BK_LPLL(0x0D), 0x00, BIT(4));          // turn off 2 limit
4436*53ee8cc1Swenshuai.xi         if(!pXCResourcePrivate->stdrvXC_MVideo._SContext.bEnableFPLLManualDebug)
4437*53ee8cc1Swenshuai.xi         {
4438*53ee8cc1Swenshuai.xi             MDrv_Write3Byte(L_BK_LPLL(0x06), _U32LimitD5D6D7);
4439*53ee8cc1Swenshuai.xi         }
4440*53ee8cc1Swenshuai.xi     }
4441*53ee8cc1Swenshuai.xi     else
4442*53ee8cc1Swenshuai.xi     {
4443*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(L_BK_LPLL(0x0D), BIT(4), BIT(4));        // turn on 2 limit
4444*53ee8cc1Swenshuai.xi 
4445*53ee8cc1Swenshuai.xi         // check if u32PllSet out of range and also the FPLL limit
4446*53ee8cc1Swenshuai.xi         if (*u32PllSet <= u32LowBound)
4447*53ee8cc1Swenshuai.xi         {
4448*53ee8cc1Swenshuai.xi             *u32PllSet = u32LowBound;
4449*53ee8cc1Swenshuai.xi             gSrcInfo[MAIN_WINDOW].bEnableFPLL = FALSE;
4450*53ee8cc1Swenshuai.xi         }
4451*53ee8cc1Swenshuai.xi         else if (*u32PllSet >= u32UpBound)
4452*53ee8cc1Swenshuai.xi         {
4453*53ee8cc1Swenshuai.xi             *u32PllSet = u32UpBound;
4454*53ee8cc1Swenshuai.xi             gSrcInfo[MAIN_WINDOW].bEnableFPLL = FALSE;
4455*53ee8cc1Swenshuai.xi         }
4456*53ee8cc1Swenshuai.xi 
4457*53ee8cc1Swenshuai.xi         u32LpllLimitHigh = u32UpBound - *u32PllSet;
4458*53ee8cc1Swenshuai.xi         u32LpllLimitLow = *u32PllSet - u32LowBound - 1;
4459*53ee8cc1Swenshuai.xi 
4460*53ee8cc1Swenshuai.xi         //printf("Fpll set %lx, limit (high %lx, low %lx)\n", *u32PllSet, u32LpllLimitHigh, u32LpllLimitLow);
4461*53ee8cc1Swenshuai.xi 
4462*53ee8cc1Swenshuai.xi         if(!pXCResourcePrivate->stdrvXC_MVideo._SContext.bEnableFPLLManualDebug)
4463*53ee8cc1Swenshuai.xi         {
4464*53ee8cc1Swenshuai.xi             MDrv_Write3Byte(L_BK_LPLL(0x06), u32LpllLimitHigh);
4465*53ee8cc1Swenshuai.xi             MDrv_Write3Byte(L_BK_LPLL(0x08), u32LpllLimitLow);
4466*53ee8cc1Swenshuai.xi         }
4467*53ee8cc1Swenshuai.xi 
4468*53ee8cc1Swenshuai.xi         //printf("Fpll limit reg (high %lx, low %lx)\n", MDrv_Read4Byte(L_BK_LPLL(0x06)), MDrv_Read4Byte(L_BK_LPLL(0x08)));
4469*53ee8cc1Swenshuai.xi     }
4470*53ee8cc1Swenshuai.xi }
4471*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_Enable(void * pInstance,MS_BOOL bEn)4472*53ee8cc1Swenshuai.xi void Hal_XC_H3D_Enable(void *pInstance, MS_BOOL bEn)
4473*53ee8cc1Swenshuai.xi {
4474*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4475*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4476*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_70_L, (bEn<<15), (BIT(15)));
4477*53ee8cc1Swenshuai.xi }
4478*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_Input3DType(void * pInstance,E_XC_3D_INPUT_MODE e3DType)4479*53ee8cc1Swenshuai.xi void Hal_XC_H3D_Input3DType(void *pInstance, E_XC_3D_INPUT_MODE e3DType)
4480*53ee8cc1Swenshuai.xi {
4481*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4482*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4483*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_7B_L, (e3DType), (BIT(1) | BIT(0)));
4484*53ee8cc1Swenshuai.xi }
4485*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_Breakline_Enable(void * pInstance,MS_BOOL bEn)4486*53ee8cc1Swenshuai.xi void Hal_XC_H3D_Breakline_Enable(void *pInstance, MS_BOOL bEn)
4487*53ee8cc1Swenshuai.xi {
4488*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4489*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4490*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_7B_L, (bEn<<7), (BIT(7)));
4491*53ee8cc1Swenshuai.xi     if(bEn)
4492*53ee8cc1Swenshuai.xi     {
4493*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_7B_L, (8<<8), HBMASK);
4494*53ee8cc1Swenshuai.xi     }
4495*53ee8cc1Swenshuai.xi     else
4496*53ee8cc1Swenshuai.xi     {
4497*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_7B_L, (0<<8), HBMASK);
4498*53ee8cc1Swenshuai.xi     }
4499*53ee8cc1Swenshuai.xi }
4500*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_HDE(void * pInstance,MS_U16 u16Hde)4501*53ee8cc1Swenshuai.xi void Hal_XC_H3D_HDE(void *pInstance, MS_U16 u16Hde)
4502*53ee8cc1Swenshuai.xi {
4503*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4504*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4505*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_71_L, (u16Hde), 0x0FFF);
4506*53ee8cc1Swenshuai.xi }
4507*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_VDE_F0(MS_U16 u16Vde)4508*53ee8cc1Swenshuai.xi void Hal_XC_H3D_VDE_F0(MS_U16 u16Vde)
4509*53ee8cc1Swenshuai.xi {
4510*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_73_L, (u16Vde), 0x0FFF);
4511*53ee8cc1Swenshuai.xi }
4512*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_VDE_F2(MS_U16 u16Vde)4513*53ee8cc1Swenshuai.xi void Hal_XC_H3D_VDE_F2(MS_U16 u16Vde)
4514*53ee8cc1Swenshuai.xi {
4515*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_77_L, (u16Vde), 0x0FFF);
4516*53ee8cc1Swenshuai.xi }
4517*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_HBLANK(MS_U16 u16Hblank)4518*53ee8cc1Swenshuai.xi void Hal_XC_H3D_HBLANK(MS_U16 u16Hblank)
4519*53ee8cc1Swenshuai.xi {
4520*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_70_L, (u16Hblank), 0x03FF);
4521*53ee8cc1Swenshuai.xi }
4522*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_INIT_VBLANK(MS_U8 u8Vblank)4523*53ee8cc1Swenshuai.xi void Hal_XC_H3D_INIT_VBLANK(MS_U8 u8Vblank)
4524*53ee8cc1Swenshuai.xi {
4525*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_72_L, (u8Vblank), LBMASK);
4526*53ee8cc1Swenshuai.xi }
4527*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_VBLANK0(MS_U8 u8Vblank)4528*53ee8cc1Swenshuai.xi void Hal_XC_H3D_VBLANK0(MS_U8 u8Vblank)
4529*53ee8cc1Swenshuai.xi {
4530*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_74_L, (u8Vblank), LBMASK);
4531*53ee8cc1Swenshuai.xi }
4532*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_VBLANK1(MS_U8 u8Vblank)4533*53ee8cc1Swenshuai.xi void Hal_XC_H3D_VBLANK1(MS_U8 u8Vblank)
4534*53ee8cc1Swenshuai.xi {
4535*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_76_L, (u8Vblank), LBMASK);
4536*53ee8cc1Swenshuai.xi }
4537*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_VBLANK2(MS_U8 u8Vblank)4538*53ee8cc1Swenshuai.xi void Hal_XC_H3D_VBLANK2(MS_U8 u8Vblank)
4539*53ee8cc1Swenshuai.xi {
4540*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_78_L, (u8Vblank), LBMASK);
4541*53ee8cc1Swenshuai.xi }
4542*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_VSYNC_WIDTH(MS_U8 u8Width)4543*53ee8cc1Swenshuai.xi void Hal_XC_H3D_VSYNC_WIDTH(MS_U8 u8Width)
4544*53ee8cc1Swenshuai.xi {
4545*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_7A_L, (u8Width), 0x001F);
4546*53ee8cc1Swenshuai.xi }
4547*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_VSYNC_POSITION(MS_U16 u16Position)4548*53ee8cc1Swenshuai.xi void Hal_XC_H3D_VSYNC_POSITION(MS_U16 u16Position)
4549*53ee8cc1Swenshuai.xi {
4550*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_7A_L, (u16Position), HBMASK);
4551*53ee8cc1Swenshuai.xi }
4552*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_SELECT_REGEN_TIMING(MS_BOOL bEn)4553*53ee8cc1Swenshuai.xi void Hal_XC_H3D_SELECT_REGEN_TIMING(MS_BOOL bEn)
4554*53ee8cc1Swenshuai.xi {
4555*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(0, REG_SC_BK01_7B_L, (bEn<<4), (BIT(4)));
4556*53ee8cc1Swenshuai.xi }
4557*53ee8cc1Swenshuai.xi 
Hal_XC_H3D_LR_Toggle_Enable(void * pInstance,MS_BOOL bEn,MS_BOOL b2DTo3D,MS_BOOL bSkipDefaultLRFlag)4558*53ee8cc1Swenshuai.xi void Hal_XC_H3D_LR_Toggle_Enable(void *pInstance, MS_BOOL bEn, MS_BOOL b2DTo3D, MS_BOOL bSkipDefaultLRFlag)
4559*53ee8cc1Swenshuai.xi {
4560*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4561*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4562*53ee8cc1Swenshuai.xi     if(!bSkipDefaultLRFlag)
4563*53ee8cc1Swenshuai.xi     {
4564*53ee8cc1Swenshuai.xi         if(bEn)
4565*53ee8cc1Swenshuai.xi         {
4566*53ee8cc1Swenshuai.xi             //Enanble I2S_IN_SD to send out lr flag
4567*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(0x101E24, 0x00, BIT(4)|BIT(5)|BIT(6));
4568*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(0x101EC9, 0x00, BIT(0)|BIT(1));
4569*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(0x101EDC, 0x00, BIT(2));
4570*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(0x101EB3, 0xC0, 0xC0);
4571*53ee8cc1Swenshuai.xi             // after timing change , hw must do  L/R alignment,BK12, 33[2]=1 to enable it.
4572*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_33_L, BIT(2), BIT(2));
4573*53ee8cc1Swenshuai.xi         }
4574*53ee8cc1Swenshuai.xi         else
4575*53ee8cc1Swenshuai.xi         {
4576*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(0x101EB3, 0x00, 0xC0);
4577*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_33_L, 0, BIT(2));
4578*53ee8cc1Swenshuai.xi         }
4579*53ee8cc1Swenshuai.xi     }
4580*53ee8cc1Swenshuai.xi 
4581*53ee8cc1Swenshuai.xi     if(b2DTo3D)
4582*53ee8cc1Swenshuai.xi     {
4583*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_24_L, BIT(11), BIT(0)|BIT(1)|BIT(11));        //Output 3D L/R selection
4584*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_30_L, (bEn<<8), (BIT(8))); //enable Enable free run 3D LR flag
4585*53ee8cc1Swenshuai.xi     }
4586*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_33_L, (bEn<<1), (BIT(1)));
4587*53ee8cc1Swenshuai.xi }
4588*53ee8cc1Swenshuai.xi 
HAL_XC_H3D_OPM_SBYS_PIP_Enable(void * pInstance,MS_BOOL bEn)4589*53ee8cc1Swenshuai.xi void HAL_XC_H3D_OPM_SBYS_PIP_Enable(void *pInstance, MS_BOOL bEn)
4590*53ee8cc1Swenshuai.xi {
4591*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4592*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4593*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_34_L, (bEn<<7), (BIT(7)));
4594*53ee8cc1Swenshuai.xi }
4595*53ee8cc1Swenshuai.xi 
Hal_SC_enable_cursor_report(void * pInstance,MS_BOOL bEn)4596*53ee8cc1Swenshuai.xi void Hal_SC_enable_cursor_report(void *pInstance, MS_BOOL bEn)
4597*53ee8cc1Swenshuai.xi {
4598*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4599*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4600*53ee8cc1Swenshuai.xi     if(bEn)
4601*53ee8cc1Swenshuai.xi     {
4602*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, BIT(8) | BIT(10), BIT(8) | BIT(10));
4603*53ee8cc1Swenshuai.xi     }
4604*53ee8cc1Swenshuai.xi     else
4605*53ee8cc1Swenshuai.xi     {
4606*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, 0x00 , BIT(8) | BIT(10));
4607*53ee8cc1Swenshuai.xi     }
4608*53ee8cc1Swenshuai.xi }
4609*53ee8cc1Swenshuai.xi 
Hal_SC_get_pixel_rgb(void * pInstance,XC_Get_Pixel_RGB * pData)4610*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_get_pixel_rgb(void *pInstance, XC_Get_Pixel_RGB *pData)
4611*53ee8cc1Swenshuai.xi {
4612*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4613*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4614*53ee8cc1Swenshuai.xi     MS_BOOL bret = TRUE;
4615*53ee8cc1Swenshuai.xi 
4616*53ee8cc1Swenshuai.xi     switch(pData->enStage)
4617*53ee8cc1Swenshuai.xi     {
4618*53ee8cc1Swenshuai.xi     case E_XC_GET_PIXEL_STAGE_AFTER_DLC:
4619*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(0, REG_SC_BK0F_46_L, 0x00 , BMASK(3:0));
4620*53ee8cc1Swenshuai.xi         bret = FALSE;//Not support, Must set to stage C for HW issue
4621*53ee8cc1Swenshuai.xi         break;
4622*53ee8cc1Swenshuai.xi     case E_XC_GET_PIXEL_STAGE_PRE_GAMMA:
4623*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(0, REG_SC_BK0F_46_L, 0x08, BMASK(3:0));
4624*53ee8cc1Swenshuai.xi         bret = FALSE;//Not support, Must set to stage C for HW issue
4625*53ee8cc1Swenshuai.xi         break;
4626*53ee8cc1Swenshuai.xi     case E_XC_GET_PIXEL_STAGE_AFTER_OSD:
4627*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_18_L, 0x0D, 0xFF);
4628*53ee8cc1Swenshuai.xi         break;
4629*53ee8cc1Swenshuai.xi     default:
4630*53ee8cc1Swenshuai.xi         bret = FALSE;
4631*53ee8cc1Swenshuai.xi         break;
4632*53ee8cc1Swenshuai.xi     }
4633*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4634*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4635*53ee8cc1Swenshuai.xi     if(bret)
4636*53ee8cc1Swenshuai.xi     {
4637*53ee8cc1Swenshuai.xi         // Enable
4638*53ee8cc1Swenshuai.xi         if(!pXCResourcePrivate->stdrvXC_MVideo.s_bKeepPixelPointerAppear)
4639*53ee8cc1Swenshuai.xi         {
4640*53ee8cc1Swenshuai.xi             Hal_SC_enable_cursor_report(pInstance, TRUE);
4641*53ee8cc1Swenshuai.xi         }
4642*53ee8cc1Swenshuai.xi 
4643*53ee8cc1Swenshuai.xi         // Initial position (x,y)  Set point you want to read.
4644*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_19_L, pData->u16x);
4645*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_1A_L, pData->u16y);
4646*53ee8cc1Swenshuai.xi 
4647*53ee8cc1Swenshuai.xi         //SW trigger for reading
4648*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_18_L, BIT(8), BIT(8));
4649*53ee8cc1Swenshuai.xi         MsOS_DelayTask(5);
4650*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_18_L, 0, BIT(8));
4651*53ee8cc1Swenshuai.xi         MsOS_DelayTask(32);  // Must wait .
4652*53ee8cc1Swenshuai.xi 
4653*53ee8cc1Swenshuai.xi         pData->u32r = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_2D_L);
4654*53ee8cc1Swenshuai.xi         pData->u32g = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_2E_L);
4655*53ee8cc1Swenshuai.xi         pData->u32b = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_2F_L);
4656*53ee8cc1Swenshuai.xi 
4657*53ee8cc1Swenshuai.xi         // Disable
4658*53ee8cc1Swenshuai.xi         if(!pXCResourcePrivate->stdrvXC_MVideo.s_bKeepPixelPointerAppear)
4659*53ee8cc1Swenshuai.xi         {
4660*53ee8cc1Swenshuai.xi             Hal_SC_enable_cursor_report(pInstance, FALSE);
4661*53ee8cc1Swenshuai.xi         }
4662*53ee8cc1Swenshuai.xi     }
4663*53ee8cc1Swenshuai.xi     return bret;
4664*53ee8cc1Swenshuai.xi }
4665*53ee8cc1Swenshuai.xi 
Hal_SC_SetOPWriteOff(void * pInstance,MS_BOOL bEna)4666*53ee8cc1Swenshuai.xi void Hal_SC_SetOPWriteOff(void *pInstance, MS_BOOL bEna)
4667*53ee8cc1Swenshuai.xi {
4668*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4669*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4670*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4671*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4672*53ee8cc1Swenshuai.xi 
4673*53ee8cc1Swenshuai.xi     MS_BOOL u16OldReg = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_27_L, BIT(0)));
4674*53ee8cc1Swenshuai.xi 
4675*53ee8cc1Swenshuai.xi     #if (HW_DESIGN_4K2K_VER == 4)
4676*53ee8cc1Swenshuai.xi     // For monaco new chip design, only Legacy mode need to control OPW
4677*53ee8cc1Swenshuai.xi     // If Monaco mode, always keep OPW is on
4678*53ee8cc1Swenshuai.xi     if ((psXCInstPri->u32DeviceID==0)
4679*53ee8cc1Swenshuai.xi        && !(pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_Init_Misc.u32MISC_A & E_XC_INIT_MISC_A_LEGACY_MODE))
4680*53ee8cc1Swenshuai.xi     {
4681*53ee8cc1Swenshuai.xi         bEna = FALSE;
4682*53ee8cc1Swenshuai.xi     }
4683*53ee8cc1Swenshuai.xi     #endif
4684*53ee8cc1Swenshuai.xi 
4685*53ee8cc1Swenshuai.xi     if(u16OldReg != bEna)
4686*53ee8cc1Swenshuai.xi     {
4687*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_27_L, bEna, BIT(0));//This will stop OPW only, OP memory write request still on
4688*53ee8cc1Swenshuai.xi     }
4689*53ee8cc1Swenshuai.xi }
4690*53ee8cc1Swenshuai.xi 
4691*53ee8cc1Swenshuai.xi 
Hal_SC_GetOPWriteOff(void * pInstance)4692*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_GetOPWriteOff(void *pInstance)
4693*53ee8cc1Swenshuai.xi {
4694*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4695*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4696*53ee8cc1Swenshuai.xi     return (MS_BOOL)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_27_L, BIT(0));
4697*53ee8cc1Swenshuai.xi }
4698*53ee8cc1Swenshuai.xi 
Hal_SC_Detect_RequestFBL_Mode(void * pInstance)4699*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_Detect_RequestFBL_Mode(void *pInstance)
4700*53ee8cc1Swenshuai.xi {
4701*53ee8cc1Swenshuai.xi     UNUSED(pInstance);
4702*53ee8cc1Swenshuai.xi     return ENABLE_REQUEST_FBL;
4703*53ee8cc1Swenshuai.xi }
4704*53ee8cc1Swenshuai.xi 
Hal_SC_Set_RequestFBL_Mode(void * pInstance,MS_BOOL bEn)4705*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_Set_RequestFBL_Mode(void *pInstance, MS_BOOL bEn)
4706*53ee8cc1Swenshuai.xi {
4707*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4708*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4709*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4710*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4711*53ee8cc1Swenshuai.xi 
4712*53ee8cc1Swenshuai.xi     if(IsSrcTypeDTV(gSrcInfo[MAIN_WINDOW].enInputSourceType) || (IsSrcTypeStorage(gSrcInfo[MAIN_WINDOW].enInputSourceType)))//MVOP source
4713*53ee8cc1Swenshuai.xi     {
4714*53ee8cc1Swenshuai.xi         gSrcInfo[MAIN_WINDOW].Status2.bMVOPHSKMode = bEn;
4715*53ee8cc1Swenshuai.xi 
4716*53ee8cc1Swenshuai.xi     	//SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_1C_L, bEn?BIT(14):0 , BIT(14)); //reg_short_1line_disable  1:Disable 0:Enable
4717*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_10_L, bEn?(BIT(0)|BIT(2)):0 , BIT(0)|BIT(2)); // Bit0: Enable HSK mode Bit2:reg_ip2_vs_sel 0:ip1 1:mvop
4718*53ee8cc1Swenshuai.xi 
4719*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_5D_L, 0x1D2A , 0xFFFF);
4720*53ee8cc1Swenshuai.xi         Hal_XC_MLoad_set_trig_p(pInstance, 0x14, 0x18);
4721*53ee8cc1Swenshuai.xi 
4722*53ee8cc1Swenshuai.xi         //this feature conflicts with HSK mode
4723*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_45_L, 0x0000, 0x9FFF); // edclk pd control start and edclk pd control enable
4724*53ee8cc1Swenshuai.xi     }
4725*53ee8cc1Swenshuai.xi     else
4726*53ee8cc1Swenshuai.xi     {
4727*53ee8cc1Swenshuai.xi         gSrcInfo[MAIN_WINDOW].Status2.bMVOPHSKMode = FALSE;
4728*53ee8cc1Swenshuai.xi 
4729*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_1C_L, 0x0 , BIT(14)); //reg_short_1line_disable  1:Disable 0:Enable
4730*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_10_L, 0x0 , BIT(0)|BIT(2)); // Disable HSK mode Bit2:reg_ip2_vs_sel 0:ip1 1:mvop
4731*53ee8cc1Swenshuai.xi     }
4732*53ee8cc1Swenshuai.xi 
4733*53ee8cc1Swenshuai.xi #ifdef UFO_XC_HDR
4734*53ee8cc1Swenshuai.xi #if (UFO_XC_HDR_VERSION == 2)
4735*53ee8cc1Swenshuai.xi     if (IsSrcTypeHDMI(gSrcInfo[MAIN_WINDOW].enInputSourceType))
4736*53ee8cc1Swenshuai.xi     {
4737*53ee8cc1Swenshuai.xi         // enable hdr dma seamless with rfbl mode on maserati
4738*53ee8cc1Swenshuai.xi         MApi_XC_W2BYTEMSK(REG_SC_BK79_03_L, 1, BIT(15));
4739*53ee8cc1Swenshuai.xi     }
4740*53ee8cc1Swenshuai.xi #endif
4741*53ee8cc1Swenshuai.xi #endif
4742*53ee8cc1Swenshuai.xi 
4743*53ee8cc1Swenshuai.xi     return ENABLE_REQUEST_FBL;
4744*53ee8cc1Swenshuai.xi }
4745*53ee8cc1Swenshuai.xi 
Hal_XC_SetFrameColor(void * pInstance,MS_U32 u32aRGB)4746*53ee8cc1Swenshuai.xi void Hal_XC_SetFrameColor(void *pInstance, MS_U32 u32aRGB)
4747*53ee8cc1Swenshuai.xi {
4748*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4749*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4750*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L,  (u32aRGB >> 8),0xFF00);            ///< R
4751*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_1A_L,  (u32aRGB >> 8),0x00FF);            ///< G
4752*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_1A_L,  (u32aRGB << 8),0xFF00);            ///< B
4753*53ee8cc1Swenshuai.xi }
Hal_SC_getVSyncWidth(void * pInstance,SCALER_WIN eWindow)4754*53ee8cc1Swenshuai.xi MS_U8 Hal_SC_getVSyncWidth(void *pInstance, SCALER_WIN eWindow)
4755*53ee8cc1Swenshuai.xi {
4756*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4757*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4758*53ee8cc1Swenshuai.xi     MS_U8 u8val = 0;
4759*53ee8cc1Swenshuai.xi 
4760*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
4761*53ee8cc1Swenshuai.xi     {
4762*53ee8cc1Swenshuai.xi         u8val = ((SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_22_L) & 0xFF00) >> 8);
4763*53ee8cc1Swenshuai.xi     }
4764*53ee8cc1Swenshuai.xi     else
4765*53ee8cc1Swenshuai.xi     {
4766*53ee8cc1Swenshuai.xi     }
4767*53ee8cc1Swenshuai.xi     return u8val;
4768*53ee8cc1Swenshuai.xi }
4769*53ee8cc1Swenshuai.xi 
Hal_SC_Set_OSDLayer(void * pInstance,E_VOP_OSD_LAYER_SEL eVOPOSDLayer,SCALER_WIN eWindow)4770*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_Set_OSDLayer(void *pInstance, E_VOP_OSD_LAYER_SEL  eVOPOSDLayer, SCALER_WIN eWindow)
4771*53ee8cc1Swenshuai.xi {
4772*53ee8cc1Swenshuai.xi     return E_APIXC_RET_FAIL;
4773*53ee8cc1Swenshuai.xi }
4774*53ee8cc1Swenshuai.xi 
Hal_SC_Get_OSDLayer(void * pInstance,SCALER_WIN eWindow)4775*53ee8cc1Swenshuai.xi E_VOP_OSD_LAYER_SEL Hal_SC_Get_OSDLayer(void *pInstance, SCALER_WIN eWindow)
4776*53ee8cc1Swenshuai.xi {
4777*53ee8cc1Swenshuai.xi     //do nothing
4778*53ee8cc1Swenshuai.xi     return E_VOP_LAYER_RESERVED;
4779*53ee8cc1Swenshuai.xi }
4780*53ee8cc1Swenshuai.xi 
Hal_SC_Set_VideoAlpha(void * pInstance,MS_U8 u8Val,SCALER_WIN eWindow)4781*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_Set_VideoAlpha(void *pInstance, MS_U8 u8Val, SCALER_WIN eWindow)
4782*53ee8cc1Swenshuai.xi {
4783*53ee8cc1Swenshuai.xi     //do nothing
4784*53ee8cc1Swenshuai.xi     return E_APIXC_RET_FAIL;
4785*53ee8cc1Swenshuai.xi }
4786*53ee8cc1Swenshuai.xi 
Hal_SC_Get_VideoAlpha(void * pInstance,MS_U8 * pu8Val,SCALER_WIN eWindow)4787*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_Get_VideoAlpha(void *pInstance, MS_U8 *pu8Val, SCALER_WIN eWindow)
4788*53ee8cc1Swenshuai.xi {
4789*53ee8cc1Swenshuai.xi     *pu8Val += 0;
4790*53ee8cc1Swenshuai.xi 
4791*53ee8cc1Swenshuai.xi     //do nothing
4792*53ee8cc1Swenshuai.xi     return E_APIXC_RET_FAIL;
4793*53ee8cc1Swenshuai.xi }
4794*53ee8cc1Swenshuai.xi 
Hal_XC_ClearScalingFactorForInternalCalib(void * pInstance)4795*53ee8cc1Swenshuai.xi void Hal_XC_ClearScalingFactorForInternalCalib(void *pInstance)
4796*53ee8cc1Swenshuai.xi {
4797*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4798*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4799*53ee8cc1Swenshuai.xi     //MDrv_WriteRegBit(H_BK_SCMI(0x09), FALSE, BIT(7));
4800*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_04_L, 0x0000);   // H pre-scaling
4801*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_05_L, 0xC010);   // H pre-scaling
4802*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_08_L, 0x0000);   // V pre-scaling
4803*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_09_L, 0x0000);   // V pre-scaling
4804*53ee8cc1Swenshuai.xi 
4805*53ee8cc1Swenshuai.xi     //HVSP
4806*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_07_L, 0x0000);  // H post-scaling
4807*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_08_L, 0x0100);  // H post-scaling
4808*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_09_L, 0x0000);  // V post-scaling
4809*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK23_0A_L, 0x0100);  // V post-scaling
4810*53ee8cc1Swenshuai.xi }
4811*53ee8cc1Swenshuai.xi 
MHal_SC_cal_usedgain_to_reggain(MS_U32 u16UsedGain_x32)4812*53ee8cc1Swenshuai.xi MS_U8 MHal_SC_cal_usedgain_to_reggain(MS_U32 u16UsedGain_x32)
4813*53ee8cc1Swenshuai.xi {
4814*53ee8cc1Swenshuai.xi     MS_U8 u8Value = 0;
4815*53ee8cc1Swenshuai.xi 
4816*53ee8cc1Swenshuai.xi     if      (u16UsedGain_x32 >=65536) u8Value = 16;
4817*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=32768) u8Value = 15;
4818*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=16384) u8Value = 14;
4819*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >= 8192) u8Value = 13;
4820*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >= 4096) u8Value = 12;
4821*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >= 2048) u8Value = 11;
4822*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >= 1024) u8Value = 10;
4823*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=  512) u8Value = 9;
4824*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=  256) u8Value = 8;
4825*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=  128) u8Value = 7;
4826*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=   64) u8Value = 6;
4827*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=   32) u8Value = 5;
4828*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=   16) u8Value = 4;
4829*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=    8) u8Value = 3;
4830*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=    4) u8Value = 2;
4831*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=    2) u8Value = 1;
4832*53ee8cc1Swenshuai.xi     else if (u16UsedGain_x32 >=    1) u8Value = 0;
4833*53ee8cc1Swenshuai.xi     else {
4834*53ee8cc1Swenshuai.xi         u8Value = 0;
4835*53ee8cc1Swenshuai.xi     }
4836*53ee8cc1Swenshuai.xi 
4837*53ee8cc1Swenshuai.xi     u8Value += IPGAIN_REFACTOR;
4838*53ee8cc1Swenshuai.xi 
4839*53ee8cc1Swenshuai.xi     return u8Value;
4840*53ee8cc1Swenshuai.xi }
4841*53ee8cc1Swenshuai.xi 
Hal_SC_OP2VOPDESel(void * pInstance,E_OP2VOP_DE_SEL eVopDESel)4842*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_OP2VOPDESel(void *pInstance, E_OP2VOP_DE_SEL eVopDESel)
4843*53ee8cc1Swenshuai.xi {
4844*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4845*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4846*53ee8cc1Swenshuai.xi     //Select op2vop de, for DWIN capture etc
4847*53ee8cc1Swenshuai.xi     if(eVopDESel == E_OP2VOPDE_WHOLEFRAME_WITHOSD)
4848*53ee8cc1Swenshuai.xi     {
4849*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_6B_L, ((MS_U16)(E_OP2VOPDE_WHOLEFRAME) << 12), (BIT(12)+BIT(13)));
4850*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_23_L, BIT(15), BIT(15));
4851*53ee8cc1Swenshuai.xi     }
4852*53ee8cc1Swenshuai.xi     else
4853*53ee8cc1Swenshuai.xi     {
4854*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_23_L, 0, BIT(15));
4855*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_6B_L, (eVopDESel << 12), (BIT(12)+BIT(13)));
4856*53ee8cc1Swenshuai.xi     }
4857*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
4858*53ee8cc1Swenshuai.xi }
4859*53ee8cc1Swenshuai.xi 
Hal_XC_SVOutput_GetCaps(void * pInstance)4860*53ee8cc1Swenshuai.xi MS_BOOL Hal_XC_SVOutput_GetCaps(void *pInstance)
4861*53ee8cc1Swenshuai.xi {
4862*53ee8cc1Swenshuai.xi     return FALSE;
4863*53ee8cc1Swenshuai.xi }
4864*53ee8cc1Swenshuai.xi 
4865*53ee8cc1Swenshuai.xi /////Add for FRC
_MHal_SC_Flock_Caculate_LPLLSet(MS_U32 u32Dclk)4866*53ee8cc1Swenshuai.xi void _MHal_SC_Flock_Caculate_LPLLSet(MS_U32 u32Dclk)
4867*53ee8cc1Swenshuai.xi {
4868*53ee8cc1Swenshuai.xi     MS_U64 ldPllSet = 0xff;
4869*53ee8cc1Swenshuai.xi 
4870*53ee8cc1Swenshuai.xi     ldPllSet = ((MS_U64)320 * 524288 * 10000000 + (u32Dclk>>1));  // LPLL BK01 LPLL Set
4871*53ee8cc1Swenshuai.xi     do_div(ldPllSet, u32Dclk);
4872*53ee8cc1Swenshuai.xi 
4873*53ee8cc1Swenshuai.xi     LPLL_BK_STORE;
4874*53ee8cc1Swenshuai.xi     LPLL_BK_SWITCH(0x01);
4875*53ee8cc1Swenshuai.xi     W4BYTE(L_BK_LPLL(0x0F), (MS_U32)ldPllSet);
4876*53ee8cc1Swenshuai.xi     LPLL_BK_RESTORE;
4877*53ee8cc1Swenshuai.xi }
4878*53ee8cc1Swenshuai.xi 
_MHal_SC_Set_LPLL_Limit(MS_U32 u32LpllLimitHigh,MS_U32 u32LpllLimitLow,MS_U8 u8Lpll_bank)4879*53ee8cc1Swenshuai.xi void _MHal_SC_Set_LPLL_Limit(MS_U32 u32LpllLimitHigh, MS_U32 u32LpllLimitLow, MS_U8 u8Lpll_bank)
4880*53ee8cc1Swenshuai.xi {
4881*53ee8cc1Swenshuai.xi     //printf("Fpll_Limit: Set %lx, bound (%lx -> %lx)\n", *u32PllSet, u32UpBound, u32LowBound);
4882*53ee8cc1Swenshuai.xi     LPLL_BK_STORE;
4883*53ee8cc1Swenshuai.xi     LPLL_BK_SWITCH(u8Lpll_bank);
4884*53ee8cc1Swenshuai.xi 
4885*53ee8cc1Swenshuai.xi 
4886*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(L_BK_LPLL(0x0D), BIT(4), BIT(4));        // turn on 2 limit
4887*53ee8cc1Swenshuai.xi 
4888*53ee8cc1Swenshuai.xi     //printf("Fpll set %lx, limit (high %lx, low %lx)\n", *u32PllSet, u32LpllLimitHigh, u32LpllLimitLow);
4889*53ee8cc1Swenshuai.xi     MDrv_Write3Byte(L_BK_LPLL(0x06), u32LpllLimitHigh);
4890*53ee8cc1Swenshuai.xi     MDrv_Write3Byte(L_BK_LPLL(0x08), u32LpllLimitLow);
4891*53ee8cc1Swenshuai.xi 
4892*53ee8cc1Swenshuai.xi     //printf("Fpll limit reg (high %lx, low %lx)\n", MDrv_Read4Byte(L_BK_LPLL(0x06)), MDrv_Read4Byte(L_BK_LPLL(0x08)));
4893*53ee8cc1Swenshuai.xi 
4894*53ee8cc1Swenshuai.xi     LPLL_BK_RESTORE;
4895*53ee8cc1Swenshuai.xi }
4896*53ee8cc1Swenshuai.xi #define LVDS_FRC_CLOCK_MHZ  320
_MHal_SC_Flock_Set_IGainPGain(void * pInstance,MS_U8 u8FRC_Out,MS_U16 u16OutputVfreqAfterFRC,MS_U16 u16Htt,MS_U16 u16Vtt)4897*53ee8cc1Swenshuai.xi void _MHal_SC_Flock_Set_IGainPGain(void *pInstance, MS_U8 u8FRC_Out, MS_U16 u16OutputVfreqAfterFRC, MS_U16 u16Htt, MS_U16 u16Vtt)
4898*53ee8cc1Swenshuai.xi {
4899*53ee8cc1Swenshuai.xi     MS_U32  u32dclk=0;
4900*53ee8cc1Swenshuai.xi     MS_U8   u8GainI, u8GainP;
4901*53ee8cc1Swenshuai.xi     MS_U64  u64Div_Factor;
4902*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
4903*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
4904*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
4905*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
4906*53ee8cc1Swenshuai.xi 
4907*53ee8cc1Swenshuai.xi     //check parameter valid, avoiding the diving zero failure
4908*53ee8cc1Swenshuai.xi     if(0 == u8FRC_Out)
4909*53ee8cc1Swenshuai.xi     {
4910*53ee8cc1Swenshuai.xi         u8FRC_Out = 1;
4911*53ee8cc1Swenshuai.xi     }
4912*53ee8cc1Swenshuai.xi 
4913*53ee8cc1Swenshuai.xi     u32dclk = (MS_U32)(u16Vtt * u16Htt * u8FRC_Out);
4914*53ee8cc1Swenshuai.xi     //u64Div_Factor = (MS_U64)LVDS_FRC_CLOCK_MHZ*524288*1000000/pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.u32XTAL_Clock;
4915*53ee8cc1Swenshuai.xi     u64Div_Factor = (MS_U64)LVDS_FRC_CLOCK_MHZ*524288*1000000;
4916*53ee8cc1Swenshuai.xi     do_div(u64Div_Factor, pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.u32XTAL_Clock);
4917*53ee8cc1Swenshuai.xi     do_div(u64Div_Factor, (MS_U32)u32dclk * 8);
4918*53ee8cc1Swenshuai.xi 
4919*53ee8cc1Swenshuai.xi     u8GainI = MHal_SC_cal_usedgain_to_reggain(u64Div_Factor);
4920*53ee8cc1Swenshuai.xi 
4921*53ee8cc1Swenshuai.xi     if((u8FRC_Out == 5)&&(u64Div_Factor==0))
4922*53ee8cc1Swenshuai.xi     {
4923*53ee8cc1Swenshuai.xi         //24 to 60Hz, because the SW can't get the real value by log table
4924*53ee8cc1Swenshuai.xi         u8GainI = 1;
4925*53ee8cc1Swenshuai.xi 
4926*53ee8cc1Swenshuai.xi         u8GainI += 2;
4927*53ee8cc1Swenshuai.xi     }
4928*53ee8cc1Swenshuai.xi 
4929*53ee8cc1Swenshuai.xi     u8GainP = u8GainI+1;
4930*53ee8cc1Swenshuai.xi     if((u8FRC_Out >= 2) && (u8GainP == u8GainI))
4931*53ee8cc1Swenshuai.xi     {
4932*53ee8cc1Swenshuai.xi         u8GainP++;
4933*53ee8cc1Swenshuai.xi     }
4934*53ee8cc1Swenshuai.xi 
4935*53ee8cc1Swenshuai.xi     LPLL_BK_STORE;
4936*53ee8cc1Swenshuai.xi     LPLL_BK_SWITCH(0x01);
4937*53ee8cc1Swenshuai.xi     MDrv_WriteByte(H_BK_LPLL(0x0B), (u8GainP<<4)|u8GainI);  //Gain
4938*53ee8cc1Swenshuai.xi     LPLL_BK_RESTORE;
4939*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETTIMING, "i_Gain= 0x%x (%u)\n", (MS_U32)u64Div_Factor, (MS_U32)u64Div_Factor)
4940*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETTIMING, "REG_IGain= 0x%x (%u)\n", u8GainI, u8GainI)
4941*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETTIMING, "REG_PGain= 0x%x (%u)\n", u8GainP, u8GainP)
4942*53ee8cc1Swenshuai.xi }
4943*53ee8cc1Swenshuai.xi 
4944*53ee8cc1Swenshuai.xi 
_MHal_SC_Flock_Set_LPLL_Enable(E_XC_FLOCK_TYPE eFlock_type)4945*53ee8cc1Swenshuai.xi void _MHal_SC_Flock_Set_LPLL_Enable(E_XC_FLOCK_TYPE eFlock_type)
4946*53ee8cc1Swenshuai.xi {
4947*53ee8cc1Swenshuai.xi     MS_BOOL bDiv_en = DISABLE;
4948*53ee8cc1Swenshuai.xi 
4949*53ee8cc1Swenshuai.xi     switch(eFlock_type)
4950*53ee8cc1Swenshuai.xi     {
4951*53ee8cc1Swenshuai.xi         case E_XC_FLOCK_DIV_ON:
4952*53ee8cc1Swenshuai.xi             bDiv_en = ENABLE;
4953*53ee8cc1Swenshuai.xi         break;
4954*53ee8cc1Swenshuai.xi 
4955*53ee8cc1Swenshuai.xi         case E_XC_FLOCK_FPLL_ON:
4956*53ee8cc1Swenshuai.xi         case E_XC_FLOCK_DIV_OFF:
4957*53ee8cc1Swenshuai.xi         default:
4958*53ee8cc1Swenshuai.xi         break;
4959*53ee8cc1Swenshuai.xi     }
4960*53ee8cc1Swenshuai.xi 
4961*53ee8cc1Swenshuai.xi     LPLL_BK_STORE;
4962*53ee8cc1Swenshuai.xi     LPLL_BK_SWITCH(0x01);
4963*53ee8cc1Swenshuai.xi     MDrv_Write2ByteMask(L_BK_LPLL(0x7F), bDiv_en?BIT(8):0, BIT(8));
4964*53ee8cc1Swenshuai.xi     LPLL_BK_RESTORE;
4965*53ee8cc1Swenshuai.xi 
4966*53ee8cc1Swenshuai.xi }
4967*53ee8cc1Swenshuai.xi 
MHal_CLKGEN_FRC_Init(MS_U8 u8LPLL_Mode)4968*53ee8cc1Swenshuai.xi void MHal_CLKGEN_FRC_Init(MS_U8 u8LPLL_Mode)
4969*53ee8cc1Swenshuai.xi {
4970*53ee8cc1Swenshuai.xi     //Patch for MSTV_TOOL to R/W FRC base address
4971*53ee8cc1Swenshuai.xi     MDrv_WriteByte(0x103C0E, 0x02);
4972*53ee8cc1Swenshuai.xi 
4973*53ee8cc1Swenshuai.xi     #if 0 // Move into Panel driver
4974*53ee8cc1Swenshuai.xi     // Enable CLK_DOT_MINI
4975*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x56), 0x0004, 0x000C); // FIFO_CLK
4976*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x56), 0x0000, 0x0002); // Not Invert
4977*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x56), 0x0000, 0x0001); // Enable clock
4978*53ee8cc1Swenshuai.xi 
4979*53ee8cc1Swenshuai.xi     // Enable CLK_DOT_MINI_PRE
4980*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x56), 0x0400, 0x0C00); // FIFO_CLK
4981*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x56), 0x0000, 0x0200); // Not Invert
4982*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x56), 0x0000, 0x0100); // Enable clock
4983*53ee8cc1Swenshuai.xi     #endif
4984*53ee8cc1Swenshuai.xi 
4985*53ee8cc1Swenshuai.xi     // Enable CLK_R2_FRC
4986*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x30), 0x0000, 0x000C); // 216 MHz
4987*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x30), 0x0000, 0x0002); // Not Invert
4988*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x30), 0x0000, 0x0101); // Enable clock
4989*53ee8cc1Swenshuai.xi 
4990*53ee8cc1Swenshuai.xi     // Enable CLK_MCU_FRC
4991*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x30), 0x0000, 0x0C00); // 216 MHz
4992*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x30), 0x0000, 0x0200); // Not Invert
4993*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x30), 0x0000, 0x0100); // Enable clock
4994*53ee8cc1Swenshuai.xi 
4995*53ee8cc1Swenshuai.xi     // Enable CLK_ODCLK_FRC
4996*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x31), 0x0000, 0x0C00); // CLK_LPLL
4997*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x31), 0x0000, 0x0200); // Not Invert
4998*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x31), 0x0000, 0x0100); // Enable clock
4999*53ee8cc1Swenshuai.xi 
5000*53ee8cc1Swenshuai.xi     #if 0 // Move into panel driver
5001*53ee8cc1Swenshuai.xi     // Enable CLK_TX_MOD_FRC
5002*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x32), 0x0000, 0x000C); // clk_odclk_frc
5003*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x32), 0x0000, 0x0002); // Not Invert
5004*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x32), 0x0000, 0x0001); // Enable clock
5005*53ee8cc1Swenshuai.xi 
5006*53ee8cc1Swenshuai.xi 
5007*53ee8cc1Swenshuai.xi     // Enable CLK_MINIFIFO_FRC
5008*53ee8cc1Swenshuai.xi     if (u8LPLL_Mode== E_XC_MOD_OUTPUT_SINGLE ) //0: single, 1: dual
5009*53ee8cc1Swenshuai.xi     {
5010*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x32), 0x0000, 0x0C00); // CLK_LPLL
5011*53ee8cc1Swenshuai.xi     }
5012*53ee8cc1Swenshuai.xi     else
5013*53ee8cc1Swenshuai.xi     {
5014*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x32), 0x0800, 0x0C00); // CLK_LPLL_div2
5015*53ee8cc1Swenshuai.xi     }
5016*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x32), 0x0000, 0x0200); // Not Invert
5017*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x32), 0x0000, 0x0100); // Enable clock
5018*53ee8cc1Swenshuai.xi 
5019*53ee8cc1Swenshuai.xi 
5020*53ee8cc1Swenshuai.xi     // Enable CLK_MISC_FRC
5021*53ee8cc1Swenshuai.xi     if (u8LPLL_Mode == E_XC_MOD_OUTPUT_SINGLE)
5022*53ee8cc1Swenshuai.xi     {
5023*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x33), 0x0000, 0x0C00); // CLK_LPLL
5024*53ee8cc1Swenshuai.xi     }
5025*53ee8cc1Swenshuai.xi     else
5026*53ee8cc1Swenshuai.xi     {
5027*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x33), 0x0400, 0x0C00); // CLK_LPLL_div2
5028*53ee8cc1Swenshuai.xi     }
5029*53ee8cc1Swenshuai.xi 
5030*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x33), 0x0000, 0x0200); // Not Invert
5031*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x33), 0x0000, 0x0100); // Enable clock
5032*53ee8cc1Swenshuai.xi 
5033*53ee8cc1Swenshuai.xi 
5034*53ee8cc1Swenshuai.xi 
5035*53ee8cc1Swenshuai.xi     // Enable CLK_MFT_FRC
5036*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x34), 0x0008, 0x000C); // CLK_LPLL_div2
5037*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x34), 0x0000, 0x0002); // Not Invert
5038*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x34), 0x0000, 0x0001); // Enable clock
5039*53ee8cc1Swenshuai.xi     #endif
5040*53ee8cc1Swenshuai.xi 
5041*53ee8cc1Swenshuai.xi     // Enable CLK_FDCLK_FRC
5042*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x34), 0x0000, 0x1C00); // 172 MHz
5043*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x34), 0x0000, 0x0200); // Not Invert
5044*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x34), 0x0000, 0x0100); // Enable clock
5045*53ee8cc1Swenshuai.xi 
5046*53ee8cc1Swenshuai.xi     // Enable CLK_ICLK_FRC
5047*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x35), 0x0000, 0x0004); // clk_fdclk_frc
5048*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x35), 0x0000, 0x0002); // Not Invert
5049*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x35), 0x0000, 0x0001); // Enable clock
5050*53ee8cc1Swenshuai.xi 
5051*53ee8cc1Swenshuai.xi     // Enable CLK_OP2_SRAM_FRC
5052*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x36), 0x0000, 0x0004); // clk_odclk_frc_p
5053*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x36), 0x0000, 0x0002); // Not Invert
5054*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x36), 0x0000, 0x0001); // Enable clock
5055*53ee8cc1Swenshuai.xi 
5056*53ee8cc1Swenshuai.xi     // Enable CLK_LD_SRAM_FRC
5057*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x36), 0x0000, 0x0400); // clk_odclk_frc_p
5058*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x36), 0x0000, 0x0200); // Not Invert
5059*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x36), 0x0000, 0x0100); // Enable clock
5060*53ee8cc1Swenshuai.xi 
5061*53ee8cc1Swenshuai.xi     // Enable CLK_OD_SRAM_FRC
5062*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x37), 0x0000, 0x0004); // clk_odclk_frc_p
5063*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x37), 0x0000, 0x0002); // Not Invert
5064*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x37), 0x0000, 0x0001); // Enable clock
5065*53ee8cc1Swenshuai.xi 
5066*53ee8cc1Swenshuai.xi     // Enable CLK_LPLL_FRC
5067*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x3A), 0x0000, 0x000C); // CLK_LPLL
5068*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x3A), 0x0000, 0x0002); // Not Invert
5069*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x3A), 0x0000, 0x0001); // Enable clock
5070*53ee8cc1Swenshuai.xi 
5071*53ee8cc1Swenshuai.xi     // Enable CLK_OCC_FRC
5072*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x3A), 0x0000, 0x0C00); // flock_clk_synth_out
5073*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x3A), 0x0000, 0x0200); // Not Invert
5074*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN1(0x3A), 0x0000, 0x0100); // Enable clock
5075*53ee8cc1Swenshuai.xi 
5076*53ee8cc1Swenshuai.xi     // Enable LVDS_MPLL
5077*53ee8cc1Swenshuai.xi     //[10]reg_lvds_mpll_clk_adc432m_pd, [8]reg_lvds_mpll_pd
5078*53ee8cc1Swenshuai.xi     //W2BYTEMSK(L_BK_AFEC(0x41), 0x0000, 0x0500); // MPLL_CLK_DP432M
5079*53ee8cc1Swenshuai.xi }
5080*53ee8cc1Swenshuai.xi 
MHal_CLKGEN_FRC_Bypass_Enable(MS_BOOL bEnable)5081*53ee8cc1Swenshuai.xi void MHal_CLKGEN_FRC_Bypass_Enable(MS_BOOL bEnable)
5082*53ee8cc1Swenshuai.xi {
5083*53ee8cc1Swenshuai.xi 
5084*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x53),0x00,0x02); // Not Invert
5085*53ee8cc1Swenshuai.xi     W2BYTEMSK(L_CLKGEN0(0x53),0x00,0x01); // Enable clock
5086*53ee8cc1Swenshuai.xi 
5087*53ee8cc1Swenshuai.xi     if (bEnable)
5088*53ee8cc1Swenshuai.xi     {
5089*53ee8cc1Swenshuai.xi         // Enable CLK_ODCLK
5090*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53),0xC0C,0xC0C);   // LPLL output clock
5091*53ee8cc1Swenshuai.xi         // Disable CLK_R2_FRC
5092*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x30), 0x00, 0xFFFF); // turn-on clk_mcu_frc
5093*53ee8cc1Swenshuai.xi         // Enable CLK_SPI_M_FRC
5094*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x31), 0x00, 0x01);   // Disable clock
5095*53ee8cc1Swenshuai.xi     }
5096*53ee8cc1Swenshuai.xi     else
5097*53ee8cc1Swenshuai.xi     {
5098*53ee8cc1Swenshuai.xi         // Enable CLK_ODCLK
5099*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN0(0x53), 0x00, 0xC0C); // synthetic clock out
5100*53ee8cc1Swenshuai.xi         // Enable CLK_R2_FRC
5101*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x30), 0x00, 0x0C); // 216 MHz
5102*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x30), 0x00, 0x02); // Not Invert
5103*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x30), 0x00, 0x01); // Enable clock
5104*53ee8cc1Swenshuai.xi         // Enable CLK_SPI_M_FRC
5105*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x31), 0x00, 0x1C); // 27  MHz
5106*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x31), 0x00, 0x02); // Not Invert
5107*53ee8cc1Swenshuai.xi         W2BYTEMSK(L_CLKGEN1(0x31), 0x00, 0x01); // Enable clock
5108*53ee8cc1Swenshuai.xi     }
5109*53ee8cc1Swenshuai.xi }
5110*53ee8cc1Swenshuai.xi 
5111*53ee8cc1Swenshuai.xi 
Hal_XC_IsForcePrescaling(void * pInstance,XC_InternalStatus * pSrcInfo,MS_BOOL * pbForceV,MS_BOOL * pbForceH,SCALER_WIN eWindow)5112*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_XC_IsForcePrescaling(void *pInstance, XC_InternalStatus *pSrcInfo, MS_BOOL *pbForceV, MS_BOOL *pbForceH, SCALER_WIN eWindow)
5113*53ee8cc1Swenshuai.xi {
5114*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5115*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5116*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
5117*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
5118*53ee8cc1Swenshuai.xi     *pbForceV = FALSE;
5119*53ee8cc1Swenshuai.xi     *pbForceH = FALSE;
5120*53ee8cc1Swenshuai.xi 
5121*53ee8cc1Swenshuai.xi     if(MDrv_XC_Is_SupportSWDS(pInstance)
5122*53ee8cc1Swenshuai.xi         && (MDrv_XC_GetDynamicScalingStatus(pInstance) || MDrv_XC_Is_DSForceIndexEnabled(pInstance, eWindow))
5123*53ee8cc1Swenshuai.xi         && (pSrcInfo->Status2.bPreVCusScaling || pSrcInfo->Status2.bPreHCusScaling))
5124*53ee8cc1Swenshuai.xi     {
5125*53ee8cc1Swenshuai.xi         if(pSrcInfo->Status2.u16PreHCusScalingDst > gSrcInfo[eWindow].Status2.u16XCVirtualBoxWidth)
5126*53ee8cc1Swenshuai.xi         {
5127*53ee8cc1Swenshuai.xi             *pbForceH = TRUE;
5128*53ee8cc1Swenshuai.xi             pSrcInfo->Status2.u16PreHCusScalingDst = gSrcInfo[eWindow].Status2.u16XCVirtualBoxWidth;
5129*53ee8cc1Swenshuai.xi         }
5130*53ee8cc1Swenshuai.xi 
5131*53ee8cc1Swenshuai.xi         if(pSrcInfo->Status2.u16PreVCusScalingDst > gSrcInfo[eWindow].Status2.u16XCVirtualBoxHeight)
5132*53ee8cc1Swenshuai.xi         {
5133*53ee8cc1Swenshuai.xi             *pbForceV = TRUE;
5134*53ee8cc1Swenshuai.xi             pSrcInfo->Status2.u16PreVCusScalingDst = gSrcInfo[eWindow].Status2.u16XCVirtualBoxHeight;
5135*53ee8cc1Swenshuai.xi         }
5136*53ee8cc1Swenshuai.xi         XC_LOG_TRACE(XC_DBGLEVEL_SETWINDOW,"Check force pre-scaling for limitation, even if customer pre-scaling has been set.\n");
5137*53ee8cc1Swenshuai.xi     }
5138*53ee8cc1Swenshuai.xi 
5139*53ee8cc1Swenshuai.xi     //-----------------------------------------
5140*53ee8cc1Swenshuai.xi     // Vertical
5141*53ee8cc1Swenshuai.xi     //-----------------------------------------
5142*53ee8cc1Swenshuai.xi 
5143*53ee8cc1Swenshuai.xi     //FHD case. FHD has tight bandwidth in FCLK (post scaling), so force pre-scaling if disp.v size > 80% of crop.v size.
5144*53ee8cc1Swenshuai.xi     if ( (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Height > 1000) &&
5145*53ee8cc1Swenshuai.xi          (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Width > 1600) ) //consider 1680x1050 into this case
5146*53ee8cc1Swenshuai.xi     {
5147*53ee8cc1Swenshuai.xi         // 80%
5148*53ee8cc1Swenshuai.xi         if ( ( pSrcInfo->stDispWin.height * 10 ) <  ( pSrcInfo->stCropWin.height * 8 ) )
5149*53ee8cc1Swenshuai.xi         {
5150*53ee8cc1Swenshuai.xi             *pbForceV = TRUE;
5151*53ee8cc1Swenshuai.xi         }
5152*53ee8cc1Swenshuai.xi     }
5153*53ee8cc1Swenshuai.xi     else // SD, HD panel.
5154*53ee8cc1Swenshuai.xi     {
5155*53ee8cc1Swenshuai.xi         // 60%
5156*53ee8cc1Swenshuai.xi         if ( ( pSrcInfo->stDispWin.height * 10 ) <  ( pSrcInfo->stCropWin.height * 6 ) )
5157*53ee8cc1Swenshuai.xi         {
5158*53ee8cc1Swenshuai.xi             *pbForceV = TRUE;
5159*53ee8cc1Swenshuai.xi         }
5160*53ee8cc1Swenshuai.xi     }
5161*53ee8cc1Swenshuai.xi 
5162*53ee8cc1Swenshuai.xi     //-----------------------------------------
5163*53ee8cc1Swenshuai.xi     // Horizontal
5164*53ee8cc1Swenshuai.xi     //-----------------------------------------
5165*53ee8cc1Swenshuai.xi 
5166*53ee8cc1Swenshuai.xi     if ( (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Height > 1000)
5167*53ee8cc1Swenshuai.xi         && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Width > 1600) ) //consider 1680x1050 into this case
5168*53ee8cc1Swenshuai.xi     {
5169*53ee8cc1Swenshuai.xi         // 80% ( SEC using 80% for HD panel ). Increase % if meet FCLK bandwidth issue in the future.
5170*53ee8cc1Swenshuai.xi         if ( ( pSrcInfo->stDispWin.width * 10 ) < ( pSrcInfo->stCropWin.width * 8 ) )
5171*53ee8cc1Swenshuai.xi         {
5172*53ee8cc1Swenshuai.xi             *pbForceH = TRUE;
5173*53ee8cc1Swenshuai.xi         }
5174*53ee8cc1Swenshuai.xi     }
5175*53ee8cc1Swenshuai.xi     else // SD panel.
5176*53ee8cc1Swenshuai.xi     {
5177*53ee8cc1Swenshuai.xi         // 60%
5178*53ee8cc1Swenshuai.xi         if ( ( pSrcInfo->stDispWin.width * 10 ) < ( pSrcInfo->stCropWin.width * 6 ) )
5179*53ee8cc1Swenshuai.xi         {
5180*53ee8cc1Swenshuai.xi             *pbForceH = TRUE;
5181*53ee8cc1Swenshuai.xi         }
5182*53ee8cc1Swenshuai.xi     }
5183*53ee8cc1Swenshuai.xi 
5184*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
5185*53ee8cc1Swenshuai.xi }
5186*53ee8cc1Swenshuai.xi 
Hal_SC_IsHW2Dto3DPatch_Enable(void)5187*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_IsHW2Dto3DPatch_Enable(void)
5188*53ee8cc1Swenshuai.xi {
5189*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
5190*53ee8cc1Swenshuai.xi     if(PM_R1BYTE(REG_CHIP_REVISION, 7:0) < 1)//a1 u01 2d to 3d hw bug
5191*53ee8cc1Swenshuai.xi     {
5192*53ee8cc1Swenshuai.xi         bRet = TRUE;
5193*53ee8cc1Swenshuai.xi     }
5194*53ee8cc1Swenshuai.xi     return bRet;
5195*53ee8cc1Swenshuai.xi }
5196*53ee8cc1Swenshuai.xi 
MHal_SC_Get_LpllSet_Factor(void * pInstance,MS_U8 u8LPLL_Mode,MS_U8 u8LPLL_Type,MS_U32 u32DefaultDClk)5197*53ee8cc1Swenshuai.xi MS_U32 MHal_SC_Get_LpllSet_Factor(void *pInstance, MS_U8 u8LPLL_Mode, MS_U8 u8LPLL_Type,MS_U32 u32DefaultDClk)
5198*53ee8cc1Swenshuai.xi {
5199*53ee8cc1Swenshuai.xi     MS_U32 u32Factor = 0;
5200*53ee8cc1Swenshuai.xi     UNUSED(u8LPLL_Type);
5201*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5202*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5203*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
5204*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
5205*53ee8cc1Swenshuai.xi 
5206*53ee8cc1Swenshuai.xi     u32Factor  = LPLL_LOOPGAIN/8/2;
5207*53ee8cc1Swenshuai.xi 
5208*53ee8cc1Swenshuai.xi     if ((pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16HTotal> 3000) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16VTotal > 2000) && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16DefaultVFreq > 500))
5209*53ee8cc1Swenshuai.xi     {
5210*53ee8cc1Swenshuai.xi         //printf("\033[0;31m [%s][%d] enter For 4K2K used!!!  \033[0m\n", __FUNCTION__, __LINE__);
5211*53ee8cc1Swenshuai.xi         u32Factor = 1;
5212*53ee8cc1Swenshuai.xi     }
5213*53ee8cc1Swenshuai.xi 
5214*53ee8cc1Swenshuai.xi     if (u8LPLL_Type == E_XC_PNL_LPLL_LVDS)
5215*53ee8cc1Swenshuai.xi     {
5216*53ee8cc1Swenshuai.xi         u32Factor = 3;
5217*53ee8cc1Swenshuai.xi     }
5218*53ee8cc1Swenshuai.xi 
5219*53ee8cc1Swenshuai.xi     // for the WUXGA 1920x1200 case
5220*53ee8cc1Swenshuai.xi     if((u8LPLL_Mode==E_XC_MOD_OUTPUT_DUAL)&&(u32DefaultDClk > 1500000000)
5221*53ee8cc1Swenshuai.xi         &&(pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Height > 1100)
5222*53ee8cc1Swenshuai.xi         &&(pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Width < 2000))
5223*53ee8cc1Swenshuai.xi     {
5224*53ee8cc1Swenshuai.xi         u32Factor  = LPLL_LOOPGAIN/8;
5225*53ee8cc1Swenshuai.xi     }
5226*53ee8cc1Swenshuai.xi 
5227*53ee8cc1Swenshuai.xi     if((u8LPLL_Type >= E_XC_PNL_LPLL_VBY1_10BIT_4LANE)&&(u8LPLL_Type <= E_XC_PNL_LPLL_VBY1_8BIT_8LANE))
5228*53ee8cc1Swenshuai.xi     {
5229*53ee8cc1Swenshuai.xi         u32Factor = 8;
5230*53ee8cc1Swenshuai.xi     }
5231*53ee8cc1Swenshuai.xi 
5232*53ee8cc1Swenshuai.xi     return u32Factor;
5233*53ee8cc1Swenshuai.xi }
5234*53ee8cc1Swenshuai.xi 
MHal_SC_Get_LpllSet_Div(void * pInstance,MS_U8 u8LPLL_Mode,MS_U8 u8LPLL_Type,MS_U32 u32DefaultDClk)5235*53ee8cc1Swenshuai.xi MS_U32 MHal_SC_Get_LpllSet_Div(void *pInstance, MS_U8 u8LPLL_Mode, MS_U8 u8LPLL_Type,MS_U32 u32DefaultDClk)
5236*53ee8cc1Swenshuai.xi {
5237*53ee8cc1Swenshuai.xi     MS_U32 u32Div = 1;
5238*53ee8cc1Swenshuai.xi 
5239*53ee8cc1Swenshuai.xi     if (u8LPLL_Type == E_XC_PNL_LPLL_LVDS)
5240*53ee8cc1Swenshuai.xi     {
5241*53ee8cc1Swenshuai.xi         u32Div = 2;
5242*53ee8cc1Swenshuai.xi     }
5243*53ee8cc1Swenshuai.xi 
5244*53ee8cc1Swenshuai.xi     if((u8LPLL_Type >= E_XC_PNL_LPLL_VBY1_10BIT_4LANE)&&(u8LPLL_Type <= E_XC_PNL_LPLL_VBY1_8BIT_8LANE))
5245*53ee8cc1Swenshuai.xi     {
5246*53ee8cc1Swenshuai.xi         u32Div = 5;
5247*53ee8cc1Swenshuai.xi     }
5248*53ee8cc1Swenshuai.xi 
5249*53ee8cc1Swenshuai.xi     return u32Div;
5250*53ee8cc1Swenshuai.xi }
5251*53ee8cc1Swenshuai.xi 
Hal_SC_Enable_AVMute(void * pInstance,SCALER_WIN eWindow)5252*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_Enable_AVMute(void *pInstance, SCALER_WIN eWindow)
5253*53ee8cc1Swenshuai.xi {
5254*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5255*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5256*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
5257*53ee8cc1Swenshuai.xi     {
5258*53ee8cc1Swenshuai.xi         //HDMI V-mute detect enable
5259*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_34_L, BIT(9), BIT(9));
5260*53ee8cc1Swenshuai.xi         //force IPM enable at av-mute case
5261*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_19_L, BIT(5), BIT(5));
5262*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_19_L, BIT(5), BIT(5));
5263*53ee8cc1Swenshuai.xi 
5264*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_01_L, BIT(13) | BIT(15), BIT(13) | BIT(15));
5265*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_23_L, BIT(9) | BIT(11), BIT(9) | BIT(11));
5266*53ee8cc1Swenshuai.xi     }
5267*53ee8cc1Swenshuai.xi     else
5268*53ee8cc1Swenshuai.xi     {
5269*53ee8cc1Swenshuai.xi         //HDMI V-mute detect enable
5270*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_34_L, BIT(9), BIT(9));
5271*53ee8cc1Swenshuai.xi         //force IPM enable at av-mute case
5272*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_59_L, BIT(5), BIT(5));
5273*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_59_L, BIT(5), BIT(5));
5274*53ee8cc1Swenshuai.xi 
5275*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_01_L, BIT(12) | BIT(14), BIT(12) | BIT(14));
5276*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_23_L, BIT(8) | BIT(10), BIT(8) | BIT(10));
5277*53ee8cc1Swenshuai.xi     }
5278*53ee8cc1Swenshuai.xi 
5279*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
5280*53ee8cc1Swenshuai.xi }
5281*53ee8cc1Swenshuai.xi 
Hal_XC_ReportPixelInfo(void * pInstance,MS_XC_REPORT_PIXELINFO * pstRepPixInfo)5282*53ee8cc1Swenshuai.xi MS_BOOL Hal_XC_ReportPixelInfo(void *pInstance, MS_XC_REPORT_PIXELINFO *pstRepPixInfo)
5283*53ee8cc1Swenshuai.xi {
5284*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5285*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5286*53ee8cc1Swenshuai.xi     MS_BOOL bret = TRUE;
5287*53ee8cc1Swenshuai.xi 
5288*53ee8cc1Swenshuai.xi     switch(pstRepPixInfo->enStage)
5289*53ee8cc1Swenshuai.xi     {
5290*53ee8cc1Swenshuai.xi     case E_XC_GET_PIXEL_STAGE_AFTER_DLC:
5291*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, 0x00 , BMASK(3:0));
5292*53ee8cc1Swenshuai.xi         break;
5293*53ee8cc1Swenshuai.xi     case E_XC_GET_PIXEL_STAGE_PRE_GAMMA:
5294*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, 0x08, BMASK(3:0));
5295*53ee8cc1Swenshuai.xi         break;
5296*53ee8cc1Swenshuai.xi     case E_XC_GET_PIXEL_STAGE_AFTER_OSD:
5297*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, 0x0C, BMASK(3:0));
5298*53ee8cc1Swenshuai.xi         break;
5299*53ee8cc1Swenshuai.xi     default:
5300*53ee8cc1Swenshuai.xi         bret = FALSE;
5301*53ee8cc1Swenshuai.xi         break;
5302*53ee8cc1Swenshuai.xi     }
5303*53ee8cc1Swenshuai.xi 
5304*53ee8cc1Swenshuai.xi     if(bret)
5305*53ee8cc1Swenshuai.xi     {
5306*53ee8cc1Swenshuai.xi         // Enable
5307*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, BIT(8), BIT(8));
5308*53ee8cc1Swenshuai.xi 
5309*53ee8cc1Swenshuai.xi         if(pstRepPixInfo->bShowRepWin)
5310*53ee8cc1Swenshuai.xi         {
5311*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, BIT(9), BIT(9));
5312*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, pstRepPixInfo->u16RepWinColor<<8, 0xFF00);
5313*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_1A_L, BIT(0), BIT(0));
5314*53ee8cc1Swenshuai.xi         }
5315*53ee8cc1Swenshuai.xi 
5316*53ee8cc1Swenshuai.xi         // Set Report Window
5317*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_42_L, pstRepPixInfo->u16XStart);
5318*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_43_L, pstRepPixInfo->u16XEnd);
5319*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_44_L, pstRepPixInfo->u16YStart);
5320*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_45_L, pstRepPixInfo->u16YEnd);
5321*53ee8cc1Swenshuai.xi 
5322*53ee8cc1Swenshuai.xi         MsOS_DelayTask(50);  // Must wait .
5323*53ee8cc1Swenshuai.xi 
5324*53ee8cc1Swenshuai.xi         pstRepPixInfo->u16RCrMin = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_64_L);
5325*53ee8cc1Swenshuai.xi         pstRepPixInfo->u16RCrMax = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_65_L);
5326*53ee8cc1Swenshuai.xi         pstRepPixInfo->u16GYMin  = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_66_L);
5327*53ee8cc1Swenshuai.xi         pstRepPixInfo->u16GYMax  = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_67_L);
5328*53ee8cc1Swenshuai.xi         pstRepPixInfo->u16BCbMin = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_68_L);
5329*53ee8cc1Swenshuai.xi         pstRepPixInfo->u16BCbMax = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_69_L);
5330*53ee8cc1Swenshuai.xi         pstRepPixInfo->u32RCrSum = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK2D_01_L)|(SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK2D_02_L)<<16);
5331*53ee8cc1Swenshuai.xi         pstRepPixInfo->u32GYSum  = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK2D_03_L)|(SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK2D_04_L)<<16);
5332*53ee8cc1Swenshuai.xi         pstRepPixInfo->u32BCbSum = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK2D_05_L)|(SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK2D_06_L)<<16);
5333*53ee8cc1Swenshuai.xi 
5334*53ee8cc1Swenshuai.xi         if(pstRepPixInfo->bShowRepWin)
5335*53ee8cc1Swenshuai.xi         {
5336*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_1A_L, 0x00, BIT(0));
5337*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, 0x00, BIT(9));
5338*53ee8cc1Swenshuai.xi         }
5339*53ee8cc1Swenshuai.xi         // Disable
5340*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, 0x00, BIT(8));
5341*53ee8cc1Swenshuai.xi     }
5342*53ee8cc1Swenshuai.xi 
5343*53ee8cc1Swenshuai.xi     return bret;
5344*53ee8cc1Swenshuai.xi }
5345*53ee8cc1Swenshuai.xi 
Hal_SC_set_mrq_miusel(void * pInstance,MS_U8 u8MIUSel)5346*53ee8cc1Swenshuai.xi void Hal_SC_set_mrq_miusel(void *pInstance, MS_U8 u8MIUSel)
5347*53ee8cc1Swenshuai.xi {
5348*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5349*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5350*53ee8cc1Swenshuai.xi 
5351*53ee8cc1Swenshuai.xi     // Scaler control MRQ MIU by itself
5352*53ee8cc1Swenshuai.xi     // So MIU1 IP-select is set to 1. At this moment, MIU0 Miu select is not working.
5353*53ee8cc1Swenshuai.xi     if (u8MIUSel==0)
5354*53ee8cc1Swenshuai.xi     {
5355*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_07_L, 0, BIT(8)|BIT(9));     // reg_mrq_miu_sel to MIU0
5356*53ee8cc1Swenshuai.xi     }
5357*53ee8cc1Swenshuai.xi     else if (u8MIUSel==1)
5358*53ee8cc1Swenshuai.xi     {
5359*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_07_L, BIT(8), BIT(8)|BIT(9));     // reg_mrq_miu_sel to MIU1
5360*53ee8cc1Swenshuai.xi     }
5361*53ee8cc1Swenshuai.xi     else if (u8MIUSel==2)
5362*53ee8cc1Swenshuai.xi     {
5363*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_07_L, BIT(9), BIT(8)|BIT(9));     // reg_mrq_miu_sel to MIU2
5364*53ee8cc1Swenshuai.xi     }
5365*53ee8cc1Swenshuai.xi 
5366*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU0_BASE + 0xF3, 0x00, 0x80); // MIU select (Group1 BIT15)
5367*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_MIU1_BASE + 0xF3, 0x80, 0x80); // IP select
5368*53ee8cc1Swenshuai.xi }
5369*53ee8cc1Swenshuai.xi 
Hal_SC_set_mcdi_memoryaddress(void * pInstance,MS_PHY u32FBAddress,E_XC_MCDI_TYPE eType)5370*53ee8cc1Swenshuai.xi void Hal_SC_set_mcdi_memoryaddress(void *pInstance, MS_PHY u32FBAddress, E_XC_MCDI_TYPE eType)
5371*53ee8cc1Swenshuai.xi {
5372*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5373*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5374*53ee8cc1Swenshuai.xi 
5375*53ee8cc1Swenshuai.xi     if (eType == E_XC_MCDI_BOTH) // MAIN
5376*53ee8cc1Swenshuai.xi     {
5377*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_0A_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // MAIN ME1 address
5378*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_12_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // MAIN ME2 address
5379*53ee8cc1Swenshuai.xi     }
5380*53ee8cc1Swenshuai.xi     else if(eType == E_XC_MCDI_SUB_BOTH) // SUB
5381*53ee8cc1Swenshuai.xi     {
5382*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_28_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // SUB ME1 address
5383*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2C_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // SUB ME2 address
5384*53ee8cc1Swenshuai.xi     }
5385*53ee8cc1Swenshuai.xi     else if(eType == E_XC_MCDI_ME1)
5386*53ee8cc1Swenshuai.xi     {
5387*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_0A_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // MAIN ME1 address
5388*53ee8cc1Swenshuai.xi     }
5389*53ee8cc1Swenshuai.xi     else if (eType == E_XC_MCDI_ME2)
5390*53ee8cc1Swenshuai.xi     {
5391*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_12_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // MAIN ME2 address
5392*53ee8cc1Swenshuai.xi     }
5393*53ee8cc1Swenshuai.xi     else if (eType == E_XC_MCDI_SUB_ME1)
5394*53ee8cc1Swenshuai.xi     {
5395*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_28_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // SUB ME1 address
5396*53ee8cc1Swenshuai.xi     }
5397*53ee8cc1Swenshuai.xi     else if (eType == E_XC_MCDI_SUB_ME2)
5398*53ee8cc1Swenshuai.xi     {
5399*53ee8cc1Swenshuai.xi         SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2C_L, u32FBAddress / MCDI_BYTE_PER_WORD);     // SUB ME2 address
5400*53ee8cc1Swenshuai.xi     }
5401*53ee8cc1Swenshuai.xi }
5402*53ee8cc1Swenshuai.xi 
Hal_SC_set_mcdi_write_limit(void * pInstance,MS_BOOL bEn,MS_PHY u32LimitAddress,E_XC_MCDI_TYPE eType)5403*53ee8cc1Swenshuai.xi void Hal_SC_set_mcdi_write_limit(void *pInstance, MS_BOOL bEn, MS_PHY u32LimitAddress, E_XC_MCDI_TYPE eType)
5404*53ee8cc1Swenshuai.xi {
5405*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5406*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5407*53ee8cc1Swenshuai.xi 
5408*53ee8cc1Swenshuai.xi     u32LimitAddress = u32LimitAddress / MCDI_BYTE_PER_WORD -1;
5409*53ee8cc1Swenshuai.xi 
5410*53ee8cc1Swenshuai.xi     if(eType == E_XC_MCDI_BOTH)
5411*53ee8cc1Swenshuai.xi     {
5412*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit of ME1
5413*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_08_L, bEn ? BIT(0) : 0, BIT(0));
5414*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5415*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_0C_L, u32LimitAddress & 0xFFFF);
5416*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_0D_L, (u32LimitAddress >> 16) & 0x3FF);
5417*53ee8cc1Swenshuai.xi 
5418*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit of ME2
5419*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_10_L, bEn ? BIT(0) : 0, BIT(0));
5420*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5421*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_14_L, u32LimitAddress & 0xFFFF);
5422*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_15_L, (u32LimitAddress >> 16) & 0x3FF);
5423*53ee8cc1Swenshuai.xi     }
5424*53ee8cc1Swenshuai.xi     else if(eType==E_XC_MCDI_SUB_BOTH)
5425*53ee8cc1Swenshuai.xi     {
5426*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit of ME1
5427*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_08_L, bEn ? BIT(0) : 0, BIT(0));
5428*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5429*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2A_L, u32LimitAddress & 0xFFFF);
5430*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2B_L, (u32LimitAddress >> 16) & 0x3FF);
5431*53ee8cc1Swenshuai.xi 
5432*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit of ME2
5433*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_10_L, bEn ? BIT(0) : 0, BIT(0));
5434*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5435*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2E_L, u32LimitAddress & 0xFFFF);
5436*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2F_L, (u32LimitAddress >> 16) & 0x3FF);
5437*53ee8cc1Swenshuai.xi     }
5438*53ee8cc1Swenshuai.xi     else if(eType == E_XC_MCDI_ME1)
5439*53ee8cc1Swenshuai.xi     {
5440*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit
5441*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_08_L, bEn ? BIT(0) : 0, BIT(0));
5442*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5443*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_0C_L, u32LimitAddress & 0xFFFF);
5444*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_0D_L, (u32LimitAddress >> 16) & 0x3FF);
5445*53ee8cc1Swenshuai.xi     }
5446*53ee8cc1Swenshuai.xi     else if (eType == E_XC_MCDI_ME2)
5447*53ee8cc1Swenshuai.xi     {
5448*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit
5449*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_10_L, bEn ? BIT(0) : 0, BIT(0));
5450*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5451*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_14_L, u32LimitAddress & 0xFFFF);
5452*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_15_L, (u32LimitAddress >> 16) & 0x3FF);
5453*53ee8cc1Swenshuai.xi     }
5454*53ee8cc1Swenshuai.xi     else if (eType == E_XC_MCDI_SUB_ME1)
5455*53ee8cc1Swenshuai.xi     {
5456*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit
5457*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_08_L, bEn ? BIT(0) : 0, BIT(0));
5458*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5459*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2A_L, u32LimitAddress & 0xFFFF);
5460*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2B_L, (u32LimitAddress >> 16) & 0x3FF);
5461*53ee8cc1Swenshuai.xi     }
5462*53ee8cc1Swenshuai.xi     else if (eType == E_XC_MCDI_SUB_ME2)
5463*53ee8cc1Swenshuai.xi     {
5464*53ee8cc1Swenshuai.xi         // Main/Sub shares the same enable bit
5465*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_10_L, bEn ? BIT(0) : 0, BIT(0));
5466*53ee8cc1Swenshuai.xi         // Bit 0 ~ 26
5467*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2E_L, u32LimitAddress & 0xFFFF);
5468*53ee8cc1Swenshuai.xi         SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_2F_L, (u32LimitAddress >> 16) & 0x3FF);
5469*53ee8cc1Swenshuai.xi     }
5470*53ee8cc1Swenshuai.xi }
Hal_SC_enable_mcdi(void * pInstance,MS_BOOL bEn,E_XC_MCDI_TYPE eType)5471*53ee8cc1Swenshuai.xi void Hal_SC_enable_mcdi(void *pInstance, MS_BOOL bEn, E_XC_MCDI_TYPE eType)
5472*53ee8cc1Swenshuai.xi {
5473*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5474*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5475*53ee8cc1Swenshuai.xi 
5476*53ee8cc1Swenshuai.xi     #define ME1_CTRL_BIT ( BIT(1) )
5477*53ee8cc1Swenshuai.xi     #define ME2_CTRL_BIT ( BIT(2) )
5478*53ee8cc1Swenshuai.xi     MS_U16 u16Value = 0;
5479*53ee8cc1Swenshuai.xi     MS_U16 u16Mask = 0;
5480*53ee8cc1Swenshuai.xi     switch (eType)
5481*53ee8cc1Swenshuai.xi     {
5482*53ee8cc1Swenshuai.xi         case E_XC_MCDI_ME1:
5483*53ee8cc1Swenshuai.xi             u16Value = u16Value | (bEn ? 0 : ME1_CTRL_BIT);
5484*53ee8cc1Swenshuai.xi             u16Mask = ME1_CTRL_BIT;
5485*53ee8cc1Swenshuai.xi         break;
5486*53ee8cc1Swenshuai.xi         case E_XC_MCDI_ME2:
5487*53ee8cc1Swenshuai.xi             u16Value = u16Value | (bEn ? 0 : ME2_CTRL_BIT);
5488*53ee8cc1Swenshuai.xi             u16Mask = ME2_CTRL_BIT;
5489*53ee8cc1Swenshuai.xi         break;
5490*53ee8cc1Swenshuai.xi         case E_XC_MCDI_BOTH:
5491*53ee8cc1Swenshuai.xi             u16Value = u16Value | (bEn ? 0 : ME1_CTRL_BIT);
5492*53ee8cc1Swenshuai.xi             u16Value = u16Value | (bEn ? 0 : ME2_CTRL_BIT);
5493*53ee8cc1Swenshuai.xi             u16Mask = ME1_CTRL_BIT | ME2_CTRL_BIT;
5494*53ee8cc1Swenshuai.xi         break;
5495*53ee8cc1Swenshuai.xi         case E_XC_MCDI_SUB_ME1:
5496*53ee8cc1Swenshuai.xi             u16Value = u16Value | ((bEn ? 0 : ME1_CTRL_BIT)<<3);
5497*53ee8cc1Swenshuai.xi             u16Mask = ME1_CTRL_BIT << 3;
5498*53ee8cc1Swenshuai.xi         break;
5499*53ee8cc1Swenshuai.xi         case E_XC_MCDI_SUB_ME2:
5500*53ee8cc1Swenshuai.xi             u16Value = u16Value | ((bEn ? 0 : ME2_CTRL_BIT)<<3);
5501*53ee8cc1Swenshuai.xi             u16Mask = ME2_CTRL_BIT << 3;
5502*53ee8cc1Swenshuai.xi         break;
5503*53ee8cc1Swenshuai.xi         case E_XC_MCDI_SUB_BOTH:
5504*53ee8cc1Swenshuai.xi             u16Value = u16Value | ((bEn ? 0 : ME1_CTRL_BIT)<<3);
5505*53ee8cc1Swenshuai.xi             u16Value = u16Value | ((bEn ? 0 : ME2_CTRL_BIT)<<3);
5506*53ee8cc1Swenshuai.xi             u16Mask = (ME1_CTRL_BIT | ME2_CTRL_BIT)<<3;
5507*53ee8cc1Swenshuai.xi         break;
5508*53ee8cc1Swenshuai.xi         default:
5509*53ee8cc1Swenshuai.xi             u16Value = 0;
5510*53ee8cc1Swenshuai.xi         break;
5511*53ee8cc1Swenshuai.xi     }
5512*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_07_L, u16Value, u16Mask);
5513*53ee8cc1Swenshuai.xi     if (bEn)
5514*53ee8cc1Swenshuai.xi     {
5515*53ee8cc1Swenshuai.xi         // Turn on MIU access arbitor
5516*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_04_L, 0x00 , BIT(6) );
5517*53ee8cc1Swenshuai.xi     }
5518*53ee8cc1Swenshuai.xi     else
5519*53ee8cc1Swenshuai.xi     {
5520*53ee8cc1Swenshuai.xi         MS_U16 u16MCDiCtrl_Main = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_07_L) & (  ME1_CTRL_BIT | ME2_CTRL_BIT )  ;
5521*53ee8cc1Swenshuai.xi         MS_U16 u16MCDiCtrl_Sub  = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK17_07_L) & (( ME1_CTRL_BIT | ME2_CTRL_BIT )<<3)  ;
5522*53ee8cc1Swenshuai.xi         MS_U16 u16MCDiCtrl = u16MCDiCtrl_Main | u16MCDiCtrl_Sub;
5523*53ee8cc1Swenshuai.xi         // Current ME1/2 is turned off
5524*53ee8cc1Swenshuai.xi         if ( u16MCDiCtrl  == ( ( ME1_CTRL_BIT | ME2_CTRL_BIT) //  Main_Window
5525*53ee8cc1Swenshuai.xi                              | ((ME1_CTRL_BIT | ME2_CTRL_BIT)<<3))) // Sub_Window
5526*53ee8cc1Swenshuai.xi         {
5527*53ee8cc1Swenshuai.xi             // Turn off arbitor only when all MCDi function is off.
5528*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_04_L,  BIT(6) , BIT(6) );
5529*53ee8cc1Swenshuai.xi         }
5530*53ee8cc1Swenshuai.xi     }
5531*53ee8cc1Swenshuai.xi }
5532*53ee8cc1Swenshuai.xi 
5533*53ee8cc1Swenshuai.xi /// bandwidth saving Mode
Hal_SC_set_bws_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)5534*53ee8cc1Swenshuai.xi void Hal_SC_set_bws_mode(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
5535*53ee8cc1Swenshuai.xi {
5536*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5537*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5538*53ee8cc1Swenshuai.xi 
5539*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
5540*53ee8cc1Swenshuai.xi     {
5541*53ee8cc1Swenshuai.xi         //ipm Main
5542*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_01_L, (bEnable? 0x00:BIT(0)), BIT(0));
5543*53ee8cc1Swenshuai.xi     }
5544*53ee8cc1Swenshuai.xi     else
5545*53ee8cc1Swenshuai.xi     {
5546*53ee8cc1Swenshuai.xi         //ipm Sub
5547*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_01_L, (bEnable? 0x00:BIT(1)), BIT(1));
5548*53ee8cc1Swenshuai.xi     }
5549*53ee8cc1Swenshuai.xi }
5550*53ee8cc1Swenshuai.xi 
Hal_SC_sw_lcnt_en(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)5551*53ee8cc1Swenshuai.xi void Hal_SC_sw_lcnt_en(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
5552*53ee8cc1Swenshuai.xi {
5553*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5554*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5555*53ee8cc1Swenshuai.xi 
5556*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
5557*53ee8cc1Swenshuai.xi     {
5558*53ee8cc1Swenshuai.xi         //ipm Main
5559*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_11_L, (bEnable? BIT(0):0x00), BIT(0));
5560*53ee8cc1Swenshuai.xi     }
5561*53ee8cc1Swenshuai.xi     else
5562*53ee8cc1Swenshuai.xi     {
5563*53ee8cc1Swenshuai.xi         //ipm Sub
5564*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_21_L, (bEnable? BIT(0):0x00), BIT(0));
5565*53ee8cc1Swenshuai.xi     }
5566*53ee8cc1Swenshuai.xi }
5567*53ee8cc1Swenshuai.xi 
Hal_SC_set_sw_lcnt(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)5568*53ee8cc1Swenshuai.xi void Hal_SC_set_sw_lcnt(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
5569*53ee8cc1Swenshuai.xi {
5570*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5571*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5572*53ee8cc1Swenshuai.xi 
5573*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
5574*53ee8cc1Swenshuai.xi     {
5575*53ee8cc1Swenshuai.xi         //ipm Main
5576*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_11_L, (bEnable? BIT(1):0x00), BIT(1));
5577*53ee8cc1Swenshuai.xi     }
5578*53ee8cc1Swenshuai.xi     else
5579*53ee8cc1Swenshuai.xi     {
5580*53ee8cc1Swenshuai.xi         //ipm Sub
5581*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_21_L, (bEnable? BIT(1):0x00), BIT(1));
5582*53ee8cc1Swenshuai.xi     }
5583*53ee8cc1Swenshuai.xi }
5584*53ee8cc1Swenshuai.xi 
Hal_SC_set_ipmw_lcnt_inv(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)5585*53ee8cc1Swenshuai.xi void Hal_SC_set_ipmw_lcnt_inv(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
5586*53ee8cc1Swenshuai.xi {
5587*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5588*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5589*53ee8cc1Swenshuai.xi 
5590*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
5591*53ee8cc1Swenshuai.xi     {
5592*53ee8cc1Swenshuai.xi         //ipm Main
5593*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_12_L, (bEnable? BIT(4):0x00), BIT(4));
5594*53ee8cc1Swenshuai.xi     }
5595*53ee8cc1Swenshuai.xi     else
5596*53ee8cc1Swenshuai.xi     {
5597*53ee8cc1Swenshuai.xi         //ipm Sub
5598*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_22_L, (bEnable? BIT(4):0x00), BIT(4));
5599*53ee8cc1Swenshuai.xi     }
5600*53ee8cc1Swenshuai.xi }
5601*53ee8cc1Swenshuai.xi 
Hal_SC_set_ipmr_lcnt_inv(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)5602*53ee8cc1Swenshuai.xi void Hal_SC_set_ipmr_lcnt_inv(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
5603*53ee8cc1Swenshuai.xi {
5604*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5605*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5606*53ee8cc1Swenshuai.xi 
5607*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
5608*53ee8cc1Swenshuai.xi     {
5609*53ee8cc1Swenshuai.xi         //ipm Main
5610*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_12_L, (bEnable? BIT(12):0x00), BIT(12));
5611*53ee8cc1Swenshuai.xi     }
5612*53ee8cc1Swenshuai.xi     else
5613*53ee8cc1Swenshuai.xi     {
5614*53ee8cc1Swenshuai.xi         //ipm Sub
5615*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_22_L, (bEnable? BIT(12):0x00), BIT(12));
5616*53ee8cc1Swenshuai.xi     }
5617*53ee8cc1Swenshuai.xi }
5618*53ee8cc1Swenshuai.xi 
Hal_SC_set_opm_lcnt_inv(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)5619*53ee8cc1Swenshuai.xi void Hal_SC_set_opm_lcnt_inv(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
5620*53ee8cc1Swenshuai.xi {
5621*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5622*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5623*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
5624*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
5625*53ee8cc1Swenshuai.xi 
5626*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
5627*53ee8cc1Swenshuai.xi     {
5628*53ee8cc1Swenshuai.xi             //opm Main
5629*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_32_L, (bEnable? BIT(5):0x00), BIT(5));
5630*53ee8cc1Swenshuai.xi     }
5631*53ee8cc1Swenshuai.xi     else
5632*53ee8cc1Swenshuai.xi     {
5633*53ee8cc1Swenshuai.xi             //opm Sub
5634*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK08_32_L, (bEnable? BIT(4):0x00), BIT(4));
5635*53ee8cc1Swenshuai.xi     }
5636*53ee8cc1Swenshuai.xi 
5637*53ee8cc1Swenshuai.xi }
5638*53ee8cc1Swenshuai.xi 
MHal_XC_Calc_IGainPGain(void * pInstance,MS_U8 * u8GainI,MS_U8 * u8GainP,MS_U32 u32XTAL_Clock,MS_U8 u8LGain,MS_U8 u8Vco,MS_U16 u16HTotal,MS_U16 u16VTotal,MS_U8 u8FRC_Out)5639*53ee8cc1Swenshuai.xi void MHal_XC_Calc_IGainPGain(void *pInstance, MS_U8 *u8GainI, MS_U8 *u8GainP, MS_U32 u32XTAL_Clock, MS_U8 u8LGain, MS_U8 u8Vco, MS_U16 u16HTotal, MS_U16 u16VTotal, MS_U8 u8FRC_Out)
5640*53ee8cc1Swenshuai.xi {
5641*53ee8cc1Swenshuai.xi     MS_U32 u32Factor, u32Temp;
5642*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
5643*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[E_XC_POOL_ID_INTERNAL_VARIABLE],(void**)(&pXCResourcePrivate));
5644*53ee8cc1Swenshuai.xi     u32Temp = (MS_U32)(u16VTotal*u16HTotal*u8FRC_Out);
5645*53ee8cc1Swenshuai.xi     u32XTAL_Clock*=2;
5646*53ee8cc1Swenshuai.xi     u32Factor = ((LVDS_MPLL_CLOCK_MHZ*1000000UL/u32XTAL_Clock)*524288*u8LGain)/((MS_U32)(u32Temp*u8Vco/2*8));
5647*53ee8cc1Swenshuai.xi 
5648*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETTIMING, "MM=%ld,u8LGain1=%d,Htt=%d,Vtt=%d,Ovs=%d,Vco=%d,i_gain=%d,REGIg=%d,u32XTAL_Clock=%u\n",
5649*53ee8cc1Swenshuai.xi     (LVDS_MPLL_CLOCK_MHZ*1000000UL/pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.u32XTAL_Clock),u8LGain,
5650*53ee8cc1Swenshuai.xi     u16HTotal,u16VTotal,u8FRC_Out,u8Vco/2,u32Factor,MHal_SC_cal_usedgain_to_reggain(u32Factor),u32XTAL_Clock);
5651*53ee8cc1Swenshuai.xi 
5652*53ee8cc1Swenshuai.xi     *u8GainI = MHal_SC_cal_usedgain_to_reggain(u32Factor);
5653*53ee8cc1Swenshuai.xi     /// for high accurate log value
5654*53ee8cc1Swenshuai.xi     u32Factor = ((LVDS_MPLL_CLOCK_MHZ*1000000UL/u32XTAL_Clock)*524288*u8LGain*10)/((MS_U32)(u32Temp*u8Vco/2*8));
5655*53ee8cc1Swenshuai.xi 
5656*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETTIMING, "new i_gain=%d\n", u32Factor);
5657*53ee8cc1Swenshuai.xi 
5658*53ee8cc1Swenshuai.xi     if(u32Factor <= 1)
5659*53ee8cc1Swenshuai.xi         *u8GainI=2;
5660*53ee8cc1Swenshuai.xi     else if(u32Factor <= 3)
5661*53ee8cc1Swenshuai.xi         *u8GainI=3;
5662*53ee8cc1Swenshuai.xi     else if(u32Factor <= 7)
5663*53ee8cc1Swenshuai.xi         *u8GainI=4;
5664*53ee8cc1Swenshuai.xi 
5665*53ee8cc1Swenshuai.xi     *u8GainP = *u8GainI+1;
5666*53ee8cc1Swenshuai.xi 
5667*53ee8cc1Swenshuai.xi     XC_LOG_TRACE(XC_DBGLEVEL_SETTIMING, "==>LG1=%d,iGain=%d,I=%d,P=%d\n",u8LGain,u32Factor,*u8GainI,*u8GainP);
5668*53ee8cc1Swenshuai.xi }
5669*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_hsync_start(void * pInstance,MS_U16 u16Value)5670*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_hsync_start(void *pInstance, MS_U16 u16Value)
5671*53ee8cc1Swenshuai.xi {
5672*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5673*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5674*53ee8cc1Swenshuai.xi 
5675*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_01_L, u16Value, 0x1FFF);
5676*53ee8cc1Swenshuai.xi }
5677*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_hsync_end(void * pInstance,MS_U16 u16Value)5678*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_hsync_end(void *pInstance, MS_U16 u16Value)
5679*53ee8cc1Swenshuai.xi {
5680*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5681*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5682*53ee8cc1Swenshuai.xi 
5683*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_02_L, u16Value, 0x1FFF);
5684*53ee8cc1Swenshuai.xi }
5685*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_hframe_de_start(void * pInstance,MS_U16 u16Value)5686*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_hframe_de_start(void *pInstance, MS_U16 u16Value)
5687*53ee8cc1Swenshuai.xi {
5688*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5689*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5690*53ee8cc1Swenshuai.xi 
5691*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_03_L, u16Value, 0x1FFF);
5692*53ee8cc1Swenshuai.xi }
5693*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_hframe_de_end(void * pInstance,MS_U16 u16Value)5694*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_hframe_de_end(void *pInstance, MS_U16 u16Value)
5695*53ee8cc1Swenshuai.xi {
5696*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5697*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5698*53ee8cc1Swenshuai.xi 
5699*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_04_L, u16Value, 0x1FFF);
5700*53ee8cc1Swenshuai.xi }
5701*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_htotal(void * pInstance,MS_U16 u16Value)5702*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_htotal(void *pInstance, MS_U16 u16Value)
5703*53ee8cc1Swenshuai.xi {
5704*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5705*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5706*53ee8cc1Swenshuai.xi 
5707*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_05_L, u16Value, 0x1FFF);
5708*53ee8cc1Swenshuai.xi }
5709*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_vtotal(void * pInstance,MS_U16 u16Value)5710*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_vtotal(void *pInstance, MS_U16 u16Value)
5711*53ee8cc1Swenshuai.xi {
5712*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5713*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5714*53ee8cc1Swenshuai.xi 
5715*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_07_L, u16Value, 0x1FFF);
5716*53ee8cc1Swenshuai.xi }
5717*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_vframe_de_start(void * pInstance,MS_U16 u16Value)5718*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_vframe_de_start(void *pInstance, MS_U16 u16Value)
5719*53ee8cc1Swenshuai.xi {
5720*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5721*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5722*53ee8cc1Swenshuai.xi 
5723*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0A_L, u16Value, 0x1FFF);
5724*53ee8cc1Swenshuai.xi }
5725*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_vframe_de_end(void * pInstance,MS_U16 u16Value)5726*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_vframe_de_end(void *pInstance, MS_U16 u16Value)
5727*53ee8cc1Swenshuai.xi {
5728*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5729*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5730*53ee8cc1Swenshuai.xi 
5731*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0B_L, u16Value, 0x1FFF);
5732*53ee8cc1Swenshuai.xi }
5733*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_vsync_start(void * pInstance,MS_U16 u16Value)5734*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_vsync_start(void *pInstance, MS_U16 u16Value)
5735*53ee8cc1Swenshuai.xi {
5736*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5737*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5738*53ee8cc1Swenshuai.xi 
5739*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0E_L, u16Value, 0x1FFF);
5740*53ee8cc1Swenshuai.xi }
5741*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_vsync_end(void * pInstance,MS_U16 u16Value)5742*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_vsync_end(void *pInstance, MS_U16 u16Value)
5743*53ee8cc1Swenshuai.xi {
5744*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5745*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5746*53ee8cc1Swenshuai.xi 
5747*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0F_L, u16Value, 0x1FFF);
5748*53ee8cc1Swenshuai.xi }
5749*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_tgen_reset_enable(void * pInstance,MS_BOOL bEnable)5750*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_tgen_reset_enable(void *pInstance, MS_BOOL bEnable)
5751*53ee8cc1Swenshuai.xi {
5752*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5753*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5754*53ee8cc1Swenshuai.xi 
5755*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_20_L, bEnable?BIT(0):0x00, BIT(0));
5756*53ee8cc1Swenshuai.xi }
5757*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_swreset_enable(void * pInstance,MS_BOOL bEnable)5758*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_swreset_enable(void *pInstance, MS_BOOL bEnable)
5759*53ee8cc1Swenshuai.xi {
5760*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5761*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5762*53ee8cc1Swenshuai.xi 
5763*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_21_L, bEnable?BIT(0):0x00, BIT(0));
5764*53ee8cc1Swenshuai.xi }
5765*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_mixer_bypass_enable(void * pInstance,MS_BOOL bEnable)5766*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_mixer_bypass_enable(void *pInstance, MS_BOOL bEnable)
5767*53ee8cc1Swenshuai.xi {
5768*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5769*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5770*53ee8cc1Swenshuai.xi 
5771*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, bEnable?BIT(0):0x00, BIT(0));
5772*53ee8cc1Swenshuai.xi }
5773*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_mixer_inv_alpha_enable(void * pInstance,MS_BOOL bEnable)5774*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_mixer_inv_alpha_enable(void *pInstance, MS_BOOL bEnable)
5775*53ee8cc1Swenshuai.xi {
5776*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5777*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5778*53ee8cc1Swenshuai.xi 
5779*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, bEnable?BIT(1):0x00, BIT(1));
5780*53ee8cc1Swenshuai.xi }
5781*53ee8cc1Swenshuai.xi //1:hs_out = hs&vfde
MHAL_SC_set_osdc_mixer_hs_n_vfde_enable(void * pInstance,MS_BOOL bEnable)5782*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_mixer_hs_n_vfde_enable(void *pInstance, MS_BOOL bEnable)
5783*53ee8cc1Swenshuai.xi {
5784*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5785*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5786*53ee8cc1Swenshuai.xi 
5787*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, bEnable?BIT(2):0x00, BIT(2));
5788*53ee8cc1Swenshuai.xi }
5789*53ee8cc1Swenshuai.xi //1:de(hfde)_out = de(hfde)&vfde
MHAL_SC_set_osdc_mixer_hfde_n_vfde_enable(void * pInstance,MS_BOOL bEnable)5790*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_mixer_hfde_n_vfde_enable(void *pInstance, MS_BOOL bEnable)
5791*53ee8cc1Swenshuai.xi {
5792*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5793*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5794*53ee8cc1Swenshuai.xi 
5795*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, bEnable?BIT(3):0x00, BIT(3));
5796*53ee8cc1Swenshuai.xi }
5797*53ee8cc1Swenshuai.xi 
MHAL_SC_set_osdc_clk_mux(void * pInstance,MS_U8 u8Clk_Mux)5798*53ee8cc1Swenshuai.xi void MHAL_SC_set_osdc_clk_mux(void *pInstance, MS_U8 u8Clk_Mux)
5799*53ee8cc1Swenshuai.xi {
5800*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_CKG_OSDC, u8Clk_Mux << 2, CKG_OSDC_MASK);
5801*53ee8cc1Swenshuai.xi }
5802*53ee8cc1Swenshuai.xi 
MHAL_SC_enable_osdc(void * pInstance,MS_BOOL bEnable)5803*53ee8cc1Swenshuai.xi void MHAL_SC_enable_osdc(void *pInstance, MS_BOOL bEnable)
5804*53ee8cc1Swenshuai.xi {
5805*53ee8cc1Swenshuai.xi     // Enable OSDC LPLL
5806*53ee8cc1Swenshuai.xi      if(bEnable)
5807*53ee8cc1Swenshuai.xi      {
5808*53ee8cc1Swenshuai.xi          MDrv_WriteRegBit(REG_CKG_OSDC, DISABLE, CKG_OSDC_INVERT);                   // Not Invert
5809*53ee8cc1Swenshuai.xi          MDrv_WriteRegBit(REG_CKG_OSDC, DISABLE, CKG_OSDC_GATED);                    // Enable clock
5810*53ee8cc1Swenshuai.xi      }
5811*53ee8cc1Swenshuai.xi      else
5812*53ee8cc1Swenshuai.xi      {
5813*53ee8cc1Swenshuai.xi          MDrv_WriteRegBit(REG_CKG_OSDC, ENABLE, CKG_OSDC_INVERT);                   // Not Invert
5814*53ee8cc1Swenshuai.xi          MDrv_WriteRegBit(REG_CKG_OSDC, ENABLE, CKG_OSDC_GATED);                    // Enable clock
5815*53ee8cc1Swenshuai.xi      }
5816*53ee8cc1Swenshuai.xi }
5817*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_hsync_start(void * pInstance)5818*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_hsync_start(void *pInstance)
5819*53ee8cc1Swenshuai.xi {
5820*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5821*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5822*53ee8cc1Swenshuai.xi 
5823*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_01_L, 0x1FFF);
5824*53ee8cc1Swenshuai.xi }
5825*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_hsync_end(void * pInstance)5826*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_hsync_end(void *pInstance)
5827*53ee8cc1Swenshuai.xi {
5828*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5829*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5830*53ee8cc1Swenshuai.xi 
5831*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_02_L, 0x1FFF);
5832*53ee8cc1Swenshuai.xi }
5833*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_hframe_de_start(void * pInstance)5834*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_hframe_de_start(void *pInstance)
5835*53ee8cc1Swenshuai.xi {
5836*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5837*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5838*53ee8cc1Swenshuai.xi 
5839*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_03_L, 0x1FFF);
5840*53ee8cc1Swenshuai.xi }
5841*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_hframe_de_end(void * pInstance)5842*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_hframe_de_end(void *pInstance)
5843*53ee8cc1Swenshuai.xi {
5844*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5845*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5846*53ee8cc1Swenshuai.xi 
5847*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_04_L, 0x1FFF);
5848*53ee8cc1Swenshuai.xi }
5849*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_htotal(void * pInstance)5850*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_htotal(void *pInstance)
5851*53ee8cc1Swenshuai.xi {
5852*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5853*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5854*53ee8cc1Swenshuai.xi 
5855*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_05_L, 0x1FFF);
5856*53ee8cc1Swenshuai.xi }
5857*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_vtotal(void * pInstance)5858*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_vtotal(void *pInstance)
5859*53ee8cc1Swenshuai.xi {
5860*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5861*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5862*53ee8cc1Swenshuai.xi 
5863*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_07_L, 0x1FFF);
5864*53ee8cc1Swenshuai.xi }
5865*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_vframe_de_start(void * pInstance)5866*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_vframe_de_start(void *pInstance)
5867*53ee8cc1Swenshuai.xi {
5868*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5869*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5870*53ee8cc1Swenshuai.xi 
5871*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0A_L, 0x1FFF);
5872*53ee8cc1Swenshuai.xi }
5873*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_vframe_de_end(void * pInstance)5874*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_vframe_de_end(void *pInstance)
5875*53ee8cc1Swenshuai.xi {
5876*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5877*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5878*53ee8cc1Swenshuai.xi 
5879*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0B_L, 0x1FFF);
5880*53ee8cc1Swenshuai.xi }
5881*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_vsync_start(void * pInstance)5882*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_vsync_start(void *pInstance)
5883*53ee8cc1Swenshuai.xi {
5884*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5885*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5886*53ee8cc1Swenshuai.xi 
5887*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0E_L, 0x1FFF);
5888*53ee8cc1Swenshuai.xi }
5889*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_tgen_vsync_end(void * pInstance)5890*53ee8cc1Swenshuai.xi MS_U16 MHAL_SC_get_osdc_tgen_vsync_end(void *pInstance)
5891*53ee8cc1Swenshuai.xi {
5892*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5893*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5894*53ee8cc1Swenshuai.xi 
5895*53ee8cc1Swenshuai.xi     return (MS_U16)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_0F_L, 0x1FFF);
5896*53ee8cc1Swenshuai.xi }
5897*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_mixer_bypass_status(void * pInstance)5898*53ee8cc1Swenshuai.xi MS_BOOL MHAL_SC_get_osdc_mixer_bypass_status(void *pInstance)
5899*53ee8cc1Swenshuai.xi {
5900*53ee8cc1Swenshuai.xi     MS_BOOL bEnable = DISABLE;
5901*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5902*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5903*53ee8cc1Swenshuai.xi 
5904*53ee8cc1Swenshuai.xi     bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, BIT(0)));
5905*53ee8cc1Swenshuai.xi     return bEnable;
5906*53ee8cc1Swenshuai.xi }
5907*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_mixer_inv_alpha_status(void * pInstance)5908*53ee8cc1Swenshuai.xi MS_BOOL MHAL_SC_get_osdc_mixer_inv_alpha_status(void *pInstance)
5909*53ee8cc1Swenshuai.xi {
5910*53ee8cc1Swenshuai.xi     MS_BOOL bEnable = DISABLE;
5911*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5912*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5913*53ee8cc1Swenshuai.xi 
5914*53ee8cc1Swenshuai.xi     bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, BIT(1))>>1);
5915*53ee8cc1Swenshuai.xi     return bEnable;
5916*53ee8cc1Swenshuai.xi }
5917*53ee8cc1Swenshuai.xi //1:hs_out = hs&vfde
MHAL_SC_get_osdc_mixer_hs_n_vfde_status(void * pInstance)5918*53ee8cc1Swenshuai.xi MS_BOOL MHAL_SC_get_osdc_mixer_hs_n_vfde_status(void *pInstance)
5919*53ee8cc1Swenshuai.xi {
5920*53ee8cc1Swenshuai.xi     MS_BOOL bEnable = DISABLE;
5921*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5922*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5923*53ee8cc1Swenshuai.xi 
5924*53ee8cc1Swenshuai.xi     bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, BIT(2))>>2);
5925*53ee8cc1Swenshuai.xi     return bEnable;
5926*53ee8cc1Swenshuai.xi }
5927*53ee8cc1Swenshuai.xi //1:de(hfde)_out = de(hfde)&vfde
MHAL_SC_get_osdc_mixer_hfde_n_vfde_status(void * pInstance)5928*53ee8cc1Swenshuai.xi MS_BOOL MHAL_SC_get_osdc_mixer_hfde_n_vfde_status(void *pInstance)
5929*53ee8cc1Swenshuai.xi {
5930*53ee8cc1Swenshuai.xi     MS_BOOL bEnable = DISABLE;
5931*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5932*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5933*53ee8cc1Swenshuai.xi 
5934*53ee8cc1Swenshuai.xi     bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK37_22_L, BIT(3))>>3);
5935*53ee8cc1Swenshuai.xi     return bEnable;
5936*53ee8cc1Swenshuai.xi }
5937*53ee8cc1Swenshuai.xi 
MHAL_SC_get_osdc_onoff_status(void * pInstance)5938*53ee8cc1Swenshuai.xi MS_BOOL MHAL_SC_get_osdc_onoff_status(void *pInstance)
5939*53ee8cc1Swenshuai.xi {
5940*53ee8cc1Swenshuai.xi     // Enable OSDC LPLL
5941*53ee8cc1Swenshuai.xi     MS_BOOL bEnable = DISABLE;
5942*53ee8cc1Swenshuai.xi     bEnable = (MS_BOOL)(MDrv_ReadRegBit(REG_CKG_OSDC, CKG_OSDC_GATED));
5943*53ee8cc1Swenshuai.xi     return bEnable;
5944*53ee8cc1Swenshuai.xi }
5945*53ee8cc1Swenshuai.xi 
MHal_XC_SetForceReadBank(void * pInstance,MS_BOOL bEnable,MS_U8 u8Bank,SCALER_WIN eWindow)5946*53ee8cc1Swenshuai.xi void MHal_XC_SetForceReadBank(void *pInstance, MS_BOOL bEnable, MS_U8 u8Bank, SCALER_WIN eWindow)
5947*53ee8cc1Swenshuai.xi {
5948*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5949*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5950*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
5951*53ee8cc1Swenshuai.xi     {
5952*53ee8cc1Swenshuai.xi         if (bEnable)
5953*53ee8cc1Swenshuai.xi         {
5954*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, BIT(11), BIT(11));
5955*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, (u8Bank & 0x7) << 8, BIT(10)|BIT(9)|BIT(8));
5956*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_06_L, ((u8Bank & 0x8) >> 3) << 14, BIT(14));
5957*53ee8cc1Swenshuai.xi         }
5958*53ee8cc1Swenshuai.xi         else
5959*53ee8cc1Swenshuai.xi         {
5960*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, 0, BIT(11));
5961*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, 0, BIT(10)|BIT(9)|BIT(8));
5962*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_06_L, 0, BIT(14));
5963*53ee8cc1Swenshuai.xi         }
5964*53ee8cc1Swenshuai.xi     }
5965*53ee8cc1Swenshuai.xi     else
5966*53ee8cc1Swenshuai.xi     {
5967*53ee8cc1Swenshuai.xi         if (bEnable)
5968*53ee8cc1Swenshuai.xi         {
5969*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, BIT(11), BIT(11));
5970*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, (u8Bank & 0x7) << 8, BIT(10)|BIT(9)|BIT(8));
5971*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_46_L, ((u8Bank & 0x8) >> 3) << 14, BIT(14));
5972*53ee8cc1Swenshuai.xi         }
5973*53ee8cc1Swenshuai.xi         else
5974*53ee8cc1Swenshuai.xi         {
5975*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, 0, BIT(11));
5976*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_47_L, 0, BIT(10)|BIT(9)|BIT(8));
5977*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_46_L, 0, BIT(14));
5978*53ee8cc1Swenshuai.xi         }
5979*53ee8cc1Swenshuai.xi     }
5980*53ee8cc1Swenshuai.xi }
5981*53ee8cc1Swenshuai.xi 
MHal_XC_SetDNRBufAddress(void * pInstance,MS_PHY u32DNRBaseAddr,SCALER_WIN eWindow)5982*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_SetDNRBufAddress(void *pInstance, MS_PHY u32DNRBaseAddr, SCALER_WIN eWindow)
5983*53ee8cc1Swenshuai.xi {
5984*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5985*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5986*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
5987*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
5988*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC._u32DNRBaseAddress[eWindow] = u32DNRBaseAddr;
5989*53ee8cc1Swenshuai.xi     return TRUE;
5990*53ee8cc1Swenshuai.xi }
5991*53ee8cc1Swenshuai.xi 
MHal_XC_GetDNRBufAddress(void * pInstance,SCALER_WIN eWindow)5992*53ee8cc1Swenshuai.xi MS_PHY MHal_XC_GetDNRBufAddress(void *pInstance, SCALER_WIN eWindow)
5993*53ee8cc1Swenshuai.xi {
5994*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
5995*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
5996*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
5997*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
5998*53ee8cc1Swenshuai.xi     return pXCResourcePrivate->sthal_SC._u32DNRBaseAddress[eWindow] ;
5999*53ee8cc1Swenshuai.xi }
6000*53ee8cc1Swenshuai.xi 
MHal_XC_SetDNRBufSize(void * pInstance,MS_PHY u32DNRBufSize,SCALER_WIN eWindow)6001*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_SetDNRBufSize(void *pInstance, MS_PHY u32DNRBufSize, SCALER_WIN eWindow)
6002*53ee8cc1Swenshuai.xi {
6003*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6004*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6005*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6006*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6007*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC._u32DNRBufferSize[eWindow] = u32DNRBufSize;
6008*53ee8cc1Swenshuai.xi     return TRUE;
6009*53ee8cc1Swenshuai.xi }
6010*53ee8cc1Swenshuai.xi 
MHal_XC_GetDNRBufSize(void * pInstance,SCALER_WIN eWindow)6011*53ee8cc1Swenshuai.xi MS_PHY MHal_XC_GetDNRBufSize(void *pInstance, SCALER_WIN eWindow)
6012*53ee8cc1Swenshuai.xi {
6013*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6014*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6015*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6016*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6017*53ee8cc1Swenshuai.xi     return pXCResourcePrivate->sthal_SC._u32DNRBufferSize[eWindow] ;
6018*53ee8cc1Swenshuai.xi }
6019*53ee8cc1Swenshuai.xi 
MHal_XC_SetFRCMBufAddress(void * pInstance,MS_PHY u32BaseAddr,SCALER_WIN eWindow)6020*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_SetFRCMBufAddress(void *pInstance, MS_PHY u32BaseAddr, SCALER_WIN eWindow)
6021*53ee8cc1Swenshuai.xi {
6022*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6023*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6024*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6025*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6026*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC._u32FRCBaseAddress[eWindow] = u32BaseAddr;
6027*53ee8cc1Swenshuai.xi     return TRUE;
6028*53ee8cc1Swenshuai.xi }
6029*53ee8cc1Swenshuai.xi 
MHal_XC_GetFRCMBufAddress(void * pInstance,SCALER_WIN eWindow)6030*53ee8cc1Swenshuai.xi MS_PHY MHal_XC_GetFRCMBufAddress(void *pInstance, SCALER_WIN eWindow)
6031*53ee8cc1Swenshuai.xi {
6032*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6033*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6034*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6035*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6036*53ee8cc1Swenshuai.xi     return pXCResourcePrivate->sthal_SC._u32FRCBaseAddress[eWindow] ;
6037*53ee8cc1Swenshuai.xi }
6038*53ee8cc1Swenshuai.xi 
MHal_XC_SetFRCMBufSize(void * pInstance,MS_PHY u32BufSize,SCALER_WIN eWindow)6039*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_SetFRCMBufSize(void *pInstance, MS_PHY u32BufSize, SCALER_WIN eWindow)
6040*53ee8cc1Swenshuai.xi {
6041*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6042*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6043*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6044*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6045*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_SC._u32FRCBufferSize[eWindow] = u32BufSize;
6046*53ee8cc1Swenshuai.xi     return TRUE;
6047*53ee8cc1Swenshuai.xi }
6048*53ee8cc1Swenshuai.xi 
MHal_XC_GetFRCMBufSize(void * pInstance,SCALER_WIN eWindow)6049*53ee8cc1Swenshuai.xi MS_PHY MHal_XC_GetFRCMBufSize(void *pInstance, SCALER_WIN eWindow)
6050*53ee8cc1Swenshuai.xi {
6051*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6052*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6053*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6054*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6055*53ee8cc1Swenshuai.xi     return pXCResourcePrivate->sthal_SC._u32FRCBufferSize[eWindow] ;
6056*53ee8cc1Swenshuai.xi }
6057*53ee8cc1Swenshuai.xi 
MHal_XC_SetDualDNRBufAddress(void * pInstance,MS_PHY u32DNRBaseAddr,SCALER_WIN eWindow)6058*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_SetDualDNRBufAddress(void *pInstance, MS_PHY u32DNRBaseAddr, SCALER_WIN eWindow)
6059*53ee8cc1Swenshuai.xi {
6060*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6061*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6062*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6063*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6064*53ee8cc1Swenshuai.xi     pXCResourcePrivate->_u32DualDNRBaseAddress[eWindow] = u32DNRBaseAddr;
6065*53ee8cc1Swenshuai.xi     return TRUE;
6066*53ee8cc1Swenshuai.xi }
6067*53ee8cc1Swenshuai.xi 
MHal_XC_GetDualDNRBufAddress(void * pInstance,SCALER_WIN eWindow)6068*53ee8cc1Swenshuai.xi MS_PHY MHal_XC_GetDualDNRBufAddress(void *pInstance, SCALER_WIN eWindow)
6069*53ee8cc1Swenshuai.xi {
6070*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6071*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6072*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6073*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6074*53ee8cc1Swenshuai.xi     return pXCResourcePrivate->_u32DualDNRBaseAddress[eWindow];
6075*53ee8cc1Swenshuai.xi }
6076*53ee8cc1Swenshuai.xi 
MHal_XC_SetDualDNRBufSize(void * pInstance,MS_PHY u32DNRBufSize,SCALER_WIN eWindow)6077*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_SetDualDNRBufSize(void *pInstance, MS_PHY u32DNRBufSize, SCALER_WIN eWindow)
6078*53ee8cc1Swenshuai.xi {
6079*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6080*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6081*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6082*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6083*53ee8cc1Swenshuai.xi     pXCResourcePrivate->_u32DualDNRBufferSize[eWindow] = u32DNRBufSize;
6084*53ee8cc1Swenshuai.xi     return TRUE;
6085*53ee8cc1Swenshuai.xi }
6086*53ee8cc1Swenshuai.xi 
MHal_XC_GetDualDNRBufSize(void * pInstance,SCALER_WIN eWindow)6087*53ee8cc1Swenshuai.xi MS_PHY MHal_XC_GetDualDNRBufSize(void *pInstance, SCALER_WIN eWindow)
6088*53ee8cc1Swenshuai.xi {
6089*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6090*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6091*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6092*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6093*53ee8cc1Swenshuai.xi     return pXCResourcePrivate->_u32DualDNRBufferSize[eWindow] ;
6094*53ee8cc1Swenshuai.xi }
6095*53ee8cc1Swenshuai.xi 
MHal_XC_Init_Patch(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)6096*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_Init_Patch(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
6097*53ee8cc1Swenshuai.xi {
6098*53ee8cc1Swenshuai.xi     if (eWindow >= MAX_WINDOW)
6099*53ee8cc1Swenshuai.xi     {
6100*53ee8cc1Swenshuai.xi         printf("[%s,%5d] maximum window exceeded",__FUNCTION__,__LINE__);
6101*53ee8cc1Swenshuai.xi         return FALSE;
6102*53ee8cc1Swenshuai.xi     }
6103*53ee8cc1Swenshuai.xi 
6104*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6105*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6106*53ee8cc1Swenshuai.xi 
6107*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK23_6F_L, 0x20, 0x3F); // by HW RD's request, for BB section offset issue
6108*53ee8cc1Swenshuai.xi 
6109*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_25_L, 0x3030); // by HW RD's request, for HDMI 4K BW issue, adjust R/W line buffer length
6110*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
6111*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK52_25_L, 0x3030); // by HW RD's request, for HDMI 4K BW issue, adjust R/W line buffer length
6112*53ee8cc1Swenshuai.xi #endif
6113*53ee8cc1Swenshuai.xi 
6114*53ee8cc1Swenshuai.xi     // SW patch for Monaco
6115*53ee8cc1Swenshuai.xi     // by HW RD's request, to fix HDMI 1080i repeat garbage at left side
6116*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK12_37_L, 0x20); // bypass main line buffer length setting
6117*53ee8cc1Swenshuai.xi     SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK11_37_L, 0x20); // bypass sub line buffer length setting
6118*53ee8cc1Swenshuai.xi 
6119*53ee8cc1Swenshuai.xi     // ECO item for Monaco: hvsp PIP B section last flag error
6120*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK23_5F_L, BIT(14), BIT(14));
6121*53ee8cc1Swenshuai.xi 
6122*53ee8cc1Swenshuai.xi     // ECO item for Monaco: ip2ve 4K path Vsync need inverse
6123*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_7F_L, BIT(14), BIT(14));
6124*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK04_7F_L, BIT(14), BIT(14));
6125*53ee8cc1Swenshuai.xi 
6126*53ee8cc1Swenshuai.xi     // SW patch for muji : 4k2k 3D LA out show garbage on the top, issue with BW
6127*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK58_10_L, 0x0000, BIT(0));//disable SCM sub OP
6128*53ee8cc1Swenshuai.xi 
6129*53ee8cc1Swenshuai.xi     // BK00_03[13] conflict with compression mode (patch for HW issue)
6130*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_03_L, 0x0000, 0x2000);
6131*53ee8cc1Swenshuai.xi 
6132*53ee8cc1Swenshuai.xi     //U03 compatible setting
6133*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK32_66_L, BIT(13), BIT(13));
6134*53ee8cc1Swenshuai.xi 
6135*53ee8cc1Swenshuai.xi     ///Patch here ////
6136*53ee8cc1Swenshuai.xi     #if (FRC_INSIDE)
6137*53ee8cc1Swenshuai.xi     MHal_FRC_interrupt_mask(pInstance, 0xFF);
6138*53ee8cc1Swenshuai.xi     #endif
6139*53ee8cc1Swenshuai.xi 
6140*53ee8cc1Swenshuai.xi     // SW patch for Eisntein
6141*53ee8cc1Swenshuai.xi     // With HW Auto no signal case,  sub video source change would causes OP1 broken, looks like main video broken
6142*53ee8cc1Swenshuai.xi     Hal_SC_ip_enable_turnoff_OP1_for_AutoNoSignal(pInstance, DISABLE);
6143*53ee8cc1Swenshuai.xi 
6144*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_61_L, 0x01, 0x03); // for HDMI 2.0, always receive 444 format
6145*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK01_63_L, 0x01, 0x01); // for HDMI odd Htt support
6146*53ee8cc1Swenshuai.xi 
6147*53ee8cc1Swenshuai.xi     return TRUE;
6148*53ee8cc1Swenshuai.xi }
MHal_XC_IsPNLYUVOutput(void * pInstance)6149*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_IsPNLYUVOutput(void *pInstance)
6150*53ee8cc1Swenshuai.xi {
6151*53ee8cc1Swenshuai.xi     MS_BOOL bIsPNLYUVOutput = TRUE;
6152*53ee8cc1Swenshuai.xi #if 0//below is logic from TV, need box RD's confirm, disable it temporary
6153*53ee8cc1Swenshuai.xi     MS_BOOL bIsY2REnable = FALSE, bIsR2YEnable = FALSE;
6154*53ee8cc1Swenshuai.xi     SCALER_WIN eWindow = MAIN_WINDOW;
6155*53ee8cc1Swenshuai.xi     MS_U16 u16Temp = 0;
6156*53ee8cc1Swenshuai.xi     //Get CSC state before OP2
6157*53ee8cc1Swenshuai.xi     if(gSrcInfo[MAIN_WINDOW].bBlackscreenEnabled || gSrcInfo[MAIN_WINDOW].bBluescreenEnabled)
6158*53ee8cc1Swenshuai.xi     {
6159*53ee8cc1Swenshuai.xi         //Main is mute, so check sub
6160*53ee8cc1Swenshuai.xi         if(Hal_SC_Is_subwindow_enable())
6161*53ee8cc1Swenshuai.xi         {
6162*53ee8cc1Swenshuai.xi             if(!(gSrcInfo[SUB_WINDOW].bBlackscreenEnabled || gSrcInfo[SUB_WINDOW].bBluescreenEnabled))
6163*53ee8cc1Swenshuai.xi             {
6164*53ee8cc1Swenshuai.xi                 eWindow = SUB_WINDOW;
6165*53ee8cc1Swenshuai.xi             }
6166*53ee8cc1Swenshuai.xi         }
6167*53ee8cc1Swenshuai.xi     }
6168*53ee8cc1Swenshuai.xi 
6169*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
6170*53ee8cc1Swenshuai.xi     {
6171*53ee8cc1Swenshuai.xi         u16Temp = SC_R2BYTE(REG_SC_BK10_2F_L);
6172*53ee8cc1Swenshuai.xi         if((u16Temp & ( BIT(0) | BIT(2) | BIT(4))) == ( BIT(0) | BIT(2) | BIT(4)))
6173*53ee8cc1Swenshuai.xi         {
6174*53ee8cc1Swenshuai.xi             bIsY2REnable =  TRUE;
6175*53ee8cc1Swenshuai.xi         }
6176*53ee8cc1Swenshuai.xi     }
6177*53ee8cc1Swenshuai.xi     else
6178*53ee8cc1Swenshuai.xi     {
6179*53ee8cc1Swenshuai.xi         u16Temp = SC_R2BYTE(REG_SC_BK0F_26_L);
6180*53ee8cc1Swenshuai.xi         if((u16Temp & ( BIT(0) | BIT(2) | BIT(4))) == ( BIT(0) | BIT(2) | BIT(4)))
6181*53ee8cc1Swenshuai.xi         {
6182*53ee8cc1Swenshuai.xi             bIsY2REnable =  TRUE;
6183*53ee8cc1Swenshuai.xi         }
6184*53ee8cc1Swenshuai.xi     }
6185*53ee8cc1Swenshuai.xi 
6186*53ee8cc1Swenshuai.xi     if(bIsY2REnable)
6187*53ee8cc1Swenshuai.xi     {
6188*53ee8cc1Swenshuai.xi         bIsPNLYUVOutput = FALSE;
6189*53ee8cc1Swenshuai.xi     }
6190*53ee8cc1Swenshuai.xi     else
6191*53ee8cc1Swenshuai.xi     {
6192*53ee8cc1Swenshuai.xi         //OP Y2R disable, so check op input
6193*53ee8cc1Swenshuai.xi         if(eWindow == MAIN_WINDOW)
6194*53ee8cc1Swenshuai.xi         {
6195*53ee8cc1Swenshuai.xi             bIsR2YEnable = (MS_BOOL)(SC_R2BYTEMSK(REG_SC_BK02_40_L, BIT(3)) || SC_R2BYTEMSK(REG_SC_BK18_06_L, BIT(0)));
6196*53ee8cc1Swenshuai.xi 
6197*53ee8cc1Swenshuai.xi         }
6198*53ee8cc1Swenshuai.xi         else
6199*53ee8cc1Swenshuai.xi         {
6200*53ee8cc1Swenshuai.xi             bIsR2YEnable = (MS_BOOL)(SC_R2BYTEMSK(REG_SC_BK04_40_L, BIT(3)) || SC_R2BYTEMSK(REG_SC_BK18_76_L, BIT(0)));
6201*53ee8cc1Swenshuai.xi         }
6202*53ee8cc1Swenshuai.xi 
6203*53ee8cc1Swenshuai.xi         if(bIsR2YEnable)
6204*53ee8cc1Swenshuai.xi         {
6205*53ee8cc1Swenshuai.xi             //Y2R enable
6206*53ee8cc1Swenshuai.xi             bIsPNLYUVOutput = TRUE;
6207*53ee8cc1Swenshuai.xi         }
6208*53ee8cc1Swenshuai.xi         else
6209*53ee8cc1Swenshuai.xi         {
6210*53ee8cc1Swenshuai.xi             //All Csc is off, so check input
6211*53ee8cc1Swenshuai.xi             //VGA/DVI/rgb HDMI is rgb input
6212*53ee8cc1Swenshuai.xi             if(  IsSrcTypeVga(gSrcInfo[eWindow].enInputSourceType) //VGA
6213*53ee8cc1Swenshuai.xi                ||IsSrcTypeDVI(gSrcInfo[eWindow].enInputSourceType) //DVI
6214*53ee8cc1Swenshuai.xi                ||(  IsSrcTypeHDMI(gSrcInfo[eWindow].enInputSourceType)
6215*53ee8cc1Swenshuai.xi                   &&(g_HdmiPollingStatus.bIsHDMIMode == TRUE)
6216*53ee8cc1Swenshuai.xi                   &&(g_HdmiPollingStatus.u8ColorFormat == MS_HDMI_COLOR_RGB))//HDMI RGB
6217*53ee8cc1Swenshuai.xi                ||(  IsSrcTypeHDMI(gSrcInfo[eWindow].enInputSourceType)
6218*53ee8cc1Swenshuai.xi                   &&(g_HdmiPollingStatus.bIsHDMIMode == FALSE)) //HDMI_DVI
6219*53ee8cc1Swenshuai.xi               )
6220*53ee8cc1Swenshuai.xi             {
6221*53ee8cc1Swenshuai.xi                 bIsPNLYUVOutput = FALSE;
6222*53ee8cc1Swenshuai.xi             }
6223*53ee8cc1Swenshuai.xi             else
6224*53ee8cc1Swenshuai.xi             {
6225*53ee8cc1Swenshuai.xi                 bIsPNLYUVOutput = TRUE;
6226*53ee8cc1Swenshuai.xi             }
6227*53ee8cc1Swenshuai.xi         }
6228*53ee8cc1Swenshuai.xi     }
6229*53ee8cc1Swenshuai.xi #endif
6230*53ee8cc1Swenshuai.xi     return bIsPNLYUVOutput;
6231*53ee8cc1Swenshuai.xi }
6232*53ee8cc1Swenshuai.xi 
MHal_SC_Memory_Request_Force_Off(void * pInstance,MS_BOOL bEnable,E_XC_FORCE_MEMORY_REQUEST_OFF eMemoryOffType)6233*53ee8cc1Swenshuai.xi static void MHal_SC_Memory_Request_Force_Off(void * pInstance, MS_BOOL bEnable,E_XC_FORCE_MEMORY_REQUEST_OFF eMemoryOffType)
6234*53ee8cc1Swenshuai.xi {
6235*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6236*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6237*53ee8cc1Swenshuai.xi 
6238*53ee8cc1Swenshuai.xi     switch(eMemoryOffType)
6239*53ee8cc1Swenshuai.xi     {
6240*53ee8cc1Swenshuai.xi         case E_XC_FORCE_MEMORY_REQUEST_OFF_MAIN:
6241*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_39_L, bEnable?BIT(0):0x00, BIT(0));
6242*53ee8cc1Swenshuai.xi             break;
6243*53ee8cc1Swenshuai.xi         case E_XC_FORCE_MEMORY_REQUEST_OFF_MIAN_DUAL:
6244*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_39_L, bEnable?BIT(4):0x00, BIT(4));
6245*53ee8cc1Swenshuai.xi             break;
6246*53ee8cc1Swenshuai.xi         case E_XC_FORCE_MEMORY_REQUEST_OFF_SUB:
6247*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_39_L, bEnable?BIT(1):0x00, BIT(1));
6248*53ee8cc1Swenshuai.xi             break;
6249*53ee8cc1Swenshuai.xi         case E_XC_FORCE_MEMORY_REQUEST_OFF_SUB_DUAL:
6250*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_39_L, bEnable?BIT(2):0x00, BIT(2));
6251*53ee8cc1Swenshuai.xi             break;
6252*53ee8cc1Swenshuai.xi         case E_XC_FORCE_MEMORY_REQUEST_OFF_SUB_OPW:
6253*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_39_L, bEnable?BIT(6):0x00, BIT(6));
6254*53ee8cc1Swenshuai.xi             break;
6255*53ee8cc1Swenshuai.xi         case E_XC_FORCE_MEMORY_REQUEST_OFF_ALL:
6256*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0D_39_L, bEnable?(BIT(0)|BIT(1)|BIT(2)|BIT(4)|BIT(6)):0x00, (BIT(0)|BIT(1)|BIT(2)|BIT(4)|BIT(6)));
6257*53ee8cc1Swenshuai.xi             break;
6258*53ee8cc1Swenshuai.xi         default:
6259*53ee8cc1Swenshuai.xi             break;
6260*53ee8cc1Swenshuai.xi     }
6261*53ee8cc1Swenshuai.xi }
6262*53ee8cc1Swenshuai.xi 
Hal_SC_Init(void * pInstance)6263*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_Init(void *pInstance)
6264*53ee8cc1Swenshuai.xi {
6265*53ee8cc1Swenshuai.xi #ifndef DONT_USE_CMA
6266*53ee8cc1Swenshuai.xi #if (XC_SUPPORT_CMA ==TRUE)
6267*53ee8cc1Swenshuai.xi     MHal_SC_Memory_Request_Force_Off(pInstance, TRUE, E_XC_FORCE_MEMORY_REQUEST_OFF_ALL);
6268*53ee8cc1Swenshuai.xi #endif
6269*53ee8cc1Swenshuai.xi #endif
6270*53ee8cc1Swenshuai.xi     return TRUE;
6271*53ee8cc1Swenshuai.xi }
6272*53ee8cc1Swenshuai.xi 
Hal_SC_Get_Device_Offset(MS_U8 deviceIdx)6273*53ee8cc1Swenshuai.xi MS_U32 Hal_SC_Get_Device_Offset(MS_U8 deviceIdx)
6274*53ee8cc1Swenshuai.xi {
6275*53ee8cc1Swenshuai.xi 	MS_U32 ret_U32 = 0 ;
6276*53ee8cc1Swenshuai.xi 	if(deviceIdx == 0 )
6277*53ee8cc1Swenshuai.xi 	{
6278*53ee8cc1Swenshuai.xi 		ret_U32 = MAX_XC_DEVICE0_OFFSET;
6279*53ee8cc1Swenshuai.xi 	}
6280*53ee8cc1Swenshuai.xi 	else if(deviceIdx == 1)
6281*53ee8cc1Swenshuai.xi 	{
6282*53ee8cc1Swenshuai.xi 		ret_U32 = MAX_XC_DEVICE1_OFFSET;
6283*53ee8cc1Swenshuai.xi 	}
6284*53ee8cc1Swenshuai.xi 	return ret_U32;
6285*53ee8cc1Swenshuai.xi }
6286*53ee8cc1Swenshuai.xi 
HAL_SC_Set_LB_MergeAddress(void * pInstance)6287*53ee8cc1Swenshuai.xi void HAL_SC_Set_LB_MergeAddress(void *pInstance)
6288*53ee8cc1Swenshuai.xi {
6289*53ee8cc1Swenshuai.xi     return;
6290*53ee8cc1Swenshuai.xi }
6291*53ee8cc1Swenshuai.xi 
Hal_SC_set_edclk(void * pInstance,MS_U8 u8Clk_Mux,MS_BOOL bEnable,SCALER_WIN eWindow)6292*53ee8cc1Swenshuai.xi void Hal_SC_set_edclk(void *pInstance, MS_U8 u8Clk_Mux, MS_BOOL bEnable, SCALER_WIN eWindow)
6293*53ee8cc1Swenshuai.xi {
6294*53ee8cc1Swenshuai.xi     if(eWindow==MAIN_WINDOW)
6295*53ee8cc1Swenshuai.xi     {
6296*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(REG_CKG_EDCLK_F2, (bEnable? 0x00 : CKG_EDCLK_F2_GATED), CKG_EDCLK_F2_GATED);
6297*53ee8cc1Swenshuai.xi         if(bEnable)
6298*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(REG_CKG_EDCLK_F2, u8Clk_Mux, CKG_EDCLK_F2_MASK);
6299*53ee8cc1Swenshuai.xi     }
6300*53ee8cc1Swenshuai.xi     else if(eWindow==SUB_WINDOW)
6301*53ee8cc1Swenshuai.xi     {
6302*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(REG_CKG_EDCLK_F1, (bEnable? 0x00 : CKG_EDCLK_F1_GATED), CKG_EDCLK_F1_GATED);
6303*53ee8cc1Swenshuai.xi         if(bEnable)
6304*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(REG_CKG_EDCLK_F1, u8Clk_Mux, CKG_EDCLK_F1_MASK);
6305*53ee8cc1Swenshuai.xi     }
6306*53ee8cc1Swenshuai.xi }
6307*53ee8cc1Swenshuai.xi 
Hal_SC_set_ficlk2(void * pInstance,MS_U8 u8Clk_Mux,MS_BOOL bEnable,SCALER_WIN eWindow)6308*53ee8cc1Swenshuai.xi void Hal_SC_set_ficlk2(void *pInstance, MS_U8 u8Clk_Mux, MS_BOOL bEnable, SCALER_WIN eWindow)
6309*53ee8cc1Swenshuai.xi {
6310*53ee8cc1Swenshuai.xi     if(eWindow==MAIN_WINDOW)
6311*53ee8cc1Swenshuai.xi     {
6312*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(REG_CKG_FICLK2_F2, (bEnable? 0x00 : CKG_FICLK2_F2_GATED), CKG_FICLK2_F2_GATED);
6313*53ee8cc1Swenshuai.xi         if(bEnable)
6314*53ee8cc1Swenshuai.xi             MDrv_WriteByteMask(REG_CKG_FICLK2_F2, u8Clk_Mux, CKG_FICLK2_F2_MASK);
6315*53ee8cc1Swenshuai.xi     }
6316*53ee8cc1Swenshuai.xi     else if(eWindow==SUB_WINDOW)
6317*53ee8cc1Swenshuai.xi     {
6318*53ee8cc1Swenshuai.xi         printf("[%s,%5d] ficlk2_f2 not support sub!",__FUNCTION__,__LINE__);// no ficlk2_f1 for sub window
6319*53ee8cc1Swenshuai.xi     }
6320*53ee8cc1Swenshuai.xi }
6321*53ee8cc1Swenshuai.xi 
Hal_SC_set_fmclk(void * pInstance,MS_BOOL bEnable)6322*53ee8cc1Swenshuai.xi void Hal_SC_set_fmclk(void *pInstance, MS_BOOL bEnable)
6323*53ee8cc1Swenshuai.xi {
6324*53ee8cc1Swenshuai.xi     if(bEnable == TRUE)
6325*53ee8cc1Swenshuai.xi     {
6326*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(REG_CKG_FMCLK, CKG_FMCLK_FCLK, CKG_FMCLK_MASK);
6327*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(REG_CKG_FMCLK, DISABLE, CKG_FMCLK_GATED);
6328*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(REG_CKG_FMCLK, DISABLE, CKG_FMCLK_INVERT);
6329*53ee8cc1Swenshuai.xi     }
6330*53ee8cc1Swenshuai.xi     else
6331*53ee8cc1Swenshuai.xi     {
6332*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(REG_CKG_FMCLK, ENABLE, CKG_FMCLK_GATED); // disable clock
6333*53ee8cc1Swenshuai.xi     }
6334*53ee8cc1Swenshuai.xi }
6335*53ee8cc1Swenshuai.xi 
HAL_SC_EnableLegacyMode(void * pInstance,MS_BOOL bEnable)6336*53ee8cc1Swenshuai.xi void HAL_SC_EnableLegacyMode(void *pInstance, MS_BOOL bEnable)
6337*53ee8cc1Swenshuai.xi {
6338*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 4)
6339*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6340*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6341*53ee8cc1Swenshuai.xi 
6342*53ee8cc1Swenshuai.xi     if (psXCInstPri->u32DeviceID == 0)
6343*53ee8cc1Swenshuai.xi     {
6344*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_01_L, (bEnable<<0), BIT(0));
6345*53ee8cc1Swenshuai.xi     }
6346*53ee8cc1Swenshuai.xi     else
6347*53ee8cc1Swenshuai.xi     {
6348*53ee8cc1Swenshuai.xi         // do nothing, because there is only legacy mode in SC2, we don't have to do any switch
6349*53ee8cc1Swenshuai.xi     }
6350*53ee8cc1Swenshuai.xi #endif
6351*53ee8cc1Swenshuai.xi }
6352*53ee8cc1Swenshuai.xi 
MHal_XC_DTVPatchISR(SC_INT_SRC eIntNum,void * pParam)6353*53ee8cc1Swenshuai.xi static void  MHal_XC_DTVPatchISR(SC_INT_SRC eIntNum, void * pParam)
6354*53ee8cc1Swenshuai.xi {
6355*53ee8cc1Swenshuai.xi     void *pInstance = pu32XCInst_private;
6356*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6357*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6358*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6359*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6360*53ee8cc1Swenshuai.xi 
6361*53ee8cc1Swenshuai.xi     if(gSrcInfo[MAIN_WINDOW].bBlackscreenEnabled==FALSE)
6362*53ee8cc1Swenshuai.xi     {
6363*53ee8cc1Swenshuai.xi         //Check timing 2s
6364*53ee8cc1Swenshuai.xi         if(((MsOS_GetSystemTime()- u32DTVPatchTimer)>2000))
6365*53ee8cc1Swenshuai.xi         {
6366*53ee8cc1Swenshuai.xi             u32DTVPatchTimer = MsOS_GetSystemTime();
6367*53ee8cc1Swenshuai.xi             u16FDMaskCount=0;
6368*53ee8cc1Swenshuai.xi         }
6369*53ee8cc1Swenshuai.xi 
6370*53ee8cc1Swenshuai.xi         //Check FD mask
6371*53ee8cc1Swenshuai.xi         if(bPreFDMaskStatse != (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_67_L, BIT(4))==0))
6372*53ee8cc1Swenshuai.xi         {
6373*53ee8cc1Swenshuai.xi             bPreFDMaskStatse =(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_67_L, BIT(4))==0);
6374*53ee8cc1Swenshuai.xi             u16FDMaskCount++;
6375*53ee8cc1Swenshuai.xi         }
6376*53ee8cc1Swenshuai.xi 
6377*53ee8cc1Swenshuai.xi         if(u16FDMaskCount>6)
6378*53ee8cc1Swenshuai.xi         {
6379*53ee8cc1Swenshuai.xi             if (MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
6380*53ee8cc1Swenshuai.xi             {
6381*53ee8cc1Swenshuai.xi                 //UC_CTL off
6382*53ee8cc1Swenshuai.xi                 _MLOAD_ENTRY(pInstance);
6383*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK17_01_L, 0 ,BIT(0));
6384*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK57_23_L, 0 ,0x40);
6385*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_67_L, 0x80 ,0xF0);
6386*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK12_07_L, 0 ,BIT(0));
6387*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK11_20_L, 0 ,BIT(7));
6388*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK11_21_L, 0 ,BIT(15));
6389*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK05_78_L, 0 ,0xC000);
6390*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK2A_02_L, BIT(1) ,BIT(1)|BIT(15));
6391*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK05_20_L, 0 ,BIT(0));
6392*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK05_12_L, 0 ,BIT(0));
6393*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK2A_07_L, 0 ,BIT(0));
6394*53ee8cc1Swenshuai.xi                 MDrv_XC_MLoad_Fire(pInstance, TRUE);
6395*53ee8cc1Swenshuai.xi                 _MLOAD_RETURN(pInstance);
6396*53ee8cc1Swenshuai.xi             }
6397*53ee8cc1Swenshuai.xi             else
6398*53ee8cc1Swenshuai.xi             {
6399*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK17_01_L, 0 ,BIT(0));
6400*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK57_23_L, 0 ,0x40);
6401*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_67_L, 0x80 ,0xF0);
6402*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_07_L, 0 ,BIT(0));
6403*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_20_L, 0 ,BIT(7));
6404*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK11_21_L, 0 ,BIT(15));
6405*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK05_78_L, 0 ,0xC000);
6406*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK2A_02_L, BIT(1) ,BIT(1)|BIT(15));
6407*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK05_20_L, 0 ,BIT(0));
6408*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK05_12_L, 0 ,BIT(0));
6409*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK2A_07_L, 0 ,BIT(0));
6410*53ee8cc1Swenshuai.xi             }
6411*53ee8cc1Swenshuai.xi 
6412*53ee8cc1Swenshuai.xi             u16FDMaskCount=0;
6413*53ee8cc1Swenshuai.xi 
6414*53ee8cc1Swenshuai.xi             if(TRUE == MDrv_XC_InterruptIsAttached(pInstance, SC_INT_VSINT, MHal_XC_DTVPatchISR, (void *)NULL))
6415*53ee8cc1Swenshuai.xi             {
6416*53ee8cc1Swenshuai.xi                 //Disable ISR
6417*53ee8cc1Swenshuai.xi                 MDrv_XC_InterruptDeAttachWithoutMutex(pInstance, SC_INT_VSINT, MHal_XC_DTVPatchISR, (void *)NULL);
6418*53ee8cc1Swenshuai.xi             }
6419*53ee8cc1Swenshuai.xi         }
6420*53ee8cc1Swenshuai.xi     }
6421*53ee8cc1Swenshuai.xi }
6422*53ee8cc1Swenshuai.xi 
MHal_XC_DTVPatch(void * pInstance,SCALER_WIN eWindow)6423*53ee8cc1Swenshuai.xi void MHal_XC_DTVPatch(void *pInstance, SCALER_WIN eWindow)
6424*53ee8cc1Swenshuai.xi {
6425*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6426*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6427*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6428*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6429*53ee8cc1Swenshuai.xi 
6430*53ee8cc1Swenshuai.xi     if(eWindow ==MAIN_WINDOW)
6431*53ee8cc1Swenshuai.xi     {
6432*53ee8cc1Swenshuai.xi         if(IsSrcTypeDTV(gSrcInfo[MAIN_WINDOW].enInputSourceType)
6433*53ee8cc1Swenshuai.xi             &&(gSrcInfo[MAIN_WINDOW].stCapWin.width==1920)
6434*53ee8cc1Swenshuai.xi             &&(gSrcInfo[MAIN_WINDOW].stCapWin.height==1080)
6435*53ee8cc1Swenshuai.xi             &&(gSrcInfo[MAIN_WINDOW].bInterlace==TRUE))
6436*53ee8cc1Swenshuai.xi         {
6437*53ee8cc1Swenshuai.xi             //DTV 1080i patch
6438*53ee8cc1Swenshuai.xi             if(FALSE == MDrv_XC_InterruptIsAttached(pInstance, SC_INT_VSINT,MHal_XC_DTVPatchISR, (void *)NULL))
6439*53ee8cc1Swenshuai.xi             {
6440*53ee8cc1Swenshuai.xi                 //Start DTV 1080i patch, enable ISR
6441*53ee8cc1Swenshuai.xi                 MDrv_XC_InterruptAttachWithoutMutex(pInstance, SC_INT_VSINT,MHal_XC_DTVPatchISR, (void *)NULL);
6442*53ee8cc1Swenshuai.xi             }
6443*53ee8cc1Swenshuai.xi         }
6444*53ee8cc1Swenshuai.xi         else
6445*53ee8cc1Swenshuai.xi         {
6446*53ee8cc1Swenshuai.xi             if(TRUE == MDrv_XC_InterruptIsAttached(pInstance, SC_INT_VSINT, MHal_XC_DTVPatchISR, (void *)NULL))
6447*53ee8cc1Swenshuai.xi             {
6448*53ee8cc1Swenshuai.xi                 //Disable ISR
6449*53ee8cc1Swenshuai.xi                 MDrv_XC_InterruptDeAttachWithoutMutex(pInstance, SC_INT_VSINT, MHal_XC_DTVPatchISR, (void *)NULL);
6450*53ee8cc1Swenshuai.xi             }
6451*53ee8cc1Swenshuai.xi         }
6452*53ee8cc1Swenshuai.xi     }
6453*53ee8cc1Swenshuai.xi }
6454*53ee8cc1Swenshuai.xi 
6455*53ee8cc1Swenshuai.xi 
6456*53ee8cc1Swenshuai.xi #ifndef DONT_USE_CMA
6457*53ee8cc1Swenshuai.xi #if (XC_SUPPORT_CMA ==TRUE)
MHal_XC_Get_CMA_Addr(void * pInstance,XC_CMA_CLIENT enCmaClient,MS_U32 u32GetCMASize,SCALER_WIN eWindow)6458*53ee8cc1Swenshuai.xi MS_U64 MHal_XC_Get_CMA_Addr(void *pInstance, XC_CMA_CLIENT enCmaClient, MS_U32 u32GetCMASize, SCALER_WIN eWindow)
6459*53ee8cc1Swenshuai.xi {
6460*53ee8cc1Swenshuai.xi     MS_U64 u64CMAAddr = 0;
6461*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6462*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6463*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6464*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6465*53ee8cc1Swenshuai.xi 
6466*53ee8cc1Swenshuai.xi     if (u32GetCMASize == 0)
6467*53ee8cc1Swenshuai.xi     {
6468*53ee8cc1Swenshuai.xi         return u64CMAAddr;
6469*53ee8cc1Swenshuai.xi     }
6470*53ee8cc1Swenshuai.xi 
6471*53ee8cc1Swenshuai.xi     struct CMA_Pool_Alloc_Param CMA_Pool_GetMem;
6472*53ee8cc1Swenshuai.xi     CMA_Pool_GetMem.pool_handle_id = CMA_Pool_Init_PARAM[enCmaClient].pool_handle_id;
6473*53ee8cc1Swenshuai.xi     CMA_Pool_GetMem.offset_in_pool = gSrcInfo[eWindow].Status2.stXCConfigCMA[enCmaClient].u64AddrHeapOffset;
6474*53ee8cc1Swenshuai.xi     CMA_Pool_GetMem.flags = CMA_FLAG_VIRT_ADDR;
6475*53ee8cc1Swenshuai.xi     if(CMA_Pool_Init_PARAM[enCmaClient].heap_length >= u32GetCMASize)
6476*53ee8cc1Swenshuai.xi     {
6477*53ee8cc1Swenshuai.xi         CMA_Pool_GetMem.length = u32GetCMASize;
6478*53ee8cc1Swenshuai.xi     }
6479*53ee8cc1Swenshuai.xi     else
6480*53ee8cc1Swenshuai.xi     {
6481*53ee8cc1Swenshuai.xi         printf("\033[35m   Function = %s, Line = %d, Max CMA buffer size is %x!!\033[m\n", __PRETTY_FUNCTION__, __LINE__,(MS_U32)(CMA_Pool_Init_PARAM[enCmaClient].heap_length));
6482*53ee8cc1Swenshuai.xi         CMA_Pool_GetMem.length = CMA_Pool_Init_PARAM[enCmaClient].heap_length;
6483*53ee8cc1Swenshuai.xi     }
6484*53ee8cc1Swenshuai.xi 
6485*53ee8cc1Swenshuai.xi     MApi_CMA_Pool_GetMem(&CMA_Pool_GetMem);
6486*53ee8cc1Swenshuai.xi     u64CMAAddr = CMA_Pool_Init_PARAM[enCmaClient].heap_miu_start_offset;
6487*53ee8cc1Swenshuai.xi     if(CMA_Pool_Init_PARAM[enCmaClient].miu==E_CHIP_MIU_1)
6488*53ee8cc1Swenshuai.xi     {
6489*53ee8cc1Swenshuai.xi         u64CMAAddr= CMA_Pool_Init_PARAM[enCmaClient].heap_miu_start_offset+HAL_MIU1_BASE;
6490*53ee8cc1Swenshuai.xi     }
6491*53ee8cc1Swenshuai.xi     else if(CMA_Pool_Init_PARAM[enCmaClient].miu==E_CHIP_MIU_2)
6492*53ee8cc1Swenshuai.xi     {
6493*53ee8cc1Swenshuai.xi         u64CMAAddr= CMA_Pool_Init_PARAM[enCmaClient].heap_miu_start_offset+HAL_MIU2_BASE;
6494*53ee8cc1Swenshuai.xi     }
6495*53ee8cc1Swenshuai.xi 
6496*53ee8cc1Swenshuai.xi     MHal_SC_Memory_Request_Force_Off(pInstance, FALSE, E_XC_FORCE_MEMORY_REQUEST_OFF_ALL);
6497*53ee8cc1Swenshuai.xi     return u64CMAAddr;
6498*53ee8cc1Swenshuai.xi }
6499*53ee8cc1Swenshuai.xi 
MHal_XC_Release_CMA(void * pInstance,XC_CMA_CLIENT enCmaClient,SCALER_WIN eWindow)6500*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_Release_CMA(void *pInstance, XC_CMA_CLIENT enCmaClient, SCALER_WIN eWindow)
6501*53ee8cc1Swenshuai.xi {
6502*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6503*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6504*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6505*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6506*53ee8cc1Swenshuai.xi 
6507*53ee8cc1Swenshuai.xi     struct CMA_Pool_Free_Param stCMAFreeParam;
6508*53ee8cc1Swenshuai.xi     if ((gSrcInfo[eWindow].u32PreCMAMemSCMSize[enCmaClient]+gSrcInfo[eWindow].u32PreCMAMemFRCMSize[enCmaClient])!=0)
6509*53ee8cc1Swenshuai.xi     {
6510*53ee8cc1Swenshuai.xi         MHal_SC_Memory_Request_Force_Off(pInstance, TRUE, E_XC_FORCE_MEMORY_REQUEST_OFF_MAIN);
6511*53ee8cc1Swenshuai.xi         stCMAFreeParam.pool_handle_id = CMA_Pool_Init_PARAM[enCmaClient].heap_id; //in: pool handle id, when pool init, returned by kernel
6512*53ee8cc1Swenshuai.xi         stCMAFreeParam.offset_in_pool = gSrcInfo[eWindow].Status2.stXCConfigCMA[enCmaClient].u64AddrHeapOffset;
6513*53ee8cc1Swenshuai.xi         stCMAFreeParam.length = gSrcInfo[eWindow].u32PreCMAMemSCMSize[enCmaClient]+gSrcInfo[eWindow].u32PreCMAMemFRCMSize[enCmaClient];
6514*53ee8cc1Swenshuai.xi         MApi_CMA_Pool_PutMem(&stCMAFreeParam);
6515*53ee8cc1Swenshuai.xi 
6516*53ee8cc1Swenshuai.xi         gSrcInfo[eWindow].u32PreCMAMemSCMSize[enCmaClient] = 0;
6517*53ee8cc1Swenshuai.xi         gSrcInfo[eWindow].u32PreCMAMemFRCMSize[enCmaClient] = 0;
6518*53ee8cc1Swenshuai.xi     }
6519*53ee8cc1Swenshuai.xi 
6520*53ee8cc1Swenshuai.xi     if ((gSrcInfo[MAIN_WINDOW].Status2.u32PreCMAMemDualSCMSize != 0) && (enCmaClient == CMA_XC_COBUFF_MEM))
6521*53ee8cc1Swenshuai.xi     {
6522*53ee8cc1Swenshuai.xi         MHal_SC_Memory_Request_Force_Off(pInstance, TRUE, E_XC_FORCE_MEMORY_REQUEST_OFF_MIAN_DUAL);
6523*53ee8cc1Swenshuai.xi         stCMAFreeParam.pool_handle_id = CMA_Pool_Init_PARAM[enCmaClient].heap_id; //in: pool handle id, when pool init, returned by kernel
6524*53ee8cc1Swenshuai.xi         stCMAFreeParam.offset_in_pool = gSrcInfo[eWindow].Status2.stXCConfigCMA[enCmaClient].u64AddrHeapOffset;
6525*53ee8cc1Swenshuai.xi         stCMAFreeParam.length = gSrcInfo[MAIN_WINDOW].Status2.u32PreCMAMemDualSCMSize;
6526*53ee8cc1Swenshuai.xi         MApi_CMA_Pool_PutMem(&stCMAFreeParam);
6527*53ee8cc1Swenshuai.xi 
6528*53ee8cc1Swenshuai.xi         gSrcInfo[MAIN_WINDOW].Status2.u32PreCMAMemDualSCMSize = 0;
6529*53ee8cc1Swenshuai.xi     }
6530*53ee8cc1Swenshuai.xi 
6531*53ee8cc1Swenshuai.xi     return TRUE;
6532*53ee8cc1Swenshuai.xi }
6533*53ee8cc1Swenshuai.xi 
_getDualModeMemorySize(void * pInstance,MS_U32 * pu32LeftSize,MS_U32 * pu32RightSize,SCALER_WIN eWindow)6534*53ee8cc1Swenshuai.xi static MS_BOOL _getDualModeMemorySize(void *pInstance, MS_U32 *pu32LeftSize, MS_U32 *pu32RightSize, SCALER_WIN eWindow)
6535*53ee8cc1Swenshuai.xi {
6536*53ee8cc1Swenshuai.xi     MS_U32 u32TotalSize = 0;
6537*53ee8cc1Swenshuai.xi 
6538*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6539*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6540*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6541*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6542*53ee8cc1Swenshuai.xi     if (gSrcInfo[eWindow].Status2.stXCConfigCMA[CMA_XC_COBUFF_MEM].u32HeapID != XC_INVALID_HEAP_ID)
6543*53ee8cc1Swenshuai.xi     {
6544*53ee8cc1Swenshuai.xi         u32TotalSize = XC_CMA_96MB;
6545*53ee8cc1Swenshuai.xi     }
6546*53ee8cc1Swenshuai.xi     *pu32LeftSize  =  u32TotalSize * gSrcInfo[eWindow].Status2.stMiuDualModCfg.u32LeftFactor/(gSrcInfo[eWindow].Status2.stMiuDualModCfg.u32LeftFactor + gSrcInfo[eWindow].Status2.stMiuDualModCfg.u32RightFactor);
6547*53ee8cc1Swenshuai.xi     *pu32RightSize =  u32TotalSize - *pu32LeftSize;
6548*53ee8cc1Swenshuai.xi     return TRUE;
6549*53ee8cc1Swenshuai.xi }
6550*53ee8cc1Swenshuai.xi 
MHal_XC_Get_CMA_UsingCondition(void * pInstance,MS_BOOL bIsGetCMABuff[],MS_U32 au32CMAMemSCMSize[],MS_U32 au32CMAMemFRCMSize[],MS_U32 * pu32DualMiuMemSize,MS_U32 u32DataSize,SCALER_WIN eWindow)6551*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_Get_CMA_UsingCondition(void *pInstance, MS_BOOL bIsGetCMABuff[], MS_U32 au32CMAMemSCMSize[],MS_U32 au32CMAMemFRCMSize[], MS_U32* pu32DualMiuMemSize, MS_U32 u32DataSize, SCALER_WIN eWindow)
6552*53ee8cc1Swenshuai.xi {
6553*53ee8cc1Swenshuai.xi     MS_U32 u32CMAMemSCMSize = 0;
6554*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6555*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6556*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6557*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6558*53ee8cc1Swenshuai.xi 
6559*53ee8cc1Swenshuai.xi     if (u32DataSize < CMA_XC_MEM_NUM)
6560*53ee8cc1Swenshuai.xi     {
6561*53ee8cc1Swenshuai.xi         return FALSE;
6562*53ee8cc1Swenshuai.xi     }
6563*53ee8cc1Swenshuai.xi 
6564*53ee8cc1Swenshuai.xi     if (((MDrv_XC_Is_DSForceIndexEnabled(pInstance, MAIN_WINDOW)||MDrv_XC_GetDynamicScalingStatus(pInstance))
6565*53ee8cc1Swenshuai.xi         && IsSrcTypeStorage(gSrcInfo[eWindow].enInputSourceType)) ||
6566*53ee8cc1Swenshuai.xi         (pXCResourcePrivate->sthal_Optee.op_tee_xc[MAIN_WINDOW].isEnable == TRUE))
6567*53ee8cc1Swenshuai.xi     {
6568*53ee8cc1Swenshuai.xi         // MM source and DS on
6569*53ee8cc1Swenshuai.xi         if(gSrcInfo[eWindow].bInterlace)
6570*53ee8cc1Swenshuai.xi         {
6571*53ee8cc1Swenshuai.xi             //DS ON , FHD case
6572*53ee8cc1Swenshuai.xi             u32CMAMemSCMSize = XC_CMA_24MB;
6573*53ee8cc1Swenshuai.xi         }
6574*53ee8cc1Swenshuai.xi         else
6575*53ee8cc1Swenshuai.xi         {
6576*53ee8cc1Swenshuai.xi             //DS ON , 4K2K case
6577*53ee8cc1Swenshuai.xi             if(gSrcInfo[eWindow].eFBLevel == E_XC_FB_LEVEL_FB)
6578*53ee8cc1Swenshuai.xi             {
6579*53ee8cc1Swenshuai.xi                 // 4K2K input source,prescaling case,run in FB mode
6580*53ee8cc1Swenshuai.xi                 u32CMAMemSCMSize = XC_CMA_48MB;
6581*53ee8cc1Swenshuai.xi             }
6582*53ee8cc1Swenshuai.xi             else
6583*53ee8cc1Swenshuai.xi             {
6584*53ee8cc1Swenshuai.xi                 u32CMAMemSCMSize = XC_CMA_18MB;
6585*53ee8cc1Swenshuai.xi             }
6586*53ee8cc1Swenshuai.xi         }
6587*53ee8cc1Swenshuai.xi     }
6588*53ee8cc1Swenshuai.xi     else if (IsSrcTypeStorage(gSrcInfo[eWindow].enInputSourceType))
6589*53ee8cc1Swenshuai.xi     {
6590*53ee8cc1Swenshuai.xi         if((gSrcInfo[eWindow].stCapWin.width>=XC_4K2K_WIDTH_MIN)&&(gSrcInfo[eWindow].stCapWin.height>=XC_4K2K_HIGH_MIN))
6591*53ee8cc1Swenshuai.xi         {
6592*53ee8cc1Swenshuai.xi             if(gSrcInfo[eWindow].u16InputVFreq <= 151)
6593*53ee8cc1Swenshuai.xi             {
6594*53ee8cc1Swenshuai.xi                 u32CMAMemSCMSize = XC_CMA_48MB;
6595*53ee8cc1Swenshuai.xi             }
6596*53ee8cc1Swenshuai.xi             else
6597*53ee8cc1Swenshuai.xi             {
6598*53ee8cc1Swenshuai.xi                 u32CMAMemSCMSize = 0;
6599*53ee8cc1Swenshuai.xi             }
6600*53ee8cc1Swenshuai.xi         }
6601*53ee8cc1Swenshuai.xi         else
6602*53ee8cc1Swenshuai.xi         {
6603*53ee8cc1Swenshuai.xi             u32CMAMemSCMSize = XC_CMA_24MB;
6604*53ee8cc1Swenshuai.xi         }
6605*53ee8cc1Swenshuai.xi     }
6606*53ee8cc1Swenshuai.xi     else if (  (IsSrcTypeAV(gSrcInfo[eWindow].enInputSourceType))
6607*53ee8cc1Swenshuai.xi              ||(IsSrcTypeSV(gSrcInfo[eWindow].enInputSourceType))
6608*53ee8cc1Swenshuai.xi              ||(IsSrcTypeATV(gSrcInfo[eWindow].enInputSourceType))
6609*53ee8cc1Swenshuai.xi              ||(IsSrcTypeScart(gSrcInfo[eWindow].enInputSourceType)))
6610*53ee8cc1Swenshuai.xi     {
6611*53ee8cc1Swenshuai.xi         u32CMAMemSCMSize = XC_CMA_19MB;
6612*53ee8cc1Swenshuai.xi     }
6613*53ee8cc1Swenshuai.xi     else
6614*53ee8cc1Swenshuai.xi     {
6615*53ee8cc1Swenshuai.xi         if (  ((gSrcInfo[eWindow].enInputSourceType == INPUT_SOURCE_HDMI)||(gSrcInfo[eWindow].enInputSourceType == INPUT_SOURCE_HDMI2)||(gSrcInfo[eWindow].enInputSourceType == INPUT_SOURCE_HDMI3))
6616*53ee8cc1Swenshuai.xi             &&((gSrcInfo[(eWindow)].stCapWin.width>= 3840) && (gSrcInfo[(eWindow)].stCapWin.height>= 2160))
6617*53ee8cc1Swenshuai.xi             &&(IS_OUTPUT_4K2K()))
6618*53ee8cc1Swenshuai.xi         {
6619*53ee8cc1Swenshuai.xi             u32CMAMemSCMSize = XC_CMA_48MB;
6620*53ee8cc1Swenshuai.xi         }
6621*53ee8cc1Swenshuai.xi         else
6622*53ee8cc1Swenshuai.xi         {
6623*53ee8cc1Swenshuai.xi             u32CMAMemSCMSize = XC_CMA_24MB;
6624*53ee8cc1Swenshuai.xi         }
6625*53ee8cc1Swenshuai.xi     }
6626*53ee8cc1Swenshuai.xi 
6627*53ee8cc1Swenshuai.xi     if (
6628*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
6629*53ee8cc1Swenshuai.xi         (gSrcInfo[eWindow].Status2.stXCConfigCMA[CMA_XC_COBUFF_MEM].u32HeapID != XC_INVALID_HEAP_ID)
6630*53ee8cc1Swenshuai.xi         && IsEnableDualMode(eWindow)
6631*53ee8cc1Swenshuai.xi #else
6632*53ee8cc1Swenshuai.xi         0
6633*53ee8cc1Swenshuai.xi #endif
6634*53ee8cc1Swenshuai.xi         &&(IS_OUTPUT_4K2K()))
6635*53ee8cc1Swenshuai.xi     {
6636*53ee8cc1Swenshuai.xi         bIsGetCMABuff[CMA_XC_SELF_MEM] = TRUE;
6637*53ee8cc1Swenshuai.xi         bIsGetCMABuff[CMA_XC_COBUFF_MEM] = TRUE;
6638*53ee8cc1Swenshuai.xi         //*pu32DualMiuMemSize = XC_CMA_48MB;
6639*53ee8cc1Swenshuai.xi         //au32CMAMemSCMSize[CMA_XC_SELF_MEM] = u32CMAMemSCMSize;
6640*53ee8cc1Swenshuai.xi         _getDualModeMemorySize(pInstance, &au32CMAMemSCMSize[CMA_XC_SELF_MEM], pu32DualMiuMemSize, eWindow);
6641*53ee8cc1Swenshuai.xi         au32CMAMemSCMSize[CMA_XC_COBUFF_MEM] = 0;
6642*53ee8cc1Swenshuai.xi     }
6643*53ee8cc1Swenshuai.xi     else
6644*53ee8cc1Swenshuai.xi     {
6645*53ee8cc1Swenshuai.xi         if (gSrcInfo[eWindow].Status2.stXCConfigCMA[CMA_XC_COBUFF_MEM].u32HeapID == XC_INVALID_HEAP_ID || (IsSrcTypeStorage(gSrcInfo[eWindow].enInputSourceType) && (gSrcInfo[eWindow].bInterlace)) || IsSrcTypeDTV(gSrcInfo[eWindow].enInputSourceType))
6646*53ee8cc1Swenshuai.xi         {
6647*53ee8cc1Swenshuai.xi             bIsGetCMABuff[CMA_XC_SELF_MEM] = TRUE;
6648*53ee8cc1Swenshuai.xi             bIsGetCMABuff[CMA_XC_COBUFF_MEM] = FALSE;
6649*53ee8cc1Swenshuai.xi             au32CMAMemSCMSize[CMA_XC_SELF_MEM] = u32CMAMemSCMSize;
6650*53ee8cc1Swenshuai.xi             au32CMAMemSCMSize[CMA_XC_COBUFF_MEM] = 0;
6651*53ee8cc1Swenshuai.xi         }
6652*53ee8cc1Swenshuai.xi         else
6653*53ee8cc1Swenshuai.xi         {
6654*53ee8cc1Swenshuai.xi             bIsGetCMABuff[CMA_XC_SELF_MEM] = FALSE;
6655*53ee8cc1Swenshuai.xi             bIsGetCMABuff[CMA_XC_COBUFF_MEM] = TRUE;
6656*53ee8cc1Swenshuai.xi             au32CMAMemSCMSize[CMA_XC_SELF_MEM] = 0;
6657*53ee8cc1Swenshuai.xi             au32CMAMemSCMSize[CMA_XC_COBUFF_MEM] = u32CMAMemSCMSize;
6658*53ee8cc1Swenshuai.xi         }
6659*53ee8cc1Swenshuai.xi         *pu32DualMiuMemSize = 0;
6660*53ee8cc1Swenshuai.xi     }
6661*53ee8cc1Swenshuai.xi 
6662*53ee8cc1Swenshuai.xi     au32CMAMemFRCMSize[CMA_XC_SELF_MEM] = 0;
6663*53ee8cc1Swenshuai.xi     au32CMAMemFRCMSize[CMA_XC_COBUFF_MEM] = 0;
6664*53ee8cc1Swenshuai.xi 
6665*53ee8cc1Swenshuai.xi     return TRUE;
6666*53ee8cc1Swenshuai.xi }
6667*53ee8cc1Swenshuai.xi 
MHal_XC_CMAPatchISR(SC_INT_SRC eIntNum,void * pParam)6668*53ee8cc1Swenshuai.xi static void  MHal_XC_CMAPatchISR(SC_INT_SRC eIntNum, void * pParam)
6669*53ee8cc1Swenshuai.xi {
6670*53ee8cc1Swenshuai.xi     void *pInstance = pu32XCInst_private;
6671*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6672*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6673*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6674*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6675*53ee8cc1Swenshuai.xi 
6676*53ee8cc1Swenshuai.xi     if((MDrv_XC_IsInputSourceDisabled(pInstance, MAIN_WINDOW)==TRUE)
6677*53ee8cc1Swenshuai.xi        &&(   ((gSrcInfo[MAIN_WINDOW].u32PreCMAMemSCMSize[CMA_XC_SELF_MEM]+gSrcInfo[MAIN_WINDOW].u32PreCMAMemFRCMSize[CMA_XC_SELF_MEM])!=0)
6678*53ee8cc1Swenshuai.xi            ||((gSrcInfo[MAIN_WINDOW].u32PreCMAMemSCMSize[CMA_XC_COBUFF_MEM]+gSrcInfo[MAIN_WINDOW].u32PreCMAMemFRCMSize[CMA_XC_COBUFF_MEM])!=0)
6679*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
6680*53ee8cc1Swenshuai.xi            ||(gSrcInfo[MAIN_WINDOW].Status2.u32PreCMAMemDualSCMSize!=0)
6681*53ee8cc1Swenshuai.xi #endif
6682*53ee8cc1Swenshuai.xi          )
6683*53ee8cc1Swenshuai.xi        )
6684*53ee8cc1Swenshuai.xi     {
6685*53ee8cc1Swenshuai.xi         //Check timing 5s
6686*53ee8cc1Swenshuai.xi         if(((MsOS_GetSystemTime()- u32CMAPatchTimer_Main)>5000))
6687*53ee8cc1Swenshuai.xi         {
6688*53ee8cc1Swenshuai.xi             u32CMAPatchTimer_Main = MsOS_GetSystemTime();
6689*53ee8cc1Swenshuai.xi 
6690*53ee8cc1Swenshuai.xi             MHal_XC_Release_CMA(pInstance, CMA_XC_SELF_MEM, MAIN_WINDOW);
6691*53ee8cc1Swenshuai.xi             MHal_XC_Release_CMA(pInstance, CMA_XC_COBUFF_MEM, MAIN_WINDOW);
6692*53ee8cc1Swenshuai.xi         }
6693*53ee8cc1Swenshuai.xi     }
6694*53ee8cc1Swenshuai.xi     else
6695*53ee8cc1Swenshuai.xi     {
6696*53ee8cc1Swenshuai.xi         u32CMAPatchTimer_Main = MsOS_GetSystemTime();
6697*53ee8cc1Swenshuai.xi     }
6698*53ee8cc1Swenshuai.xi }
6699*53ee8cc1Swenshuai.xi 
MHal_XC_CMAPatch(void * pInstance,SCALER_WIN eWindow)6700*53ee8cc1Swenshuai.xi void MHal_XC_CMAPatch(void *pInstance, SCALER_WIN eWindow)
6701*53ee8cc1Swenshuai.xi {
6702*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6703*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6704*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6705*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6706*53ee8cc1Swenshuai.xi 
6707*53ee8cc1Swenshuai.xi     if(eWindow ==MAIN_WINDOW)
6708*53ee8cc1Swenshuai.xi     {
6709*53ee8cc1Swenshuai.xi         if(FALSE == MDrv_XC_InterruptIsAttached(pInstance, SC_INT_VSINT,MHal_XC_CMAPatchISR, (void *)NULL))
6710*53ee8cc1Swenshuai.xi         {
6711*53ee8cc1Swenshuai.xi            //Start CMA  patch, enable ISR
6712*53ee8cc1Swenshuai.xi            //FIXME: PATCH
6713*53ee8cc1Swenshuai.xi            u32CMAPatchTimer_Main = MsOS_GetSystemTime();
6714*53ee8cc1Swenshuai.xi            MDrv_XC_InterruptAttachWithoutMutex(pInstance, SC_INT_VSINT,MHal_XC_CMAPatchISR, (void *)NULL);
6715*53ee8cc1Swenshuai.xi         }
6716*53ee8cc1Swenshuai.xi     }
6717*53ee8cc1Swenshuai.xi }
6718*53ee8cc1Swenshuai.xi 
MHal_XC_CMAPatchClose(void * pInstance,SCALER_WIN eWindow)6719*53ee8cc1Swenshuai.xi void MHal_XC_CMAPatchClose(void *pInstance, SCALER_WIN eWindow)
6720*53ee8cc1Swenshuai.xi {
6721*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6722*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6723*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6724*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6725*53ee8cc1Swenshuai.xi 
6726*53ee8cc1Swenshuai.xi     if(eWindow ==MAIN_WINDOW)
6727*53ee8cc1Swenshuai.xi     {
6728*53ee8cc1Swenshuai.xi         if(TRUE == MDrv_XC_InterruptIsAttached(pInstance, SC_INT_VSINT, MHal_XC_CMAPatchISR, (void *)NULL))
6729*53ee8cc1Swenshuai.xi         {
6730*53ee8cc1Swenshuai.xi             //Disable ISR
6731*53ee8cc1Swenshuai.xi             MDrv_XC_InterruptDeAttachWithoutMutex(pInstance, SC_INT_VSINT, MHal_XC_CMAPatchISR, (void *)NULL);
6732*53ee8cc1Swenshuai.xi         }
6733*53ee8cc1Swenshuai.xi     }
6734*53ee8cc1Swenshuai.xi }
6735*53ee8cc1Swenshuai.xi #endif
6736*53ee8cc1Swenshuai.xi #endif
6737*53ee8cc1Swenshuai.xi 
MHAL_SC_set_r2y_en(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)6738*53ee8cc1Swenshuai.xi void MHAL_SC_set_r2y_en(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
6739*53ee8cc1Swenshuai.xi {
6740*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6741*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6742*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6743*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6744*53ee8cc1Swenshuai.xi 
6745*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
6746*53ee8cc1Swenshuai.xi     {
6747*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK18_06_L, bEnable?BIT(0):0x00, BIT(0));
6748*53ee8cc1Swenshuai.xi     }
6749*53ee8cc1Swenshuai.xi     else if(eWindow == SUB_WINDOW)
6750*53ee8cc1Swenshuai.xi     {
6751*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK18_76_L, bEnable?BIT(0):0x00, BIT(0));
6752*53ee8cc1Swenshuai.xi     }
6753*53ee8cc1Swenshuai.xi }
6754*53ee8cc1Swenshuai.xi 
MHAL_SC_get_r2y_en_status(void * pInstance,SCALER_WIN eWindow)6755*53ee8cc1Swenshuai.xi MS_BOOL MHAL_SC_get_r2y_en_status(void *pInstance, SCALER_WIN eWindow)
6756*53ee8cc1Swenshuai.xi {
6757*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6758*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6759*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
6760*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
6761*53ee8cc1Swenshuai.xi 
6762*53ee8cc1Swenshuai.xi     MS_BOOL bstatus = FALSE;
6763*53ee8cc1Swenshuai.xi 
6764*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
6765*53ee8cc1Swenshuai.xi     {
6766*53ee8cc1Swenshuai.xi         bstatus = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK18_06_L, BIT(0));
6767*53ee8cc1Swenshuai.xi     }
6768*53ee8cc1Swenshuai.xi     else if(eWindow == SUB_WINDOW)
6769*53ee8cc1Swenshuai.xi     {
6770*53ee8cc1Swenshuai.xi         bstatus = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK18_76_L, BIT(0));
6771*53ee8cc1Swenshuai.xi     }
6772*53ee8cc1Swenshuai.xi 
6773*53ee8cc1Swenshuai.xi     return bstatus;
6774*53ee8cc1Swenshuai.xi }
6775*53ee8cc1Swenshuai.xi 
Hal_SC_set_T3D_setting(void * pInstance,MS_BOOL bEnable)6776*53ee8cc1Swenshuai.xi void Hal_SC_set_T3D_setting(void *pInstance, MS_BOOL bEnable)
6777*53ee8cc1Swenshuai.xi {
6778*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6779*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6780*53ee8cc1Swenshuai.xi 
6781*53ee8cc1Swenshuai.xi     if (MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
6782*53ee8cc1Swenshuai.xi     {
6783*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK62_63_L, 0x00, BIT(0)); // default disable T3D SRAM
6784*53ee8cc1Swenshuai.xi     }
6785*53ee8cc1Swenshuai.xi     else
6786*53ee8cc1Swenshuai.xi     {
6787*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK62_63_L, 0x00, BIT(0)); // default disable T3D SRAM
6788*53ee8cc1Swenshuai.xi     }
6789*53ee8cc1Swenshuai.xi 
6790*53ee8cc1Swenshuai.xi }
6791*53ee8cc1Swenshuai.xi 
Hal_SC_set_T3D_H_size(void * pInstance,MS_U16 u16Hsize)6792*53ee8cc1Swenshuai.xi void Hal_SC_set_T3D_H_size(void *pInstance, MS_U16 u16Hsize)
6793*53ee8cc1Swenshuai.xi {
6794*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6795*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6796*53ee8cc1Swenshuai.xi 
6797*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK63_55_L, u16Hsize, 0x1FFF); //horizontal pixel number
6798*53ee8cc1Swenshuai.xi }
6799*53ee8cc1Swenshuai.xi 
Hal_SC_3D_Is_LR_Sbs2Line(void * pInstance)6800*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_3D_Is_LR_Sbs2Line(void *pInstance)
6801*53ee8cc1Swenshuai.xi {
6802*53ee8cc1Swenshuai.xi     if(SC_R2BYTEMSK(0, REG_SC_BK23_53_L, BIT(15)))
6803*53ee8cc1Swenshuai.xi     {
6804*53ee8cc1Swenshuai.xi         return TRUE;
6805*53ee8cc1Swenshuai.xi     }
6806*53ee8cc1Swenshuai.xi     else
6807*53ee8cc1Swenshuai.xi     {
6808*53ee8cc1Swenshuai.xi         return FALSE;
6809*53ee8cc1Swenshuai.xi     }
6810*53ee8cc1Swenshuai.xi }
6811*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetLRChgMode(void * pInstance,HAL_SC_3D_LRCHGMODE eLRChgMode)6812*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetLRChgMode(void *pInstance, HAL_SC_3D_LRCHGMODE eLRChgMode)
6813*53ee8cc1Swenshuai.xi {
6814*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6815*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6816*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_63_L, eLRChgMode, BIT(1)|BIT(0));
6817*53ee8cc1Swenshuai.xi }
6818*53ee8cc1Swenshuai.xi 
6819*53ee8cc1Swenshuai.xi // 0: L is the first frame, 1: R is the first frame
Hal_SC_3D_SetInitialLRIndex(void * pInstance,MS_BOOL bRFirst)6820*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetInitialLRIndex(void *pInstance, MS_BOOL bRFirst)
6821*53ee8cc1Swenshuai.xi {
6822*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6823*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6824*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_63_L, (bRFirst==TRUE)?BIT(4):0, BIT(4));
6825*53ee8cc1Swenshuai.xi }
6826*53ee8cc1Swenshuai.xi 
6827*53ee8cc1Swenshuai.xi // Split 1 frame into 2 frames
Hal_SC_3D_SetSplitHalf(void * pInstance,MS_BOOL bEnable)6828*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetSplitHalf(void *pInstance, MS_BOOL bEnable)
6829*53ee8cc1Swenshuai.xi {
6830*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6831*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6832*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_63_L, (bEnable==TRUE)?BIT(8):0, BIT(8));
6833*53ee8cc1Swenshuai.xi }
6834*53ee8cc1Swenshuai.xi 
Hal_SC_set_frcm_to_FD_mask(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)6835*53ee8cc1Swenshuai.xi void Hal_SC_set_frcm_to_FD_mask(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
6836*53ee8cc1Swenshuai.xi {
6837*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6838*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6839*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
6840*53ee8cc1Swenshuai.xi     {
6841*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_02_L, (bEnable==TRUE)?BIT(2):0, BIT(2));
6842*53ee8cc1Swenshuai.xi     }
6843*53ee8cc1Swenshuai.xi     else
6844*53ee8cc1Swenshuai.xi     {
6845*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_02_L, (bEnable==TRUE)?BIT(10):0, BIT(10));
6846*53ee8cc1Swenshuai.xi     }
6847*53ee8cc1Swenshuai.xi }
6848*53ee8cc1Swenshuai.xi 
Hal_SC_3D_set_top_win_6Tap(void * pInstance,MS_BOOL bEnable)6849*53ee8cc1Swenshuai.xi void Hal_SC_3D_set_top_win_6Tap(void *pInstance, MS_BOOL bEnable)
6850*53ee8cc1Swenshuai.xi {
6851*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6852*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6853*53ee8cc1Swenshuai.xi     SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK57_23_L, (bEnable==TRUE)?BIT(10):0, BIT(10)); //force top window using 6line
6854*53ee8cc1Swenshuai.xi }
6855*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetActiveVideoHeight(void * pInstance,MS_U16 u16VideoSize)6856*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetActiveVideoHeight(void *pInstance, MS_U16 u16VideoSize)
6857*53ee8cc1Swenshuai.xi {
6858*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6859*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6860*53ee8cc1Swenshuai.xi 
6861*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
6862*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
6863*53ee8cc1Swenshuai.xi     {
6864*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_65_L,u16VideoSize,DS_IP);
6865*53ee8cc1Swenshuai.xi     }
6866*53ee8cc1Swenshuai.xi     else
6867*53ee8cc1Swenshuai.xi #endif
6868*53ee8cc1Swenshuai.xi     {
6869*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_65_L, u16VideoSize, 0x1FFF);//v_active region
6870*53ee8cc1Swenshuai.xi     }
6871*53ee8cc1Swenshuai.xi }
6872*53ee8cc1Swenshuai.xi 
6873*53ee8cc1Swenshuai.xi // 0 for blank area 0
6874*53ee8cc1Swenshuai.xi //v blanking between field1&field2 or field3&field4
Hal_SC_3D_SetActiveBlankSize0(void * pInstance,MS_U16 u16BlankSize)6875*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetActiveBlankSize0(void *pInstance, MS_U16 u16BlankSize)
6876*53ee8cc1Swenshuai.xi {
6877*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6878*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6879*53ee8cc1Swenshuai.xi     #if _ENABLE_SW_DS
6880*53ee8cc1Swenshuai.xi         if(MDrv_XC_GetDynamicScalingStatus(pInstance))
6881*53ee8cc1Swenshuai.xi         {
6882*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_66_L,u16BlankSize,DS_IP);
6883*53ee8cc1Swenshuai.xi         }
6884*53ee8cc1Swenshuai.xi         else
6885*53ee8cc1Swenshuai.xi     #endif
6886*53ee8cc1Swenshuai.xi         {
6887*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_66_L, u16BlankSize, 0x1FFF);
6888*53ee8cc1Swenshuai.xi         }
6889*53ee8cc1Swenshuai.xi }
6890*53ee8cc1Swenshuai.xi 
6891*53ee8cc1Swenshuai.xi // 1 for blank area 1
6892*53ee8cc1Swenshuai.xi //v blanking between field2&field3
Hal_SC_3D_SetActiveBlankSize1(void * pInstance,MS_U16 u16BlankSize)6893*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetActiveBlankSize1(void *pInstance, MS_U16 u16BlankSize)
6894*53ee8cc1Swenshuai.xi {
6895*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6896*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6897*53ee8cc1Swenshuai.xi     #if _ENABLE_SW_DS
6898*53ee8cc1Swenshuai.xi         if(MDrv_XC_GetDynamicScalingStatus(pInstance))
6899*53ee8cc1Swenshuai.xi         {
6900*53ee8cc1Swenshuai.xi             Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_67_L,u16BlankSize,DS_IP);
6901*53ee8cc1Swenshuai.xi         }
6902*53ee8cc1Swenshuai.xi         else
6903*53ee8cc1Swenshuai.xi     #endif
6904*53ee8cc1Swenshuai.xi         {
6905*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_67_L, u16BlankSize, 0x1FFF);//v blanking between field1&field2 or field3&field4
6906*53ee8cc1Swenshuai.xi         }
6907*53ee8cc1Swenshuai.xi }
6908*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetActiveVideoWidth(void * pInstance,MS_U16 u16VideoSize)6909*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetActiveVideoWidth(void *pInstance, MS_U16 u16VideoSize)
6910*53ee8cc1Swenshuai.xi {
6911*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6912*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6913*53ee8cc1Swenshuai.xi 
6914*53ee8cc1Swenshuai.xi     MS_U16 u16ActiveWidthUsrEnable = 0;
6915*53ee8cc1Swenshuai.xi     if (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L, BIT(15)) == BIT(15))
6916*53ee8cc1Swenshuai.xi     {
6917*53ee8cc1Swenshuai.xi         u16ActiveWidthUsrEnable = BIT(15);
6918*53ee8cc1Swenshuai.xi     }
6919*53ee8cc1Swenshuai.xi 
6920*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
6921*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
6922*53ee8cc1Swenshuai.xi     {
6923*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_7F_L,u16VideoSize | u16ActiveWidthUsrEnable,DS_IP);
6924*53ee8cc1Swenshuai.xi     }
6925*53ee8cc1Swenshuai.xi     else
6926*53ee8cc1Swenshuai.xi #endif
6927*53ee8cc1Swenshuai.xi     {
6928*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_7F_L, u16VideoSize | u16ActiveWidthUsrEnable, 0x9FFF);//v_active region
6929*53ee8cc1Swenshuai.xi     }
6930*53ee8cc1Swenshuai.xi }
6931*53ee8cc1Swenshuai.xi 
6932*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetActiveVideoHeightAfterVSD(void * pInstance,MS_U16 u16VideoSize)6933*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetActiveVideoHeightAfterVSD(void *pInstance, MS_U16 u16VideoSize)
6934*53ee8cc1Swenshuai.xi {
6935*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6936*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6937*53ee8cc1Swenshuai.xi 
6938*53ee8cc1Swenshuai.xi     MS_U16 u16Enable = BIT(15);
6939*53ee8cc1Swenshuai.xi 
6940*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
6941*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
6942*53ee8cc1Swenshuai.xi     {
6943*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_38_L,u16VideoSize | u16Enable,DS_IP);
6944*53ee8cc1Swenshuai.xi     }
6945*53ee8cc1Swenshuai.xi     else
6946*53ee8cc1Swenshuai.xi #endif
6947*53ee8cc1Swenshuai.xi     {
6948*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_38_L, u16VideoSize | u16Enable, 0x9FFF);
6949*53ee8cc1Swenshuai.xi     }
6950*53ee8cc1Swenshuai.xi }
6951*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetFRCMActiveVideoHeightAfterVSD(void * pInstance,MS_U16 u16VideoSize)6952*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetFRCMActiveVideoHeightAfterVSD(void *pInstance, MS_U16 u16VideoSize)
6953*53ee8cc1Swenshuai.xi {
6954*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6955*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6956*53ee8cc1Swenshuai.xi 
6957*53ee8cc1Swenshuai.xi     MS_U16 u16Enable = BIT(15);
6958*53ee8cc1Swenshuai.xi 
6959*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
6960*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
6961*53ee8cc1Swenshuai.xi     {
6962*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK48_38_L,u16VideoSize | u16Enable,DS_IP);
6963*53ee8cc1Swenshuai.xi     }
6964*53ee8cc1Swenshuai.xi     else
6965*53ee8cc1Swenshuai.xi #endif
6966*53ee8cc1Swenshuai.xi     {
6967*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK48_38_L, u16VideoSize | u16Enable, 0x9FFF);
6968*53ee8cc1Swenshuai.xi     }
6969*53ee8cc1Swenshuai.xi }
6970*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetPixelSeparationWidth(void * pInstance,MS_U16 u16VideoSize)6971*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetPixelSeparationWidth(void *pInstance, MS_U16 u16VideoSize)
6972*53ee8cc1Swenshuai.xi {
6973*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6974*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
6975*53ee8cc1Swenshuai.xi 
6976*53ee8cc1Swenshuai.xi     MS_U16 u16ActiveWidthUsrEnable = 0;
6977*53ee8cc1Swenshuai.xi #if (HW_DESIGN_3D_VER >= 3)
6978*53ee8cc1Swenshuai.xi     if (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L, BIT(15)) == BIT(15))
6979*53ee8cc1Swenshuai.xi     {
6980*53ee8cc1Swenshuai.xi         u16ActiveWidthUsrEnable = BIT(15);
6981*53ee8cc1Swenshuai.xi     }
6982*53ee8cc1Swenshuai.xi #endif
6983*53ee8cc1Swenshuai.xi 
6984*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
6985*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
6986*53ee8cc1Swenshuai.xi     {
6987*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK02_6C_L,u16VideoSize | u16ActiveWidthUsrEnable,DS_IP);
6988*53ee8cc1Swenshuai.xi     }
6989*53ee8cc1Swenshuai.xi     else
6990*53ee8cc1Swenshuai.xi #endif
6991*53ee8cc1Swenshuai.xi     {
6992*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_6C_L, u16VideoSize | u16ActiveWidthUsrEnable, 0x87FF);
6993*53ee8cc1Swenshuai.xi     }
6994*53ee8cc1Swenshuai.xi }
6995*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetSoftware_F1VBottomEndPosition(void * pInstance,MS_U16 u16VideoSize)6996*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetSoftware_F1VBottomEndPosition(void *pInstance, MS_U16 u16VideoSize)
6997*53ee8cc1Swenshuai.xi {
6998*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
6999*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7000*53ee8cc1Swenshuai.xi 
7001*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
7002*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
7003*53ee8cc1Swenshuai.xi     {
7004*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK57_4F_L,u16VideoSize,DS_IP);
7005*53ee8cc1Swenshuai.xi     }
7006*53ee8cc1Swenshuai.xi     else
7007*53ee8cc1Swenshuai.xi #endif
7008*53ee8cc1Swenshuai.xi     {
7009*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK57_4F_L, u16VideoSize, 0x0FFF);
7010*53ee8cc1Swenshuai.xi     }
7011*53ee8cc1Swenshuai.xi }
7012*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetSoftware_F2VBottomEndPosition(void * pInstance,MS_U16 u16VideoSize)7013*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetSoftware_F2VBottomEndPosition(void *pInstance, MS_U16 u16VideoSize)
7014*53ee8cc1Swenshuai.xi {
7015*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7016*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7017*53ee8cc1Swenshuai.xi 
7018*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
7019*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
7020*53ee8cc1Swenshuai.xi     {
7021*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK57_4D_L,u16VideoSize,DS_IP);
7022*53ee8cc1Swenshuai.xi     }
7023*53ee8cc1Swenshuai.xi     else
7024*53ee8cc1Swenshuai.xi #endif
7025*53ee8cc1Swenshuai.xi     {
7026*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK57_4D_L, u16VideoSize, 0x0FFF);
7027*53ee8cc1Swenshuai.xi     }
7028*53ee8cc1Swenshuai.xi }
7029*53ee8cc1Swenshuai.xi 
Hal_SC_3D_SetSoftware_F1VBottomStartPosition(void * pInstance,MS_U16 u16VideoSize)7030*53ee8cc1Swenshuai.xi void Hal_SC_3D_SetSoftware_F1VBottomStartPosition(void *pInstance, MS_U16 u16VideoSize)
7031*53ee8cc1Swenshuai.xi {
7032*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7033*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7034*53ee8cc1Swenshuai.xi 
7035*53ee8cc1Swenshuai.xi #if _ENABLE_SW_DS
7036*53ee8cc1Swenshuai.xi     if(MDrv_XC_GetDynamicScalingStatus(pInstance))
7037*53ee8cc1Swenshuai.xi     {
7038*53ee8cc1Swenshuai.xi         Hal_SC_WriteSWDSCommand(pInstance,MAIN_WINDOW,REG_SC_BK57_4E_L,u16VideoSize,DS_IP);
7039*53ee8cc1Swenshuai.xi     }
7040*53ee8cc1Swenshuai.xi     else
7041*53ee8cc1Swenshuai.xi #endif
7042*53ee8cc1Swenshuai.xi     {
7043*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK57_4E_L, u16VideoSize, 0x0FFF);
7044*53ee8cc1Swenshuai.xi     }
7045*53ee8cc1Swenshuai.xi }
7046*53ee8cc1Swenshuai.xi 
Hal_SC_set_frcm_to_freeze(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)7047*53ee8cc1Swenshuai.xi void Hal_SC_set_frcm_to_freeze(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
7048*53ee8cc1Swenshuai.xi {
7049*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7050*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7051*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
7052*53ee8cc1Swenshuai.xi     {
7053*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_02_L, (bEnable==TRUE)?BIT(0):0, BIT(0));
7054*53ee8cc1Swenshuai.xi     }
7055*53ee8cc1Swenshuai.xi     else
7056*53ee8cc1Swenshuai.xi     {
7057*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_02_L, (bEnable==TRUE)?BIT(8):0, BIT(8));
7058*53ee8cc1Swenshuai.xi     }
7059*53ee8cc1Swenshuai.xi }
7060*53ee8cc1Swenshuai.xi 
Hal_SC_SetOSDDetect(void * pInstance,MS_BOOL bEnable,MS_U32 Threhold)7061*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_SetOSDDetect(void *pInstance, MS_BOOL bEnable, MS_U32 Threhold)
7062*53ee8cc1Swenshuai.xi {
7063*53ee8cc1Swenshuai.xi     MS_U16 u16Reg = 0;
7064*53ee8cc1Swenshuai.xi 	XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7065*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7066*53ee8cc1Swenshuai.xi     if(Threhold == 0)
7067*53ee8cc1Swenshuai.xi     {
7068*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_6A_L, 0x0, (BIT(15)+BMASK(11:0)));
7069*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK25_2E_L, BIT(1), BIT(1));
7070*53ee8cc1Swenshuai.xi 
7071*53ee8cc1Swenshuai.xi     }
7072*53ee8cc1Swenshuai.xi     else
7073*53ee8cc1Swenshuai.xi     {
7074*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK25_2E_L, 0x0, BIT(1));
7075*53ee8cc1Swenshuai.xi         u16Reg = ((MS_U16)Threhold*2)|(bEnable << 15);
7076*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_6A_L, u16Reg, (BIT(15)+BMASK(11:0)));
7077*53ee8cc1Swenshuai.xi     }
7078*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
7079*53ee8cc1Swenshuai.xi }
7080*53ee8cc1Swenshuai.xi 
Hal_SC_GetOSDDetect(void * pInstance,MS_BOOL * pbOSD)7081*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue Hal_SC_GetOSDDetect(void *pInstance, MS_BOOL *pbOSD)
7082*53ee8cc1Swenshuai.xi {
7083*53ee8cc1Swenshuai.xi     MS_U16 u16Reg = 0;
7084*53ee8cc1Swenshuai.xi 	XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7085*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7086*53ee8cc1Swenshuai.xi 
7087*53ee8cc1Swenshuai.xi     u16Reg = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_6A_L);
7088*53ee8cc1Swenshuai.xi     *pbOSD = ((u16Reg&BIT(14))>>14);
7089*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
7090*53ee8cc1Swenshuai.xi }
7091*53ee8cc1Swenshuai.xi 
Hal_SC_SetHDMI_Spliter(void * pInstance,XC_IP_SYNC_STATUS * sXC_Sync_Status,E_MUX_INPUTPORT enInputPort,SCALER_WIN eWindow)7092*53ee8cc1Swenshuai.xi void Hal_SC_SetHDMI_Spliter(void *pInstance,XC_IP_SYNC_STATUS *sXC_Sync_Status,E_MUX_INPUTPORT enInputPort ,SCALER_WIN eWindow)
7093*53ee8cc1Swenshuai.xi {
7094*53ee8cc1Swenshuai.xi 
7095*53ee8cc1Swenshuai.xi #if 0//SUPPORT_HDMI20
7096*53ee8cc1Swenshuai.xi 	XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7097*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7098*53ee8cc1Swenshuai.xi 
7099*53ee8cc1Swenshuai.xi     MS_U16 u16HDE_temp_size,u16HDE_size =0;
7100*53ee8cc1Swenshuai.xi 
7101*53ee8cc1Swenshuai.xi         if((sXC_Sync_Status->u8SyncStatus & XC_MD_SYNC_LOSS) != XC_MD_SYNC_LOSS)
7102*53ee8cc1Swenshuai.xi         {
7103*53ee8cc1Swenshuai.xi             if(MDrv_HDMI_CheckHDMI20_Setting(enInputPort))
7104*53ee8cc1Swenshuai.xi             {
7105*53ee8cc1Swenshuai.xi                 //printf("[%s][%d]HDMI 4K2K 2P mode\n", __FUNCTION__, __LINE__);
7106*53ee8cc1Swenshuai.xi                 if(eWindow == MAIN_WINDOW)
7107*53ee8cc1Swenshuai.xi                     W2BYTEMSK(0x102e02,0x0010,BMASK(7:4)); // ipmux sel=0xb
7108*53ee8cc1Swenshuai.xi                 else if(eWindow == SUB_WINDOW)
7109*53ee8cc1Swenshuai.xi                     W2BYTEMSK(0x102e02,0x0001,BMASK(3:0)); // ipmux sel=0xb
7110*53ee8cc1Swenshuai.xi 
7111*53ee8cc1Swenshuai.xi             }
7112*53ee8cc1Swenshuai.xi             else
7113*53ee8cc1Swenshuai.xi             {
7114*53ee8cc1Swenshuai.xi                 //SUPPORT_HDMI20_420
7115*53ee8cc1Swenshuai.xi                 //printf("[%s][%d]HDMI 4K2K 2P mode\n", __FUNCTION__, __LINE__);
7116*53ee8cc1Swenshuai.xi                 //printf("[%s][%d]sXC_Sync_Status->u16Vtotal=%x, sXC_Sync_Status->u16Hperiod=%x\n",
7117*53ee8cc1Swenshuai.xi                 //    __FUNCTION__, __LINE__, sXC_Sync_Status->u16Vtotal, sXC_Sync_Status->u16Hperiod);
7118*53ee8cc1Swenshuai.xi                 if((sXC_Sync_Status->u16Vtotal >= 0x8C0)
7119*53ee8cc1Swenshuai.xi                  &&(sXC_Sync_Status->u16Hperiod>= 0x50))
7120*53ee8cc1Swenshuai.xi                 {
7121*53ee8cc1Swenshuai.xi                     if((MDrv_HDMI_avi_infoframe_info(_BYTE_1)& 0x60) == 0x60)
7122*53ee8cc1Swenshuai.xi                     {
7123*53ee8cc1Swenshuai.xi                         //printf("@@#@@4K2K@60 420\n");
7124*53ee8cc1Swenshuai.xi                         // clkgen2
7125*53ee8cc1Swenshuai.xi                         W2BYTE(0x100a80,0x0004); // spt_l0 1: hdmi d: mhl
7126*53ee8cc1Swenshuai.xi                         // ipmux
7127*53ee8cc1Swenshuai.xi                         if(eWindow == MAIN_WINDOW)
7128*53ee8cc1Swenshuai.xi                         {
7129*53ee8cc1Swenshuai.xi                             W2BYTEMSK(0x102e02,0x00b0,BMASK(7:4)); // ipmux sel=0xb
7130*53ee8cc1Swenshuai.xi                         }
7131*53ee8cc1Swenshuai.xi                         else if(eWindow == SUB_WINDOW)
7132*53ee8cc1Swenshuai.xi                         {
7133*53ee8cc1Swenshuai.xi                             W2BYTEMSK(0x102e02,0x000b,BMASK(3:0)); // ipmux sel=0xb
7134*53ee8cc1Swenshuai.xi                         }
7135*53ee8cc1Swenshuai.xi 
7136*53ee8cc1Swenshuai.xi                         //BK40_SPT4k
7137*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_01_L,0x0000); // [3:0]  reg_spt_ipmux_sel0
7138*53ee8cc1Swenshuai.xi                                                             // [11:8] reg_spt_ipmux_sel1
7139*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_03_L,0x0001); // [7] reg_spt_2p_oe_en [0] reg_spt_420_en
7140*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_04_L,0x0180); // [7] reg_spt_2p_oe_out_en [9] hsd_en
7141*53ee8cc1Swenshuai.xi                                                             // [8] reg_spt_2poe_out_sel 1'b0: dual ch eo in
7142*53ee8cc1Swenshuai.xi                                                             //                                    1'b1: dual ch LR in or 420
7143*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_30_L, 0x0003); // de_only
7144*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_0B_L, 0x0000); // gb_size
7145*53ee8cc1Swenshuai.xi 
7146*53ee8cc1Swenshuai.xi                         u16HDE_temp_size = MDrv_HDMI_GetHDE();
7147*53ee8cc1Swenshuai.xi                         //printf("[%s][%d]u16HDE_size=%u\n", __FUNCTION__, __LINE__,u16HDE_temp_size);
7148*53ee8cc1Swenshuai.xi                         if((u16HDE_temp_size >= 2028)&&(u16HDE_temp_size<= 2068))
7149*53ee8cc1Swenshuai.xi                         {
7150*53ee8cc1Swenshuai.xi                             u16HDE_size = 2048;
7151*53ee8cc1Swenshuai.xi                         }
7152*53ee8cc1Swenshuai.xi                         else //if((u16HDE_temp_size >= 1900)&&(u16HDE_temp_size<= 1940))
7153*53ee8cc1Swenshuai.xi                         {
7154*53ee8cc1Swenshuai.xi                             u16HDE_size = 1920;
7155*53ee8cc1Swenshuai.xi                         }
7156*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_08_L, u16HDE_size); // de_in_size
7157*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_0A_L, u16HDE_size); // de_out_with_gb_size
7158*53ee8cc1Swenshuai.xi 
7159*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_20_L, 0x0000); // ra
7160*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_21_L, u16HDE_size/2-2); //
7161*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_22_L, 0x0001);
7162*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_23_L, u16HDE_size/2-1);
7163*53ee8cc1Swenshuai.xi 
7164*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_24_L, 0x0000); // wa
7165*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_25_L, u16HDE_size/2-2);
7166*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_26_L, 0x0001);
7167*53ee8cc1Swenshuai.xi                         SC_W2BYTE(0, REG_SC_BK40_27_L, u16HDE_size/2-1);
7168*53ee8cc1Swenshuai.xi                     }
7169*53ee8cc1Swenshuai.xi                     else
7170*53ee8cc1Swenshuai.xi                     {
7171*53ee8cc1Swenshuai.xi                         //printf("@@#@@4K2K@30\n");
7172*53ee8cc1Swenshuai.xi                         /// for 4K2K@30Hz
7173*53ee8cc1Swenshuai.xi                         if(eWindow == MAIN_WINDOW)
7174*53ee8cc1Swenshuai.xi                         {
7175*53ee8cc1Swenshuai.xi                             W2BYTEMSK(0x102e02,0x0010,BMASK(7:4)); // ipmux sel=0xb
7176*53ee8cc1Swenshuai.xi                         }
7177*53ee8cc1Swenshuai.xi                         else if(eWindow == SUB_WINDOW)
7178*53ee8cc1Swenshuai.xi                         {
7179*53ee8cc1Swenshuai.xi                             W2BYTEMSK(0x102e02,0x0001,BMASK(3:0)); // ipmux sel=0xb
7180*53ee8cc1Swenshuai.xi                         }
7181*53ee8cc1Swenshuai.xi                     }
7182*53ee8cc1Swenshuai.xi                 }
7183*53ee8cc1Swenshuai.xi             }
7184*53ee8cc1Swenshuai.xi         }
7185*53ee8cc1Swenshuai.xi #endif
7186*53ee8cc1Swenshuai.xi }
7187*53ee8cc1Swenshuai.xi 
Hal_SC_Set_2pmode(void * pInstance,MS_BOOL benable_IP2p,MS_BOOL benable_OP2p,MS_BOOL benable_bypass_all_2p,SCALER_WIN eWindow)7188*53ee8cc1Swenshuai.xi void Hal_SC_Set_2pmode(void *pInstance,MS_BOOL benable_IP2p,MS_BOOL benable_OP2p,MS_BOOL benable_bypass_all_2p,SCALER_WIN eWindow)
7189*53ee8cc1Swenshuai.xi {
7190*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7191*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7192*53ee8cc1Swenshuai.xi 
7193*53ee8cc1Swenshuai.xi     if(eWindow == MAIN_WINDOW)
7194*53ee8cc1Swenshuai.xi     {
7195*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0, REG_SC_BK01_07_L,(benable_IP2p ? BIT(15):0), BIT(15));//reg_sprange_hdc_2p
7196*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0, REG_SC_BK20_01_L,(benable_OP2p ? BIT(1):0), BIT(1));//reg_opm_2p_mode
7197*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0, REG_SC_BK12_04_L,(benable_bypass_all_2p ? BIT(6):0), BIT(6));//reg_bypass_all_2p_f2
7198*53ee8cc1Swenshuai.xi     }
7199*53ee8cc1Swenshuai.xi }
7200*53ee8cc1Swenshuai.xi 
MHal_SC_set_manual_rbank_switch_cnt(void * pInstance,MS_BOOL bEnable,MS_U16 u16SwitchCnt,SCALER_WIN eWindow)7201*53ee8cc1Swenshuai.xi void MHal_SC_set_manual_rbank_switch_cnt(void *pInstance, MS_BOOL bEnable, MS_U16 u16SwitchCnt, SCALER_WIN eWindow)
7202*53ee8cc1Swenshuai.xi {
7203*53ee8cc1Swenshuai.xi     if (eWindow >= MAX_WINDOW)
7204*53ee8cc1Swenshuai.xi     {
7205*53ee8cc1Swenshuai.xi         printf("unsupported eWindow, return!\n");
7206*53ee8cc1Swenshuai.xi         return;
7207*53ee8cc1Swenshuai.xi     }
7208*53ee8cc1Swenshuai.xi 
7209*53ee8cc1Swenshuai.xi     if( eWindow == MAIN_WINDOW)
7210*53ee8cc1Swenshuai.xi     {
7211*53ee8cc1Swenshuai.xi         // these two registers must be set simultaneously for this feature to work
7212*53ee8cc1Swenshuai.xi         // frame rate convert dependence with IP write line count
7213*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0,REG_SC_BK12_05_L, bEnable? BIT(3):0, BIT(3));
7214*53ee8cc1Swenshuai.xi         // frame rate convert dependence with IP write line count FULL
7215*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0,REG_SC_BK11_18_L, bEnable? BIT(15):0, BIT(15));
7216*53ee8cc1Swenshuai.xi 
7217*53ee8cc1Swenshuai.xi         // set specific line count according to when you will change rbank switch
7218*53ee8cc1Swenshuai.xi         // this line count starts at VDE rising edge, ends at u16SwitchCnt
7219*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0,REG_SC_BK11_18_L, u16SwitchCnt, 0x1FFF);
7220*53ee8cc1Swenshuai.xi     }
7221*53ee8cc1Swenshuai.xi     else
7222*53ee8cc1Swenshuai.xi     {
7223*53ee8cc1Swenshuai.xi         // these two registers must be set simultaneously for this feature to work
7224*53ee8cc1Swenshuai.xi         // frame rate convert dependence with IP write line count
7225*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0,REG_SC_BK12_45_L, bEnable? BIT(3):0, BIT(3));
7226*53ee8cc1Swenshuai.xi         // frame rate convert dependence with IP write line count FULL
7227*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0,REG_SC_BK11_58_L, bEnable? BIT(15):0, BIT(15));
7228*53ee8cc1Swenshuai.xi 
7229*53ee8cc1Swenshuai.xi         // set specific line count according to when you will change rbank switch
7230*53ee8cc1Swenshuai.xi         // this line count starts at VDE rising edge, ends at u16SwitchCnt
7231*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(0,REG_SC_BK11_58_L, u16SwitchCnt, 0x1FFF);
7232*53ee8cc1Swenshuai.xi     }
7233*53ee8cc1Swenshuai.xi }
7234*53ee8cc1Swenshuai.xi 
7235*53ee8cc1Swenshuai.xi #ifdef SUPPORT_BWD
_HAL_SC_BWR_set_base_address(void * pInstance,MS_U16 u16MemCfgValue,MS_U16 u16MemCfgIndex,SCALER_WIN eWindow)7236*53ee8cc1Swenshuai.xi static void _HAL_SC_BWR_set_base_address(void *pInstance, MS_U16 u16MemCfgValue,MS_U16 u16MemCfgIndex, SCALER_WIN eWindow)
7237*53ee8cc1Swenshuai.xi {
7238*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7239*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7240*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7241*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7242*53ee8cc1Swenshuai.xi 
7243*53ee8cc1Swenshuai.xi     E_XC_BWR_MEM_CONFIG u8Memtype = E_XC_BWR_MEM_CONFIG_1;
7244*53ee8cc1Swenshuai.xi     E_XC_BWR_MEM_CFG_BPP_TYPE eBPPType = E_XC_BWR_MEM_CFG_BPP_24;
7245*53ee8cc1Swenshuai.xi     for(u8Memtype=E_XC_BWR_MEM_CONFIG_1;u8Memtype<E_XC_BWR_MEM_CONFIG_Max;u8Memtype++)
7246*53ee8cc1Swenshuai.xi     {
7247*53ee8cc1Swenshuai.xi         if(u16MemCfgValue == gSrcInfo[eWindow].Status2.stMemCfgMap[u8Memtype].u16BWR_MEM_CFG_VALUE)
7248*53ee8cc1Swenshuai.xi         {
7249*53ee8cc1Swenshuai.xi             eBPPType = gSrcInfo[eWindow].Status2.stMemCfgMap[u8Memtype].eBitPerPixelType;
7250*53ee8cc1Swenshuai.xi             break;
7251*53ee8cc1Swenshuai.xi         }
7252*53ee8cc1Swenshuai.xi     }
7253*53ee8cc1Swenshuai.xi 
7254*53ee8cc1Swenshuai.xi #ifdef  UFO_XC_SUPPORT_DUAL_MIU
7255*53ee8cc1Swenshuai.xi     if (IsEnableDualMode(eWindow))
7256*53ee8cc1Swenshuai.xi     {
7257*53ee8cc1Swenshuai.xi         //SCMI: IPM address 0
7258*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x40 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>00), 0xFFFF);
7259*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x41 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>16), 0x03FF);
7260*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x48 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase0>>00), 0xFFFF);
7261*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x49 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase0>>16), 0x03FF);
7262*53ee8cc1Swenshuai.xi         //SCMI: IPM address 1
7263*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x50 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>00), 0xFFFF);
7264*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x51 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>16), 0x03FF);
7265*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x58 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase1>>00), 0xFFFF);
7266*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x59 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase1>>16), 0x03FF);
7267*53ee8cc1Swenshuai.xi         //SCMI: OPM address 0
7268*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x60 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>00), 0xFFFF);
7269*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x61 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>16), 0x03FF);
7270*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x68 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase0>>00), 0xFFFF);
7271*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x69 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase0>>16), 0x03FF);
7272*53ee8cc1Swenshuai.xi         //SCMI: OPM address 1
7273*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x70 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>00), 0xFFFF);
7274*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x71 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>16), 0x03FF);
7275*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x78 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase1>>00), 0xFFFF);
7276*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x79 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase1>>16), 0x03FF);
7277*53ee8cc1Swenshuai.xi     }
7278*53ee8cc1Swenshuai.xi     else
7279*53ee8cc1Swenshuai.xi #endif
7280*53ee8cc1Swenshuai.xi     {
7281*53ee8cc1Swenshuai.xi         //SCMI: IPM address 0
7282*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x40 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>00), 0xFFFF);
7283*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x41 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>16), 0x03FF);
7284*53ee8cc1Swenshuai.xi         //SCMI: IPM address 1
7285*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x50 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>00), 0xFFFF);
7286*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x51 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>16), 0x03FF);
7287*53ee8cc1Swenshuai.xi         //SCMI: OPM address 0
7288*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x60 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>00), 0xFFFF);
7289*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x61 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>16), 0x03FF);
7290*53ee8cc1Swenshuai.xi         //SCMI: OPM address 1
7291*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x70 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>00), 0xFFFF);
7292*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, _PK_L_(0x46, (0x71 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>16), 0x03FF);
7293*53ee8cc1Swenshuai.xi     }
7294*53ee8cc1Swenshuai.xi }
7295*53ee8cc1Swenshuai.xi 
_HAL_SC_BWR_set_vlen(void * pInstance,SCALER_WIN eWindow)7296*53ee8cc1Swenshuai.xi void _HAL_SC_BWR_set_vlen(void * pInstance, SCALER_WIN eWindow)
7297*53ee8cc1Swenshuai.xi {
7298*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7299*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7300*53ee8cc1Swenshuai.xi 
7301*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7302*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7303*53ee8cc1Swenshuai.xi     //update BWR Configuration vlen,IP 3D source: LA
7304*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Input_Mode(pInstance, eWindow) == E_XC_3D_INPUT_LINE_ALTERNATIVE)
7305*53ee8cc1Swenshuai.xi     {
7306*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_3D_L, BIT(15) | (gSrcInfo[eWindow].u16V_SizeAfterPreScaling/2), BIT(15) | 0x1FFF);
7307*53ee8cc1Swenshuai.xi     }
7308*53ee8cc1Swenshuai.xi     else
7309*53ee8cc1Swenshuai.xi     {
7310*53ee8cc1Swenshuai.xi         //update BWR Configuration vlen, VSD
7311*53ee8cc1Swenshuai.xi         if(gSrcInfo[eWindow].bPreV_ScalingDown)
7312*53ee8cc1Swenshuai.xi         {
7313*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_3D_L, BIT(15) | gSrcInfo[eWindow].u16V_SizeAfterPreScaling, BIT(15) | 0x1FFF);
7314*53ee8cc1Swenshuai.xi         }
7315*53ee8cc1Swenshuai.xi         else
7316*53ee8cc1Swenshuai.xi         {
7317*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_3D_L, 0, BIT(15));
7318*53ee8cc1Swenshuai.xi         }
7319*53ee8cc1Swenshuai.xi     }
7320*53ee8cc1Swenshuai.xi      //update BWR Configuration vlen,OP 3D output: LA
7321*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Output_Mode(pInstance) == E_XC_3D_OUTPUT_LINE_ALTERNATIVE)
7322*53ee8cc1Swenshuai.xi     {
7323*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_3E_L, BIT(15) | (gSrcInfo[eWindow].u16V_Length*2), BIT(15) | 0x1FFF);
7324*53ee8cc1Swenshuai.xi     }
7325*53ee8cc1Swenshuai.xi     else
7326*53ee8cc1Swenshuai.xi     {
7327*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_3E_L, 0, BIT(15));
7328*53ee8cc1Swenshuai.xi     }
7329*53ee8cc1Swenshuai.xi 
7330*53ee8cc1Swenshuai.xi }
7331*53ee8cc1Swenshuai.xi 
_HAL_SC_BWR_set_3d_mode(void * pInstance,SCALER_WIN eWindow)7332*53ee8cc1Swenshuai.xi static void _HAL_SC_BWR_set_3d_mode(void * pInstance, SCALER_WIN eWindow)
7333*53ee8cc1Swenshuai.xi {
7334*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7335*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7336*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7337*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7338*53ee8cc1Swenshuai.xi 
7339*53ee8cc1Swenshuai.xi     //BWR 422 to 420 set drop mode register
7340*53ee8cc1Swenshuai.xi     if((MDrv_XC_Get_3D_Input_Mode(pInstance, eWindow) == E_XC_3D_INPUT_LINE_ALTERNATIVE) && (gSrcInfo[eWindow].stCapWin.width > 1920))
7341*53ee8cc1Swenshuai.xi     {
7342*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_38_L, BIT(7), BIT(7));
7343*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_3A_L, 0, BIT(2));
7344*53ee8cc1Swenshuai.xi     }
7345*53ee8cc1Swenshuai.xi 
7346*53ee8cc1Swenshuai.xi     //BWR 422 to 420 set TB mode register
7347*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Output_Mode(pInstance) == E_XC_3D_OUTPUT_TOP_BOTTOM)
7348*53ee8cc1Swenshuai.xi     {
7349*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_3A_L, BIT(4), BIT(4));
7350*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, 0, BIT(11));
7351*53ee8cc1Swenshuai.xi     }
7352*53ee8cc1Swenshuai.xi 
7353*53ee8cc1Swenshuai.xi     //OP1 must turn off initial process
7354*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Output_Mode(pInstance) == E_XC_3D_OUTPUT_LINE_ALTERNATIVE)
7355*53ee8cc1Swenshuai.xi     {
7356*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L,BIT(12) ,BIT(12));
7357*53ee8cc1Swenshuai.xi     }
7358*53ee8cc1Swenshuai.xi     else
7359*53ee8cc1Swenshuai.xi     {
7360*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L,0 ,BIT(12));
7361*53ee8cc1Swenshuai.xi     }
7362*53ee8cc1Swenshuai.xi }
7363*53ee8cc1Swenshuai.xi 
_HAL_SC_BWR_set_base_address_burst(void * pInstance,MS_U16 u16MemCfgValue,MS_U16 u16MemCfgIndex,SCALER_WIN eWindow)7364*53ee8cc1Swenshuai.xi static void _HAL_SC_BWR_set_base_address_burst(void *pInstance, MS_U16 u16MemCfgValue,MS_U16 u16MemCfgIndex, SCALER_WIN eWindow)
7365*53ee8cc1Swenshuai.xi {
7366*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7367*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7368*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7369*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7370*53ee8cc1Swenshuai.xi 
7371*53ee8cc1Swenshuai.xi     E_XC_BWR_MEM_CONFIG u8Memtype = E_XC_BWR_MEM_CONFIG_1;
7372*53ee8cc1Swenshuai.xi     E_XC_BWR_MEM_CFG_BPP_TYPE eBPPType = E_XC_BWR_MEM_CFG_BPP_24;
7373*53ee8cc1Swenshuai.xi     for(u8Memtype=E_XC_BWR_MEM_CONFIG_1;u8Memtype<E_XC_BWR_MEM_CONFIG_Max;u8Memtype++)
7374*53ee8cc1Swenshuai.xi     {
7375*53ee8cc1Swenshuai.xi         if(u16MemCfgValue == gSrcInfo[eWindow].Status2.stMemCfgMap[u8Memtype].u16BWR_MEM_CFG_VALUE)
7376*53ee8cc1Swenshuai.xi         {
7377*53ee8cc1Swenshuai.xi             eBPPType = gSrcInfo[eWindow].Status2.stMemCfgMap[u8Memtype].eBitPerPixelType;
7378*53ee8cc1Swenshuai.xi             break;
7379*53ee8cc1Swenshuai.xi         }
7380*53ee8cc1Swenshuai.xi     }
7381*53ee8cc1Swenshuai.xi 
7382*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_DUAL_MIU
7383*53ee8cc1Swenshuai.xi     if (IsEnableDualMode(eWindow))
7384*53ee8cc1Swenshuai.xi     {
7385*53ee8cc1Swenshuai.xi         //SCMI: IPM address 0
7386*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x40 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>00), 0xFFFF);
7387*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x41 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>16), 0x03FF);
7388*53ee8cc1Swenshuai.xi 
7389*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x48 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase0>>00), 0xFFFF);
7390*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x49 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase0>>16), 0x03FF);
7391*53ee8cc1Swenshuai.xi 
7392*53ee8cc1Swenshuai.xi         //SCMI: IPM address 1
7393*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x50 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>00), 0xFFFF);
7394*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x51 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>16), 0x03FF);
7395*53ee8cc1Swenshuai.xi 
7396*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x58 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase1>>00), 0xFFFF);
7397*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x59 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_DNRBase1>>16), 0x03FF);
7398*53ee8cc1Swenshuai.xi 
7399*53ee8cc1Swenshuai.xi         //SCMI: OPM address 0
7400*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x60 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>00), 0xFFFF);
7401*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x61 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>16), 0x03FF);
7402*53ee8cc1Swenshuai.xi 
7403*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x68 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase0>>00), 0xFFFF);
7404*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x69 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase0>>16), 0x03FF);
7405*53ee8cc1Swenshuai.xi 
7406*53ee8cc1Swenshuai.xi         //SCMI: OPM address 1
7407*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x70 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>00), 0xFFFF);
7408*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x71 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>16), 0x03FF);
7409*53ee8cc1Swenshuai.xi 
7410*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x78 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase1>>00), 0xFFFF);
7411*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x79 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Right_OPMBase1>>16), 0x03FF);
7412*53ee8cc1Swenshuai.xi     }
7413*53ee8cc1Swenshuai.xi     else // Disbale dual
7414*53ee8cc1Swenshuai.xi #endif
7415*53ee8cc1Swenshuai.xi     {
7416*53ee8cc1Swenshuai.xi         //SCMI: IPM address 0
7417*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x40 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>00), 0xFFFF);
7418*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x41 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase0>>16), 0x03FF);
7419*53ee8cc1Swenshuai.xi 
7420*53ee8cc1Swenshuai.xi         //SCMI: IPM address 1
7421*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x50 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>00), 0xFFFF);
7422*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x51 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_DNRBase1>>16), 0x03FF);
7423*53ee8cc1Swenshuai.xi 
7424*53ee8cc1Swenshuai.xi         //SCMI: OPM address 0
7425*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x60 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>00), 0xFFFF);
7426*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x61 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase0>>16), 0x03FF);
7427*53ee8cc1Swenshuai.xi 
7428*53ee8cc1Swenshuai.xi         //SCMI: OPM address 1
7429*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x70 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>00), 0xFFFF);
7430*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, _PK_L_(0x46, (0x71 + u16MemCfgIndex * 2)), (MS_U16)(gSrcInfo[eWindow].Status2.stBWRBase[eBPPType].u32BWR_Miu_Left_OPMBase1>>16), 0x03FF);
7431*53ee8cc1Swenshuai.xi     }
7432*53ee8cc1Swenshuai.xi }
7433*53ee8cc1Swenshuai.xi 
_HAL_SC_BWR_set_vlen_burst(void * pInstance,SCALER_WIN eWindow)7434*53ee8cc1Swenshuai.xi static void _HAL_SC_BWR_set_vlen_burst(void * pInstance, SCALER_WIN eWindow)
7435*53ee8cc1Swenshuai.xi {
7436*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7437*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7438*53ee8cc1Swenshuai.xi 
7439*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7440*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7441*53ee8cc1Swenshuai.xi     //update BWR Configuration vlen,IP 3D source: LA
7442*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Input_Mode(pInstance, eWindow) == E_XC_3D_INPUT_LINE_ALTERNATIVE)
7443*53ee8cc1Swenshuai.xi     {
7444*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_3D_L, BIT(15) | (gSrcInfo[eWindow].u16V_SizeAfterPreScaling/2), BIT(15) | 0x1FFF);
7445*53ee8cc1Swenshuai.xi     }
7446*53ee8cc1Swenshuai.xi     else
7447*53ee8cc1Swenshuai.xi     {
7448*53ee8cc1Swenshuai.xi         //update BWR Configuration vlen, VSD
7449*53ee8cc1Swenshuai.xi         if(gSrcInfo[eWindow].bPreV_ScalingDown)
7450*53ee8cc1Swenshuai.xi         {
7451*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_3D_L, BIT(15) | gSrcInfo[eWindow].u16V_SizeAfterPreScaling, BIT(15) | 0x1FFF);
7452*53ee8cc1Swenshuai.xi         }
7453*53ee8cc1Swenshuai.xi         else
7454*53ee8cc1Swenshuai.xi         {
7455*53ee8cc1Swenshuai.xi             MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_3D_L, 0, BIT(15));
7456*53ee8cc1Swenshuai.xi         }
7457*53ee8cc1Swenshuai.xi     }
7458*53ee8cc1Swenshuai.xi      //update BWR Configuration vlen,OP 3D output: LA
7459*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Output_Mode(pInstance) == E_XC_3D_OUTPUT_LINE_ALTERNATIVE)
7460*53ee8cc1Swenshuai.xi     {
7461*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_3E_L, BIT(15) | (gSrcInfo[eWindow].u16V_Length*2), BIT(15) | 0x1FFF);
7462*53ee8cc1Swenshuai.xi     }
7463*53ee8cc1Swenshuai.xi     else
7464*53ee8cc1Swenshuai.xi     {
7465*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_3E_L, 0, BIT(15));
7466*53ee8cc1Swenshuai.xi     }
7467*53ee8cc1Swenshuai.xi }
7468*53ee8cc1Swenshuai.xi 
_HAL_SC_BWR_set_3d_mode_burst(void * pInstance,SCALER_WIN eWindow)7469*53ee8cc1Swenshuai.xi static void _HAL_SC_BWR_set_3d_mode_burst(void * pInstance, SCALER_WIN eWindow)
7470*53ee8cc1Swenshuai.xi {
7471*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7472*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7473*53ee8cc1Swenshuai.xi 
7474*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7475*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7476*53ee8cc1Swenshuai.xi 
7477*53ee8cc1Swenshuai.xi     //BWR 422 to 420 set drop mode register
7478*53ee8cc1Swenshuai.xi     if((MDrv_XC_Get_3D_Input_Mode(pInstance, eWindow) == E_XC_3D_INPUT_LINE_ALTERNATIVE) && (gSrcInfo[eWindow].stCapWin.width > 1920))
7479*53ee8cc1Swenshuai.xi     {
7480*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_38_L, BIT(7), BIT(7));
7481*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_3A_L, 0, BIT(2));
7482*53ee8cc1Swenshuai.xi     }
7483*53ee8cc1Swenshuai.xi 
7484*53ee8cc1Swenshuai.xi     //BWR 422 to 420 set TB mode register
7485*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Output_Mode(pInstance) == E_XC_3D_OUTPUT_TOP_BOTTOM)
7486*53ee8cc1Swenshuai.xi     {
7487*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_3A_L, BIT(4),BIT(4));
7488*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_10_L, 0, BIT(11));
7489*53ee8cc1Swenshuai.xi     }
7490*53ee8cc1Swenshuai.xi 
7491*53ee8cc1Swenshuai.xi     //OP1 must turn off initial process
7492*53ee8cc1Swenshuai.xi     if(MDrv_XC_Get_3D_Output_Mode(pInstance) == E_XC_3D_OUTPUT_LINE_ALTERNATIVE)
7493*53ee8cc1Swenshuai.xi     {
7494*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, BIT(12), BIT(12));
7495*53ee8cc1Swenshuai.xi     }
7496*53ee8cc1Swenshuai.xi     else
7497*53ee8cc1Swenshuai.xi     {
7498*53ee8cc1Swenshuai.xi         MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, 0, BIT(12));
7499*53ee8cc1Swenshuai.xi     }
7500*53ee8cc1Swenshuai.xi }
7501*53ee8cc1Swenshuai.xi #endif
7502*53ee8cc1Swenshuai.xi 
HAL_SC_set_bwr_config_burst(void * pInstance,void * pstParam,SCALER_WIN eWindow)7503*53ee8cc1Swenshuai.xi MS_BOOL HAL_SC_set_bwr_config_burst(void *pInstance, void *pstParam, SCALER_WIN eWindow)
7504*53ee8cc1Swenshuai.xi {
7505*53ee8cc1Swenshuai.xi #ifdef SUPPORT_BWD
7506*53ee8cc1Swenshuai.xi     MS_U16 u16BwrMemCfgTmp = 0;
7507*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7508*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7509*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7510*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7511*53ee8cc1Swenshuai.xi 
7512*53ee8cc1Swenshuai.xi     u16BwrMemCfgTmp = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_17_L, 0xFFFF);
7513*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_base_address_burst(pInstance, (u16BwrMemCfgTmp&0x000F) >> 0,  E_XC_BWR_MME_CFG_INDEX_0, eWindow);
7514*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_base_address_burst(pInstance, (u16BwrMemCfgTmp&0x00F0) >> 4,  E_XC_BWR_MME_CFG_INDEX_1, eWindow);
7515*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_base_address_burst(pInstance, (u16BwrMemCfgTmp&0x0F00) >> 8,  E_XC_BWR_MME_CFG_INDEX_2, eWindow);
7516*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_base_address_burst(pInstance, (u16BwrMemCfgTmp&0xF000) >> 12, E_XC_BWR_MME_CFG_INDEX_3, eWindow);
7517*53ee8cc1Swenshuai.xi     u16BwrMemCfgTmp = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_16_L, 0xF);
7518*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_28_L, u16BwrMemCfgTmp, 0x0F);
7519*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK46_29_L, u16BwrMemCfgTmp, 0x0F);
7520*53ee8cc1Swenshuai.xi 
7521*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_vlen_burst(pInstance, eWindow);
7522*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_3d_mode_burst(pInstance, eWindow);
7523*53ee8cc1Swenshuai.xi 
7524*53ee8cc1Swenshuai.xi     MDrv_XC_MLoad_Fire(pInstance, TRUE);
7525*53ee8cc1Swenshuai.xi     return TRUE;
7526*53ee8cc1Swenshuai.xi #else
7527*53ee8cc1Swenshuai.xi     return FALSE;
7528*53ee8cc1Swenshuai.xi #endif
7529*53ee8cc1Swenshuai.xi }
7530*53ee8cc1Swenshuai.xi 
HAL_SC_set_bwr_config(void * pInstance,void * pstParam,SCALER_WIN eWindow)7531*53ee8cc1Swenshuai.xi MS_BOOL HAL_SC_set_bwr_config(void *pInstance, void *pstParam, SCALER_WIN eWindow)
7532*53ee8cc1Swenshuai.xi {
7533*53ee8cc1Swenshuai.xi #ifdef SUPPORT_BWD
7534*53ee8cc1Swenshuai.xi     MS_U16 u16BwrMemCfgTmp = 0;
7535*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7536*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7537*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7538*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7539*53ee8cc1Swenshuai.xi 
7540*53ee8cc1Swenshuai.xi         u16BwrMemCfgTmp = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_17_L, 0xFFFF);
7541*53ee8cc1Swenshuai.xi         _HAL_SC_BWR_set_base_address(pInstance, (u16BwrMemCfgTmp&0x000F) >> 0,  E_XC_BWR_MME_CFG_INDEX_0, eWindow);
7542*53ee8cc1Swenshuai.xi         _HAL_SC_BWR_set_base_address(pInstance, (u16BwrMemCfgTmp&0x00F0) >> 4,  E_XC_BWR_MME_CFG_INDEX_1, eWindow);
7543*53ee8cc1Swenshuai.xi         _HAL_SC_BWR_set_base_address(pInstance, (u16BwrMemCfgTmp&0x0F00) >> 8,  E_XC_BWR_MME_CFG_INDEX_2, eWindow);
7544*53ee8cc1Swenshuai.xi         _HAL_SC_BWR_set_base_address(pInstance, (u16BwrMemCfgTmp&0xF000) >> 12, E_XC_BWR_MME_CFG_INDEX_3, eWindow);
7545*53ee8cc1Swenshuai.xi         u16BwrMemCfgTmp = SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_16_L, 0xF);
7546*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_28_L, u16BwrMemCfgTmp, 0x0F);
7547*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_29_L, u16BwrMemCfgTmp, 0x0F);
7548*53ee8cc1Swenshuai.xi 
7549*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_vlen(pInstance, eWindow);
7550*53ee8cc1Swenshuai.xi     _HAL_SC_BWR_set_3d_mode(pInstance, eWindow);
7551*53ee8cc1Swenshuai.xi     return TRUE;
7552*53ee8cc1Swenshuai.xi #else
7553*53ee8cc1Swenshuai.xi     return FALSE;
7554*53ee8cc1Swenshuai.xi #endif
7555*53ee8cc1Swenshuai.xi }
7556*53ee8cc1Swenshuai.xi 
7557*53ee8cc1Swenshuai.xi 
7558*53ee8cc1Swenshuai.xi #ifdef UFO_XC_AUTO_DOWNLOAD
_Hal_XC_Set_Auto_Download_WorkMode(MS_U32 u32DeviceID,MS_U32 u32RegAddr,MS_U8 u8Bit,EN_XC_AUTODOWNLOAD_MODE enMode)7559*53ee8cc1Swenshuai.xi static E_APIXC_ReturnValue _Hal_XC_Set_Auto_Download_WorkMode(MS_U32 u32DeviceID, MS_U32 u32RegAddr, MS_U8 u8Bit, EN_XC_AUTODOWNLOAD_MODE enMode)
7560*53ee8cc1Swenshuai.xi {
7561*53ee8cc1Swenshuai.xi     switch (enMode)
7562*53ee8cc1Swenshuai.xi     {
7563*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_TRIGGER_MODE:
7564*53ee8cc1Swenshuai.xi         {
7565*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(u32DeviceID, u32RegAddr, 0, BIT(u8Bit));
7566*53ee8cc1Swenshuai.xi             break;
7567*53ee8cc1Swenshuai.xi         }
7568*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_ENABLE_MODE:
7569*53ee8cc1Swenshuai.xi         {
7570*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(u32DeviceID, u32RegAddr, 1 << u8Bit, BIT(u8Bit));
7571*53ee8cc1Swenshuai.xi             break;
7572*53ee8cc1Swenshuai.xi         }
7573*53ee8cc1Swenshuai.xi         default:
7574*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL_INVALID_PARAMETER;
7575*53ee8cc1Swenshuai.xi     }
7576*53ee8cc1Swenshuai.xi 
7577*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
7578*53ee8cc1Swenshuai.xi }
7579*53ee8cc1Swenshuai.xi 
MHal_XC_AutoDownload_Config(void * pInstance,EN_XC_AUTODOWNLOAD_CLIENT enClient,MS_PHY phyBaseAddr,EN_XC_AUTODOWNLOAD_MODE enMode)7580*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue MHal_XC_AutoDownload_Config(void* pInstance, EN_XC_AUTODOWNLOAD_CLIENT enClient, MS_PHY phyBaseAddr, EN_XC_AUTODOWNLOAD_MODE enMode)
7581*53ee8cc1Swenshuai.xi {
7582*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7583*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7584*53ee8cc1Swenshuai.xi 
7585*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7586*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7587*53ee8cc1Swenshuai.xi 
7588*53ee8cc1Swenshuai.xi     switch(enClient)
7589*53ee8cc1Swenshuai.xi     {
7590*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_HDR:
7591*53ee8cc1Swenshuai.xi         {
7592*53ee8cc1Swenshuai.xi             pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32StartAddr = 0xFFFFFFFF;
7593*53ee8cc1Swenshuai.xi             pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32Depth = 0;
7594*53ee8cc1Swenshuai.xi             pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].enMode = enMode;
7595*53ee8cc1Swenshuai.xi 
7596*53ee8cc1Swenshuai.xi             //set baseaddr
7597*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_29_L, phyBaseAddr & 0x0000FFFF);
7598*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_2A_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7599*53ee8cc1Swenshuai.xi 
7600*53ee8cc1Swenshuai.xi             //set work mode
7601*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_28_L, 1, enMode);
7602*53ee8cc1Swenshuai.xi             break;
7603*53ee8cc1Swenshuai.xi         }
7604*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2GAMMA:
7605*53ee8cc1Swenshuai.xi         {
7606*53ee8cc1Swenshuai.xi             //set baseaddr
7607*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_02_L, phyBaseAddr & 0x0000FFFF);
7608*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_03_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7609*53ee8cc1Swenshuai.xi 
7610*53ee8cc1Swenshuai.xi             //set work mode
7611*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 3, enMode);
7612*53ee8cc1Swenshuai.xi             break;
7613*53ee8cc1Swenshuai.xi         }
7614*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCOP2GAMMA:
7615*53ee8cc1Swenshuai.xi         {
7616*53ee8cc1Swenshuai.xi             //set baseaddr
7617*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_12_L, phyBaseAddr & 0x0000FFFF);
7618*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_13_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7619*53ee8cc1Swenshuai.xi 
7620*53ee8cc1Swenshuai.xi             //set work mode
7621*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 6, enMode);
7622*53ee8cc1Swenshuai.xi             break;
7623*53ee8cc1Swenshuai.xi         }
7624*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_XVYCC:
7625*53ee8cc1Swenshuai.xi         {
7626*53ee8cc1Swenshuai.xi             //set baseaddr
7627*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_16_L, phyBaseAddr & 0x0000FFFF);
7628*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_17_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7629*53ee8cc1Swenshuai.xi 
7630*53ee8cc1Swenshuai.xi             //set work mode
7631*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 15, enMode);
7632*53ee8cc1Swenshuai.xi             break;
7633*53ee8cc1Swenshuai.xi         }
7634*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE1:
7635*53ee8cc1Swenshuai.xi         {
7636*53ee8cc1Swenshuai.xi             //set baseaddr
7637*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_04_L, phyBaseAddr & 0x0000FFFF);
7638*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_05_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7639*53ee8cc1Swenshuai.xi 
7640*53ee8cc1Swenshuai.xi             //set work mode
7641*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 4, enMode);
7642*53ee8cc1Swenshuai.xi             break;
7643*53ee8cc1Swenshuai.xi         }
7644*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE2:
7645*53ee8cc1Swenshuai.xi         {
7646*53ee8cc1Swenshuai.xi             //set baseaddr
7647*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_04_L, phyBaseAddr & 0x0000FFFF);
7648*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_05_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7649*53ee8cc1Swenshuai.xi 
7650*53ee8cc1Swenshuai.xi             //set work mode
7651*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 4, enMode);
7652*53ee8cc1Swenshuai.xi             break;
7653*53ee8cc1Swenshuai.xi         }
7654*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE3:
7655*53ee8cc1Swenshuai.xi         {
7656*53ee8cc1Swenshuai.xi             //set baseaddr
7657*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_04_L, phyBaseAddr & 0x0000FFFF);
7658*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_05_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7659*53ee8cc1Swenshuai.xi 
7660*53ee8cc1Swenshuai.xi             //set work mode
7661*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 4, enMode);
7662*53ee8cc1Swenshuai.xi             break;
7663*53ee8cc1Swenshuai.xi         }
7664*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_DEMURA:
7665*53ee8cc1Swenshuai.xi         {
7666*53ee8cc1Swenshuai.xi             //set baseaddr
7667*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_06_L, phyBaseAddr & 0x0000FFFF);
7668*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_07_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7669*53ee8cc1Swenshuai.xi 
7670*53ee8cc1Swenshuai.xi             //set work mode
7671*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 5, enMode);
7672*53ee8cc1Swenshuai.xi             break;
7673*53ee8cc1Swenshuai.xi         }
7674*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2LUT:
7675*53ee8cc1Swenshuai.xi         {
7676*53ee8cc1Swenshuai.xi             //set baseaddr
7677*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_23_L, phyBaseAddr & 0x0000FFFF);
7678*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_24_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7679*53ee8cc1Swenshuai.xi 
7680*53ee8cc1Swenshuai.xi             //set work mode
7681*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_22_L, 1, enMode);
7682*53ee8cc1Swenshuai.xi             break;
7683*53ee8cc1Swenshuai.xi         }
7684*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_0:
7685*53ee8cc1Swenshuai.xi         {
7686*53ee8cc1Swenshuai.xi             //set baseaddr
7687*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_33_L, phyBaseAddr & 0x0000FFFF);
7688*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_34_L, (phyBaseAddr >>16 & 0x0000FFFF), 0x07FF);
7689*53ee8cc1Swenshuai.xi 
7690*53ee8cc1Swenshuai.xi             //set work mode
7691*53ee8cc1Swenshuai.xi             _Hal_XC_Set_Auto_Download_WorkMode(psXCInstPri->u32DeviceID, REG_SC_BK67_32_L, 1, enMode);
7692*53ee8cc1Swenshuai.xi             break;
7693*53ee8cc1Swenshuai.xi         }
7694*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_1:
7695*53ee8cc1Swenshuai.xi         {
7696*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7697*53ee8cc1Swenshuai.xi         }
7698*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCSPTPOPM:
7699*53ee8cc1Swenshuai.xi         {
7700*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7701*53ee8cc1Swenshuai.xi         }
7702*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FOOPM:
7703*53ee8cc1Swenshuai.xi         {
7704*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7705*53ee8cc1Swenshuai.xi         }
7706*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_MAX:
7707*53ee8cc1Swenshuai.xi         default:
7708*53ee8cc1Swenshuai.xi         {
7709*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7710*53ee8cc1Swenshuai.xi         }
7711*53ee8cc1Swenshuai.xi 
7712*53ee8cc1Swenshuai.xi     }
7713*53ee8cc1Swenshuai.xi 
7714*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
7715*53ee8cc1Swenshuai.xi }
7716*53ee8cc1Swenshuai.xi 
MHal_XC_AutoDownload_Fire(void * pInstance,EN_XC_AUTODOWNLOAD_CLIENT enClient)7717*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue MHal_XC_AutoDownload_Fire(void* pInstance, EN_XC_AUTODOWNLOAD_CLIENT enClient)
7718*53ee8cc1Swenshuai.xi {
7719*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7720*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7721*53ee8cc1Swenshuai.xi 
7722*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7723*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7724*53ee8cc1Swenshuai.xi 
7725*53ee8cc1Swenshuai.xi     switch(enClient)
7726*53ee8cc1Swenshuai.xi     {
7727*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_HDR:
7728*53ee8cc1Swenshuai.xi         {
7729*53ee8cc1Swenshuai.xi             MS_PHY phyBaseAddr = pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].phyBaseAddr;
7730*53ee8cc1Swenshuai.xi             MS_U32 u32Depth = pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32Depth;
7731*53ee8cc1Swenshuai.xi             MS_VIRT* pVirtBaseAddr = (MS_VIRT *)MS_PA2KSEG1(phyBaseAddr);
7732*53ee8cc1Swenshuai.xi             MS_U8 *pu8BaseAddr = (MS_U8 *)pVirtBaseAddr;
7733*53ee8cc1Swenshuai.xi             MS_U32 u32StartAddr = pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32StartAddr;
7734*53ee8cc1Swenshuai.xi             pu8BaseAddr += 16 * u32StartAddr;
7735*53ee8cc1Swenshuai.xi 
7736*53ee8cc1Swenshuai.xi             // set baseaddr
7737*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_29_L, (MS_PHY)MS_VA2PA((MS_VIRT)pu8BaseAddr) & 0x0000FFFF);
7738*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_2A_L, (MS_PHY)(MS_VA2PA((MS_VIRT)pu8BaseAddr) >> 16 & 0x0000FFFF), 0x07FF);
7739*53ee8cc1Swenshuai.xi 
7740*53ee8cc1Swenshuai.xi             // set depth
7741*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_2B_L, u32Depth);
7742*53ee8cc1Swenshuai.xi             SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_2C_L, u32Depth);
7743*53ee8cc1Swenshuai.xi 
7744*53ee8cc1Swenshuai.xi             // enable auto download
7745*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_28_L, 1, BIT(0));
7746*53ee8cc1Swenshuai.xi 
7747*53ee8cc1Swenshuai.xi             EN_XC_AUTODOWNLOAD_MODE enMode = pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].enMode;
7748*53ee8cc1Swenshuai.xi             if (enMode == E_XC_AUTODOWNLOAD_TRIGGER_MODE)
7749*53ee8cc1Swenshuai.xi             {
7750*53ee8cc1Swenshuai.xi                 //check auto download done
7751*53ee8cc1Swenshuai.xi                 MS_U32 u32Delayms = 0;
7752*53ee8cc1Swenshuai.xi                 while(((SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK67_28_L) & 0x0001) != 0) && u32Delayms < 500)
7753*53ee8cc1Swenshuai.xi                 {
7754*53ee8cc1Swenshuai.xi                     MsOS_DelayTask(1);
7755*53ee8cc1Swenshuai.xi                     u32Delayms++;
7756*53ee8cc1Swenshuai.xi                 }
7757*53ee8cc1Swenshuai.xi 
7758*53ee8cc1Swenshuai.xi                 // clear buffer
7759*53ee8cc1Swenshuai.xi                 MS_U32 i = 0;
7760*53ee8cc1Swenshuai.xi                 for (i = 0; i < u32Depth; i++)
7761*53ee8cc1Swenshuai.xi                 {
7762*53ee8cc1Swenshuai.xi                     CLEAR_HDR_DATA_FORMAT_1(pu8BaseAddr + i * 16);
7763*53ee8cc1Swenshuai.xi                 }
7764*53ee8cc1Swenshuai.xi                 if (u32Delayms >= 500)
7765*53ee8cc1Swenshuai.xi                 {
7766*53ee8cc1Swenshuai.xi                     printf("Check auto download done timeout.\n");
7767*53ee8cc1Swenshuai.xi                 }
7768*53ee8cc1Swenshuai.xi             }
7769*53ee8cc1Swenshuai.xi 
7770*53ee8cc1Swenshuai.xi             pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32StartAddr = 0xFFFFFFFF;
7771*53ee8cc1Swenshuai.xi             pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32Depth = 0;
7772*53ee8cc1Swenshuai.xi             break;
7773*53ee8cc1Swenshuai.xi         }
7774*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2GAMMA:
7775*53ee8cc1Swenshuai.xi         {
7776*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 1, BIT(0));
7777*53ee8cc1Swenshuai.xi             break;
7778*53ee8cc1Swenshuai.xi         }
7779*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCOP2GAMMA:
7780*53ee8cc1Swenshuai.xi         {
7781*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_11_L, 1, BIT(0));
7782*53ee8cc1Swenshuai.xi             break;
7783*53ee8cc1Swenshuai.xi         }
7784*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_XVYCC:
7785*53ee8cc1Swenshuai.xi         {
7786*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_11_L, 1 << 2, BIT(2));
7787*53ee8cc1Swenshuai.xi             break;
7788*53ee8cc1Swenshuai.xi         }
7789*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE1:
7790*53ee8cc1Swenshuai.xi         {
7791*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 1 << 1, BIT(1));
7792*53ee8cc1Swenshuai.xi             break;
7793*53ee8cc1Swenshuai.xi         }
7794*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE2:
7795*53ee8cc1Swenshuai.xi         {
7796*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_21_L, 1, BIT(0));
7797*53ee8cc1Swenshuai.xi             break;
7798*53ee8cc1Swenshuai.xi         }
7799*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE3:
7800*53ee8cc1Swenshuai.xi         {
7801*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_21_L, 1 << 1, BIT(1));
7802*53ee8cc1Swenshuai.xi             break;
7803*53ee8cc1Swenshuai.xi         }
7804*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_DEMURA:
7805*53ee8cc1Swenshuai.xi         {
7806*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_01_L, 1 << 2, BIT(2));
7807*53ee8cc1Swenshuai.xi             break;
7808*53ee8cc1Swenshuai.xi         }
7809*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2LUT:
7810*53ee8cc1Swenshuai.xi         {
7811*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_22_L, 1, BIT(0));
7812*53ee8cc1Swenshuai.xi             break;
7813*53ee8cc1Swenshuai.xi         }
7814*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_0:
7815*53ee8cc1Swenshuai.xi         {
7816*53ee8cc1Swenshuai.xi             SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK67_32_L, 1, BIT(0));
7817*53ee8cc1Swenshuai.xi             break;
7818*53ee8cc1Swenshuai.xi         }
7819*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_1:
7820*53ee8cc1Swenshuai.xi         {
7821*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7822*53ee8cc1Swenshuai.xi         }
7823*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCSPTPOPM:
7824*53ee8cc1Swenshuai.xi         {
7825*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7826*53ee8cc1Swenshuai.xi         }
7827*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FOOPM:
7828*53ee8cc1Swenshuai.xi         {
7829*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7830*53ee8cc1Swenshuai.xi         }
7831*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_MAX:
7832*53ee8cc1Swenshuai.xi         default:
7833*53ee8cc1Swenshuai.xi         {
7834*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
7835*53ee8cc1Swenshuai.xi         }
7836*53ee8cc1Swenshuai.xi 
7837*53ee8cc1Swenshuai.xi     }
7838*53ee8cc1Swenshuai.xi 
7839*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
7840*53ee8cc1Swenshuai.xi }
7841*53ee8cc1Swenshuai.xi 
_Hal_XC_Auto_Download_Format_Hdr_Data(void * pInstance,EN_XC_AUTODOWNLOAD_SUB_CLIENT enSubClient,MS_U8 * pu8Data,MS_U32 u32Size,MS_U16 u16StartAddr)7842*53ee8cc1Swenshuai.xi static E_APIXC_ReturnValue _Hal_XC_Auto_Download_Format_Hdr_Data(void* pInstance,
7843*53ee8cc1Swenshuai.xi         EN_XC_AUTODOWNLOAD_SUB_CLIENT enSubClient, MS_U8* pu8Data, MS_U32 u32Size, MS_U16 u16StartAddr)
7844*53ee8cc1Swenshuai.xi {
7845*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
7846*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
7847*53ee8cc1Swenshuai.xi 
7848*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
7849*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
7850*53ee8cc1Swenshuai.xi 
7851*53ee8cc1Swenshuai.xi     MS_PHY phyBaseAddr = pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].phyBaseAddr;
7852*53ee8cc1Swenshuai.xi     MS_U32 u32Depth = pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32Depth;
7853*53ee8cc1Swenshuai.xi     MS_VIRT* pVirtBaseAddr = (MS_VIRT *)MS_PA2KSEG1(phyBaseAddr);
7854*53ee8cc1Swenshuai.xi     unsigned int i = 0;
7855*53ee8cc1Swenshuai.xi     MS_U32 u32Index = u16StartAddr;
7856*53ee8cc1Swenshuai.xi     MS_U32 u32WriteNum = 0;
7857*53ee8cc1Swenshuai.xi     MS_U8 *pu8BaseAddr = (MS_U8 *)pVirtBaseAddr;
7858*53ee8cc1Swenshuai.xi     pu8BaseAddr += 16 * u16StartAddr;
7859*53ee8cc1Swenshuai.xi 
7860*53ee8cc1Swenshuai.xi     // update start addr of DRAM
7861*53ee8cc1Swenshuai.xi     MS_U32 u32StartAddr = pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32StartAddr;
7862*53ee8cc1Swenshuai.xi     if (u32StartAddr == 0xFFFFFFFF)
7863*53ee8cc1Swenshuai.xi     {
7864*53ee8cc1Swenshuai.xi         pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32StartAddr = u16StartAddr;
7865*53ee8cc1Swenshuai.xi     }
7866*53ee8cc1Swenshuai.xi     else
7867*53ee8cc1Swenshuai.xi     {
7868*53ee8cc1Swenshuai.xi         pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32StartAddr = u32StartAddr > u16StartAddr ? u16StartAddr : u32StartAddr;
7869*53ee8cc1Swenshuai.xi     }
7870*53ee8cc1Swenshuai.xi 
7871*53ee8cc1Swenshuai.xi     //format&write datas into DRAM
7872*53ee8cc1Swenshuai.xi     for (i = 0; i < u32Size; )
7873*53ee8cc1Swenshuai.xi     {
7874*53ee8cc1Swenshuai.xi         switch (enSubClient)
7875*53ee8cc1Swenshuai.xi         {
7876*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_TMO:
7877*53ee8cc1Swenshuai.xi             {
7878*53ee8cc1Swenshuai.xi                 MS_U16 u16Value = *(((MS_U16 *)pu8Data) + i);
7879*53ee8cc1Swenshuai.xi                 if (u16Value & 0xF000)
7880*53ee8cc1Swenshuai.xi                 {
7881*53ee8cc1Swenshuai.xi                     printf("The %dth data is 0x%x, exceed max value, please check!!!\n", i + 1, u16Value);
7882*53ee8cc1Swenshuai.xi                     return E_APIXC_RET_FAIL_INVALID_PARAMETER;
7883*53ee8cc1Swenshuai.xi                 }
7884*53ee8cc1Swenshuai.xi                 WRITE_TMO_DATA_FORMAT_1(pu8BaseAddr, u32Index, u16Value);
7885*53ee8cc1Swenshuai.xi                 i++;
7886*53ee8cc1Swenshuai.xi                 break;
7887*53ee8cc1Swenshuai.xi             }
7888*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_GAMMA:
7889*53ee8cc1Swenshuai.xi             {
7890*53ee8cc1Swenshuai.xi                 MS_U16 u16Value = *(((MS_U16 *)pu8Data) + i);
7891*53ee8cc1Swenshuai.xi                 WRITE_GAMMA_DATA_FORMAT_1(pu8BaseAddr, u32Index, u16Value);
7892*53ee8cc1Swenshuai.xi                 i++;
7893*53ee8cc1Swenshuai.xi                 break;
7894*53ee8cc1Swenshuai.xi             }
7895*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_DEGAMMA:
7896*53ee8cc1Swenshuai.xi             {
7897*53ee8cc1Swenshuai.xi                 MS_U32 u32Value = *(((MS_U32 *)pu8Data) + i);
7898*53ee8cc1Swenshuai.xi                 if (u32Value & 0xFFF80000)
7899*53ee8cc1Swenshuai.xi                 {
7900*53ee8cc1Swenshuai.xi                     printf("The %dth data is 0x%x, exceed max value, please check!!!\n", i + 1, (unsigned int)u32Value);
7901*53ee8cc1Swenshuai.xi                     return E_APIXC_RET_FAIL_INVALID_PARAMETER;
7902*53ee8cc1Swenshuai.xi                 }
7903*53ee8cc1Swenshuai.xi                 WRITE_DEGAMMA_DATA_FORMAT_1(pu8BaseAddr, u32Index, u32Value);
7904*53ee8cc1Swenshuai.xi                 i++;
7905*53ee8cc1Swenshuai.xi                 break;
7906*53ee8cc1Swenshuai.xi             }
7907*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_3DLUT:
7908*53ee8cc1Swenshuai.xi             {
7909*53ee8cc1Swenshuai.xi                 MS_U16 u16RVal = *(((MS_U16 *)pu8Data) + i);
7910*53ee8cc1Swenshuai.xi                 MS_U16 u16GVal = *(((MS_U16 *)pu8Data) + i + 1);
7911*53ee8cc1Swenshuai.xi                 MS_U16 u16BVal = *(((MS_U16 *)pu8Data) + i + 2);
7912*53ee8cc1Swenshuai.xi                 MS_U16 u16Subindex = 0;
7913*53ee8cc1Swenshuai.xi                 if(i < _au32_3dlut_entry_num[0])
7914*53ee8cc1Swenshuai.xi                 {
7915*53ee8cc1Swenshuai.xi                     u16Subindex = 0;
7916*53ee8cc1Swenshuai.xi                 }
7917*53ee8cc1Swenshuai.xi                 else if(i < (_au32_3dlut_entry_num[0] + _au32_3dlut_entry_num[1]))
7918*53ee8cc1Swenshuai.xi                 {
7919*53ee8cc1Swenshuai.xi                     u16Subindex = 1;
7920*53ee8cc1Swenshuai.xi                 }
7921*53ee8cc1Swenshuai.xi                 else if(i < (_au32_3dlut_entry_num[0] + _au32_3dlut_entry_num[1] + _au32_3dlut_entry_num[2]))
7922*53ee8cc1Swenshuai.xi                 {
7923*53ee8cc1Swenshuai.xi                     u16Subindex = 2;
7924*53ee8cc1Swenshuai.xi                 }
7925*53ee8cc1Swenshuai.xi                 else if(i < (_au32_3dlut_entry_num[0] + _au32_3dlut_entry_num[1] + _au32_3dlut_entry_num[2] + _au32_3dlut_entry_num[3]))
7926*53ee8cc1Swenshuai.xi                 {
7927*53ee8cc1Swenshuai.xi                     u16Subindex = 3;
7928*53ee8cc1Swenshuai.xi                 }
7929*53ee8cc1Swenshuai.xi                 else if(i < (_au32_3dlut_entry_num[0] + _au32_3dlut_entry_num[1] + _au32_3dlut_entry_num[2] + _au32_3dlut_entry_num[3] + _au32_3dlut_entry_num[4]))
7930*53ee8cc1Swenshuai.xi                 {
7931*53ee8cc1Swenshuai.xi                     u16Subindex = 4;
7932*53ee8cc1Swenshuai.xi                 }
7933*53ee8cc1Swenshuai.xi                 else if(i < (_au32_3dlut_entry_num[0] + _au32_3dlut_entry_num[1] + _au32_3dlut_entry_num[2] + _au32_3dlut_entry_num[3] + _au32_3dlut_entry_num[4] + _au32_3dlut_entry_num[5]))
7934*53ee8cc1Swenshuai.xi                 {
7935*53ee8cc1Swenshuai.xi                     u16Subindex = 5;
7936*53ee8cc1Swenshuai.xi                 }
7937*53ee8cc1Swenshuai.xi                 else if(i < (_au32_3dlut_entry_num[0] + _au32_3dlut_entry_num[1] + _au32_3dlut_entry_num[2] + _au32_3dlut_entry_num[3] + _au32_3dlut_entry_num[4] + _au32_3dlut_entry_num[5] + _au32_3dlut_entry_num[6]))
7938*53ee8cc1Swenshuai.xi                 {
7939*53ee8cc1Swenshuai.xi                     u16Subindex = 6;
7940*53ee8cc1Swenshuai.xi                 }
7941*53ee8cc1Swenshuai.xi                 else if(i < (_au32_3dlut_entry_num[0] + _au32_3dlut_entry_num[1] + _au32_3dlut_entry_num[2] + _au32_3dlut_entry_num[3] + _au32_3dlut_entry_num[4] + _au32_3dlut_entry_num[5] + _au32_3dlut_entry_num[6] + _au32_3dlut_entry_num[7]))
7942*53ee8cc1Swenshuai.xi                 {
7943*53ee8cc1Swenshuai.xi                     u16Subindex = 7;
7944*53ee8cc1Swenshuai.xi                 }
7945*53ee8cc1Swenshuai.xi                 WRITE_3DLUT_DATA_FORMAT_1(pu8BaseAddr, u32Index, u16Subindex, u16RVal, u16GVal, u16BVal);
7946*53ee8cc1Swenshuai.xi                 i += 3;
7947*53ee8cc1Swenshuai.xi                 break;
7948*53ee8cc1Swenshuai.xi             }
7949*53ee8cc1Swenshuai.xi         }
7950*53ee8cc1Swenshuai.xi         pu8BaseAddr += 16;
7951*53ee8cc1Swenshuai.xi         u32WriteNum++;
7952*53ee8cc1Swenshuai.xi         u32Index++;
7953*53ee8cc1Swenshuai.xi     }
7954*53ee8cc1Swenshuai.xi 
7955*53ee8cc1Swenshuai.xi     u32Depth = u32Depth > u32WriteNum ? u32Depth : u32WriteNum;
7956*53ee8cc1Swenshuai.xi     pXCResourcePrivate->stdrvXC_Display._stClientInfo[E_XC_AUTODOWNLOAD_CLIENT_HDR].u32Depth = u32Depth;
7957*53ee8cc1Swenshuai.xi 
7958*53ee8cc1Swenshuai.xi #if DEBUG_HDR
7959*53ee8cc1Swenshuai.xi     int j = 0;
7960*53ee8cc1Swenshuai.xi     int l = 0;
7961*53ee8cc1Swenshuai.xi 
7962*53ee8cc1Swenshuai.xi     printf("\n#####################Dump Input Data####################\n");
7963*53ee8cc1Swenshuai.xi     for (j = 0; j < u32Size;)
7964*53ee8cc1Swenshuai.xi     {
7965*53ee8cc1Swenshuai.xi         printf("The %04dth row: ", u16StartAddr++);
7966*53ee8cc1Swenshuai.xi         switch (enSubClient)
7967*53ee8cc1Swenshuai.xi         {
7968*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_TMO:
7969*53ee8cc1Swenshuai.xi             {
7970*53ee8cc1Swenshuai.xi                 MS_U16 u16Value = *(((MS_U16 *)pu8Data) + j);
7971*53ee8cc1Swenshuai.xi                 printf("%02X \n", u16Value);
7972*53ee8cc1Swenshuai.xi                 j++;
7973*53ee8cc1Swenshuai.xi                 break;
7974*53ee8cc1Swenshuai.xi             }
7975*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_GAMMA:
7976*53ee8cc1Swenshuai.xi             {
7977*53ee8cc1Swenshuai.xi                 MS_U16 u16Value = *(((MS_U16 *)pu8Data) + j);
7978*53ee8cc1Swenshuai.xi                 printf("%02X \n", u16Value);
7979*53ee8cc1Swenshuai.xi                 j++;
7980*53ee8cc1Swenshuai.xi                 break;
7981*53ee8cc1Swenshuai.xi             }
7982*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_DEGAMMA:
7983*53ee8cc1Swenshuai.xi             {
7984*53ee8cc1Swenshuai.xi                 MS_U32 u32Value = *(((MS_U32 *)pu8Data) + j);
7985*53ee8cc1Swenshuai.xi                 printf("%04X \n", u32Value);
7986*53ee8cc1Swenshuai.xi                 j++;
7987*53ee8cc1Swenshuai.xi                 break;
7988*53ee8cc1Swenshuai.xi             }
7989*53ee8cc1Swenshuai.xi             case E_XC_AUTODOWNLOAD_HDR_SUB_3DLUT:
7990*53ee8cc1Swenshuai.xi             {
7991*53ee8cc1Swenshuai.xi                 MS_U16 u16RVal = *(((MS_U16 *)pu8Data) + j);
7992*53ee8cc1Swenshuai.xi                 MS_U16 u16GVal = *(((MS_U16 *)pu8Data) + j + 1);
7993*53ee8cc1Swenshuai.xi                 MS_U16 u16BVal = *(((MS_U16 *)pu8Data) + j + 2);
7994*53ee8cc1Swenshuai.xi                 printf("%02X %02X %02X \n", u16RVal, u16GVal, u16BVal);
7995*53ee8cc1Swenshuai.xi                 j += 3;
7996*53ee8cc1Swenshuai.xi                 break;
7997*53ee8cc1Swenshuai.xi             }
7998*53ee8cc1Swenshuai.xi         }
7999*53ee8cc1Swenshuai.xi         printf("\n");
8000*53ee8cc1Swenshuai.xi     }
8001*53ee8cc1Swenshuai.xi     printf("\n#####################Dump End####################\n\n");
8002*53ee8cc1Swenshuai.xi 
8003*53ee8cc1Swenshuai.xi     int k = AUTO_DOWNLOAD_HDR_TMO_SRAM_MAX_ADDR;
8004*53ee8cc1Swenshuai.xi     printf("\n#####################Dump DRAM Buffer####################\n");
8005*53ee8cc1Swenshuai.xi     for (j = 0; j < k; j++)
8006*53ee8cc1Swenshuai.xi     {
8007*53ee8cc1Swenshuai.xi         MS_U8 *pu8BaseAddr = (MS_U8 *)pVirtBaseAddr;
8008*53ee8cc1Swenshuai.xi         printf("\nThe %04dth row: ", j);
8009*53ee8cc1Swenshuai.xi         for (l = 0; l < 16; l++)
8010*53ee8cc1Swenshuai.xi         {
8011*53ee8cc1Swenshuai.xi             switch (enSubClient)
8012*53ee8cc1Swenshuai.xi             {
8013*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_TMO:
8014*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_GAMMA:
8015*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_DEGAMMA:
8016*53ee8cc1Swenshuai.xi                 {
8017*53ee8cc1Swenshuai.xi                     printf("%02X ", *(pu8BaseAddr + 16 * j + l));
8018*53ee8cc1Swenshuai.xi                     break;
8019*53ee8cc1Swenshuai.xi                 }
8020*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_3DLUT:
8021*53ee8cc1Swenshuai.xi                 {
8022*53ee8cc1Swenshuai.xi                     printf("%02X ", *(pu8BaseAddr + 16 * j + l));
8023*53ee8cc1Swenshuai.xi                     k = AUTO_DOWNLOAD_HDR_3DLUT_SRAM_MAX_ADDR;
8024*53ee8cc1Swenshuai.xi                     break;
8025*53ee8cc1Swenshuai.xi                 }
8026*53ee8cc1Swenshuai.xi             }
8027*53ee8cc1Swenshuai.xi         }
8028*53ee8cc1Swenshuai.xi     }
8029*53ee8cc1Swenshuai.xi     printf("\n#####################Dump End####################\n");
8030*53ee8cc1Swenshuai.xi #endif
8031*53ee8cc1Swenshuai.xi 
8032*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
8033*53ee8cc1Swenshuai.xi }
8034*53ee8cc1Swenshuai.xi 
MHal_XC_AutoDownload_Write(void * pInstance,EN_XC_AUTODOWNLOAD_CLIENT enClient,MS_U8 * pu8Data,MS_U32 u32Size,void * pParam)8035*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue MHal_XC_AutoDownload_Write(void* pInstance, EN_XC_AUTODOWNLOAD_CLIENT enClient, MS_U8* pu8Data, MS_U32 u32Size, void* pParam)
8036*53ee8cc1Swenshuai.xi {
8037*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8038*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8039*53ee8cc1Swenshuai.xi 
8040*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8041*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8042*53ee8cc1Swenshuai.xi 
8043*53ee8cc1Swenshuai.xi     switch(enClient)
8044*53ee8cc1Swenshuai.xi     {
8045*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_HDR:
8046*53ee8cc1Swenshuai.xi         {
8047*53ee8cc1Swenshuai.xi             XC_AUTODOWNLOAD_FORMAT_INFO* pstFormatInfo = (XC_AUTODOWNLOAD_FORMAT_INFO *)pParam;
8048*53ee8cc1Swenshuai.xi             MS_U16 u16StartAddr = 0;
8049*53ee8cc1Swenshuai.xi             MS_U32 u32MaxSize = 0;
8050*53ee8cc1Swenshuai.xi             switch (pstFormatInfo->enSubClient)
8051*53ee8cc1Swenshuai.xi             {
8052*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_TMO:
8053*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_GAMMA:
8054*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_DEGAMMA:
8055*53ee8cc1Swenshuai.xi                 {
8056*53ee8cc1Swenshuai.xi                     u32MaxSize = AUTO_DOWNLOAD_HDR_TMO_SRAM_MAX_ADDR;
8057*53ee8cc1Swenshuai.xi                     break;
8058*53ee8cc1Swenshuai.xi                 }
8059*53ee8cc1Swenshuai.xi                 case E_XC_AUTODOWNLOAD_HDR_SUB_3DLUT:
8060*53ee8cc1Swenshuai.xi                 {
8061*53ee8cc1Swenshuai.xi                     u32MaxSize = AUTO_DOWNLOAD_HDR_3DLUT_SRAM_MAX_ADDR * 3;
8062*53ee8cc1Swenshuai.xi                     break;
8063*53ee8cc1Swenshuai.xi                 }
8064*53ee8cc1Swenshuai.xi                 default:
8065*53ee8cc1Swenshuai.xi                 {
8066*53ee8cc1Swenshuai.xi                     printf("Write auto download fail, invaild paramters, subClient: %d\n", pstFormatInfo->enSubClient);
8067*53ee8cc1Swenshuai.xi                     return E_APIXC_RET_FAIL_INVALID_PARAMETER;
8068*53ee8cc1Swenshuai.xi                 }
8069*53ee8cc1Swenshuai.xi             }
8070*53ee8cc1Swenshuai.xi             if (pstFormatInfo->bEnableRange == TRUE)
8071*53ee8cc1Swenshuai.xi             {
8072*53ee8cc1Swenshuai.xi                 if (pstFormatInfo->u16StartAddr <= pstFormatInfo->u16EndAddr && pstFormatInfo->u16EndAddr < u32MaxSize
8073*53ee8cc1Swenshuai.xi                     && (pstFormatInfo->u16StartAddr + u32Size - 1) < u32MaxSize)
8074*53ee8cc1Swenshuai.xi                 {
8075*53ee8cc1Swenshuai.xi                     u16StartAddr = pstFormatInfo->u16StartAddr;
8076*53ee8cc1Swenshuai.xi                 }
8077*53ee8cc1Swenshuai.xi                 else
8078*53ee8cc1Swenshuai.xi                 {
8079*53ee8cc1Swenshuai.xi                     printf("Write auto download fail, invaild paramters, size: %d, addr range(enable, start, end) = (%d, %d, %d)\n",
8080*53ee8cc1Swenshuai.xi                            (unsigned int)u32Size, pstFormatInfo->bEnableRange, pstFormatInfo->u16StartAddr, pstFormatInfo->u16EndAddr);
8081*53ee8cc1Swenshuai.xi                     return E_APIXC_RET_FAIL_INVALID_PARAMETER;
8082*53ee8cc1Swenshuai.xi                 }
8083*53ee8cc1Swenshuai.xi             }
8084*53ee8cc1Swenshuai.xi             else
8085*53ee8cc1Swenshuai.xi             {
8086*53ee8cc1Swenshuai.xi                 if (u32Size > u32MaxSize)
8087*53ee8cc1Swenshuai.xi                 {
8088*53ee8cc1Swenshuai.xi                     printf("Write auto download fail, invaild paramters, size: %d\n", (unsigned int)u32Size);
8089*53ee8cc1Swenshuai.xi                     return E_APIXC_RET_FAIL_INVALID_PARAMETER;
8090*53ee8cc1Swenshuai.xi                 }
8091*53ee8cc1Swenshuai.xi             }
8092*53ee8cc1Swenshuai.xi             return _Hal_XC_Auto_Download_Format_Hdr_Data(pInstance, pstFormatInfo->enSubClient, pu8Data, u32Size, u16StartAddr);
8093*53ee8cc1Swenshuai.xi         }
8094*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2GAMMA:
8095*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCOP2GAMMA:
8096*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_XVYCC:
8097*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE1:
8098*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE2:
8099*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE3:
8100*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_DEMURA:
8101*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2LUT:
8102*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_0:
8103*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_1:
8104*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCSPTPOPM:
8105*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FOOPM:
8106*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_MAX:
8107*53ee8cc1Swenshuai.xi         default:
8108*53ee8cc1Swenshuai.xi         {
8109*53ee8cc1Swenshuai.xi             return E_APIXC_RET_FAIL;
8110*53ee8cc1Swenshuai.xi         }
8111*53ee8cc1Swenshuai.xi 
8112*53ee8cc1Swenshuai.xi     }
8113*53ee8cc1Swenshuai.xi 
8114*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
8115*53ee8cc1Swenshuai.xi }
8116*53ee8cc1Swenshuai.xi 
MHal_XC_GetAutoDownloadCaps(EN_XC_AUTODOWNLOAD_CLIENT enClient,MS_BOOL * pbSupported)8117*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue MHal_XC_GetAutoDownloadCaps(EN_XC_AUTODOWNLOAD_CLIENT enClient, MS_BOOL *pbSupported)
8118*53ee8cc1Swenshuai.xi {
8119*53ee8cc1Swenshuai.xi     switch(enClient)
8120*53ee8cc1Swenshuai.xi     {
8121*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_HDR:
8122*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2GAMMA:
8123*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCOP2GAMMA:
8124*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_XVYCC:
8125*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE1:
8126*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE2:
8127*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_ODTABLE3:
8128*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_DEMURA:
8129*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_OP2LUT:
8130*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_0:
8131*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_T3D_1:
8132*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FRCSPTPOPM:
8133*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_FOOPM:
8134*53ee8cc1Swenshuai.xi         {
8135*53ee8cc1Swenshuai.xi             *pbSupported = TRUE;
8136*53ee8cc1Swenshuai.xi             break;
8137*53ee8cc1Swenshuai.xi         }
8138*53ee8cc1Swenshuai.xi         case E_XC_AUTODOWNLOAD_CLIENT_MAX:
8139*53ee8cc1Swenshuai.xi         default:
8140*53ee8cc1Swenshuai.xi         {
8141*53ee8cc1Swenshuai.xi             *pbSupported = FALSE;
8142*53ee8cc1Swenshuai.xi             break;
8143*53ee8cc1Swenshuai.xi         }
8144*53ee8cc1Swenshuai.xi 
8145*53ee8cc1Swenshuai.xi     }
8146*53ee8cc1Swenshuai.xi 
8147*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
8148*53ee8cc1Swenshuai.xi }
8149*53ee8cc1Swenshuai.xi #endif
8150*53ee8cc1Swenshuai.xi 
8151*53ee8cc1Swenshuai.xi #ifdef UFO_XC_HDR
8152*53ee8cc1Swenshuai.xi #if (UFO_XC_HDR_VERSION == 2)
_Hal_XC_HDR_UpdateDMAMode(void * pInstance)8153*53ee8cc1Swenshuai.xi static E_APIXC_ReturnValue _Hal_XC_HDR_UpdateDMAMode(void* pInstance)
8154*53ee8cc1Swenshuai.xi {
8155*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8156*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8157*53ee8cc1Swenshuai.xi 
8158*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8159*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8160*53ee8cc1Swenshuai.xi 
8161*53ee8cc1Swenshuai.xi     EN_XC_HDR_COLOR_FORMAT enColorFormat = pXCResourcePrivate->stdrvXC_Display._enColorFormat;
8162*53ee8cc1Swenshuai.xi     EN_XC_HDR_DMA_MODE enMode = pXCResourcePrivate->stdrvXC_Display._stDMAConfigInfo.enMode;
8163*53ee8cc1Swenshuai.xi 
8164*53ee8cc1Swenshuai.xi     switch (enColorFormat)
8165*53ee8cc1Swenshuai.xi     {
8166*53ee8cc1Swenshuai.xi         case E_XC_HDR_COLOR_YUV422:
8167*53ee8cc1Swenshuai.xi         {
8168*53ee8cc1Swenshuai.xi             // set dma mode
8169*53ee8cc1Swenshuai.xi             if (enMode == E_XC_HDR_DMA_MODE_12BIT)
8170*53ee8cc1Swenshuai.xi             {
8171*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_01_L, 0, 0x0003);
8172*53ee8cc1Swenshuai.xi             }
8173*53ee8cc1Swenshuai.xi             else if (enMode == E_XC_HDR_DMA_MODE_8BIT)
8174*53ee8cc1Swenshuai.xi             {
8175*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_01_L, 2, 0x0003);
8176*53ee8cc1Swenshuai.xi             }
8177*53ee8cc1Swenshuai.xi             else if (enMode == E_XC_HDR_DMA_MODE_10BIT)
8178*53ee8cc1Swenshuai.xi             {
8179*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_01_L, 3, 0x0003);
8180*53ee8cc1Swenshuai.xi             }
8181*53ee8cc1Swenshuai.xi             break;
8182*53ee8cc1Swenshuai.xi         }
8183*53ee8cc1Swenshuai.xi         case E_XC_HDR_COLOR_YUV444:
8184*53ee8cc1Swenshuai.xi         {
8185*53ee8cc1Swenshuai.xi             if (enMode == E_XC_HDR_DMA_MODE_10BIT)
8186*53ee8cc1Swenshuai.xi             {
8187*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_01_L, 1, 0x0003);
8188*53ee8cc1Swenshuai.xi             }
8189*53ee8cc1Swenshuai.xi             break;
8190*53ee8cc1Swenshuai.xi         }
8191*53ee8cc1Swenshuai.xi         case E_XC_HDR_COLOR_YUV420:
8192*53ee8cc1Swenshuai.xi         case E_XC_HDR_COLOR_RGB:
8193*53ee8cc1Swenshuai.xi         default:
8194*53ee8cc1Swenshuai.xi         {
8195*53ee8cc1Swenshuai.xi             break;
8196*53ee8cc1Swenshuai.xi         }
8197*53ee8cc1Swenshuai.xi     }
8198*53ee8cc1Swenshuai.xi 
8199*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
8200*53ee8cc1Swenshuai.xi }
8201*53ee8cc1Swenshuai.xi 
MHal_XC_HDR_Control(void * pInstance,EN_XC_HDR_CTRL_TYPE enCtrlType,void * pParam)8202*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue MHal_XC_HDR_Control(void* pInstance, EN_XC_HDR_CTRL_TYPE enCtrlType, void *pParam)
8203*53ee8cc1Swenshuai.xi {
8204*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8205*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8206*53ee8cc1Swenshuai.xi 
8207*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8208*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8209*53ee8cc1Swenshuai.xi 
8210*53ee8cc1Swenshuai.xi     switch(enCtrlType)
8211*53ee8cc1Swenshuai.xi     {
8212*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_CONFIG_DMA:
8213*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_SET_COLOR_FORMAT:
8214*53ee8cc1Swenshuai.xi         {
8215*53ee8cc1Swenshuai.xi             _Hal_XC_HDR_UpdateDMAMode(pInstance);
8216*53ee8cc1Swenshuai.xi             break;
8217*53ee8cc1Swenshuai.xi         }
8218*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_INIT_DMA:
8219*53ee8cc1Swenshuai.xi         {
8220*53ee8cc1Swenshuai.xi             MS_U8 u8MIUSel = 0;
8221*53ee8cc1Swenshuai.xi             XC_HDR_DMA_INIT_INFO stDMAInitInfo = *(XC_HDR_DMA_INIT_INFO *)pParam;
8222*53ee8cc1Swenshuai.xi             _phy_to_miu_offset(u8MIUSel, stDMAInitInfo.phyBaseAddr, stDMAInitInfo.phyBaseAddr);
8223*53ee8cc1Swenshuai.xi             if (stDMAInitInfo.u32Size != 0)
8224*53ee8cc1Swenshuai.xi             {
8225*53ee8cc1Swenshuai.xi                 // set IPM/OPM addr
8226*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK42_08_L, stDMAInitInfo.phyBaseAddr / BYTE_PER_WORD);
8227*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_09_L, (stDMAInitInfo.phyBaseAddr / BYTE_PER_WORD) >> 16, 0x01FF);
8228*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK42_10_L, stDMAInitInfo.phyBaseAddr / BYTE_PER_WORD);
8229*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_11_L, (stDMAInitInfo.phyBaseAddr / BYTE_PER_WORD) >> 16, 0x01FF);
8230*53ee8cc1Swenshuai.xi                 // set miu
8231*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_05_L, u8MIUSel << 4, BMASK(5:4));
8232*53ee8cc1Swenshuai.xi                 // set limit addr
8233*53ee8cc1Swenshuai.xi                 // enable limit
8234*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_50_L, 1, BIT(0));
8235*53ee8cc1Swenshuai.xi                 // min addr
8236*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK42_52_L, stDMAInitInfo.phyBaseAddr / BYTE_PER_WORD);
8237*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_53_L, (stDMAInitInfo.phyBaseAddr / BYTE_PER_WORD) >> 16, 0x01FF);
8238*53ee8cc1Swenshuai.xi                 // max addr
8239*53ee8cc1Swenshuai.xi                 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK42_54_L, (stDMAInitInfo.phyBaseAddr + stDMAInitInfo.u32Size) / BYTE_PER_WORD - 1);
8240*53ee8cc1Swenshuai.xi                 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK42_55_L, ((stDMAInitInfo.phyBaseAddr + stDMAInitInfo.u32Size) / BYTE_PER_WORD - 1) >> 16, 0x01FF);
8241*53ee8cc1Swenshuai.xi             }
8242*53ee8cc1Swenshuai.xi             break;
8243*53ee8cc1Swenshuai.xi         }
8244*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_ENABLE:
8245*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_SET_TYPE:
8246*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_SET_3DLUT:
8247*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_SET_OTT_SHARE_MEMORY:
8248*53ee8cc1Swenshuai.xi         case E_XC_HDR_CTRL_SET_OPEN_METADATA:
8249*53ee8cc1Swenshuai.xi         default:
8250*53ee8cc1Swenshuai.xi         {
8251*53ee8cc1Swenshuai.xi             break;
8252*53ee8cc1Swenshuai.xi         }
8253*53ee8cc1Swenshuai.xi     }
8254*53ee8cc1Swenshuai.xi 
8255*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
8256*53ee8cc1Swenshuai.xi }
8257*53ee8cc1Swenshuai.xi 
MHal_XC_HDR_GetCaps(void * pInstance,XC_HDR_SUPPORTED_CAPS * pstHDRCaps)8258*53ee8cc1Swenshuai.xi E_APIXC_ReturnValue MHal_XC_HDR_GetCaps(void *pInstance, XC_HDR_SUPPORTED_CAPS *pstHDRCaps)
8259*53ee8cc1Swenshuai.xi {
8260*53ee8cc1Swenshuai.xi     EN_XC_HDR_TYPE enHDRType = pstHDRCaps->enHDRType;
8261*53ee8cc1Swenshuai.xi 
8262*53ee8cc1Swenshuai.xi     switch (enHDRType)
8263*53ee8cc1Swenshuai.xi     {
8264*53ee8cc1Swenshuai.xi         case E_XC_HDR_TYPE_OPEN:
8265*53ee8cc1Swenshuai.xi         {
8266*53ee8cc1Swenshuai.xi             pstHDRCaps->bSupported = TRUE;
8267*53ee8cc1Swenshuai.xi             break;
8268*53ee8cc1Swenshuai.xi         }
8269*53ee8cc1Swenshuai.xi         case E_XC_HDR_TYPE_DOLBY:
8270*53ee8cc1Swenshuai.xi         {
8271*53ee8cc1Swenshuai.xi             if (MDrv_AUTH_IPCheck(IPAUTH_DOLBY_HDR_PIN) == TRUE)
8272*53ee8cc1Swenshuai.xi             {
8273*53ee8cc1Swenshuai.xi                 pstHDRCaps->bSupported = TRUE;
8274*53ee8cc1Swenshuai.xi             }
8275*53ee8cc1Swenshuai.xi             else
8276*53ee8cc1Swenshuai.xi             {
8277*53ee8cc1Swenshuai.xi                 pstHDRCaps->bSupported = FALSE;
8278*53ee8cc1Swenshuai.xi             }
8279*53ee8cc1Swenshuai.xi             break;
8280*53ee8cc1Swenshuai.xi         }
8281*53ee8cc1Swenshuai.xi         case E_XC_HDR_TYPE_TECHNICOLOR:
8282*53ee8cc1Swenshuai.xi         {
8283*53ee8cc1Swenshuai.xi             pstHDRCaps->bSupported = FALSE;
8284*53ee8cc1Swenshuai.xi             break;
8285*53ee8cc1Swenshuai.xi         }
8286*53ee8cc1Swenshuai.xi         case E_XC_HDR_TYPE_HLG:
8287*53ee8cc1Swenshuai.xi         {
8288*53ee8cc1Swenshuai.xi             pstHDRCaps->bSupported = FALSE;
8289*53ee8cc1Swenshuai.xi             break;
8290*53ee8cc1Swenshuai.xi         }
8291*53ee8cc1Swenshuai.xi         default:
8292*53ee8cc1Swenshuai.xi         {
8293*53ee8cc1Swenshuai.xi             pstHDRCaps->bSupported = FALSE;
8294*53ee8cc1Swenshuai.xi         }
8295*53ee8cc1Swenshuai.xi     }
8296*53ee8cc1Swenshuai.xi 
8297*53ee8cc1Swenshuai.xi     pstHDRCaps->s32MaxLuminanceData = -1;
8298*53ee8cc1Swenshuai.xi     pstHDRCaps->s32MinLuminanceData = -1;
8299*53ee8cc1Swenshuai.xi     pstHDRCaps->s32MaxFrameAveLumiance = -1;
8300*53ee8cc1Swenshuai.xi 
8301*53ee8cc1Swenshuai.xi     return E_APIXC_RET_OK;
8302*53ee8cc1Swenshuai.xi }
8303*53ee8cc1Swenshuai.xi #endif
8304*53ee8cc1Swenshuai.xi #endif
8305*53ee8cc1Swenshuai.xi 
MHal_XC_Get_FB_Level(void * pInstance,MS_WINDOW_TYPE * pstCropWin,MS_WINDOW_TYPE * pstDispWin,MS_BOOL bInterlace,MS_U16 * pu16HSize,MS_U16 * pu16VSize)8306*53ee8cc1Swenshuai.xi E_XC_FB_LEVEL MHal_XC_Get_FB_Level(void* pInstance, MS_WINDOW_TYPE* pstCropWin, MS_WINDOW_TYPE* pstDispWin, MS_BOOL bInterlace, MS_U16* pu16HSize, MS_U16* pu16VSize)
8307*53ee8cc1Swenshuai.xi {
8308*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8309*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8310*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8311*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8312*53ee8cc1Swenshuai.xi     E_XC_FB_LEVEL ret = E_XC_FB_LEVEL_NUM;
8313*53ee8cc1Swenshuai.xi 
8314*53ee8cc1Swenshuai.xi     if(E_XC_DEVICE0 == psXCInstPri->u32DeviceID)
8315*53ee8cc1Swenshuai.xi     {
8316*53ee8cc1Swenshuai.xi         MS_BOOL bEnablePreH = FALSE;
8317*53ee8cc1Swenshuai.xi         MS_BOOL bEnablePreV = FALSE;
8318*53ee8cc1Swenshuai.xi         //-----------------------------------------
8319*53ee8cc1Swenshuai.xi         // Vertical
8320*53ee8cc1Swenshuai.xi         //--------------------------------
8321*53ee8cc1Swenshuai.xi 
8322*53ee8cc1Swenshuai.xi         if((pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Height > 2000)
8323*53ee8cc1Swenshuai.xi             && (pXCResourcePrivate->stdrvXC_MVideo_Context.g_XC_InitData.stPanelInfo.u16Width > 3200))
8324*53ee8cc1Swenshuai.xi         {
8325*53ee8cc1Swenshuai.xi             // Need force pre-scaling if disp.V size < 88% of crop.V size.
8326*53ee8cc1Swenshuai.xi             if((pstDispWin->height * 25) < (pstCropWin->height * 22))
8327*53ee8cc1Swenshuai.xi             {
8328*53ee8cc1Swenshuai.xi                 bEnablePreV = TRUE;
8329*53ee8cc1Swenshuai.xi             }
8330*53ee8cc1Swenshuai.xi 
8331*53ee8cc1Swenshuai.xi             if((pstDispWin->width * 25) < (pstCropWin->width * 22))
8332*53ee8cc1Swenshuai.xi             {
8333*53ee8cc1Swenshuai.xi                 bEnablePreH = TRUE;
8334*53ee8cc1Swenshuai.xi             }
8335*53ee8cc1Swenshuai.xi         }
8336*53ee8cc1Swenshuai.xi 
8337*53ee8cc1Swenshuai.xi         if(bEnablePreH || bEnablePreV)
8338*53ee8cc1Swenshuai.xi         {
8339*53ee8cc1Swenshuai.xi             ret = E_XC_FB_LEVEL_FB;
8340*53ee8cc1Swenshuai.xi         }
8341*53ee8cc1Swenshuai.xi         else
8342*53ee8cc1Swenshuai.xi         {
8343*53ee8cc1Swenshuai.xi             ret = E_XC_FB_LEVEL_FBL;
8344*53ee8cc1Swenshuai.xi         }
8345*53ee8cc1Swenshuai.xi     }
8346*53ee8cc1Swenshuai.xi     return ret;
8347*53ee8cc1Swenshuai.xi }
8348*53ee8cc1Swenshuai.xi 
Hal_SC_add_dram_to_shm(void * pInstance,SCALER_WIN eWindow,MS_U32 u32address,MS_U32 u32length)8349*53ee8cc1Swenshuai.xi void Hal_SC_add_dram_to_shm(void *pInstance,SCALER_WIN eWindow,MS_U32 u32address,MS_U32 u32length)
8350*53ee8cc1Swenshuai.xi {
8351*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8352*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8353*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8354*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8355*53ee8cc1Swenshuai.xi 
8356*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_cnt].address = u32address;
8357*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_cnt].length = u32length;
8358*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_cnt++;
8359*53ee8cc1Swenshuai.xi }
Hal_SC_add_reg_to_shm(void * pInstance,SCALER_WIN eWindow,MS_U32 u32_bk,MS_U16 u16_value,MS_U16 u16_mask)8360*53ee8cc1Swenshuai.xi void Hal_SC_add_reg_to_shm(void *pInstance,SCALER_WIN eWindow,MS_U32 u32_bk,MS_U16 u16_value,MS_U16 u16_mask)
8361*53ee8cc1Swenshuai.xi {
8362*53ee8cc1Swenshuai.xi     MS_U32 u32offset = 0;
8363*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8364*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8365*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8366*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8367*53ee8cc1Swenshuai.xi 
8368*53ee8cc1Swenshuai.xi     u32offset = _XC_Device_Offset[psXCInstPri->u32DeviceID];
8369*53ee8cc1Swenshuai.xi 
8370*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].regs_data[pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].regs_cnt].bk = REG_SCALER_BASE + u32_bk + (u32offset << 8);
8371*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].regs_data[pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].regs_cnt].value = u16_value;
8372*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].regs_data[pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].regs_cnt].mask = u16_mask;
8373*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].regs_cnt ++;
8374*53ee8cc1Swenshuai.xi }
8375*53ee8cc1Swenshuai.xi 
Hal_SC_secure_lock(void * pInstance,SCALER_WIN eWindow,MS_U32 u32SecureDMA,MS_U32 u32OperationMode)8376*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_secure_lock(void *pInstance, SCALER_WIN eWindow, MS_U32 u32SecureDMA, MS_U32 u32OperationMode)
8377*53ee8cc1Swenshuai.xi {
8378*53ee8cc1Swenshuai.xi     #ifdef MSOS_TYPE_OPTEE
8379*53ee8cc1Swenshuai.xi     MS_PHY phy_dramAddr = 0;
8380*53ee8cc1Swenshuai.xi     MS_U8 u8i = 0;
8381*53ee8cc1Swenshuai.xi     #endif
8382*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8383*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8384*53ee8cc1Swenshuai.xi     #ifndef MSOS_TYPE_OPTEE
8385*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8386*53ee8cc1Swenshuai.xi     #else
8387*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE_FOR_TEE* pXCResourcePrivate = NULL;
8388*53ee8cc1Swenshuai.xi     #endif
8389*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8390*53ee8cc1Swenshuai.xi     #ifdef MSOS_TYPE_OPTEE
8391*53ee8cc1Swenshuai.xi     if (u32SecureDMA == 0)
8392*53ee8cc1Swenshuai.xi     {
8393*53ee8cc1Swenshuai.xi         MDrv_Seal_ChangeIPSecureDMAAbillity(MODULE_XC, 0 , FALSE);
8394*53ee8cc1Swenshuai.xi     }
8395*53ee8cc1Swenshuai.xi     for (u8i = 0; u8i < pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_cnt; u8i++)
8396*53ee8cc1Swenshuai.xi     {
8397*53ee8cc1Swenshuai.xi         phy_dramAddr = (MS_PHY) pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[u8i].address;
8398*53ee8cc1Swenshuai.xi         if (u8i >= OP_TEE_XC_DRAM_MAX_CNT)
8399*53ee8cc1Swenshuai.xi         {
8400*53ee8cc1Swenshuai.xi             printf("dram cnt overflow\n");
8401*53ee8cc1Swenshuai.xi             break;
8402*53ee8cc1Swenshuai.xi         }
8403*53ee8cc1Swenshuai.xi         if (u32OperationMode == 1)
8404*53ee8cc1Swenshuai.xi         {
8405*53ee8cc1Swenshuai.xi             if(MDrv_Seal_SetSecureRange(phy_dramAddr, pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[u8i].length , TRUE) == FALSE)
8406*53ee8cc1Swenshuai.xi             {
8407*53ee8cc1Swenshuai.xi                 return FALSE;
8408*53ee8cc1Swenshuai.xi             }
8409*53ee8cc1Swenshuai.xi         }
8410*53ee8cc1Swenshuai.xi         else if (u32OperationMode == 0)
8411*53ee8cc1Swenshuai.xi         {
8412*53ee8cc1Swenshuai.xi             if(MDrv_Seal_SetSecureRange(phy_dramAddr , pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[u8i].length , FALSE) == FALSE)
8413*53ee8cc1Swenshuai.xi             {
8414*53ee8cc1Swenshuai.xi                 return FALSE;
8415*53ee8cc1Swenshuai.xi             }
8416*53ee8cc1Swenshuai.xi         }
8417*53ee8cc1Swenshuai.xi     }
8418*53ee8cc1Swenshuai.xi     if (u32SecureDMA == 1)
8419*53ee8cc1Swenshuai.xi     {
8420*53ee8cc1Swenshuai.xi         MDrv_Seal_ChangeIPSecureDMAAbillity(MODULE_XC, 0 , TRUE);
8421*53ee8cc1Swenshuai.xi     }
8422*53ee8cc1Swenshuai.xi     if (u32OperationMode == 1)
8423*53ee8cc1Swenshuai.xi     {
8424*53ee8cc1Swenshuai.xi         MDrv_Seal_SecureSlaveSet(E_SEAL_SC0_PROT_NONPM, TRUE);
8425*53ee8cc1Swenshuai.xi         MDrv_Seal_BufferLock(E_SEAL_SC_WP_SCM_M, TRUE);
8426*53ee8cc1Swenshuai.xi     }
8427*53ee8cc1Swenshuai.xi     else if (u32OperationMode == 0)
8428*53ee8cc1Swenshuai.xi     {
8429*53ee8cc1Swenshuai.xi         MDrv_Seal_SecureSlaveSet(E_SEAL_SC0_PROT_NONPM, FALSE);
8430*53ee8cc1Swenshuai.xi         MDrv_Seal_BufferLock(E_SEAL_SC_WP_SCM_M, FALSE);
8431*53ee8cc1Swenshuai.xi     }
8432*53ee8cc1Swenshuai.xi     pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].isEnable=u32OperationMode; //Update OPtee status for tee side
8433*53ee8cc1Swenshuai.xi     #endif
8434*53ee8cc1Swenshuai.xi     return TRUE;
8435*53ee8cc1Swenshuai.xi 
8436*53ee8cc1Swenshuai.xi }
Hal_SC_update_to_shm(void * pInstance,SCALER_WIN eWindow)8437*53ee8cc1Swenshuai.xi void Hal_SC_update_to_shm(void *pInstance, SCALER_WIN eWindow)
8438*53ee8cc1Swenshuai.xi {
8439*53ee8cc1Swenshuai.xi     XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
8440*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
8441*53ee8cc1Swenshuai.xi     XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
8442*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
8443*53ee8cc1Swenshuai.xi     if (eWindow == MAIN_WINDOW)
8444*53ee8cc1Swenshuai.xi     {
8445*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK0D_38_L, (BIT(0) | BIT(4)), (BIT(0) | BIT(4)));
8446*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK12_08_L, ((pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[0].address/BYTE_PER_WORD) & 0xFFFF), 0xFFFF);
8447*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK12_09_L, ((pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[0].address/BYTE_PER_WORD) >> 16), 0xFFFF);
8448*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK12_1C_L, 0x0000, 0xFFFF);
8449*53ee8cc1Swenshuai.xi     }
8450*53ee8cc1Swenshuai.xi     else if (eWindow == SUB_WINDOW)
8451*53ee8cc1Swenshuai.xi     {
8452*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK0D_38_L, (BIT(1) | BIT(6)), (BIT(1) | BIT(6)));
8453*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK12_48_L, ((pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[0].address/BYTE_PER_WORD) & 0xFFFF), 0xFFFF);
8454*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK12_49_L, ((pXCResourcePrivate->sthal_Optee.op_tee_xc[eWindow].drams_data[0].address/BYTE_PER_WORD) >> 16), 0xFFFF);
8455*53ee8cc1Swenshuai.xi         Hal_SC_add_reg_to_shm(pInstance, eWindow, REG_SC_BK12_5C_L, 0x0000, 0xFFFF);
8456*53ee8cc1Swenshuai.xi     }
8457*53ee8cc1Swenshuai.xi }
8458*53ee8cc1Swenshuai.xi 
8459*53ee8cc1Swenshuai.xi #ifdef UFO_XC_SUPPORT_2STEP_SCALING
MHal_XC_CheckHwSupport2StepScaling(void)8460*53ee8cc1Swenshuai.xi MS_BOOL MHal_XC_CheckHwSupport2StepScaling(void)
8461*53ee8cc1Swenshuai.xi {
8462*53ee8cc1Swenshuai.xi     return TRUE;
8463*53ee8cc1Swenshuai.xi }
8464*53ee8cc1Swenshuai.xi #endif
8465*53ee8cc1Swenshuai.xi 
8466*53ee8cc1Swenshuai.xi #undef  MHAL_SC_C
8467