From nobody Mon Feb 9 21:00:35 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1492789301308769.0498131813359; Fri, 21 Apr 2017 08:41:41 -0700 (PDT) Received: from localhost ([::1]:60236 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d1agl-0004PC-TN for importer@patchew.org; Fri, 21 Apr 2017 11:41:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49854) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d1aWD-0001SA-0N for qemu-devel@nongnu.org; Fri, 21 Apr 2017 11:30:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d1aW9-0007pL-5e for qemu-devel@nongnu.org; Fri, 21 Apr 2017 11:30:44 -0400 Received: from zero.eik.bme.hu ([2001:738:2001:2001::2001]:33819) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d1aW8-0007oX-RO; Fri, 21 Apr 2017 11:30:41 -0400 Received: from zero.eik.bme.hu (blah.eik.bme.hu [152.66.115.182]) by localhost (Postfix) with SMTP id D09DE7456FE; Fri, 21 Apr 2017 17:30:38 +0200 (CEST) Received: by zero.eik.bme.hu (Postfix, from userid 432) id 2E3C27456D4; Fri, 21 Apr 2017 17:30:38 +0200 (CEST) Message-Id: <8b9605a569f8bf54074e15903620b18cd9967c89.1492787889.git.balaton@eik.bme.hu> In-Reply-To: References: From: BALATON Zoltan Date: Fri, 21 Apr 2017 17:18:09 +0200 To: qemu-devel@nongnu.org, qemu-trivial@nongnu.org X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2001:738:2001:2001::2001 Subject: [Qemu-devel] [PATCH v7 07/13] sm501: Fix device endianness X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Magnus Damm , Aurelien Jarno , David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We only emulate the sysbus device in its default LE mode and PCI is LE as well so specify this for registers and framebuffer memory. Note that though the Linux kernel driver has code which claims to handle both big and little endian, it is obviously bogus for 16 bit and cannot be trusted as a source of information on the framebuffer pixel format. This is our best guess about device behaviour based on the specs and testing with MorphOS that is known to work on real HW. Signed-off-by: BALATON Zoltan Reviewed-by: Peter Maydell Tested-by: Aurelien Jarno --- v2: Split off small clean up to other patch v4: Set serial part to little endian as well v5: Make framebuffer always LE as suggested by Peter Maydell v6: Extended commit message hw/display/sm501.c | 8 ++++---- hw/display/sm501_template.h | 19 ++++++------------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index c92a5fa..a628ef1 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -850,7 +850,7 @@ static const MemoryRegionOps sm501_system_config_ops = =3D { .min_access_size =3D 4, .max_access_size =3D 4, }, - .endianness =3D DEVICE_NATIVE_ENDIAN, + .endianness =3D DEVICE_LITTLE_ENDIAN, }; =20 static uint32_t sm501_palette_read(void *opaque, hwaddr addr) @@ -1086,7 +1086,7 @@ static const MemoryRegionOps sm501_disp_ctrl_ops =3D { .min_access_size =3D 4, .max_access_size =3D 4, }, - .endianness =3D DEVICE_NATIVE_ENDIAN, + .endianness =3D DEVICE_LITTLE_ENDIAN, }; =20 static uint64_t sm501_2d_engine_read(void *opaque, hwaddr addr, @@ -1174,7 +1174,7 @@ static const MemoryRegionOps sm501_2d_engine_ops =3D { .min_access_size =3D 4, .max_access_size =3D 4, }, - .endianness =3D DEVICE_NATIVE_ENDIAN, + .endianness =3D DEVICE_LITTLE_ENDIAN, }; =20 /* draw line functions for all console modes */ @@ -1510,7 +1510,7 @@ static void sm501_realize_sysbus(DeviceState *dev, Er= ror **errp) if (s->chr_state) { serial_mm_init(&s->state.mmio_region, SM501_UART0, 2, NULL, /* TODO : chain irq to IRL */ - 115200, s->chr_state, DEVICE_NATIVE_ENDIAN); + 115200, s->chr_state, DEVICE_LITTLE_ENDIAN); } } =20 diff --git a/hw/display/sm501_template.h b/hw/display/sm501_template.h index 832ee61..54807bd 100644 --- a/hw/display/sm501_template.h +++ b/hw/display/sm501_template.h @@ -64,10 +64,10 @@ static void glue(draw_line16_, PIXEL_NAME)( uint8_t r, g, b; =20 do { - rgb565 =3D lduw_p(s); - r =3D ((rgb565 >> 11) & 0x1f) << 3; - g =3D ((rgb565 >> 5) & 0x3f) << 2; - b =3D ((rgb565 >> 0) & 0x1f) << 3; + rgb565 =3D lduw_le_p(s); + r =3D (rgb565 >> 8) & 0xf8; + g =3D (rgb565 >> 3) & 0xfc; + b =3D (rgb565 << 3) & 0xf8; *(PIXEL_TYPE *)d =3D glue(rgb_to_pixel, PIXEL_NAME)(r, g, b); s +=3D 2; d +=3D BPP; @@ -80,16 +80,9 @@ static void glue(draw_line32_, PIXEL_NAME)( uint8_t r, g, b; =20 do { - ldub_p(s); -#if defined(TARGET_WORDS_BIGENDIAN) - r =3D s[1]; - g =3D s[2]; - b =3D s[3]; -#else - b =3D s[0]; - g =3D s[1]; r =3D s[2]; -#endif + g =3D s[1]; + b =3D s[0]; *(PIXEL_TYPE *)d =3D glue(rgb_to_pixel, PIXEL_NAME)(r, g, b); s +=3D 4; d +=3D BPP; --=20 2.7.4