On Sat, 18 Oct 2014 23:46:57 +0200 Paul Kocialkowski <[email protected]> wrote:
> Signed-off-by: Paul Kocialkowski <[email protected]> > > --- > drivers/block/sunxi_nand/src/format/nand_format.c | 16 ++--- > .../block/sunxi_nand/src/include/nand_drv_cfg.h | 4 +- > drivers/block/sunxi_nand/src/include/nand_logic.h | 4 +- > drivers/block/sunxi_nand/src/include/nand_physic.h | 4 +- > drivers/block/sunxi_nand/src/include/nand_simple.h | 8 +-- > drivers/block/sunxi_nand/src/include/nand_type.h | 70 > ++++++++++---------- > drivers/block/sunxi_nand/src/logic/logic_cache.c | 56 +++++++++------- > drivers/block/sunxi_nand/src/logic/logic_ctl.c | 50 ++++++++------ > drivers/block/sunxi_nand/src/logic/mapping.c | 4 +- > drivers/block/sunxi_nand/src/physic/nand_phy.c | 16 ++--- > .../block/sunxi_nand/src/physic/nand_simple_r.c | 2 +- > .../block/sunxi_nand/src/physic/nand_simple_w.c | 6 +- > 12 files changed, 127 insertions(+), 113 deletions(-) This patch needs a commit message, explaining why we might want to have it applied. Does it solve some real practical problem? > diff --git a/drivers/block/sunxi_nand/src/format/nand_format.c > b/drivers/block/sunxi_nand/src/format/nand_format.c > index fe485b5..1c6db8e 100644 > --- a/drivers/block/sunxi_nand/src/format/nand_format.c > +++ b/drivers/block/sunxi_nand/src/format/nand_format.c > @@ -220,7 +220,7 @@ __s32 _CalculatePhyOpPar(struct __PhysicOpPara_t > *pPhyPar, __u32 nZone, __u32 nB > * < 0 read page data failed. > > ************************************************************************************************************************ > */ > -static __s32 _VirtualPageRead(__u32 nDieNum, __u32 nBlkNum, __u32 nPage, > __u32 SectBitmap, void *pBuf, void *pSpare) > +static __s32 _VirtualPageRead(__u32 nDieNum, __u32 nBlkNum, __u32 nPage, > __u64 SectBitmap, void *pBuf, void *pSpare) > { > __s32 i, result; > __u8 *tmpSrcData, *tmpDstData, *tmpSrcPtr[4], *tmpDstPtr[4]; > @@ -239,7 +239,7 @@ static __s32 _VirtualPageRead(__u32 nDieNum, __u32 > nBlkNum, __u32 nPage, __u32 S > //process the pointer to spare area data > for(i=0; i<2; i++) > { > - if(SectBitmap & (1<<i)) > + if(SectBitmap & ((__u64)1<<i)) > { > tmpSrcPtr[i] = FORMAT_SPARE_BUF + 4 * i; > tmpDstPtr[i] = (__u8 *)pSpare + 4 * i; > @@ -252,7 +252,7 @@ static __s32 _VirtualPageRead(__u32 nDieNum, __u32 > nBlkNum, __u32 nPage, __u32 S > > for(i=0; i<2; i++) > { > - if(SectBitmap & (1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > + if(SectBitmap & ((__u64)1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > { > tmpSrcPtr[i+2] = LML_SPARE_BUF + 4 * (i + > SECTOR_CNT_OF_SINGLE_PAGE); > tmpDstPtr[i+2] = (__u8 *)pSpare + 8 + 4 * i; > @@ -330,7 +330,7 @@ static __s32 _VirtualPageRead(__u32 nDieNum, __u32 > nBlkNum, __u32 nPage, __u32 S > * < 0 write page data failed. > > ************************************************************************************************************************ > */ > -static __s32 _VirtualPageWrite(__u32 nDieNum, __u32 nBlkNum, __u32 nPage, > __u32 SectBitmap, void *pBuf, void *pSpare) > +static __s32 _VirtualPageWrite(__u32 nDieNum, __u32 nBlkNum, __u32 nPage, > __u64 SectBitmap, void *pBuf, void *pSpare) > { > __s32 i, result; > __u8 *tmpSrcData, *tmpDstData, *tmpSrcPtr[4], *tmpDstPtr[4]; > @@ -350,7 +350,7 @@ static __s32 _VirtualPageWrite(__u32 nDieNum, __u32 > nBlkNum, __u32 nPage, __u32 > //process the pointer to spare area data > for(i=0; i<2; i++) > { > - if(SectBitmap & (1<<i)) > + if(SectBitmap & ((__u64)1<<i)) > { > tmpSrcPtr[i] = (__u8 *)pSpare + 4 * i; > tmpDstPtr[i] = FORMAT_SPARE_BUF + 4 * i; > @@ -363,7 +363,7 @@ static __s32 _VirtualPageWrite(__u32 nDieNum, __u32 > nBlkNum, __u32 nPage, __u32 > > for(i=0; i<2; i++) > { > - if(SectBitmap & (1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > + if(SectBitmap & ((__u64)1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > { > tmpSrcPtr[i+2] = (__u8 *)pSpare + 8 + 4 * i; > tmpDstPtr[i+2] = LML_SPARE_BUF + 4 * (i + > SECTOR_CNT_OF_SINGLE_PAGE); > @@ -923,7 +923,7 @@ static __s32 _GetBlkLogicInfo(struct __ScanDieInfo_t > *pDieInfo) > __s32 i; > __s16 tmpPageNum[4]; > __u16 tmpLogicInfo; > - __u32 spare_bitmap; > + __u64 spare_bitmap; > struct __NandUserData_t tmpSpare[2]; > > > @@ -980,7 +980,7 @@ static __s32 _GetBlkLogicInfo(struct __ScanDieInfo_t > *pDieInfo) > //calculate the number of the page in the super block to get > spare data > tmpPage = tmpPageNum[i] * INTERLEAVE_BANK_CNT + tmpBnkNum; > //_VirtualPageRead(pDieInfo->nDie, tmpBlkNum, tmpPage, > LOGIC_INFO_BITMAP, FORMAT_PAGE_BUF, (void *)&tmpSpare); > - spare_bitmap = (SUPPORT_MULTI_PROGRAM ? (0x3 | (0x3 << > SECTOR_CNT_OF_SINGLE_PAGE)) : 0x3); > + spare_bitmap = (SUPPORT_MULTI_PROGRAM ? ((__u64)0x3 | > ((__u64)0x3 << SECTOR_CNT_OF_SINGLE_PAGE)) : (__u64)0x3); > _VirtualPageRead(pDieInfo->nDie, tmpBlkNum, tmpPage, > spare_bitmap, FORMAT_PAGE_BUF, (void *)&tmpSpare); > > //check if the block is a bad block > diff --git a/drivers/block/sunxi_nand/src/include/nand_drv_cfg.h > b/drivers/block/sunxi_nand/src/include/nand_drv_cfg.h > index dff1d77..d331409 100644 > --- a/drivers/block/sunxi_nand/src/include/nand_drv_cfg.h > +++ b/drivers/block/sunxi_nand/src/include/nand_drv_cfg.h > @@ -46,10 +46,10 @@ > #define MAX_LOG_BLK_CNT (16) > > //define the value of the count of the block mapping table cache > -#define BLOCK_MAP_TBL_CACHE_CNT (MAX_ZONE_CNT) > +#define BLOCK_MAP_TBL_CACHE_CNT (4) > > //define the max value of the count of the page mapping table cache > -#define PAGE_MAP_TBL_CACHE_CNT (MAX_LOG_BLK_CNT * MAX_ZONE_CNT) > +#define PAGE_MAP_TBL_CACHE_CNT (4) > > //check if block mapping table cache is valid > #if (BLOCK_MAP_TBL_CACHE_CNT < 1) > diff --git a/drivers/block/sunxi_nand/src/include/nand_logic.h > b/drivers/block/sunxi_nand/src/include/nand_logic.h > index e5413ea..abb1c57 100644 > --- a/drivers/block/sunxi_nand/src/include/nand_logic.h > +++ b/drivers/block/sunxi_nand/src/include/nand_logic.h > @@ -232,7 +232,7 @@ __s32 LML_FlushPageCache(void); > * < 0 read failed. > > ************************************************************************************************************************ > */ > -__s32 LML_PageRead(__u32 nPage, __u32 nBitmap, void* pBuf); > +__s32 LML_PageRead(__u32 nPage, __u64 nBitmap, void* pBuf); > > > /* > @@ -251,7 +251,7 @@ __s32 LML_PageRead(__u32 nPage, __u32 nBitmap, void* > pBuf); > * < 0 write failed. > > ************************************************************************************************************************ > */ > -__s32 LML_PageWrite(__u32 nPage, __u32 nBitmap, void* pBuf); > +__s32 LML_PageWrite(__u32 nPage, __u64 nBitmap, void* pBuf); > > > /* > diff --git a/drivers/block/sunxi_nand/src/include/nand_physic.h > b/drivers/block/sunxi_nand/src/include/nand_physic.h > index 08dbdf3..58fa9ad 100644 > --- a/drivers/block/sunxi_nand/src/include/nand_physic.h > +++ b/drivers/block/sunxi_nand/src/include/nand_physic.h > @@ -49,10 +49,10 @@ extern struct __NandPageCachePool_t PageCachePool; > #define SECTOR_CNT_OF_SUPER_PAGE > (NandStorageInfo.SectorCntPerPage * NandStorageInfo.PlaneCntPerDie) > > //define the sector bitmap for a single page > -#define FULL_BITMAP_OF_SINGLE_PAGE > ((__u32)((1<<SECTOR_CNT_OF_SINGLE_PAGE) - 1)) > +#define FULL_BITMAP_OF_SINGLE_PAGE > ((__u64)(((__u64)1<<(SECTOR_CNT_OF_SINGLE_PAGE - 1)) | > (((__u64)1<<(SECTOR_CNT_OF_SINGLE_PAGE - 1)) - 1))) > > //define the sector bitmap for a super page, the sector count of a super > page may be equal to 32 > -#define FULL_BITMAP_OF_SUPER_PAGE > ((__u32)((1<<(SECTOR_CNT_OF_SUPER_PAGE - 1)) | ((1<<(SECTOR_CNT_OF_SUPER_PAGE > - 1)) - 1))) > +#define FULL_BITMAP_OF_SUPER_PAGE > ((__u64)(((__u64)1<<(SECTOR_CNT_OF_SUPER_PAGE - 1)) | > (((__u64)1<<(SECTOR_CNT_OF_SUPER_PAGE - 1)) - 1))) > > //define the block number offset for the multi-plane operation > #define MULTI_PLANE_BLOCK_OFFSET > (NandStorageInfo.OptPhyOpPar.MultiPlaneBlockOffset) > diff --git a/drivers/block/sunxi_nand/src/include/nand_simple.h > b/drivers/block/sunxi_nand/src/include/nand_simple.h > index 9adcd33..4804fa0 100644 > --- a/drivers/block/sunxi_nand/src/include/nand_simple.h > +++ b/drivers/block/sunxi_nand/src/include/nand_simple.h > @@ -30,10 +30,10 @@ > #define BADBLOCK -2 > > struct boot_physical_param{ > - __u8 chip; //chip no > - __u16 block; // block no within chip > - __u16 page; // apge no within block > - __u16 sectorbitmap; //done't care > + __u32 chip; //chip no > + __u32 block; // block no within chip > + __u32 page; // apge no within block > + __u64 sectorbitmap; //done't care > void *mainbuf; //data buf > void *oobbuf; //oob buf > }; > diff --git a/drivers/block/sunxi_nand/src/include/nand_type.h > b/drivers/block/sunxi_nand/src/include/nand_type.h > index 0c0fd24..4c851e4 100644 > --- a/drivers/block/sunxi_nand/src/include/nand_type.h > +++ b/drivers/block/sunxi_nand/src/include/nand_type.h > @@ -45,26 +45,26 @@ struct __OptionalPhyOpPar_t > > typedef struct > { > - __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 RbCnt; > - __u8 RbConnectInfo; > //the connect information of the all rb chips are connected > - __u8 RbConnectMode; > //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 > - __u16 BlkCntPerDie; //the count of the > physic blocks in one die, include valid block and invalid block > - __u16 OperationOpt; //the mask of the > operation types which current nand flash can support support > - __u8 FrequencePar; //the parameter of the > hardware access clock, based on 'MHz' > - __u8 EccMode; //the Ecc Mode for the > nand flash chip, 0: bch-16, 1:bch-28, 2:bch_32 > + __u32 ChipCnt; //the count of the > total nand flash chips are currently connecting on the CE pin > + __u32 ChipConnectInfo; //chip connect > information, bit == 1 means there is a chip connecting on the CE pin > + __u32 RbCnt; > + __u32 RbConnectInfo; > //the connect information of the all rb chips are connected > + __u32 RbConnectMode; > //the rb connect mode > + __u32 BankCntPerChip; //the count of the > banks in one nand chip, multiple banks can support Inter-Leave > + __u32 DieCntPerChip; //the count of the dies > in one nand chip, block management is based on Die > + __u32 PlaneCntPerDie; //the count of planes > in one die, multiple planes can support multi-plane operation > + __u32 SectorCntPerPage; //the count of sectors > in one single physic page, one sector is 0.5k > + __u32 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 > + __u32 FrequencePar; //the parameter of the > hardware access clock, based on 'MHz' > + __u32 EccMode; //the Ecc Mode for the > nand flash chip, 0: bch-16, 1:bch-28, 2:bch_32 > __u8 NandChipId[8]; //the nand chip id of > current connecting nand chip > - __u16 ValidBlkRatio; //the ratio of the valid > physical blocks, based on 1024 > + __u32 ValidBlkRatio; //the ratio of the valid > physical blocks, based on 1024 > __u32 good_block_ratio; > //good block ratio get from hwscan > __u32 ReadRetryType; > //the read retry type > __u32 DDRType; > - __u32 Reserved[32]; > + __u32 Reserved[23]; > }boot_nand_para_t; > > typedef struct boot_flash_info{ > @@ -78,22 +78,22 @@ typedef struct boot_flash_info{ > //define the nand flash storage system information > struct __NandStorageInfo_t > { > - __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 RbCnt; > - __u8 RbConnectInfo; > //the connect information of the all rb chips are connected > - __u8 RbConnectMode; > //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 > - __u16 BlkCntPerDie; //the count of the > physic blocks in one die, include valid block and invalid block > - __u16 OperationOpt; //the mask of the > operation types which current nand flash can support support > - __u8 FrequencePar; //the parameter of the > hardware access clock, based on 'MHz' > - __u8 EccMode; //the Ecc Mode for the > nand flash chip, 0: bch-16, 1:bch-28, 2:bch_32 > + __u32 ChipCnt; //the count of the > total nand flash chips are currently connecting on the CE pin > + __u32 ChipConnectInfo; //chip connect > information, bit == 1 means there is a chip connecting on the CE pin > + __u32 RbCnt; > + __u32 RbConnectInfo; > //the connect information of the all rb chips are connected > + __u32 RbConnectMode; > //the rb connect mode > + __u32 BankCntPerChip; //the count of the > banks in one nand chip, multiple banks can support Inter-Leave > + __u32 DieCntPerChip; //the count of the dies > in one nand chip, block management is based on Die > + __u32 PlaneCntPerDie; //the count of planes > in one die, multiple planes can support multi-plane operation > + __u32 SectorCntPerPage; //the count of sectors > in one single physic page, one sector is 0.5k > + __u32 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 > + __u32 FrequencePar; //the parameter of the > hardware access clock, based on 'MHz' > + __u32 EccMode; //the Ecc Mode for the > nand flash chip, 0: bch-16, 1:bch-28, 2:bch_32 > __u8 NandChipId[8]; //the nand chip id of > current connecting nand chip > - __u16 ValidBlkRatio; //the ratio of the > valid physical blocks, based on 1024 > + __u32 ValidBlkRatio; //the ratio of the > valid physical blocks, based on 1024 > __u32 ReadRetryType; > //the read retry type > __u32 DDRType; > struct __OptionalPhyOpPar_t OptPhyOpPar; //the parameters for > some optional operation > @@ -130,7 +130,7 @@ struct __PhysicOpPara_t > __u8 BankNum; //the number of the bank > current accessed, bank NO. is different of chip NO. > __u8 PageNum; //the number of the page > current accessed, the page is based on single-plane or multi-plane > __u16 BlkNum; //the number of the > physic block, the block is based on single-plane or multi-plane > - __u32 SectBitmap; //the bitmap of the > sector in the page which need access data > + __u64 SectBitmap; //the bitmap of the > sector in the page which need access data > void *MDataPtr; //the pointer to main > data buffer, it is the start address of a page size based buffer > void *SDataPtr; //the pointer to spare > data buffer, it will be set to NULL if needn't access spare data > }; > @@ -228,14 +228,14 @@ struct __PageMapTblCachePool_t > struct __GlobalLogicPageType_t > { > __u32 LogicPageNum; //the global page number > of the logic page, it is based on super page size > - __u32 SectorBitmap; //the bitmap of the > sector in the logic page which data need access > + __u64 SectorBitmap; //the bitmap of the > sector in the logic page which data need access > }; > > > //define the global logcial page based on zone and block parameter type > struct __LogicPageType_t > { > - __u32 SectBitmap; //the bitmap marks which > sectors' data in the logical page need access > + __u64 SectBitmap; //the bitmap marks which > sectors' data in the logical page need access > __u16 BlockNum; //the value of the > number of the logical block which the page is belonged to > __u16 PageNum; //the value of the > number of the page in the logical block > __u8 ZoneNum; //the value of the > number of the zone, which the page is belonged to > @@ -265,7 +265,7 @@ struct __NandPhyInfoPar_t > __u8 SectCntPerPage; //the count of the > sectors in one single physical page > __u16 PageCntPerBlk; //the count of the pages > in one single physical block > __u16 BlkCntPerDie; //the count fo the > physical blocks in one nand flash Die > - __u16 OperationOpt; //the bitmap that marks > which optional operation that the nand flash can support > + __u32 OperationOpt; //the bitmap that marks > which optional operation that the nand flash can support > __u16 ValidBlkRatio; //the valid block ratio, > based on 1024 blocks > __u16 AccessFreq; //the highest access > frequence of the nand flash chip, based on MHz > __u16 EccMode; //the Ecc Mode for the > nand flash chip, 0: bch-16, 1:bch-28, 2:bch_32 > diff --git a/drivers/block/sunxi_nand/src/logic/logic_cache.c > b/drivers/block/sunxi_nand/src/logic/logic_cache.c > index 7ca2a9c..c2ebe0c 100644 > --- a/drivers/block/sunxi_nand/src/logic/logic_cache.c > +++ b/drivers/block/sunxi_nand/src/logic/logic_cache.c > @@ -35,23 +35,23 @@ typedef struct > __u32 size; > > __u32 hit_page; > - __u32 secbitmap; > + __u64 secbitmap; > > __u32 access_count; > }__nand_cache_t; > > -__u32 g_w_access_cnt; > +__u32 g_w_access_cnt=0; > > -__nand_cache_t nand_w_cache[N_NAND_W_CACHE]; > -__nand_cache_t nand_r_cache; > +__nand_cache_t nand_w_cache[N_NAND_W_CACHE]={0}; > +__nand_cache_t nand_r_cache={0}; > > -__u32 _get_valid_bits(__u32 secbitmap) > +__u32 _get_valid_bits(__u64 secbitmap) > { > __u32 validbit = 0; > > while(secbitmap) > { > - if(secbitmap & 0x1) > + if(secbitmap & (__u64)0x1) > validbit++; > secbitmap >>= 1; > } > @@ -59,11 +59,11 @@ __u32 _get_valid_bits(__u32 secbitmap) > return validbit; > } > > -__u32 _get_first_valid_bit(__u32 secbitmap) > +__u32 _get_first_valid_bit(__u64 secbitmap) > { > __u32 firstbit = 0; > > - while(!(secbitmap & 0x1)) > + while(!(secbitmap & (__u64)0x1)) > { > secbitmap >>= 1; > firstbit++; > @@ -84,9 +84,7 @@ __s32 _flush_w_cache(void) > > LML_PageRead(nand_w_cache[i].hit_page,(nand_w_cache[i].secbitmap ^ > FULL_BITMAP_OF_LOGIC_PAGE)&FULL_BITMAP_OF_LOGIC_PAGE,nand_w_cache[i].data); > > > LML_PageWrite(nand_w_cache[i].hit_page,FULL_BITMAP_OF_LOGIC_PAGE,nand_w_cache[i].data); > - nand_w_cache[i].hit_page = 0xffffffff; > - nand_w_cache[i].secbitmap = 0; > - nand_w_cache[i].access_count = 0; > + > > /*disable read cache with current page*/ > if (nand_r_cache.hit_page == nand_w_cache[i].hit_page){ > @@ -94,6 +92,11 @@ __s32 _flush_w_cache(void) > nand_r_cache.secbitmap = 0; > } > > + > + nand_w_cache[i].hit_page = 0xffffffff; > + nand_w_cache[i].secbitmap = 0; > + nand_w_cache[i].access_count = 0; > + > } > } > > @@ -110,9 +113,7 @@ __s32 _flush_w_cache_simple(__u32 i) > > LML_PageRead(nand_w_cache[i].hit_page,(nand_w_cache[i].secbitmap ^ > FULL_BITMAP_OF_LOGIC_PAGE)&FULL_BITMAP_OF_LOGIC_PAGE,nand_w_cache[i].data); > > > LML_PageWrite(nand_w_cache[i].hit_page,FULL_BITMAP_OF_LOGIC_PAGE,nand_w_cache[i].data); > - nand_w_cache[i].hit_page = 0xffffffff; > - nand_w_cache[i].secbitmap = 0; > - nand_w_cache[i].access_count = 0; > + > > /*disable read cache with current page*/ > if (nand_r_cache.hit_page == nand_w_cache[i].hit_page){ > @@ -120,6 +121,10 @@ __s32 _flush_w_cache_simple(__u32 i) > nand_r_cache.secbitmap = 0; > } > > + nand_w_cache[i].hit_page = 0xffffffff; > + nand_w_cache[i].secbitmap = 0; > + nand_w_cache[i].access_count = 0; > + > } > > return 0; > @@ -141,12 +146,13 @@ void _get_data_from_cache(__u32 blk, __u32 nblk, void > *buf) > { > __u32 i; > __u32 sec; > - __u32 page,SecBitmap,SecWithinPage; > + __u32 page,SecWithinPage; > + __u64 SecBitmap; > > for(sec = blk; sec < blk + nblk; sec++) > { > SecWithinPage = sec % SECTOR_CNT_OF_LOGIC_PAGE; > - SecBitmap = (1 << SecWithinPage); > + SecBitmap = ((__u64)1 << SecWithinPage); > page = sec / SECTOR_CNT_OF_LOGIC_PAGE; > for (i = 0; i < N_NAND_W_CACHE; i++) > { > @@ -159,7 +165,7 @@ void _get_data_from_cache(__u32 blk, __u32 nblk, void > *buf) > } > } > > -void _get_one_page(__u32 page,__u32 SecBitmap,__u8 *data) > +void _get_one_page(__u32 page,__u64 SecBitmap,__u8 *data) > { > __u32 i; > __u8 *tmp = data; > @@ -169,7 +175,7 @@ void _get_one_page(__u32 page,__u32 SecBitmap,__u8 *data) > { > for(i = 0;i < SECTOR_CNT_OF_LOGIC_PAGE; i++) > { > - if(SecBitmap & (1<<i)) > + if(SecBitmap & ((__u64)1<<i)) > { > MEMCPY(tmp + (i<<9),nand_r_cache.data + > (i<<9),512); > } > @@ -190,7 +196,7 @@ void _get_one_page(__u32 page,__u32 SecBitmap,__u8 *data) > > for(i = 0;i < SECTOR_CNT_OF_LOGIC_PAGE; i++) > { > - if(SecBitmap & (1<<i)) > + if(SecBitmap & ((__u64)1<<i)) > { > MEMCPY(tmp + (i<<9),nand_r_cache.data + > (i<<9),512); > } > @@ -205,7 +211,8 @@ __s32 NAND_CacheRead(__u32 blk, __u32 nblk, void *buf) > { > __u32 nSector,StartSec; > __u32 page; > - __u32 SecBitmap,SecWithinPage; > + __u32 SecWithinPage; > + __u64 SecBitmap; > __u8 *pdata; > > nSector = nblk; > @@ -218,7 +225,7 @@ __s32 NAND_CacheRead(__u32 blk, __u32 nblk, void *buf) > while(nSector) > { > SecWithinPage = StartSec % SECTOR_CNT_OF_LOGIC_PAGE; > - SecBitmap |= (1 << SecWithinPage); > + SecBitmap |= ((__u64)1 << SecWithinPage); > page = StartSec / SECTOR_CNT_OF_LOGIC_PAGE; > > /*close page if last sector*/ > @@ -250,7 +257,7 @@ __s32 NAND_CacheRead(__u32 blk, __u32 nblk, void *buf) > > } > > -__s32 _fill_nand_cache(__u32 page, __u32 secbitmap, __u8 *pdata) > +__s32 _fill_nand_cache(__u32 page, __u64 secbitmap, __u8 *pdata) > { > __u8 hit; > __u8 i; > @@ -344,7 +351,8 @@ __s32 NAND_CacheWrite(__u32 blk, __u32 nblk, void *buf) > { > __u32 nSector,StartSec; > __u32 page; > - __u32 SecBitmap,SecWithinPage; > + __u32 SecWithinPage; > + __u64 SecBitmap; > __u32 i; > __u8 *pdata; > //__u32 hit = 0; > @@ -359,7 +367,7 @@ __s32 NAND_CacheWrite(__u32 blk, __u32 nblk, void *buf) > while(nSector) > { > SecWithinPage = StartSec % SECTOR_CNT_OF_LOGIC_PAGE; > - SecBitmap |= (1 << SecWithinPage); > + SecBitmap |= ((__u64)1 << SecWithinPage); > page = StartSec / SECTOR_CNT_OF_LOGIC_PAGE; > > > diff --git a/drivers/block/sunxi_nand/src/logic/logic_ctl.c > b/drivers/block/sunxi_nand/src/logic/logic_ctl.c > index af57d59..c9c2d91 100644 > --- a/drivers/block/sunxi_nand/src/logic/logic_ctl.c > +++ b/drivers/block/sunxi_nand/src/logic/logic_ctl.c > @@ -23,9 +23,9 @@ > #include <linux/module.h> > #include "../include/nand_logic.h" > > -struct __NandDriverGlobal_t NandDriverInfo; > -struct __LogicArchitecture_t LogicArchiPar; > -struct __ZoneTblPstInfo_t ZoneTblPstInfo[MAX_ZONE_CNT]; > +struct __NandDriverGlobal_t NandDriverInfo={0}; > +struct __LogicArchitecture_t LogicArchiPar={0}; > +struct __ZoneTblPstInfo_t ZoneTblPstInfo[MAX_ZONE_CNT]={0}; > //define the parameter for manage the cached page > static struct __GlobalLogicPageType_t CachePage; > > @@ -55,7 +55,8 @@ static struct __LogicCtlPar_t LogicalCtl; > static __s32 _CalculateSectPar(__u32 nSectNum, __u32 nSectCnt, struct > __GlobalLogicPageType_t *pHeadPage, > __u32 *pMidPageCnt, struct > __GlobalLogicPageType_t *pTailPage) > { > - __u32 tmpSectCnt, tmpBitmap; > + __u32 tmpSectCnt; > + __u64 tmpBitmap; > > LOGICCTL_DBG("[LOGICCTL_DBG]: Calculate logical sectors parameter, > Lba:0x%x, Cnt:0x%x\n", nSectNum, nSectCnt); > > @@ -122,7 +123,7 @@ static __s32 _CalculateSectPar(__u32 nSectNum, __u32 > nSectCnt, struct __GlobalLo > * < 0 calcualte page parameter failed. > > ************************************************************************************************************************ > */ > -static __s32 _CalculateLogicPagePar(struct __LogicPageType_t *pLogicPage, > __u32 nPage, __u32 nBitmap) > +static __s32 _CalculateLogicPagePar(struct __LogicPageType_t *pLogicPage, > __u32 nPage, __u64 nBitmap) > { > __u32 tmpPage, tmpBlk, tmpZone; > > @@ -158,14 +159,14 @@ static __s32 _CalculateLogicPagePar(struct > __LogicPageType_t *pLogicPage, __u32 > * < 0 update page data failed. > > ************************************************************************************************************************ > */ > -static __s32 _UpdateReadPageData(__u32 nSectBitmap, void * pBuf) > +static __s32 _UpdateReadPageData(__u64 nSectBitmap, void * pBuf) > { > __s32 i; > __u8 *tmpSrc = LML_WRITE_PAGE_CACHE, *tmpDst = pBuf; > > for(i=0; i<SECTOR_CNT_OF_LOGIC_PAGE; i++) > { > - if(nSectBitmap & CachePage.SectorBitmap & (1<<i)) > + if(nSectBitmap & CachePage.SectorBitmap & ((__u64)1<<i)) > { > MEMCPY(tmpDst, tmpSrc, SECTOR_SIZE); > } > @@ -193,7 +194,7 @@ static __s32 _UpdateReadPageData(__u32 nSectBitmap, void > * pBuf) > * < 0 merge page data failed. > > ************************************************************************************************************************ > */ > -static __s32 _MergeCachePageData(__u32 nPage, __u32 nBitmap, __u8 *pBuf) > +static __s32 _MergeCachePageData(__u32 nPage, __u64 nBitmap, __u8 *pBuf) > { > __s32 i; > __u8 *tmpSrc = pBuf, *tmpDst = LML_WRITE_PAGE_CACHE; > @@ -208,7 +209,7 @@ static __s32 _MergeCachePageData(__u32 nPage, __u32 > nBitmap, __u8 *pBuf) > > for(i=0; i<SECTOR_CNT_OF_LOGIC_PAGE; i++) > { > - if(nBitmap & (1<<i)) > + if(nBitmap & ((__u64)1<<i)) > { > //the sector of the write page is valid, copy data to the page > cache > MEMCPY(tmpDst, tmpSrc, SECTOR_SIZE); > @@ -241,7 +242,8 @@ static __s32 _MergeCachePageData(__u32 nPage, __u32 > nBitmap, __u8 *pBuf) > static __s32 _WritePageCacheToNand(void) > { > __s32 result = 0; > - __u32 tmpPage, tmpBitmap; > + __u32 tmpPage; > + __u64 tmpBitmap; > __u8 *tmpBuf; > > tmpPage = CachePage.LogicPageNum; > @@ -452,7 +454,7 @@ __s32 LML_CalculatePhyOpPar(struct __PhysicOpPara_t > *pPhyPar, __u32 nZone, __u32 > __s32 LML_VirtualPageRead(struct __PhysicOpPara_t *pVirtualPage) > { > __s32 i, result; > - __u32 tmpBitmap; > + __u64 tmpBitmap; > __u8 *tmpSpare, *tmpSrcData, *tmpDstData, *tmpSrcPtr[4], *tmpDstPtr[4]; > struct __PhysicOpPara_t tmpPhyPage; > > @@ -467,7 +469,7 @@ __s32 LML_VirtualPageRead(struct __PhysicOpPara_t > *pVirtualPage) > //process the pointer to spare area data > for(i=0; i<2; i++) > { > - if(tmpBitmap & (1<<i)) > + if(tmpBitmap & ((__u64)1<<i)) > { > tmpSrcPtr[i] = LML_SPARE_BUF + 4 * i; > tmpDstPtr[i] = tmpSpare + 4 * i; > @@ -480,7 +482,7 @@ __s32 LML_VirtualPageRead(struct __PhysicOpPara_t > *pVirtualPage) > > for(i=0; i<2; i++) > { > - if(tmpBitmap & (1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > + if(tmpBitmap & ((__u64)1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > { > tmpSrcPtr[i+2] = LML_SPARE_BUF + 4 * (i + > SECTOR_CNT_OF_SINGLE_PAGE); > tmpDstPtr[i+2] = tmpSpare + 8 + 4 * i; > @@ -542,7 +544,7 @@ __s32 LML_VirtualPageRead(struct __PhysicOpPara_t > *pVirtualPage) > __s32 LML_VirtualPageWrite( struct __PhysicOpPara_t *pVirtualPage) > { > __s32 i, result; > - __u32 tmpBitmap; > + __u64 tmpBitmap; > __u8 *tmpSpare, *tmpSrcData, *tmpDstData, *tmpSrcPtr[4], *tmpDstPtr[4]; > struct __PhysicOpPara_t tmpPhyPage; > > @@ -558,7 +560,7 @@ __s32 LML_VirtualPageWrite( struct __PhysicOpPara_t > *pVirtualPage) > //process the pointer to spare area data > for(i=0; i<2; i++) > { > - if(tmpBitmap & (1<<i)) > + if(tmpBitmap & ((__u64)1<<i)) > { > tmpSrcPtr[i] = tmpSpare + 4 * i; > tmpDstPtr[i] = LML_SPARE_BUF + 4 * i; > @@ -571,7 +573,7 @@ __s32 LML_VirtualPageWrite( struct __PhysicOpPara_t > *pVirtualPage) > > for(i=0; i<2; i++) > { > - if(tmpBitmap & (1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > + if(tmpBitmap & ((__u64)1<<(i + SECTOR_CNT_OF_SINGLE_PAGE))) > { > tmpSrcPtr[i+2] = tmpSpare + 8 + 4 * i; > tmpDstPtr[i+2] = LML_SPARE_BUF + 4 * (i + > SECTOR_CNT_OF_SINGLE_PAGE); > @@ -733,7 +735,7 @@ static __s32 _CloseWritePage(void) > * < 0 read failed. > > ************************************************************************************************************************ > */ > -__s32 LML_PageRead(__u32 nPage, __u32 nBitmap, void* pBuf) > +__s32 LML_PageRead(__u32 nPage, __u64 nBitmap, void* pBuf) > { > __s32 result; > __u32 tmpSuperBlk, tmpSuperPage; > @@ -851,7 +853,7 @@ __s32 LML_PageRead(__u32 nPage, __u32 nBitmap, void* pBuf) > * < 0 write failed. > > ************************************************************************************************************************ > */ > -__s32 LML_PageWrite(__u32 nPage, __u32 nBitmap, void* pBuf) > +__s32 LML_PageWrite(__u32 nPage, __u64 nBitmap, void* pBuf) > { > __s32 result; > struct __LogicPageType_t tmpLogicPage; > @@ -1101,7 +1103,8 @@ __s32 LML_FlushPageCache(void) > __s32 LML_Read(__u32 nSectNum, __u32 nSectorCnt, void* pBuf) > { > __s32 i, result; > - __u32 tmpMidPageCnt, tmpPageNum, tmpBitmap, tmpPageCnt; > + __u32 tmpMidPageCnt, tmpPageNum, tmpPageCnt; > + __u64 tmpBitmap; > __u8 *tmpBuf; > struct __GlobalLogicPageType_t tmpHeadPage, tmpTailPage; > > @@ -1133,7 +1136,7 @@ __s32 LML_Read(__u32 nSectNum, __u32 nSectorCnt, void* > pBuf) > //calculate the buffer address for page align > for(i=0; i<SECTOR_CNT_OF_LOGIC_PAGE; i++) > { > - if(tmpHeadPage.SectorBitmap & (1<<i)) > + if(tmpHeadPage.SectorBitmap & ((__u64)1<<i)) > { > break; > } > @@ -1231,7 +1234,8 @@ void echo_write_data (__u32 nSectNum, __u32 nSectorCnt, > void* pBuf) > __s32 LML_Write(__u32 nSectNum, __u32 nSectorCnt, void* pBuf) > { > __s32 i, result; > - __u32 tmpMidPageCnt, tmpPageNum, tmpBitmap, tmpPageCnt; > + __u32 tmpMidPageCnt, tmpPageNum, tmpPageCnt; > + __u64 tmpBitmap; > __u8 *tmpBuf; > struct __GlobalLogicPageType_t tmpHeadPage, tmpTailPage; > > @@ -1260,7 +1264,7 @@ __s32 LML_Write(__u32 nSectNum, __u32 nSectorCnt, void* > pBuf) > //calculate the buffer address for page align > for(i=0; i<SECTOR_CNT_OF_LOGIC_PAGE; i++) > { > - if(tmpHeadPage.SectorBitmap & (1<<i)) > + if(tmpHeadPage.SectorBitmap & ((__u64)1<<i)) > { > break; > } > @@ -1440,6 +1444,8 @@ __u32 NAND_GetDiskSize(void) > disksize = (SECTOR_CNT_OF_SINGLE_PAGE * PAGE_CNT_OF_PHY_BLK * > BLOCK_CNT_OF_DIE * \ > DIE_CNT_OF_CHIP * NandStorageInfo.ChipCnt / 1024 * > DATA_BLK_CNT_OF_ZONE); > > + printk(KERN_ERR "%s: disksize=%d\n", __func__, disksize); > + > return disksize; > } > > diff --git a/drivers/block/sunxi_nand/src/logic/mapping.c > b/drivers/block/sunxi_nand/src/logic/mapping.c > index 6a441d8..aaed2b8 100644 > --- a/drivers/block/sunxi_nand/src/logic/mapping.c > +++ b/drivers/block/sunxi_nand/src/logic/mapping.c > @@ -24,8 +24,8 @@ > > extern struct __NandDriverGlobal_t NandDriverInfo; > > -struct __BlkMapTblCachePool_t BlkMapTblCachePool; > -struct __PageMapTblCachePool_t PageMapTblCachePool; > +struct __BlkMapTblCachePool_t BlkMapTblCachePool={0}; > +struct __PageMapTblCachePool_t PageMapTblCachePool={0}; > > void dump(void *buf, __u32 len , __u8 nbyte,__u8 linelen) > { > diff --git a/drivers/block/sunxi_nand/src/physic/nand_phy.c > b/drivers/block/sunxi_nand/src/physic/nand_phy.c > index 287209d..341f8ff 100644 > --- a/drivers/block/sunxi_nand/src/physic/nand_phy.c > +++ b/drivers/block/sunxi_nand/src/physic/nand_phy.c > @@ -88,7 +88,7 @@ __s32 _read_single_page_seq(struct boot_physical_param > *readop,__u8 dma_wait_mod > __u32 random_seed; > > //__u8 *sparebuf; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > __u32 list_len,i; > @@ -162,7 +162,7 @@ __s32 _read_single_page_1K(struct boot_physical_param > *readop,__u8 dma_wait_mode > __s32 ret; > __u32 rb; > __u32 random_seed; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > __u32 list_len,i; > @@ -238,7 +238,7 @@ __s32 _read_single_page_spare(struct boot_physical_param > *readop,__u8 dma_wait_m > __u32 k = 0; > __u32 rb; > __u32 random_seed; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 default_value[16]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > @@ -557,7 +557,7 @@ __s32 _read_sectors(struct boot_physical_param > *readop,__u8 dma_wait_mode) > __u32 k; > __u32 rb; > __u32 random_seed; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 default_value[16]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > @@ -774,7 +774,7 @@ __s32 _two_plane_read(struct __PhysicOpPara_t > *pPageAdr,__u8 dma_wait_mode) > __u32 chip; > __u32 rb; > __u32 list_len,i,plane_cnt; > - __u32 bitmap_in_single_page; > + __u64 bitmap_in_single_page; > __u32 block_in_chip; > > NFC_CMD_LIST cmd_list[8]; > @@ -854,7 +854,7 @@ __s32 PHY_PageRead(struct __PhysicOpPara_t *pPageAdr) > __u32 chip; > __u32 block_in_chip; > __u32 plane_cnt,i; > - __u32 bitmap_in_single_page; > + __u64 bitmap_in_single_page; > struct __NandUserData_t *sparebuf; > struct __NandUserData_t oob_buf; > struct boot_physical_param readop; > @@ -1064,7 +1064,7 @@ __s32 _read_sectors_for_spare(struct > boot_physical_param *readop,__u8 dma_wait_m > /*send 05 + 2addr- e0 get 512 byte data*/ > list_len = 4; > for (i = 0; i < 2; i++){ > - if (readop->sectorbitmap & (1 << i)){ > + if (readop->sectorbitmap & ((__u64)1 << i)){ > > /*get main data addr*/ > _cal_addr_in_chip_for_spare(0,0,i<<1,addr1,2); > @@ -1289,7 +1289,7 @@ __s32 PHY_PageReadSpare(struct __PhysicOpPara_t > *pPageAdr) > __u32 chip; > __u32 block_in_chip; > __u32 plane_cnt,i; > - __u32 bitmap_in_single_page; > + __u64 bitmap_in_single_page; > struct __NandUserData_t *sparebuf; > struct __NandUserData_t oob_buf; > struct boot_physical_param readop; > diff --git a/drivers/block/sunxi_nand/src/physic/nand_simple_r.c > b/drivers/block/sunxi_nand/src/physic/nand_simple_r.c > index 88051e6..f8e0fa6 100644 > --- a/drivers/block/sunxi_nand/src/physic/nand_simple_r.c > +++ b/drivers/block/sunxi_nand/src/physic/nand_simple_r.c > @@ -372,7 +372,7 @@ __s32 _read_single_page(struct boot_physical_param > *readop,__u8 dma_wait_mode) > __u32 k = 0; > __u32 rb; > __u32 random_seed; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 default_value[16]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > diff --git a/drivers/block/sunxi_nand/src/physic/nand_simple_w.c > b/drivers/block/sunxi_nand/src/physic/nand_simple_w.c > index 0ad0700..0aa038f 100644 > --- a/drivers/block/sunxi_nand/src/physic/nand_simple_w.c > +++ b/drivers/block/sunxi_nand/src/physic/nand_simple_w.c > @@ -46,7 +46,7 @@ __s32 _write_signle_page (struct boot_physical_param > *writeop,__u32 program1,__u > __u32 rb; > __u32 random_seed; > //__u8 *sparebuf; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > __u32 list_len,i,addr_cycle; > @@ -101,7 +101,7 @@ __s32 _write_signle_page_seq (struct boot_physical_param > *writeop,__u32 program1 > __u32 rb; > __u32 random_seed; > //__u8 *sparebuf; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > __u32 list_len,i,addr_cycle; > @@ -157,7 +157,7 @@ __s32 _write_signle_page_1K (struct boot_physical_param > *writeop,__u32 program1, > __u32 rb; > __u32 random_seed; > //__u8 *sparebuf; > - __u8 sparebuf[4*16]; > + __u8 sparebuf[4*32]; > __u8 addr[5]; > NFC_CMD_LIST cmd_list[4]; > __u32 list_len,i,addr_cycle; -- Best regards, Siarhei Siamashka -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
