コード例 #1
0
/*
************************************************************************************************************************
*                       INIT NAND DRIEVER
*
*Description: configure nand flash driver;
*
*Arguments  : void
*Return     :   = SUCESS  	init ok;
*               = other    	init fail.

************************************************************************************************************************
*/
__s32 NAND_Init(void)
{
	__s32  result;

	NAND_Print("NB1 : enter NFB_Init\n");

	result = NAND_PhyInit();
	if (result < 0)
	{
		NAND_Print("NB1 : phy init fail\n");
		return -1;
	}

    //Format nand flash for logical access
    result = FMT_Init();
    if(result < 0)
    {
    	NAND_Print("NB1 : format init fail\n");
		return -5;
    }

    result = FMT_FormatNand();
    if(result < 0)
    {
    	NAND_Print("NB1 : format fail\n");
        return -6;
    }

    result = FMT_Exit();
    if(result < 0)
    {
        return -7;
    }

    //Init nand flash logical module
    result = LML_Init();
    if(result < 0)
    {
         return -8;
    }
#ifdef BOOT_CACHE_OPEN
    result = NAND_CacheOpen();
#endif

    NAND_Print("NB1 : init ok\n");
    return result;
}
コード例 #2
0
ファイル: nand_for_uboot.c プロジェクト: djytw/bootloader
int nand_download_boot0(uint length, void *buffer)
{
	int ret;

	if(!NAND_PhyInit())
	{
    	ret = NAND_BurnBoot0(length, buffer);
    }
    else
    {
    	ret = -1;
    }

    NAND_PhyExit();

    return ret;
}
コード例 #3
0
ファイル: nand_for_uboot.c プロジェクト: djytw/bootloader
int nand_download_uboot(uint length, void *buffer)
{
	int ret;

	debug("nand_download_uboot\n");
	if(!NAND_PhyInit())
	{
    	ret = NAND_BurnUboot(length, buffer);
    	debug("nand burn uboot error ret = %d\n", ret);
    }
    else
    {
    	debug("nand phyinit error\n");
    	ret = -1;
    }

    NAND_PhyExit();

    return ret;
}
コード例 #4
0
/*
************************************************************************************************************
*
*                                             function
*
*    函数名称:
*
*    参数列表:
*
*    返回值  :
*
*    说明    :
*
*
************************************************************************************************************
*/
__s32 NF_open( void )
{
	__u32  blk_for_boot1;
	struct boot_flash_info info;

	if( NAND_PhyInit( ) == FAIL )
		return NF_ERROR;

	if( NAND_GetFlashInfo( &info ) == FAIL )
	{
		goto error;
	}

	page_with_bad_block = info.pagewithbadflag;
	NF_BLOCK_SIZE = info.blocksize * NF_SECTOR_SIZE;
	switch( NF_BLOCK_SIZE )
	{
		case SZ_16K :
			NF_BLK_SZ_WIDTH = 14;
			blk_for_boot1   = BLKS_FOR_BOOT1_IN_16K_BLK_NF;
			break;
		case SZ_32K :
			NF_BLK_SZ_WIDTH = 15;
			blk_for_boot1   =  BLKS_FOR_BOOT1_IN_32K_BLK_NF;
			break;
		case SZ_128K :
			NF_BLK_SZ_WIDTH = 17;
			blk_for_boot1   =  BLKS_FOR_BOOT1_IN_128K_BLK_NF;
			break;
		case SZ_256K :
			NF_BLK_SZ_WIDTH = 18;
			blk_for_boot1   =  BLKS_FOR_BOOT1_IN_256K_BLK_NF;
			break;
		case SZ_512K :
			NF_BLK_SZ_WIDTH = 19;
			blk_for_boot1   =  BLKS_FOR_BOOT1_IN_512K_BLK_NF;
			break;
		case SZ_1M :
			NF_BLK_SZ_WIDTH = 20;
			blk_for_boot1   =  BLKS_FOR_BOOT1_IN_1M_BLK_NF;
			break;
		case SZ_2M :
			NF_BLK_SZ_WIDTH = 21;
			blk_for_boot1   =  BLKS_FOR_BOOT1_IN_2M_BLK_NF;
			break;
		case SZ_4M :
			NF_BLK_SZ_WIDTH = 22;
			blk_for_boot1   =  BLKS_FOR_BOOT1_IN_4M_BLK_NF;
			break;
		default :
			goto error;
	}
	BOOT1_LAST_BLK_NUM = BOOT1_START_BLK_NUM + blk_for_boot1 - 1;

	NF_PAGE_SIZE = info.pagesize * NF_SECTOR_SIZE;
	switch( NF_PAGE_SIZE )
	{
		case SZ_512 :
			NF_PG_SZ_WIDTH =  9;
			break;
		case SZ_2K :
			NF_PG_SZ_WIDTH = 11;
			break;
		case SZ_4K :
			NF_PG_SZ_WIDTH = 12;
			break;
		case SZ_8K :
			NF_PG_SZ_WIDTH = 13;
			break;
		case SZ_16K :
			NF_PG_SZ_WIDTH = 14;
			break;
		default :
			goto error;
	}

	return NF_OK;

error:
	NAND_PhyExit( );

	return NF_ERROR;
}