From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
To: Alexander Graf <agraf@suse.de>
Cc: "Hervé Poussineau" <hpoussin@reactos.org>,
qemu-ppc <qemu-ppc@nongnu.org>,
"QEMU Developers" <qemu-devel@nongnu.org>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH] PPC: fix PCI configuration space MemoryRegions for grackle/uninorth
Date: Fri, 08 Nov 2013 22:18:34 +0000 [thread overview]
Message-ID: <527D633A.5020801@ilande.co.uk> (raw)
In-Reply-To: <155E836F-E5EF-4F8F-AF5B-B8E0EC35553D@suse.de>
[-- Attachment #1: Type: text/plain, Size: 2473 bytes --]
On 08/11/13 03:20, Alexander Graf wrote:
> On 11.10.2013, at 12:53, Mark Cave-Ayland<mark.cave-ayland@ilande.co.uk> wrote:
>
>> OpenBIOS prior to SVN r1225 had a horrible bug when accessing PCI
>> configuration space for PPC Mac architectures - instead of writing the PCI
>> configuration data value to the data register address, it would instead write
>> it to the data register address plus the PCI configuration address.
>>
>> For this reason, the MemoryRegions for the PCI data register for
>> grackle/uninorth were extremely large in order to accomodate the entire PCI
>> configuration space being accessed during OpenBIOS PCI bus enumeration. Now
>> that the OpenBIOS images have been updated, reduce the MemoryRegion sizes down
>> to a single 32-bit register as intended.
>>
>> Signed-off-by: Mark Cave-Ayland<mark.cave-ayland@ilande.co.uk>
>> CC: Hervé Poussineau<hpoussin@reactos.org>
>> CC: Andreas Färber<afaerber@suse.de>
>> CC: Alexander Graf<agraf@suse.de>
>
> With this patch applied, mac99 emulation seems to break:
>
> http://award.ath.cx/results/288-alex/x86/kvm.qemu-git-tcg.ppc-debian.mac99-G4.etch.e1000.reboot/debug/serial-vm1.log
>
>
> Alex
Hi Alex,
Thanks for the heads-up - with the information above I was able to
reproduce this fairly easily. I had look at some of the uninorth
drivers, and while it's not particularly apparent from Linux that the
PCI configuration data is accessed via MMIO rather than ioport access,
FreeBSD seems to suggest that this is the case:
http://code.google.com/p/freebsd-head/source/browse/sys/powerpc/powermac/uninorth.c?spec=svnc6989e24706228678e454517dad4ad465a36e556&r=c6989e24706228678e454517dad4ad465a36e556#274.
The key is that the QEMU uninorth host bridge contains a hack to allow
PCI configuration mechanism #1 as used by OpenBIOS to work at all (see
unin_get_config_reg() in hw/pci-host/uninorth.c) which is why I didn't
notice it in my OpenBIOS boot tests; and in fact, the name of the
uninorth PCI configuration data MemoryRegions have a "-data" rather than
a "-idx" suffix is also a big clue.
Hence please find a revised version of the patch which is unaltered for
grackle, and only changes the MemoryRegion size for the PCI
configuration address register for uninorth so that the PCI
configuration data space is still accessible using MMIO. This resolves
the issue for me, so if you're satisifed that it works for you then I'll
post a revised version to the list.
ATB,
Mark.
[-- Attachment #2: qemu-ppc-pci-fix.patch --]
[-- Type: text/x-diff, Size: 2727 bytes --]
diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c
index 4991ec4..d70c519 100644
--- a/hw/pci-host/grackle.c
+++ b/hw/pci-host/grackle.c
@@ -105,9 +105,9 @@ static int pci_grackle_init_device(SysBusDevice *dev)
phb = PCI_HOST_BRIDGE(dev);
memory_region_init_io(&phb->conf_mem, OBJECT(dev), &pci_host_conf_le_ops,
- dev, "pci-conf-idx", 0x1000);
+ dev, "pci-conf-idx", 4);
memory_region_init_io(&phb->data_mem, OBJECT(dev), &pci_host_data_le_ops,
- dev, "pci-data-idx", 0x1000);
+ dev, "pci-data-idx", 4);
sysbus_init_mmio(dev, &phb->conf_mem);
sysbus_init_mmio(dev, &phb->data_mem);
diff --git a/hw/pci-host/uninorth.c b/hw/pci-host/uninorth.c
index 91530cd..2238646 100644
--- a/hw/pci-host/uninorth.c
+++ b/hw/pci-host/uninorth.c
@@ -153,7 +153,7 @@ static int pci_unin_main_init_device(SysBusDevice *dev)
h = PCI_HOST_BRIDGE(dev);
memory_region_init_io(&h->conf_mem, OBJECT(h), &pci_host_conf_le_ops,
- dev, "pci-conf-idx", 0x1000);
+ dev, "pci-conf-idx", 4);
memory_region_init_io(&h->data_mem, OBJECT(h), &unin_data_ops, dev,
"pci-conf-data", 0x1000);
sysbus_init_mmio(dev, &h->conf_mem);
@@ -171,7 +171,7 @@ static int pci_u3_agp_init_device(SysBusDevice *dev)
h = PCI_HOST_BRIDGE(dev);
memory_region_init_io(&h->conf_mem, OBJECT(h), &pci_host_conf_le_ops,
- dev, "pci-conf-idx", 0x1000);
+ dev, "pci-conf-idx", 4);
memory_region_init_io(&h->data_mem, OBJECT(h), &unin_data_ops, dev,
"pci-conf-data", 0x1000);
sysbus_init_mmio(dev, &h->conf_mem);
@@ -188,7 +188,7 @@ static int pci_unin_agp_init_device(SysBusDevice *dev)
h = PCI_HOST_BRIDGE(dev);
memory_region_init_io(&h->conf_mem, OBJECT(h), &pci_host_conf_le_ops,
- dev, "pci-conf-idx", 0x1000);
+ dev, "pci-conf-idx", 4);
memory_region_init_io(&h->data_mem, OBJECT(h), &pci_host_data_le_ops,
dev, "pci-conf-data", 0x1000);
sysbus_init_mmio(dev, &h->conf_mem);
@@ -204,7 +204,7 @@ static int pci_unin_internal_init_device(SysBusDevice *dev)
h = PCI_HOST_BRIDGE(dev);
memory_region_init_io(&h->conf_mem, OBJECT(h), &pci_host_conf_le_ops,
- dev, "pci-conf-idx", 0x1000);
+ dev, "pci-conf-idx", 4);
memory_region_init_io(&h->data_mem, OBJECT(h), &pci_host_data_le_ops,
dev, "pci-conf-data", 0x1000);
sysbus_init_mmio(dev, &h->conf_mem);
next prev parent reply other threads:[~2013-11-08 22:31 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-11 10:53 [Qemu-devel] [PATCH] PPC: fix PCI configuration space MemoryRegions for grackle/uninorth Mark Cave-Ayland
2013-10-11 18:43 ` Hervé Poussineau
2013-11-08 3:20 ` Alexander Graf
2013-11-08 22:18 ` Mark Cave-Ayland [this message]
2013-12-18 12:34 ` Alexander Graf
2013-12-18 21:04 ` Benjamin Herrenschmidt
2013-12-18 21:24 ` Alexander Graf
2013-12-18 22:04 ` Benjamin Herrenschmidt
2013-12-18 22:07 ` Alexander Graf
2013-12-18 22:10 ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2013-12-19 3:49 ` [Qemu-devel] " Benjamin Herrenschmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=527D633A.5020801@ilande.co.uk \
--to=mark.cave-ayland@ilande.co.uk \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=hpoussin@reactos.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.