sdk-hwV1.3/lichee/linux-4.9/modules/nand/common1/phy-nand/spinand/spinand.h

48 lines
2.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __SPINAND_H__
#define __SPINAND_H__
#include "../nand-partition/phy.h"
#include <linux/mtd/aw-spinand-nftl.h>
#define SPINAND_SUPPORT_READ_RECLAIM (1)
#define SPINAND_SECTOR_CNT_OF_SUPER_PAGE (spinand_nftl_get_super_page_size(SECTOR))
#define SPINAND_FULL_BITMAP_OF_SUPER_PAGE ((__u64)(((__u64)1 << (SPINAND_SECTOR_CNT_OF_SUPER_PAGE - 1)) | (((__u64)1 << (SPINAND_SECTOR_CNT_OF_SUPER_PAGE - 1)) - 1)))
#define SECTOR_CNT_OF_SINGLE_PAGE (spinand_nftl_get_single_page_size(SECTOR))
#define FULL_BITMAP_OF_SINGLE_PAGE ((__u32)(((__u32)1 << (SECTOR_CNT_OF_SINGLE_PAGE - 1)) | (((__u32)1 << (SECTOR_CNT_OF_SINGLE_PAGE - 1)) - 1)))
/*define the nand flash storage system information*/
typedef struct spinand_storage_info {
__u8 ChipCnt; /*the count of the total nand flash chips are currently connecting on the CE pin*/
__u16 ChipConnectInfo; /*chip connect information, bit == 1 means there is a chip connecting on the CE pin*/
__u8 ConnectMode; /*the rb connect mode*/
__u8 BankCntPerChip; /*the count of the banks in one nand chip, multiple banks can support Inter-Leave*/
__u8 DieCntPerChip; /*the count of the dies in one nand chip, block management is based on Die*/
__u8 PlaneCntPerDie; /*the count of planes in one die, multiple planes can support multi-plane operation*/
__u8 SectorCntPerPage; /*the count of sectors in one single physic page, one sector is 0.5k*/
__u16 PageCntPerPhyBlk; /*the count of physic pages in one physic block*/
__u32 BlkCntPerDie; /*the count of the physic blocks in one die, include valid block and invalid block*/
__u32 OperationOpt; /*the mask of the operation types which current nand flash can support support*/
__u8 NandChipId[8]; /*the nand chip id of current connecting nand chip*/
__u32 MaxEraseTimes; /*the max erase times of a physic block*/
} spinand_storage_info_t;
extern spinand_storage_info_t spinand_storage_info;
extern struct _boot_info *phyinfo_buf;
unsigned int spinand_lsb_page_cnt_per_block(void);
unsigned int spinand_get_page_num(unsigned int lsb_page_no);
void spinand_get_nand_info(struct _nand_info *aw_nand_info);
struct _nand_info *spinand_hardware_init(void);
__s32 spinand_hardware_exit(void);
#endif /*SPINAND_H*/