From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:55210) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U1h2S-0006LH-Ug for qemu-devel@nongnu.org; Sat, 02 Feb 2013 12:38:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U1h2R-00032U-Oo for qemu-devel@nongnu.org; Sat, 02 Feb 2013 12:38:04 -0500 Received: from cantor2.suse.de ([195.135.220.15]:46223 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U1h2R-00032M-FL for qemu-devel@nongnu.org; Sat, 02 Feb 2013 12:38:03 -0500 Message-ID: <510D4EF6.6030702@suse.de> Date: Sat, 02 Feb 2013 18:37:58 +0100 From: =?UTF-8?B?QW5kcmVhcyBGw6RyYmVy?= MIME-Version: 1.0 References: <1359823557-5748-1-git-send-email-afaerber@suse.de> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH for-1.4] libi2c-omap: Fix endianness dependency List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: blauwirbel@gmail.com, dantesu@gmail.com, rth@twiddle.net, agraf@suse.de, qemu-devel@nongnu.org Am 02.02.2013 17:49, schrieb Peter Maydell: > On 2 February 2013 16:45, Andreas F=C3=A4rber wrote: >> From: Andreas F=C3=A4rber >> >> The libqos driver for omap_i2c currently does not work on Big Endian. >> Introduce helpers for reading from and writing to 16-bit armel registe= rs. >> >> This fixes tmp105-test failures on ppc. >> >> Signed-off-by: Andreas F=C3=A4rber >> --- >> tests/libi2c-omap.c | 51 ++++++++++++++++++++++++++++++++----------= --------- >> 1 Datei ge=C3=A4ndert, 32 Zeilen hinzugef=C3=BCgt(+), 19 Zeilen entfe= rnt(-) >> >> diff --git a/tests/libi2c-omap.c b/tests/libi2c-omap.c >> index 9be57e9..7d50ef2 100644 >> --- a/tests/libi2c-omap.c >> +++ b/tests/libi2c-omap.c >> @@ -12,6 +12,7 @@ >> #include >> >> #include "qemu/osdep.h" >> +#include "qemu/bswap.h" >> #include "libqtest.h" >> >> enum OMAPI2CRegisters { >> @@ -48,12 +49,24 @@ typedef struct OMAPI2C { >> } OMAPI2C; >> >> >> +static inline void omap_i2c_read16(uint64_t addr, uint16_t *data) >> +{ >> + memread(addr, data, 2); >> + *data =3D le16_to_cpu(*data); >> +} >> + >> +static inline void omap_i2c_write16(uint64_t addr, uint16_t data) >> +{ >> + data =3D cpu_to_le16(data); >> + memwrite(addr, &data, 2); >> +} >=20 > There's nothing special about the OMAP i2c device that I know of: > shouldn't the test code just be using a generic "write 16 bit value > to memory with appropriate endianness for target CPU" function ? I asked about where to address this issue [1], no concrete answers, and this is the only solution I came up with. libqtest.h has no generic endian-aware memread functions unlike Alex, you or me expected. It reads a sequence of bytes from guest memory and transmits them one-by-one over the text-based qtest protocol. Since they are raw bytes I need to convert them here. tmp105-test itself was transmitting byte arrays, so it did not need changes. Looking into where that annoying "mipid" debug output is coming from is a bit further down on my to-do list for 1.4. I tested this patch to resolve the test breakage on ppc and not to introduce a regression for x86_64. I don't want arm disabled like sparc. Any qtest API remodelling would be 1.5 material now, I guess, and could be hidden inside my helper functions. Andreas [1] http://lists.nongnu.org/archive/html/qemu-devel/2013-01/msg05081.html --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=C3=BCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=C3=B6rffer; HRB 16746 AG N=C3=BC= rnberg