1*53ee8cc1Swenshuai.xi //<MStar Software> 2*53ee8cc1Swenshuai.xi //****************************************************************************** 3*53ee8cc1Swenshuai.xi // MStar Software 4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved. 5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are 6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by 7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties. 8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all 9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written 10*53ee8cc1Swenshuai.xi // permission has been granted by MStar. 11*53ee8cc1Swenshuai.xi // 12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you 13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to 14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations: 15*53ee8cc1Swenshuai.xi // 16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar 17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof. 18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any 19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms. 20*53ee8cc1Swenshuai.xi // 21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be 22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar 23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties. 24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately 25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of 26*53ee8cc1Swenshuai.xi // such third party`s software. 27*53ee8cc1Swenshuai.xi // 28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as 29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s 30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any 31*53ee8cc1Swenshuai.xi // third party. 32*53ee8cc1Swenshuai.xi // 33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any 34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including 35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of 36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free 37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any 38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may 39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software. 40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or 41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or 42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use. 43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected 44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your 45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both 46*53ee8cc1Swenshuai.xi // parties in writing. 47*53ee8cc1Swenshuai.xi // 48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or 49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of 50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product 51*53ee8cc1Swenshuai.xi // ("Services"). 52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in 53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty 54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply. 55*53ee8cc1Swenshuai.xi // 56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels 57*53ee8cc1Swenshuai.xi // or otherwise: 58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service 59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification; 60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person, 61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance 62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or 63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right. 64*53ee8cc1Swenshuai.xi // 65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws 66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules. 67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally 68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association, 69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration 70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance 71*53ee8cc1Swenshuai.xi // with the said Rules. 72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall 73*53ee8cc1Swenshuai.xi // be English. 74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties. 75*53ee8cc1Swenshuai.xi // 76*53ee8cc1Swenshuai.xi //****************************************************************************** 77*53ee8cc1Swenshuai.xi //<MStar Software> 78*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 79*53ee8cc1Swenshuai.xi // 80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc. 81*53ee8cc1Swenshuai.xi // All rights reserved. 82*53ee8cc1Swenshuai.xi // 83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained 84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of 85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence 86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient. 87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure, 88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling, 89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential 90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the 91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom. 92*53ee8cc1Swenshuai.xi // 93*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 94*53ee8cc1Swenshuai.xi 95*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////////////////////////////////////////////////// 96*53ee8cc1Swenshuai.xi /// 97*53ee8cc1Swenshuai.xi /// @file drvSERFLASH.h 98*53ee8cc1Swenshuai.xi /// @brief Serial Flash Driver Interface 99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc. 100*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////////////////////////////////////////////////// 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi /*! \defgroup G_SERFLASH SERFLASH interface 103*53ee8cc1Swenshuai.xi * \ingroup G_PERIPHERAL 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi \brief 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi Flash Self Programming controlleris designed to for easy read/write external Serial Peripheral interface (SPI) flash. 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi <b>Features</b> 110*53ee8cc1Swenshuai.xi 111*53ee8cc1Swenshuai.xi - Read ID Sequence 112*53ee8cc1Swenshuai.xi - Read SPI Status Sequence 113*53ee8cc1Swenshuai.xi - Write SPI Status Sequence 114*53ee8cc1Swenshuai.xi - Chip Erase Sequence 115*53ee8cc1Swenshuai.xi - Sector/Block Erase Sequence 116*53ee8cc1Swenshuai.xi - Page Program Sequence 117*53ee8cc1Swenshuai.xi - Read Data Sequence 118*53ee8cc1Swenshuai.xi 119*53ee8cc1Swenshuai.xi <b>SPI Diagram</b> \n 120*53ee8cc1Swenshuai.xi \image html drvSERFLASH_pic.png 121*53ee8cc1Swenshuai.xi 122*53ee8cc1Swenshuai.xi *! \defgroup G_SERFLASH_INIT Initialization Task relative 123*53ee8cc1Swenshuai.xi * \ingroup G_SERFLASH 124*53ee8cc1Swenshuai.xi \defgroup G_SERFLASH_COMMON Common Task relative 125*53ee8cc1Swenshuai.xi \ingroup G_SERFLASH 126*53ee8cc1Swenshuai.xi \defgroup G_SERFLASH_CONTROL Control relative 127*53ee8cc1Swenshuai.xi \ingroup G_SERFLASH 128*53ee8cc1Swenshuai.xi \defgroup G_SERFLASH_FSP FSP relative 129*53ee8cc1Swenshuai.xi \ingroup G_SERFLASH 130*53ee8cc1Swenshuai.xi *! \defgroup G_SERFLASH_OTHER other relative 131*53ee8cc1Swenshuai.xi * \ingroup G_SERFLASH 132*53ee8cc1Swenshuai.xi *! \defgroup G_SERFLASH_ToBeModified SERFLASH api to be modified 133*53ee8cc1Swenshuai.xi * \ingroup G_SERFLASH 134*53ee8cc1Swenshuai.xi \defgroup G_SERFLASH_ToBeRemove SERFLASH api to be removed 135*53ee8cc1Swenshuai.xi \ingroup G_SERFLASH 136*53ee8cc1Swenshuai.xi */ 137*53ee8cc1Swenshuai.xi 138*53ee8cc1Swenshuai.xi #ifndef _DRV_SERFLASH_H_ 139*53ee8cc1Swenshuai.xi #define _DRV_SERFLASH_H_ 140*53ee8cc1Swenshuai.xi 141*53ee8cc1Swenshuai.xi #include "MsCommon.h" 142*53ee8cc1Swenshuai.xi 143*53ee8cc1Swenshuai.xi #ifdef __cplusplus 144*53ee8cc1Swenshuai.xi extern "C" 145*53ee8cc1Swenshuai.xi { 146*53ee8cc1Swenshuai.xi #endif 147*53ee8cc1Swenshuai.xi 148*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 149*53ee8cc1Swenshuai.xi // Driver Capability 150*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 151*53ee8cc1Swenshuai.xi 152*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 153*53ee8cc1Swenshuai.xi // Macro and Define 154*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 155*53ee8cc1Swenshuai.xi #define SERFLASH_UTOPIA20 (0) 156*53ee8cc1Swenshuai.xi #define MSIF_SPIF_LIB_CODE {'S','P','I','F'} //Lib code 157*53ee8cc1Swenshuai.xi #define MSIF_SPIF_LIBVER {'0','6'} //LIB version 158*53ee8cc1Swenshuai.xi #define MSIF_SPIF_BUILDNUM {'0','1'} //Build Number 159*53ee8cc1Swenshuai.xi #define MSIF_SPIF_CHANGELIST {'0','0','4','5','6','1','5','8'} //P4 ChangeList Number 160*53ee8cc1Swenshuai.xi 161*53ee8cc1Swenshuai.xi #define SPIF_DRV_VERSION /* Character String for DRV/API version */ \ 162*53ee8cc1Swenshuai.xi MSIF_TAG, /* 'MSIF' */ \ 163*53ee8cc1Swenshuai.xi MSIF_CLASS, /* '00' */ \ 164*53ee8cc1Swenshuai.xi MSIF_CUS, /* 0x0000 */ \ 165*53ee8cc1Swenshuai.xi MSIF_MOD, /* 0x0000 */ \ 166*53ee8cc1Swenshuai.xi MSIF_CHIP, \ 167*53ee8cc1Swenshuai.xi MSIF_CPU, \ 168*53ee8cc1Swenshuai.xi MSIF_SPIF_LIB_CODE, /* IP__ */ \ 169*53ee8cc1Swenshuai.xi MSIF_SPIF_LIBVER, /* 0.0 ~ Z.Z */ \ 170*53ee8cc1Swenshuai.xi MSIF_SPIF_BUILDNUM, /* 00 ~ 99 */ \ 171*53ee8cc1Swenshuai.xi MSIF_SPIF_CHANGELIST, /* CL# */ \ 172*53ee8cc1Swenshuai.xi MSIF_OS 173*53ee8cc1Swenshuai.xi 174*53ee8cc1Swenshuai.xi /// Operation cfg 175*53ee8cc1Swenshuai.xi #define SPIDMA_CFG_ADDR_DIR_BIT (0) 176*53ee8cc1Swenshuai.xi #define SPIDMA_CFG_REFLECT_BIT (1) 177*53ee8cc1Swenshuai.xi #define SPIDMA_CFG_CRCCOPY_BIT (2) 178*53ee8cc1Swenshuai.xi #define SPIDMA_CFG_NOWAITCOPY_BIT (3) 179*53ee8cc1Swenshuai.xi 180*53ee8cc1Swenshuai.xi #define SPIDMA_OPCFG_DEF (0) 181*53ee8cc1Swenshuai.xi #define SPIDMA_OPCFG_INV_COPY _LShift(1, SPIDMA_CFG_ADDR_DIR_BIT) 182*53ee8cc1Swenshuai.xi #define SPIDMA_OPCFG_CRC_REFLECT _LShift(1, SPIDMA_CFG_REFLECT_BIT) //bit reflection of each input byte 183*53ee8cc1Swenshuai.xi #define SPIDMA_OPCFG_CRC_COPY _LShift(1, SPIDMA_CFG_CRCCOPY_BIT) //copy then crc check 184*53ee8cc1Swenshuai.xi #define SPIDMA_OPCFG_NOWAIT_COPY _LShift(1, SPIDMA_CFG_NOWAITCOPY_BIT) //copy then quit 185*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 186*53ee8cc1Swenshuai.xi // Type and Structure 187*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 188*53ee8cc1Swenshuai.xi /// Serial Flash information structure 189*53ee8cc1Swenshuai.xi typedef struct 190*53ee8cc1Swenshuai.xi { 191*53ee8cc1Swenshuai.xi MS_U32 u32AccessWidth; //data access width in bytes 192*53ee8cc1Swenshuai.xi MS_U32 u32TotalSize; //total size in bytes 193*53ee8cc1Swenshuai.xi MS_U32 u32SecNum; //number of sectors 194*53ee8cc1Swenshuai.xi MS_U32 u32SecSize; //sector size in bytes 195*53ee8cc1Swenshuai.xi } SERFLASH_Info; 196*53ee8cc1Swenshuai.xi 197*53ee8cc1Swenshuai.xi typedef struct 198*53ee8cc1Swenshuai.xi { 199*53ee8cc1Swenshuai.xi MS_BOOL bIsBusy; 200*53ee8cc1Swenshuai.xi } SERFLASH_DrvStatus; 201*53ee8cc1Swenshuai.xi 202*53ee8cc1Swenshuai.xi typedef enum 203*53ee8cc1Swenshuai.xi { 204*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_NONE, //disable all the debug message 205*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_INFO, //information 206*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_NOTICE, //normal but significant condition 207*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_WARNING, //warning conditions 208*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_ERR, //error conditions 209*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_CRIT, //critical conditions 210*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_ALERT, //action must be taken immediately 211*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_EMERG, //system is unusable 212*53ee8cc1Swenshuai.xi E_SERFLASH_DBGLV_DEBUG, //debug-level messages 213*53ee8cc1Swenshuai.xi } SERFLASH_DbgLv; 214*53ee8cc1Swenshuai.xi 215*53ee8cc1Swenshuai.xi typedef enum _SPIDMA_Dev 216*53ee8cc1Swenshuai.xi { 217*53ee8cc1Swenshuai.xi E_SPIDMA_DEV_MIU0 218*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_MIU1 219*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_DMDMCU = 6 220*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_VDMCU 221*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_DSP 222*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_TSP 223*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_1KSRAM_HK51 224*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_MIU2 225*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_MIU3 226*53ee8cc1Swenshuai.xi ,E_SPIDMA_DEV_NOT_SUPPORT 227*53ee8cc1Swenshuai.xi }SPIDMA_Dev; 228*53ee8cc1Swenshuai.xi 229*53ee8cc1Swenshuai.xi typedef enum _SPI_DrvCKG 230*53ee8cc1Swenshuai.xi { 231*53ee8cc1Swenshuai.xi E_SPI_XTALI = 0 232*53ee8cc1Swenshuai.xi ,E_SPI_27M 233*53ee8cc1Swenshuai.xi ,E_SPI_36M 234*53ee8cc1Swenshuai.xi ,E_SPI_43M 235*53ee8cc1Swenshuai.xi ,E_SPI_54M 236*53ee8cc1Swenshuai.xi ,E_SPI_72M 237*53ee8cc1Swenshuai.xi ,E_SPI_86M 238*53ee8cc1Swenshuai.xi ,E_SPI_108M 239*53ee8cc1Swenshuai.xi ,E_SPI_24M = 15 // T3 only 240*53ee8cc1Swenshuai.xi ,E_SPI_HALCKG_NOT_SUPPORT 241*53ee8cc1Swenshuai.xi }SPI_DrvCKG; 242*53ee8cc1Swenshuai.xi 243*53ee8cc1Swenshuai.xi typedef enum _SPI_DrvClkDiv 244*53ee8cc1Swenshuai.xi { 245*53ee8cc1Swenshuai.xi E_SPI_DIV2 246*53ee8cc1Swenshuai.xi ,E_SPI_DIV4 247*53ee8cc1Swenshuai.xi ,E_SPI_DIV8 248*53ee8cc1Swenshuai.xi ,E_SPI_DIV16 249*53ee8cc1Swenshuai.xi ,E_SPI_DIV32 250*53ee8cc1Swenshuai.xi ,E_SPI_DIV64 251*53ee8cc1Swenshuai.xi ,E_SPI_DIV128 252*53ee8cc1Swenshuai.xi ,E_SPI_ClkDiv_NOT_SUPPORT 253*53ee8cc1Swenshuai.xi }SPI_DrvClkDiv; 254*53ee8cc1Swenshuai.xi 255*53ee8cc1Swenshuai.xi typedef enum _SERFLASH_RegionMapType 256*53ee8cc1Swenshuai.xi { 257*53ee8cc1Swenshuai.xi E_SERFLASH_REGION_BLOCK_PROTECTION 258*53ee8cc1Swenshuai.xi ,E_SERFLASH_REGION_INDIVIDUAL_BLOCK_LOCK 259*53ee8cc1Swenshuai.xi ,E_SERFLASH_REGION_ONE_TIME_PROGRAM 260*53ee8cc1Swenshuai.xi ,E_SERFLASH_REGION_SPECIAL_REGION 261*53ee8cc1Swenshuai.xi }SERFLASH_RegionMapType; 262*53ee8cc1Swenshuai.xi 263*53ee8cc1Swenshuai.xi typedef struct 264*53ee8cc1Swenshuai.xi { 265*53ee8cc1Swenshuai.xi MS_U32 u32OtpLowerRecord; 266*53ee8cc1Swenshuai.xi MS_U32 u32OtpUpperRecord; 267*53ee8cc1Swenshuai.xi MS_U8 u8OtpBuffer[1024]; 268*53ee8cc1Swenshuai.xi void *pstNext; 269*53ee8cc1Swenshuai.xi }ST_OTP_Record; 270*53ee8cc1Swenshuai.xi 271*53ee8cc1Swenshuai.xi 272*53ee8cc1Swenshuai.xi typedef struct 273*53ee8cc1Swenshuai.xi { 274*53ee8cc1Swenshuai.xi MS_BOOL bProtectMark; 275*53ee8cc1Swenshuai.xi MS_U32 u32Indicator; 276*53ee8cc1Swenshuai.xi MS_U32 u32LowerBound; 277*53ee8cc1Swenshuai.xi MS_U32 u32UpperBound; 278*53ee8cc1Swenshuai.xi //ST_OTP_Record StrOptRecord[3]; 279*53ee8cc1Swenshuai.xi void *pstNext; 280*53ee8cc1Swenshuai.xi }SERFLASH_ProtecLayoutInfo; 281*53ee8cc1Swenshuai.xi 282*53ee8cc1Swenshuai.xi typedef struct 283*53ee8cc1Swenshuai.xi { 284*53ee8cc1Swenshuai.xi MS_U32 u32Start; 285*53ee8cc1Swenshuai.xi MS_U32 u32Len; 286*53ee8cc1Swenshuai.xi MS_U8 *u8data; 287*53ee8cc1Swenshuai.xi } SERFLASH_AccessInfo; 288*53ee8cc1Swenshuai.xi 289*53ee8cc1Swenshuai.xi typedef struct 290*53ee8cc1Swenshuai.xi { 291*53ee8cc1Swenshuai.xi MS_U32 u32StartAddr; 292*53ee8cc1Swenshuai.xi MS_U32 u32EraseSize; 293*53ee8cc1Swenshuai.xi MS_BOOL bWait; 294*53ee8cc1Swenshuai.xi } SERFLASH_EraseInfo; 295*53ee8cc1Swenshuai.xi 296*53ee8cc1Swenshuai.xi typedef struct 297*53ee8cc1Swenshuai.xi { 298*53ee8cc1Swenshuai.xi MS_U32 u32StartAddr; 299*53ee8cc1Swenshuai.xi MS_U32 u32Endaddr; 300*53ee8cc1Swenshuai.xi } SERFLASH_SectorEraseInfo; 301*53ee8cc1Swenshuai.xi 302*53ee8cc1Swenshuai.xi 303*53ee8cc1Swenshuai.xi typedef struct 304*53ee8cc1Swenshuai.xi { 305*53ee8cc1Swenshuai.xi MS_U32 u32DisableLowerBound; 306*53ee8cc1Swenshuai.xi MS_U32 u32DisableSize; 307*53ee8cc1Swenshuai.xi } SERFLASH_DisRangeInfo; 308*53ee8cc1Swenshuai.xi 309*53ee8cc1Swenshuai.xi typedef enum _SPI_Attribute 310*53ee8cc1Swenshuai.xi { 311*53ee8cc1Swenshuai.xi E_SPI_ATTRI_USER_DRV 312*53ee8cc1Swenshuai.xi ,E_SPI_ATTRI_KERNEL_DRV 313*53ee8cc1Swenshuai.xi ,E_SPI_ATTRI_UNKNOWN 314*53ee8cc1Swenshuai.xi }SPI_Attribute; 315*53ee8cc1Swenshuai.xi 316*53ee8cc1Swenshuai.xi ///SPI CS callback 317*53ee8cc1Swenshuai.xi typedef void (*ms_Mcu_ChipSelect_CB)(void); 318*53ee8cc1Swenshuai.xi typedef void (*ms_Flash_SetHWWP_CB)(MS_BOOL); 319*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 320*53ee8cc1Swenshuai.xi // include utopia v2 header files here 321*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 322*53ee8cc1Swenshuai.xi #include "drvSERFLASH_v2.h" 323*53ee8cc1Swenshuai.xi 324*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 325*53ee8cc1Swenshuai.xi // Function and Variable 326*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 327*53ee8cc1Swenshuai.xi 328*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 329*53ee8cc1Swenshuai.xi /// Description : Get the information of Serial Flash 330*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 331*53ee8cc1Swenshuai.xi /// @return the pointer to the driver information 332*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 333*53ee8cc1Swenshuai.xi const SERFLASH_Info *MDrv_SERFLASH_GetInfo(void); 334*53ee8cc1Swenshuai.xi 335*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 336*53ee8cc1Swenshuai.xi /// Description : Show the SERFLASH driver version 337*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 338*53ee8cc1Swenshuai.xi /// @param ppVersion \b OUT: output NORF driver version 339*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 340*53ee8cc1Swenshuai.xi /// @return FALSE : failed 341*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 342*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_GetLibVer(const MSIF_Version **ppVersion); 343*53ee8cc1Swenshuai.xi 344*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 345*53ee8cc1Swenshuai.xi /// Description : Get Serial Flash driver status 346*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 347*53ee8cc1Swenshuai.xi /// @param pDrvStatus \b OUT: poniter to store the returning driver status 348*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 349*53ee8cc1Swenshuai.xi /// @return FALSE : failed to get the driver status 350*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 351*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_GetStatus(SERFLASH_DrvStatus* pDrvStatus); 352*53ee8cc1Swenshuai.xi 353*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 354*53ee8cc1Swenshuai.xi /// Description : Set detailed level of Parallel Flash driver debug message 355*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 356*53ee8cc1Swenshuai.xi /// @param u8DbgLevel \b IN debug level for Serial Flash driver 357*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 358*53ee8cc1Swenshuai.xi /// @return FALSE : failed to set the debug level 359*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 360*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_SetDbgLevel(MS_U8 u8DbgLevel); 361*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 362*53ee8cc1Swenshuai.xi /// Description : Set detailed level of Parallel Flash driver debug message 363*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 364*53ee8cc1Swenshuai.xi /// @param u8DbgLevel \b IN debug level for Serial Flash driver 365*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 366*53ee8cc1Swenshuai.xi /// @return FALSE : failed to set the debug level 367*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 368*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_SetWPInfo(MS_BOOL bWPInfo); 369*53ee8cc1Swenshuai.xi 370*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 371*53ee8cc1Swenshuai.xi /// Description : HK ask 8051 to select flash chip by call back function 372*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 373*53ee8cc1Swenshuai.xi /// @param ms_Mcu_ChipSelect_CB \b IN call back function 374*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 375*53ee8cc1Swenshuai.xi /// @return NULL : 376*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 377*53ee8cc1Swenshuai.xi void MDrv_SERFLASH_SetMcuCSCallBack(ms_Mcu_ChipSelect_CB ChipSel_cb); 378*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 379*53ee8cc1Swenshuai.xi /// Description : HK ask 8051 to select flash chip by call back function 380*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 381*53ee8cc1Swenshuai.xi /// @param ms_Mcu_ChipSelect_CB \b IN call back function 382*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 383*53ee8cc1Swenshuai.xi /// @return NULL : 384*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 385*53ee8cc1Swenshuai.xi void MDrv_SERFLASH_SetFlashWPCallBack(ms_Flash_SetHWWP_CB FlashWP_cb); 386*53ee8cc1Swenshuai.xi 387*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 388*53ee8cc1Swenshuai.xi /// Description : Detect flash type by reading the MID and DID 389*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 390*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 391*53ee8cc1Swenshuai.xi /// @return FALSE : unknown flash type 392*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 393*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 394*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_DetectType(void); 395*53ee8cc1Swenshuai.xi 396*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 397*53ee8cc1Swenshuai.xi /// Description : Detect flash Size 398*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 399*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 400*53ee8cc1Swenshuai.xi /// @return FALSE : unknown flash size 401*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 402*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 403*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_DetectSize(MS_U32 *u32FlashSize); 404*53ee8cc1Swenshuai.xi 405*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 406*53ee8cc1Swenshuai.xi /// Description : Enable Flash 2XREAD mode, if support 407*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 408*53ee8cc1Swenshuai.xi /// @param b2XMode \b IN: ENABLE/DISABLE 409*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 410*53ee8cc1Swenshuai.xi /// @return FALSE : not succeed 411*53ee8cc1Swenshuai.xi /// @note Please ref. sprc. to confirm Flash support or not 412*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 413*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_Set2XRead(MS_BOOL b2XMode); 414*53ee8cc1Swenshuai.xi 415*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 416*53ee8cc1Swenshuai.xi /// Description : Set ckg_spi which flash supports (please ref. the spec. before using this function) 417*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 418*53ee8cc1Swenshuai.xi /// @param SPI_DrvCKG \b IN: enumerate the ckg_spi 419*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 420*53ee8cc1Swenshuai.xi /// @return FALSE : not succeed 421*53ee8cc1Swenshuai.xi /// @note Please ref. sprc. to confirm Flash support or not. It is safty to run at 43M (Default). 422*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 423*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_SetCKG(SPI_DrvCKG eCKGspi); 424*53ee8cc1Swenshuai.xi 425*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 426*53ee8cc1Swenshuai.xi /// Description : Set clock div such that spi clock = mcu clock /clock_div. 427*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 428*53ee8cc1Swenshuai.xi /// @param SPI_DrvClkDiv \b IN: enumerate the clock_div 429*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 430*53ee8cc1Swenshuai.xi /// @return FALSE : not succeed 431*53ee8cc1Swenshuai.xi /// @note 432*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 433*53ee8cc1Swenshuai.xi void MDrv_SERFLASH_ClkDiv(SPI_DrvClkDiv eClkDivspi); 434*53ee8cc1Swenshuai.xi 435*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 436*53ee8cc1Swenshuai.xi /// Description : Set XIU/RIU mode (Default : XIU) 437*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 438*53ee8cc1Swenshuai.xi /// @param bXiuRiu \b IN: 1 for XIU, 0 for RIU 439*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 440*53ee8cc1Swenshuai.xi /// @return FALSE : not succeed 441*53ee8cc1Swenshuai.xi /// @note XIU mode is faster than RIU mode. It is stable to run by XIU (Default) 442*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 443*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_SetMode(MS_BOOL bXiuRiu); 444*53ee8cc1Swenshuai.xi 445*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 446*53ee8cc1Swenshuai.xi /// Description : Get Unique ID 447*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 448*53ee8cc1Swenshuai.xi /// @param None 449*53ee8cc1Swenshuai.xi /// @return the SPI Flash's Unique ID 450*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 451*53ee8cc1Swenshuai.xi MS_U64 MDrv_SERFLASH_ReadUID(void); 452*53ee8cc1Swenshuai.xi 453*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 454*53ee8cc1Swenshuai.xi /// Description : Set active flash among multi-spi flashes 455*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 456*53ee8cc1Swenshuai.xi /// @param u8FlashIndex \b IN: The Flash index, 0 for external #1 spi flash, 1 for external #2 spi flash 457*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 458*53ee8cc1Swenshuai.xi /// @return FALSE : not succeed 459*53ee8cc1Swenshuai.xi /// @note For Secure booting = 0, please check hw_strapping or e-fuse (the board needs to jump) 460*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 461*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_ChipSelect(MS_U8 u8FlashIndex); 462*53ee8cc1Swenshuai.xi 463*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 464*53ee8cc1Swenshuai.xi /// Initialize Serial Flash 465*53ee8cc1Swenshuai.xi /// @ingroup G_INIT 466*53ee8cc1Swenshuai.xi /// @return None 467*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 468*53ee8cc1Swenshuai.xi void MDrv_SERFLASH_Init(void); 469*53ee8cc1Swenshuai.xi 470*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 471*53ee8cc1Swenshuai.xi /// Description : Read ID from Serial Flash 472*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 473*53ee8cc1Swenshuai.xi /// @param pu8FlashID \b OUT: Virtual data ptr to store the read ID 474*53ee8cc1Swenshuai.xi /// @param u32IDSize \b IN: size in Bytes 475*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 476*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 477*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 478*53ee8cc1Swenshuai.xi /// @note 479*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 480*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 481*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_ReadID(MS_U8 *pu8FlashID, MS_U32 u32IDSize); 482*53ee8cc1Swenshuai.xi 483*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 484*53ee8cc1Swenshuai.xi /// Description : Read data from Serial Flash 485*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 486*53ee8cc1Swenshuai.xi /// @param u32FlashAddr \b IN: Flash Address 487*53ee8cc1Swenshuai.xi /// @param u32FlashSize \b IN: Flash Size Data in Bytes 488*53ee8cc1Swenshuai.xi /// @param user_buffer \b OUT: Virtual Buffer Address ptr to store flash read data 489*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 490*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 491*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 492*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 493*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 494*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_Read(MS_U32 u32FlashAddr, MS_U32 u32FlashSize, MS_U8 *user_buffer); 495*53ee8cc1Swenshuai.xi 496*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 497*53ee8cc1Swenshuai.xi /// Description : Erase all sectors in Serial Flash 498*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 499*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 500*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 501*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 502*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 503*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_EraseChip(void); 504*53ee8cc1Swenshuai.xi 505*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 506*53ee8cc1Swenshuai.xi /// Description : Get flash start block index of a flash address 507*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 508*53ee8cc1Swenshuai.xi /// @param u32FlashAddr \b IN: flash address 509*53ee8cc1Swenshuai.xi /// @param pu32BlockIndex \b IN: poniter to store the returning block index 510*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 511*53ee8cc1Swenshuai.xi /// @return FALSE : illegal parameters 512*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 513*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 514*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_AddressToBlock(MS_U32 u32FlashAddr, MS_U32 *pu32BlockIndex); 515*53ee8cc1Swenshuai.xi 516*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 517*53ee8cc1Swenshuai.xi /// Description : Get flash start address of a block index 518*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 519*53ee8cc1Swenshuai.xi /// @param u32BlockIndex \b IN: block index 520*53ee8cc1Swenshuai.xi /// @param pu32FlashAddr \b IN: pointer to store the returning flash address 521*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 522*53ee8cc1Swenshuai.xi /// @return FALSE : illegal parameters 523*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 524*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 525*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_BlockToAddress(MS_U32 u32BlockIndex, MS_U32 *pu32FlashAddr); 526*53ee8cc1Swenshuai.xi 527*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 528*53ee8cc1Swenshuai.xi /// Description : Erase certain sectors given starting address and size in Serial Flash 529*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 530*53ee8cc1Swenshuai.xi /// @param u32StartAddr \b IN: start address at block boundry 531*53ee8cc1Swenshuai.xi /// @param u32EraseSize \b IN: size to erase 532*53ee8cc1Swenshuai.xi /// @param bWait \b IN: wait write done or not 533*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 534*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 535*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 536*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 537*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_AddressErase(MS_U32 u32StartAddr, MS_U32 u32EraseSize, MS_BOOL bWait); 538*53ee8cc1Swenshuai.xi 539*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 540*53ee8cc1Swenshuai.xi /// Description : Erase certain sectors in Serial Flash 541*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 542*53ee8cc1Swenshuai.xi /// @param u32StartBlock \b IN: start block 543*53ee8cc1Swenshuai.xi /// @param u32EndBlock \b IN: end block 544*53ee8cc1Swenshuai.xi /// @param bWait \b IN: wait write done or not 545*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 546*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 547*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 548*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 549*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_BlockErase(MS_U32 u32StartBlock, MS_U32 u32EndBlock, MS_BOOL bWait); 550*53ee8cc1Swenshuai.xi 551*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 552*53ee8cc1Swenshuai.xi /// Description : Erase certain 4K sectors in Serial Flash 553*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 554*53ee8cc1Swenshuai.xi /// @param u32StartBlock \b IN: start address 555*53ee8cc1Swenshuai.xi /// @param u32EndBlock \b IN: end address 556*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 557*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 558*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 559*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 560*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_SectorErase(MS_U32 u32StartAddr, MS_U32 u32EndAddr); 561*53ee8cc1Swenshuai.xi 562*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 563*53ee8cc1Swenshuai.xi /// Description : Check write done in Serial Flash 564*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 565*53ee8cc1Swenshuai.xi /// @return TRUE : done 566*53ee8cc1Swenshuai.xi /// @return FALSE : not done 567*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 568*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 569*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_CheckWriteDone(void); 570*53ee8cc1Swenshuai.xi 571*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 572*53ee8cc1Swenshuai.xi /// Description : Write data to Serial Flash 573*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 574*53ee8cc1Swenshuai.xi /// @param u32FlashAddr \b IN: start address (4-B aligned) 575*53ee8cc1Swenshuai.xi /// @param u32FlashSize \b IN: size in Bytes (4-B aligned) 576*53ee8cc1Swenshuai.xi /// @param user_buffer \b IN: Virtual Buffer Address ptr to flash write data 577*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 578*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 579*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 580*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 581*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 582*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_Write(MS_U32 u32FlashAddr, MS_U32 u32FlashSize, MS_U8 *user_buffer); 583*53ee8cc1Swenshuai.xi 584*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 585*53ee8cc1Swenshuai.xi /// Description : Read data from Serial Flash to DRAM in DMA mode 586*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 587*53ee8cc1Swenshuai.xi /// @param u32FlashStart \b IN: src start address in flash (0 ~ flash size-1) 588*53ee8cc1Swenshuai.xi /// @param u32DRAMStart \b IN: dst start address in DRAM (16B-aligned) (0 ~ DRAM size-1) 589*53ee8cc1Swenshuai.xi /// @param u32Size \b IN: size in Bytes (8B-aligned) (>=8) 590*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 591*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 592*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 593*53ee8cc1Swenshuai.xi /// @note 594*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 595*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 596*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_DMA(MS_U32 u32FlashStart, MS_U32 u32DRAMStart, MS_U32 u32Size); 597*53ee8cc1Swenshuai.xi 598*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 599*53ee8cc1Swenshuai.xi /// Description : Protect blocks in Serial Flash 600*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 601*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FALSE: enable/disable protection 602*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 603*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 604*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 605*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 606*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect(MS_BOOL bEnable); 607*53ee8cc1Swenshuai.xi 608*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 609*53ee8cc1Swenshuai.xi /// Description : Enables all range of flash write protection 610*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 611*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 612*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 613*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 614*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 615*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect_Enable_All_Range(void); 616*53ee8cc1Swenshuai.xi 617*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 618*53ee8cc1Swenshuai.xi /// Description : Disables all range of flash write protection 619*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 620*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 621*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 622*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 623*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 624*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect_Disable_All_Range(void); 625*53ee8cc1Swenshuai.xi 626*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 627*53ee8cc1Swenshuai.xi /// Description : Set flash disable lower bound and size 628*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 629*53ee8cc1Swenshuai.xi /// @param u32DisableLowerBound \b IN: the lower bound to disable write protect 630*53ee8cc1Swenshuai.xi /// @param u32DisableSize \b IN: size to disable write protect 631*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 632*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 633*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 634*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 635*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect_Disable_Range_Set(MS_U32 u32DisableLowerBound, MS_U32 u32DisableSize); 636*53ee8cc1Swenshuai.xi 637*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 638*53ee8cc1Swenshuai.xi /// Description : Set flash enable lower bound and size 639*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 640*53ee8cc1Swenshuai.xi /// @param u32DisableLowerBound \b IN: the lower bound to disable write protect 641*53ee8cc1Swenshuai.xi /// @param u32DisableSize \b IN: size to disable write protect 642*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 643*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout or illegal parameters 644*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 645*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 646*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect_Enable_Range_Set(MS_U32 u32LowerBound, MS_U32 u32Size); 647*53ee8cc1Swenshuai.xi 648*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 649*53ee8cc1Swenshuai.xi /// Description : Protect blocks in Serial Flash 650*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 651*53ee8cc1Swenshuai.xi /// @param bEnableAllArea \b IN: enable or disable protection 652*53ee8cc1Swenshuai.xi /// @param u8BlockProtectBits \b IN: block protection bits which stand for the area to enable write protect 653*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 654*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 655*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 656*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 657*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect_Area(MS_BOOL bEnableAllArea, MS_U8 u8BlockProtectBits); 658*53ee8cc1Swenshuai.xi 659*53ee8cc1Swenshuai.xi //------- ------------------------------------------------------------------------------------------ 660*53ee8cc1Swenshuai.xi /// Description : Read Status Register in Serial Flash 661*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 662*53ee8cc1Swenshuai.xi /// @param pu8StatusReg \b OUT: ptr to Status Register value 663*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 664*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 665*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 666*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 667*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_ReadStatusRegister(MS_U8 *pu8StatusReg); 668*53ee8cc1Swenshuai.xi 669*53ee8cc1Swenshuai.xi //------- ------------------------------------------------------------------------------------------ 670*53ee8cc1Swenshuai.xi /// Description : Read Status Register2 in Serial Flash 671*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 672*53ee8cc1Swenshuai.xi /// @param pu8StatusReg \b OUT: ptr to Status Register value 673*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 674*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 675*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 676*53ee8cc1Swenshuai.xi /// @note For Specific Flash IC with 16-bit status register (high-byte) 677*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 678*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 679*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_ReadStatusRegister2(MS_U8 *pu8StatusReg); 680*53ee8cc1Swenshuai.xi 681*53ee8cc1Swenshuai.xi //------- ------------------------------------------------------------------------------------------ 682*53ee8cc1Swenshuai.xi /// Description : Write Status Register in Serial Flash 683*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 684*53ee8cc1Swenshuai.xi /// @param u16StatusReg \b IN: Status Register value 685*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 686*53ee8cc1Swenshuai.xi /// @return FALSE : fail before timeout 687*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 688*53ee8cc1Swenshuai.xi /// @note For Specific Flash IC with 16-bit status register 689*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 690*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 691*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteStatusRegister(MS_U16 u16StatusReg); 692*53ee8cc1Swenshuai.xi 693*53ee8cc1Swenshuai.xi //------- ------------------------------------------------------------------------------------------ 694*53ee8cc1Swenshuai.xi /// Description : Handle for BDMA copy data from ONLY Flash src to other dst 695*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 696*53ee8cc1Swenshuai.xi /// @param u32FlashAddr \b IN: Physical Source address in spi flash 697*53ee8cc1Swenshuai.xi /// @param u32DramAddr \b IN: Physical Dst address 698*53ee8cc1Swenshuai.xi /// @param u32Len \b IN: data length 699*53ee8cc1Swenshuai.xi /// @param eDstDev \b IN: The Dst Device of Flash BDMA 700*53ee8cc1Swenshuai.xi /// @param u8OpCfg \b IN: u8OpCfg: default is SPIDMA_OPCFG_DEF 701*53ee8cc1Swenshuai.xi /// - Bit0: inverse mode --> SPIDMA_OPCFG_INV_COPY 702*53ee8cc1Swenshuai.xi /// - Bit2: Copy & CRC check in wait mode --> SPIDMA_OPCFG_CRC_COPY 703*53ee8cc1Swenshuai.xi /// - Bit3: Copy without waiting --> SPIDMA_OPCFG_NOWAIT_COPY 704*53ee8cc1Swenshuai.xi /// @return \b MS_BOOL 705*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 706*53ee8cc1Swenshuai.xi /// [fw : drvBDMA ] 707*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 708*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_CopyHnd(MS_PHYADDR u32FlashAddr, MS_PHYADDR u32DstAddr, MS_U32 u32Len, SPIDMA_Dev eDstDev, MS_U8 u8OpCfg); 709*53ee8cc1Swenshuai.xi 710*53ee8cc1Swenshuai.xi //------- ------------------------------------------------------------------------------------------ 711*53ee8cc1Swenshuai.xi /// Description : Switch SPI as GPIO Input 712*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 713*53ee8cc1Swenshuai.xi /// @param bSwitch \b IN: 1 for GPIO, 0 for NORMAL 714*53ee8cc1Swenshuai.xi /// @note Not allowed in interrupt context 715*53ee8cc1Swenshuai.xi /// @note For project's power consumption 716*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 717*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 718*53ee8cc1Swenshuai.xi void MDrv_SERFLASH_SetGPIO(MS_BOOL bSwitch); 719*53ee8cc1Swenshuai.xi 720*53ee8cc1Swenshuai.xi //------- ------------------------------------------------------------------------------------------ 721*53ee8cc1Swenshuai.xi /// Description : Change Kernel or User Mode in Serial Flash 722*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_CONTROL 723*53ee8cc1Swenshuai.xi /// @param SpiAttri 724*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 725*53ee8cc1Swenshuai.xi /// @return FALSE : fail not suppported enum 726*53ee8cc1Swenshuai.xi /// @note No 727*53ee8cc1Swenshuai.xi /// @note Use Kernel Enum to Kernel Space 728*53ee8cc1Swenshuai.xi /// [NONOS_SUPPORT] 729*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 730*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_Attribute(SPI_Attribute SpiAttri); 731*53ee8cc1Swenshuai.xi 732*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 733*53ee8cc1Swenshuai.xi // WRAPPER FOR CHAKRA 734*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 735*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect_Area_Lookup(MS_U32 u32ProtectSpace, MS_U32 u32NonProtectSpace, MS_U8 *pu8BlockProtectBits); 736*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 737*53ee8cc1Swenshuai.xi /// MOBF Encrypt 738*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 739*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 740*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 741*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 742*53ee8cc1Swenshuai.xi /// @return Others : Fail 743*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 744*53ee8cc1Swenshuai.xi MS_U32 MDrv_SERFLASH_WriteProtect_Area_Boundary(void); 745*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 746*53ee8cc1Swenshuai.xi /// MOBF Encrypt 747*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 748*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 749*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 750*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 751*53ee8cc1Swenshuai.xi /// @return Others : Fail 752*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 753*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_Write(MS_U32 u32FlashAddr,MS_U32 u32FlashSize,MS_U8 * user_buffer); 754*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 755*53ee8cc1Swenshuai.xi /// MOBF Encrypt 756*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 757*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 758*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 759*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 760*53ee8cc1Swenshuai.xi /// @return Others : Fail 761*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 762*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_Read(MS_U32 u32FlashAddr,MS_U32 u32FlashSize,MS_U8 * user_buffer); 763*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 764*53ee8cc1Swenshuai.xi /// MOBF Encrypt 765*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 766*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 767*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 768*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 769*53ee8cc1Swenshuai.xi /// @return Others : Fail 770*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 771*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_WriteProtect(MS_BOOL bEnable); 772*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 773*53ee8cc1Swenshuai.xi /// MOBF Encrypt 774*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 775*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 776*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 777*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 778*53ee8cc1Swenshuai.xi /// @return Others : Fail 779*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 780*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_WriteProtect_Enable_All_Range(void); 781*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 782*53ee8cc1Swenshuai.xi /// MOBF Encrypt 783*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 784*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 785*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 786*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 787*53ee8cc1Swenshuai.xi /// @return Others : Fail 788*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 789*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_WriteProtect_Disable_All_Range(void); 790*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 791*53ee8cc1Swenshuai.xi /// MOBF Encrypt 792*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 793*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 794*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 795*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 796*53ee8cc1Swenshuai.xi /// @return Others : Fail 797*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 798*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_WriteProtect_Disable_Range_Set(MS_U32 DisableLowerBound, MS_U32 DisableSize); 799*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 800*53ee8cc1Swenshuai.xi /// MOBF Encrypt 801*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 802*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 803*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 804*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 805*53ee8cc1Swenshuai.xi /// @return Others : Fail 806*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 807*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_WriteProtect_Area(MS_BOOL bEnableAllArea, MS_U8 BlockProtectBits); 808*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 809*53ee8cc1Swenshuai.xi /// MOBF Encrypt 810*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 811*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 812*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 813*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 814*53ee8cc1Swenshuai.xi /// @return Others : Fail 815*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 816*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_ReadStatusRegister(MS_U8 *pu8StatusReg); 817*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 818*53ee8cc1Swenshuai.xi /// MOBF Encrypt 819*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 820*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 821*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 822*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 823*53ee8cc1Swenshuai.xi /// @return Others : Fail 824*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 825*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_ReadStatusRegister2(MS_U8 *pu8StatusReg); 826*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 827*53ee8cc1Swenshuai.xi /// MOBF Encrypt 828*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 829*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 830*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 831*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 832*53ee8cc1Swenshuai.xi /// @return Others : Fail 833*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 834*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_WriteStatusRegister(MS_U16 u16StatusReg); 835*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 836*53ee8cc1Swenshuai.xi /// MOBF Encrypt 837*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 838*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 839*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 840*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 841*53ee8cc1Swenshuai.xi /// @return Others : Fail 842*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 843*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_DetectType(void); 844*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 845*53ee8cc1Swenshuai.xi /// MOBF Encrypt 846*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 847*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 848*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 849*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 850*53ee8cc1Swenshuai.xi /// @return Others : Fail 851*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 852*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_DetectSize(MS_U32 *u32FlashSize); 853*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 854*53ee8cc1Swenshuai.xi /// MOBF Encrypt 855*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 856*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 857*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 858*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 859*53ee8cc1Swenshuai.xi /// @return Others : Fail 860*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 861*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_AddressToBlock(MS_U32 u32FlashAddr, MS_U32 *pu32BlockIndex); 862*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 863*53ee8cc1Swenshuai.xi /// MOBF Encrypt 864*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 865*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 866*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 867*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 868*53ee8cc1Swenshuai.xi /// @return Others : Fail 869*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 870*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_BlockToAddress(MS_U32 u32BlockIndex, MS_U32 *pu32FlashAddr); 871*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 872*53ee8cc1Swenshuai.xi /// MOBF Encrypt 873*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 874*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 875*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 876*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 877*53ee8cc1Swenshuai.xi /// @return Others : Fail 878*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 879*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_AddressErase(MS_U32 u32StartAddr,MS_U32 u32EraseSize,MS_BOOL bWait); 880*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 881*53ee8cc1Swenshuai.xi /// MOBF Encrypt 882*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 883*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 884*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 885*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 886*53ee8cc1Swenshuai.xi /// @return Others : Fail 887*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 888*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_BlockErase(MS_U16 u16StartBlock,MS_U16 u16EndBlock,MS_BOOL bWait); 889*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 890*53ee8cc1Swenshuai.xi /// MOBF Encrypt 891*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 892*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 893*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 894*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 895*53ee8cc1Swenshuai.xi /// @return Others : Fail 896*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 897*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_CheckWriteDone(void); 898*53ee8cc1Swenshuai.xi 899*53ee8cc1Swenshuai.xi #ifdef MXIC_IBPM 900*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 901*53ee8cc1Swenshuai.xi /// MOBF Encrypt 902*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 903*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 904*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 905*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 906*53ee8cc1Swenshuai.xi /// @return Others : Fail 907*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 908*53ee8cc1Swenshuai.xi void MDrv_SERFLASH_EnterIBPM(void); 909*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 910*53ee8cc1Swenshuai.xi /// MOBF Encrypt 911*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 912*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 913*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 914*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 915*53ee8cc1Swenshuai.xi /// @return Others : Fail 916*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 917*53ee8cc1Swenshuai.xi MS_U8 MDrv_SERFLASH_ReadBlockStatus(MS_PHYADDR u32FlashAddr); 918*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 919*53ee8cc1Swenshuai.xi /// MOBF Encrypt 920*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 921*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 922*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 923*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 924*53ee8cc1Swenshuai.xi /// @return Others : Fail 925*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 926*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_SingleBlockProtect(MS_PHYADDR u32FlashAddr,MS_BOOL bLock); 927*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 928*53ee8cc1Swenshuai.xi /// MOBF Encrypt 929*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 930*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 931*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 932*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 933*53ee8cc1Swenshuai.xi /// @return Others : Fail 934*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 935*53ee8cc1Swenshuai.xi MS_U32 MDrv_SERFLASH_MultiBlockProtect(MS_U32 u32StartBlock, MS_U32 u32EndBlock, MS_BOOL bLock); 936*53ee8cc1Swenshuai.xi #endif 937*53ee8cc1Swenshuai.xi 938*53ee8cc1Swenshuai.xi #ifdef MUNINN_ENABLE 939*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 940*53ee8cc1Swenshuai.xi /// MOBF Encrypt 941*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 942*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 943*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 944*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 945*53ee8cc1Swenshuai.xi /// @return Others : Fail 946*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 947*53ee8cc1Swenshuai.xi MS_U8 MDrv_OTP_ReadStatusReg(MS_U8 u8ByteAddr); 948*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 949*53ee8cc1Swenshuai.xi /// MOBF Encrypt 950*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 951*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 952*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 953*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 954*53ee8cc1Swenshuai.xi /// @return Others : Fail 955*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 956*53ee8cc1Swenshuai.xi void MDrv_OTP_WriteStatusReg(MS_U8 u8ByteAddr, MS_U8 u8ByteReg); 957*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 958*53ee8cc1Swenshuai.xi /// MOBF Encrypt 959*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 960*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 961*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 962*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 963*53ee8cc1Swenshuai.xi /// @return Others : Fail 964*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 965*53ee8cc1Swenshuai.xi MS_PHYADDR MDrv_OTP_Read(MS_U32 u32FlashAddr, MS_U32 u32FlashSize, MS_U8 *user_buffer); 966*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 967*53ee8cc1Swenshuai.xi /// MOBF Encrypt 968*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 969*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 970*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 971*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 972*53ee8cc1Swenshuai.xi /// @return Others : Fail 973*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 974*53ee8cc1Swenshuai.xi MS_PHYADDR MDrv_OTP_FastRead(MS_U32 u32FlashAddr, MS_U32 u32FlashSize, MS_U8 *user_buffer); 975*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 976*53ee8cc1Swenshuai.xi /// MOBF Encrypt 977*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 978*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 979*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 980*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 981*53ee8cc1Swenshuai.xi /// @return Others : Fail 982*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 983*53ee8cc1Swenshuai.xi MS_PHYADDR MDrv_OTP_Write(MS_U32 u32FlashAddr, MS_U32 u32FlashSize, MS_U8 *user_buffer); 984*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 985*53ee8cc1Swenshuai.xi /// MOBF Encrypt 986*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_ToBeRemove 987*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 988*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 989*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 990*53ee8cc1Swenshuai.xi /// @return Others : Fail 991*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 992*53ee8cc1Swenshuai.xi MS_BOOL MDrv_OTP_WriteTestMode(MS_U32 u32FlashAddr, MS_U8 ByteData); 993*53ee8cc1Swenshuai.xi #endif 994*53ee8cc1Swenshuai.xi 995*53ee8cc1Swenshuai.xi // FSP 996*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 997*53ee8cc1Swenshuai.xi /// MOBF Encrypt 998*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_FSP 999*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 1000*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 1001*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 1002*53ee8cc1Swenshuai.xi /// @return Others : Fail 1003*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1004*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FSP_WriteData(MS_U32 u32Addr, MS_U32 u32DataSize, MS_U8 *pu8Data); 1005*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1006*53ee8cc1Swenshuai.xi /// MOBF Encrypt 1007*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_FSP 1008*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 1009*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 1010*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 1011*53ee8cc1Swenshuai.xi /// @return Others : Fail 1012*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1013*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FSP_ReadData(MS_U32 u32Addr, MS_U32 u32DataSize, MS_U8 *pu8Data); 1014*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1015*53ee8cc1Swenshuai.xi /// MOBF Encrypt 1016*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_FSP 1017*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 1018*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 1019*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 1020*53ee8cc1Swenshuai.xi /// @return Others : Fail 1021*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1022*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FSP_BlockErase(MS_U32 u32StartBlock, MS_U32 u32EndBlock, MS_BOOL bWait); 1023*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1024*53ee8cc1Swenshuai.xi /// MOBF Encrypt 1025*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_FSP 1026*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 1027*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 1028*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 1029*53ee8cc1Swenshuai.xi /// @return Others : Fail 1030*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1031*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FSP_AddressErase(MS_U32 u32StartAddr, MS_U32 u32EraseSize, MS_BOOL bWait); 1032*53ee8cc1Swenshuai.xi 1033*53ee8cc1Swenshuai.xi //power state 1034*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1035*53ee8cc1Swenshuai.xi /// MOBF Encrypt 1036*53ee8cc1Swenshuai.xi /// @ingroup G_SERFLASH_COMMON 1037*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Key 1038*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE/FLASE 1039*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK : Success 1040*53ee8cc1Swenshuai.xi /// @return Others : Fail 1041*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1042*53ee8cc1Swenshuai.xi MS_U32 MDrv_SERFLASH_SetPowerState(EN_POWER_MODE u16PowerState); 1043*53ee8cc1Swenshuai.xi 1044*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1045*53ee8cc1Swenshuai.xi // Flash OTP USAGE 1046*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 1047*53ee8cc1Swenshuai.xi 1048*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1049*53ee8cc1Swenshuai.xi /// Description : Get Protection Info 1050*53ee8cc1Swenshuai.xi /// @param Protection_Type,Protection Size ,Protection Info 1051*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 1052*53ee8cc1Swenshuai.xi /// @return FALSE : failed 1053*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1054*53ee8cc1Swenshuai.xi MS_BOOL MDrv_SERFLASH_WriteProtect_TableInfo(SERFLASH_RegionMapType type, void *pstTable); 1055*53ee8cc1Swenshuai.xi 1056*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1057*53ee8cc1Swenshuai.xi /// Description : OTP Read 1058*53ee8cc1Swenshuai.xi /// @param OTP address, OTP Size , OTP read data buffer 1059*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 1060*53ee8cc1Swenshuai.xi /// @return FALSE : failed 1061*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1062*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_OTP_Read(MS_U32 u32FlashAddr, MS_U16 u16FlashSize, MS_U8 *user_buffer); 1063*53ee8cc1Swenshuai.xi 1064*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1065*53ee8cc1Swenshuai.xi /// Description : OTP Write 1066*53ee8cc1Swenshuai.xi /// @param OTP address, OTP Size , OTP read data buffer 1067*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 1068*53ee8cc1Swenshuai.xi /// @return FALSE : failed 1069*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1070*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_OTP_Write(MS_U32 u32FlashAddr, MS_U16 u16FlashSize, MS_U8 *user_buffer); 1071*53ee8cc1Swenshuai.xi 1072*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1073*53ee8cc1Swenshuai.xi /// Description : OTP Erase 1074*53ee8cc1Swenshuai.xi /// @param OTP address 1075*53ee8cc1Swenshuai.xi /// @return TRUE : succeed 1076*53ee8cc1Swenshuai.xi /// @return FALSE : failed 1077*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------ 1078*53ee8cc1Swenshuai.xi MS_BOOL MDrv_FLASH_OTP_ERASE(MS_U32 u32Addr); 1079*53ee8cc1Swenshuai.xi 1080*53ee8cc1Swenshuai.xi extern ms_Mcu_ChipSelect_CB McuChipSelectCB; 1081*53ee8cc1Swenshuai.xi extern ms_Flash_SetHWWP_CB FlashSetHWWPCB; 1082*53ee8cc1Swenshuai.xi #ifdef __cplusplus 1083*53ee8cc1Swenshuai.xi } 1084*53ee8cc1Swenshuai.xi #endif 1085*53ee8cc1Swenshuai.xi 1086*53ee8cc1Swenshuai.xi #endif // _DRV_SERFLASH_H_ 1087