ioport access is required for VESA BIOS Extensions (VBE). Since ioport access is not forwarded over PCI(e) bridges, graphics adapters must be attached directly to the Root Complex in order for the BIOS to provide VBE modes. I'm very grateful to Gerd Hoffmann for explaining this on the SeaBIOS mailing list.[1]
Update the PCI Express Guidelines to document this as an exception to the recommendation to "Place only legacy PCI devices on the Root Complex." [1]: https://mail.coreboot.org/hyperkitty/list/seab...@seabios.org/thread/XG2RN3HKVRDEDTLA2PRELLIENIIH7II7/#XVP3I2KQVZHSTDA4SNVKOITWGRGSDU3F Signed-off-by: Kevin Locke <ke...@kevinlocke.name> --- This suggested documentation change is the result of my struggles to understand why I was seeing a very limited set of display modes in one of my virtual machines, as explained in the seabios ML post linked above and an earlier post to qemu-discuss.[2] I hope it may help avoid some of these hassles for future users. I'm far from being an expert in PCI(e), BIOS/VBE, or virtualization in general, and would appreciate any suggestions on these docs changes. I'm also curious about whether graphics devices are the only exception and whether "Guest OSes are suspected to behave strangely when PCI Express devices are integrated with the Root Complex" is still the case. David Gibson had previously noted that graphics cards appear on the Root Complex on real hardware.[3] I notice that the HD Audio Controller on my T430 is an "Express Root Complex Integrated Endpoint". Is this a non-graphics example, or am I misinterpreting the lspci output? 00:1b.0 Audio device: Intel Corporation 7 Series/C216 Chipset Family High Definition Audio Controller (rev 04) Subsystem: Lenovo 7 Series/C216 Chipset Family High Definition Audio Controller Flags: bus master, fast devsel, latency 0, IRQ 29, IOMMU group 6 Memory at f1530000 (64-bit, non-prefetchable) [size=16K] Capabilities: [50] Power Management version 2 Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+ Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00 Capabilities: [100] Virtual Channel Capabilities: [130] Root Complex Link Kernel driver in use: snd_hda_intel Kernel modules: snd_hda_intel Thanks, Kevin docs/pcie.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pcie.txt b/docs/pcie.txt index 89e3502075..a23d93849b 100644 --- a/docs/pcie.txt +++ b/docs/pcie.txt @@ -48,6 +48,11 @@ Place only the following kinds of devices directly on the Root Complex: strangely when PCI Express devices are integrated with the Root Complex. + An exception to this rule is PCI Express devices which will be + accessed using IO ports. For example, guests using BIOS firmware + require IO port access for graphics devices to provide VESA BIOS + Extensions (VBE). + (2) PCI Express Root Ports (ioh3420), for starting exclusively PCI Express hierarchies. -- 2.35.1