On Thu, Sep 26, 2019 at 10:06 AM Kyösti Mälkki <kyosti.mal...@gmail.com> wrote:
> In a nutshell: > > The implementation of dev_find_slot() traverses the linked list of all > devices in the devicetree, regardless of the topology. Since PCI bus > numbers are only assigned in early ramstage, this function is not a > reliable API. Furthermore, referencing (dynamically) assigned PCI > busses by integers (>1) is also prone to errors as insertion of PCIe > add-on cards will shift these. > > Now.. during PCI enumeration, missing static devices are only removed > from the PCI topology links, not the 'linked list of all devices' that > dev_find_slot(). AFAICS, this is the root cause why pcidev_on_root() > caused regressions with 903b40a. Should be easy enough to implement > platform hook telling to not remove PCI device node from topology > links (based on BDF), even when it does not respond to ID queries. > Yes, we can certainly do that. However, I also think this issue and yours and Nico's devicetree work are somewhat related as well as https://review.coreboot.org/c/coreboot/+/35621. Here's some of the requirements/issues we should resolve that come to mind: 1. Easy way to directly retrieve a device's chip config object w/o traversing the device hierarchy. Which leads to... 2. Symbol alias for accessing struct device directly (no bdf lookup) 3. Symbol alias for pci b/d/f lookup (equivalent of simple device but cleaner) so we can perform pci operations. 4. possibly hidden pci devices Anything else I'm missing? I think a lot of the issues we're running into could be fixed w/ the above. Let me know what you think. > Kyösti >
_______________________________________________ coreboot mailing list -- coreboot@coreboot.org To unsubscribe send an email to coreboot-le...@coreboot.org