[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240806114118.17198-5-ansuelsmth@gmail.com>
Date: Tue, 6 Aug 2024 13:41:14 +0200
From: Christian Marangi <ansuelsmth@...il.com>
To: Ulf Hansson <ulf.hansson@...aro.org>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Miquel Raynal <miquel.raynal@...tlin.com>,
Richard Weinberger <richard@....at>,
Vignesh Raghavendra <vigneshr@...com>,
Joern Engel <joern@...ybastard.org>,
Keith Busch <kbusch@...nel.org>,
Jens Axboe <axboe@...nel.dk>,
Christoph Hellwig <hch@....de>,
Sagi Grimberg <sagi@...mberg.me>,
Christian Marangi <ansuelsmth@...il.com>,
Wolfram Sang <wsa+renesas@...g-engineering.com>,
Florian Fainelli <f.fainelli@...il.com>,
Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
linux-mmc@...r.kernel.org,
devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
linux-mtd@...ts.infradead.org,
linux-nvme@...ts.infradead.org
Subject: [PATCH v3 4/6] block2mtd: attach device OF node to MTD device
Attach device OF node to MTD device if defined and the root blockdev is
being used to add support for partitions defined in DT node.
This permits the usage of fixed-partition or alternative parser with the
use of block2mtd module.
Signed-off-by: Christian Marangi <ansuelsmth@...il.com>
---
drivers/mtd/devices/block2mtd.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
index b06c8dd51562..8ff9787edc24 100644
--- a/drivers/mtd/devices/block2mtd.c
+++ b/drivers/mtd/devices/block2mtd.c
@@ -265,6 +265,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
struct file *bdev_file;
struct block_device *bdev;
struct block2mtd_dev *dev;
+ struct device *ddev;
loff_t size;
char *name;
@@ -324,6 +325,15 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
dev->mtd.priv = dev;
dev->mtd.owner = THIS_MODULE;
+ /*
+ * Check if we are using root blockdev.
+ * If it's the case, connect the MTD of_node to the ddev parent
+ * to support providing partition in DT node.
+ */
+ ddev = disk_to_dev(bdev->bd_disk);
+ if (ddev == &bdev->bd_device)
+ dev->mtd.dev.of_node = of_node_get(ddev->parent->of_node);
+
if (mtd_device_register(&dev->mtd, NULL, 0)) {
/* Device didn't get added, so free the entry */
goto err_destroy_mutex;
@@ -337,6 +347,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
return dev;
err_destroy_mutex:
+ of_node_put(dev->mtd.dev.of_node);
mutex_destroy(&dev->write_mutex);
err_free_block2mtd:
block2mtd_free_device(dev);
@@ -515,6 +526,7 @@ static void block2mtd_exit(void)
struct block2mtd_dev *dev = list_entry(pos, typeof(*dev), list);
block2mtd_sync(&dev->mtd);
mtd_device_unregister(&dev->mtd);
+ of_node_put(dev->mtd.dev.of_node);
mutex_destroy(&dev->write_mutex);
pr_info("mtd%d: [%s] removed\n",
dev->mtd.index,
--
2.45.2
Powered by blists - more mailing lists