| /****************************************************************************** |
| ** |
| ** INTEL CONFIDENTIAL |
| ** Copyright 2003-2004 Intel Corporation All Rights Reserved. |
| ** |
| ** The source code contained or described herein and all documents |
| ** related to the source code (Material) are owned by Intel Corporation |
| ** or its suppliers or licensors. Title to the Material remains with |
| ** Intel Corporation or its suppliers and licensors. The Material contains |
| ** trade secrets and proprietary and confidential information of Intel |
| ** or its suppliers and licensors. The Material is protected by worldwide |
| ** copyright and trade secret laws and treaty provisions. No part of the |
| ** Material may be used, copied, reproduced, modified, published, uploaded, |
| ** posted, transmitted, distributed, or disclosed in any way without Intel's |
| ** prior express written permission. |
| ** |
| ** No license under any patent, copyright, trade secret or other intellectual |
| ** property right is granted to or conferred upon you by disclosure or |
| ** delivery of the Materials, either expressly, by implication, inducement, |
| ** estoppel or otherwise. Any license under such intellectual property rights |
| ** must be express and approved by Intel in writing. |
| ** |
| ** BBM.h |
| ******************************************************************************//****************************************************************************** |
| * |
| * (C)Copyright 2005 - 2011 Marvell. All Rights Reserved. |
| * |
| * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MARVELL. |
| * The copyright notice above does not evidence any actual or intended |
| * publication of such source code. |
| * This Module contains Proprietary Information of Marvell and should be |
| * treated as Confidential. |
| * The information in this file is provided for the exclusive use of the |
| * licensees of Marvell. |
| * Such users have the right to use, modify, and incorporate this code into |
| * products for purposes authorized by the license agreement provided they |
| * include this notice and the associated copyright notice with any such |
| * product. |
| * The information in this file is provided "AS IS" without warranty. |
| |
| ****************************************************************************** |
| ** |
| ** FILENAME: BBM.h |
| ** |
| ** PURPOSE: Holds all flash related definitions |
| ** |
| ******************************************************************************/ |
| #ifndef __BBM_H__ |
| #define __BBM_H__ |
| |
| #include "Typedef.h" |
| |
| #define MBBT_VERSION_1 0x31303031 |
| /* |
| * For some nand flash with higher manufacturing process, such as 1xnm, |
| * page program in a block must start from low address to high address. |
| * Do not use this macro if not know what it means. |
| */ |
| //#define BBT_ORDER_REVERSE |
| |
| #define READ_DISTURB_LIST_ID 0x52444953 //'RDIS' |
| |
| #if defined(NEZHA701) |
| /* P701 need to reserve larger area for BBM */ |
| #define LEGACY_BBM_RELOC_PERCENTAGE (7) |
| #elif defined(NEZHA702) |
| /* P702 need to reserve larger area for BBM */ |
| #define LEGACY_BBM_RELOC_PERCENTAGE (10) |
| #else |
| /* 5% of whole device is enough for most FLASH */ |
| #define LEGACY_BBM_RELOC_PERCENTAGE (5) |
| #endif |
| |
| // Indicates the state of the BBT in volatile memory |
| typedef enum |
| { |
| BBT_INVALID = 1, |
| BBT_UNCHANGED = 2, |
| BBT_CHANGED = 3, |
| BBT_ERASED = 4, |
| BBT_NEED_SYNC = 5, |
| ABBT_BITFLIP0 = (1<<6), |
| ABBT_BITFLIP1 = (1<<7) |
| } ReloState_T; |
| |
| #define ABBT_STATE_MASK (0xF) |
| |
| // BBT Types |
| typedef enum |
| { |
| BBT_TYPE_NA = 0x00000000, //Runtime BBT not being used |
| BBT_TYPE_LEGACY = 0x0000524E, //Legacy version |
| BBT_TYPE_MBBT = 0x4D424254, //"MBBT" Marvell Bad Block Table (NOTE: used as ID for factory AND runtime MBBT) |
| BBT_TYPE_MBBT_FACT = 0x46616374, //"Fact" Factory Bad Block Table (sub type of the MBBT) |
| BBT_TYPE_MBBT_RUN = 0x52756E74, //"Runt" Runtime Bad Block Table (sub type of the MBBT) |
| BBT_TYPE_WNCE = 0x574E4345, //"WNCE" WinCE Bad Block Table |
| BBT_TYPE_LINX = 0x4C695E78, //"Linx" Linux Bad Block Table |
| BBT_TYPE_ASR = 0x41424254 //"ASR" Bad Block Table |
| } BBT_TYPE; |
| |
| //Block state introduced for bitflips |
| typedef enum |
| { |
| BLOCK_RECYCLED = 0xFFF1, |
| BLOCK_TO_RECYCLE = 0xFFF2, |
| BLOCK_RECYCLE_FAILED = 0xFFF3, |
| BLOCK_RELOCATED = 0xFFF4, |
| BLK_FLIP_COUNT = 0xFFFE, |
| BLOCK_BAD = 0xFFFF |
| }Block_State; |
| |
| //Relocation Pairs - same for MBBT, FBBT, and Legacy BBT |
| typedef struct { |
| USHORT From; |
| USHORT To; |
| } ReloPair_T, *P_ReloPair_T; |
| |
| typedef struct { |
| USHORT State; |
| USHORT Index; |
| }BlockState_T, *P_BlockState_T; |
| |
| // Marvell BBT Structure |
| typedef struct { |
| UINT_T Identifier; |
| UINT_T Version; |
| UINT_T Type; |
| UINT_T Reserved; |
| UINT_T PartitionID; |
| UINT_T NumRelo; |
| UINT_T BBTLocation; |
| UINT_T Reserved1; //for now, the upper 32bits of 64bit address are reserved |
| UINT_T BackupBBTLoc; |
| UINT_T Reserved2; //for now, the upper 32bits of 64bit address are reserved |
| ReloPair_T Entry[1]; //need to make it an array |
| } MBBT_Table_T, *P_MBBT_Table_T; |
| |
| // Factory BBT Structure |
| typedef struct { |
| UINT_T Identifier; |
| UINT_T Version; |
| UINT_T Type; |
| UINT_T Reserved0; |
| UINT_T Reserved1; |
| UINT_T NumRelo; |
| UINT_T BBTLocation; |
| UINT_T Reserved2; //for now, the upper 32bits of 64bit address are reserved |
| UINT_T Reserved3; |
| UINT_T Reserved4; |
| USHORT BadBlocks[1]; //need to make it an array |
| } FBBT_Table_T, *P_FBBT_Table_T; |
| |
| //1.001 |
| #define ABBT_VERSION 0x31303031 |
| //1.002 |
| #define ABBT_VERSION_1002 0x31303032 |
| //2.001, use complement to distinguish from previous version more clearly |
| #define ABBT_VERSION_2001 (~0x32303031) |
| |
| typedef enum { |
| BBT_NONE = 0, |
| BBT_OBM = 1, |
| BBT_UBOOT = 2, |
| BBT_KERNEL = 3, |
| }BBT_Owner; |
| |
| struct BBT_INFO_Bits { |
| UINT_T Owner : 2; |
| UINT_T Reserved : 14; |
| UINT_T CRC : 16; |
| }; |
| |
| typedef union { |
| UINT_T Value; |
| struct BBT_INFO_Bits Bits; |
| }BBT_INFO; |
| |
| //ASR BBT Structure |
| typedef struct { |
| UINT_T Identifier; |
| UINT_T Version; |
| union { |
| UINT_T Type; |
| BBT_INFO Info; |
| }; |
| UINT_T RefCounter; |
| UINT_T NumReloc; |
| union { |
| UINT_T BackupBBTLoc; |
| UINT_T Reserved0; |
| }; |
| UINT_T NumBlockRecyled; |
| UINT_T NumBlockToRecyle; |
| union{ |
| ReloPair_T Relo[2]; //need to make it an array |
| BlockState_T BlkInfo[2]; // |
| UINT_T ReloValue[2]; |
| }; |
| } ABBT_Table_T, *P_ABBT_Table_T; |
| |
| // Legacy BBT Structure |
| typedef struct |
| { |
| USHORT Header; |
| USHORT NumReloc; |
| ReloPair_T Relo[2]; |
| } ReloTable_T, *P_ReloTable_T; |
| |
| /* need to update if ABBT_Table_T changes */ |
| #define ABBT_HEADER_SIZE (32) |
| /* need to update if ReloTable_T changes */ |
| #define BBT_HEADER_SIZE (4) |
| |
| #if (RVCT || DS5) |
| #pragma anon_unions |
| #endif |
| //Read Disturb entries |
| typedef struct |
| { |
| union |
| { |
| unsigned int value; |
| struct |
| { |
| USHORT block; |
| USHORT partition; |
| }; |
| }; |
| } ReadDisturbEntry_T, *P_ReadDisturbEntry_T; |
| |
| // Read Distrub structure to keep track of read disturbed blocks |
| typedef struct |
| { |
| UINT_T RDID; //Read Disturb ID |
| UINT_T num_entries; |
| ReadDisturbEntry_T entries[10]; |
| } ReadDisturbList_T, *P_ReadDisturbList_T; |
| |
| #endif |