]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
nvme: Move block dev creation from uclass post_probe() to driver probe()
authorBin Meng <bmeng.cn@gmail.com>
Tue, 22 Jun 2021 13:16:17 +0000 (21:16 +0800)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 23 Jun 2021 09:21:14 +0000 (17:21 +0800)
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>
drivers/nvme/nvme-uclass.c
drivers/nvme/nvme.c

index 277e31e1f3973de54198312d9884693d85a49bd5..610166d76ea11a668b59e4da5627669a1890da4c 100644 (file)
@@ -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,
 };
index 424fe6d945a7d7ba8d08345ed034d0e4a96ff583..afb1a7ea978cb33113a0c1352cdd8177fedbc7a7 100644 (file)
@@ -878,6 +878,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: