12345678910111213141516171819202122232425262728293031323334353637383940 |
- From: Tim Harvey <tharvey@gateworks.com>
- Subject: mtd: allow partial block unlock
- This allows sysupgrade for devices such as the Gateworks Avila/Cambria
- product families based on the ixp4xx using the redboot bootloader with
- combined FIS directory and RedBoot config partitions on larger FLASH
- devices with larger eraseblocks.
- This second iteration of this patch addresses previous issues:
- - whitespace breakage fixed
- - unlock in all scenarios
- - simplification and fix logic bug
- [john@phrozen.org: this should be moved to the ixp4xx folder]
- Signed-off-by: Tim Harvey <tharvey@gateworks.com>
- ---
- drivers/mtd/mtdpart.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
- --- a/drivers/mtd/mtdpart.c
- +++ b/drivers/mtd/mtdpart.c
- @@ -357,7 +357,16 @@ static int part_lock(struct mtd_info *mt
- static int part_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
- {
- struct mtd_part *part = mtd_to_part(mtd);
- - return part->parent->_unlock(part->parent, ofs + part->offset, len);
- +
- + ofs += part->offset;
- +
- + if (mtd->flags & MTD_ERASE_PARTIAL) {
- + /* round up len to next erasesize and round down offset to prev block */
- + len = (mtd_div_by_eb(len, part->parent) + 1) * part->parent->erasesize;
- + ofs &= ~(part->parent->erasesize - 1);
- + }
- +
- + return part->parent->_unlock(part->parent, ofs, len);
- }
-
- static int part_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
|