// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2017 NXP Semiconductors * Copyright (C) 2017 Bin Meng */ #include #include #include #include #include "nvme.h" static int nvme_bind(struct udevice *udev) { static int ndev_num; char name[20]; sprintf(name, "nvme#%d", ndev_num++); return device_set_name(udev, name); } static int nvme_probe(struct udevice *udev) { struct nvme_dev *ndev = dev_get_priv(udev); struct pci_child_plat *pplat; pplat = dev_get_parent_plat(udev); sprintf(ndev->vendor, "0x%.4x", pplat->vendor); ndev->instance = trailing_strtol(udev->name); ndev->bar = dm_pci_map_bar(udev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, PCI_REGION_MEM); /* Turn on bus-mastering */ dm_pci_clrset_config16(udev, PCI_COMMAND, 0, PCI_COMMAND_MASTER); return nvme_init(udev); } U_BOOT_DRIVER(nvme) = { .name = "nvme", .id = UCLASS_NVME, .bind = nvme_bind, .probe = nvme_probe, .priv_auto = sizeof(struct nvme_dev), }; struct pci_device_id nvme_supported[] = { { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, ~0) }, {} }; U_BOOT_PCI_DEVICE(nvme, nvme_supported);