?? flash_util_func.h
字號:
/*******************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2004
*
*******************************************************************************/
/*******************************************************************************
*
* Filename:
* ---------
* flash_util_func.h
*
* Project:
* --------
* FlashTool Download Agent
*
* Description:
* ------------
* Flash relative utility functions
*
* Author:
* -------
* Amos Hsu
*
*==============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* $Revision: 1.7 $
* $Modtime: Jan 05 2006 17:08:00 $
* $Log: //mtkvs01/vmdata/flash_tool/archives/DA/INC/flash_util_func.h-arc $
*
* Rev 1.7 Jan 14 2006 00:22:00 mtk00539
* New features:
* 1. [DA] Supports INTEL Sibley family flash.
* Resolution for 159: [FlashTool v2.7.1015]
*
* Rev 1.6 Oct 19 2005 14:45:02 mtk00539
* 1. [BROM_DLL&DA][New] New H/W devices detection architecture including NOR, NAND, SRAM and DRAM detection.
* 2. [BROM_DLL&DA][New] DA partial download technic, that overcomes DA size exceeds MT6205B internal SRAM (32KB).
* 3. [BROM_DLL&DA][New] Format verification option, each byte should be 0xFF after erasure.
* 4. [BROM_DLL&DA][New] DA validation to ensure invalid binary could not be loaded.
* 5. [BROM_DLL&DA][New] Support NFB download.
* 6. [BROM_DLL&DA][New] Support NAND flash format with 3 method, NORMAL, FORCEDLY ERASE and MARK AS BAD BLOCK.
* 7. [BROM_DLL&DA][New] Support NAND flash read back with 4 methods, PAGE+ECC, PAGE ONLY, SPARE ONLY and PAGE+SPARE.
* Resolution for 140: [BROM_DLL v2.7.1008][New] Support NFB download and many new features.
*
* Rev 1.5 Jun 15 2005 12:37:00 mtk00539
* 1. [DA][New] Support new flash devices TV0057A002AABD and TV0057A002AABD.
* 2. [DA][New] Support RENESAS flash with F-WP#(LOW).
* Resolution for 118: [BROM_DLL v2.4.1013][New] Support RENESAS flash with F-WP#(LOW).
*
* Rev 1.4 Nov 22 2004 12:23:50 mtk00539
* 1. [DA][BUG FIX] Add data verification in status polling during erase or program operation.
* 2. [DA][BUG FIX] Fix two dies flash detection fail in INTEL_CheckDevID().
* 3. [DA][Change Behavior] When RX_BUFFER_FULL occurs, flush data queued in UART ring buffer til data is less than 512KB.
* 4. [DA][New] Support Buffered-Program method for INTEL family flashes.
* 5. [DA][New] Support new flashes [SHARP]LRS1828C and [RENESAS]M6MGB64BM34CDG.
* Resolution for 99: [BROM_DLL v2.4.1008][New] Support INTEL family flash Buffered-Program method.
*
* Rev 1.3 Nov 05 2004 10:37:32 mtk00539
* 1. [DA][BUG FIX] Fix format progress report error, percentage variable should not just use uint8.
* 2. [DA][BUG FIX] Fix command error for AMD protection routines.
* 3. [DA][Enhance] Fix UART_Printf compile warning in UART.C
* Resolution for 96: [BROM_DLL v2.4.1007][New] Implement S/W compatible mechanism for MT6218B_FN and MT6218B_GN.
*
* Rev 1.2 Oct 29 2004 11:47:16 mtk00539
* 1. [DA][BUG FIX] Read CFI boot sector flag to determine AM49DL3208GT and S71PL032J, since both flashes have the same id, but different layout.
* 2. [DA][BUG FIX] Fix INTEL and RENESAS status checking flow.
* 3. [DA][Enhance] Dump more logs in TEST_ExtSRAM().
* 4. [DA][New] Support new flashes
* [SAMSUNG] K5J6316CTM
* [TOSHIBA] TH50VPF5682CDSB
* [TOSHIBA] TH50VPF5683CDSB
* [ISSI] IS75V16F128GS32
* [RENESAS] M6MGT64BM34CDG
* [ST] M30L0T7000T0, M36L0T7050T0
* [ST] M30L0T7000B0, M36L0T7050B0
* [SHARP] LRS1862
* [SHARP] LRS1806A
* [AMD] AM49DL3208GT
* [SPANSION] S29PL032J, S71PL032J
* Resolution for 92: [BROM_DLL v2.4.1006][BUG FIX] Fix AM49DL3208GT & S71PL032J download fail problem and some enhancement.
*
* Rev 1.1 Aug 03 2004 10:42:44 mtk00539
* 1. [DA][BUG FIX] Invoke Board_Schematic()(old name is HW_Init()) before FUTL_CheckDevice(). Because FUTL_CheckDevice() must know the absolute address for each bank.
* 2. [DA][New] Add 12 new flash devices support
* [SAMSUNG]K5A3280YT,
* [TOSHIBA]TH50VPF6782AASB,
* [TOSHIBA]TH50VPF6783AASB,
* [TOSHIBA]TV00578002AABD,
* [TOSHIBA]TV00578003AABD,
* [Fujitsu]MB84VP24581HK,
* [INTEL]INTEL_28F640W30_B,
* [SPANSION]AM49PDL127BH,
* [SPANSION]AM49PDL129BH,
* [RENESAS]M6MGD13BW66CDG,
* [Winbond]W19B322TM,
* [Winbond]W19B323TM,
* 3. [DA][New] Readback check after WORD program is done, so that DA won't have to keep the chksum.
* 4. [DA][New] Auto-detect baseband chip type.
* 5. [DA][New] Auto-detect external SRAM size.
* 6. [DA][New] Merge MT6205B, MT6218B and MT6219 to an all-in-one DA.
* 7. [DA][New] Merge flash stress test module.
* 8. [DA][New] Modify makefile to build ARM or THUMB code.
* 9. [DA][New] Construct a customization kit for customers to add new flash or SOC checking algorithm by themselves.
* 10. [DA][Enhance] Split out AM29PDL128G function to improve the performance of general AMD callback functions.
* 11. [DA][Enhance] Enhance RX_BUFF_FULL behavior to prevent always retry two times.
* Resolution for 83: [BROM_DLL v2.4.1002] Merge all the DAs into all-in-one DA and fix many bugs and enhancement.
*
* Rev 1.0 Jul 19 2004 01:46:44 mtk00539
* Initial revision.
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*==============================================================================
*******************************************************************************/
#ifndef _FLASH_UTIL_FUNC_H_
#define _FLASH_UTIL_FUNC_H_
#include "hw_config.h"
#include "flash_dev_tbl.h"
#define CB_CHECK_DEV_IDLE(dev, addr) g_FlashDevTbl[dev].m_cmd->m_cb_chk_dev_idle(addr)
#define CB_SECTOR_ERASE(dev, blockaddr) g_FlashDevTbl[dev].m_cmd->m_cb_sec_erase(blockaddr)
#define CB_SECTOR_ERASE_CHECK_DONE(dev, blockaddr) g_FlashDevTbl[dev].m_cmd->m_cb_sec_erase_chk_done(blockaddr)
#define CB_PROGRAM_PRE_PROCESS(dev) g_FlashDevTbl[dev].m_cmd->m_cb_pgm_pre_process(dev)
#define CB_PROGRAM_POST_PROCESS(dev) g_FlashDevTbl[dev].m_cmd->m_cb_pgm_post_process(dev)
#define CB_PROGRAM_ENTER(dev, blockaddr) g_FlashDevTbl[dev].m_cmd->m_cb_pgm_enter(blockaddr)
#define CB_PROGRAM_EXIT(dev, blockaddr) g_FlashDevTbl[dev].m_cmd->m_cb_pgm_exit(blockaddr)
#define CB_PROGRAM(dev, ba, pa, data) g_FlashDevTbl[dev].m_cmd->m_cb_pgm(ba, pa, data)
#define CB_PROGRAM_CHECK_DONE(dev, prog_addr) g_FlashDevTbl[dev].m_cmd->m_cb_pgm_check_done(prog_addr)
#define CB_BUF_PROGRAM(dev, ba, pa, data, len) g_FlashDevTbl[dev].m_cmd->m_cb_buf_pgm(ba, pa, data, len)
#define CB_BUF_PROGRAM_CHECK_DONE(dev, prog_addr) g_FlashDevTbl[dev].m_cmd->m_cb_buf_pgm_check_done(prog_addr)
#define BUFPGM_SUPPORT(dev) ((NULL!=g_FlashDevTbl[dev].m_cmd->m_cb_buf_pgm) && (NULL!=g_FlashDevTbl[dev].m_cmd->m_cb_buf_pgm_check_done))
#define FLASH_DIE(dev, die_num) (g_FlashDevTbl[dev].m_hw_info.m_die[die_num])
#define FLASH_DIE_LAYOUT(dev, die_num) (g_FlashDevTbl[dev].m_hw_info.m_die[die_num].m_die_layout)
#define FLASH_DIE_SIZE(dev, die_num) (g_FlashDevTbl[dev].m_hw_info.m_die[die_num].m_die_layout->m_size)
#define FLASH_DIE_COUNT(dev) (g_FlashDevTbl[dev].m_hw_info.m_die_count)
#define REGION_BASE_OFFSET(dev, die_num, region) (g_FlashDevTbl[dev].m_hw_info.m_die[die_num].m_die_layout->m_region_map[region].m_base_offset)
#define REGION_SECTOR_COUNT(dev, die_num, region) (g_FlashDevTbl[dev].m_hw_info.m_die[die_num].m_die_layout->m_region_map[region].m_sector_count)
#define REGION_SECTOR_SIZE(dev, die_num, region) (g_FlashDevTbl[dev].m_hw_info.m_die[die_num].m_die_layout->m_region_map[region].m_sector_size)
#define REGION_SIZE(dev, die_num, region) (REGION_SECTOR_COUNT(dev, die_num, region)*REGION_SECTOR_SIZE(dev, die_num, region))
#define IF_EMPTY_REGION(dev, die_num, region) ((0==(g_FlashDevTbl[dev].m_hw_info.m_die[die_num].m_die_layout->m_region_map[region].m_sector_count))?TRUE:FALSE)
#ifdef __cplusplus
extern "C" {
#endif
extern STATUS_E FUTL_CheckDevice(void);
extern bool FUTL_CheckRange(const uint32 start_addr, const uint32 length);
extern bool FUTL_SearchBaseAddr(const uint32 addr, uint32 *blk_addr, uint32 *blk_size);
extern uint32 FUTL_GetFlashDieBaseAddr(const uint16 die_num);
extern uint32 FUTL_GetFlashSize(void);
extern STATUS_E FUTL_EraseSector(const uint32 addr, const uint32 blk_size, bool bValidation);
extern STATUS_E FUTL_Erase_CheckDone(const uint32 blockaddr, const uint32 blocksize, bool bValidation);
extern STATUS_E FUTL_Program_CheckDone(const uint32 prog_addr, const uint16 verify_data);
extern STATUS_E FUTL_Buf_Program_CheckDone(const uint32 prog_addr, const uint16 *verify_data, const uint32 length_in_word);
#define INTEL_SIBLEY_PGM_REGION_SIZE_IN_BYTE 1024
#define MAX_BUFPGM_SIZE_IN_WORD (INTEL_SIBLEY_PGM_REGION_SIZE_IN_BYTE/2) // For INTEL Sibley, the max buffer is up to 1KB
extern uint16 g_FLASH_PGM_BUF[MAX_BUFPGM_SIZE_IN_WORD];
extern uint32 g_FLASH_MAX_BUFPGM_SIZE_IN_BYTE;
extern uint32 g_FLASH_CUR_PGM_COUNT;
extern uint32 g_FLASH_CUR_PGM_ADDR;
extern uint32 g_FLASH_LAST_PGM_COUNT;
extern uint32 g_FLASH_LAST_PGM_ADDR;
#ifdef __cplusplus
}
#endif
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -