mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Marco Felsch <m.felsch@pengutronix.de>,
	Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH v2 15/19] of: export new of_cdev_find helper
Date: Wed,  7 Jun 2023 14:07:10 +0200	[thread overview]
Message-ID: <20230607120714.3083182-16-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20230607120714.3083182-1-a.fatoum@pengutronix.de>

__of_find_path goes through the hassle of determining the cdev, only to
discard it again and return either zero or an error code.

Follow up commits will need to get the cdev corresponding to a path in
the DT. So let's make that easier by exporting a suitable helper function.

Reviewed-by: Marco Felsch <m.felsch@pengutronix.de>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
v1 -> v2:
  - fix typo (Ulrich)
  - Add Marco's Reviewed-by
---
 drivers/of/of_path.c | 59 ++++++++++++++++++++++++++++++--------------
 include/of.h         |  1 +
 2 files changed, 41 insertions(+), 19 deletions(-)

diff --git a/drivers/of/of_path.c b/drivers/of/of_path.c
index d11cb2a524eb..22903da15ed6 100644
--- a/drivers/of/of_path.c
+++ b/drivers/of/of_path.c
@@ -27,21 +27,17 @@ struct device *of_find_device_by_node_path(const char *path)
 }
 
 /**
- * __of_find_path
+ * __of_cdev_find
  *
  * @node: The node to find the cdev for, can be the device or a
  *        partition in the device
  * @part: Optionally, a description of a partition of @node.  See of_find_path
- * @outpath: if this function returns 0 outpath will contain the path belonging
- *           to the input path description. Must be freed with free().
- * @flags: use OF_FIND_PATH_FLAGS_BB to return the .bb device if available
  *
  */
-static int __of_find_path(struct device_node *node, const char *part, char **outpath, unsigned flags)
+static struct cdev *__of_cdev_find(struct device_node *node, const char *part)
 {
 	struct device *dev;
 	struct cdev *cdev;
-	bool add_bb = false;
 
 	/*
 	 * On EFI, where devices are not instantiated from device tree, the
@@ -64,24 +60,17 @@ static int __of_find_path(struct device_node *node, const char *part, char **out
 
 			/* when partuuid is specified short-circuit the search for the cdev */
 			ret = of_property_read_string(node, "partuuid", &uuid);
-			if (!ret) {
-				cdev = cdev_by_partuuid(uuid);
-				if (!cdev)
-					return -ENODEV;
-
-				*outpath = basprintf("/dev/%s", cdev->name);
-
-				return 0;
-			}
+			if (!ret)
+				return cdev_by_partuuid(uuid) ?: ERR_PTR(-ENODEV);
 		}
 
 		dev = of_find_device_by_node_path(devnode->full_name);
 		if (!dev)
-			return -ENODEV;
+			return ERR_PTR(-ENODEV);
 	}
 
 	if (dev->bus && !dev->driver)
-		return -EPROBE_DEFER;
+		return ERR_PTR(-EPROBE_DEFER);
 
 	device_detect(dev);
 
@@ -90,8 +79,40 @@ static int __of_find_path(struct device_node *node, const char *part, char **out
 	else
 		cdev = cdev_by_device_node(node);
 
-	if (!cdev)
-		return -ENOENT;
+	return cdev ?: ERR_PTR(-ENOENT);
+}
+
+/**
+ * of_cdev_find
+ *
+ * @node: The node to find the cdev for, can be the device or a
+ *        partition in the device
+ *
+ */
+struct cdev *of_cdev_find(struct device_node *node)
+{
+	return __of_cdev_find(node, NULL);
+}
+
+/**
+ * __of_find_path
+ *
+ * @node: The node to find the cdev for, can be the device or a
+ *        partition in the device
+ * @part: Optionally, a description of a partition of @node.  See of_find_path
+ * @outpath: if this function returns 0 outpath will contain the path belonging
+ *           to the input path description. Must be freed with free().
+ * @flags: use OF_FIND_PATH_FLAGS_BB to return the .bb device if available
+ *
+ */
+static int __of_find_path(struct device_node *node, const char *part, char **outpath, unsigned flags)
+{
+	bool add_bb = false;
+	struct cdev *cdev;
+
+	cdev = __of_cdev_find(node, part);
+	if (IS_ERR(cdev))
+		return PTR_ERR(cdev);
 
 	if ((flags & OF_FIND_PATH_FLAGS_BB) && cdev->mtd &&
 	    mtd_can_have_bb(cdev->mtd))
diff --git a/include/of.h b/include/of.h
index c716f9283316..2b75ce63e185 100644
--- a/include/of.h
+++ b/include/of.h
@@ -331,6 +331,7 @@ int of_add_memory_bank(struct device_node *node, bool dump, int r,
 struct device *of_find_device_by_node_path(const char *path);
 #define OF_FIND_PATH_FLAGS_BB 1		/* return .bb device if available */
 int of_find_path(struct device_node *node, const char *propname, char **outpath, unsigned flags);
+struct cdev *of_cdev_find(struct device_node *node);
 int of_find_path_by_node(struct device_node *node, char **outpath, unsigned flags);
 struct device_node *of_find_node_by_devpath(struct device_node *root, const char *path);
 int of_register_fixup(int (*fixup)(struct device_node *, void *), void *context);
-- 
2.39.2




  parent reply	other threads:[~2023-06-07 12:08 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-07 12:06 [PATCH v2 00/19] state: allow lookup of barebox state partition by Type GUID Ahmad Fatoum
2023-06-07 12:06 ` [PATCH v2 01/19] common: partitions: decouple from EFI GUID definition Ahmad Fatoum
2023-06-07 12:06 ` [PATCH v2 02/19] efi: define efi_guid_t as 32-bit aligned guid_t Ahmad Fatoum
2023-06-07 12:06 ` [PATCH v2 03/19] cdev: fix for_each_cdev macro Ahmad Fatoum
2023-06-07 12:06 ` [PATCH v2 04/19] of: partition: support of_partition_ensure_probed on parent device Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 05/19] state: fix deep probe handling Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 06/19] of: of_path: always call of_partition_ensure_probed before resolving Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 07/19] driver: add new cdev_is_partition helper Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 08/19] commands: stat: remove code duplication for type info Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 09/19] cdev: use more descriptive struct cdev::diskuuid/partuuid Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 10/19] cdev: record whether partition is parsed from OF Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 11/19] cdev: have devfs_add_partition return existing identical partition, not NULL Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 12/19] block: parse partition table on block device registration Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 13/19] common: partitions: record whether disk is GPT or MBR partitioned Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 14/19] block: add cdev_is_block_(device|partition|disk) helpers Ahmad Fatoum
2023-06-07 12:07 ` Ahmad Fatoum [this message]
2023-06-07 12:07 ` [PATCH v2 16/19] state: factor device path lookup into helper function Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 17/19] cdev: use cdev::dos_partition_type only if cdev_is_mbr_partitioned Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 18/19] common: partitions: efi: record type UUID in cdev Ahmad Fatoum
2023-06-07 12:07 ` [PATCH v2 19/19] state: allow lookup of barebox state partition by Type GUID Ahmad Fatoum
2023-06-08  6:53 ` [PATCH v2 00/19] " Sascha Hauer

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=20230607120714.3083182-16-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=m.felsch@pengutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox