qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: Alexander Graf <agraf@suse.de>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Liu Ping Fan" <pingfank@linux.vnet.ibm.com>,
	"Jan Kiszka" <jan.kiszka@web.de>,
	qemu-devel <qemu-devel@nongnu.org>,
	"Hervé Poussineau" <hpoussin@reactos.org>
Subject: Re: [Qemu-devel] [PATCH v3 11/14] ioport: Switch dispatching to memory core layer
Date: Thu, 11 Jul 2013 14:46:19 +0200	[thread overview]
Message-ID: <51DEA91B.40903@suse.de> (raw)
In-Reply-To: <A4555446-4852-488B-82BE-A250FD5622AF@suse.de>

Am 11.07.2013 14:34, schrieb Alexander Graf:
> 
> On 11.07.2013, at 14:29, Alexander Graf wrote:
> 
>>
>> On 24.06.2013, at 08:07, Jan Kiszka wrote:
>>
>>> On 2013-06-23 22:50, Hervé Poussineau wrote:
>>>> Jan Kiszka a écrit :
>>>>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>>>>
>>>>> The current ioport dispatcher is a complex beast, mostly due to the
>>>>> need to deal with old portio interface users. But we can overcome it
>>>>> without converting all portio users by embedding the required base
>>>>> address of a MemoryRegionPortio access into that data structure. That
>>>>> removes the need to have the additional MemoryRegionIORange structure
>>>>> in the loop on every access.
>>>>>
>>>>> To handle old portio memory ops, we simply install dispatching handlers
>>>>> for portio memory regions when registering them with the memory core.
>>>>> This removes the need for the old_portio field.
>>>>>
>>>>> We can drop the additional aliasing of ioport regions and also the
>>>>> special address space listener. cpu_in and cpu_out now simply call
>>>>> address_space_read/write. And we can concentrate portio handling in a
>>>>> single source file.
>>>>>
>>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>>> ---
>>>>
>>>> ...
>>>>
>>>>> +
>>>>> +static void portio_write(void *opaque, hwaddr addr, uint64_t data,
>>>>> +                         unsigned size)
>>>>> +{
>>>>> +    MemoryRegionPortioList *mrpio = opaque;
>>>>> +    const MemoryRegionPortio *mrp = find_portio(mrpio, addr, size,
>>>>> true);
>>>>> +
>>>>> +    if (mrp) {
>>>>> +        mrp->write(mrpio->portio_opaque, mrp->base + addr, data);
>>>>> +    } else if (size == 2) {
>>>>> +        mrp = find_portio(mrpio, addr, 1, true);
>>>>> +        assert(mrp);
>>>>> +        mrp->write(mrpio->portio_opaque, mrp->base + addr, data & 0xff);
>>>>> +        mrp->write(mrpio->portio_opaque, mrp->base + addr + 1, data
>>>>>>> 8);
>>>>> +    }
>>>>> +}
>>>>> +
>>>>> +static const MemoryRegionOps portio_ops = {
>>>>> +    .read = portio_read,
>>>>> +    .write = portio_write,
>>>>> +    .valid.unaligned = true,
>>>>> +    .impl.unaligned = true,
>>>>> +};
>>>>> +
>>>>
>>>> You need to mark these operations as DEVICE_LITTLE_ENDIAN.
>>>> In portio_write above, you clearly assume that data is in LE format.
>>>
>>> Anything behind PIO is little endian, of course. Will add this.
>>
>> This patch breaks VGA on PPC as it is in master today.
> 
> If I don't mark portio as little endian it works as expected. There's probably someone swapping things twice.

sPAPR has its MemoryRegion marked Little Endian:

http://git.qemu.org/?p=qemu.git;a=blobdiff;f=hw/spapr_pci.c;h=a08ed11166595bdc493065beb64d4ce5b7b0dded;hp=c2c3079d21d5be2647faf85a8c608ac995d2ca62;hb=a3cfa18eb075c7ef78358ca1956fe7b01caa1724;hpb=286d52ebfc0d0d53c2a878e454292fea14bad41b

