summaryrefslogtreecommitdiff
path: root/drivers/nvme/nvme.c
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2021-06-22 21:16:17 +0800
committerBin Meng <bmeng.cn@gmail.com>2021-06-23 17:21:14 +0800
commit84344258f23fb9ac5abe7383c909f8606ac767b6 (patch)
tree4546e94d2546718ed4a11e37493ca0dc62aa9d52 /drivers/nvme/nvme.c
parentc3e52c71bb0e7e5e34fadafbfcc34bce9899c100 (diff)
downloadu-boot-84344258f23fb9ac5abe7383c909f8606ac767b6.tar.gz
nvme: Move block dev creation from uclass post_probe() to driver probe()
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>
Diffstat (limited to 'drivers/nvme/nvme.c')
-rw-r--r--drivers/nvme/nvme.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/nvme/nvme.c b/drivers/nvme/nvme.c
index 424fe6d945..afb1a7ea97 100644
--- a/drivers/nvme/nvme.c
+++ b/drivers/nvme/nvme.c
@@ -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: