/* ************************************************************************************************************************ * ANALYZE NAND FLASH STORAGE SYSTEM * *Description: Analyze nand flash storage system, generate the nand flash physical * architecture parameter and connect information. * *Arguments : none * *Return : analyze result; * = 0 analyze successful; * < 0 analyze failed, can't recognize or some other error. ************************************************************************************************************************ */ __s32 BOOT_AnalyzeNandSystem(void) { __s32 result; __u32 i; __u8 tmpChipID[8]; boot_nand_para_t nand_info; if( BOOT_NandGetPara( &nand_info ) != 0 ){ return -1; } _InitNandPhyInfo(&nand_info); //reset the nand flash chip on boot chip select result = PHY_ResetChip(BOOT_CHIP_SELECT_NUM); result |= PHY_SynchBank(BOOT_CHIP_SELECT_NUM, SYNC_CHIP_MODE); if(result) return -1; //read nand flash chip ID from boot chip result = PHY_ReadNandId(BOOT_CHIP_SELECT_NUM, tmpChipID); if(result) return -1; //check nand ID result = _CheckNandID(tmpChipID); if(result) return -1; /*configure page size*/ { NFC_INIT_INFO nfc_info; nfc_info.bus_width = 0x0; nfc_info.ce_ctl = 0x0; nfc_info.ce_ctl1 = 0x0; nfc_info.debug = 0x0; nfc_info.pagesize = SECTOR_CNT_OF_SINGLE_PAGE; nfc_info.rb_sel = 1; nfc_info.serial_access_mode = 1; nfc_info.ddr_type = DDR_TYPE; NFC_ChangMode(&nfc_info); NandIndex = 0; } PHY_ChangeMode(1); if(SUPPORT_READ_RETRY&&(((READ_RETRY_TYPE>>16)&0xff) <0x10)) //boot0 only support hynix readretry { SCAN_DBG("NFC Read Retry Init. \n"); NFC_ReadRetryInit(READ_RETRY_TYPE); PHY_GetDefaultParam(0); } else {
/* ************************************************************************************************************************ * GET FLASH INFO * *Description: get some info about nand flash; * *Arguments : *param the stucture with info. * *Return : = SUCESS get ok; * = FAIL get fail. ************************************************************************************************************************ */ __s32 NFB_GetFlashInfo(boot_flash_info_t *param) { boot_nand_para_t nand_info; BOOT_NandGetPara(&nand_info); param->chip_cnt = nand_info.ChipCnt; param->blk_cnt_per_chip = nand_info.BlkCntPerDie * nand_info.DieCntPerChip; param->blocksize = nand_info.SectorCntPerPage * nand_info.PageCntPerPhyBlk; param->pagesize = nand_info.SectorCntPerPage; param->pagewithbadflag = 0 ; // fix page 0 as bad flag page index return 0; }