Hi Bin, On 19 December 2014 at 00:19, Bin Meng <bmeng...@gmail.com> wrote: > This new API pci_early_find_devices() is derived from the generic > version of pci_find_devices() with modifications required in the > early phase (like hose, config space access routines). > > Signed-off-by: Bin Meng <bmeng...@gmail.com> > --- > > arch/x86/cpu/pci.c | 41 +++++++++++++++++++++++++++++++++++++++++ > arch/x86/include/asm/pci.h | 2 ++ > 2 files changed, 43 insertions(+) > > diff --git a/arch/x86/cpu/pci.c b/arch/x86/cpu/pci.c > index 1eee08b..cdfb981 100644 > --- a/arch/x86/cpu/pci.c > +++ b/arch/x86/cpu/pci.c > @@ -111,3 +111,44 @@ void pci_write_config32(pci_dev_t dev, unsigned where, > unsigned value) > { > pci_hose_write_config_dword(get_hose(), dev, where, value); > } > + > +pci_dev_t pci_early_find_devices(struct pci_device_id *ids, int index)
Can't we just call the normal function? We have an early 'hose'... > +{ > + struct pci_controller *hose = gd->arch.hose; > + u16 vendor, device; > + u8 header_type; > + pci_dev_t bdf; > + int i, bus, found_multi = 0; > + > + for (bus = hose->first_busno; bus <= hose->last_busno; bus++) > + for (bdf = PCI_BDF(bus, 0, 0); > + bdf < PCI_BDF(bus + 1, 0, 0); > + bdf += PCI_BDF(0, 0, 1)) { > + if (pci_skip_dev(hose, bdf)) > + continue; > + > + if (!PCI_FUNC(bdf)) { > + header_type = pci_read_config8(bdf, > + > PCI_HEADER_TYPE); > + > + found_multi = header_type & 0x80; > + } else { > + if (!found_multi) > + continue; > + } > + > + vendor = pci_read_config16(bdf, PCI_VENDOR_ID); > + device = pci_read_config16(bdf, PCI_DEVICE_ID); > + > + for (i = 0; ids[i].vendor != 0; i++) { > + if (vendor == ids[i].vendor && > + device == ids[i].device) { > + if (index <= 0) > + return bdf; > + index--; > + } > + } > + } > + > + return -1; > +} > diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h > index ac1a808..a3550fb 100644 > --- a/arch/x86/include/asm/pci.h > +++ b/arch/x86/include/asm/pci.h > @@ -49,4 +49,6 @@ void pci_write_config8(pci_dev_t dev, unsigned where, > unsigned value); > void pci_write_config16(pci_dev_t dev, unsigned where, unsigned value); > void pci_write_config32(pci_dev_t dev, unsigned where, unsigned value); > > +pci_dev_t pci_early_find_devices(struct pci_device_id *ids, int index); > + > #endif Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot