j
: Next unread message k
: Previous unread message j a
: Jump to all threads
j l
: Jump to MailingList overview
On 12/05/12 10:11, Blue Swirl wrote:
Agreed. On current SPARC, the only non-zero Range on PCI is for 64-bit memory. For the memory ranges we see:
0200.0000 0000.0000 0000.0000 8000.8090 0000.0000 0000.0007 0000.0000 0300.0000 0000.0001 0000.0000 8000.8091 0000.0000 0000.0007 0000.0000
My recollection is that memory space PCI RA (real address rather than physical address, because now we're behind a hypervisor) ranges from 8000.8090.0000.0000 through 8000.8097.FFFF.FFFF - which would match your guess that the parent_base needs to be hacked if 0800.0000 is going to be the BAR and is going to represent 1ff.0800.0000.
So, why does OpenBios have 0100.0000 as a child base in the first place?
It's to avoid VGA legacy mapping at 0xa0000. If I change hwdefs.pci.pci_mem_base in arch/sparc64/openbios.c to 0, OpenBIOS will crash during VGA init. Previously this worked because the PCI devices were mapped somewhat randomly and by chance, VGA legacy low mem area was avoided.
I think the correct fix is to make QEMU VGA device disable the legacy mapping unless explicitly enabled. Alternatively the child base arithmetic could be fixed in OpenBIOS like proposed by Jakub.
Did a patch ever come out of this discussion in the end?
ATB,
Mark.
On Mon, May 14, 2012 at 3:07 PM, Mark Cave-Ayland mark.cave-ayland@ilande.co.uk wrote:
On 12/05/12 10:11, Blue Swirl wrote:
Agreed. On current SPARC, the only non-zero Range on PCI is for 64-bit memory. For the memory ranges we see:
0200.0000 0000.0000 0000.0000 8000.8090 0000.0000 0000.0007 0000.0000 0300.0000 0000.0001 0000.0000 8000.8091 0000.0000 0000.0007 0000.0000
My recollection is that memory space PCI RA (real address rather than physical address, because now we're behind a hypervisor) ranges from 8000.8090.0000.0000 through 8000.8097.FFFF.FFFF - which would match your guess that the parent_base needs to be hacked if 0800.0000 is going to be the BAR and is going to represent 1ff.0800.0000.
So, why does OpenBios have 0100.0000 as a child base in the first place?
It's to avoid VGA legacy mapping at 0xa0000. If I change hwdefs.pci.pci_mem_base in arch/sparc64/openbios.c to 0, OpenBIOS will crash during VGA init. Previously this worked because the PCI devices were mapped somewhat randomly and by chance, VGA legacy low mem area was avoided.
I think the correct fix is to make QEMU VGA device disable the legacy mapping unless explicitly enabled. Alternatively the child base arithmetic could be fixed in OpenBIOS like proposed by Jakub.
Did a patch ever come out of this discussion in the end?
No. :-) Feel free to fix it, unless Blue prefers fixing it himself...