[U-Boot] [PATCH 05/15] dm: pci: Add a way to iterate through all PCI devices
Simon Glass
sjg at chromium.org
Fri Aug 7 04:28:37 CEST 2015
Hi Bin,
On 28 July 2015 at 01:48, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Tue, Jul 28, 2015 at 5:47 AM, Simon Glass <sjg at chromium.org> wrote:
>> These functions allow iteration through all PCI devices including bridges.
>> The children of each PCI bus are returned in turn. This can be useful for
>> configuring, checking or enumerating all the devices.
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>> drivers/pci/pci-uclass.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++
>> include/pci.h | 25 +++++++++++++++++++++
>> 2 files changed, 83 insertions(+)
>>
>> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
>> index 8d3536c..da724ca 100644
>> --- a/drivers/pci/pci-uclass.c
>> +++ b/drivers/pci/pci-uclass.c
>> @@ -779,6 +779,64 @@ static int pci_bridge_write_config(struct udevice *bus, pci_dev_t bdf,
>> return pci_bus_write_config(hose->ctlr, bdf, offset, value, size);
>> }
>>
>> +static int skip_to_next_device(struct udevice *bus, struct udevice **devp)
>> +{
>> + struct udevice *dev;
>> + int ret = 0;
>> +
>> + do {
>> + do {
>> + device_find_first_child(bus, &dev);
>> + if (dev) {
>> + *devp = dev;
>> + return 0;
>> + }
>> + } while (dev);
>
> There is no need to do a 'do..while' here.
>
>> + ret = uclass_next_device(&bus);
>
> I don't understand. If there is no child device of the root pci bus,
> why do we bother doing this uclass_next_device()? No child device of
> the root pci bus means there will not be another bus device which is
> attached to the root pci bus.
That's true on x86, but other hardware may have multiple PCI
controllers. I will add a comment.
[snip]
Regards,
Simon
More information about the U-Boot
mailing list