mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 21:21:37 +00:00
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: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d0a5a0b2d8
commit
4b515e4fc5
3 changed files with 19 additions and 12 deletions
|
@ -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)
|
||||||
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)
|
||||||
|
|
||||||
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 {
|
||||||
/* 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
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue