On Thu, 2013-02-28 at 08:50 +0200, Michael S. Tsirkin wrote:
On Wed, Feb 27, 2013 at 02:16:23PM -0700, Alex
When we start adding root ports and bridges to systems we need some
concept of a primary VGA device.The differentiation of the primary
device is that it's the default one that responds to the Legacy VGA
address ranges. PCs often have a BIOS selection for this.
Seabios already seems to have some concept of this and looks for a VGA
class device for which the parent devices all have VGA routing enabled.
This seems to work today if QEMU initializes VGA routing for the path it
considers the primary.
The first question is whether this bridge path pre-configuration is what
we want to keep as the way QEMU communicates the primary VGA device to
Seabios? Obviously we could switch to some kind of fwcfg interface, but
I tend to think what we have is sufficient.
If it is sufficient, then I think we need to rebuild that path on system
reset and we need some way to specify which device to use. One option
would be some kind of per PCIDevice property, perhaps "primary_vga". A
downside is that users can abuse it by trying to set it for more than
one device. Maybe a better approach would be to add a machine property
for it, -machine primary_vga=$id.
Yes. And a command to change it when we support hotplug in the future?
Looking at how this would happen on bare metal, there are ACPI methods
_GPD (Get Post Device), _SPD (Set Post Device), and _VPD (Video Post
Options). So I imagine that if we supported VGA hotplug we'd use those
to let the guest specify the primary and continue to use an algorithm in
SeaBIOS to post to the lowest B:D.F VGA device if unspecified. I don't
know that we need some kind of QMP/QAPI runtime command to change the
VGA post device externally on the next boot, real systems likely doesn't
have such a hook. For now I'll just start with making SeaBIOS have a
way to enable and post the first VGA device when it's behind bridges.
> We'll also need some reasonable way
> to pick a default if unspecified.
> Does anyone have any thoughts on managing this? Thanks,