On Wed, Sep 14, 2011 at 8:15 PM, Avi Kivity<address@hidden> wrote:
> On 09/14/2011 11:06 PM, Blue Swirl wrote:
>>
>> On Wed, Sep 14, 2011 at 8:35 AM, Avi Kivity<address@hidden> wrote:
>> > On 09/14/2011 11:27 AM, Alexander Graf wrote:
>> >>
>> >> On 14.09.2011, at 10:24, Jan Kiszka wrote:
>> >>
>> >> > On 2011-09-14 10:22, Avi Kivity wrote:
>> >> >> On 09/14/2011 11:20 AM, Jan Kiszka wrote:
>> >> >>>>
>> >> >>>> Anyway PCI supports the vga region at 0xa0000-0xc0000.
Where
>> >> is it
>> >> >>>> supposed to be mapped?
>> >> >>>
>> >> >>> ...but not all PCI bridges make use of this feature / forward
>> >> legacy
>> >> >>> requests.
>> >> >>>
>> >> >>
>> >> >> Then this should be fixed in the bridge?
>> >> >
>> >> > Yes, it's a PPC bug.
>> >>
>> >> So how does the bridge not forward it then?
>> >>
>> >
>> > I expect that currently vga adds the region to pci_address_space(). We
>> > need
>> > to create a pci_address_space_vga() function that returns a region for
>> > vga
>> > to use. Then add or remove the region to pci_address_space(), within
>> > the
>> > bridge code, depending on whether the bridge forwards vga accesses or
>> > not.
>>
>> Similar treatment should be also needed for VGA IO ports 0x3b0 etc.
>>
>> > (assuming I understood the problem correctly - not sure)
>>
>> I think you did.
>
> Maybe, but the solution can't be right. The bridge can't distinguish
> between a BAR mapped at 0xa0000 and the vga device claiming accesses to
> 0xa0000. Is this what is happening?
If VGA enable is set, the bridge will forward the accesses to VGA
memory or ports to secondary interface. It doesn't care which device
uses them. This is described in VGA support chapter in the PCI bridge
spec.