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
106*53ee8cc1Swenshuai.xi
107*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
108*53ee8cc1Swenshuai.xi // Driver Compiler Option
109*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
110*53ee8cc1Swenshuai.xi
111*53ee8cc1Swenshuai.xi
112*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
113*53ee8cc1Swenshuai.xi // TSP Hardware Abstraction Layer
114*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
115*53ee8cc1Swenshuai.xi static MS_U32 _u32RegBase = NULL;
116*53ee8cc1Swenshuai.xi static MS_U32 _u32PmRegBase = NULL;
117*53ee8cc1Swenshuai.xi static MS_U32 SECUREBASECtrl_Buffer;
118*53ee8cc1Swenshuai.xi static REG_AESDMACtrl *_AESDMACtrl = (REG_AESDMACtrl*)REG_AESDMACTRL_BASE;
119*53ee8cc1Swenshuai.xi static REG_SHARNGCtrl *_SHARNGCtrl = (REG_SHARNGCtrl*)REG_SHARNGCTRL_BASE;
120*53ee8cc1Swenshuai.xi static REG_AESDMAClk *_AESDMAClk = (REG_AESDMAClk*)REG_AESDMACLK_BASE;
121*53ee8cc1Swenshuai.xi static REG_AESDMAMbx *_AESDMAMbx = (REG_AESDMAMbx*)REG_AESDMAMBX_BASE;
122*53ee8cc1Swenshuai.xi static REG_PARSERCtrl *_PARSERCtrl = (REG_PARSERCtrl*)REG_PARSERCTRL_BASE;
123*53ee8cc1Swenshuai.xi static REG_CIPHERCtrl *_CIPHERCtrl = (REG_CIPHERCtrl*)REG_CIPHERCTRL_BASE;
124*53ee8cc1Swenshuai.xi static REG_DMASECURECtrl *_DMASECURECtrl = (REG_DMASECURECtrl*)REG_DMASECURE_BASE;
125*53ee8cc1Swenshuai.xi static REG_SECUREBASECtrl *_SECUREBASECtrl = (REG_SECUREBASECtrl*)REG_DMASECURE_CTRL_BASE;
126*53ee8cc1Swenshuai.xi static REG_AESDMACtrlEx *_AESDMACtrlEx = (REG_AESDMACtrlEx*)REG_AESDMAEXT_BASE;
127*53ee8cc1Swenshuai.xi static REG_HDCP22Data *_HDCP22Data = (REG_HDCP22Data*)REG_HDCP22_BASE;
128*53ee8cc1Swenshuai.xi static REG_HDCP22SEKCtrl *_HDCP22SekCtrl = (REG_HDCP22SEKCtrl*)REG_HDCP22_SEK;
129*53ee8cc1Swenshuai.xi #define REG32_W(reg, value) do { \
130*53ee8cc1Swenshuai.xi (reg)->H = ((value) >> 16); \
131*53ee8cc1Swenshuai.xi (reg)->L = ((value) & 0x0000FFFF); \
132*53ee8cc1Swenshuai.xi } while(0)
133*53ee8cc1Swenshuai.xi
134*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
135*53ee8cc1Swenshuai.xi // Macro of bit operations
136*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
137*53ee8cc1Swenshuai.xi
_AESDMA_REG32_R(REG32 * reg)138*53ee8cc1Swenshuai.xi MS_U32 _AESDMA_REG32_R(REG32 *reg)
139*53ee8cc1Swenshuai.xi {
140*53ee8cc1Swenshuai.xi MS_U32 value;
141*53ee8cc1Swenshuai.xi
142*53ee8cc1Swenshuai.xi value = (reg)->H << 16;
143*53ee8cc1Swenshuai.xi value |= (reg)->L;
144*53ee8cc1Swenshuai.xi
145*53ee8cc1Swenshuai.xi return value;
146*53ee8cc1Swenshuai.xi }
147*53ee8cc1Swenshuai.xi
148*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
149*53ee8cc1Swenshuai.xi // Inline Function
150*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_AESDMA_SetBank(MS_U32 u32NonPmBankAddr,MS_U32 u32PmBankAddr)151*53ee8cc1Swenshuai.xi void HAL_AESDMA_SetBank(MS_U32 u32NonPmBankAddr, MS_U32 u32PmBankAddr)
152*53ee8cc1Swenshuai.xi {
153*53ee8cc1Swenshuai.xi _u32RegBase = u32NonPmBankAddr;
154*53ee8cc1Swenshuai.xi _u32PmRegBase = u32PmBankAddr;
155*53ee8cc1Swenshuai.xi _AESDMACtrl = (REG_AESDMACtrl*)(_u32RegBase + REG_AESDMACTRL_BASE);
156*53ee8cc1Swenshuai.xi _SHARNGCtrl = (REG_SHARNGCtrl*)(_u32RegBase + REG_SHARNGCTRL_BASE);
157*53ee8cc1Swenshuai.xi _AESDMAClk = (REG_AESDMAClk*)(_u32RegBase + REG_AESDMACLK_BASE);
158*53ee8cc1Swenshuai.xi _AESDMAMbx = (REG_AESDMAMbx*)(_u32PmRegBase + REG_AESDMAMBX_BASE);
159*53ee8cc1Swenshuai.xi _PARSERCtrl = (REG_PARSERCtrl*)(_u32RegBase + REG_PARSERCTRL_BASE);
160*53ee8cc1Swenshuai.xi _CIPHERCtrl = (REG_CIPHERCtrl*)(_u32RegBase + REG_CIPHERCTRL_BASE);
161*53ee8cc1Swenshuai.xi _DMASECURECtrl = (REG_DMASECURECtrl*)(_u32RegBase + REG_DMASECURE_BASE);
162*53ee8cc1Swenshuai.xi _SECUREBASECtrl = (REG_SECUREBASECtrl*)(_u32RegBase + REG_DMASECURE_CTRL_BASE);
163*53ee8cc1Swenshuai.xi _AESDMACtrlEx = (REG_AESDMACtrlEx*)(_u32RegBase + REG_AESDMAEXT_BASE);
164*53ee8cc1Swenshuai.xi _HDCP22Data = (REG_HDCP22Data*)(_u32RegBase + REG_HDCP22_BASE);
165*53ee8cc1Swenshuai.xi _HDCP22SekCtrl = (REG_HDCP22SEKCtrl*)(_u32RegBase + REG_HDCP22_SEK);
166*53ee8cc1Swenshuai.xi }
167*53ee8cc1Swenshuai.xi
AESDMA_GetMIU1Base(void)168*53ee8cc1Swenshuai.xi MS_U32 AESDMA_GetMIU1Base(void)
169*53ee8cc1Swenshuai.xi {
170*53ee8cc1Swenshuai.xi return HAL_MIU1_BASE;
171*53ee8cc1Swenshuai.xi }
172*53ee8cc1Swenshuai.xi
AESDMA_GetMIU2Base(void)173*53ee8cc1Swenshuai.xi MS_U32 AESDMA_GetMIU2Base(void)
174*53ee8cc1Swenshuai.xi {
175*53ee8cc1Swenshuai.xi //not support
176*53ee8cc1Swenshuai.xi return FALSE;
177*53ee8cc1Swenshuai.xi }
178*53ee8cc1Swenshuai.xi
AESDMA_Reset(void)179*53ee8cc1Swenshuai.xi void AESDMA_Reset(void)
180*53ee8cc1Swenshuai.xi {
181*53ee8cc1Swenshuai.xi MS_U32 Reg_AESDMA;
182*53ee8cc1Swenshuai.xi int i = 0;
183*53ee8cc1Swenshuai.xi Reg_AESDMA = (MS_U32)(&_AESDMACtrl[0].Dma_Ctrl);
184*53ee8cc1Swenshuai.xi
185*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , 0x00000000); // clear ctrl register
186*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|(AESDMA_CTRL_SW_RST)); // sw rst
187*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)&~(AESDMA_CTRL_SW_RST));
188*53ee8cc1Swenshuai.xi
189*53ee8cc1Swenshuai.xi // reset all AESdma register
190*53ee8cc1Swenshuai.xi for (i = 0 ; i < 19 ; i++)
191*53ee8cc1Swenshuai.xi {
192*53ee8cc1Swenshuai.xi REG32_W((REG32 *)(Reg_AESDMA+(i*8)), 0x00000000);
193*53ee8cc1Swenshuai.xi }
194*53ee8cc1Swenshuai.xi // reset secure_dma3_ctrl register
195*53ee8cc1Swenshuai.xi REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl), 0x00000000);
196*53ee8cc1Swenshuai.xi
197*53ee8cc1Swenshuai.xi // reset hw_parser_ctrl register
198*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1),0x01000000);
199*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),0x00000000);
200*53ee8cc1Swenshuai.xi }
201*53ee8cc1Swenshuai.xi
AESDMA_Set_CipherKey(MS_U32 * cipherkey)202*53ee8cc1Swenshuai.xi void AESDMA_Set_CipherKey(MS_U32 *cipherkey)
203*53ee8cc1Swenshuai.xi {
204*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_CipherKey_L.Key_L) , cipherkey[0]);
205*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_CipherKey_L.Key_H) , cipherkey[1]);
206*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_CipherKey_H.Key_L) , cipherkey[2]);
207*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_CipherKey_H.Key_H) , cipherkey[3]);
208*53ee8cc1Swenshuai.xi }
209*53ee8cc1Swenshuai.xi
AESDMA_Set_InitVector(MS_U32 * pInitVector)210*53ee8cc1Swenshuai.xi void AESDMA_Set_InitVector(MS_U32 *pInitVector)
211*53ee8cc1Swenshuai.xi {
212*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_InitVector_L.IV_L), pInitVector[0]);
213*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_InitVector_L.IV_H), pInitVector[1]);
214*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_InitVector_H.IV_L), pInitVector[2]);
215*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_InitVector_H.IV_H), pInitVector[3]);
216*53ee8cc1Swenshuai.xi }
217*53ee8cc1Swenshuai.xi
AESDMA_Sel_Key(MS_BOOL keysel)218*53ee8cc1Swenshuai.xi void AESDMA_Sel_Key(MS_BOOL keysel)
219*53ee8cc1Swenshuai.xi {
220*53ee8cc1Swenshuai.xi }
221*53ee8cc1Swenshuai.xi
AESDMA_Sel_SecureKey(void)222*53ee8cc1Swenshuai.xi void AESDMA_Sel_SecureKey(void)
223*53ee8cc1Swenshuai.xi {
224*53ee8cc1Swenshuai.xi MS_U32 u32Ctrl = _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2);
225*53ee8cc1Swenshuai.xi u32Ctrl |= AESDMA_USE_SECRET_KEY;
226*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), u32Ctrl);
227*53ee8cc1Swenshuai.xi }
228*53ee8cc1Swenshuai.xi
AESDMA_Set_FileinDesc(MS_U32 FileinAddr,MS_U32 FileinNum)229*53ee8cc1Swenshuai.xi void AESDMA_Set_FileinDesc(MS_U32 FileinAddr , MS_U32 FileinNum)
230*53ee8cc1Swenshuai.xi {
231*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Filein_Addr), FileinAddr);
232*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Filein_Num), FileinNum);
233*53ee8cc1Swenshuai.xi }
234*53ee8cc1Swenshuai.xi
AESDMA_Set_FileoutDesc(MS_U32 FileoutSAddr,MS_U32 FileoutEAddr)235*53ee8cc1Swenshuai.xi void AESDMA_Set_FileoutDesc(MS_U32 FileoutSAddr , MS_U32 FileoutEAddr)
236*53ee8cc1Swenshuai.xi {
237*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Fileout_SAddr), FileoutSAddr);
238*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Fileout_EAddr), FileoutEAddr);
239*53ee8cc1Swenshuai.xi }
240*53ee8cc1Swenshuai.xi
AESDMA_Start(MS_BOOL AESDMAStart)241*53ee8cc1Swenshuai.xi void AESDMA_Start(MS_BOOL AESDMAStart)
242*53ee8cc1Swenshuai.xi {
243*53ee8cc1Swenshuai.xi if (AESDMAStart)
244*53ee8cc1Swenshuai.xi {
245*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) &~ AESDMA_CTRL_FILEOUT_START &~ AESDMA_CTRL_FILEIN_START));
246*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl), (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) | AESDMA_CTRL_FILEOUT_START | AESDMA_CTRL_FILEIN_START));
247*53ee8cc1Swenshuai.xi }
248*53ee8cc1Swenshuai.xi else
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)&~(AESDMA_CTRL_FILEOUT_START|AESDMA_CTRL_FILEIN_START));
251*53ee8cc1Swenshuai.xi }
252*53ee8cc1Swenshuai.xi }
253*53ee8cc1Swenshuai.xi
AESDMA_Set_PS_PTN(MS_U32 MatchPTN)254*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_PTN(MS_U32 MatchPTN)
255*53ee8cc1Swenshuai.xi {
256*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_PS_Pattern) , MatchPTN);
257*53ee8cc1Swenshuai.xi }
258*53ee8cc1Swenshuai.xi
AESDMA_Set_PS_Mask(MS_U32 MatchMask)259*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_Mask(MS_U32 MatchMask)
260*53ee8cc1Swenshuai.xi {
261*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_PS_Pattern_Mask) , MatchMask);
262*53ee8cc1Swenshuai.xi }
263*53ee8cc1Swenshuai.xi
AESDMA_Set_PS_ENG(MS_BOOL PSin_en,MS_BOOL PSout_en)264*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_ENG(MS_BOOL PSin_en, MS_BOOL PSout_en)
265*53ee8cc1Swenshuai.xi {
266*53ee8cc1Swenshuai.xi MS_U32 u32PSin, u32PSout;
267*53ee8cc1Swenshuai.xi
268*53ee8cc1Swenshuai.xi u32PSin = AESDMA_ENG_PS_IN_EN & (PSin_en<<20);
269*53ee8cc1Swenshuai.xi u32PSout = AESDMA_ENG_PS_OUT_EN & (PSout_en<<21);
270*53ee8cc1Swenshuai.xi
271*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|(u32PSin|u32PSout));
272*53ee8cc1Swenshuai.xi }
273*53ee8cc1Swenshuai.xi
AESDMA_Get_PS_MatchedBytecnt(void)274*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_PS_MatchedBytecnt(void)
275*53ee8cc1Swenshuai.xi {
276*53ee8cc1Swenshuai.xi return _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Matched_Btyecnt);
277*53ee8cc1Swenshuai.xi }
278*53ee8cc1Swenshuai.xi
AESDMA_Get_PS_MatchedPTN(void)279*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_PS_MatchedPTN(void)
280*53ee8cc1Swenshuai.xi {
281*53ee8cc1Swenshuai.xi return _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Matched_Pat);
282*53ee8cc1Swenshuai.xi }
283*53ee8cc1Swenshuai.xi
AESDMA_Set_PS_Release(void)284*53ee8cc1Swenshuai.xi void AESDMA_Set_PS_Release(void)
285*53ee8cc1Swenshuai.xi {
286*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|AESDMA_ENG_PS_RELEASE);
287*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl), _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) & ~AESDMA_ENG_PS_RELEASE);
288*53ee8cc1Swenshuai.xi }
289*53ee8cc1Swenshuai.xi
AESDMA_Get_AESDMA_Status(void)290*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_AESDMA_Status(void)
291*53ee8cc1Swenshuai.xi {
292*53ee8cc1Swenshuai.xi return _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_PVR_Status);
293*53ee8cc1Swenshuai.xi }
294*53ee8cc1Swenshuai.xi
AESDMA_Get_AESDMA_IsFinished(void)295*53ee8cc1Swenshuai.xi MS_U32 AESDMA_Get_AESDMA_IsFinished(void)
296*53ee8cc1Swenshuai.xi {
297*53ee8cc1Swenshuai.xi return (_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_PVR_Status) & AESDMA_IS_FINISHED);
298*53ee8cc1Swenshuai.xi }
299*53ee8cc1Swenshuai.xi
AESDMA_Set_CIPHER_ENG(AESDMA_CipherMode eMode,MS_BOOL Descrypt)300*53ee8cc1Swenshuai.xi void AESDMA_Set_CIPHER_ENG(AESDMA_CipherMode eMode, MS_BOOL Descrypt)
301*53ee8cc1Swenshuai.xi {
302*53ee8cc1Swenshuai.xi MS_U32 u32Cmd = 0;
303*53ee8cc1Swenshuai.xi
304*53ee8cc1Swenshuai.xi switch (eMode)
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_ECB:
307*53ee8cc1Swenshuai.xi u32Cmd |= AESDMA_ENG_AES_EN;
308*53ee8cc1Swenshuai.xi break;
309*53ee8cc1Swenshuai.xi
310*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CTR:
311*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CTR_MODE);
312*53ee8cc1Swenshuai.xi break;
313*53ee8cc1Swenshuai.xi
314*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CBC:
315*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CBC_MODE);
316*53ee8cc1Swenshuai.xi break;
317*53ee8cc1Swenshuai.xi
318*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_ECB:
319*53ee8cc1Swenshuai.xi u32Cmd |= AESDMA_ENG_DES_EN;
320*53ee8cc1Swenshuai.xi break;
321*53ee8cc1Swenshuai.xi
322*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CTR:
323*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CTR_MODE);
324*53ee8cc1Swenshuai.xi break;
325*53ee8cc1Swenshuai.xi
326*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CBC:
327*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CBC_MODE);
328*53ee8cc1Swenshuai.xi break;
329*53ee8cc1Swenshuai.xi
330*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_ECB:
331*53ee8cc1Swenshuai.xi u32Cmd |= AESDMA_ENG_TDES_EN;
332*53ee8cc1Swenshuai.xi break;
333*53ee8cc1Swenshuai.xi
334*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CTR:
335*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CTR_MODE);
336*53ee8cc1Swenshuai.xi break;
337*53ee8cc1Swenshuai.xi
338*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CBC:
339*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CBC_MODE);
340*53ee8cc1Swenshuai.xi break;
341*53ee8cc1Swenshuai.xi
342*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CTS_CBC:
343*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CTS_CBC_MODE);
344*53ee8cc1Swenshuai.xi break;
345*53ee8cc1Swenshuai.xi
346*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CTS_ECB:
347*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_AES_EN | AESDMA_ENG_CTS_ECB_MODE);
348*53ee8cc1Swenshuai.xi break;
349*53ee8cc1Swenshuai.xi
350*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CTS_CBC:
351*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CTS_CBC_MODE);
352*53ee8cc1Swenshuai.xi break;
353*53ee8cc1Swenshuai.xi
354*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CTS_ECB:
355*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_DES_EN | AESDMA_ENG_CTS_ECB_MODE);
356*53ee8cc1Swenshuai.xi break;
357*53ee8cc1Swenshuai.xi
358*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CTS_CBC:
359*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CTS_CBC_MODE);
360*53ee8cc1Swenshuai.xi break;
361*53ee8cc1Swenshuai.xi
362*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CTS_ECB:
363*53ee8cc1Swenshuai.xi u32Cmd |= (AESDMA_ENG_TDES_EN | AESDMA_ENG_CTS_ECB_MODE);
364*53ee8cc1Swenshuai.xi break;
365*53ee8cc1Swenshuai.xi default:
366*53ee8cc1Swenshuai.xi return;
367*53ee8cc1Swenshuai.xi }
368*53ee8cc1Swenshuai.xi
369*53ee8cc1Swenshuai.xi if( eMode >= E_AESDMA_CIPHER_DES_ECB )
370*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2),_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2) | AESDMA_DMA_USE_TDES_EN);
371*53ee8cc1Swenshuai.xi
372*53ee8cc1Swenshuai.xi u32Cmd |= AESDMA_ENG_DESCRYPT & (Descrypt<<25);
373*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl),(( _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl) & (~DmaCtrlSet)) | u32Cmd ) );
374*53ee8cc1Swenshuai.xi }
375*53ee8cc1Swenshuai.xi
AESDMA_QueryCipherMode(AESDMA_CipherMode eMode)376*53ee8cc1Swenshuai.xi MS_U32 AESDMA_QueryCipherMode(AESDMA_CipherMode eMode)
377*53ee8cc1Swenshuai.xi {
378*53ee8cc1Swenshuai.xi MS_U32 u32Result = 1;
379*53ee8cc1Swenshuai.xi
380*53ee8cc1Swenshuai.xi switch (eMode)
381*53ee8cc1Swenshuai.xi {
382*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_ECB:
383*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CTR:
384*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CBC:
385*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_ECB:
386*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CTR:
387*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CBC:
388*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_ECB:
389*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CTR:
390*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CBC:
391*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CTS_CBC:
392*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_CTS_ECB:
393*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CTS_CBC:
394*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_DES_CTS_ECB:
395*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CTS_CBC:
396*53ee8cc1Swenshuai.xi case E_AESDMA_CIPHER_TDES_CTS_ECB:
397*53ee8cc1Swenshuai.xi u32Result = 0;
398*53ee8cc1Swenshuai.xi break;
399*53ee8cc1Swenshuai.xi default:
400*53ee8cc1Swenshuai.xi break;
401*53ee8cc1Swenshuai.xi }
402*53ee8cc1Swenshuai.xi return u32Result;
403*53ee8cc1Swenshuai.xi
404*53ee8cc1Swenshuai.xi }
405*53ee8cc1Swenshuai.xi
AESDMA_Set_MIU_Path(MS_BOOL MIU_R,MS_BOOL MIU_W)406*53ee8cc1Swenshuai.xi void AESDMA_Set_MIU_Path(MS_BOOL MIU_R, MS_BOOL MIU_W)
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), RESET_FLAG1(_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2), AESDMA_CTRL_BANK_R));
409*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2), RESET_FLAG1(_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2), AESDMA_CTRL_BANK_W));
410*53ee8cc1Swenshuai.xi
411*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))));
412*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))));
413*53ee8cc1Swenshuai.xi }
414*53ee8cc1Swenshuai.xi
AESDMA_Set_MIU2_Path(MS_BOOL MIU_R,MS_BOOL MIU_W)415*53ee8cc1Swenshuai.xi void AESDMA_Set_MIU2_Path(MS_BOOL MIU_R, MS_BOOL MIU_W)
416*53ee8cc1Swenshuai.xi {
417*53ee8cc1Swenshuai.xi // Not support
418*53ee8cc1Swenshuai.xi }
419*53ee8cc1Swenshuai.xi
AESDMA_Enable_Int(void)420*53ee8cc1Swenshuai.xi void AESDMA_Enable_Int(void)
421*53ee8cc1Swenshuai.xi {
422*53ee8cc1Swenshuai.xi #ifndef CONFIG_MBOOT
423*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2)|AESDMA_INT_EN);
424*53ee8cc1Swenshuai.xi #endif
425*53ee8cc1Swenshuai.xi }
426*53ee8cc1Swenshuai.xi
AESDMA_Disable_Int(void)427*53ee8cc1Swenshuai.xi void AESDMA_Disable_Int(void)
428*53ee8cc1Swenshuai.xi {
429*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2)&~AESDMA_INT_EN);
430*53ee8cc1Swenshuai.xi }
431*53ee8cc1Swenshuai.xi
AESDMA_Clear_Int(void)432*53ee8cc1Swenshuai.xi void AESDMA_Clear_Int(void)
433*53ee8cc1Swenshuai.xi {
434*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2)|AESDMA_WADR_ERR_CLR);
435*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2)&~AESDMA_WADR_ERR_CLR);
436*53ee8cc1Swenshuai.xi }
437*53ee8cc1Swenshuai.xi
AESDMA_HW_Patch(void)438*53ee8cc1Swenshuai.xi void AESDMA_HW_Patch(void)
439*53ee8cc1Swenshuai.xi {
440*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , _AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl)|AESDMA_ECO_FIX_LAST_BYTE);
441*53ee8cc1Swenshuai.xi }
442*53ee8cc1Swenshuai.xi
AESDMA_Enable_Clk(void)443*53ee8cc1Swenshuai.xi void AESDMA_Enable_Clk(void)
444*53ee8cc1Swenshuai.xi {
445*53ee8cc1Swenshuai.xi MS_U32 u32Val;
446*53ee8cc1Swenshuai.xi
447*53ee8cc1Swenshuai.xi //1. clk_aesdma
448*53ee8cc1Swenshuai.xi u32Val = _AESDMA_REG32_R(&_AESDMAClk[0].Reg_Gate_Clk_AESDMA);
449*53ee8cc1Swenshuai.xi u32Val &= ~0xF0000; //Set Clk to 172M, Enable Clk
450*53ee8cc1Swenshuai.xi REG32_W((&_AESDMAClk[0].Reg_Gate_Clk_AESDMA) , u32Val);
451*53ee8cc1Swenshuai.xi
452*53ee8cc1Swenshuai.xi //
453*53ee8cc1Swenshuai.xi // Due to the security concern
454*53ee8cc1Swenshuai.xi // Set this CLK at SBOOT
455*53ee8cc1Swenshuai.xi //
456*53ee8cc1Swenshuai.xi
457*53ee8cc1Swenshuai.xi //2. clk_rc
458*53ee8cc1Swenshuai.xi //Enable 0x1239_0x03[3:0] = 4b'1111
459*53ee8cc1Swenshuai.xi
460*53ee8cc1Swenshuai.xi //3. Enable Rng
461*53ee8cc1Swenshuai.xi u32Val = _AESDMA_REG32_R(&_SECUREBASECtrl[0].Reg0001);
462*53ee8cc1Swenshuai.xi u32Val |= REG_RNG_EN;
463*53ee8cc1Swenshuai.xi REG32_W((&_SECUREBASECtrl[0].Reg0001) , u32Val);
464*53ee8cc1Swenshuai.xi
465*53ee8cc1Swenshuai.xi }
466*53ee8cc1Swenshuai.xi
AESDMA_Disable_Clk(void)467*53ee8cc1Swenshuai.xi void AESDMA_Disable_Clk(void)
468*53ee8cc1Swenshuai.xi {
469*53ee8cc1Swenshuai.xi REG32_W((&_AESDMAClk[0].Reg_Gate_Clk_AESDMA) , _AESDMA_REG32_R(&_AESDMAClk[0].Reg_Gate_Clk_AESDMA) | AESDMA_CLK_DISABLE);
470*53ee8cc1Swenshuai.xi }
471*53ee8cc1Swenshuai.xi
AESDMA_Rand(void)472*53ee8cc1Swenshuai.xi MS_U8 AESDMA_Rand(void)
473*53ee8cc1Swenshuai.xi {
474*53ee8cc1Swenshuai.xi MS_U8 u8RN = 0x00;
475*53ee8cc1Swenshuai.xi u8RN = (MS_U8)_AESDMA_REG32_R(&_SECUREBASECtrl[0].Reg0203)&0xFF;
476*53ee8cc1Swenshuai.xi
477*53ee8cc1Swenshuai.xi return u8RN;
478*53ee8cc1Swenshuai.xi }
479*53ee8cc1Swenshuai.xi
SHA_Reset(void)480*53ee8cc1Swenshuai.xi void SHA_Reset(void)
481*53ee8cc1Swenshuai.xi {
482*53ee8cc1Swenshuai.xi MS_U32 Reg_SHARNG;
483*53ee8cc1Swenshuai.xi int i = 0;
484*53ee8cc1Swenshuai.xi Reg_SHARNG = (MS_U32)(&_SHARNGCtrl[0].Sha_Ctrl);
485*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , SHARNG_CTRL_SHA_RST); // 0->1
486*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , (_AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&(~SHARNG_CTRL_SHA_RST))); // 1->0
487*53ee8cc1Swenshuai.xi
488*53ee8cc1Swenshuai.xi // reset all SHA & RNG register
489*53ee8cc1Swenshuai.xi for (i = 0 ; i < 7 ; i++)
490*53ee8cc1Swenshuai.xi {
491*53ee8cc1Swenshuai.xi REG32_W((REG32 *)(Reg_SHARNG+(i*8)), 0x00000000);
492*53ee8cc1Swenshuai.xi }
493*53ee8cc1Swenshuai.xi }
494*53ee8cc1Swenshuai.xi
SHA_Get_Status(void)495*53ee8cc1Swenshuai.xi MS_U32 SHA_Get_Status(void)
496*53ee8cc1Swenshuai.xi {
497*53ee8cc1Swenshuai.xi return _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Status);
498*53ee8cc1Swenshuai.xi }
499*53ee8cc1Swenshuai.xi
SHA_SelMode(AESDMA_SHAMode eMode)500*53ee8cc1Swenshuai.xi void SHA_SelMode(AESDMA_SHAMode eMode)
501*53ee8cc1Swenshuai.xi {
502*53ee8cc1Swenshuai.xi MS_U32 u32Cmd = 0;
503*53ee8cc1Swenshuai.xi
504*53ee8cc1Swenshuai.xi switch (eMode)
505*53ee8cc1Swenshuai.xi {
506*53ee8cc1Swenshuai.xi case E_AESDMA_SHA1:
507*53ee8cc1Swenshuai.xi u32Cmd |= (SHARNG_CTRL_SHA_MSG_BLOCK_NUM);
508*53ee8cc1Swenshuai.xi break;
509*53ee8cc1Swenshuai.xi
510*53ee8cc1Swenshuai.xi case E_AESDMA_SHA256:
511*53ee8cc1Swenshuai.xi u32Cmd |= (SHARNG_CTRL_SHA_SEL_SHA256 | SHARNG_CTRL_SHA_MSG_BLOCK_NUM);
512*53ee8cc1Swenshuai.xi break;
513*53ee8cc1Swenshuai.xi
514*53ee8cc1Swenshuai.xi default:
515*53ee8cc1Swenshuai.xi return;
516*53ee8cc1Swenshuai.xi }
517*53ee8cc1Swenshuai.xi
518*53ee8cc1Swenshuai.xi //Turn off speedup mode
519*53ee8cc1Swenshuai.xi //u32Cmd |= SHARNG_CTRL_SPEED_MODE_N;
520*53ee8cc1Swenshuai.xi
521*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl), _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl) | u32Cmd);
522*53ee8cc1Swenshuai.xi }
523*53ee8cc1Swenshuai.xi
SHA_SetAddress(MS_U32 u32Addr)524*53ee8cc1Swenshuai.xi void SHA_SetAddress(MS_U32 u32Addr)
525*53ee8cc1Swenshuai.xi {
526*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Start), u32Addr);
527*53ee8cc1Swenshuai.xi }
528*53ee8cc1Swenshuai.xi
SHA_SetLength(MS_U32 u32Size)529*53ee8cc1Swenshuai.xi void SHA_SetLength(MS_U32 u32Size)
530*53ee8cc1Swenshuai.xi {
531*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Length), u32Size);
532*53ee8cc1Swenshuai.xi }
533*53ee8cc1Swenshuai.xi
SHA_Start(MS_BOOL SHAStart)534*53ee8cc1Swenshuai.xi void SHA_Start(MS_BOOL SHAStart)
535*53ee8cc1Swenshuai.xi {
536*53ee8cc1Swenshuai.xi if(SHAStart)
537*53ee8cc1Swenshuai.xi {
538*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&~(SHARNG_CTRL_SHA_FIRE_ONCE));
539*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)|(SHARNG_CTRL_SHA_FIRE_ONCE));
540*53ee8cc1Swenshuai.xi }
541*53ee8cc1Swenshuai.xi else
542*53ee8cc1Swenshuai.xi {
543*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&~(SHARNG_CTRL_SHA_FIRE_ONCE));
544*53ee8cc1Swenshuai.xi }
545*53ee8cc1Swenshuai.xi }
546*53ee8cc1Swenshuai.xi
SHA_Out(MS_U32 u32Buf)547*53ee8cc1Swenshuai.xi void SHA_Out(MS_U32 u32Buf)
548*53ee8cc1Swenshuai.xi {
549*53ee8cc1Swenshuai.xi MS_U32 Index, u32Size, u32offset;
550*53ee8cc1Swenshuai.xi MS_U32 eMode = _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&SHARNG_CTRL_SHA_SEL_SHA256;
551*53ee8cc1Swenshuai.xi
552*53ee8cc1Swenshuai.xi if(eMode == SHARNG_CTRL_SHA_SEL_SHA256)
553*53ee8cc1Swenshuai.xi {
554*53ee8cc1Swenshuai.xi u32Size = DIGEST_SIZE_SHA256;
555*53ee8cc1Swenshuai.xi u32offset = 0;
556*53ee8cc1Swenshuai.xi }
557*53ee8cc1Swenshuai.xi else
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi u32Size = DIGEST_SIZE_SHA1;
560*53ee8cc1Swenshuai.xi u32offset = 3;
561*53ee8cc1Swenshuai.xi }
562*53ee8cc1Swenshuai.xi
563*53ee8cc1Swenshuai.xi for( Index = 0; Index < u32Size; Index++ )
564*53ee8cc1Swenshuai.xi {
565*53ee8cc1Swenshuai.xi *((MS_U32 *)u32Buf + Index) = _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Out[Index + u32offset]);
566*53ee8cc1Swenshuai.xi }
567*53ee8cc1Swenshuai.xi //Set "1" to idle state after reg_read_sha_ready = 1
568*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)|(SHARNG_CTRL_SHA_CLR));
569*53ee8cc1Swenshuai.xi }
570*53ee8cc1Swenshuai.xi
SHA_SetByPassTable(MS_BOOL bEnable)571*53ee8cc1Swenshuai.xi void SHA_SetByPassTable(MS_BOOL bEnable)
572*53ee8cc1Swenshuai.xi {
573*53ee8cc1Swenshuai.xi if (bEnable == TRUE)
574*53ee8cc1Swenshuai.xi {
575*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)|SHARNG_CTRL_SHA_BYPASS_TABLE_EN);
576*53ee8cc1Swenshuai.xi }
577*53ee8cc1Swenshuai.xi else
578*53ee8cc1Swenshuai.xi {
579*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&~(SHARNG_CTRL_SHA_BYPASS_TABLE_EN));
580*53ee8cc1Swenshuai.xi }
581*53ee8cc1Swenshuai.xi }
582*53ee8cc1Swenshuai.xi
SHA_SetInitialHashEn(MS_BOOL bEnable)583*53ee8cc1Swenshuai.xi void SHA_SetInitialHashEn(MS_BOOL bEnable)
584*53ee8cc1Swenshuai.xi {
585*53ee8cc1Swenshuai.xi if (bEnable == TRUE)
586*53ee8cc1Swenshuai.xi {
587*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)|SHARNG_CTRL_SHA_INITIAL_HASH_EN);
588*53ee8cc1Swenshuai.xi }
589*53ee8cc1Swenshuai.xi else
590*53ee8cc1Swenshuai.xi {
591*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&~(SHARNG_CTRL_SHA_INITIAL_HASH_EN));
592*53ee8cc1Swenshuai.xi }
593*53ee8cc1Swenshuai.xi }
594*53ee8cc1Swenshuai.xi
SHA_SetShaManualMode(MS_BOOL bEnable)595*53ee8cc1Swenshuai.xi void SHA_SetShaManualMode(MS_BOOL bEnable)
596*53ee8cc1Swenshuai.xi {
597*53ee8cc1Swenshuai.xi if (bEnable == TRUE)
598*53ee8cc1Swenshuai.xi {
599*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)|SHARNG_CTRL_SHA_WORKMODE_MANUAL_EN);
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi else
602*53ee8cc1Swenshuai.xi {
603*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&~(SHARNG_CTRL_SHA_WORKMODE_MANUAL_EN));
604*53ee8cc1Swenshuai.xi }
605*53ee8cc1Swenshuai.xi }
606*53ee8cc1Swenshuai.xi
SHA_SetInitialSha(MS_U32 u32Buf)607*53ee8cc1Swenshuai.xi void SHA_SetInitialSha(MS_U32 u32Buf)
608*53ee8cc1Swenshuai.xi {
609*53ee8cc1Swenshuai.xi MS_U32 Index, u32Size, u32offset;
610*53ee8cc1Swenshuai.xi MS_U32 eMode = _AESDMA_REG32_R(&_SHARNGCtrl[0].Sha_Ctrl)&SHARNG_CTRL_SHA_SEL_SHA256;
611*53ee8cc1Swenshuai.xi
612*53ee8cc1Swenshuai.xi if(eMode == SHARNG_CTRL_SHA_SEL_SHA256)
613*53ee8cc1Swenshuai.xi {
614*53ee8cc1Swenshuai.xi u32Size = DIGEST_SIZE_SHA256;
615*53ee8cc1Swenshuai.xi u32offset = 0;
616*53ee8cc1Swenshuai.xi }
617*53ee8cc1Swenshuai.xi else
618*53ee8cc1Swenshuai.xi {
619*53ee8cc1Swenshuai.xi u32Size = DIGEST_SIZE_SHA1;
620*53ee8cc1Swenshuai.xi u32offset = 3;
621*53ee8cc1Swenshuai.xi }
622*53ee8cc1Swenshuai.xi
623*53ee8cc1Swenshuai.xi for( Index = 0; Index < u32Size; Index++ )
624*53ee8cc1Swenshuai.xi {
625*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Sha_Out[Index + u32offset]), *((MS_U32 *)u32Buf + Index));
626*53ee8cc1Swenshuai.xi }
627*53ee8cc1Swenshuai.xi }
628*53ee8cc1Swenshuai.xi
629*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
630*53ee8cc1Swenshuai.xi /// Enable mobf one way function
631*53ee8cc1Swenshuai.xi /// @param NULL
632*53ee8cc1Swenshuai.xi
633*53ee8cc1Swenshuai.xi /// @note : disable read mobf key, and could not enable read mobf key anymore
634*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_OneWay(void)635*53ee8cc1Swenshuai.xi void MOBF_OneWay(void)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)|(MOBF_ONEWAY_EN));
638*53ee8cc1Swenshuai.xi }
639*53ee8cc1Swenshuai.xi
640*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
641*53ee8cc1Swenshuai.xi /// Set MOBF encrypt key
642*53ee8cc1Swenshuai.xi /// @param u32WriteKey \b IN: Encrypt Key
643*53ee8cc1Swenshuai.xi
644*53ee8cc1Swenshuai.xi /// @note
645*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_WriteKey(MS_U32 u32WriteKey)646*53ee8cc1Swenshuai.xi void MOBF_WriteKey(MS_U32 u32WriteKey)
647*53ee8cc1Swenshuai.xi {
648*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].MOBF_KeyW) , u32WriteKey);
649*53ee8cc1Swenshuai.xi }
650*53ee8cc1Swenshuai.xi
651*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
652*53ee8cc1Swenshuai.xi /// Set MOBF decrypt key
653*53ee8cc1Swenshuai.xi /// @param u32ReadKey \b IN: Decrypt Key
654*53ee8cc1Swenshuai.xi
655*53ee8cc1Swenshuai.xi /// @note
656*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_ReadKey(MS_U32 u32ReadKey)657*53ee8cc1Swenshuai.xi void MOBF_ReadKey(MS_U32 u32ReadKey)
658*53ee8cc1Swenshuai.xi {
659*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].MOBF_KeyR) , u32ReadKey);
660*53ee8cc1Swenshuai.xi }
661*53ee8cc1Swenshuai.xi
662*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
663*53ee8cc1Swenshuai.xi /// Enable MOBF in MIU write port
664*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable/Disable
665*53ee8cc1Swenshuai.xi
666*53ee8cc1Swenshuai.xi /// @note : MOBF Encrypt
667*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_WriteEnable(MS_BOOL bEnable)668*53ee8cc1Swenshuai.xi void MOBF_WriteEnable(MS_BOOL bEnable)
669*53ee8cc1Swenshuai.xi {
670*53ee8cc1Swenshuai.xi if(bEnable)
671*53ee8cc1Swenshuai.xi {
672*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_WRITE_EN));
673*53ee8cc1Swenshuai.xi }
674*53ee8cc1Swenshuai.xi else
675*53ee8cc1Swenshuai.xi {
676*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_WRITE_EN));
677*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)|(MOBF_IN_MIU_WRITE_EN));
678*53ee8cc1Swenshuai.xi }
679*53ee8cc1Swenshuai.xi }
680*53ee8cc1Swenshuai.xi
681*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
682*53ee8cc1Swenshuai.xi /// Enable MOBF in MIU read port
683*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable/Disable
684*53ee8cc1Swenshuai.xi
685*53ee8cc1Swenshuai.xi /// @note : MOBF Decrypt
686*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_ReadEnable(MS_BOOL bEnable)687*53ee8cc1Swenshuai.xi void MOBF_ReadEnable(MS_BOOL bEnable)
688*53ee8cc1Swenshuai.xi {
689*53ee8cc1Swenshuai.xi if(bEnable)
690*53ee8cc1Swenshuai.xi {
691*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_READ_EN));
692*53ee8cc1Swenshuai.xi }
693*53ee8cc1Swenshuai.xi else
694*53ee8cc1Swenshuai.xi {
695*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)&(~MOBF_IN_MIU_READ_EN));
696*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rng_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl)|(MOBF_IN_MIU_READ_EN));
697*53ee8cc1Swenshuai.xi }
698*53ee8cc1Swenshuai.xi }
699*53ee8cc1Swenshuai.xi
700*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
701*53ee8cc1Swenshuai.xi /// Disable TDES
702*53ee8cc1Swenshuai.xi ///
703*53ee8cc1Swenshuai.xi
704*53ee8cc1Swenshuai.xi /// @note : MOBF Decrypt
705*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MOBF_DisableTDES(void)706*53ee8cc1Swenshuai.xi void MOBF_DisableTDES(void)
707*53ee8cc1Swenshuai.xi {
708*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl2),_AESDMA_REG32_R(&_AESDMACtrl[0].Dma_Ctrl2) & (~AESDMA_DMA_USE_TDES_EN));
709*53ee8cc1Swenshuai.xi }
710*53ee8cc1Swenshuai.xi
AESDMA_Parser_Set_Mode(AESDMA_ParserMode eMode)711*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_Mode(AESDMA_ParserMode eMode)
712*53ee8cc1Swenshuai.xi {
713*53ee8cc1Swenshuai.xi MS_U32 u32Cmd = 0;
714*53ee8cc1Swenshuai.xi
715*53ee8cc1Swenshuai.xi switch (eMode)
716*53ee8cc1Swenshuai.xi {
717*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_TS_PKT192:
718*53ee8cc1Swenshuai.xi u32Cmd |= (TS_MODE | PKT192_MODE);
719*53ee8cc1Swenshuai.xi break;
720*53ee8cc1Swenshuai.xi
721*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_TS_PKT192_CLEAR:
722*53ee8cc1Swenshuai.xi u32Cmd |= (TS_MODE | PKT192_MODE | CLEAR_MODE);
723*53ee8cc1Swenshuai.xi break;
724*53ee8cc1Swenshuai.xi
725*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_TS_PKT188:
726*53ee8cc1Swenshuai.xi u32Cmd |= (TS_MODE);
727*53ee8cc1Swenshuai.xi u32Cmd &= (~PKT192_MODE);
728*53ee8cc1Swenshuai.xi break;
729*53ee8cc1Swenshuai.xi
730*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_TS_PKT188_CLEAR:
731*53ee8cc1Swenshuai.xi u32Cmd |= (TS_MODE | CLEAR_MODE);
732*53ee8cc1Swenshuai.xi u32Cmd &= (~PKT192_MODE);
733*53ee8cc1Swenshuai.xi break;
734*53ee8cc1Swenshuai.xi
735*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_HDCP20_PKT192:
736*53ee8cc1Swenshuai.xi u32Cmd |= (HDCP20_MODE | PKT192_MODE);
737*53ee8cc1Swenshuai.xi break;
738*53ee8cc1Swenshuai.xi
739*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_HDCP20_PKT192_CLEAR:
740*53ee8cc1Swenshuai.xi u32Cmd |= (HDCP20_MODE | PKT192_MODE | CLEAR_MODE);
741*53ee8cc1Swenshuai.xi break;
742*53ee8cc1Swenshuai.xi
743*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_HDCP20_PKT188:
744*53ee8cc1Swenshuai.xi u32Cmd |= (HDCP20_MODE);
745*53ee8cc1Swenshuai.xi u32Cmd &= (~PKT192_MODE);
746*53ee8cc1Swenshuai.xi break;
747*53ee8cc1Swenshuai.xi
748*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_HDCP20_PKT188_CLEAR:
749*53ee8cc1Swenshuai.xi u32Cmd |= (HDCP20_MODE | CLEAR_MODE);
750*53ee8cc1Swenshuai.xi u32Cmd &= (~PKT192_MODE);
751*53ee8cc1Swenshuai.xi break;
752*53ee8cc1Swenshuai.xi
753*53ee8cc1Swenshuai.xi default:
754*53ee8cc1Swenshuai.xi return;
755*53ee8cc1Swenshuai.xi }
756*53ee8cc1Swenshuai.xi
757*53ee8cc1Swenshuai.xi u32Cmd |= (AUTO_MODE | INIT_TRUST);
758*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~ParserCtrlSet)) | u32Cmd ) );
759*53ee8cc1Swenshuai.xi }
760*53ee8cc1Swenshuai.xi
761*53ee8cc1Swenshuai.xi
AESDMA_Parser_Insert_Scrmb(MS_BOOL bEnable)762*53ee8cc1Swenshuai.xi void AESDMA_Parser_Insert_Scrmb(MS_BOOL bEnable)
763*53ee8cc1Swenshuai.xi {
764*53ee8cc1Swenshuai.xi if(bEnable)
765*53ee8cc1Swenshuai.xi {
766*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~INSERT_SCRMB)) );
767*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (INSERT_SCRMB)) );
768*53ee8cc1Swenshuai.xi }
769*53ee8cc1Swenshuai.xi else
770*53ee8cc1Swenshuai.xi {
771*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~INSERT_SCRMB)) );
772*53ee8cc1Swenshuai.xi }
773*53ee8cc1Swenshuai.xi }
774*53ee8cc1Swenshuai.xi
AESDMA_Parser_Remove_Scrmb(MS_BOOL bEnable)775*53ee8cc1Swenshuai.xi void AESDMA_Parser_Remove_Scrmb(MS_BOOL bEnable)
776*53ee8cc1Swenshuai.xi {
777*53ee8cc1Swenshuai.xi if(bEnable)
778*53ee8cc1Swenshuai.xi {
779*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~REMOVE_SCRMB)) );
780*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (REMOVE_SCRMB)) );
781*53ee8cc1Swenshuai.xi }
782*53ee8cc1Swenshuai.xi else
783*53ee8cc1Swenshuai.xi {
784*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~REMOVE_SCRMB)) );
785*53ee8cc1Swenshuai.xi }
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi
AESDMA_Parser_Mask_Scrmb(MS_BOOL bEnable)788*53ee8cc1Swenshuai.xi void AESDMA_Parser_Mask_Scrmb(MS_BOOL bEnable)
789*53ee8cc1Swenshuai.xi {
790*53ee8cc1Swenshuai.xi if(bEnable)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~TS_SCRMB_MASK)) );
793*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (TS_SCRMB_MASK)) );
794*53ee8cc1Swenshuai.xi }
795*53ee8cc1Swenshuai.xi else
796*53ee8cc1Swenshuai.xi {
797*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~TS_SCRMB_MASK)) );
798*53ee8cc1Swenshuai.xi }
799*53ee8cc1Swenshuai.xi }
800*53ee8cc1Swenshuai.xi
AESDMA_Parser_Bypass_Pid(MS_BOOL bEnable)801*53ee8cc1Swenshuai.xi void AESDMA_Parser_Bypass_Pid(MS_BOOL bEnable)
802*53ee8cc1Swenshuai.xi {
803*53ee8cc1Swenshuai.xi if(bEnable)
804*53ee8cc1Swenshuai.xi {
805*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~BYPASS_PID)) );
806*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) | (BYPASS_PID)) );
807*53ee8cc1Swenshuai.xi }
808*53ee8cc1Swenshuai.xi else
809*53ee8cc1Swenshuai.xi {
810*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~BYPASS_PID)) );
811*53ee8cc1Swenshuai.xi }
812*53ee8cc1Swenshuai.xi }
813*53ee8cc1Swenshuai.xi
AESDMA_Parser_Set_ScrmbPattern(AESDMA_ScrmbPattern ePattern)814*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_ScrmbPattern(AESDMA_ScrmbPattern ePattern)
815*53ee8cc1Swenshuai.xi {
816*53ee8cc1Swenshuai.xi MS_U32 u32Cmd = 0;
817*53ee8cc1Swenshuai.xi
818*53ee8cc1Swenshuai.xi switch (ePattern)
819*53ee8cc1Swenshuai.xi {
820*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_SCRMB_10:
821*53ee8cc1Swenshuai.xi u32Cmd |= (SCRMB_PATTERN10);
822*53ee8cc1Swenshuai.xi break;
823*53ee8cc1Swenshuai.xi
824*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_SCRMB_11:
825*53ee8cc1Swenshuai.xi u32Cmd |= (SCRMB_PATTERN11);
826*53ee8cc1Swenshuai.xi break;
827*53ee8cc1Swenshuai.xi
828*53ee8cc1Swenshuai.xi default:
829*53ee8cc1Swenshuai.xi u32Cmd &= ~(SCRMB_PATTERN11);
830*53ee8cc1Swenshuai.xi break;
831*53ee8cc1Swenshuai.xi }
832*53ee8cc1Swenshuai.xi
833*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~SCRMB_INITVALUE)) | u32Cmd ) );
834*53ee8cc1Swenshuai.xi
835*53ee8cc1Swenshuai.xi }
836*53ee8cc1Swenshuai.xi
AESDMA_Parser_Set_AddedScrmbPattern(AESDMA_ScrmbPattern ePattern)837*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_AddedScrmbPattern(AESDMA_ScrmbPattern ePattern)
838*53ee8cc1Swenshuai.xi {
839*53ee8cc1Swenshuai.xi MS_U32 u32Cmd = 0;
840*53ee8cc1Swenshuai.xi
841*53ee8cc1Swenshuai.xi switch (ePattern)
842*53ee8cc1Swenshuai.xi {
843*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_SCRMB_10:
844*53ee8cc1Swenshuai.xi u32Cmd |= (SCRMB_PATTERN10_ADD);
845*53ee8cc1Swenshuai.xi break;
846*53ee8cc1Swenshuai.xi
847*53ee8cc1Swenshuai.xi case E_AESDMA_PARSER_SCRMB_11:
848*53ee8cc1Swenshuai.xi u32Cmd |= (SCRMB_PATTERN11_ADD);
849*53ee8cc1Swenshuai.xi break;
850*53ee8cc1Swenshuai.xi
851*53ee8cc1Swenshuai.xi default:
852*53ee8cc1Swenshuai.xi return;
853*53ee8cc1Swenshuai.xi }
854*53ee8cc1Swenshuai.xi
855*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~SCRMB_INITVALUE_ADD)) | u32Cmd ) );
856*53ee8cc1Swenshuai.xi
857*53ee8cc1Swenshuai.xi }
858*53ee8cc1Swenshuai.xi
AESDMA_Parser_Set_Pid(MS_U8 u8Index,MS_U16 u16Pid)859*53ee8cc1Swenshuai.xi void AESDMA_Parser_Set_Pid(MS_U8 u8Index, MS_U16 u16Pid)
860*53ee8cc1Swenshuai.xi {
861*53ee8cc1Swenshuai.xi if(u8Index==0)
862*53ee8cc1Swenshuai.xi {
863*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~PARSER_PID0_MASK)) | (u16Pid<<16) ) );
864*53ee8cc1Swenshuai.xi }
865*53ee8cc1Swenshuai.xi else if(u8Index==1)
866*53ee8cc1Swenshuai.xi {
867*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1),(( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~PARSER_PID1_MASK)) | u16Pid ) );
868*53ee8cc1Swenshuai.xi }
869*53ee8cc1Swenshuai.xi else
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi printf("Edison do not support other PID\n");
872*53ee8cc1Swenshuai.xi }
873*53ee8cc1Swenshuai.xi }
874*53ee8cc1Swenshuai.xi
AESDMA_Parser_Query_PidCount(void)875*53ee8cc1Swenshuai.xi MS_U8 AESDMA_Parser_Query_PidCount(void)
876*53ee8cc1Swenshuai.xi {
877*53ee8cc1Swenshuai.xi return PARSER_PID_COUNT;
878*53ee8cc1Swenshuai.xi }
879*53ee8cc1Swenshuai.xi
AESDMA_Parser_Enable_HWParser(MS_BOOL bEnable)880*53ee8cc1Swenshuai.xi void AESDMA_Parser_Enable_HWParser(MS_BOOL bEnable)
881*53ee8cc1Swenshuai.xi {
882*53ee8cc1Swenshuai.xi if(bEnable)
883*53ee8cc1Swenshuai.xi {
884*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~HW_PARSER_MODE)) );
885*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) | (HW_PARSER_MODE)) );
886*53ee8cc1Swenshuai.xi }
887*53ee8cc1Swenshuai.xi else
888*53ee8cc1Swenshuai.xi {
889*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),( _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Ctrl) & (~HW_PARSER_MODE)) );
890*53ee8cc1Swenshuai.xi }
891*53ee8cc1Swenshuai.xi
892*53ee8cc1Swenshuai.xi //make sure CC_CTRL_BY_ACPU is set 0
893*53ee8cc1Swenshuai.xi REG32_W((&_CIPHERCtrl[0].Cipher_Ctrl),( _AESDMA_REG32_R(&_CIPHERCtrl[0].Cipher_Ctrl) & (~CC_CTRL_BY_ACPU)) );
894*53ee8cc1Swenshuai.xi }
895*53ee8cc1Swenshuai.xi
RSA_ClearInt(void)896*53ee8cc1Swenshuai.xi void RSA_ClearInt(void)
897*53ee8cc1Swenshuai.xi {
898*53ee8cc1Swenshuai.xi //RSA interrupt clear
899*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_RData) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_RData)|(RSA_INT_CLR));
900*53ee8cc1Swenshuai.xi }
901*53ee8cc1Swenshuai.xi
RSA_Reset(void)902*53ee8cc1Swenshuai.xi void RSA_Reset(void)
903*53ee8cc1Swenshuai.xi {
904*53ee8cc1Swenshuai.xi //RSA Rst
905*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)|(RSA_CTRL_RSA_RST));
906*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_RSA_RST));
907*53ee8cc1Swenshuai.xi
908*53ee8cc1Swenshuai.xi //add polling RSA status before load data to SRAM
909*53ee8cc1Swenshuai.xi while (( RSA_GetStatus() & RSA_STATUS_RSA_BUSY ) != 0);
910*53ee8cc1Swenshuai.xi }
911*53ee8cc1Swenshuai.xi
RSA_Ind32Ctrl(MS_U8 u8dirction)912*53ee8cc1Swenshuai.xi void RSA_Ind32Ctrl(MS_U8 u8dirction)
913*53ee8cc1Swenshuai.xi {
914*53ee8cc1Swenshuai.xi //[1] reg_ind32_direction 0: Read. 1: Write
915*53ee8cc1Swenshuai.xi if(u8dirction==1)
916*53ee8cc1Swenshuai.xi {
917*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)|(RSA_IND32_CTRL_DIRECTION_WRITE));
918*53ee8cc1Swenshuai.xi }
919*53ee8cc1Swenshuai.xi else
920*53ee8cc1Swenshuai.xi {
921*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)&(~RSA_IND32_CTRL_DIRECTION_WRITE));
922*53ee8cc1Swenshuai.xi }
923*53ee8cc1Swenshuai.xi
924*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));
925*53ee8cc1Swenshuai.xi
926*53ee8cc1Swenshuai.xi }
927*53ee8cc1Swenshuai.xi
RSA_LoadSram(MS_U32 * u32Buf,RSA_IND32Address eMode)928*53ee8cc1Swenshuai.xi void RSA_LoadSram(MS_U32 *u32Buf, RSA_IND32Address eMode)
929*53ee8cc1Swenshuai.xi {
930*53ee8cc1Swenshuai.xi MS_U32 u32Cmd = 0;
931*53ee8cc1Swenshuai.xi MS_U32 i = 0;
932*53ee8cc1Swenshuai.xi MS_U32 WData_H = 0;
933*53ee8cc1Swenshuai.xi MS_U32 WData_L = 0;
934*53ee8cc1Swenshuai.xi
935*53ee8cc1Swenshuai.xi switch (eMode)
936*53ee8cc1Swenshuai.xi {
937*53ee8cc1Swenshuai.xi case E_RSA_ADDRESS_E:
938*53ee8cc1Swenshuai.xi u32Cmd |= (RSA_E_BASE_ADDR);
939*53ee8cc1Swenshuai.xi break;
940*53ee8cc1Swenshuai.xi
941*53ee8cc1Swenshuai.xi case E_RSA_ADDRESS_N:
942*53ee8cc1Swenshuai.xi u32Cmd |= (RSA_N_BASE_ADDR);
943*53ee8cc1Swenshuai.xi break;
944*53ee8cc1Swenshuai.xi
945*53ee8cc1Swenshuai.xi case E_RSA_ADDRESS_A:
946*53ee8cc1Swenshuai.xi u32Cmd |= (RSA_A_BASE_ADDR);
947*53ee8cc1Swenshuai.xi break;
948*53ee8cc1Swenshuai.xi
949*53ee8cc1Swenshuai.xi default:
950*53ee8cc1Swenshuai.xi return;
951*53ee8cc1Swenshuai.xi }
952*53ee8cc1Swenshuai.xi
953*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Addr) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Addr)&(~RSA_ADDRESS_MASK))|u32Cmd));
954*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)|(RSA_INDIRECT_START));
955*53ee8cc1Swenshuai.xi
956*53ee8cc1Swenshuai.xi for( i = 0; i < 64; i++ )
957*53ee8cc1Swenshuai.xi {
958*53ee8cc1Swenshuai.xi if( eMode == E_RSA_ADDRESS_E )
959*53ee8cc1Swenshuai.xi {
960*53ee8cc1Swenshuai.xi WData_L = (((*(u32Buf+i))>>8)&0xFF00)|(((*(u32Buf+i))>>24)&0xFF);
961*53ee8cc1Swenshuai.xi WData_H = (((*(u32Buf+i))>>8)&0xFF)|(((*(u32Buf+i))<<8)&0xFF00);
962*53ee8cc1Swenshuai.xi }
963*53ee8cc1Swenshuai.xi else
964*53ee8cc1Swenshuai.xi {
965*53ee8cc1Swenshuai.xi WData_L = (((*(u32Buf-i))>>8)&0xFF00)|(((*(u32Buf-i))>>24)&0xFF);
966*53ee8cc1Swenshuai.xi WData_H = (((*(u32Buf-i))>>8)&0xFF)|(((*(u32Buf-i))<<8)&0xFF00);
967*53ee8cc1Swenshuai.xi }
968*53ee8cc1Swenshuai.xi
969*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Addr) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Addr)&(~RSA_WDATA_MASK_L))|(WData_L<<16)));
970*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_WData) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_WData)&(~RSA_WDATA_MASK_H))|WData_H));
971*53ee8cc1Swenshuai.xi }
972*53ee8cc1Swenshuai.xi
973*53ee8cc1Swenshuai.xi }
974*53ee8cc1Swenshuai.xi
RSA_SetKeyLength(MS_U32 u32keylen)975*53ee8cc1Swenshuai.xi void RSA_SetKeyLength(MS_U32 u32keylen)
976*53ee8cc1Swenshuai.xi {
977*53ee8cc1Swenshuai.xi //[13:8] n_len_e: key length
978*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_KEY_LENGTH_MASK))|(u32keylen<<8));
979*53ee8cc1Swenshuai.xi }
980*53ee8cc1Swenshuai.xi
RSA_SetKeyType(MS_U8 u8hwkey,MS_U8 u8pubkey)981*53ee8cc1Swenshuai.xi void RSA_SetKeyType(MS_U8 u8hwkey, MS_U8 u8pubkey)
982*53ee8cc1Swenshuai.xi {
983*53ee8cc1Swenshuai.xi //[1] hw_key_e : 0 : software key, 1: hardware key
984*53ee8cc1Swenshuai.xi //[2] e_pub_e : 0: pvivate key, 1: public key
985*53ee8cc1Swenshuai.xi if(u8hwkey==1)
986*53ee8cc1Swenshuai.xi {
987*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)|(RSA_CTRL_SEL_HW_KEY));
988*53ee8cc1Swenshuai.xi }
989*53ee8cc1Swenshuai.xi else
990*53ee8cc1Swenshuai.xi {
991*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_SEL_HW_KEY));
992*53ee8cc1Swenshuai.xi }
993*53ee8cc1Swenshuai.xi
994*53ee8cc1Swenshuai.xi if(u8pubkey==1)
995*53ee8cc1Swenshuai.xi {
996*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)|(RSA_CTRL_SEL_PUBLIC_KEY));
997*53ee8cc1Swenshuai.xi }
998*53ee8cc1Swenshuai.xi else
999*53ee8cc1Swenshuai.xi {
1000*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ctrl) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl)&(~RSA_CTRL_SEL_PUBLIC_KEY));
1001*53ee8cc1Swenshuai.xi }
1002*53ee8cc1Swenshuai.xi
1003*53ee8cc1Swenshuai.xi }
1004*53ee8cc1Swenshuai.xi
RSA_ExponetialStart(void)1005*53ee8cc1Swenshuai.xi void RSA_ExponetialStart(void)
1006*53ee8cc1Swenshuai.xi {
1007*53ee8cc1Swenshuai.xi //RSA exp start
1008*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_RData) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_RData)|(RSA_EXP_START));
1009*53ee8cc1Swenshuai.xi }
1010*53ee8cc1Swenshuai.xi
RSA_GetStatus(void)1011*53ee8cc1Swenshuai.xi MS_U32 RSA_GetStatus(void)
1012*53ee8cc1Swenshuai.xi {
1013*53ee8cc1Swenshuai.xi return _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ctrl) & RSA_STATUS_MASK;
1014*53ee8cc1Swenshuai.xi }
1015*53ee8cc1Swenshuai.xi
RSA_FileOutStart(void)1016*53ee8cc1Swenshuai.xi void RSA_FileOutStart(void)
1017*53ee8cc1Swenshuai.xi {
1018*53ee8cc1Swenshuai.xi //RSA ind32_start
1019*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Start) , _AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Start)|(RSA_INDIRECT_START));
1020*53ee8cc1Swenshuai.xi }
1021*53ee8cc1Swenshuai.xi
RSA_SetFileOutAddr(MS_U32 u32offset)1022*53ee8cc1Swenshuai.xi void RSA_SetFileOutAddr(MS_U32 u32offset)
1023*53ee8cc1Swenshuai.xi {
1024*53ee8cc1Swenshuai.xi MS_U32 u32Addr = 0;
1025*53ee8cc1Swenshuai.xi u32Addr = RSA_Z_BASE_ADDR + u32offset;
1026*53ee8cc1Swenshuai.xi
1027*53ee8cc1Swenshuai.xi REG32_W((&_SHARNGCtrl[0].Rsa_Ind32_Addr) , ((_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_Addr)&(~RSA_ADDRESS_MASK))|u32Addr));
1028*53ee8cc1Swenshuai.xi }
1029*53ee8cc1Swenshuai.xi
RSA_FileOut(void)1030*53ee8cc1Swenshuai.xi MS_U32 RSA_FileOut(void)
1031*53ee8cc1Swenshuai.xi {
1032*53ee8cc1Swenshuai.xi MS_U32 u32out_L = 0;
1033*53ee8cc1Swenshuai.xi MS_U32 u32out_H = 0;
1034*53ee8cc1Swenshuai.xi
1035*53ee8cc1Swenshuai.xi u32out_L = (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_WData)&RSA_RDATA_MASK_L)>>16;
1036*53ee8cc1Swenshuai.xi u32out_H = (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rsa_Ind32_RData)&RSA_RDATA_MASK_H)<<16;
1037*53ee8cc1Swenshuai.xi
1038*53ee8cc1Swenshuai.xi return (u32out_H|u32out_L);
1039*53ee8cc1Swenshuai.xi }
1040*53ee8cc1Swenshuai.xi
RSA_Get_RSA_IsFinished(void)1041*53ee8cc1Swenshuai.xi MS_U32 RSA_Get_RSA_IsFinished(void)
1042*53ee8cc1Swenshuai.xi {
1043*53ee8cc1Swenshuai.xi return (RSA_GetStatus()&RSA_STATUS_RSA_BUSY);
1044*53ee8cc1Swenshuai.xi }
1045*53ee8cc1Swenshuai.xi
1046*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1047*53ee8cc1Swenshuai.xi /// Get status of Secret Key in Normal bank
1048*53ee8cc1Swenshuai.xi /// @param N/A
1049*53ee8cc1Swenshuai.xi /// @note : Get Status
1050*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_IsSecretKeyInNormalBank(void)1051*53ee8cc1Swenshuai.xi MS_U32 AESDMA_IsSecretKeyInNormalBank(void)
1052*53ee8cc1Swenshuai.xi {
1053*53ee8cc1Swenshuai.xi return (_AESDMA_REG32_R(&_SHARNGCtrl[0].Rng_Ctrl) & (SECRET_KEY_IN_NORMAL_BANK));
1054*53ee8cc1Swenshuai.xi }
1055*53ee8cc1Swenshuai.xi
1056*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1057*53ee8cc1Swenshuai.xi /// Enable Two keys (Odd/Even) in using HW auto select key.
1058*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable/Disable
1059*53ee8cc1Swenshuai.xi
1060*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1061*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Parser_Enable_Two_Keys(MS_BOOL bEnable)1062*53ee8cc1Swenshuai.xi void AESDMA_Parser_Enable_Two_Keys(MS_BOOL bEnable)
1063*53ee8cc1Swenshuai.xi {
1064*53ee8cc1Swenshuai.xi if(bEnable)
1065*53ee8cc1Swenshuai.xi {
1066*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1), _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) | (SCRMB_ENABLE_TWO_KEY) );
1067*53ee8cc1Swenshuai.xi }
1068*53ee8cc1Swenshuai.xi else
1069*53ee8cc1Swenshuai.xi {
1070*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1), _AESDMA_REG32_R(&_PARSERCtrl[0].Parser_Pid1) & (~SCRMB_ENABLE_TWO_KEY) );
1071*53ee8cc1Swenshuai.xi }
1072*53ee8cc1Swenshuai.xi }
1073*53ee8cc1Swenshuai.xi
1074*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1075*53ee8cc1Swenshuai.xi /// Set Odd keys in using HW auto select key.
1076*53ee8cc1Swenshuai.xi /// @param cipherkey
1077*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1078*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_CipherOddKey(MS_U32 * cipherkey)1079*53ee8cc1Swenshuai.xi void AESDMA_Set_CipherOddKey(MS_U32 *cipherkey)
1080*53ee8cc1Swenshuai.xi {
1081*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_L.Key_L) , cipherkey[0]);
1082*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_L.Key_H) , cipherkey[1]);
1083*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_H.Key_L) , cipherkey[2]);
1084*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_CipherKey_H.Key_H) , cipherkey[3]);
1085*53ee8cc1Swenshuai.xi }
1086*53ee8cc1Swenshuai.xi
1087*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1088*53ee8cc1Swenshuai.xi /// Set Odd IVs in using HW auto select key.
1089*53ee8cc1Swenshuai.xi /// @param cipherkey
1090*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1091*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_OddInitVector(MS_U32 * pInitVector)1092*53ee8cc1Swenshuai.xi void AESDMA_Set_OddInitVector(MS_U32 *pInitVector)
1093*53ee8cc1Swenshuai.xi {
1094*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_L.IV_L), pInitVector[0]);
1095*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_L.IV_H), pInitVector[1]);
1096*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_H.IV_L), pInitVector[2]);
1097*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrlEx[0].Dma_InitVector_H.IV_H), pInitVector[3]);
1098*53ee8cc1Swenshuai.xi }
1099*53ee8cc1Swenshuai.xi
1100*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1101*53ee8cc1Swenshuai.xi /// Set Even keys in using HW auto select key.
1102*53ee8cc1Swenshuai.xi /// @param cipherkey
1103*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1104*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_CipherEvenKey(MS_U32 * cipherkey)1105*53ee8cc1Swenshuai.xi void AESDMA_Set_CipherEvenKey(MS_U32 *cipherkey)
1106*53ee8cc1Swenshuai.xi {
1107*53ee8cc1Swenshuai.xi AESDMA_Set_CipherKey(cipherkey);
1108*53ee8cc1Swenshuai.xi }
1109*53ee8cc1Swenshuai.xi
1110*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1111*53ee8cc1Swenshuai.xi /// Set Even IVs in using HW auto select key.
1112*53ee8cc1Swenshuai.xi /// @param cipherkey
1113*53ee8cc1Swenshuai.xi /// @note : Hardware Parser Decrypt
1114*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_Set_EvenInitVector(MS_U32 * pInitVector)1115*53ee8cc1Swenshuai.xi void AESDMA_Set_EvenInitVector(MS_U32 *pInitVector)
1116*53ee8cc1Swenshuai.xi {
1117*53ee8cc1Swenshuai.xi AESDMA_Set_InitVector(pInitVector);
1118*53ee8cc1Swenshuai.xi }
1119*53ee8cc1Swenshuai.xi
1120*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1121*53ee8cc1Swenshuai.xi /// Set HDCP Data
1122*53ee8cc1Swenshuai.xi /// @param u8Idx \b IN: Index
1123*53ee8cc1Swenshuai.xi /// @param pu8Data \b IN: Data array
1124*53ee8cc1Swenshuai.xi /// @param pu8privData \b IN: Private data array
1125*53ee8cc1Swenshuai.xi /// @note : Set HDCP2.2
1126*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HDCP_ProcessCipher(MS_U8 u8Idx,MS_U8 * pu8Data,MS_U8 * pu8privData)1127*53ee8cc1Swenshuai.xi void HDCP_ProcessCipher (MS_U8 u8Idx, MS_U8 *pu8Data, MS_U8* pu8privData)
1128*53ee8cc1Swenshuai.xi {
1129*53ee8cc1Swenshuai.xi //
1130*53ee8cc1Swenshuai.xi //Ks^LC128:
1131*53ee8cc1Swenshuai.xi //P0: Bank 0x162A_h��00~07
1132*53ee8cc1Swenshuai.xi //P1: Bank 0x162B_h��00~07
1133*53ee8cc1Swenshuai.xi //P2: Bank 0x162C_h��00~07
1134*53ee8cc1Swenshuai.xi //P3: Bank 0x162D_h��00~07
1135*53ee8cc1Swenshuai.xi //Riv:
1136*53ee8cc1Swenshuai.xi //P0: Bank 0x162A_h��08~0B
1137*53ee8cc1Swenshuai.xi //P1: Bank 0x162B_h��08~0B
1138*53ee8cc1Swenshuai.xi //P2: Bank 0x162C_h��08~0B
1139*53ee8cc1Swenshuai.xi //P3: Bank 0x162D_h��08~0B
1140*53ee8cc1Swenshuai.xi //
1141*53ee8cc1Swenshuai.xi
1142*53ee8cc1Swenshuai.xi REG_HDCP22Data *pData = NULL;
1143*53ee8cc1Swenshuai.xi REG_HDCP22SEKCtrl *pCtrl = NULL;
1144*53ee8cc1Swenshuai.xi MS_U32 offset = 0;
1145*53ee8cc1Swenshuai.xi MS_U32 BKOffset = 0;
1146*53ee8cc1Swenshuai.xi
1147*53ee8cc1Swenshuai.xi if (u8Idx >= MAX_HDMI_PORT_MUN)
1148*53ee8cc1Swenshuai.xi {
1149*53ee8cc1Swenshuai.xi printf ("[Error] %s (%d), Wrong HDMI Port\n", __FUNCTION__, __LINE__);
1150*53ee8cc1Swenshuai.xi return;
1151*53ee8cc1Swenshuai.xi }
1152*53ee8cc1Swenshuai.xi
1153*53ee8cc1Swenshuai.xi MS_U32 *cipherkey = (MS_U32 *)((void *)pu8Data);
1154*53ee8cc1Swenshuai.xi MS_U32 *riv = (MS_U32 *)((void *)pu8privData);
1155*53ee8cc1Swenshuai.xi
1156*53ee8cc1Swenshuai.xi offset = u8Idx * 0x200;
1157*53ee8cc1Swenshuai.xi BKOffset = u8Idx * 0x200;
1158*53ee8cc1Swenshuai.xi
1159*53ee8cc1Swenshuai.xi pData = (REG_HDCP22Data*)((MS_U32)_HDCP22Data + offset);
1160*53ee8cc1Swenshuai.xi pCtrl = (REG_HDCP22SEKCtrl*)((MS_U32)_HDCP22SekCtrl + BKOffset);
1161*53ee8cc1Swenshuai.xi
1162*53ee8cc1Swenshuai.xi //Content Keys
1163*53ee8cc1Swenshuai.xi REG32_W((&pData[0].Hdcp22_ContentKey[0]) , cipherkey[0]);
1164*53ee8cc1Swenshuai.xi REG32_W((&pData[0].Hdcp22_ContentKey[1]) , cipherkey[1]);
1165*53ee8cc1Swenshuai.xi REG32_W((&pData[0].Hdcp22_ContentKey[2]) , cipherkey[2]);
1166*53ee8cc1Swenshuai.xi REG32_W((&pData[0].Hdcp22_ContentKey[3]) , cipherkey[3]);
1167*53ee8cc1Swenshuai.xi
1168*53ee8cc1Swenshuai.xi //RIV
1169*53ee8cc1Swenshuai.xi REG32_W((&pData[0].Hdcp22_Riv[0]) , riv[0]);
1170*53ee8cc1Swenshuai.xi REG32_W((&pData[0].Hdcp22_Riv[1]) , riv[1]);
1171*53ee8cc1Swenshuai.xi
1172*53ee8cc1Swenshuai.xi //Set SKE successful
1173*53ee8cc1Swenshuai.xi REG32_W((&pCtrl[0].SEK), (_AESDMA_REG32_R(&pCtrl[0].SEK) | HDCP_SEK_BIT0));
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi
1176*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1177*53ee8cc1Swenshuai.xi /// Get the status of HW supports HDCP2.2
1178*53ee8cc1Swenshuai.xi /// @param N/A
1179*53ee8cc1Swenshuai.xi /// @note : Support HDCP2.2
1180*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HDCP_GetHdcpCipherState(MS_U8 u8Idx,MS_U8 * pu8State)1181*53ee8cc1Swenshuai.xi void HDCP_GetHdcpCipherState(MS_U8 u8Idx, MS_U8 *pu8State)
1182*53ee8cc1Swenshuai.xi {
1183*53ee8cc1Swenshuai.xi //
1184*53ee8cc1Swenshuai.xi // Set SKE successful:
1185*53ee8cc1Swenshuai.xi // P0: Bank 0x162A_h��0E[0]
1186*53ee8cc1Swenshuai.xi // P1: Bank 0x162B_h��0E[0]
1187*53ee8cc1Swenshuai.xi // P2: Bank 0x162C_h��0E[0]
1188*53ee8cc1Swenshuai.xi // P3: Bank 0x162D_h��0E[0]
1189*53ee8cc1Swenshuai.xi //
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi #define HDCP_SUPPORT_EN 0x00000001
1192*53ee8cc1Swenshuai.xi REG_HDCP22SEKCtrl *pCtrl = NULL;
1193*53ee8cc1Swenshuai.xi MS_U16 BKOffset = 0;
1194*53ee8cc1Swenshuai.xi
1195*53ee8cc1Swenshuai.xi if (u8Idx >= MAX_HDMI_PORT_MUN)
1196*53ee8cc1Swenshuai.xi {
1197*53ee8cc1Swenshuai.xi printf ("[Error] %s (%d), Wrong HDMI Port\n", __FUNCTION__, __LINE__);
1198*53ee8cc1Swenshuai.xi return;
1199*53ee8cc1Swenshuai.xi }
1200*53ee8cc1Swenshuai.xi
1201*53ee8cc1Swenshuai.xi BKOffset = u8Idx * 0x200;
1202*53ee8cc1Swenshuai.xi pCtrl = (REG_HDCP22SEKCtrl*)((MS_U32)_HDCP22SekCtrl + BKOffset);
1203*53ee8cc1Swenshuai.xi *pu8State = (MS_U8)(_AESDMA_REG32_R(&pCtrl[0].SEK) & HDCP_SUPPORT_EN);
1204*53ee8cc1Swenshuai.xi }
1205*53ee8cc1Swenshuai.xi
1206*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1207*53ee8cc1Swenshuai.xi /// Reset AESDMA
1208*53ee8cc1Swenshuai.xi /// @param N/A
1209*53ee8cc1Swenshuai.xi /// @note : Clear Registers, not to do sw reset
1210*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
AESDMA_NormalReset(void)1211*53ee8cc1Swenshuai.xi void AESDMA_NormalReset(void)
1212*53ee8cc1Swenshuai.xi {
1213*53ee8cc1Swenshuai.xi MS_U32 Reg_AESDMA;
1214*53ee8cc1Swenshuai.xi int i = 0;
1215*53ee8cc1Swenshuai.xi Reg_AESDMA = (MS_U32)(&_AESDMACtrl[0].Dma_Ctrl);
1216*53ee8cc1Swenshuai.xi
1217*53ee8cc1Swenshuai.xi REG32_W((&_AESDMACtrl[0].Dma_Ctrl) , 0x00000000); // clear ctrl register
1218*53ee8cc1Swenshuai.xi
1219*53ee8cc1Swenshuai.xi // reset all AESdma register
1220*53ee8cc1Swenshuai.xi for (i = 0 ; i < 19 ; i++)
1221*53ee8cc1Swenshuai.xi {
1222*53ee8cc1Swenshuai.xi REG32_W((REG32 *)(Reg_AESDMA+(i*8)), 0x00000000);
1223*53ee8cc1Swenshuai.xi }
1224*53ee8cc1Swenshuai.xi // reset secure_dma3_ctrl register
1225*53ee8cc1Swenshuai.xi REG32_W((&_DMASECURECtrl[0].Secure_dma3_ctrl), 0x00000000);
1226*53ee8cc1Swenshuai.xi
1227*53ee8cc1Swenshuai.xi // reset hw_parser_ctrl register
1228*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Pid1),0x00000000);
1229*53ee8cc1Swenshuai.xi REG32_W((&_PARSERCtrl[0].Parser_Ctrl),0x00000000);
1230*53ee8cc1Swenshuai.xi }
1231*53ee8cc1Swenshuai.xi
AESDMA_POWER_SUSPEND(void)1232*53ee8cc1Swenshuai.xi MS_BOOL AESDMA_POWER_SUSPEND(void)
1233*53ee8cc1Swenshuai.xi {
1234*53ee8cc1Swenshuai.xi SECUREBASECtrl_Buffer = _AESDMA_REG32_R(&_SECUREBASECtrl[0].Reg0001);
1235*53ee8cc1Swenshuai.xi return TRUE;
1236*53ee8cc1Swenshuai.xi }
1237*53ee8cc1Swenshuai.xi
AESDMA_POWER_RESUME(void)1238*53ee8cc1Swenshuai.xi MS_BOOL AESDMA_POWER_RESUME(void)
1239*53ee8cc1Swenshuai.xi {
1240*53ee8cc1Swenshuai.xi REG32_W((&_SECUREBASECtrl[0].Reg0001), SECUREBASECtrl_Buffer);
1241*53ee8cc1Swenshuai.xi return TRUE;
1242*53ee8cc1Swenshuai.xi }
1243*53ee8cc1Swenshuai.xi
1244