It seems like hw bug, but I think we should change PCI BAR probing and disable the regions before probing and restore them later to original values, same as U-boot does.
One question about the following snippet, though:
- /* disable I/O and memory decode, or it freezes PCI bus during BAR sizing */
- tmp = pci_read_config8(dev, PCI_COMMAND);
- tmp &= ~0x3;
- pci_write_config8(dev, PCI_COMMAND, tmp);
AFAICS that's a workaround for a hardware bug (more explanations in code comments welcome). Do you reenable I/O and memory decode after BAR sizing?
Nope, because integrated VGA has no other then legacy ports. Second reason is that if there would be some IO resources, the set resources would enable the bridge anyway.
Thanks, Rudolf