On 11/26/13 10:10, Michael S. Tsirkin wrote: > seabios manages to enumerate PCI with information exported from qemu > so why can't OVMF?
SeaBIOS and qemu duplicate logic (code) between each other. src/fw/pciinit.c grabs RamSize over fw_cfg, and i440fx_mem_addr_setup() sets "pcimem_start" to one of three values based on RamSize. (One of the three is not explicit there, it's the build default 0xe0000000.) The same code is visible in qemu in i440fx_init(). I duplicated the same logic in OVMF's PEI one week ago, and it solved the problem. See the patch attached to <http://thread.gmane.org/gmane.comp.bios.tianocore.devel/4881/focus=4995>. But code/logic duplication is ugly, which is why I've been looking for a better, dynamic solution ever since. > I think it's down to other qemu bugs (such as _CRS not covering > all of PCI memory), we shall just fix them. I don't know how to fix them. I don't know how to enumerate all PCI regions in use, plus all unassigned ranges, from below, like with a MemoryListener. If I understand correctly, Igor suggested to track devices as they map their regions, but (again, if I understood correctly) you didn't seem to like the idea. Thanks Laszlo