xref: /utopia/UTPA2-700.0.x/modules/security/hal/M7821/aesdma/halAESDMA.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) 2006-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 ////////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi // file   halAESDMA.c
97*53ee8cc1Swenshuai.xi // @brief  AESDMA HAL
98*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
99*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi #include "MsCommon.h"
102*53ee8cc1Swenshuai.xi #include "regAESDMA.h"
103*53ee8cc1Swenshuai.xi #include "halAESDMA.h"
104*53ee8cc1Swenshuai.xi #include "halCHIP.h"
105*53ee8cc1Swenshuai.xi #include "drvAESDMA.h"
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
109*53ee8cc1Swenshuai.xi //  Driver Compiler Option
110*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
113*53ee8cc1Swenshuai.xi //  Type and Struct
114*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
115*53ee8cc1Swenshuai.xi typedef struct
116*53ee8cc1Swenshuai.xi {
117*53ee8cc1Swenshuai.xi     MS_U32 Dma_Ctrl[19];
118*53ee8cc1Swenshuai.xi     MS_U32 Secure_dma3_ctrl;
119*53ee8cc1Swenshuai.xi     MS_U32 Parser_Pid1;
120*53ee8cc1Swenshuai.xi     MS_U32 Parser_Ctrl;
121*53ee8cc1Swenshuai.xi     MS_U32 Kslot_Index;
122*53ee8cc1Swenshuai.xi } AESDMA_REGISTER_BACKUP ;
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi static AESDMA_REGISTER_BACKUP _gAESDMARegisterBackup;
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
128*53ee8cc1Swenshuai.xi //  TSP Hardware Abstraction Layer
129*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
130*53ee8cc1Swenshuai.xi static MS_VIRT                _u32RegBase = NULL;
131*53ee8cc1Swenshuai.xi static MS_VIRT                _u32PmRegBase = NULL;
132*53ee8cc1Swenshuai.xi static MS_U32                 SECUREBASECtrl_Buffer;
133*53ee8cc1Swenshuai.xi static REG_AESDMACtrl        *_AESDMACtrl = (REG_AESDMACtrl*)REG_AESDMACTRL_BASE;
134*53ee8cc1Swenshuai.xi static REG_SHARNGCtrl        *_SHARNGCtrl = (REG_SHARNGCtrl*)REG_SHARNGCTRL_BASE;
135*53ee8cc1Swenshuai.xi static REG_AESDMAClk         *_AESDMAClk  = (REG_AESDMAClk*)REG_AESDMACLK_BASE;
136*53ee8cc1Swenshuai.xi static REG_AESDMAMbx         *_AESDMAMbx  = (REG_AESDMAMbx*)REG_AESDMAMBX_BASE;
137*53ee8cc1Swenshuai.xi static REG_PARSERCtrl        *_PARSERCtrl = (REG_PARSERCtrl*)REG_PARSERCTRL_BASE;
138*53ee8cc1Swenshuai.xi static REG_CIPHERCtrl        *_CIPHERCtrl = (REG_CIPHERCtrl*)REG_CIPHERCTRL_BASE;
139*53ee8cc1Swenshuai.xi static REG_DMASECURECtrl     *_DMASECURECtrl = (REG_DMASECURECtrl*)REG_DMASECURE_BASE;
140*53ee8cc1Swenshuai.xi static REG_SECUREBASECtrl    *_SECUREBASECtrl = (REG_SECUREBASECtrl*)REG_DMASECURE_CTRL_BASE;
141*53ee8cc1Swenshuai.xi static REG_AESDMACtrlEx      *_AESDMACtrlEx = (REG_AESDMACtrlEx*)REG_AESDMAEXT_BASE;
142*53ee8cc1Swenshuai.xi static REG_TZPCCtrl          *_TZPCCtrl = (REG_TZPCCtrl*)REG_TZPC_NONPM_BASE;
143*53ee8cc1Swenshuai.xi static REG_HDCP22Data        *_HDCP22Data = (REG_HDCP22Data*)REG_HDCP22_BASE;
144*53ee8cc1Swenshuai.xi static REG_HDCP22SEKCtrl     *_HDCP22SekCtrl = (REG_HDCP22SEKCtrl*)REG_HDCP22_SEK;
145*53ee8cc1Swenshuai.xi static REG_HDCP14SEKCtrl     *_HDCP14SekCtrl = (REG_HDCP14SEKCtrl*)REG_HDCP14_BASE;
146*53ee8cc1Swenshuai.xi static REG_ANAMISCBASECtrl   *_ANAMISCCtrl = (REG_ANAMISCBASECtrl*)REG_ANA_MISC_BASE;
147*53ee8cc1Swenshuai.xi static REG_AES_DSCMB6Ctrl    *_AESDSCMB6Ctrl = (REG_AES_DSCMB6Ctrl*)REG_AES_DSCMB6_BASE;
148*53ee8cc1Swenshuai.xi static REG_AES_DSCMB7Ctrl    *_AESDSCMB7Ctrl = (REG_AES_DSCMB7Ctrl*)REG_AES_DSCMB7_BASE;
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi #define REG32_W(reg, value)     do {    \
151*53ee8cc1Swenshuai.xi                                     (reg)->H = ((value) >> 16); \
152*53ee8cc1Swenshuai.xi                                     (reg)->L = ((value) & 0x0000FFFF);  \
153*53ee8cc1Swenshuai.xi                                 } while(0)
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
156*53ee8cc1Swenshuai.xi //  Macro of bit operations
157*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
158*53ee8cc1Swenshuai.xi 
_AESDMA_REG32_R(REG32 * reg)159*53ee8cc1Swenshuai.xi MS_U32 _AESDMA_REG32_R(REG32 *reg)
160*53ee8cc1Swenshuai.xi {
161*53ee8cc1Swenshuai.xi     MS_U32     value;
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi     value = (reg)->H << 16;
164*53ee8cc1Swenshuai.xi     value |= (reg)->L;
165*53ee8cc1Swenshuai.xi 
166*53ee8cc1Swenshuai.xi     return value;
167*53ee8cc1Swenshuai.xi }
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
170*53ee8cc1Swenshuai.xi //  Inline Function
171*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_AESDMA_SetBank(MS_VIRT u32NonPmBankAddr,MS_VIRT u32PmBankAddr)172*53ee8cc1Swenshuai.xi void HAL_AESDMA_SetBank(MS_VIRT u32NonPmBankAddr, MS_VIRT u32PmBankAddr)
173*53ee8cc1Swenshuai.xi {
174*53ee8cc1Swenshuai.xi     _u32RegBase = u32NonPmBankAddr;
175*53ee8cc1Swenshuai.xi     _u32PmRegBase = u32PmBankAddr;
176*53ee8cc1Swenshuai.xi     _AESDMACtrl = (REG_AESDMACtrl*)(_u32RegBase + REG_AESDMACTRL_BASE);
177*53ee8cc1Swenshuai.xi     _SHARNGCtrl = (REG_SHARNGCtrl*)(_u32RegBase + REG_SHARNGCTRL_BASE);
178*53ee8cc1Swenshuai.xi     _AESDMAClk = (REG_AESDMAClk*)(_u32RegBase + REG_AESDMACLK_BASE);
179*53ee8cc1Swenshuai.xi     _AESDMAMbx = (REG_AESDMAMbx*)(_u32PmRegBase + REG_AESDMAMBX_BASE);
180*53ee8cc1Swenshuai.xi     _PARSERCtrl = (REG_PARSERCtrl*)(_u32RegBase + REG_PARSERCTRL_BASE);
181*53ee8cc1Swenshuai.xi     _CIPHERCtrl = (REG_CIPHERCtrl*)(_u32RegBase + REG_CIPHERCTRL_BASE);
182*53ee8cc1Swenshuai.xi     _DMASECURECtrl = (REG_DMASECURECtrl*)(_u32RegBase + REG_DMASECURE_BASE);
183*53ee8cc1Swenshuai.xi     _SECUREBASECtrl = (REG_SECUREBASECtrl*)(_u32RegBase + REG_DMASECURE_CTRL_BASE);
184*53ee8cc1Swenshuai.xi     _AESDMACtrlEx = (REG_AESDMACtrlEx*)(_u32RegBase + REG_AESDMAEXT_BASE);
185*53ee8cc1Swenshuai.xi     _TZPCCtrl = (REG_TZPCCtrl*)(_u32RegBase + REG_TZPC_NONPM_BASE);
186*53ee8cc1Swenshuai.xi     _HDCP22Data = (REG_HDCP22Data*)(_u32RegBase + REG_HDCP22_BASE);
187*53ee8cc1Swenshuai.xi     _HDCP22SekCtrl = (REG_HDCP22SEKCtrl*)(_u32RegBase + REG_HDCP22_SEK);
188*53ee8cc1Swenshuai.xi     _HDCP14SekCtrl = (REG_HDCP14SEKCtrl*)(_u32RegBase + REG_HDCP14_BASE);
189*53ee8cc1Swenshuai.xi     _ANAMISCCtrl = (REG_ANAMISCBASECtrl*)(_u32RegBase + REG_ANA_MISC_BASE);
190*53ee8cc1Swenshuai.xi     _AESDSCMB6Ctrl = (REG_AES_DSCMB6Ctrl*)(_u32RegBase + REG_AES_DSCMB6_BASE);
191*53ee8cc1Swenshuai.xi     _AESDSCMB7Ctrl = (REG_AES_DSCMB7Ctrl*)(_u32RegBase + REG_AES_DSCMB7_BASE);
192*53ee8cc1Swenshuai.xi }
193*53ee8cc1Swenshuai.xi 
AESDMA_GetMIU1Base(void)194*53ee8cc1Swenshuai.xi MS_PHY AESDMA_GetMIU1Base(void)
195*53ee8cc1Swenshuai.xi {
196*53ee8cc1Swenshuai.xi     return HAL_MIU1_BASE;
197*53ee8cc1Swenshuai.xi }
198*53ee8cc1Swenshuai.xi 
AESDMA_GetMIU2Base(void)199*53ee8cc1Swenshuai.xi MS_PHY AESDMA_GetMIU2Base(void)
200*53ee8cc1Swenshuai.xi {
201*53ee8cc1Swenshuai.xi     //not support
202*53ee8cc1Swenshuai.xi     return FALSE;
203*53ee8cc1Swenshuai.xi }
204*53ee8cc1Swenshuai.xi 
AESDMA_Reset(void)205*53ee8cc1Swenshuai.xi void AESDMA_Reset(void)
206*53ee8cc1Swenshuai.xi {
207*53ee8cc1Swenshuai.xi     AESDMA_NormalReset ();
208*53ee8cc1Swenshuai.xi #if 0
209*53ee8cc1Swenshuai.xi     MS_VIRT Reg_AESDMA;
210*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
211*53ee8cc1Swenshuai.xi     Reg_AESDMA = (MS_VIRT)(&_AESDMACtrl[0].Dma_Ctrl);
212*53ee8cc1Swenshuai.xi 
213*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , 0x00000000); // clear ctrl register
214*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|(AESDMA_CTRL_SW_RST)); // sw rst
215*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)&~(AESDMA_CTRL_SW_RST));
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi     // reset all AESdma register
218*53ee8cc1Swenshuai.xi     for (i = 0 ; i < 19 ; i++)
219*53ee8cc1Swenshuai.xi     {
220*53ee8cc1Swenshuai.xi         REG32_W((REG32 *)(Reg_AESDMA+(i*8)), 0x00000000);
221*53ee8cc1Swenshuai.xi     }
222*53ee8cc1Swenshuai.xi     // reset secure_dma3_ctrl register
223*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl), 0x00000000);
224*53ee8cc1Swenshuai.xi 
225*53ee8cc1Swenshuai.xi     // reset hw_parser_ctrl register
226*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Pid1),0x00000000);
227*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Ctrl),0x00000000);
228*53ee8cc1Swenshuai.xi #endif
229*53ee8cc1Swenshuai.xi }
230*53ee8cc1Swenshuai.xi 
AESDMA_Set_CipherKey(MS_U32 * cipherkey)231*53ee8cc1Swenshuai.xi void AESDMA_Set_CipherKey(MS_U32 *cipherkey)
232*53ee8cc1Swenshuai.xi {
233*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_CipherKey_L.Key_L) , cipherkey[0]);
234*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_CipherKey_L.Key_H) , cipherkey[1]);
235*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_CipherKey_H.Key_L) , cipherkey[2]);
236*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_CipherKey_H.Key_H) , cipherkey[3]);
237*53ee8cc1Swenshuai.xi }
238*53ee8cc1Swenshuai.xi 
AESDMA_Set_InitVector(MS_U32 * pInitVector)239*53ee8cc1Swenshuai.xi void AESDMA_Set_InitVector(MS_U32 *pInitVector)
240*53ee8cc1Swenshuai.xi {
241*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_InitVector_L.IV_L), pInitVector[0]);
242*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_InitVector_L.IV_H), pInitVector[1]);
243*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_InitVector_H.IV_L), pInitVector[2]);
244*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_InitVector_H.IV_H), pInitVector[3]);
245*53ee8cc1Swenshuai.xi }
246*53ee8cc1Swenshuai.xi 
AESDMA_Sel_Key(MS_BOOL keysel)247*53ee8cc1Swenshuai.xi void AESDMA_Sel_Key(MS_BOOL keysel)
248*53ee8cc1Swenshuai.xi {
249*53ee8cc1Swenshuai.xi }
250*53ee8cc1Swenshuai.xi 
AESDMA_Sel_SecureKey(void)251*53ee8cc1Swenshuai.xi void AESDMA_Sel_SecureKey(void)
252*53ee8cc1Swenshuai.xi {
253*53ee8cc1Swenshuai.xi     MS_U32 u32Ctrl = _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2);
254*53ee8cc1Swenshuai.xi     u32Ctrl |= AESDMA_USE_SECRET_KEY;
255*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), u32Ctrl);
256*53ee8cc1Swenshuai.xi }
257*53ee8cc1Swenshuai.xi 
AESDMA_Set_FileinDesc(MS_PHY FileinAddr,MS_PHY FileinNum)258*53ee8cc1Swenshuai.xi void AESDMA_Set_FileinDesc(MS_PHY FileinAddr , MS_PHY FileinNum)
259*53ee8cc1Swenshuai.xi {
260*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Filein_Addr), FileinAddr);
261*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Filein_Num), FileinNum);
262*53ee8cc1Swenshuai.xi }
263*53ee8cc1Swenshuai.xi 
AESDMA_Set_FileoutDesc(MS_PHY FileoutSAddr,MS_PHY FileoutEAddr)264*53ee8cc1Swenshuai.xi void AESDMA_Set_FileoutDesc(MS_PHY FileoutSAddr , MS_PHY FileoutEAddr)
265*53ee8cc1Swenshuai.xi {
266*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Fileout_SAddr), FileoutSAddr);
267*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Fileout_EAddr), FileoutEAddr);
268*53ee8cc1Swenshuai.xi }
269*53ee8cc1Swenshuai.xi 
AESDMA_Start(MS_BOOL AESDMAStart)270*53ee8cc1Swenshuai.xi void AESDMA_Start(MS_BOOL AESDMAStart)
271*53ee8cc1Swenshuai.xi {
272*53ee8cc1Swenshuai.xi     if (AESDMAStart)
273*53ee8cc1Swenshuai.xi     {
274*53ee8cc1Swenshuai.xi         REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) &~ AESDMA_CTRL_FILEOUT_START &~ AESDMA_CTRL_FILEIN_START));
275*53ee8cc1Swenshuai.xi         REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) | AESDMA_CTRL_FILEOUT_START | AESDMA_CTRL_FILEIN_START));
276*53ee8cc1Swenshuai.xi     }
277*53ee8cc1Swenshuai.xi     else
278*53ee8cc1Swenshuai.xi     {
279*53ee8cc1Swenshuai.xi         REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)&~(AESDMA_CTRL_FILEOUT_START|AESDMA_CTRL_FILEIN_START));
280*53ee8cc1Swenshuai.xi     }
281*53ee8cc1Swenshuai.xi }
282*53ee8cc1Swenshuai.xi 
AESDMA_Set_PS_PTN(MS_U32 MatchPTN)283*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_PTN(MS_U32 MatchPTN)
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_PS_Pattern) , MatchPTN);
286*53ee8cc1Swenshuai.xi }
287*53ee8cc1Swenshuai.xi 
AESDMA_Set_PS_Mask(MS_U32 MatchMask)288*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_Mask(MS_U32 MatchMask)
289*53ee8cc1Swenshuai.xi {
290*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_PS_Pattern_Mask) , MatchMask);
291*53ee8cc1Swenshuai.xi }
292*53ee8cc1Swenshuai.xi 
AESDMA_Set_PS_ENG(MS_BOOL PSin_en,MS_BOOL PSout_en)293*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_ENG(MS_BOOL PSin_en, MS_BOOL PSout_en)
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi     MS_U32 u32PSin, u32PSout;
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi     u32PSin  = AESDMA_ENG_PS_IN_EN & (PSin_en<<20);
298*53ee8cc1Swenshuai.xi     u32PSout = AESDMA_ENG_PS_OUT_EN & (PSout_en<<21);
299*53ee8cc1Swenshuai.xi 
300*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|(u32PSin|u32PSout));
301*53ee8cc1Swenshuai.xi }
302*53ee8cc1Swenshuai.xi 
AESDMA_Get_PS_MatchedBytecnt(void)303*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_PS_MatchedBytecnt(void)
304*53ee8cc1Swenshuai.xi {
305*53ee8cc1Swenshuai.xi     return _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Matched_Btyecnt);
306*53ee8cc1Swenshuai.xi }
307*53ee8cc1Swenshuai.xi 
AESDMA_Get_PS_MatchedPTN(void)308*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_PS_MatchedPTN(void)
309*53ee8cc1Swenshuai.xi {
310*53ee8cc1Swenshuai.xi     return _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Matched_Pat);
311*53ee8cc1Swenshuai.xi }
312*53ee8cc1Swenshuai.xi 
AESDMA_Set_PS_Release(void)313*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_Release(void)
314*53ee8cc1Swenshuai.xi {
315*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|AESDMA_ENG_PS_RELEASE);
316*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) & ~AESDMA_ENG_PS_RELEASE);
317*53ee8cc1Swenshuai.xi }
318*53ee8cc1Swenshuai.xi 
AESDMA_Get_AESDMA_Status(void)319*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_AESDMA_Status(void)
320*53ee8cc1Swenshuai.xi {
321*53ee8cc1Swenshuai.xi     return _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_PVR_Status);
322*53ee8cc1Swenshuai.xi }
323*53ee8cc1Swenshuai.xi 
AESDMA_Get_AESDMA_IsFinished(void)324*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_AESDMA_IsFinished(void)
325*53ee8cc1Swenshuai.xi {
326*53ee8cc1Swenshuai.xi     return (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_PVR_Status) & AESDMA_IS_FINISHED);
327*53ee8cc1Swenshuai.xi }
328*53ee8cc1Swenshuai.xi 
AESDMA_Set_CIPHER_ENG(AESDMA_CipherMode eMode,MS_BOOL Descrypt)329*53ee8cc1Swenshuai.xi void AESDMA_Set_CIPHER_ENG(AESDMA_CipherMode eMode, MS_BOOL Descrypt)
330*53ee8cc1Swenshuai.xi {
331*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
332*53ee8cc1Swenshuai.xi 
333*53ee8cc1Swenshuai.xi     switch (eMode)
334*53ee8cc1Swenshuai.xi     {
335*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_ECB:
336*53ee8cc1Swenshuai.xi         u32Cmd |= AESDMA_ENG_AES_EN;
337*53ee8cc1Swenshuai.xi         break;
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CTR:
340*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CTR_MODE);
341*53ee8cc1Swenshuai.xi         break;
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CBC:
344*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CBC_MODE);
345*53ee8cc1Swenshuai.xi         break;
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_ECB:
348*53ee8cc1Swenshuai.xi         u32Cmd |= AESDMA_ENG_DES_EN;
349*53ee8cc1Swenshuai.xi         break;
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CTR:
352*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CTR_MODE);
353*53ee8cc1Swenshuai.xi         break;
354*53ee8cc1Swenshuai.xi 
355*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CBC:
356*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CBC_MODE);
357*53ee8cc1Swenshuai.xi         break;
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_ECB:
360*53ee8cc1Swenshuai.xi         u32Cmd |= AESDMA_ENG_TDES_EN;
361*53ee8cc1Swenshuai.xi         break;
362*53ee8cc1Swenshuai.xi 
363*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CTR:
364*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CTR_MODE);
365*53ee8cc1Swenshuai.xi         break;
366*53ee8cc1Swenshuai.xi 
367*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CBC:
368*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CBC_MODE);
369*53ee8cc1Swenshuai.xi         break;
370*53ee8cc1Swenshuai.xi 
371*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CTS_CBC:
372*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CTS_CBC_MODE);
373*53ee8cc1Swenshuai.xi         break;
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CTS_ECB:
376*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CTS_ECB_MODE);
377*53ee8cc1Swenshuai.xi         break;
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CTS_CBC:
380*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CTS_CBC_MODE);
381*53ee8cc1Swenshuai.xi         break;
382*53ee8cc1Swenshuai.xi 
383*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CTS_ECB:
384*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CTS_ECB_MODE);
385*53ee8cc1Swenshuai.xi         break;
386*53ee8cc1Swenshuai.xi 
387*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CTS_CBC:
388*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CTS_CBC_MODE);
389*53ee8cc1Swenshuai.xi         break;
390*53ee8cc1Swenshuai.xi 
391*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CTS_ECB:
392*53ee8cc1Swenshuai.xi         u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CTS_ECB_MODE);
393*53ee8cc1Swenshuai.xi         break;
394*53ee8cc1Swenshuai.xi     default:
395*53ee8cc1Swenshuai.xi         return;
396*53ee8cc1Swenshuai.xi     }
397*53ee8cc1Swenshuai.xi 
398*53ee8cc1Swenshuai.xi 	if( eMode >= E_AESDMA_CIPHER_DES_ECB )
399*53ee8cc1Swenshuai.xi 		REG32_W((&_AESDMACtrl[0].Dma_Ctrl2),_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2) | AESDMA_DMA_USE_TDES_EN);
400*53ee8cc1Swenshuai.xi 
401*53ee8cc1Swenshuai.xi     u32Cmd |= AESDMA_ENG_DESCRYPT & (Descrypt<<25);
402*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl),(( _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) & (~DmaCtrlSet)) | u32Cmd ) );
403*53ee8cc1Swenshuai.xi }
404*53ee8cc1Swenshuai.xi 
AESDMA_QueryCipherMode(AESDMA_CipherMode eMode)405*53ee8cc1Swenshuai.xi MS_U32 AESDMA_QueryCipherMode(AESDMA_CipherMode eMode)
406*53ee8cc1Swenshuai.xi {
407*53ee8cc1Swenshuai.xi     MS_U32 u32Result = 1;
408*53ee8cc1Swenshuai.xi 
409*53ee8cc1Swenshuai.xi     switch (eMode)
410*53ee8cc1Swenshuai.xi     {
411*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_ECB:
412*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CTR:
413*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CBC:
414*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_ECB:
415*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CTR:
416*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CBC:
417*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_ECB:
418*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CTR:
419*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CBC:
420*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CTS_CBC:
421*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_CTS_ECB:
422*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CTS_CBC:
423*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_DES_CTS_ECB:
424*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CTS_CBC:
425*53ee8cc1Swenshuai.xi     case E_AESDMA_CIPHER_TDES_CTS_ECB:
426*53ee8cc1Swenshuai.xi         u32Result = 0;
427*53ee8cc1Swenshuai.xi         break;
428*53ee8cc1Swenshuai.xi     default:
429*53ee8cc1Swenshuai.xi         break;
430*53ee8cc1Swenshuai.xi     }
431*53ee8cc1Swenshuai.xi     return u32Result;
432*53ee8cc1Swenshuai.xi 
433*53ee8cc1Swenshuai.xi }
434*53ee8cc1Swenshuai.xi 
AESDMA_Set_MIU_Path(MS_BOOL MIU_R,MS_BOOL MIU_W)435*53ee8cc1Swenshuai.xi void AESDMA_Set_MIU_Path(MS_BOOL MIU_R, MS_BOOL MIU_W)
436*53ee8cc1Swenshuai.xi {
437*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), RESET_FLAG1(_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2), AESDMA_CTRL_BANK_R));
438*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), RESET_FLAG1(_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2), AESDMA_CTRL_BANK_W));
439*53ee8cc1Swenshuai.xi 
440*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), SET_FLAG1(_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2), (AESDMA_CTRL_BANK_R & ((MS_U32)MIU_R << 4))));
441*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), SET_FLAG1(_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2), (AESDMA_CTRL_BANK_W & ((MS_U32)MIU_W << 5))));
442*53ee8cc1Swenshuai.xi }
443*53ee8cc1Swenshuai.xi 
AESDMA_Set_MIU2_Path(MS_BOOL MIU_R,MS_BOOL MIU_W)444*53ee8cc1Swenshuai.xi void AESDMA_Set_MIU2_Path(MS_BOOL MIU_R, MS_BOOL MIU_W)
445*53ee8cc1Swenshuai.xi {
446*53ee8cc1Swenshuai.xi     // Not support
447*53ee8cc1Swenshuai.xi }
448*53ee8cc1Swenshuai.xi 
AESDMA_Enable_Int(void)449*53ee8cc1Swenshuai.xi void AESDMA_Enable_Int(void)
450*53ee8cc1Swenshuai.xi {
451*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl2) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2)|AESDMA_INT_EN);
452*53ee8cc1Swenshuai.xi }
453*53ee8cc1Swenshuai.xi 
AESDMA_Disable_Int(void)454*53ee8cc1Swenshuai.xi void AESDMA_Disable_Int(void)
455*53ee8cc1Swenshuai.xi {
456*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl2) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2)&~AESDMA_INT_EN);
457*53ee8cc1Swenshuai.xi }
458*53ee8cc1Swenshuai.xi 
AESDMA_Clear_Int(void)459*53ee8cc1Swenshuai.xi void AESDMA_Clear_Int(void)
460*53ee8cc1Swenshuai.xi {
461*53ee8cc1Swenshuai.xi     //
462*53ee8cc1Swenshuai.xi     // Since ISR Clear bit for Normal and Secured bank is independently, it must be reset individually
463*53ee8cc1Swenshuai.xi     //
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
466*53ee8cc1Swenshuai.xi     //
467*53ee8cc1Swenshuai.xi     // For Secured Bank
468*53ee8cc1Swenshuai.xi     //
469*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB6Ctrl[0].Reg0001) , _AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001)|AESDMA_ISR_CLR);
470*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB6Ctrl[0].Reg0001) , _AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001)&~AESDMA_ISR_CLR);
471*53ee8cc1Swenshuai.xi #else
472*53ee8cc1Swenshuai.xi     //
473*53ee8cc1Swenshuai.xi     // For Normal Bank
474*53ee8cc1Swenshuai.xi     //
475*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB7Ctrl[0].Reg0001) , _AESDMA_REG32_R(&_AESDSCMB7Ctrl[0].Reg0001)|AESDMA_ISR_CLR);
476*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB7Ctrl[0].Reg0001) , _AESDMA_REG32_R(&_AESDSCMB7Ctrl[0].Reg0001)&~AESDMA_ISR_CLR);
477*53ee8cc1Swenshuai.xi #endif  //#if AESDMS_SECURED_BANK_EN
478*53ee8cc1Swenshuai.xi }
479*53ee8cc1Swenshuai.xi 
AESDMA_HW_Patch(void)480*53ee8cc1Swenshuai.xi void AESDMA_HW_Patch(void)
481*53ee8cc1Swenshuai.xi {
482*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|AESDMA_ECO_FIX_LAST_BYTE);
483*53ee8cc1Swenshuai.xi     //REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|AESDMA_CTRL_BURST_LENGTH);
484*53ee8cc1Swenshuai.xi     //REG32_W((&_AESDMACtrl[0].Dma_Eng3_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Eng3_Ctrl)|AESDMA_ENG_SPEEDUP);
485*53ee8cc1Swenshuai.xi }
486*53ee8cc1Swenshuai.xi 
AESDMA_Enable_Clk(void)487*53ee8cc1Swenshuai.xi void AESDMA_Enable_Clk(void)
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi     MS_U32 u32Val;
490*53ee8cc1Swenshuai.xi 
491*53ee8cc1Swenshuai.xi     //1. clk_aesdma, 0x100A_19[3:0] = 0
492*53ee8cc1Swenshuai.xi     u32Val = _AESDMA_REG32_R(&_AESDMAClk[0].Reg_Gate_Clk_AESDMA);
493*53ee8cc1Swenshuai.xi     u32Val &= ~AESDMA_CLK_XTAL;  //Clear Clk setting.
494*53ee8cc1Swenshuai.xi     u32Val |= AESDMA_CLK_288M;   //Set Clk to 288M
495*53ee8cc1Swenshuai.xi     u32Val &= ~AESDMA_CLK_OFF_EN;//Enable Clk
496*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMAClk[0].Reg_Gate_Clk_AESDMA) , u32Val);
497*53ee8cc1Swenshuai.xi 
498*53ee8cc1Swenshuai.xi }
499*53ee8cc1Swenshuai.xi 
AESDMA_Disable_Clk(void)500*53ee8cc1Swenshuai.xi void AESDMA_Disable_Clk(void)
501*53ee8cc1Swenshuai.xi {
502*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMAClk[0].Reg_Gate_Clk_AESDMA) , _AESDMA_REG32_R(&_AESDMAClk[0].Reg_Gate_Clk_AESDMA) | AESDMA_CLK_OFF_EN);
503*53ee8cc1Swenshuai.xi }
504*53ee8cc1Swenshuai.xi 
AESDMA_Rand(void)505*53ee8cc1Swenshuai.xi MS_U8 AESDMA_Rand(void)
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi    MS_U8 u8RN = 0x00;
508*53ee8cc1Swenshuai.xi    u8RN = (MS_U8)_AESDMA_REG32_R(&_SECUREBASECtrl[0].Reg0203)&0xFF;
509*53ee8cc1Swenshuai.xi 
510*53ee8cc1Swenshuai.xi    return u8RN;
511*53ee8cc1Swenshuai.xi }
512*53ee8cc1Swenshuai.xi 
SHA_Reset(void)513*53ee8cc1Swenshuai.xi void SHA_Reset(void)
514*53ee8cc1Swenshuai.xi {
515*53ee8cc1Swenshuai.xi     MS_VIRT Reg_SHARNG;
516*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
517*53ee8cc1Swenshuai.xi     Reg_SHARNG = (MS_VIRT)(&_SHARNGCtrl[0].Sha_Ctrl);
518*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , SHARNG_CTRL_SHA_RST); // 0->1
519*53ee8cc1Swenshuai.xi 	REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , (_AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&(~SHARNG_CTRL_SHA_RST))); // 1->0
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi 	// reset all SHA & RNG register
522*53ee8cc1Swenshuai.xi     for (i = 0 ; i < 7 ; i++)
523*53ee8cc1Swenshuai.xi     {
524*53ee8cc1Swenshuai.xi         REG32_W((REG32 *)(Reg_SHARNG+(i*8)), 0x00000000);
525*53ee8cc1Swenshuai.xi     }
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi 
SHA_Get_Status(void)528*53ee8cc1Swenshuai.xi MS_U32 SHA_Get_Status(void)
529*53ee8cc1Swenshuai.xi {
530*53ee8cc1Swenshuai.xi     return _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Status);
531*53ee8cc1Swenshuai.xi }
532*53ee8cc1Swenshuai.xi 
SHA_SelMode(AESDMA_SHAMode eMode)533*53ee8cc1Swenshuai.xi void SHA_SelMode(AESDMA_SHAMode eMode)
534*53ee8cc1Swenshuai.xi {
535*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
536*53ee8cc1Swenshuai.xi 
537*53ee8cc1Swenshuai.xi     switch (eMode)
538*53ee8cc1Swenshuai.xi     {
539*53ee8cc1Swenshuai.xi     case E_AESDMA_SHA1:
540*53ee8cc1Swenshuai.xi         u32Cmd |= (SHARNG_CTRL_SHA_MSG_BLOCK_NUM);
541*53ee8cc1Swenshuai.xi         break;
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi     case E_AESDMA_SHA256:
544*53ee8cc1Swenshuai.xi         u32Cmd |= (SHARNG_CTRL_SHA_SEL_SHA256 | SHARNG_CTRL_SHA_MSG_BLOCK_NUM);
545*53ee8cc1Swenshuai.xi         break;
546*53ee8cc1Swenshuai.xi 
547*53ee8cc1Swenshuai.xi     default:
548*53ee8cc1Swenshuai.xi         return;
549*53ee8cc1Swenshuai.xi     }
550*53ee8cc1Swenshuai.xi 
551*53ee8cc1Swenshuai.xi     //Turn off speedup mode
552*53ee8cc1Swenshuai.xi     //u32Cmd |= SHARNG_CTRL_SPEED_MODE_N;
553*53ee8cc1Swenshuai.xi 
554*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Sha_Ctrl), _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl) | u32Cmd);
555*53ee8cc1Swenshuai.xi }
556*53ee8cc1Swenshuai.xi 
SHA_SetAddress(MS_PHY u32Addr)557*53ee8cc1Swenshuai.xi void SHA_SetAddress(MS_PHY u32Addr)
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Sha_Start), u32Addr);
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi 
SHA_SetLength(MS_U32 u32Size)562*53ee8cc1Swenshuai.xi void SHA_SetLength(MS_U32 u32Size)
563*53ee8cc1Swenshuai.xi {
564*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Sha_Length), u32Size);
565*53ee8cc1Swenshuai.xi }
566*53ee8cc1Swenshuai.xi 
SHA_Start(MS_BOOL SHAStart)567*53ee8cc1Swenshuai.xi void SHA_Start(MS_BOOL SHAStart)
568*53ee8cc1Swenshuai.xi {
569*53ee8cc1Swenshuai.xi 	if(SHAStart)
570*53ee8cc1Swenshuai.xi 	{
571*53ee8cc1Swenshuai.xi 		REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&~(SHARNG_CTRL_SHA_FIRE_ONCE));
572*53ee8cc1Swenshuai.xi 		REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)|(SHARNG_CTRL_SHA_FIRE_ONCE));
573*53ee8cc1Swenshuai.xi 	}
574*53ee8cc1Swenshuai.xi 	else
575*53ee8cc1Swenshuai.xi 	{
576*53ee8cc1Swenshuai.xi 		REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&~(SHARNG_CTRL_SHA_FIRE_ONCE));
577*53ee8cc1Swenshuai.xi 	}
578*53ee8cc1Swenshuai.xi }
579*53ee8cc1Swenshuai.xi 
SHA_Out(MS_VIRT u32Buf)580*53ee8cc1Swenshuai.xi void SHA_Out(MS_VIRT u32Buf)
581*53ee8cc1Swenshuai.xi {
582*53ee8cc1Swenshuai.xi     MS_U32 Index, u32Size, u32offset;
583*53ee8cc1Swenshuai.xi     MS_U32 eMode = _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&SHARNG_CTRL_SHA_SEL_SHA256;
584*53ee8cc1Swenshuai.xi 
585*53ee8cc1Swenshuai.xi     if(eMode == SHARNG_CTRL_SHA_SEL_SHA256)
586*53ee8cc1Swenshuai.xi     {
587*53ee8cc1Swenshuai.xi         u32Size = DIGEST_SIZE_SHA256;
588*53ee8cc1Swenshuai.xi         u32offset = 0;
589*53ee8cc1Swenshuai.xi     }
590*53ee8cc1Swenshuai.xi     else
591*53ee8cc1Swenshuai.xi     {
592*53ee8cc1Swenshuai.xi         u32Size = DIGEST_SIZE_SHA1;
593*53ee8cc1Swenshuai.xi         u32offset = 3;
594*53ee8cc1Swenshuai.xi     }
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi     for( Index = 0; Index < u32Size; Index++ )
597*53ee8cc1Swenshuai.xi     {
598*53ee8cc1Swenshuai.xi         *((MS_U32 *)u32Buf + Index) = _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Out[Index + u32offset]);
599*53ee8cc1Swenshuai.xi     }
600*53ee8cc1Swenshuai.xi     //Set "1" to idle state after reg_read_sha_ready = 1
601*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)|(SHARNG_CTRL_SHA_CLR));
602*53ee8cc1Swenshuai.xi }
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi 
605*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
606*53ee8cc1Swenshuai.xi /// Enable mobf one way function
607*53ee8cc1Swenshuai.xi /// @param  NULL
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi /// @note : disable read mobf key, and could not enable read mobf key anymore
610*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_OneWay(void)611*53ee8cc1Swenshuai.xi void MOBF_OneWay(void)
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi 	REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)|(MOBF_ONEWAY_EN));
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi 
616*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
617*53ee8cc1Swenshuai.xi /// Set MOBF encrypt key
618*53ee8cc1Swenshuai.xi /// @param  u32WriteKey                \b IN: Encrypt Key
619*53ee8cc1Swenshuai.xi 
620*53ee8cc1Swenshuai.xi /// @note
621*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_WriteKey(MS_U32 u32WriteKey)622*53ee8cc1Swenshuai.xi void MOBF_WriteKey(MS_U32 u32WriteKey)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi 	REG32_W((&_SHARNGCtrl[0].MOBF_KeyW) , u32WriteKey);
625*53ee8cc1Swenshuai.xi }
626*53ee8cc1Swenshuai.xi 
627*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
628*53ee8cc1Swenshuai.xi /// Set MOBF decrypt key
629*53ee8cc1Swenshuai.xi /// @param  u32ReadKey                \b IN: Decrypt Key
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi /// @note
632*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_ReadKey(MS_U32 u32ReadKey)633*53ee8cc1Swenshuai.xi void MOBF_ReadKey(MS_U32 u32ReadKey)
634*53ee8cc1Swenshuai.xi {
635*53ee8cc1Swenshuai.xi 	REG32_W((&_SHARNGCtrl[0].MOBF_KeyR) , u32ReadKey);
636*53ee8cc1Swenshuai.xi }
637*53ee8cc1Swenshuai.xi 
638*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
639*53ee8cc1Swenshuai.xi /// Enable MOBF in MIU write port
640*53ee8cc1Swenshuai.xi /// @param  bEnable                \b IN: Enable/Disable
641*53ee8cc1Swenshuai.xi 
642*53ee8cc1Swenshuai.xi /// @note : MOBF Encrypt
643*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_WriteEnable(MS_BOOL bEnable)644*53ee8cc1Swenshuai.xi void MOBF_WriteEnable(MS_BOOL bEnable)
645*53ee8cc1Swenshuai.xi {
646*53ee8cc1Swenshuai.xi 	if(bEnable)
647*53ee8cc1Swenshuai.xi 	{
648*53ee8cc1Swenshuai.xi 		REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_WRITE_EN));
649*53ee8cc1Swenshuai.xi 	}
650*53ee8cc1Swenshuai.xi 	else
651*53ee8cc1Swenshuai.xi 	{
652*53ee8cc1Swenshuai.xi 		REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_WRITE_EN));
653*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)|(MOBF_IN_MIU_WRITE_EN));
654*53ee8cc1Swenshuai.xi 	}
655*53ee8cc1Swenshuai.xi }
656*53ee8cc1Swenshuai.xi 
657*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
658*53ee8cc1Swenshuai.xi /// Enable MOBF in MIU read port
659*53ee8cc1Swenshuai.xi /// @param  bEnable                \b IN: Enable/Disable
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi /// @note : MOBF Decrypt
662*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_ReadEnable(MS_BOOL bEnable)663*53ee8cc1Swenshuai.xi void MOBF_ReadEnable(MS_BOOL bEnable)
664*53ee8cc1Swenshuai.xi {
665*53ee8cc1Swenshuai.xi 	if(bEnable)
666*53ee8cc1Swenshuai.xi 	{
667*53ee8cc1Swenshuai.xi 		REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_READ_EN));
668*53ee8cc1Swenshuai.xi 	}
669*53ee8cc1Swenshuai.xi 	else
670*53ee8cc1Swenshuai.xi 	{
671*53ee8cc1Swenshuai.xi 		REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_READ_EN));
672*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)|(MOBF_IN_MIU_READ_EN));
673*53ee8cc1Swenshuai.xi 	}
674*53ee8cc1Swenshuai.xi }
675*53ee8cc1Swenshuai.xi 
676*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
677*53ee8cc1Swenshuai.xi /// Disable TDES
678*53ee8cc1Swenshuai.xi ///
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi /// @note : MOBF Decrypt
681*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_DisableTDES(void)682*53ee8cc1Swenshuai.xi void MOBF_DisableTDES(void)
683*53ee8cc1Swenshuai.xi {
684*53ee8cc1Swenshuai.xi 	REG32_W((&_AESDMACtrl[0].Dma_Ctrl2),_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2) & (~AESDMA_DMA_USE_TDES_EN));
685*53ee8cc1Swenshuai.xi }
686*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Set_Mode(AESDMA_ParserMode eMode)687*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_Mode(AESDMA_ParserMode eMode)
688*53ee8cc1Swenshuai.xi {
689*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
690*53ee8cc1Swenshuai.xi 
691*53ee8cc1Swenshuai.xi     switch (eMode)
692*53ee8cc1Swenshuai.xi     {
693*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_TS_PKT192:
694*53ee8cc1Swenshuai.xi         u32Cmd |= (TS_MODE | PKT192_MODE);
695*53ee8cc1Swenshuai.xi         break;
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_TS_PKT192_CLEAR:
698*53ee8cc1Swenshuai.xi         u32Cmd |= (TS_MODE | PKT192_MODE | CLEAR_MODE);
699*53ee8cc1Swenshuai.xi         break;
700*53ee8cc1Swenshuai.xi 
701*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_TS_PKT188:
702*53ee8cc1Swenshuai.xi         u32Cmd |= (TS_MODE);
703*53ee8cc1Swenshuai.xi         u32Cmd &= (~PKT192_MODE);
704*53ee8cc1Swenshuai.xi         break;
705*53ee8cc1Swenshuai.xi 
706*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_TS_PKT188_CLEAR:
707*53ee8cc1Swenshuai.xi         u32Cmd |= (TS_MODE | CLEAR_MODE);
708*53ee8cc1Swenshuai.xi         u32Cmd &= (~PKT192_MODE);
709*53ee8cc1Swenshuai.xi         break;
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_HDCP20_PKT192:
712*53ee8cc1Swenshuai.xi         u32Cmd |= (HDCP20_MODE | PKT192_MODE);
713*53ee8cc1Swenshuai.xi         break;
714*53ee8cc1Swenshuai.xi 
715*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_HDCP20_PKT192_CLEAR:
716*53ee8cc1Swenshuai.xi         u32Cmd |= (HDCP20_MODE | PKT192_MODE | CLEAR_MODE);
717*53ee8cc1Swenshuai.xi         break;
718*53ee8cc1Swenshuai.xi 
719*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_HDCP20_PKT188:
720*53ee8cc1Swenshuai.xi         u32Cmd |= (HDCP20_MODE);
721*53ee8cc1Swenshuai.xi         u32Cmd &= (~PKT192_MODE);
722*53ee8cc1Swenshuai.xi         break;
723*53ee8cc1Swenshuai.xi 
724*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_HDCP20_PKT188_CLEAR:
725*53ee8cc1Swenshuai.xi         u32Cmd |= (HDCP20_MODE | CLEAR_MODE);
726*53ee8cc1Swenshuai.xi         u32Cmd &= (~PKT192_MODE);
727*53ee8cc1Swenshuai.xi         break;
728*53ee8cc1Swenshuai.xi 
729*53ee8cc1Swenshuai.xi     default:
730*53ee8cc1Swenshuai.xi         return;
731*53ee8cc1Swenshuai.xi     }
732*53ee8cc1Swenshuai.xi 
733*53ee8cc1Swenshuai.xi     u32Cmd |= (AUTO_MODE | INIT_TRUST);
734*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Ctrl),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~ParserCtrlSet)) | u32Cmd ) );
735*53ee8cc1Swenshuai.xi }
736*53ee8cc1Swenshuai.xi 
737*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Insert_Scrmb(MS_BOOL bEnable)738*53ee8cc1Swenshuai.xi void AESDMA_Parser_Insert_Scrmb(MS_BOOL bEnable)
739*53ee8cc1Swenshuai.xi {
740*53ee8cc1Swenshuai.xi     if(bEnable)
741*53ee8cc1Swenshuai.xi 	{
742*53ee8cc1Swenshuai.xi 	    REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~INSERT_SCRMB)) );
743*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (INSERT_SCRMB)) );
744*53ee8cc1Swenshuai.xi     }
745*53ee8cc1Swenshuai.xi     else
746*53ee8cc1Swenshuai.xi     {
747*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~INSERT_SCRMB)) );
748*53ee8cc1Swenshuai.xi     }
749*53ee8cc1Swenshuai.xi }
750*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Remove_Scrmb(MS_BOOL bEnable)751*53ee8cc1Swenshuai.xi void AESDMA_Parser_Remove_Scrmb(MS_BOOL bEnable)
752*53ee8cc1Swenshuai.xi {
753*53ee8cc1Swenshuai.xi     if(bEnable)
754*53ee8cc1Swenshuai.xi     {
755*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~REMOVE_SCRMB)) );
756*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (REMOVE_SCRMB)) );
757*53ee8cc1Swenshuai.xi     }
758*53ee8cc1Swenshuai.xi     else
759*53ee8cc1Swenshuai.xi     {
760*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~REMOVE_SCRMB)) );
761*53ee8cc1Swenshuai.xi     }
762*53ee8cc1Swenshuai.xi }
763*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Mask_Scrmb(MS_BOOL bEnable)764*53ee8cc1Swenshuai.xi void AESDMA_Parser_Mask_Scrmb(MS_BOOL bEnable)
765*53ee8cc1Swenshuai.xi {
766*53ee8cc1Swenshuai.xi     if(bEnable)
767*53ee8cc1Swenshuai.xi     {
768*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~TS_SCRMB_MASK)) );
769*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (TS_SCRMB_MASK)) );
770*53ee8cc1Swenshuai.xi     }
771*53ee8cc1Swenshuai.xi     else
772*53ee8cc1Swenshuai.xi     {
773*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~TS_SCRMB_MASK)) );
774*53ee8cc1Swenshuai.xi     }
775*53ee8cc1Swenshuai.xi }
776*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Bypass_Pid(MS_BOOL bEnable)777*53ee8cc1Swenshuai.xi void AESDMA_Parser_Bypass_Pid(MS_BOOL bEnable)
778*53ee8cc1Swenshuai.xi {
779*53ee8cc1Swenshuai.xi     if(bEnable)
780*53ee8cc1Swenshuai.xi     {
781*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~BYPASS_PID)) );
782*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) | (BYPASS_PID)) );
783*53ee8cc1Swenshuai.xi     }
784*53ee8cc1Swenshuai.xi     else
785*53ee8cc1Swenshuai.xi     {
786*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~BYPASS_PID)) );
787*53ee8cc1Swenshuai.xi     }
788*53ee8cc1Swenshuai.xi }
789*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Set_ScrmbPattern(AESDMA_ScrmbPattern ePattern)790*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_ScrmbPattern(AESDMA_ScrmbPattern ePattern)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
793*53ee8cc1Swenshuai.xi 
794*53ee8cc1Swenshuai.xi     switch (ePattern)
795*53ee8cc1Swenshuai.xi     {
796*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_SCRMB_10:
797*53ee8cc1Swenshuai.xi         u32Cmd |= (SCRMB_PATTERN10);
798*53ee8cc1Swenshuai.xi         break;
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_SCRMB_11:
801*53ee8cc1Swenshuai.xi         u32Cmd |= (SCRMB_PATTERN11);
802*53ee8cc1Swenshuai.xi         break;
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi     default:
805*53ee8cc1Swenshuai.xi         u32Cmd &= ~(SCRMB_PATTERN11);
806*53ee8cc1Swenshuai.xi         break;
807*53ee8cc1Swenshuai.xi     }
808*53ee8cc1Swenshuai.xi 
809*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Ctrl),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~SCRMB_INITVALUE)) | u32Cmd ) );
810*53ee8cc1Swenshuai.xi 
811*53ee8cc1Swenshuai.xi }
812*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Set_AddedScrmbPattern(AESDMA_ScrmbPattern ePattern)813*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_AddedScrmbPattern(AESDMA_ScrmbPattern ePattern)
814*53ee8cc1Swenshuai.xi {
815*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
816*53ee8cc1Swenshuai.xi 
817*53ee8cc1Swenshuai.xi     switch (ePattern)
818*53ee8cc1Swenshuai.xi     {
819*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_SCRMB_10:
820*53ee8cc1Swenshuai.xi         u32Cmd |= (SCRMB_PATTERN10_ADD);
821*53ee8cc1Swenshuai.xi         break;
822*53ee8cc1Swenshuai.xi 
823*53ee8cc1Swenshuai.xi     case E_AESDMA_PARSER_SCRMB_11:
824*53ee8cc1Swenshuai.xi         u32Cmd |= (SCRMB_PATTERN11_ADD);
825*53ee8cc1Swenshuai.xi         break;
826*53ee8cc1Swenshuai.xi 
827*53ee8cc1Swenshuai.xi     default:
828*53ee8cc1Swenshuai.xi         return;
829*53ee8cc1Swenshuai.xi     }
830*53ee8cc1Swenshuai.xi 
831*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Pid1),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~SCRMB_INITVALUE_ADD)) | u32Cmd ) );
832*53ee8cc1Swenshuai.xi 
833*53ee8cc1Swenshuai.xi }
834*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Set_Pid(MS_U8 u8Index,MS_U16 u16Pid)835*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_Pid(MS_U8 u8Index, MS_U16 u16Pid)
836*53ee8cc1Swenshuai.xi {
837*53ee8cc1Swenshuai.xi     if(u8Index==0)
838*53ee8cc1Swenshuai.xi     {
839*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~PARSER_PID0_MASK)) | (u16Pid<<16) ) );
840*53ee8cc1Swenshuai.xi     }
841*53ee8cc1Swenshuai.xi     else if(u8Index==1)
842*53ee8cc1Swenshuai.xi     {
843*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~PARSER_PID1_MASK)) | u16Pid ) );
844*53ee8cc1Swenshuai.xi     }
845*53ee8cc1Swenshuai.xi     else
846*53ee8cc1Swenshuai.xi     {
847*53ee8cc1Swenshuai.xi         printf("Edison do not support other PID\n");
848*53ee8cc1Swenshuai.xi     }
849*53ee8cc1Swenshuai.xi }
850*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Query_PidCount(void)851*53ee8cc1Swenshuai.xi MS_U8 AESDMA_Parser_Query_PidCount(void)
852*53ee8cc1Swenshuai.xi {
853*53ee8cc1Swenshuai.xi     return PARSER_PID_COUNT;
854*53ee8cc1Swenshuai.xi }
855*53ee8cc1Swenshuai.xi 
AESDMA_Parser_Enable_HWParser(MS_BOOL bEnable)856*53ee8cc1Swenshuai.xi void AESDMA_Parser_Enable_HWParser(MS_BOOL bEnable)
857*53ee8cc1Swenshuai.xi {
858*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
859*53ee8cc1Swenshuai.xi     //
860*53ee8cc1Swenshuai.xi     // Set HW Parser controlled by DSCRMB3
861*53ee8cc1Swenshuai.xi     //
862*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB6Ctrl[0].Reg0001) , _AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001)|AESDMA_DSCRMB3_HW_PASER_EN);
863*53ee8cc1Swenshuai.xi #else
864*53ee8cc1Swenshuai.xi     //
865*53ee8cc1Swenshuai.xi     // Set HW Parser controlled by DSCRMB5
866*53ee8cc1Swenshuai.xi     //
867*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB6Ctrl[0].Reg0001) , _AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001)&~(AESDMA_DSCRMB3_HW_PASER_EN));
868*53ee8cc1Swenshuai.xi #endif  //#if AESDMS_SECURED_BANK_EN
869*53ee8cc1Swenshuai.xi 
870*53ee8cc1Swenshuai.xi     if(bEnable)
871*53ee8cc1Swenshuai.xi     {
872*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~HW_PARSER_MODE))  );
873*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (HW_PARSER_MODE))  );
874*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) | (ENABLE_LG_PATCH))  );
875*53ee8cc1Swenshuai.xi     }
876*53ee8cc1Swenshuai.xi     else
877*53ee8cc1Swenshuai.xi     {
878*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~HW_PARSER_MODE))  );
879*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~ENABLE_LG_PATCH))  );
880*53ee8cc1Swenshuai.xi     }
881*53ee8cc1Swenshuai.xi 
882*53ee8cc1Swenshuai.xi     //make sure CC_CTRL_BY_ACPU is set 0
883*53ee8cc1Swenshuai.xi     REG32_W((&_CIPHERCtrl[0].Cipher_Ctrl),( _AESDMA_REG32_R(&_CIPHERCtrl[0].Cipher_Ctrl) & (~CC_CTRL_BY_ACPU)) );
884*53ee8cc1Swenshuai.xi }
885*53ee8cc1Swenshuai.xi 
RSA_ClearInt(void)886*53ee8cc1Swenshuai.xi void RSA_ClearInt(void)
887*53ee8cc1Swenshuai.xi {
888*53ee8cc1Swenshuai.xi     //RSA interrupt clear
889*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_RData) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_RData)|(RSA_INT_CLR));
890*53ee8cc1Swenshuai.xi }
891*53ee8cc1Swenshuai.xi 
RSA_Reset(void)892*53ee8cc1Swenshuai.xi void RSA_Reset(void)
893*53ee8cc1Swenshuai.xi {
894*53ee8cc1Swenshuai.xi     //RSA Rst
895*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)|(RSA_CTRL_RSA_RST));
896*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_RSA_RST));
897*53ee8cc1Swenshuai.xi 
898*53ee8cc1Swenshuai.xi     //add polling RSA status before load data to SRAM
899*53ee8cc1Swenshuai.xi     while (( RSA_GetStatus() & RSA_STATUS_RSA_BUSY ) != 0);
900*53ee8cc1Swenshuai.xi }
901*53ee8cc1Swenshuai.xi 
RSA_Ind32Ctrl(MS_U8 u8dirction)902*53ee8cc1Swenshuai.xi void RSA_Ind32Ctrl(MS_U8 u8dirction)
903*53ee8cc1Swenshuai.xi {
904*53ee8cc1Swenshuai.xi     //[1] reg_ind32_direction 0: Read. 1: Write
905*53ee8cc1Swenshuai.xi     if(u8dirction==1)
906*53ee8cc1Swenshuai.xi     {
907*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)|(RSA_IND32_CTRL_DIRECTION_WRITE));
908*53ee8cc1Swenshuai.xi     }
909*53ee8cc1Swenshuai.xi     else
910*53ee8cc1Swenshuai.xi     {
911*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)&(~RSA_IND32_CTRL_DIRECTION_WRITE));
912*53ee8cc1Swenshuai.xi     }
913*53ee8cc1Swenshuai.xi 
914*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)|(RSA_IND32_CTRL_ADDR_AUTO_INC|RSA_IND32_CTRL_ACCESS_AUTO_START));
915*53ee8cc1Swenshuai.xi 
916*53ee8cc1Swenshuai.xi }
917*53ee8cc1Swenshuai.xi 
RSA_LoadSram(MS_U32 * u32Buf,RSA_IND32Address eMode)918*53ee8cc1Swenshuai.xi void RSA_LoadSram(MS_U32 *u32Buf, RSA_IND32Address eMode)
919*53ee8cc1Swenshuai.xi {
920*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
921*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
922*53ee8cc1Swenshuai.xi     MS_U32 WData_H = 0;
923*53ee8cc1Swenshuai.xi     MS_U32 WData_L = 0;
924*53ee8cc1Swenshuai.xi 
925*53ee8cc1Swenshuai.xi     switch (eMode)
926*53ee8cc1Swenshuai.xi     {
927*53ee8cc1Swenshuai.xi     case E_RSA_ADDRESS_E:
928*53ee8cc1Swenshuai.xi         u32Cmd |= (RSA_E_BASE_ADDR);
929*53ee8cc1Swenshuai.xi         break;
930*53ee8cc1Swenshuai.xi 
931*53ee8cc1Swenshuai.xi     case E_RSA_ADDRESS_N:
932*53ee8cc1Swenshuai.xi         u32Cmd |= (RSA_N_BASE_ADDR);
933*53ee8cc1Swenshuai.xi         break;
934*53ee8cc1Swenshuai.xi 
935*53ee8cc1Swenshuai.xi     case E_RSA_ADDRESS_A:
936*53ee8cc1Swenshuai.xi         u32Cmd |= (RSA_A_BASE_ADDR);
937*53ee8cc1Swenshuai.xi         break;
938*53ee8cc1Swenshuai.xi 
939*53ee8cc1Swenshuai.xi     default:
940*53ee8cc1Swenshuai.xi         return;
941*53ee8cc1Swenshuai.xi     }
942*53ee8cc1Swenshuai.xi 
943*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Addr) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Addr)&(~RSA_ADDRESS_MASK))|u32Cmd));
944*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)|(RSA_INDIRECT_START));
945*53ee8cc1Swenshuai.xi 
946*53ee8cc1Swenshuai.xi     for( i = 0; i < 64; i++ )
947*53ee8cc1Swenshuai.xi     {
948*53ee8cc1Swenshuai.xi         if( eMode == E_RSA_ADDRESS_E )
949*53ee8cc1Swenshuai.xi         {
950*53ee8cc1Swenshuai.xi             WData_L = (((*(u32Buf+i))>>8)&0xFF00)|(((*(u32Buf+i))>>24)&0xFF);
951*53ee8cc1Swenshuai.xi             WData_H = (((*(u32Buf+i))>>8)&0xFF)|(((*(u32Buf+i))<<8)&0xFF00);
952*53ee8cc1Swenshuai.xi         }
953*53ee8cc1Swenshuai.xi         else
954*53ee8cc1Swenshuai.xi         {
955*53ee8cc1Swenshuai.xi             WData_L = (((*(u32Buf-i))>>8)&0xFF00)|(((*(u32Buf-i))>>24)&0xFF);
956*53ee8cc1Swenshuai.xi             WData_H = (((*(u32Buf-i))>>8)&0xFF)|(((*(u32Buf-i))<<8)&0xFF00);
957*53ee8cc1Swenshuai.xi         }
958*53ee8cc1Swenshuai.xi 
959*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Addr) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Addr)&(~RSA_WDATA_MASK_L))|(WData_L<<16)));
960*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_WData) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_WData)&(~RSA_WDATA_MASK_H))|WData_H));
961*53ee8cc1Swenshuai.xi     }
962*53ee8cc1Swenshuai.xi 
963*53ee8cc1Swenshuai.xi }
964*53ee8cc1Swenshuai.xi 
RSA_SetKeyLength(MS_U32 u32keylen)965*53ee8cc1Swenshuai.xi void RSA_SetKeyLength(MS_U32 u32keylen)
966*53ee8cc1Swenshuai.xi {
967*53ee8cc1Swenshuai.xi     //[13:8] n_len_e: key length
968*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_KEY_LENGTH_MASK))|(u32keylen<<8));
969*53ee8cc1Swenshuai.xi }
970*53ee8cc1Swenshuai.xi 
RSA_SetKeyType(MS_U8 u8hwkey,MS_U8 u8pubkey)971*53ee8cc1Swenshuai.xi void RSA_SetKeyType(MS_U8 u8hwkey, MS_U8 u8pubkey)
972*53ee8cc1Swenshuai.xi {
973*53ee8cc1Swenshuai.xi     //[1] hw_key_e : 0 : software key, 1: hardware key
974*53ee8cc1Swenshuai.xi     //[2] e_pub_e : 0: pvivate key, 1: public key
975*53ee8cc1Swenshuai.xi     if(u8hwkey==1)
976*53ee8cc1Swenshuai.xi     {
977*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)|(RSA_CTRL_SEL_HW_KEY));
978*53ee8cc1Swenshuai.xi     }
979*53ee8cc1Swenshuai.xi     else
980*53ee8cc1Swenshuai.xi     {
981*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_SEL_HW_KEY));
982*53ee8cc1Swenshuai.xi     }
983*53ee8cc1Swenshuai.xi 
984*53ee8cc1Swenshuai.xi     if(u8pubkey==1)
985*53ee8cc1Swenshuai.xi     {
986*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)|(RSA_CTRL_SEL_PUBLIC_KEY));
987*53ee8cc1Swenshuai.xi     }
988*53ee8cc1Swenshuai.xi     else
989*53ee8cc1Swenshuai.xi     {
990*53ee8cc1Swenshuai.xi         REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_SEL_PUBLIC_KEY));
991*53ee8cc1Swenshuai.xi     }
992*53ee8cc1Swenshuai.xi 
993*53ee8cc1Swenshuai.xi }
994*53ee8cc1Swenshuai.xi 
RSA_ExponetialStart(void)995*53ee8cc1Swenshuai.xi void RSA_ExponetialStart(void)
996*53ee8cc1Swenshuai.xi {
997*53ee8cc1Swenshuai.xi     //RSA exp start
998*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_RData) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_RData)|(RSA_EXP_START));
999*53ee8cc1Swenshuai.xi }
1000*53ee8cc1Swenshuai.xi 
RSA_GetStatus(void)1001*53ee8cc1Swenshuai.xi MS_U32 RSA_GetStatus(void)
1002*53ee8cc1Swenshuai.xi {
1003*53ee8cc1Swenshuai.xi     return _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl) & RSA_STATUS_MASK;
1004*53ee8cc1Swenshuai.xi }
1005*53ee8cc1Swenshuai.xi 
RSA_FileOutStart(void)1006*53ee8cc1Swenshuai.xi void RSA_FileOutStart(void)
1007*53ee8cc1Swenshuai.xi {
1008*53ee8cc1Swenshuai.xi     //RSA ind32_start
1009*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)|(RSA_INDIRECT_START));
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi 
RSA_SetFileOutAddr(MS_U32 u32offset)1012*53ee8cc1Swenshuai.xi void RSA_SetFileOutAddr(MS_U32 u32offset)
1013*53ee8cc1Swenshuai.xi {
1014*53ee8cc1Swenshuai.xi     MS_PHY u32Addr = 0;
1015*53ee8cc1Swenshuai.xi     u32Addr = RSA_Z_BASE_ADDR + u32offset;
1016*53ee8cc1Swenshuai.xi 
1017*53ee8cc1Swenshuai.xi     REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Addr) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Addr)&(~RSA_ADDRESS_MASK))|u32Addr));
1018*53ee8cc1Swenshuai.xi }
1019*53ee8cc1Swenshuai.xi 
RSA_FileOut(void)1020*53ee8cc1Swenshuai.xi MS_U32 RSA_FileOut(void)
1021*53ee8cc1Swenshuai.xi {
1022*53ee8cc1Swenshuai.xi     MS_U32 u32out_L = 0;
1023*53ee8cc1Swenshuai.xi     MS_U32 u32out_H = 0;
1024*53ee8cc1Swenshuai.xi 
1025*53ee8cc1Swenshuai.xi     u32out_L = (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_WData)&RSA_RDATA_MASK_L)>>16;
1026*53ee8cc1Swenshuai.xi     u32out_H = (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_RData)&RSA_RDATA_MASK_H)<<16;
1027*53ee8cc1Swenshuai.xi 
1028*53ee8cc1Swenshuai.xi     return (u32out_H|u32out_L);
1029*53ee8cc1Swenshuai.xi }
1030*53ee8cc1Swenshuai.xi 
RSA_Get_RSA_IsFinished(void)1031*53ee8cc1Swenshuai.xi MS_U32 RSA_Get_RSA_IsFinished(void)
1032*53ee8cc1Swenshuai.xi {
1033*53ee8cc1Swenshuai.xi     return (RSA_GetStatus()&RSA_STATUS_RSA_BUSY);
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi 
1036*53ee8cc1Swenshuai.xi //reserved for secure protect function
1037*53ee8cc1Swenshuai.xi /*
1038*53ee8cc1Swenshuai.xi void AESDMA_Secure_SetCipherKey(MS_U32 *cipherkey)
1039*53ee8cc1Swenshuai.xi {
1040*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_CipherKey_L.Key_L) , cipherkey[0]);
1041*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_CipherKey_L.Key_H) , cipherkey[1]);
1042*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_CipherKey_H.Key_L) , cipherkey[2]);
1043*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_CipherKey_H.Key_H) , cipherkey[3]);
1044*53ee8cc1Swenshuai.xi }
1045*53ee8cc1Swenshuai.xi 
1046*53ee8cc1Swenshuai.xi void AESDMA_Secure_SetInitVector(MS_U32 *pInitVector)
1047*53ee8cc1Swenshuai.xi {
1048*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_InitVector_L.IV_L), pInitVector[0]);
1049*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_InitVector_L.IV_H), pInitVector[1]);
1050*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_InitVector_H.IV_L), pInitVector[2]);
1051*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_InitVector_H.IV_H), pInitVector[3]);
1052*53ee8cc1Swenshuai.xi }
1053*53ee8cc1Swenshuai.xi 
1054*53ee8cc1Swenshuai.xi void AESDMA_SecureProtect(MS_BOOL bEnable)
1055*53ee8cc1Swenshuai.xi {
1056*53ee8cc1Swenshuai.xi     if(bEnable)
1057*53ee8cc1Swenshuai.xi 	{
1058*53ee8cc1Swenshuai.xi 		REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl) , _AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_dma3_ctrl)|(AESDMA_SECURE_PROTECT_S));
1059*53ee8cc1Swenshuai.xi 	}
1060*53ee8cc1Swenshuai.xi 	else
1061*53ee8cc1Swenshuai.xi 	{
1062*53ee8cc1Swenshuai.xi         REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl) , _AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_dma3_ctrl)&(~AESDMA_SECURE_PROTECT_S));
1063*53ee8cc1Swenshuai.xi 	}
1064*53ee8cc1Swenshuai.xi }
1065*53ee8cc1Swenshuai.xi 
1066*53ee8cc1Swenshuai.xi void AESDMA_Set_FileOutEnable(MS_BOOL bEnable)
1067*53ee8cc1Swenshuai.xi {
1068*53ee8cc1Swenshuai.xi     if (bEnable)
1069*53ee8cc1Swenshuai.xi     {
1070*53ee8cc1Swenshuai.xi         REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) |AESDMA_CTRL_FILEIN_START));
1071*53ee8cc1Swenshuai.xi     }
1072*53ee8cc1Swenshuai.xi     else
1073*53ee8cc1Swenshuai.xi     {
1074*53ee8cc1Swenshuai.xi         REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) &~AESDMA_CTRL_FILEIN_START));
1075*53ee8cc1Swenshuai.xi     }
1076*53ee8cc1Swenshuai.xi }
1077*53ee8cc1Swenshuai.xi 
1078*53ee8cc1Swenshuai.xi void AESDMA_Secure_Start(MS_BOOL AESDMAStart)
1079*53ee8cc1Swenshuai.xi {
1080*53ee8cc1Swenshuai.xi     if (AESDMAStart)
1081*53ee8cc1Swenshuai.xi     {
1082*53ee8cc1Swenshuai.xi         REG32_W((&_DMASECURECtrl[0].Secure_file_st), (_AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_file_st) &~AESDMA_SECURE_FILEIN_START));
1083*53ee8cc1Swenshuai.xi         REG32_W((&_DMASECURECtrl[0].Secure_file_st), (_AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_file_st) | AESDMA_SECURE_FILEIN_START));
1084*53ee8cc1Swenshuai.xi     }
1085*53ee8cc1Swenshuai.xi     else
1086*53ee8cc1Swenshuai.xi     {
1087*53ee8cc1Swenshuai.xi         REG32_W((&_DMASECURECtrl[0].Secure_file_st), (_AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_file_st) &~AESDMA_SECURE_FILEIN_START));
1088*53ee8cc1Swenshuai.xi     }
1089*53ee8cc1Swenshuai.xi }
1090*53ee8cc1Swenshuai.xi 
1091*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_AESDMA_SecureIsFinished(void)
1092*53ee8cc1Swenshuai.xi {
1093*53ee8cc1Swenshuai.xi     return (_AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_dma3_status) & AESDMA_DONE_S);
1094*53ee8cc1Swenshuai.xi }
1095*53ee8cc1Swenshuai.xi 
1096*53ee8cc1Swenshuai.xi */
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1099*53ee8cc1Swenshuai.xi /// Get status of Secret Key in Normal bank
1100*53ee8cc1Swenshuai.xi /// @param  N/A
1101*53ee8cc1Swenshuai.xi /// @note : Get Status
1102*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_IsSecretKeyInNormalBank(void)1103*53ee8cc1Swenshuai.xi MS_U32 AESDMA_IsSecretKeyInNormalBank(void)
1104*53ee8cc1Swenshuai.xi {
1105*53ee8cc1Swenshuai.xi     return (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl) & (SECRET_KEY_IN_NORMAL_BANK));
1106*53ee8cc1Swenshuai.xi }
1107*53ee8cc1Swenshuai.xi 
1108*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1109*53ee8cc1Swenshuai.xi /// Enable Two keys (Odd/Even) in using HW auto select key.
1110*53ee8cc1Swenshuai.xi /// @param  bEnable                \b IN: Enable/Disable
1111*53ee8cc1Swenshuai.xi 
1112*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Parser_Enable_Two_Keys(MS_BOOL bEnable)1114*53ee8cc1Swenshuai.xi void AESDMA_Parser_Enable_Two_Keys(MS_BOOL bEnable)
1115*53ee8cc1Swenshuai.xi {
1116*53ee8cc1Swenshuai.xi     if(bEnable)
1117*53ee8cc1Swenshuai.xi     {
1118*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1), _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) | (SCRMB_ENABLE_TWO_KEY) );
1119*53ee8cc1Swenshuai.xi     }
1120*53ee8cc1Swenshuai.xi     else
1121*53ee8cc1Swenshuai.xi     {
1122*53ee8cc1Swenshuai.xi         REG32_W((&_PARSERCtrl[0].Parser_Pid1), _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~SCRMB_ENABLE_TWO_KEY) );
1123*53ee8cc1Swenshuai.xi     }
1124*53ee8cc1Swenshuai.xi }
1125*53ee8cc1Swenshuai.xi 
1126*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1127*53ee8cc1Swenshuai.xi /// Set Odd keys in using HW auto select key.
1128*53ee8cc1Swenshuai.xi /// @param  cipherkey
1129*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1130*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_CipherOddKey(MS_U32 * cipherkey)1131*53ee8cc1Swenshuai.xi void AESDMA_Set_CipherOddKey(MS_U32 *cipherkey)
1132*53ee8cc1Swenshuai.xi {
1133*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_L.Key_L) , cipherkey[0]);
1134*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_L.Key_H) , cipherkey[1]);
1135*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_H.Key_L) , cipherkey[2]);
1136*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_H.Key_H) , cipherkey[3]);
1137*53ee8cc1Swenshuai.xi }
1138*53ee8cc1Swenshuai.xi 
1139*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1140*53ee8cc1Swenshuai.xi /// Set Odd IVs in using HW auto select key.
1141*53ee8cc1Swenshuai.xi /// @param  cipherkey
1142*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1143*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_OddInitVector(MS_U32 * pInitVector)1144*53ee8cc1Swenshuai.xi void AESDMA_Set_OddInitVector(MS_U32 *pInitVector)
1145*53ee8cc1Swenshuai.xi {
1146*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_L.IV_L), pInitVector[0]);
1147*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_L.IV_H), pInitVector[1]);
1148*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_H.IV_L), pInitVector[2]);
1149*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_H.IV_H), pInitVector[3]);
1150*53ee8cc1Swenshuai.xi }
1151*53ee8cc1Swenshuai.xi 
1152*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1153*53ee8cc1Swenshuai.xi /// Set Even keys in using HW auto select key.
1154*53ee8cc1Swenshuai.xi /// @param  cipherkey
1155*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1156*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_CipherEvenKey(MS_U32 * cipherkey)1157*53ee8cc1Swenshuai.xi void AESDMA_Set_CipherEvenKey(MS_U32 *cipherkey)
1158*53ee8cc1Swenshuai.xi {
1159*53ee8cc1Swenshuai.xi     AESDMA_Set_CipherKey(cipherkey);
1160*53ee8cc1Swenshuai.xi }
1161*53ee8cc1Swenshuai.xi 
1162*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1163*53ee8cc1Swenshuai.xi /// Set Even IVs in using HW auto select key.
1164*53ee8cc1Swenshuai.xi /// @param  cipherkey
1165*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1166*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_EvenInitVector(MS_U32 * pInitVector)1167*53ee8cc1Swenshuai.xi void AESDMA_Set_EvenInitVector(MS_U32 *pInitVector)
1168*53ee8cc1Swenshuai.xi {
1169*53ee8cc1Swenshuai.xi     AESDMA_Set_InitVector(pInitVector);
1170*53ee8cc1Swenshuai.xi }
1171*53ee8cc1Swenshuai.xi 
1172*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1173*53ee8cc1Swenshuai.xi /// Set HDCP Data
1174*53ee8cc1Swenshuai.xi /// @param  u8Idx                \b IN: Index
1175*53ee8cc1Swenshuai.xi /// @param  pu8Data              \b IN: Content Keys
1176*53ee8cc1Swenshuai.xi /// @param  pu8privData          \b IN: RIV
1177*53ee8cc1Swenshuai.xi /// @note : Set HDCP2.2
1178*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HDCP_ProcessCipher(MS_U8 u8Idx,MS_U8 * pu8Data,MS_U8 * pu8privData)1179*53ee8cc1Swenshuai.xi void HDCP_ProcessCipher (MS_U8 u8Idx, MS_U8 *pu8Data, MS_U8* pu8privData)
1180*53ee8cc1Swenshuai.xi {
1181*53ee8cc1Swenshuai.xi     REG_HDCP22Data *pData = NULL;
1182*53ee8cc1Swenshuai.xi     REG_HDCP22SEKCtrl *pCtrl = NULL;
1183*53ee8cc1Swenshuai.xi     MS_U16 offset = 0;
1184*53ee8cc1Swenshuai.xi     MS_U16 BKOffset = 0;
1185*53ee8cc1Swenshuai.xi 
1186*53ee8cc1Swenshuai.xi     MS_U32 *cipherkey = (MS_U32 *)((void *)pu8Data);
1187*53ee8cc1Swenshuai.xi     MS_U32 *riv = (MS_U32 *)((void *)pu8privData);
1188*53ee8cc1Swenshuai.xi 
1189*53ee8cc1Swenshuai.xi     offset = u8Idx * (sizeof(REG_HDCP22Data) >> 1);
1190*53ee8cc1Swenshuai.xi     BKOffset = u8Idx * 0x300;
1191*53ee8cc1Swenshuai.xi 
1192*53ee8cc1Swenshuai.xi     pData = (REG_HDCP22Data*)((MS_U16*)_HDCP22Data + offset);
1193*53ee8cc1Swenshuai.xi     pCtrl = (REG_HDCP22SEKCtrl*)((MS_U16*)_HDCP22SekCtrl + BKOffset);
1194*53ee8cc1Swenshuai.xi 
1195*53ee8cc1Swenshuai.xi     //Content Keys
1196*53ee8cc1Swenshuai.xi     REG32_W((&pData[0].Hdcp22_ContentKey[0]) , cipherkey[0]);
1197*53ee8cc1Swenshuai.xi     REG32_W((&pData[0].Hdcp22_ContentKey[1]) , cipherkey[1]);
1198*53ee8cc1Swenshuai.xi     REG32_W((&pData[0].Hdcp22_ContentKey[2]) , cipherkey[2]);
1199*53ee8cc1Swenshuai.xi     REG32_W((&pData[0].Hdcp22_ContentKey[3]) , cipherkey[3]);
1200*53ee8cc1Swenshuai.xi 
1201*53ee8cc1Swenshuai.xi     //RIV
1202*53ee8cc1Swenshuai.xi     REG32_W((&pData[0].Hdcp22_Riv[0]) , riv[0]);
1203*53ee8cc1Swenshuai.xi     REG32_W((&pData[0].Hdcp22_Riv[1]) , riv[1]);
1204*53ee8cc1Swenshuai.xi 
1205*53ee8cc1Swenshuai.xi     //Set SKE successful
1206*53ee8cc1Swenshuai.xi     REG32_W((&pCtrl[0].SEK), (_AESDMA_REG32_R(&pCtrl[0].SEK) | HDCP_SEK_BIT0));
1207*53ee8cc1Swenshuai.xi }
1208*53ee8cc1Swenshuai.xi 
1209*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1210*53ee8cc1Swenshuai.xi /// Get the status of HW supports HDCP2.2
1211*53ee8cc1Swenshuai.xi /// @param  N/A
1212*53ee8cc1Swenshuai.xi /// @note : Support HDCP2.2
1213*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HDCP_GetHdcpCipherState(MS_U8 u8Idx,MS_U8 * pu8State)1214*53ee8cc1Swenshuai.xi void HDCP_GetHdcpCipherState(MS_U8 u8Idx, MS_U8 *pu8State)
1215*53ee8cc1Swenshuai.xi {
1216*53ee8cc1Swenshuai.xi #define HDCP_SUPPORT_EN 0x00000001
1217*53ee8cc1Swenshuai.xi     REG_HDCP22SEKCtrl *pCtrl = NULL;
1218*53ee8cc1Swenshuai.xi     MS_U16 offset = 0;
1219*53ee8cc1Swenshuai.xi     MS_U16 BKOffset = 0;
1220*53ee8cc1Swenshuai.xi 
1221*53ee8cc1Swenshuai.xi     offset = u8Idx * (sizeof(REG_HDCP22Data) >> 1);
1222*53ee8cc1Swenshuai.xi     BKOffset = u8Idx * 0x300;
1223*53ee8cc1Swenshuai.xi 
1224*53ee8cc1Swenshuai.xi     pCtrl = (REG_HDCP22SEKCtrl*)((MS_U16*)_HDCP22SekCtrl + BKOffset);
1225*53ee8cc1Swenshuai.xi 
1226*53ee8cc1Swenshuai.xi     *pu8State = (MS_U8)(_AESDMA_REG32_R(&pCtrl[0].SEK) & HDCP_SUPPORT_EN);
1227*53ee8cc1Swenshuai.xi }
1228*53ee8cc1Swenshuai.xi 
AESDMA_BackupRegisters(void)1229*53ee8cc1Swenshuai.xi static void AESDMA_BackupRegisters(void)
1230*53ee8cc1Swenshuai.xi {
1231*53ee8cc1Swenshuai.xi     MS_VIRT Reg_AESDMA;
1232*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
1233*53ee8cc1Swenshuai.xi     Reg_AESDMA = (MS_VIRT)(&_AESDMACtrl[0].Dma_Ctrl);
1234*53ee8cc1Swenshuai.xi 
1235*53ee8cc1Swenshuai.xi     // reset all AESdma register
1236*53ee8cc1Swenshuai.xi     for (i = 0 ; i < 19 ; i++)
1237*53ee8cc1Swenshuai.xi     {
1238*53ee8cc1Swenshuai.xi        _gAESDMARegisterBackup.Dma_Ctrl[i] =  _AESDMA_REG32_R((REG32 *)(Reg_AESDMA+(i*8)));
1239*53ee8cc1Swenshuai.xi     }
1240*53ee8cc1Swenshuai.xi     // reset secure_dma3_ctrl register
1241*53ee8cc1Swenshuai.xi     _gAESDMARegisterBackup.Secure_dma3_ctrl = _AESDMA_REG32_R((&_DMASECURECtrl[0].Secure_dma3_ctrl));
1242*53ee8cc1Swenshuai.xi 
1243*53ee8cc1Swenshuai.xi     // reset hw_parser_ctrl register
1244*53ee8cc1Swenshuai.xi     _gAESDMARegisterBackup.Parser_Pid1 = _AESDMA_REG32_R((&_PARSERCtrl[0].Parser_Pid1));
1245*53ee8cc1Swenshuai.xi     _gAESDMARegisterBackup.Parser_Ctrl = _AESDMA_REG32_R((&_PARSERCtrl[0].Parser_Ctrl));
1246*53ee8cc1Swenshuai.xi     _gAESDMARegisterBackup.Kslot_Index = _AESDMA_REG32_R((&_AESDSCMB6Ctrl[0].Reg0001));
1247*53ee8cc1Swenshuai.xi }
1248*53ee8cc1Swenshuai.xi 
AESDMA_RestoreRegisters(void)1249*53ee8cc1Swenshuai.xi static void AESDMA_RestoreRegisters(void)
1250*53ee8cc1Swenshuai.xi {
1251*53ee8cc1Swenshuai.xi     MS_VIRT Reg_AESDMA;
1252*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
1253*53ee8cc1Swenshuai.xi     Reg_AESDMA = (MS_VIRT)(&_AESDMACtrl[0].Dma_Ctrl);
1254*53ee8cc1Swenshuai.xi 
1255*53ee8cc1Swenshuai.xi     // reset all AESdma register
1256*53ee8cc1Swenshuai.xi     for (i = 0 ; i < 19 ; i++)
1257*53ee8cc1Swenshuai.xi     {
1258*53ee8cc1Swenshuai.xi         REG32_W((REG32 *)(Reg_AESDMA+(i*8)), _gAESDMARegisterBackup.Dma_Ctrl[i]);
1259*53ee8cc1Swenshuai.xi     }
1260*53ee8cc1Swenshuai.xi     // reset secure_dma3_ctrl register
1261*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl), _gAESDMARegisterBackup.Secure_dma3_ctrl);
1262*53ee8cc1Swenshuai.xi 
1263*53ee8cc1Swenshuai.xi     // reset hw_parser_ctrl register
1264*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Pid1), _gAESDMARegisterBackup.Parser_Pid1);
1265*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Ctrl), _gAESDMARegisterBackup.Parser_Ctrl);
1266*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB6Ctrl[0].Reg0001), _gAESDMARegisterBackup.Kslot_Index);
1267*53ee8cc1Swenshuai.xi }
1268*53ee8cc1Swenshuai.xi 
1269*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1270*53ee8cc1Swenshuai.xi /// Reset AESDMA
1271*53ee8cc1Swenshuai.xi /// @param  N/A
1272*53ee8cc1Swenshuai.xi /// @note : Clear Registers, not to do sw reset
1273*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_NormalReset(void)1274*53ee8cc1Swenshuai.xi void AESDMA_NormalReset(void)
1275*53ee8cc1Swenshuai.xi {
1276*53ee8cc1Swenshuai.xi     MS_VIRT Reg_AESDMA;
1277*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
1278*53ee8cc1Swenshuai.xi     Reg_AESDMA = (MS_VIRT)(&_AESDMACtrl[0].Dma_Ctrl);
1279*53ee8cc1Swenshuai.xi 
1280*53ee8cc1Swenshuai.xi     REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , 0x00000000); // clear ctrl register
1281*53ee8cc1Swenshuai.xi 
1282*53ee8cc1Swenshuai.xi     // reset all AESdma register
1283*53ee8cc1Swenshuai.xi     for (i = 0 ; i < 19 ; i++)
1284*53ee8cc1Swenshuai.xi     {
1285*53ee8cc1Swenshuai.xi         REG32_W((REG32 *)(Reg_AESDMA+(i*8)), 0x00000000);
1286*53ee8cc1Swenshuai.xi     }
1287*53ee8cc1Swenshuai.xi     // reset secure_dma3_ctrl register
1288*53ee8cc1Swenshuai.xi     REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl), 0x00000000);
1289*53ee8cc1Swenshuai.xi 
1290*53ee8cc1Swenshuai.xi     // reset hw_parser_ctrl register
1291*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Pid1),0x00000000);
1292*53ee8cc1Swenshuai.xi     REG32_W((&_PARSERCtrl[0].Parser_Ctrl),0x00000000);
1293*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB6Ctrl[0].Reg0001), AESDMA_DSCRMB6_KSLOT_INDEX_DEFAULT);
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi 
AESDMA_Set_SecureBankEnable(MS_BOOL bEnable)1296*53ee8cc1Swenshuai.xi void AESDMA_Set_SecureBankEnable (MS_BOOL bEnable)
1297*53ee8cc1Swenshuai.xi {
1298*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
1299*53ee8cc1Swenshuai.xi     if ( bEnable == TRUE)
1300*53ee8cc1Swenshuai.xi     {
1301*53ee8cc1Swenshuai.xi         REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl) , _AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_dma3_ctrl) |(AESDMA_SECURE_PROTECT_S | AESDMA_SECURE_PROTECT_SHA_S | AESDMA_SECURE_PROTECT_RSA_S));
1302*53ee8cc1Swenshuai.xi     }
1303*53ee8cc1Swenshuai.xi     else
1304*53ee8cc1Swenshuai.xi     {
1305*53ee8cc1Swenshuai.xi         REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl) , _AESDMA_REG32_R(&_DMASECURECtrl[0].Secure_dma3_ctrl) &~(AESDMA_SECURE_PROTECT_S | AESDMA_SECURE_PROTECT_SHA_S | AESDMA_SECURE_PROTECT_RSA_S));
1306*53ee8cc1Swenshuai.xi     }
1307*53ee8cc1Swenshuai.xi #endif
1308*53ee8cc1Swenshuai.xi }
1309*53ee8cc1Swenshuai.xi 
HAL_AESDMA_HDMI_GetM0(AESDMA_HDMI_INPUT_PORT enInputPortType,MS_U8 * pu8Data)1310*53ee8cc1Swenshuai.xi void HAL_AESDMA_HDMI_GetM0(AESDMA_HDMI_INPUT_PORT enInputPortType, MS_U8 *pu8Data)
1311*53ee8cc1Swenshuai.xi {
1312*53ee8cc1Swenshuai.xi     MS_U16 u16bank_offset;
1313*53ee8cc1Swenshuai.xi     MS_U32 m0[2];
1314*53ee8cc1Swenshuai.xi     MS_U8* buf = (MS_U8*)m0;
1315*53ee8cc1Swenshuai.xi     int i;
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi     switch(enInputPortType)
1318*53ee8cc1Swenshuai.xi     {
1319*53ee8cc1Swenshuai.xi         default:
1320*53ee8cc1Swenshuai.xi         case E_AESDMA_HDMI_INPUT_PORT_DVI0:  u16bank_offset = 0x0000;  break; // BK 0x171200
1321*53ee8cc1Swenshuai.xi         case E_AESDMA_HDMI_INPUT_PORT_DVI1:  u16bank_offset = 0x0300;  break; // BK 0x171500
1322*53ee8cc1Swenshuai.xi         case E_AESDMA_HDMI_INPUT_PORT_DVI2:  u16bank_offset = 0x0600;  break; // BK 0x171800
1323*53ee8cc1Swenshuai.xi         case E_AESDMA_HDMI_INPUT_PORT_DVI3:  u16bank_offset = 0x0900;  break; // BK 0x171B00
1324*53ee8cc1Swenshuai.xi     }
1325*53ee8cc1Swenshuai.xi 
1326*53ee8cc1Swenshuai.xi     // read 8 bytes
1327*53ee8cc1Swenshuai.xi     for(i = 0; i < 2; ++i)
1328*53ee8cc1Swenshuai.xi     {
1329*53ee8cc1Swenshuai.xi         m0[i] = _AESDMA_REG32_R(&((REG_HDCP14SEKCtrl*)((MS_U16*)_HDCP14SekCtrl + u16bank_offset))[i].REG_0001);
1330*53ee8cc1Swenshuai.xi     }
1331*53ee8cc1Swenshuai.xi     for (i = 0; i < 8; ++i)
1332*53ee8cc1Swenshuai.xi     {
1333*53ee8cc1Swenshuai.xi         pu8Data[i] = buf[i];
1334*53ee8cc1Swenshuai.xi     }
1335*53ee8cc1Swenshuai.xi }
1336*53ee8cc1Swenshuai.xi 
1337*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1338*53ee8cc1Swenshuai.xi /// Set Index of KSlot
1339*53ee8cc1Swenshuai.xi /// @param  u32Index
1340*53ee8cc1Swenshuai.xi /// @param  bEnable                \b IN: TRUE: For Odd Key/FALSE: For Even Key
1341*53ee8cc1Swenshuai.xi /// @note : AESDMA AES CTR64
1342*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_SetKeyIndex(MS_U32 u32Index,MS_BOOL bIsOddKey)1343*53ee8cc1Swenshuai.xi void AESDMA_SetKeyIndex (MS_U32 u32Index, MS_BOOL bIsOddKey)
1344*53ee8cc1Swenshuai.xi {
1345*53ee8cc1Swenshuai.xi     if ( (u32Index < 0x10 || u32Index > 0x1F) && (u32Index != 0)) {
1346*53ee8cc1Swenshuai.xi         return;
1347*53ee8cc1Swenshuai.xi     }
1348*53ee8cc1Swenshuai.xi     MS_U32 u32Value = 0;
1349*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
1350*53ee8cc1Swenshuai.xi     //
1351*53ee8cc1Swenshuai.xi     // For Secured Bank
1352*53ee8cc1Swenshuai.xi     //
1353*53ee8cc1Swenshuai.xi     if (bIsOddKey == FALSE) {
1354*53ee8cc1Swenshuai.xi         //Even Key (default key), [7:0]
1355*53ee8cc1Swenshuai.xi         u32Value = _AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001) & 0xFFFFFF00;
1356*53ee8cc1Swenshuai.xi         //Set Key Index, 0 = Default key
1357*53ee8cc1Swenshuai.xi         u32Value = u32Index == 0 ? (u32Value | 0x1) : (u32Value | u32Index);
1358*53ee8cc1Swenshuai.xi     }
1359*53ee8cc1Swenshuai.xi     else {
1360*53ee8cc1Swenshuai.xi         //Odd Key (HW Parser key)
1361*53ee8cc1Swenshuai.xi         u32Value = _AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001) & 0xFFFF00FF;
1362*53ee8cc1Swenshuai.xi         //Set Key Index, 0 = Default key
1363*53ee8cc1Swenshuai.xi         u32Value = u32Index == 0 ? (u32Value | 0x2) : (u32Value | ((u32Index<<8) & 0xFF00));
1364*53ee8cc1Swenshuai.xi     }
1365*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB6Ctrl[0].Reg0001) , u32Value);
1366*53ee8cc1Swenshuai.xi #else
1367*53ee8cc1Swenshuai.xi     //
1368*53ee8cc1Swenshuai.xi     // For Normal Bank
1369*53ee8cc1Swenshuai.xi     //
1370*53ee8cc1Swenshuai.xi     if (bIsOddKey == FALSE) {
1371*53ee8cc1Swenshuai.xi         //Even Key (default key), [7:0]
1372*53ee8cc1Swenshuai.xi         u32Value = _AESDMA_REG32_R(&_AESDSCMB7Ctrl[0].Reg0001) & 0xFFFFFF00;
1373*53ee8cc1Swenshuai.xi         //Set Key Index, 0 = Default key
1374*53ee8cc1Swenshuai.xi         u32Value = u32Index == 0 ? (u32Value | 0x0) : (u32Value | u32Index);
1375*53ee8cc1Swenshuai.xi     }
1376*53ee8cc1Swenshuai.xi     else {
1377*53ee8cc1Swenshuai.xi         //Odd Key (HW Parser key)
1378*53ee8cc1Swenshuai.xi         u32Value = _AESDMA_REG32_R(&_AESDSCMB7Ctrl[0].Reg0001) & 0xFFFF00FF;
1379*53ee8cc1Swenshuai.xi         //Set Key Index, 0 = Default key
1380*53ee8cc1Swenshuai.xi         u32Value = u32Index == 0 ? (u32Value | 0x2) : (u32Value | ((u32Index<<8) & 0xFF00));
1381*53ee8cc1Swenshuai.xi     }
1382*53ee8cc1Swenshuai.xi     REG32_W((&_AESDSCMB7Ctrl[0].Reg0001) , u32Value);
1383*53ee8cc1Swenshuai.xi #endif  //#if AESDMS_SECURED_BANK_EN
1384*53ee8cc1Swenshuai.xi }
1385*53ee8cc1Swenshuai.xi 
1386*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1387*53ee8cc1Swenshuai.xi /// Enable AES CTR64
1388*53ee8cc1Swenshuai.xi /// @param  bEnable                \b IN: Enable/Disable
1389*53ee8cc1Swenshuai.xi /// @note : AESDMA AES CTR64
1390*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_SET_CTR64(MS_BOOL bEnable)1391*53ee8cc1Swenshuai.xi void AESDMA_SET_CTR64(MS_BOOL bEnable)
1392*53ee8cc1Swenshuai.xi {
1393*53ee8cc1Swenshuai.xi     if(bEnable)
1394*53ee8cc1Swenshuai.xi     {
1395*53ee8cc1Swenshuai.xi         REG32_W((&_AESDMACtrl[0].Dma_PS_Pattern_Mask), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_PS_Pattern_Mask)|AESDMA_CTR_IV_LSB64);
1396*53ee8cc1Swenshuai.xi     }
1397*53ee8cc1Swenshuai.xi     else
1398*53ee8cc1Swenshuai.xi     {
1399*53ee8cc1Swenshuai.xi         REG32_W((&_AESDMACtrl[0].Dma_PS_Pattern_Mask), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_PS_Pattern_Mask) & ~AESDMA_CTR_IV_LSB64);
1400*53ee8cc1Swenshuai.xi     }
1401*53ee8cc1Swenshuai.xi }
1402*53ee8cc1Swenshuai.xi 
1403*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1404*53ee8cc1Swenshuai.xi /// Select Efuse key
1405*53ee8cc1Swenshuai.xi /// @param  u8KeyIdx                \b IN: the index of efuse key
1406*53ee8cc1Swenshuai.xi /// @note : Select Efuse Key
1407*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_SetSecureKeyIdx(MS_U8 u8KeyIdx)1408*53ee8cc1Swenshuai.xi void AESDMA_SetSecureKeyIdx (MS_U8 u8KeyIdx)
1409*53ee8cc1Swenshuai.xi {
1410*53ee8cc1Swenshuai.xi     MS_U32 u32Ctrl;
1411*53ee8cc1Swenshuai.xi 
1412*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
1413*53ee8cc1Swenshuai.xi     u32Ctrl = _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl3_Secure);
1414*53ee8cc1Swenshuai.xi #else
1415*53ee8cc1Swenshuai.xi     u32Ctrl = _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2);
1416*53ee8cc1Swenshuai.xi #endif
1417*53ee8cc1Swenshuai.xi 
1418*53ee8cc1Swenshuai.xi     switch (u8KeyIdx)
1419*53ee8cc1Swenshuai.xi     {
1420*53ee8cc1Swenshuai.xi         case E_DRVAESDMA_SECRETKEY_1:
1421*53ee8cc1Swenshuai.xi             u32Ctrl &= ~AESDMA_USE_SECRET_KEY2;
1422*53ee8cc1Swenshuai.xi             u32Ctrl |= AESDMA_USE_SECRET_KEY;
1423*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
1424*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Ctrl3_Secure), u32Ctrl);
1425*53ee8cc1Swenshuai.xi #else
1426*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), u32Ctrl);
1427*53ee8cc1Swenshuai.xi #endif
1428*53ee8cc1Swenshuai.xi             break;
1429*53ee8cc1Swenshuai.xi         case E_DRVAESDMA_SECRETKEY_2:
1430*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
1431*53ee8cc1Swenshuai.xi             u32Ctrl &= ~AESDMA_USE_SECRET_KEY1;
1432*53ee8cc1Swenshuai.xi             u32Ctrl |= AESDMA_USE_SECRET_KEY2;
1433*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Ctrl3_Secure), u32Ctrl);
1434*53ee8cc1Swenshuai.xi #else
1435*53ee8cc1Swenshuai.xi             u32Ctrl |= AESDMA_USE_SECRET_KEY1;
1436*53ee8cc1Swenshuai.xi             u32Ctrl |= AESDMA_USE_SECRET_KEY2;
1437*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), u32Ctrl);
1438*53ee8cc1Swenshuai.xi #endif
1439*53ee8cc1Swenshuai.xi             break;
1440*53ee8cc1Swenshuai.xi         case E_DRVAESDMA_SECRETKEY_EAEK:
1441*53ee8cc1Swenshuai.xi         {
1442*53ee8cc1Swenshuai.xi             AESDMA_BackupRegisters();
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi             AESDMA_Reset();
1445*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Filein_Num), 0x10); // size
1446*53ee8cc1Swenshuai.xi             AESDMA_Set_CIPHER_ENG(E_AESDMA_CIPHER_ECB, TRUE); // AES ECB decrypt
1447*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Matched_Pat), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Matched_Pat) & 0xFFFF0000 );
1448*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Matched_Pat), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Matched_Pat) | AESDMA_GEN_INTERNALKEY2 | AESDMA_HWKEY_EN); // h72 = 0x0022
1449*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) | AESDMA_CTRL_FILEOUT_START)); // h50 = 0x0001
1450*53ee8cc1Swenshuai.xi             while (!AESDMA_Get_AESDMA_IsFinished());
1451*53ee8cc1Swenshuai.xi             REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) & 0xFFFF0000 )); // h50 = 0x0000
1452*53ee8cc1Swenshuai.xi 
1453*53ee8cc1Swenshuai.xi             AESDMA_RestoreRegisters();
1454*53ee8cc1Swenshuai.xi 
1455*53ee8cc1Swenshuai.xi             REG32_W((&_AESDSCMB6Ctrl[0].Reg0001), (_AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001) & 0xFFFF0000));
1456*53ee8cc1Swenshuai.xi             REG32_W((&_AESDSCMB6Ctrl[0].Reg0001), (_AESDMA_REG32_R(&_AESDSCMB6Ctrl[0].Reg0001) | AESDMA_DSCRMB6_KSLOT_INDEX_USE_INTERNAL_KEY2));  // h00 = 0x0206 , // [7:0] 0x6 use_int_key_2, [15:7] 0x2 default value
1457*53ee8cc1Swenshuai.xi             break;
1458*53ee8cc1Swenshuai.xi         }
1459*53ee8cc1Swenshuai.xi         default:
1460*53ee8cc1Swenshuai.xi             break;
1461*53ee8cc1Swenshuai.xi     }
1462*53ee8cc1Swenshuai.xi }
1463*53ee8cc1Swenshuai.xi 
AESDMA_POWER_SUSPEND(void)1464*53ee8cc1Swenshuai.xi MS_BOOL AESDMA_POWER_SUSPEND(void)
1465*53ee8cc1Swenshuai.xi {
1466*53ee8cc1Swenshuai.xi     SECUREBASECtrl_Buffer =  _AESDMA_REG32_R(&_SECUREBASECtrl[0].Reg0001);
1467*53ee8cc1Swenshuai.xi     return TRUE;
1468*53ee8cc1Swenshuai.xi }
1469*53ee8cc1Swenshuai.xi 
AESDMA_POWER_RESUME(void)1470*53ee8cc1Swenshuai.xi MS_BOOL AESDMA_POWER_RESUME(void)
1471*53ee8cc1Swenshuai.xi {
1472*53ee8cc1Swenshuai.xi     REG32_W((&_SECUREBASECtrl[0].Reg0001), SECUREBASECtrl_Buffer);
1473*53ee8cc1Swenshuai.xi     return TRUE;
1474*53ee8cc1Swenshuai.xi }
1475