All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/7] nvme: Move block dev creation from uclass post_probe() to driver probe()
@ 2021-06-22 13:16 Bin Meng
  2021-06-22 13:16 ` [PATCH v2 2/7] nvme: Skip block device creation for inactive namespaces Bin Meng
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Bin Meng @ 2021-06-22 13:16 UTC (permalink / raw)
  To: Tom Rini, u-boot; +Cc: Bin Meng

At present the block device creation happens in the NVMe uclass
driver post_probe() phase. In preparation to support multiple
namespaces, we should issue namespace identify before creating
block devices but that touches the underlying hardware hence it
is not appropriate to do such in the uclass driver post_probe().
Let's move it to driver probe() phase instead.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

---

Changes in v2:
- drop the nvme per-child platdata change

 drivers/nvme/nvme-uclass.c | 30 ------------------------------
 drivers/nvme/nvme.c        | 18 ++++++++++++++++++
 2 files changed, 18 insertions(+), 30 deletions(-)

diff --git a/drivers/nvme/nvme-uclass.c b/drivers/nvme/nvme-uclass.c
index 277e31e1f3..610166d76e 100644
--- a/drivers/nvme/nvme-uclass.c
+++ b/drivers/nvme/nvme-uclass.c
@@ -5,39 +5,9 @@
  */
 
 #include <common.h>
-#include <blk.h>
-#include <errno.h>
 #include <dm.h>
-#include <dm/device.h>
-#include "nvme.h"
-
-static int nvme_uclass_post_probe(struct udevice *udev)
-{
-	char name[20];
-	struct udevice *ns_udev;
-	int i, ret;
-	struct nvme_dev *ndev = dev_get_priv(udev);
-
-	/* Create a blk device for each namespace */
-	for (i = 0; i < ndev->nn; i++) {
-		/*
-		 * Encode the namespace id to the device name so that
-		 * we can extract it when doing the probe.
-		 */
-		sprintf(name, "blk#%d", i);
-
-		/* The real blksz and size will be set by nvme_blk_probe() */
-		ret = blk_create_devicef(udev, "nvme-blk", name, IF_TYPE_NVME,
-					 -1, 512, 0, &ns_udev);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
 
 UCLASS_DRIVER(nvme) = {
 	.name	= "nvme",
 	.id	= UCLASS_NVME,
-	.post_probe = nvme_uclass_post_probe,
 };
diff --git a/drivers/nvme/nvme.c b/drivers/nvme/nvme.c
index c61dab20c5..29735a6ad8 100644
--- a/drivers/nvme/nvme.c
+++ b/drivers/nvme/nvme.c
@@ -879,6 +879,24 @@ static int nvme_probe(struct udevice *udev)
 
 	nvme_get_info_from_identify(ndev);
 
+	/* Create a blk device for each namespace */
+	for (int i = 0; i < ndev->nn; i++) {
+		struct udevice *ns_udev;
+		char name[20];
+
+		/*
+		 * Encode the namespace id to the device name so that
+		 * we can extract it when doing the probe.
+		 */
+		sprintf(name, "blk#%d", i);
+
+		/* The real blksz and size will be set by nvme_blk_probe() */
+		ret = blk_create_devicef(udev, "nvme-blk", name, IF_TYPE_NVME,
+					 -1, 512, 0, &ns_udev);
+		if (ret)
+			goto free_queue;
+	}
+
 	return 0;
 
 free_queue:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-06-23  9:22 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-22 13:16 [PATCH v2 1/7] nvme: Move block dev creation from uclass post_probe() to driver probe() Bin Meng
2021-06-22 13:16 ` [PATCH v2 2/7] nvme: Skip block device creation for inactive namespaces Bin Meng
2021-06-22 13:16 ` [PATCH v2 3/7] nvme: Eliminate the offset of one during block dev creation Bin Meng
2021-06-22 13:16 ` [PATCH v2 4/7] nvme: Drop useless members of 'struct nvme_ns' Bin Meng
2021-06-22 13:16 ` [PATCH v2 5/7] nvme: Don't clear nvme blk device's priv space Bin Meng
2021-06-22 13:16 ` [PATCH v2 6/7] doc: develop: Convert README.nvme to reST Bin Meng
2021-06-22 13:16 ` [PATCH v2 7/7] MAINTAINERS: Add an entry for NVMe Bin Meng
2021-06-22 13:31   ` Tom Rini
2021-06-23  9:22 ` [PATCH v2 1/7] nvme: Move block dev creation from uclass post_probe() to driver probe() Bin Meng

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.