From nobody Tue Nov 4 21:46:14 2025 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.zohomail.com; dkim=fail; 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 1531123058736448.81163254656076; Mon, 9 Jul 2018 00:57:38 -0700 (PDT) Received: from localhost ([::1]:39786 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcR3B-0006tT-IN for importer@patchew.org; Mon, 09 Jul 2018 03:57:37 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44246) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcQq9-00053a-8C for qemu-devel@nongnu.org; Mon, 09 Jul 2018 03:44:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fcQq7-0002Dv-Qv for qemu-devel@nongnu.org; Mon, 09 Jul 2018 03:44:09 -0400 Received: from ozlabs.org ([203.11.71.1]:55635) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fcQq7-0002B8-6I; Mon, 09 Jul 2018 03:44:07 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 41PHQS6x9Jz9s5R; Mon, 9 Jul 2018 17:44:00 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1531122240; bh=XunpEvgt5s8r5KiLcwi0V+OsjPsa9DcOE/nc/aADvpo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NfHrHWt0S9nAXfsRpwb50lNB02cgVKDe4YmumWaDnA0McW+Sly342u4yTWLOyW9ux DAh+97H68hZLvWNRZfqkg8fn+ZP2dzIQ76bZ/LA8j+f4qY2mBpth8SA6oTt/jcWcAL k/jeWbIRZ4PU4wDcQ/NnkdYcNrubRlfbWW5nb39c= From: David Gibson To: peter.maydell@linaro.org Date: Mon, 9 Jul 2018 17:43:42 +1000 Message-Id: <20180709074350.27086-9-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180709074350.27086-1-david@gibson.dropbear.id.au> References: <20180709074350.27086-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 Subject: [Qemu-devel] [PULL 08/16] sm501: Fix support for non-zero frame buffer start address 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: Sebastian Bauer , qemu-devel@nongnu.org, groug@kaod.org, qemu-ppc@nongnu.org, clg@kaod.org, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan Display updates and drawing hardware cursor did not work when frame buffer address was non-zero. Fix this by taking the frame buffer address into account in these cases. This fixes screen dragging on AmigaOS. Based on patch by Sebastian Bauer. Signed-off-by: Sebastian Bauer Signed-off-by: BALATON Zoltan Signed-off-by: David Gibson --- hw/display/sm501.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index ebd139006e..10ee008eb2 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -586,6 +586,11 @@ static uint32_t get_local_mem_size_index(uint32_t size) return index; } =20 +static ram_addr_t get_fb_addr(SM501State *s, int crt) +{ + return (crt ? s->dc_crt_fb_addr : s->dc_panel_fb_addr) & 0x3FFFFF0; +} + static inline int get_width(SM501State *s, int crt) { int width =3D crt ? s->dc_crt_h_total : s->dc_panel_h_total; @@ -688,7 +693,8 @@ static inline void hwc_invalidate(SM501State *s, int cr= t) start *=3D w * bpp; end *=3D w * bpp; =20 - memory_region_set_dirty(&s->local_mem_region, start, end - start); + memory_region_set_dirty(&s->local_mem_region, + get_fb_addr(s, crt) + start, end - start); } =20 static void sm501_2d_operation(SM501State *s) @@ -1213,6 +1219,9 @@ static void sm501_disp_ctrl_write(void *opaque, hwadd= r addr, break; case SM501_DC_PANEL_FB_ADDR: s->dc_panel_fb_addr =3D value & 0x8FFFFFF0; + if (value & 0x8000000) { + qemu_log_mask(LOG_UNIMP, "Panel external memory not supported\= n"); + } break; case SM501_DC_PANEL_FB_OFFSET: s->dc_panel_fb_offset =3D value & 0x3FF03FF0; @@ -1273,6 +1282,9 @@ static void sm501_disp_ctrl_write(void *opaque, hwadd= r addr, break; case SM501_DC_CRT_FB_ADDR: s->dc_crt_fb_addr =3D value & 0x8FFFFFF0; + if (value & 0x8000000) { + qemu_log_mask(LOG_UNIMP, "CRT external memory not supported\n"= ); + } break; case SM501_DC_CRT_FB_OFFSET: s->dc_crt_fb_offset =3D value & 0x3FF03FF0; @@ -1615,7 +1627,7 @@ static void sm501_update_display(void *opaque) draw_hwc_line_func *draw_hwc_line =3D NULL; int full_update =3D 0; int y_start =3D -1; - ram_addr_t offset =3D 0; + ram_addr_t offset; uint32_t *palette; uint8_t hwc_palette[3 * 3]; uint8_t *hwc_src =3D NULL; @@ -1672,9 +1684,10 @@ static void sm501_update_display(void *opaque) } =20 /* draw each line according to conditions */ + offset =3D get_fb_addr(s, crt); snap =3D memory_region_snapshot_and_clear_dirty(&s->local_mem_region, offset, width * height * src_bpp, DIRTY_MEMORY_VGA); - for (y =3D 0, offset =3D 0; y < height; y++, offset +=3D width * src_b= pp) { + for (y =3D 0; y < height; y++, offset +=3D width * src_bpp) { int update, update_hwc; =20 /* check if hardware cursor is enabled and we're within its range = */ --=20 2.17.1