diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-07-31 12:53:22 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-07-31 15:52:10 +0200 |
commit | 048d4b8158fb2673bed5fc0596eeeeab6f443245 (patch) | |
tree | 7a7836f23d5a34dcbdf6fa7e1eb2f52fe07ca9a0 /drivers/nor | |
parent | e401f1dad2a06d47d20f5138e27e8c7634ab9641 (diff) | |
download | barebox-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.c | 5 |
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) { |