From: Christian Marangi <ansuelsmth@gmail.com>
To: Jens Axboe <axboe@kernel.dk>, Jonathan Corbet <corbet@lwn.net>,
Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Christian Marangi <ansuelsmth@gmail.com>,
Daniel Golle <daniel@makrotopia.org>,
INAGAKI Hiroshi <musashino.open@gmail.com>,
Christian Brauner <brauner@kernel.org>,
Al Viro <viro@zeniv.linux.org.uk>, Ming Lei <ming.lei@redhat.com>,
Li Lingfeng <lilingfeng3@huawei.com>,
Christian Heusel <christian@heusel.eu>,
Avri Altman <avri.altman@wdc.com>,
Linus Walleij <linus.walleij@linaro.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Riyan Dhiman <riyandhiman14@gmail.com>,
Mikko Rapeli <mikko.rapeli@linaro.org>,
Jorge Ramirez-Ortiz <jorge@foundries.io>,
Li Zhijian <lizhijian@fujitsu.com>,
Dominique Martinet <dominique.martinet@atmark-techno.com>,
Jens Wiklander <jens.wiklander@linaro.org>,
Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
linux-block@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org,
devicetree@vger.kernel.org, Lorenzo Bianconi <lorenzo@kernel.org>,
Miquel Raynal <miquel.raynal@bootlin.com>,
upstream@airoha.com, Christoph Hellwig <hch@infradead.org>
Subject: [PATCH v6 4/6] mmc: block: attach partitions fwnode if found in mmc-card
Date: Thu, 3 Oct 2024 00:11:44 +0200 [thread overview]
Message-ID: <20241002221306.4403-5-ansuelsmth@gmail.com> (raw)
In-Reply-To: <20241002221306.4403-1-ansuelsmth@gmail.com>
Attach partitions fwnode if found in mmc-card and register disk with it.
This permits block partition to reference the node and register a
partition table defined in DT for the special case for embedded device
that doesn't have a partition table flashed but have an hardcoded
partition table passed from the system.
JEDEC BOOT partition boot0/boot1 are supported but in DT we refer with
the JEDEC name of boot1 and boot2 to better adhere to documentation.
Also JEDEC GP partition gp0/1/2/3 are supported but in DT we refer with
the JEDEC name of gp1/2/3/4 to better adhere to documentration.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/core/block.c | 55 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 54 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index f58bea534004..d7eadf2b407f 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -2501,6 +2501,56 @@ static inline int mmc_blk_readonly(struct mmc_card *card)
!(card->csd.cmdclass & CCC_BLOCK_WRITE);
}
+/*
+ * Search for a declared partitions node for the disk in mmc-card related node.
+ *
+ * This is to permit support for partition table defined in DT in special case
+ * where a partition table is not written in the disk and is expected to be
+ * passed from the running system.
+ *
+ * For the user disk, "partitions" node is searched.
+ * For the special HW disk, "partitions-" node with the appended name is used
+ * following this conversion table (to adhere to JEDEC naming)
+ * - boot0 -> partitions-boot1
+ * - boot1 -> partitions-boot2
+ * - gp0 -> partitions-gp1
+ * - gp1 -> partitions-gp2
+ * - gp2 -> partitions-gp3
+ * - gp3 -> partitions-gp4
+ */
+static struct fwnode_handle *mmc_blk_get_partitions_node(struct device *mmc_dev,
+ const char *subname)
+{
+ const char *node_name = "partitions";
+
+ if (subname) {
+ mmc_dev = mmc_dev->parent;
+
+ /*
+ * Check if we are allocating a BOOT disk boot0/1 disk.
+ * In DT we use the JEDEC naming boot1/2.
+ */
+ if (!strcmp(subname, "boot0"))
+ node_name = "partitions-boot1";
+ if (!strcmp(subname, "boot1"))
+ node_name = "partitions-boot2";
+ /*
+ * Check if we are allocating a GP disk gp0/1/2/3 disk.
+ * In DT we use the JEDEC naming gp1/2/3/4.
+ */
+ if (!strcmp(subname, "gp0"))
+ node_name = "partitions-gp1";
+ if (!strcmp(subname, "gp1"))
+ node_name = "partitions-gp2";
+ if (!strcmp(subname, "gp2"))
+ node_name = "partitions-gp3";
+ if (!strcmp(subname, "gp3"))
+ node_name = "partitions-gp4";
+ }
+
+ return device_get_named_child_node(mmc_dev, node_name);
+}
+
static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
struct device *parent,
sector_t size,
@@ -2509,6 +2559,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
int area_type,
unsigned int part_type)
{
+ struct fwnode_handle *disk_fwnode;
struct mmc_blk_data *md;
int devidx, ret;
char cap_str[10];
@@ -2610,7 +2661,9 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
/* used in ->open, must be set before add_disk: */
if (area_type == MMC_BLK_DATA_AREA_MAIN)
dev_set_drvdata(&card->dev, md);
- ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups);
+ disk_fwnode = mmc_blk_get_partitions_node(parent, subname);
+ ret = add_disk_fwnode(md->parent, md->disk, mmc_disk_attr_groups,
+ disk_fwnode);
if (ret)
goto err_put_disk;
return md;
--
2.45.2
next prev parent reply other threads:[~2024-10-02 22:13 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-02 22:11 [PATCH v6 0/6] block: partition table OF support Christian Marangi
2024-10-02 22:11 ` [PATCH v6 1/6] block: add support for defining read-only partitions Christian Marangi
2024-10-02 22:11 ` [PATCH v6 2/6] docs: block: Document support for read-only partition in cmdline part Christian Marangi
2024-10-02 22:11 ` [PATCH v6 3/6] block: introduce add_disk_fwnode() Christian Marangi
2024-10-03 12:09 ` Christoph Hellwig
2024-10-02 22:11 ` Christian Marangi [this message]
2024-10-02 22:11 ` [PATCH v6 5/6] block: add support for partition table defined in OF Christian Marangi
2024-12-05 11:21 ` Co-existence of GPT and fixed partitions (Was: Re: [PATCH v6 5/6] block: add support for partition table defined in OF) Ahmad Fatoum
2024-12-05 11:54 ` Christian Marangi (Ansuel)
2024-12-05 12:12 ` Ahmad Fatoum
2025-06-11 18:15 ` Ahmad Fatoum
2024-10-02 22:11 ` [PATCH v6 6/6] dt-bindings: mmc: Document support for partition table in mmc-card Christian Marangi
2024-10-07 20:22 ` [PATCH v6 0/6] block: partition table OF support Jens Axboe
2024-10-08 9:10 ` Ulf Hansson
2024-10-08 13:24 ` Jens Axboe
2024-10-08 14:33 ` Ulf Hansson
2024-10-08 14:42 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241002221306.4403-5-ansuelsmth@gmail.com \
--to=ansuelsmth@gmail.com \
--cc=adrian.hunter@intel.com \
--cc=avri.altman@wdc.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=christian@heusel.eu \
--cc=christophe.jaillet@wanadoo.fr \
--cc=conor+dt@kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@makrotopia.org \
--cc=devicetree@vger.kernel.org \
--cc=dominique.martinet@atmark-techno.com \
--cc=hch@infradead.org \
--cc=jens.wiklander@linaro.org \
--cc=jorge@foundries.io \
--cc=krzk+dt@kernel.org \
--cc=lilingfeng3@huawei.com \
--cc=linus.walleij@linaro.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=lizhijian@fujitsu.com \
--cc=lorenzo@kernel.org \
--cc=mikko.rapeli@linaro.org \
--cc=ming.lei@redhat.com \
--cc=miquel.raynal@bootlin.com \
--cc=musashino.open@gmail.com \
--cc=riyandhiman14@gmail.com \
--cc=robh@kernel.org \
--cc=ulf.hansson@linaro.org \
--cc=upstream@airoha.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.