Files
u-boot-sunxi/nand_sunxi/nand_interface/nand_for_uboot.c
2013-02-23 14:52:12 +08:00

129 lines
2.5 KiB
C
Executable File

/*
************************************************************************************************************
*
* function
*
* name :
*
* parmeters :
*
* return :
*
* note :
*
*
************************************************************************************************************
*/
#include <common.h>
#include <malloc.h>
#include "nand_bsp.h"
extern int NAND_UbootInit(int boot_mode);
extern int NAND_UbootToPhy(void);
extern int NAND_UbootExit(void);
extern uint NAND_UbootRead(uint start, uint sectors, void *buffer);
extern uint NAND_UbootWrite(uint start, uint sectors, void *buffer);
extern int NAND_BurnBoot0(uint length, void *buffer);
extern int NAND_BurnUboot(uint length, void *buffer);
extern int NAND_PhyInit(void);
extern int NAND_PhyExit(void);
extern int NAND_Uboot_Erase(int erase_flag);
int nand_uboot_init(int boot_mode)
{
debug("NAND_UbootInit\n");
return NAND_UbootInit(boot_mode);
}
int nand_uboot_exit(void)
{
debug("NAND_UbootExit\n");
return NAND_UbootExit();
}
uint nand_uboot_read(uint start, uint sectors, void *buffer)
{
int ret;
ret = NAND_UbootRead(start, sectors, buffer);
if(ret<0)
return 0;
else
return sectors;
}
uint nand_uboot_write(uint start, uint sectors, void *buffer)
{
int ret;
ret = NAND_UbootWrite(start, sectors, buffer);
if(ret<0)
return 0;
else
return sectors;
}
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;
}
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;
}
int nand_uboot_erase(int user_erase)
{
return NAND_Uboot_Erase(user_erase);
}
uint nand_uboot_get_flash_info(void *buffer, uint length)
{
return NAND_GetParam_store(buffer, length);
}
uint nand_uboot_set_flash_info(void *buffer, uint length)
{
return NAND_SetParam(buffer, length);
}
uint nand_uboot_get_flash_size(void)
{
return NAND_GetDiskSize();
}