]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
982388ea ZZ |
2 | /* |
3 | * Copyright (C) 2017 NXP Semiconductors | |
4 | * Copyright (C) 2017 Bin Meng <[email protected]> | |
982388ea ZZ |
5 | */ |
6 | ||
b953ec2b PD |
7 | #define LOG_CATEGORY UCLASS_NVME |
8 | ||
758c706c | 9 | #include <bootdev.h> |
982388ea | 10 | #include <dm.h> |
758c706c SG |
11 | #include <init.h> |
12 | #include <log.h> | |
13 | #include <nvme.h> | |
14 | ||
15 | static int nvme_bootdev_bind(struct udevice *dev) | |
16 | { | |
17 | struct bootdev_uc_plat *ucp = dev_get_uclass_plat(dev); | |
18 | ||
eacc2611 | 19 | ucp->prio = BOOTDEVP_4_SCAN_FAST; |
758c706c SG |
20 | |
21 | return 0; | |
22 | } | |
23 | ||
24 | static int nvme_bootdev_hunt(struct bootdev_hunter *info, bool show) | |
25 | { | |
26 | int ret; | |
27 | ||
28 | /* init PCI first since this is often used to provide NVMe */ | |
29 | if (IS_ENABLED(CONFIG_PCI)) { | |
30 | ret = pci_init(); | |
31 | if (ret) | |
32 | log_warning("Failed to init PCI (%dE)\n", ret); | |
33 | } | |
34 | ||
35 | ret = nvme_scan_namespace(); | |
36 | if (ret) | |
37 | return log_msg_ret("scan", ret); | |
38 | ||
39 | return 0; | |
40 | } | |
982388ea ZZ |
41 | |
42 | UCLASS_DRIVER(nvme) = { | |
43 | .name = "nvme", | |
44 | .id = UCLASS_NVME, | |
982388ea | 45 | }; |
758c706c SG |
46 | |
47 | struct bootdev_ops nvme_bootdev_ops = { | |
48 | }; | |
49 | ||
50 | static const struct udevice_id nvme_bootdev_ids[] = { | |
51 | { .compatible = "u-boot,bootdev-nvme" }, | |
52 | { } | |
53 | }; | |
54 | ||
55 | U_BOOT_DRIVER(nvme_bootdev) = { | |
56 | .name = "nvme_bootdev", | |
57 | .id = UCLASS_BOOTDEV, | |
58 | .ops = &nvme_bootdev_ops, | |
59 | .bind = nvme_bootdev_bind, | |
60 | .of_match = nvme_bootdev_ids, | |
61 | }; | |
62 | ||
63 | BOOTDEV_HUNTER(nvme_bootdev_hunter) = { | |
eacc2611 | 64 | .prio = BOOTDEVP_4_SCAN_FAST, |
758c706c SG |
65 | .uclass = UCLASS_NVME, |
66 | .hunt = nvme_bootdev_hunt, | |
67 | .drv = DM_DRIVER_REF(nvme_bootdev), | |
68 | }; |