Possibly we can now apply Hervé's patches on top to remove that hack again?

Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

  reply	other threads:[~2013-07-11 12:46 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-22  6:06 [Qemu-devel] [PATCH v3 00/14] Refactor portio dispatching Jan Kiszka
2013-06-22  6:06 ` [Qemu-devel] [PATCH v3 01/14] adlib: replace register_ioport* Jan Kiszka
2013-06-22  6:06 ` [Qemu-devel] [PATCH v3 02/14] applesmc: " Jan Kiszka
2013-06-22  6:06 ` [Qemu-devel] [PATCH v3 03/14] wdt_ib700: " Jan Kiszka
2013-06-22  6:06 ` [Qemu-devel] [PATCH v3 04/14] i82374: " Jan Kiszka
2013-06-22  6:06 ` [Qemu-devel] [PATCH v3 05/14] prep: " Jan Kiszka
2013-06-22  6:06 ` [Qemu-devel] [PATCH v3 06/14] vt82c686: " Jan Kiszka
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 07/14] Privatize register_ioport_read/write Jan Kiszka
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 08/14] isa: implement isa_is_ioport_assigned via memory_region_find Jan Kiszka
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 09/14] vmware-vga: Accept unaligned I/O accesses Jan Kiszka
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 10/14] xen: Mark fixed platform I/O as unaligned Jan Kiszka
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 11/14] ioport: Switch dispatching to memory core layer Jan Kiszka
2013-06-23 20:50   ` Hervé Poussineau
2013-06-24  6:07     ` Jan Kiszka
2013-07-11 12:29       ` Alexander Graf
2013-07-11 12:34         ` Alexander Graf
2013-07-11 12:46           ` Andreas Färber [this message]
2013-07-11 12:48             ` Alexander Graf
2013-07-11 13:28               ` Alexander Graf
2013-07-11 13:35                 ` Alexander Graf
2013-07-11 22:30                 ` [Qemu-devel] [Qemu-ppc] " Benjamin Herrenschmidt
2013-07-11 22:32                 ` Benjamin Herrenschmidt
2013-07-12  3:18                   ` Alexander Graf
2013-07-12 11:35                     ` Benjamin Herrenschmidt
2013-07-12 17:04                       ` Hervé Poussineau
2013-07-12 19:06                         ` Anthony Liguori
2013-07-12 22:59                           ` Benjamin Herrenschmidt
2013-07-12 22:39                         ` Benjamin Herrenschmidt
2013-07-12 17:49                       ` Anthony Liguori
2013-07-12 18:26                         ` Peter Maydell
2013-07-12 22:50                           ` Benjamin Herrenschmidt
2013-07-12 23:10                             ` Peter Maydell
2013-07-12 23:49                               ` Benjamin Herrenschmidt
2013-07-15 14:01                               ` Anthony Liguori
2013-07-15 14:10                                 ` Peter Maydell
2013-07-15 14:16                                 ` Benjamin Herrenschmidt
2013-07-12 22:44                         ` Benjamin Herrenschmidt
2013-07-13 14:38             ` [Qemu-devel] " Paolo Bonzini
2013-07-13 15:22               ` Anthony Liguori
2013-07-13 18:11                 ` Hervé Poussineau
2013-07-14  6:15                 ` Paolo Bonzini
2013-07-14 13:05                   ` Anthony Liguori
2013-07-14 14:58                     ` Peter Maydell
2013-07-14 15:18                       ` Anthony Liguori
2013-07-14 16:50                         ` Peter Maydell
2013-07-16  7:18                         ` Jan Kiszka
2013-07-16  7:33                           ` Paolo Bonzini
2013-07-16 16:59                             ` Hervé Poussineau
2013-07-16 17:12                               ` Paolo Bonzini
2013-07-12 12:56           ` Anthony Liguori
2013-07-12 14:30             ` Alexander Graf
2013-07-19 11:09         ` [Qemu-devel] BUG: " Alexey Kardashevskiy
2013-07-19 12:49           ` Paolo Bonzini
2013-07-19 15:48             ` Alexey Kardashevskiy
2013-07-20  0:55               ` Alexey Kardashevskiy
2013-07-20  1:11                 ` Alexey Kardashevskiy
2013-07-20 10:11                   ` Paolo Bonzini
2013-07-20 20:53                     ` Edgar E. Iglesias
2013-07-21 15:13                     ` Hervé Poussineau
2013-07-22 10:25                       ` Paolo Bonzini
2013-06-24  8:45     ` [Qemu-devel] [PATCH v4 " Jan Kiszka
2013-07-12 19:36     ` [Qemu-devel] [PATCH v3 " Anthony Liguori
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 12/14] ioport: Remove unused old dispatching services Jan Kiszka
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 13/14] vmport: Disentangle read handler type from portio Jan Kiszka
2013-06-22  6:07 ` [Qemu-devel] [PATCH v3 14/14] ioport: Move portio types to ioport.h Jan Kiszka
2013-06-23 20:45 ` [Qemu-devel] [PATCH v3 00/14] Refactor portio dispatching Hervé Poussineau

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=51DEA91B.40903@suse.de \
    --to=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=hpoussin@reactos.org \
    --cc=jan.kiszka@web.de \
    --cc=pbonzini@redhat.com \
    --cc=pingfank@linux.vnet.ibm.com \
    --cc=qemu-devel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).