diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-12-20 13:00:10 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-12-20 15:04:30 +0100 |
commit | d7fe5e2263ae24df5938c220b62029f6131543a1 (patch) | |
tree | 8de1764a1eabe2529adae2ba82e90d32d64c1677 | |
parent | 080a4e9c9b43d0a1cda7726bf14a828d4eff3b01 (diff) | |
download | barebox-d7fe5e2263ae24df5938c220b62029f6131543a1.tar.gz barebox-d7fe5e2263ae24df5938c220b62029f6131543a1.tar.xz |
mtd: Add subpagesize to mtd_info_user
ubiformat needs the subpagesize to work correctly. The kernel uses
sysfs to pass the subpagesize, but in barebox we have the possibility
to extend struct mtd_info_user. Add a corresponding field and use it
in ubiformat.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | drivers/mtd/core.c | 1 | ||||
-rw-r--r-- | fs/devfs-core.c | 1 | ||||
-rw-r--r-- | include/linux/mtd/mtd-abi.h | 1 | ||||
-rw-r--r-- | lib/libmtd.c | 2 |
4 files changed, 4 insertions, 1 deletions
diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index fc2ac00336..6db1c6db32 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -236,6 +236,7 @@ int mtd_ioctl(struct cdev *cdev, int request, void *buf) user->erasesize = mtd->erasesize; user->writesize = mtd->writesize; user->oobsize = mtd->oobsize; + user->subpagesize = mtd->writesize >> mtd->subpage_sft; user->mtd = mtd; /* The below fields are obsolete */ user->ecctype = -1; diff --git a/fs/devfs-core.c b/fs/devfs-core.c index a92d4347f8..44f0169e63 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -171,6 +171,7 @@ static int partition_ioctl(struct cdev *cdev, int request, void *buf) user->erasesize = cdev->mtd->erasesize; user->writesize = cdev->mtd->writesize; user->oobsize = cdev->mtd->oobsize; + user->subpagesize = cdev->mtd->writesize >> cdev->mtd->subpage_sft; user->mtd = cdev->mtd; /* The below fields are obsolete */ user->ecctype = -1; diff --git a/include/linux/mtd/mtd-abi.h b/include/linux/mtd/mtd-abi.h index fa8e36f133..11d51e2744 100644 --- a/include/linux/mtd/mtd-abi.h +++ b/include/linux/mtd/mtd-abi.h @@ -82,6 +82,7 @@ struct mtd_info_user { uint32_t ecctype; uint32_t eccsize; struct mtd_info *mtd; + uint32_t subpagesize; }; struct region_info_user { diff --git a/lib/libmtd.c b/lib/libmtd.c index eecc760548..1606b872fd 100644 --- a/lib/libmtd.c +++ b/lib/libmtd.c @@ -308,6 +308,7 @@ int mtd_get_dev_info(const char *node, struct mtd_dev_info *mtd) mtd->eb_size = ui.erasesize; mtd->min_io_size = ui.writesize; mtd->oob_size = ui.oobsize; + mtd->subpage_size = ui.subpagesize; if (mtd->min_io_size <= 0) { errmsg("%s has insane min. I/O unit size %d", @@ -356,7 +357,6 @@ int mtd_get_dev_info(const char *node, struct mtd_dev_info *mtd) if (ui.flags & MTD_WRITEABLE) mtd->writable = 1; - mtd->subpage_size = mtd->min_io_size; close(fd); |