From: Anthony Liguori <anthony@codemonkey.ws>
To: "Andreas Färber" <afaerber@suse.de>,
"Juan Quintela" <quintela@redhat.com>
Cc: "KVM devel mailing list" <kvm@vger.kernel.org>,
qemu-devel <qemu-devel@nongnu.org>,
"Alexander Graf" <agraf@suse.de>,
"Benjamin Herrenschmidt" <benh@kernel.crashing.org>,
qemu-ppc <qemu-ppc@nongnu.org>,
"Hervé Poussineau" <hpoussin@reactos.org>,
"David Gibson" <david@gibson.dropbear.id.au>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Alon Levy" <alevy@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] KVM call minutes 2013-01-29 - Port I/O
Date: Wed, 30 Jan 2013 07:59:41 -0600 [thread overview]
Message-ID: <87vcae6ab6.fsf@codemonkey.ws> (raw)
In-Reply-To: <5109065B.4060803@suse.de>
Andreas Färber <afaerber@suse.de> writes:
> Am 29.01.2013 16:41, schrieb Juan Quintela:
>> * Portio port to new memory regions?
>> Andreas, could you fill?
>
> MemoryRegion's .old_portio mechanism requires workarounds for VGA on
> ppc, affecting among others the sPAPR PCI host bridge:
> http://git.qemu.org/?p=qemu.git;a=commit;h=a3cfa18eb075c7ef78358ca1956fe7b01caa1724
>
> Patches were posted and merged removing all .old_portio users but one:
> hw/ioport.c:portio_list_add_1(), used by portio_list_add()
>
> hw/isa-bus.c: portio_list_add(piolist, isabus->address_space_io, start);
> hw/qxl.c: portio_list_add(qxl_vga_port_list,
> pci_address_space_io(dev), 0x3b0);
> hw/vga.c: portio_list_add(vga_port_list, address_space_io, 0x3b0);
> hw/vga.c: portio_list_add(vbe_port_list, address_space_io, 0x1ce);
>
> Proposal by hpoussin was to move _list_add() code to ISADevice:
> http://lists.gnu.org/archive/html/qemu-devel/2013-01/msg00508.html
Okay, a couple things here:
There is no such thing as "PIO" as a general concept. What leaves the
CPU and what a bus interprets are totally different things.
An x86 CPU has a MMIO capability that's essentially 65 bits. Whether
the top bit is set determines whether it's a "PIO" transaction or an
"MMIO" transaction. A large chunk of that address space is invalid of
course.
PCI has a 65 bit address space too. The 65th bit determines whether
it's an IO transaction or an MMIO transaction.
For architectures that only have a 64-bit address space, what the PCI
controller typically does is pick a 16-bit window within that address
space to map to a PCI address with the 65th bit set.
Within the PCI bus, transactions are usually routed to devices via
positive decoding. The device lists what address regions it wants to
handle (via BARs) and the PCI bus uses those to determine who to send
transactions to.
There are some exceptions though. Specifically:
1) A chipset will route any non-positively decoded IO transaction (65th
bit set) to a single end point (usually the ISA-bridge). Which one it
chooses is up to the chipset. This is called subtractive decoding
because the PCI bus will wait multiple cycles for that device to
claim the transaction before bouncing it.
2) There are special hacks in most PCI chipsets to route very specific
addresses ranges to certain devices. Namely, legacy VGA IO transactions
go to the first VGA device. Legacy IDE IO transactions go to the first
IDE device. This doesn't need to be programmed in the BARs. It will
just happen.
3) As it turns out, all legacy PIIX3 devices are positively decoded and
sent to the ISA-bridge (because it's faster this way).
Notice the lack of the word "ISA" in all of this other than describing
the PCI class of an end point.
So how should this be modeled?
On x86, the CPU has a pio address space. That can propagate down
through the PCI bus which is what we do today.
On !x86, the PCI controller ought to setup a MemoryRegion for downstream
PIO that devices can use to register on.
We probably need to do something like change the PCI VGA devices to
export a MemoryRegion and allow the PCI controller to device how to
register that as a subregion.
Regards,
Anthony Liguori
>
> Concerns:
> * PCI devices (VGA, QXL) register I/O ports as well
> => above patches add dependency on ISABus to machines
> -> "<benh> no mac ever had one"
> => PCIDevice shouldn't use ISA API with NULL ISADevice
> * Lack of avi: Who decides about memory API these days?
>
> armbru and agraf concluded that moving this into ISA is wrong.
>
> => I will drop the remaining ioport patches from above series.
>
> Suggestions on how to proceed with tackling the issue are welcome.
>
> Regards,
> Andreas
>
> --
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
next prev parent reply other threads:[~2013-01-30 13:59 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-29 15:41 KVM call minutes 2013-01-29 Juan Quintela
2013-01-29 16:01 ` Paolo Bonzini
2013-01-29 16:47 ` Anthony Liguori
2013-01-29 17:36 ` Paolo Bonzini
2013-01-29 20:53 ` Alexander Graf
2013-01-29 21:39 ` Anthony Liguori
2013-01-30 7:02 ` What to do about non-qdevified devices? (was: KVM call minutes 2013-01-29) Markus Armbruster
2013-01-30 8:39 ` What to do about non-qdevified devices? Andreas Färber
2013-01-30 10:36 ` What to do about non-qdevified devices? (was: KVM call minutes 2013-01-29) Peter Maydell
2013-01-30 12:35 ` What to do about non-qdevified devices? Markus Armbruster
2013-01-30 13:44 ` [Qemu-devel] " Andreas Färber
2013-01-30 16:58 ` Paolo Bonzini
2013-01-30 17:14 ` [Qemu-devel] " Andreas Färber
2013-01-31 18:48 ` Markus Armbruster
2013-01-30 14:37 ` [Qemu-devel] " Anthony Liguori
2013-01-30 11:39 ` [Qemu-devel] KVM call minutes 2013-01-29 - Port I/O Andreas Färber
2013-01-30 11:48 ` Peter Maydell
2013-01-30 12:31 ` Michael S. Tsirkin
2013-01-30 13:24 ` [Qemu-devel] " Anthony Liguori
2013-01-30 14:11 ` Michael S. Tsirkin
2013-01-30 12:32 ` Alexander Graf
2013-01-30 13:09 ` Markus Armbruster
2013-01-30 15:08 ` [Qemu-devel] " Anthony Liguori
2013-01-30 17:55 ` Andreas Färber
2013-01-30 20:20 ` Michael S. Tsirkin
2013-01-30 20:33 ` [Qemu-devel] " Andreas Färber
2013-01-30 20:55 ` Michael S. Tsirkin
2013-01-30 13:59 ` Anthony Liguori [this message]
2013-01-30 21:05 ` Benjamin Herrenschmidt
2013-01-30 21:39 ` [Qemu-devel] " Anthony Liguori
2013-01-30 21:54 ` Benjamin Herrenschmidt
2013-01-30 22:20 ` Michael S. Tsirkin
2013-01-30 22:32 ` Benjamin Herrenschmidt
2013-01-30 22:49 ` Michael S. Tsirkin
2013-01-30 23:02 ` Benjamin Herrenschmidt
2013-01-30 23:28 ` Alex Williamson
2013-01-31 10:49 ` Michael S. Tsirkin
2013-01-31 16:34 ` Alex Williamson
2013-01-31 21:11 ` Michael S. Tsirkin
2013-01-31 21:21 ` Alex Williamson
2013-01-31 22:20 ` Michael S. Tsirkin
2013-01-31 21:44 ` Benjamin Herrenschmidt
2013-01-31 22:37 ` Michael S. Tsirkin
2013-01-31 23:25 ` Alex Williamson
2013-01-31 21:22 ` Benjamin Herrenschmidt
2013-01-31 22:28 ` Michael S. Tsirkin
2013-01-30 15:45 ` [Qemu-devel] " Gerd Hoffmann
2013-01-30 16:33 ` Anthony Liguori
2013-01-30 16:54 ` Andreas Färber
2013-01-30 17:29 ` [Qemu-devel] " Anthony Liguori
2013-01-30 20:08 ` Michael S. Tsirkin
2013-01-30 20:19 ` Peter Maydell
2013-01-30 20:19 ` [Qemu-devel] " Andreas Färber
2013-01-30 21:07 ` Benjamin Herrenschmidt
2013-01-30 21:42 ` [Qemu-devel] " Anthony Liguori
2013-01-30 17:08 ` Paolo Bonzini
2013-01-30 21:08 ` 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=87vcae6ab6.fsf@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=alevy@redhat.com \
--cc=benh@kernel.crashing.org \
--cc=david@gibson.dropbear.id.au \
--cc=hpoussin@reactos.org \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=quintela@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox