/* ************************************************************************************************************************ * SCAN NAND HW * *Description: initial nand flash,request hardware resources; * *Arguments : void. * *Return : = SUCESS initial ok; * = FAIL initial fail. ************************************************************************************************************************ */ __s32 NAND_HWScanStart(boot_nand_para_t *nand_param) { __s32 ret; NAND_Print("NHW : start nand scan\n"); ret = PHY_Init(); if (ret) { NAND_Print("NHW : nand phy init fail\n"); return ret; } ret = SCN_AnalyzeNandSystem(); if (ret) { NAND_Print("NHW : nand scan fail\n"); return ret; } NAND_GetParam(nand_param); //nand_param->good_block_ratio = nand_good_blk_ratio; //nand_good_block_ratio_flag = nand_param->good_block_ratio; NAND_Print("NHW : nand hw scan ok\n"); return(PHY_ChangeMode(1)); }
/* ************************************************************************************************************************ * INIT NAND FLASH * *Description: initial nand flash,request hardware resources; * *Arguments : void. * *Return : = SUCESS initial ok; * = FAIL initial fail. ************************************************************************************************************************ */ __s32 NAND_PhyInit(void) { __s32 ret; // __u32 nand_good_blk_ratio; boot_nand_para_t param; // if(!nand_good_block_ratio_flag) // { // if(wBoot_get_para( WBOOT_PARA_NANDFLASH_INFO, (void *)¶m)) // { // NAND_Print("get good block ratio info failed.\n"); // return -1; // } // nand_good_blk_ratio = param.good_block_ratio; // } // else // { // nand_good_blk_ratio = nand_good_block_ratio_flag; // } // NAND_Print("get the good blk ratio from hwscan : %d \n", nand_good_blk_ratio); NAND_Print("NB1 : enter phy init\n"); ret = PHY_Init(); if (ret) { NAND_Print("NB1 : nand phy init fail\n"); return ret; } ret = SCN_AnalyzeNandSystem(); if (ret) { NAND_Print("NB1 : nand scan fail\n"); return ret; } if(!bad_block_scan_flag) { NAND_GetParam((void *)¶m); nand_good_blk_ratio = NAND_BadBlockScan((void *)¶m); NAND_SetValidBlkRatio(nand_good_blk_ratio); NAND_Print("get the good blk ratio from bad block scan : %d \n", nand_good_blk_ratio); bad_block_scan_flag = 1; } else { NAND_Print(" bad blcok has done before,nand good block ratio is : %d \n", nand_good_blk_ratio); NAND_SetValidBlkRatio(nand_good_blk_ratio); } NAND_Print("NB1 : nand phy init ok\n"); return(PHY_ChangeMode(1)); }
/* ************************************************************************************************************ * * function * * name : * * parmeters : * * return : * * note : * * ************************************************************************************************************ */ int get_nand_para(void *boot_buf) { boot0_file_head_t *boot0_buf; char *data_buf; boot_nand_para_t0 *nand_para; boot0_buf = (boot0_file_head_t *)boot_buf; data_buf = boot0_buf->prvt_head.storage_data; nand_para = (boot_nand_para_t0 *)data_buf; NAND_GetParam(nand_para); return 0; }
/* ************************************************************************************************************ * * function * * name : * * parmeters : * * return : * * note : * * ************************************************************************************************************ */ int get_nand_para(void *boot_buf) { boot0_file_head_t *boot0_buf; char *data_buf; boot_nand_para_t0 *nand_para; sbrom_toc0_config_t * secure_toc0_buf; if(!NAND_IS_Secure_sys())//secure { secure_toc0_buf = (sbrom_toc0_config_t *)(boot_buf + SBROM_TOC0_HEAD_SPACE); data_buf = secure_toc0_buf->storage_data; nand_para = (boot_nand_para_t0 *)data_buf; } else//nonsecure { boot0_buf = (boot0_file_head_t *)boot_buf; data_buf = boot0_buf->prvt_head.storage_data; nand_para = (boot_nand_para_t0 *)data_buf; } NAND_GetParam(nand_para); return 0; }