/* * (C) Copyright 2013-2016 * Allwinner Technology Co., Ltd. * */ #ifndef __basic_nf_func_h #define __basic_nf_func_h #define BOOT0_START_BLK_NUM 0 #if defined(CONFIG_ARCH_SUN8IW7) || defined(CONFIG_ARCH_SUN8IW11) #define BLKS_FOR_BOOT0 2 #else #define BLKS_FOR_BOOT0 4 #endif #define BOOT1_START_BLK_NUM BLKS_FOR_BOOT0 #define BLKS_FOR_BOOT1_IN_16K_BLK_NF 32 #define BLKS_FOR_BOOT1_IN_32K_BLK_NF 8 #define BLKS_FOR_BOOT1_IN_128K_BLK_NF 5 #if defined(CONFIG_ARCH_SUN8IW7) #define BLKS_FOR_BOOT1_IN_256K_BLK_NF 40 #define BLKS_FOR_BOOT1_IN_512K_BLK_NF 20 #else #define BLKS_FOR_BOOT1_IN_256K_BLK_NF 5 #define BLKS_FOR_BOOT1_IN_512K_BLK_NF 5 #endif #define BLKS_FOR_BOOT1_IN_1M_BLK_NF 5 #define BLKS_FOR_BOOT1_IN_2M_BLK_NF 5 #define BLKS_FOR_BOOT1_IN_4M_BLK_NF 5 #define BLKS_FOR_BOOT1_IN_8M_BLK_NF 5 extern __u32 NF_BLOCK_SIZE; extern __u32 NF_BLK_SZ_WIDTH; extern __u32 NF_PAGE_SIZE; extern __u32 NF_PG_SZ_WIDTH; extern __u32 BOOT1_LAST_BLK_NUM; extern __u32 page_with_bad_block; extern __u32 BOOT1_START_BLK; #define NF_SECTOR_SIZE 512U #define NF_SCT_SZ_WIDTH 9U #define OOB_BUF_SIZE_PER_SECTOR 4 #define NF_OK 0 #define NF_GOOD_BLOCK 0 #define NF_OVERTIME_ERR 1 #define NF_ECC_ERR 2 #define NF_BAD_BLOCK 3 #define NF_ERASE_ERR 4 #define NF_PROG_ERR 5 #define NF_NEW_BAD_BLOCK 6 #define NF_LACK_BLKS 7 #define NF_ERROR -1 #define NF_ERR_COUNT 8 #define MAX_PAGE_SIZE SZ_8K #define BAD_BLK_FLAG 0 typedef enum { ADV_NF_OK =0, ADV_NF_FIND_OK =0, ADV_NF_NO_NEW_BAD_BLOCK =0, ADV_NF_ERROR , ADV_NF_NO_FIND_ERR , ADV_NF_OVERTIME_ERR , ADV_NF_LACK_BLKS , ADV_NF_NEW_BAD_BLOCK , }adv_nf_errer_e; extern __s32 load_and_check_in_one_blk( __u32 blk_num, void *buf, __u32 size, __u32 blk_size); extern __s32 load_in_many_blks( __u32 start_blk, __u32 last_blk_num, void *buf, __u32 size, __u32 blk_size, __u32 *blks ); extern __s32 write_in_one_blk( __u32 blk_num, void *buf, __u32 size, __u32 blk_size ); extern __s32 write_in_many_blks( __u32 start_blk, __u32 last_blk_num, void *buf, __u32 size, __u32 blk_size, __u32 * blks ); extern __s32 NF_open ( void ); extern __s32 NF_close( void ); extern __s32 NF_read ( __u32 sector_num, void *buffer, __u32 N ); extern __s32 NF_write( __u32 sector_num, void *buffer, __u32 N ); extern __s32 NF_erase( __u32 blk_num ); extern __s32 NF_read_status ( __u32 blk_num ); extern __s32 NF_mark_bad_block( __u32 blk_num ); extern __s32 NF_verify_block( __u32 blk_num ); struct boot_physical_param; extern __u32 NAND_Getlsbpage_type(void); extern __u32 NAND_GetLsbblksize(void); extern __s32 NFB_PhyInit(void); extern __s32 NFB_PhyExit(void); extern __s32 NFB_PhyRead (struct boot_physical_param *readop); extern __u32 Nand_Is_lsb_page(__u32 page); extern __u8 *get_page_buf( void ); extern __s32 check_magic( __u32 *mem_base, const char *magic ); extern __u32 load_uboot_in_one_block_judge(__u32 length); extern int verify_addsum( void *mem_base, __u32 size ); extern __u32 g_mod( __u32 dividend, __u32 divisor, __u32 *quot_p ); extern __s32 check_sum( __u32 *mem_base, __u32 size ); #endif