|
@@ -20,6 +20,7 @@
|
|
|
#include <linux/device.h>
|
|
|
#include <linux/interrupt.h>
|
|
|
#include <linux/mutex.h>
|
|
|
+#include <linux/math64.h>
|
|
|
|
|
|
#include <linux/mtd/mtd.h>
|
|
|
#include <linux/mtd/partitions.h>
|
|
@@ -169,9 +170,9 @@ static int wait_till_ready(struct m25p *flash)
|
|
|
*/
|
|
|
static int erase_chip(struct m25p *flash)
|
|
|
{
|
|
|
- DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB\n",
|
|
|
+ DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %lldKiB\n",
|
|
|
flash->spi->dev.bus_id, __func__,
|
|
|
- flash->mtd.size / 1024);
|
|
|
+ (long long)(flash->mtd.size >> 10));
|
|
|
|
|
|
/* Wait until finished previous write command. */
|
|
|
if (wait_till_ready(flash))
|
|
@@ -232,18 +233,18 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)
|
|
|
{
|
|
|
struct m25p *flash = mtd_to_m25p(mtd);
|
|
|
u32 addr,len;
|
|
|
+ uint32_t rem;
|
|
|
|
|
|
- DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %d\n",
|
|
|
+ DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%llx, len %lld\n",
|
|
|
flash->spi->dev.bus_id, __func__, "at",
|
|
|
- (u32)instr->addr, instr->len);
|
|
|
+ (long long)instr->addr, (long long)instr->len);
|
|
|
|
|
|
/* sanity checks */
|
|
|
if (instr->addr + instr->len > flash->mtd.size)
|
|
|
return -EINVAL;
|
|
|
- if ((instr->addr % mtd->erasesize) != 0
|
|
|
- || (instr->len % mtd->erasesize) != 0) {
|
|
|
+ div_u64_rem(instr->len, mtd->erasesize, &rem);
|
|
|
+ if (rem)
|
|
|
return -EINVAL;
|
|
|
- }
|
|
|
|
|
|
addr = instr->addr;
|
|
|
len = instr->len;
|
|
@@ -677,24 +678,24 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
|
|
flash->mtd.erasesize = info->sector_size;
|
|
|
}
|
|
|
|
|
|
- dev_info(&spi->dev, "%s (%d Kbytes)\n", info->name,
|
|
|
- flash->mtd.size / 1024);
|
|
|
+ dev_info(&spi->dev, "%s (%lld Kbytes)\n", info->name,
|
|
|
+ (long long)flash->mtd.size >> 10);
|
|
|
|
|
|
DEBUG(MTD_DEBUG_LEVEL2,
|
|
|
- "mtd .name = %s, .size = 0x%.8x (%uMiB) "
|
|
|
+ "mtd .name = %s, .size = 0x%llx (%lldMiB) "
|
|
|
".erasesize = 0x%.8x (%uKiB) .numeraseregions = %d\n",
|
|
|
flash->mtd.name,
|
|
|
- flash->mtd.size, flash->mtd.size / (1024*1024),
|
|
|
+ (long long)flash->mtd.size, (long long)(flash->mtd.size >> 20),
|
|
|
flash->mtd.erasesize, flash->mtd.erasesize / 1024,
|
|
|
flash->mtd.numeraseregions);
|
|
|
|
|
|
if (flash->mtd.numeraseregions)
|
|
|
for (i = 0; i < flash->mtd.numeraseregions; i++)
|
|
|
DEBUG(MTD_DEBUG_LEVEL2,
|
|
|
- "mtd.eraseregions[%d] = { .offset = 0x%.8x, "
|
|
|
+ "mtd.eraseregions[%d] = { .offset = 0x%llx, "
|
|
|
".erasesize = 0x%.8x (%uKiB), "
|
|
|
".numblocks = %d }\n",
|
|
|
- i, flash->mtd.eraseregions[i].offset,
|
|
|
+ i, (long long)flash->mtd.eraseregions[i].offset,
|
|
|
flash->mtd.eraseregions[i].erasesize,
|
|
|
flash->mtd.eraseregions[i].erasesize / 1024,
|
|
|
flash->mtd.eraseregions[i].numblocks);
|
|
@@ -722,12 +723,12 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
|
|
if (nr_parts > 0) {
|
|
|
for (i = 0; i < nr_parts; i++) {
|
|
|
DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
|
|
|
- "{.name = %s, .offset = 0x%.8x, "
|
|
|
- ".size = 0x%.8x (%uKiB) }\n",
|
|
|
+ "{.name = %s, .offset = 0x%llx, "
|
|
|
+ ".size = 0x%llx (%lldKiB) }\n",
|
|
|
i, parts[i].name,
|
|
|
- parts[i].offset,
|
|
|
- parts[i].size,
|
|
|
- parts[i].size / 1024);
|
|
|
+ (long long)parts[i].offset,
|
|
|
+ (long long)parts[i].size,
|
|
|
+ (long long)(parts[i].size >> 10));
|
|
|
}
|
|
|
flash->partitioned = 1;
|
|
|
return add_mtd_partitions(&flash->mtd, parts, nr_parts);
|