/*
************************************************************************************************************************
*                       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 *)&param))
//    	{
//			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 *)&param);
		nand_good_blk_ratio =  NAND_BadBlockScan((void *)&param);
		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));
}
Пример #3
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;

	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;
}
Пример #4
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;
}