qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: BALATON Zoltan <balaton@eik.bme.hu>
Cc: "Philippe Mathieu-Daudé" <philmd@linaro.org>,
	qemu-devel@nongnu.org, qemu-riscv@nongnu.org,
	qemu-ppc@nongnu.org,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
	"Alistair Francis" <alistair@alistair23.me>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Markus Armbruster" <armbru@redhat.com>,
	qemu-arm@nongnu.org, "Daniel P. Berrangé" <berrange@redhat.com>
Subject: Re: [PATCH v6 01/11] hw/qdev-properties-system: Introduce EndianMode QAPI enum
Date: Thu, 13 Feb 2025 15:33:43 +0100	[thread overview]
Message-ID: <babd30e7-0434-436a-852b-7ff1599d3944@redhat.com> (raw)
In-Reply-To: <9e121e62-8e6e-61d6-dbfb-4dfda469acc5@eik.bme.hu>

On 13/02/2025 14.59, BALATON Zoltan wrote:
> On Thu, 13 Feb 2025, Thomas Huth wrote:
>> On 12/02/2025 23.34, BALATON Zoltan wrote:
[...]
>>> So then can the behaviour of NATIVE_ENDIAN be changed to look at the 
>>> machine endianness instead of replacing it with a constant?
>>
>> No, that does not work. First, the machine knows about its devices, but a 
>> device should not know about the wiring of the global machine (just like 
>> in real life).
> 
> That means all devices should be either big or little endian and there 
> should be no native endian ones. Why do we have those then?

Some device can indeed be either big or little endian - think of devices 
that are synthesized in an FPGA for example. But in most cases, it rather 
depends on the bus wiring. Anyway, we need a config knob to allow either the 
one or the other endianness for certain devices.

> That's why this 
> endianness property should either be removed from ops and only attached to 
> it when added to a machine if needed or kept to show which machines it can 
> be attached to: only big, little or both endian which is what it seems to be 
> doing now.

Again, devices should not know about machines, not the other way round. So 
the device should offer a config switch (property) and the machine should 
set it to the value that it needs.

>> Second, imagine a board with e.g. a big endian main CPU and a little 
>> endian service processor - how should a device know the right endianness 
>> here?
> 
> How would that work with this series? So the proposed solution is to double 
> the devices now marked as NATIVE_ENDIAN to have a big and a little endian 
> variant for them so the board can choose?

This is not doubling the devices. It just introduces a config property to 
let the machine switch the endianness.

> That does not exist in real as you 
> wrote, there's only one device so then this is probably not the right way to 
> model it.

Some devices can exist in both, big and little endian variants. We could of 
course create two devices for this, but that's nonsense if it can simply be 
handled by a property instead.

>>> Or would that be too much overhead? If always looking up the endianness 
>>> is not wanted could the ops declaration keep NATIVE_ENDIAN 
>>
>> IMHO we should get rid of NATIVE_ENDIAN completely since there is no 
>> "native" endian in multi-CPU boards.
> 
> If we say NATIVE_ENDIAN means that the device can be attached to either big 
> or little endian machine then we can keep this constant but when adding the 
> ops to a memory region the board has to then decide which endianness it is 
> and replace it with either big or little. Then we don't need two versions of 
> the same device and NATIVE_ENDIAN means that the device can be used in both 
> machines.

Well, it's currently the devices that are calling memory_region_init_io().
And since memory_region_init_io() does not copy the MemoryRegionOps struct,
we need two implementations right now for this, one for big and one for 
little endian. So I think Philippe's series here is fine. But feel free to 
suggest clean up patches on top if you think that the 
memory_region_init_io() needs to be handled differently in QEMU everywhere.

  Thomas



  parent reply	other threads:[~2025-02-13 14:34 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-12 11:24 [PATCH v6 00/11] hw/microblaze: Allow running cross-endian vCPUs Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 01/11] hw/qdev-properties-system: Introduce EndianMode QAPI enum Philippe Mathieu-Daudé
2025-02-12 11:37   ` Thomas Huth
2025-02-12 11:43     ` Philippe Mathieu-Daudé
2025-02-12 12:02       ` Philippe Mathieu-Daudé
2025-02-12 12:11         ` Daniel P. Berrangé
2025-02-12 12:56       ` BALATON Zoltan
2025-02-12 13:53         ` Philippe Mathieu-Daudé
2025-02-12 14:03           ` Philippe Mathieu-Daudé
2025-02-12 16:23             ` BALATON Zoltan
2025-02-12 18:17               ` Philippe Mathieu-Daudé
2025-02-12 22:34                 ` BALATON Zoltan
2025-02-13  7:07                   ` Thomas Huth
2025-02-13 13:59                     ` BALATON Zoltan
2025-02-13 14:24                       ` Philippe Mathieu-Daudé
2025-02-13 14:33                       ` Thomas Huth [this message]
2025-02-13 14:56                         ` BALATON Zoltan
2025-02-12 11:24 ` [PATCH v6 02/11] hw/intc/xilinx_intc: Make device endianness configurable Philippe Mathieu-Daudé
2025-02-12 11:42   ` Thomas Huth
2025-02-12 11:44     ` Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 03/11] hw/net/xilinx_ethlite: " Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 04/11] hw/timer/xilinx_timer: " Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 05/11] hw/char/xilinx_uartlite: " Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 06/11] hw/ssi/xilinx_spi: " Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 07/11] tests/functional: Avoid using www.qemu-advent-calendar.org URL Philippe Mathieu-Daudé
2025-02-12 11:49   ` Thomas Huth
2025-02-12 11:53     ` Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 08/11] tests/functional: Explicit endianness of microblaze assets Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 09/11] tests/functional: Allow microblaze tests to take a machine name argument Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 10/11] tests/functional: Remove sleep() kludges from microblaze tests Philippe Mathieu-Daudé
2025-02-12 11:24 ` [PATCH v6 11/11] tests/functional: Have microblaze tests inherit common parent class Philippe Mathieu-Daudé
2025-02-12 11:46   ` Thomas Huth
2025-02-12 11:55     ` Philippe Mathieu-Daudé

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=babd30e7-0434-436a-852b-7ff1599d3944@redhat.com \
    --to=thuth@redhat.com \
    --cc=alistair@alistair23.me \
    --cc=armbru@redhat.com \
    --cc=balaton@eik.bme.hu \
    --cc=berrange@redhat.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=richard.henderson@linaro.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).