On 18/05/17 03:29, Boris Brezillon wrote: > Hi Chris, > > On Wed, 17 May 2017 17:39:07 +1200 > Chris Packham <chris.pack...@alliedtelesis.co.nz> wrote: > >> Setting the of_node for the mtd device allows the generic mtd code to >> setup the partitions. Additionally we must specify a non-zero erasesize >> for the partitions to be writeable. >> >> Signed-off-by: Chris Packham <chris.pack...@alliedtelesis.co.nz> >> --- >> drivers/mtd/devices/mchp23k256.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/drivers/mtd/devices/mchp23k256.c >> b/drivers/mtd/devices/mchp23k256.c >> index 2542f5b8b63f..02c6b9dcbd3e 100644 >> --- a/drivers/mtd/devices/mchp23k256.c >> +++ b/drivers/mtd/devices/mchp23k256.c >> @@ -143,6 +143,7 @@ static int mchp23k256_probe(struct spi_device *spi) >> >> data = dev_get_platdata(&spi->dev); >> >> + mtd_set_of_node(&flash->mtd, spi->dev.of_node); >> flash->mtd.dev.parent = &spi->dev; >> flash->mtd.type = MTD_RAM; >> flash->mtd.flags = MTD_CAP_RAM; >> @@ -151,6 +152,10 @@ static int mchp23k256_probe(struct spi_device *spi) >> flash->mtd._read = mchp23k256_read; >> flash->mtd._write = mchp23k256_write; >> >> + flash->mtd.erasesize = PAGE_SIZE; >> + while (flash->mtd.size & (flash->mtd.erasesize - 1)) >> + flash->mtd.erasesize >>= 1; >> + > > Can we fix allocate_partition() to properly handle the > master->erasesize == 0 case instead of doing that? >
Do you mean something like this? diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index ea5e5307f667..0cd20ed6b374 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -577,6 +577,7 @@ static struct mtd_part *allocate_partition(struct mtd_info *master, part->name); } if ((slave->mtd.flags & MTD_WRITEABLE) && + master->erasesize != 0 && mtd_mod_by_eb(slave->mtd.size, &slave->mtd)) { slave->mtd.flags &= ~MTD_WRITEABLE; I'm happy to submit this as a formal patch but it could potentially affect a number of devices. Whereas the snippet I initially added is consistent with drivers/mtd/chips/map_ram.c. For now I'll leave v2 as-is but I can send a v3 if needed.