summaryrefslogtreecommitdiffstats
path: root/drivers/nor
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-07-31 12:53:22 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-07-31 15:52:10 +0200
commit048d4b8158fb2673bed5fc0596eeeeab6f443245 (patch)
tree7a7836f23d5a34dcbdf6fa7e1eb2f52fe07ca9a0 /drivers/nor
parente401f1dad2a06d47d20f5138e27e8c7634ab9641 (diff)
downloadbarebox-048d4b8158fb2673bed5fc0596eeeeab6f443245.tar.gz
barebox-048d4b8158fb2673bed5fc0596eeeeab6f443245.tar.xz
nor m25p80: align start and end to erase blocks
The erase command normally makes sure that the selected area is erased, therefore align the parameters to eraseblock boundaries. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/nor')
-rw-r--r--drivers/nor/m25p80.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/nor/m25p80.c b/drivers/nor/m25p80.c
index 0f3bcd179c..7ff4546146 100644
--- a/drivers/nor/m25p80.c
+++ b/drivers/nor/m25p80.c
@@ -205,8 +205,9 @@ static ssize_t m25p80_erase(struct cdev *cdev, size_t count, loff_t offset)
if (offset + count > flash->size)
return -EINVAL;
- addr = offset;
- len = count;
+ /* Align start and len to erase blocks */
+ addr = offset & ~(flash->erasesize - 1);
+ len = ALIGN(offset + count, flash->erasesize) - addr;
/* whole-chip erase? */
if (len == flash->size) {