Commit 4b515e4f authored by Simon Glass's avatar Simon Glass
Browse files

dm: pci: Add a function to get the BDF for a device



It is useful to be able to find the full PCI address (bus, device and
function) for a PCI device. Add a function to provide this.

Adjust the existing code to use this.
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent d0a5a0b2
...@@ -30,6 +30,14 @@ struct pci_controller *pci_bus_to_hose(int busnum) ...@@ -30,6 +30,14 @@ struct pci_controller *pci_bus_to_hose(int busnum)
return dev_get_uclass_priv(bus); return dev_get_uclass_priv(bus);
} }
pci_dev_t pci_get_bdf(struct udevice *dev)
{
struct pci_child_platdata *pplat = dev_get_parent_platdata(dev);
struct udevice *bus = dev->parent;
return PCI_ADD_BUS(bus->seq, pplat->devfn);
}
/** /**
* pci_get_bus_max() - returns the bus number of the last active bus * pci_get_bus_max() - returns the bus number of the last active bus
* *
...@@ -295,19 +303,14 @@ int pci_auto_config_devices(struct udevice *bus) ...@@ -295,19 +303,14 @@ int pci_auto_config_devices(struct udevice *bus)
for (ret = device_find_first_child(bus, &dev); for (ret = device_find_first_child(bus, &dev);
!ret && dev; !ret && dev;
ret = device_find_next_child(&dev)) { ret = device_find_next_child(&dev)) {
struct pci_child_platdata *pplat;
struct pci_controller *ctlr_hose; struct pci_controller *ctlr_hose;
pplat = dev_get_parent_platdata(dev);
unsigned int max_bus; unsigned int max_bus;
pci_dev_t bdf;
bdf = PCI_ADD_BUS(bus->seq, pplat->devfn);
debug("%s: device %s\n", __func__, dev->name); debug("%s: device %s\n", __func__, dev->name);
/* The root controller has the region information */ /* The root controller has the region information */
ctlr_hose = hose->ctlr->uclass_priv; ctlr_hose = hose->ctlr->uclass_priv;
max_bus = pciauto_config_device(ctlr_hose, bdf); max_bus = pciauto_config_device(ctlr_hose, pci_get_bdf(dev));
sub_bus = max(sub_bus, max_bus); sub_bus = max(sub_bus, max_bus);
} }
debug("%s: done\n", __func__); debug("%s: done\n", __func__);
......
...@@ -31,13 +31,9 @@ PCI_HOSE_OP(write, dword, 32, u32) ...@@ -31,13 +31,9 @@ PCI_HOSE_OP(write, dword, 32, u32)
pci_dev_t pci_find_devices(struct pci_device_id *ids, int index) pci_dev_t pci_find_devices(struct pci_device_id *ids, int index)
{ {
struct pci_child_platdata *pplat; struct udevice *dev;
struct udevice *bus, *dev;
if (pci_find_device_id(ids, index, &dev)) if (pci_find_device_id(ids, index, &dev))
return -1; return -1;
bus = dev->parent; return pci_get_bdf(dev);
pplat = dev_get_parent_platdata(dev);
return PCI_ADD_BUS(bus->seq, pplat->devfn);
} }
...@@ -807,6 +807,14 @@ struct dm_pci_ops { ...@@ -807,6 +807,14 @@ struct dm_pci_ops {
/* Get access to a PCI bus' operations */ /* Get access to a PCI bus' operations */
#define pci_get_ops(dev) ((struct dm_pci_ops *)(dev)->driver->ops) #define pci_get_ops(dev) ((struct dm_pci_ops *)(dev)->driver->ops)
/**
* pci_get_bdf() - Get the BDF value for a device
*
* @dev: Device to check
* @return bus/device/function value (see PCI_BDF())
*/
pci_dev_t pci_get_bdf(struct udevice *dev);
/** /**
* pci_bind_bus_devices() - scan a PCI bus and bind devices * pci_bind_bus_devices() - scan a PCI bus and bind devices
* *
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment