|
@@ -182,16 +182,19 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num,
|
|
|
if (tmp == msk)
|
|
|
continue;
|
|
|
if (reserved_block_code && (tmp == reserved_block_code)) {
|
|
|
- printk(KERN_DEBUG "nand_read_bbt: Reserved block at 0x%08x\n",
|
|
|
- ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
|
|
|
+ printk(KERN_DEBUG "nand_read_bbt: Reserved block at 0x%012llx\n",
|
|
|
+ (loff_t)((offs << 2) +
|
|
|
+ (act >> 1)) <<
|
|
|
+ this->bbt_erase_shift);
|
|
|
this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
|
|
|
mtd->ecc_stats.bbtblocks++;
|
|
|
continue;
|
|
|
}
|
|
|
/* Leave it for now, if its matured we can move this
|
|
|
* message to MTD_DEBUG_LEVEL0 */
|
|
|
- printk(KERN_DEBUG "nand_read_bbt: Bad block at 0x%08x\n",
|
|
|
- ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
|
|
|
+ printk(KERN_DEBUG "nand_read_bbt: Bad block at 0x%012llx\n",
|
|
|
+ (loff_t)((offs << 2) + (act >> 1)) <<
|
|
|
+ this->bbt_erase_shift);
|
|
|
/* Factory marked bad or worn out ? */
|
|
|
if (tmp == 0)
|
|
|
this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
|
|
@@ -295,8 +298,8 @@ static int read_abs_bbts(struct mtd_info *mtd, uint8_t *buf,
|
|
|
|
|
|
/* Read the primary version, if available */
|
|
|
if (td->options & NAND_BBT_VERSION) {
|
|
|
- scan_read_raw(mtd, buf, td->pages[0] << this->page_shift,
|
|
|
- mtd->writesize);
|
|
|
+ scan_read_raw(mtd, buf, (loff_t)td->pages[0] <<
|
|
|
+ this->page_shift, mtd->writesize);
|
|
|
td->version[0] = buf[mtd->writesize + td->veroffs];
|
|
|
printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
|
|
|
td->pages[0], td->version[0]);
|
|
@@ -304,8 +307,8 @@ static int read_abs_bbts(struct mtd_info *mtd, uint8_t *buf,
|
|
|
|
|
|
/* Read the mirror version, if available */
|
|
|
if (md && (md->options & NAND_BBT_VERSION)) {
|
|
|
- scan_read_raw(mtd, buf, md->pages[0] << this->page_shift,
|
|
|
- mtd->writesize);
|
|
|
+ scan_read_raw(mtd, buf, (loff_t)md->pages[0] <<
|
|
|
+ this->page_shift, mtd->writesize);
|
|
|
md->version[0] = buf[mtd->writesize + md->veroffs];
|
|
|
printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
|
|
|
md->pages[0], md->version[0]);
|
|
@@ -422,7 +425,7 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,
|
|
|
numblocks = this->chipsize >> (this->bbt_erase_shift - 1);
|
|
|
startblock = chip * numblocks;
|
|
|
numblocks += startblock;
|
|
|
- from = startblock << (this->bbt_erase_shift - 1);
|
|
|
+ from = (loff_t)startblock << (this->bbt_erase_shift - 1);
|
|
|
}
|
|
|
|
|
|
for (i = startblock; i < numblocks;) {
|
|
@@ -440,8 +443,8 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,
|
|
|
if (ret) {
|
|
|
this->bbt[i >> 3] |= 0x03 << (i & 0x6);
|
|
|
MTDDEBUG (MTD_DEBUG_LEVEL0,
|
|
|
- "Bad eraseblock %d at 0x%08x\n",
|
|
|
- i >> 1, (unsigned int)from);
|
|
|
+ "Bad eraseblock %d at 0x%012llx\n",
|
|
|
+ i >> 1, (unsigned long long)from);
|
|
|
mtd->ecc_stats.badblocks++;
|
|
|
}
|
|
|
|
|
@@ -507,7 +510,7 @@ static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
|
|
|
for (block = 0; block < td->maxblocks; block++) {
|
|
|
|
|
|
int actblock = startblock + dir * block;
|
|
|
- loff_t offs = actblock << this->bbt_erase_shift;
|
|
|
+ loff_t offs = (loff_t)actblock << this->bbt_erase_shift;
|
|
|
|
|
|
/* Read first page */
|
|
|
scan_read_raw(mtd, buf, offs, mtd->writesize);
|
|
@@ -731,7 +734,7 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
|
|
|
|
|
|
memset(&einfo, 0, sizeof(einfo));
|
|
|
einfo.mtd = mtd;
|
|
|
- einfo.addr = (unsigned long)to;
|
|
|
+ einfo.addr = to;
|
|
|
einfo.len = 1 << this->bbt_erase_shift;
|
|
|
res = nand_erase_nand(mtd, &einfo, 1);
|
|
|
if (res < 0)
|
|
@@ -741,8 +744,9 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
|
|
|
if (res < 0)
|
|
|
goto outerr;
|
|
|
|
|
|
- printk(KERN_DEBUG "Bad block table written to 0x%08x, version "
|
|
|
- "0x%02X\n", (unsigned int)to, td->version[chip]);
|
|
|
+ printk(KERN_DEBUG "Bad block table written to 0x%012llx, "
|
|
|
+ "version 0x%02X\n", (unsigned long long)to,
|
|
|
+ td->version[chip]);
|
|
|
|
|
|
/* Mark it as used */
|
|
|
td->pages[chip] = page;
|
|
@@ -922,7 +926,8 @@ static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td)
|
|
|
newval = oldval | (0x2 << (block & 0x06));
|
|
|
this->bbt[(block >> 3)] = newval;
|
|
|
if ((oldval != newval) && td->reserved_block_code)
|
|
|
- nand_update_bbt(mtd, block << (this->bbt_erase_shift - 1));
|
|
|
+ nand_update_bbt(mtd, (loff_t)block <<
|
|
|
+ (this->bbt_erase_shift - 1));
|
|
|
continue;
|
|
|
}
|
|
|
update = 0;
|
|
@@ -943,7 +948,8 @@ static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td)
|
|
|
new ones have been marked, then we need to update the stored
|
|
|
bbts. This should only happen once. */
|
|
|
if (update && td->reserved_block_code)
|
|
|
- nand_update_bbt(mtd, (block - 2) << (this->bbt_erase_shift - 1));
|
|
|
+ nand_update_bbt(mtd, (loff_t)(block - 2) <<
|
|
|
+ (this->bbt_erase_shift - 1));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1039,7 +1045,6 @@ int nand_update_bbt(struct mtd_info *mtd, loff_t offs)
|
|
|
if (!this->bbt || !td)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- len = mtd->size >> (this->bbt_erase_shift + 2);
|
|
|
/* Allocate a temporary buffer for one eraseblock incl. oob */
|
|
|
len = (1 << this->bbt_erase_shift);
|
|
|
len += (len >> this->page_shift) * mtd->oobsize;
|