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.
Kyösti