From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477839; cv=none; d=zohomail.com; s=zohoarc; b=BrtGCFtirpJs6RTu30elU426mciuj1LJTCj6Ohuwee/2/gDmdwqt3GyyAgTrbx0YXTJFTUkQY7bLn3ltmPB5HmEK0lz1T+uvi49lEKvEShBDDK45mfxltieJkjUwZoGYaL5+3tEHaszOQw3LfpGPZ5PpKBx+MuqIb7f8iNGRkz4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477839; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/a5H+DzHLCwmJeKTjrfie6KlbRxqPnhrnXfZ6kYU3OM=; b=YbcvKecCPY/NuSX3L0d2SskJsyx5+4pyDcy1ryeWpSJS/75epoPxf9LvKR/udkUvXztWtYYsMvMrMJgWCVEzWA6aInBW5TVnr04m0iu32rDjnYHD/P0/uOyXFAcnWcW5YQbfaG3HY9o5sOCc7yj44s7VkpoFcVxxspfwi1jqpE0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477839464321.88234550994855; Sun, 19 Jul 2026 09:17:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBA-0007ia-CD; Sun, 19 Jul 2026 12:15:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB8-0007hl-38 for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:46 -0400 Received: from fout-b3-smtp.messagingengine.com ([202.12.124.146]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB6-0002Oy-4H for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:45 -0400 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.stl.internal (Postfix) with ESMTP id C731F1D00077; Sun, 19 Jul 2026 12:15:41 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Sun, 19 Jul 2026 12:15:41 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:41 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 7f044711; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477741; x= 1784564141; bh=/a5H+DzHLCwmJeKTjrfie6KlbRxqPnhrnXfZ6kYU3OM=; b=K AFkSPlC2ryqymvjBSfPO591xaBHHj5prcBY6mkcdlYXLw8l5UW5dCSqm0I/T4M56 QYCExaCJBI3INht+hqRY0hpUxr2D2YUPbuqQhFyLn5bxgECsKXB2frX3xQtNLE1c u6rpeTOzDyP4IW8aAtAOmmrbDJ63G7hihfuSlXa/GQzl4HKQqd0k7f7VmzXa5zF0 k8Gcmvpgum5okYNrzeq7lcki9OEomkj/5cgphzC5lj5X7dUaB1jY6sKWm8JQLvQH DnSWGZEeT+HGQHRifeuwvKpOTAYKJKDg6CvVyBeyqUiK9ZsiLOB5OfFGT5z3yNaL LiSu0wt5v1ShPh+CTfCQQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477741; x=1784564141; bh=/ a5H+DzHLCwmJeKTjrfie6KlbRxqPnhrnXfZ6kYU3OM=; b=pCZ1Pd0v27+bkFqpT geIyPqiXMjQq3He73d43NnGZrZt7K42+VJHOihXAq7Y+Rfjtz4i95Yqkai0x0+lK PhgkS4pUlRfhD9+7lkdCGmGXeOSwQ90o5gHbj5RffNmqPrhDqbaWkgYi+uxyNR6g bG7RtUkBkn7Q08efl3pBhYjNZAAdqXzROAgj+BTkCBywXn+LgDmJ/dG/LvCyZzUD tHeji6aHrSaLENpv3qbZedSKvzas/btuOp7HJuwXa8ZmwEh/DKfH6MQRmIXLzwx0 UBObHAaLaS/Dnv9aV/G3u4kJLap//k5hXLfRBPB8mXQLma1C8jgzImWssfD7L48b IZteQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFX22WwMbS2sW99eCB50G1QKT6MSqCpx6iK5itrq8JxZaP0521f6QSaZn8xZ08MPO fOwSNa6WDSeLTJNQVc/fxMSGvDLkf+yg/0G9Q09ZIOYGIXIBd2hVswgLVRGFoWlNQkKsDF GdNkKsfijsKMESGF+IJc7XNHY6Tof4qnJ8h5MKF7zpjgYI3Er1oT6Sc3p82wEBVA4tVY6K sm0munSEzPQOSr/py3N0SGFxIhaHx4yY0PMKs1GFt63biT3SGPXDCwnyEFOs/p40onWKAs 7IByVaX4T1Xvhqors54F3a+bmhyr13Lneen+jWeanFhb1s0umv08sceX1eK90gcHhjDIXU xYYNKlv01EdCAdHWvDf+OP7N1yMF/2bQruidrRtJyHM6Y7uuTUZkKVNJTgkYRsBvVbq/MH kV4c1CX5CpNu1bO+B77gZQSo/Pon+WKByJiY7d6WcScmj1l81rPtkNX55L6eYKInZT+5lf 56z/FWyEeqzYpelLVS6Iq83WG7gg6Z6dS6bIamHKGU5QrIpmnWABtlZMUpgcZ6CFVhI2w4 b7E22wIcE36bBHnvjXBxuUv2Or85YoUB9NF/OREGJQOP+gSwyjaIBLz0zNokqfd9yyEq2X d+c/QZhLs/emBJ5JiV4bL6nTJByOMG97E7zOkOt6pHz4ulwEeEgvsKpNs8/g X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 1/9] ati-vga: r100 scissor dimensions are exclusive Date: Sun, 19 Jul 2026 12:15:28 -0400 Message-ID: <20260719161536.774061-2-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.146; envelope-from=chad@jablonski.xyz; helo=fout-b3-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477840797158500 Content-Type: text/plain; charset="utf-8" The sc_right and sc_bottom registers are inclusive for the r128 but exclusive for the r100. Tested and validated against a Rage 128 Pro Ultra (PCI 1002:5446) and Radeon QY (RV100) (PCI 1002:5159). Signed-off-by: Chad Jablonski --- hw/display/ati_2d.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c index 7a4a115aee..3b27917bf4 100644 --- a/hw/display/ati_2d.c +++ b/hw/display/ati_2d.c @@ -106,8 +106,14 @@ static void setup_2d_blt_ctx(ATIVGAState *s, ATI2DCtx = *ctx) ctx->frgd_clr =3D s->regs.dp_brush_frgd_clr; ctx->dst_offset =3D s->regs.dst_offset; =20 - ctx->scissor.width =3D s->regs.sc_right - s->regs.sc_left + 1; - ctx->scissor.height =3D s->regs.sc_bottom - s->regs.sc_top + 1; + if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { + /* r128 scissor values are inclusive */ + ctx->scissor.width =3D s->regs.sc_right - s->regs.sc_left + 1; + ctx->scissor.height =3D s->regs.sc_bottom - s->regs.sc_top + 1; + } else { + ctx->scissor.width =3D s->regs.sc_right - s->regs.sc_left; + ctx->scissor.height =3D s->regs.sc_bottom - s->regs.sc_top; + } ctx->scissor.x =3D s->regs.sc_left; ctx->scissor.y =3D s->regs.sc_top; =20 --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477796; cv=none; d=zohomail.com; s=zohoarc; b=MnJoN+NZQvzZceE//BW+ymCnwomrXtKyttTcbDSQCBgJ+q+5QZ3lN/AkCsTUQaeOv4A8Ni9yzFEt5TDpjfAhRFesSljKlOt5bee+HEGduFzIUbYcHYfybLB3St2C0AeItHuzOLvd/JiSmGrcPqU1O3dvfxeRA0t0of8VH7aSW8k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477796; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=s0CQSii4/ZJ3c1go+L4vlGB9APv9y1mACEzske6WaXM=; b=Ddh8ah2CWz996kwizKq2tShWtZc7PaoMgmNjP6zxN4lsrYJZKHj2WsWAhJxbyeoz1GNGqpuo6KqVCOoj3u66+j5COQNRffcJj2J7lSbKpLHbHDmaX9qp2V9sOJk34ZGjtxdOvNrfJ3wlgya0ewLWdxlSTK+nmQODSa4NAYkRkMs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477795947839.4603424070442; Sun, 19 Jul 2026 09:16:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBB-0007jV-On; Sun, 19 Jul 2026 12:15:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB9-0007iK-N6 for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from fhigh-b4-smtp.messagingengine.com ([202.12.124.155]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB7-0002P5-4u for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.stl.internal (Postfix) with ESMTP id 7B6F47A0082; Sun, 19 Jul 2026 12:15:42 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Sun, 19 Jul 2026 12:15:42 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:41 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id cdbe9dce; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477742; x= 1784564142; bh=s0CQSii4/ZJ3c1go+L4vlGB9APv9y1mACEzske6WaXM=; b=W UYxT6TYtQVyBS8MPphA5pKumCAvp/mZxn6aG8849lxtoJAe04h8v2iHEx6J2sFNn 2lFd/AAC1FXyDGCogpoZyzXZXBB/raVwepvOc1DjiFr3ioGTLUcMfoO1DNzxAl09 TIANiKeE3BY0bhgoza0V/Cal3TrgKuovlKn1U67UHY9WTKe4Z6O4GxmvBfd/yiiU NdhudeBp3FeJC0w2PxFNprkCbQRDOaT2Y+OVy0gOx6V1rHujKGcefRWUBUUY3gmi g6YTzDoJJktC/0oyuxYtzhyvX2RJY6FINAq1LpZEgFQqtC5zOXoXvBYdLtXRmABz /Fxm61V/W7nLfdNJkpjfg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477742; x=1784564142; bh=s 0CQSii4/ZJ3c1go+L4vlGB9APv9y1mACEzske6WaXM=; b=rBW+kzNS8Mv6jG0c+ VPeSaBdUz0jVmQfoA6qV6534d9uzlQZdZRwNG9CFZYlFXKrbYsTKIzYXSz3Ay7ME /3qvh7Wi5QNukOWQ4joIsrtkHr6Gz1s+XDrPYr+sqcphE+sWBRNZcsdlGcltF3Dm Lc+U7O5L3Xf81ecqBHzSP+FTzgFkE52ntCR0XulXT1iF7Z50KR744PWJHh8/JrJM yJNZbPzlh8kahP/8QMzuKgod4RtSGQ3fZrWIkXHIPhcO+0OZg8lwWm5nIV79Rd+i VE+aMKBwMV9jxPdLzYbtr4zpGlqYAvjsFHa7v7xiAfwEZxOSnBeXJTjdkx95knuZ UZXjw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF2M8/td2x4uX0quVUht6oTuzlOtlV8s/xAIpba0AK3yD3yx/edKpxJCFjEj6RVFW tZylprZe+5ZeJQcZMYpgGdlyYr4p2Wtx0Pp9uwz7oCUjsZcueHidxeZqaoOMQW+WpAqS8o 36DmnFTRazz4ZZYy3JE1PDUxJVJ6kQybtpH5PX9NmR/So+sfpFNwXUOFOf+enlYoThGfBq /4lv/qCY4C+TNW42jFI8nDAtYiw5rFjgpjUCC0EAiSX1/r68t1adlaGfPCZ9kDzHhyIsa/ zjm0Fxwf9RtbwH8g1DU4zTrN01nzO9FlVCZHr0GOq/w+LWaLMT81m5uJTc0ahE79g4sRFE BTfIKNwQSBft9PUx0apEjvZsXu5DC53y1535Qdl19YivuZz9U8XSnXfBvrsHRh9SaMI36c WwxkkG7EptUkXOu4CJ2Me0POKSJj5D/RZZoWGB1Zp/m4U0If03/F24WWtjONYUBmm1EOzy gP++rMRRXb4+nl79gphVqo3xDn37VfiLKqzn6YfmDSs0uTSuJU5LMB0K5zrDYTQnRugByF Zh1KiUJo6A6GGc92XlpONWvw0K1gaVolyDlTP4x+JSnIA5OS8vwTv7UaaspmyNPeXSLgel MIcPY4aDzxzHZWKWC9+YRfzGTrfANEy/dq4Xqhtehz37RYxNUbJ1UsNWRMuA X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 2/9] ati-vga: r100 does not latch defaults on DP_GUI_MASTER_CNTL Date: Sun, 19 Jul 2026 12:15:29 -0400 Message-ID: <20260719161536.774061-3-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.155; envelope-from=chad@jablonski.xyz; helo=fhigh-b4-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477799106158500 Content-Type: text/plain; charset="utf-8" The r128 latches the default values of src/dst clipping, pitch, and offset when the default flags are set on DP_GUI_MASTER_CNTL. The r100 does not do this and instead uses the default values at blit time without updating the registers. Tested and validated against a Rage 128 Pro Ultra (PCI 1002:5446) and Radeon QY (RV100) (PCI 1002:5159). Signed-off-by: Chad Jablonski --- hw/display/ati.c | 36 +++++++++++++++++++----------------- hw/display/ati_2d.c | 41 ++++++++++++++++++++++++++++++----------- 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/hw/display/ati.c b/hw/display/ati.c index db7e08a462..76070d76a7 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -895,23 +895,25 @@ static void ati_mm_write(void *opaque, hwaddr addr, (data & 0x4000) << 16; s->regs.dp_mix =3D (data & GMC_ROP3_MASK) | (data & 0x7000000) >> = 16; =20 - if (!(data & GMC_SRC_PITCH_OFFSET_CNTL)) { - s->regs.src_offset =3D s->regs.default_offset; - s->regs.src_pitch =3D s->regs.default_pitch; - } - if (!(data & GMC_DST_PITCH_OFFSET_CNTL)) { - s->regs.dst_offset =3D s->regs.default_offset; - s->regs.dst_pitch =3D s->regs.default_pitch; - } - if (!(data & GMC_SRC_CLIPPING)) { - s->regs.src_sc_right =3D s->regs.default_sc_right; - s->regs.src_sc_bottom =3D s->regs.default_sc_bottom; - } - if (!(data & GMC_DST_CLIPPING)) { - s->regs.sc_top =3D 0; - s->regs.sc_left =3D 0; - s->regs.sc_right =3D s->regs.default_sc_right; - s->regs.sc_bottom =3D s->regs.default_sc_bottom; + if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { + if (!(data & GMC_SRC_PITCH_OFFSET_CNTL)) { + s->regs.src_offset =3D s->regs.default_offset; + s->regs.src_pitch =3D s->regs.default_pitch; + } + if (!(data & GMC_DST_PITCH_OFFSET_CNTL)) { + s->regs.dst_offset =3D s->regs.default_offset; + s->regs.dst_pitch =3D s->regs.default_pitch; + } + if (!(data & GMC_SRC_CLIPPING)) { + s->regs.src_sc_right =3D s->regs.default_sc_right; + s->regs.src_sc_bottom =3D s->regs.default_sc_bottom; + } + if (!(data & GMC_DST_CLIPPING)) { + s->regs.sc_top =3D 0; + s->regs.sc_left =3D 0; + s->regs.sc_right =3D s->regs.default_sc_right; + s->regs.sc_bottom =3D s->regs.default_sc_bottom; + } } break; case DST_WIDTH_X: diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c index 3b27917bf4..f51ecb747a 100644 --- a/hw/display/ati_2d.c +++ b/hw/display/ati_2d.c @@ -104,18 +104,26 @@ static void setup_2d_blt_ctx(ATIVGAState *s, ATI2DCtx= *ctx) ctx->top_to_bottom =3D s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM; ctx->need_swap =3D (HOST_BIG_ENDIAN !=3D s->vga.big_endian_fb); ctx->frgd_clr =3D s->regs.dp_brush_frgd_clr; - ctx->dst_offset =3D s->regs.dst_offset; =20 if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { /* r128 scissor values are inclusive */ ctx->scissor.width =3D s->regs.sc_right - s->regs.sc_left + 1; ctx->scissor.height =3D s->regs.sc_bottom - s->regs.sc_top + 1; + ctx->scissor.x =3D s->regs.sc_left; + ctx->scissor.y =3D s->regs.sc_top; } else { - ctx->scissor.width =3D s->regs.sc_right - s->regs.sc_left; - ctx->scissor.height =3D s->regs.sc_bottom - s->regs.sc_top; + if (s->regs.dp_gui_master_cntl & GMC_DST_CLIPPING) { + ctx->scissor.x =3D s->regs.sc_left; + ctx->scissor.y =3D s->regs.sc_top; + ctx->scissor.width =3D s->regs.sc_right - s->regs.sc_left; + ctx->scissor.height =3D s->regs.sc_bottom - s->regs.sc_top; + } else { + ctx->scissor.x =3D 0; + ctx->scissor.y =3D 0; + ctx->scissor.width =3D s->regs.default_sc_right; + ctx->scissor.height =3D s->regs.default_sc_bottom; + } } - ctx->scissor.x =3D s->regs.sc_left; - ctx->scissor.y =3D s->regs.sc_top; =20 ctx->dst.width =3D s->regs.dst_width; ctx->dst.height =3D s->regs.dst_height; @@ -123,20 +131,30 @@ static void setup_2d_blt_ctx(ATIVGAState *s, ATI2DCtx= *ctx) s->regs.dst_x : s->regs.dst_x + 1 - ctx->dst.width); ctx->dst.y =3D (ctx->top_to_bottom ? s->regs.dst_y : s->regs.dst_y + 1 - ctx->dst.height); - ctx->dst_stride =3D s->regs.dst_pitch; - ctx->dst_bits =3D s->vga.vram_ptr + s->regs.dst_offset; if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { - ctx->dst_stride *=3D ctx->bpp; + ctx->dst_stride =3D s->regs.dst_pitch * ctx->bpp; + ctx->dst_offset =3D s->regs.dst_offset; + } else { + ctx->dst_stride =3D s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFF= SET_CNTL + ? s->regs.dst_pitch : s->regs.default_pitch; + ctx->dst_offset =3D s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFF= SET_CNTL + ? s->regs.dst_offset : s->regs.default_offset; } + ctx->dst_bits =3D s->vga.vram_ptr + ctx->dst_offset; =20 ctx->src.x =3D (ctx->left_to_right ? s->regs.src_x : s->regs.src_x + 1 - ctx->dst.width); ctx->src.y =3D (ctx->top_to_bottom ? s->regs.src_y : s->regs.src_y + 1 - ctx->dst.height); - ctx->src_stride =3D s->regs.src_pitch; - ctx->src_bits =3D s->vga.vram_ptr + s->regs.src_offset; if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { - ctx->src_stride *=3D ctx->bpp; + ctx->src_stride =3D s->regs.src_pitch * ctx->bpp; + ctx->src_bits =3D s->vga.vram_ptr + s->regs.src_offset; + } else { + ctx->src_stride =3D s->regs.dp_gui_master_cntl & GMC_SRC_PITCH_OFF= SET_CNTL + ? s->regs.src_pitch : s->regs.default_pitch; + ctx->src_bits =3D s->vga.vram_ptr + + (s->regs.dp_gui_master_cntl & GMC_SRC_PITCH_OFFSET= _CNTL + ? s->regs.src_offset : s->regs.default_offset); } DPRINTF("%d %d %d, %d %d %d, (%d,%d) -> (%d,%d) %dx%d %c %c\n", s->regs.src_offset, s->regs.dst_offset, s->regs.default_offset, @@ -181,6 +199,7 @@ static bool ati_2d_do_blt(const ATI2DCtx *ctx, uint8_t = use_pixman) qemu_rect_intersect(&ctx->dst, &ctx->scissor, &vis_dst); if (!vis_dst.height || !vis_dst.width) { /* Nothing is visible, completely clipped */ + DPRINTF("entire blt clipped, nothing drawn\n"); return false; } /* --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477830; cv=none; d=zohomail.com; s=zohoarc; b=HefDxRFjAppv0/u/1ua3fd60Zi+LqeSeWCTrwyJIdTAvLq7XJMjVL6Q06oINJxZpLC4aOqZDyPVk73WBnw+8hxYq1ff95TuKUVyJH2t9edDg4e/fB1L71j7UCHQ7BPzVUjL9TjYuRyl4/ADPdEJTMeu1Q9sDLj3CxFpMaTtU2L4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477830; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fTK4GZLiirmSWWlOsqcGVSRDF7vmk2Ye0ljQ9MSTLhE=; b=jpqvdIyyPgr2pTgdLxXdBB2IGC88BIIqb8GduDpMxz3dJLmKGqRJ/rm1RBhyUtee7AHM+3p5kGK+iBs4kvdLBMguGwPManvOltjoKauyADfsR4ksWfdjx56FpZWGk3vq39ypfVOhv2E2BWB8iK998PZ2WhVqZtWN7SMG/Eb4aWs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477830464964.6596341164508; Sun, 19 Jul 2026 09:17:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBD-0007kh-C2; Sun, 19 Jul 2026 12:15:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB9-0007i2-E0 for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from fhigh-b4-smtp.messagingengine.com ([202.12.124.155]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB7-0002P8-8L for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41]) by mailfhigh.stl.internal (Postfix) with ESMTP id 5C8177A0064; Sun, 19 Jul 2026 12:15:43 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-01.internal (MEProxy); Sun, 19 Jul 2026 12:15:43 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:42 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 762d744b; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477743; x= 1784564143; bh=fTK4GZLiirmSWWlOsqcGVSRDF7vmk2Ye0ljQ9MSTLhE=; b=u ZfQ5GFCTLcSDjLJBm0dlp2mZFYLdiPkWQVihGYFTADNWtuVZ+O7aI7pZH7IjzuWm p7JeESZjGsDrv7E6jXdHsm4eBV5x2H3W9ZSNZAgmb2gsQmrQEzj5IgJ2ws5yDNdZ Wm3Aq4+kc5N8W2ZuPGXnwncrLtjFkJEcva6gdiaPk9ht6r/NYoazFYE8U5EJ0LeN eYAN69SsMHmfGVLuT7zQykqadRL/I518BOEkDgn+KFXx3FWuQMaQL9XkFMeU9w58 cK9tyErKMwjXmgEhJdEV4qgRqnglmh6xyWFN7dnDh5ttoRX13Bt7jojrVIilaHSF 9AK2VrwANtYMdJGLWAyZA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477743; x=1784564143; bh=f TK4GZLiirmSWWlOsqcGVSRDF7vmk2Ye0ljQ9MSTLhE=; b=qr+WfO1rQksw5iwC7 IS64KJFrLO83gai5Sq4fBD/FiJMYadwjmb+wJuvqD7XwYVXJPTgDn6XypSWyrC5q N22DM9aGu50uRopjC2sUuYwigk4Vy5L9Gy8pqutAAD1txijheoGkOjlvAJH/gdGN hGP17mT6awWJdRDlipT7EjrBg42WbxB8E9Xuz4kvfNTe5b/QaW0BpMx+IntjpxoK Ag0k8emY1/6bAugcQv7R+wVG4VK5YJJSxD1DfgvF8Jpl3WMjrTs0MqZMwC0whBjm gb6+VkXnd2yjYZK6AW7QHdxAlGn9EmzjbWf2J223EXTmUR+bnpml9lI85vvn18b9 Ma+ng== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFX22WwMbS2sW99eCB50G1QKT6MSqCpx6iK5itrq8JxZaP0521f6QSaZn8xZ08MPO fOwSNa6WDSeLTJNQVc/fxMSGvDLkf+yg/0G9Q09ZIOYGIXIBd2hVswgLVRGFoWlNQkKsDF GdNkKsfijsKMESGF+IJc7XNHY6Tof4qnJ8h5MKF7zpjgYI3Er1oT6Sc3p82wEBVA4tVY6K sm0munSEzPQOSr/py3N0SGFxIhaHx4yY0PMKs1GFt63biT3SGPXDCwnyEFOs/p40onWKAs 7IByVaX4T1Xvhqors54F3a+bmhyr13Lneen+jWeanFhb1s0umv08sceX1eK90gcHhjDIaK mVbEM6a68yD/dqXMPiTRh1fv6xudCC1VCXPG+uUcU5bLeBINxA/l89MO9gXVRrATdYMrS3 nmR5jcHVCeSKlBMG1bpQeI0E6jp4qHNypNQKz1yquvU18YFedyiV3yecRqX7by15CsQpjR wn4Ftg7IOdfJQNuFDMXYWveaEQ+eh7Xmpj8VijSicouFTQIlt9rVgOGCAMBjJ3v2/STIG5 rRG79ROBsEdehR7/t+vDm5uymrYCY//I0rImjylA/8PuqVQ3zNw/EfC6TmUZImRPawTEGs tnmxQ1Ns04bBPd0T/apcyqntPwGOIcSWT+blRXSBi2x2nWSAQc2kHx4oWluw X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 3/9] ati-vga: r100 pitch registers differ from r128 Date: Sun, 19 Jul 2026 12:15:30 -0400 Message-ID: <20260719161536.774061-4-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.155; envelope-from=chad@jablonski.xyz; helo=fhigh-b4-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477831073158500 Content-Type: text/plain; charset="utf-8" The r100 src/dst_pitch registers hardwire the bottom four bits to 0. This is noted in the M6 register guide. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hw/display/ati.c b/hw/display/ati.c index 76070d76a7..5c1232a31f 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -825,9 +825,11 @@ static void ati_mm_write(void *opaque, hwaddr addr, s->regs.dst_offset =3D data & 0xfffffff0; break; case DST_PITCH: - s->regs.dst_pitch =3D data & 0x3fff; if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { + s->regs.dst_pitch =3D data & 0x3fff; s->regs.dst_tile =3D (data >> 16) & 1; + } else { + s->regs.dst_pitch =3D data & 0x3ff0; } break; case DST_TILE: @@ -942,9 +944,11 @@ static void ati_mm_write(void *opaque, hwaddr addr, s->regs.src_offset =3D data & 0xfffffff0; break; case SRC_PITCH: - s->regs.src_pitch =3D data & 0x3fff; if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { + s->regs.src_pitch =3D data & 0x3fff; s->regs.src_tile =3D (data >> 16) & 1; + } else { + s->regs.src_pitch =3D data & 0x3ff0; } break; case DP_BRUSH_BKGD_CLR: --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477837; cv=none; d=zohomail.com; s=zohoarc; b=IsAcTXX69wGGyEYrA2mmprzj0penaLxat8Fi2j1yC5EPBQOmcpm7g/T2bRQ6+iELRKj943G+Ftv5aDwi+0Ea9kS+PzwW6XqjaH33KEtNiC2xrR0f9oJxLivzW+jcZUop/ic9S3xcpoWJUlHPfSGJmL5G0KbBUUqmW5JVo7UNJAs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477837; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=4FAA1YeB78MffOhT5E4V4ZjbqWexRwugJ+MTnRDKvHQ=; b=L412zg/L/rpz8QZdbs1iPZsCaShd5F0jtChpDy3gVM9Im+vZO8MbNuLsuyom+kOvJSI32zXE9t0hYtCX9XrTChOXhL+sUvZB2sRRgeu74Z4BF1p3HVABd798qO3/wMJA2ngHVtfKuvvi5HbcJLsIELXadvWA5u+PsYrWWSCy9Gk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477837599819.0263604907495; Sun, 19 Jul 2026 09:17:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBA-0007j3-RI; Sun, 19 Jul 2026 12:15:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB9-0007i5-I7 for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from fout-b3-smtp.messagingengine.com ([202.12.124.146]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB6-0002PE-Pg for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41]) by mailfout.stl.internal (Postfix) with ESMTP id 11C051D00055; Sun, 19 Jul 2026 12:15:44 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-01.internal (MEProxy); Sun, 19 Jul 2026 12:15:44 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:43 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 9aa342e8; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477743; x= 1784564143; bh=4FAA1YeB78MffOhT5E4V4ZjbqWexRwugJ+MTnRDKvHQ=; b=H QYgl95RCJj2kThX6IAyRjtR/HfHb85ePxjrg4VTIr7P/jzS2AMJWM5biLR7HJagW AeRyQIdevXU/4X7cWIvqVXd5Cz+NW39XbWXUAqBSl78CwVOZkCScgSiFEoHDgGiD sc9dc0zCi4gBUISQUhqDlegwRFetj2Sk01JbTtiy3Ev0n8sept+rv058sqhQ2IoO CmP9iClMk8mCKSKQrvh1us+r31c0SPoo31pxpO6D1yndnu4Sg+p0qefiGltiA3YV QGK291AtwmNu7vj8Dyw/M6cE4L39f8r49b/cfG1ZaTmbZOt9tQwHurwDt+U8aSuh fmcwRbXHN0jEi4Z1dSjVA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477743; x=1784564143; bh=4 FAA1YeB78MffOhT5E4V4ZjbqWexRwugJ+MTnRDKvHQ=; b=fcUH+n83WtscdBRi8 1eLxSnk2C2psHOllCaDP5aTFnKpOlem6GMXqkRdeAUirq9khPgx9Dcxhrom5Hnr4 JU+VdkLRJh2UDkFHpJ0YKPRAjVkwNT2NAGhzUpq4Z1uTztnSG0fZuMhpH3SzM7/W jjVVY6pgrT7FH+tT/sl6VLRM7UxU6LbvXCgBWFNgVeo8/Kjx5TRuh2DD1X2JSkHa USSK4FtvEgwYhX27Dn03LLNArtqHU+R0Po0G+770bJ6jFzboAmiqmKqEzAX/E8E+ g0eENqwRs5Furw2iURp+xvTrhhDsJhXvSwTEyQQL3lX0FhnUlL+SWoHrkXfi62Qb 8d0vQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFX22WwMbS2sW99eCB50G1QKT6MSqCpx6iK5itrq8JxZaP0521f6QSaZn8xZ08MPO fOwSNa6WDSeLTJNQVc/fxMSGvDLkf+yg/0G9Q09ZIOYGIXIBd2hVswgLVRGFoWlNQkKsDF GdNkKsfijsKMESGF+IJc7XNHY6Tof4qnJ8h5MKF7zpjgYI3Er1oT6Sc3p82wEBVA4tVY6K sm0munSEzPQOSr/py3N0SGFxIhaHx4yY0PMKs1GFt63biT3SGPXDCwnyEFOs/p40onWKAs 7IByVaX4T1Xvhqors54F3a+bmhyr13Lneen+jWeanFhb1s0umv08sceX1eK90gcHhjDIV0 4Rka0XWhOsYme8p7DfsHz3nVuq9PgyHlCECFzwdStuggQ1fbpY9AhEbKJ6Wzkkq1nQ4/UW OTdVHY7E83AziXGy5nebhghhuwuaoW+JGS2gsZL/6rNQ2WZR/4QCBMybxA1Ey8Uql+AQDa yIthN55EUX0NcQzVOmht777c7m3aqdVoZaMILiNoiH1Yny2gtEcCr+XbMpy3OXOUv5OiyO HzIVGl1lwdxT7i0lSKrkWww8zgSgvEIkqJ/51lQvXFh7NsuG6GZLwMJPInaLyln741hokQ Teq3b0Wj4FGDDi550ImddZuzQ4AWRdlQAvW92ajmXhPh62ufwMYlPDSWx8oA X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 4/9] ati-vga: Route GPU addresses with memory controller Date: Sun, 19 Jul 2026 12:15:31 -0400 Message-ID: <20260719161536.774061-5-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.146; envelope-from=chad@jablonski.xyz; helo=fout-b3-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477838861158500 Content-Type: text/plain; charset="utf-8" The r100's internal address space has mappings to the framebuffer, PCI GART and system memory. The framebuffer mapping is controlled by the MC_FB_LOCATION register which contains a start and a top address. The PCI GART is set up and mapped by the AIC_* registers. When enabled with AIC_CTRL, addresses between AIC_LO_ADDR and AIC_HI_ADDR are translated using the page table at AIC_PT_BASE. The physical address can then be accessed via DMA. If the address is outside either of these regions it is treated as a physic= al address. This is required for using the CP engine. Drivers store the ring buffer and indirect buffer in the PCI GART area. The r100 2D engine also stores GPU addresses in the src/dst offset registers that require routing. A future patch integrates this into the ati_2d blit operations. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 83 +++++++++++++++++++++++++++++++++++++++++++ hw/display/ati_int.h | 11 ++++++ hw/display/ati_regs.h | 7 ++++ 3 files changed, 101 insertions(+) diff --git a/hw/display/ati.c b/hw/display/ati.c index 5c1232a31f..f19a0613d7 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -277,6 +277,55 @@ static inline uint32_t ati_reg_read_offs(uint32_t reg,= int offs, } } =20 +ATIMemRoute ati_mc_route(ATIVGAState *s, uint32_t gpu_addr) +{ + uint32_t fb_start =3D (s->regs.mc_fb_location & 0xffff) << 16; + uint32_t fb_top =3D s->regs.mc_fb_location | 0xffff; + + /* Framebuffer */ + if (gpu_addr >=3D fb_start && gpu_addr <=3D fb_top) { + uint32_t offs =3D (gpu_addr - fb_start) % s->vga.vram_size; + return (ATIMemRoute) { .is_vram =3D true, .addr =3D offs }; + } + + /* PCI GART */ + if ((s->regs.aic_ctrl & PCIGART_TRANSLATE_EN) && + /* aic_{lo,hi}_addr are page-aligned and inclusive */ + gpu_addr >=3D s->regs.aic_lo_addr && + gpu_addr < s->regs.aic_hi_addr + 0x1000) { + uint32_t pg_idx =3D (gpu_addr - s->regs.aic_lo_addr) >> 12; + uint32_t pte; + if (ldl_le_pci_dma(&s->dev, + s->regs.aic_pt_base + pg_idx * sizeof(uint32_t), + &pte, MEMTXATTRS_UNSPECIFIED)) { + qemu_log_mask(LOG_GUEST_ERROR, "PCI GART pte read failed\n"); + return (ATIMemRoute) { .is_vram =3D false, .addr =3D 0 }; + } + return (ATIMemRoute) { + .is_vram =3D false, + .addr =3D (pte & 0xfffff000) | (gpu_addr & 0xfff), + }; + } + + /* System memory */ + return (ATIMemRoute) { .is_vram =3D false, .addr =3D gpu_addr }; +} + +static uint32_t ati_mc_read(ATIVGAState *s, uint32_t gpu_addr) +{ + ATIMemRoute route =3D ati_mc_route(s, gpu_addr); + uint32_t val; + + if (route.is_vram) { + return ldl_le_p(s->vga.vram_ptr + route.addr); + } + if (ldl_le_pci_dma(&s->dev, route.addr, &val, MEMTXATTRS_UNSPECIFIED))= { + qemu_log_mask(LOG_GUEST_ERROR, "MC DMA read failed\n"); + return 0; + } + return val; +} + static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size) { ATIVGAState *s =3D opaque; @@ -542,6 +591,21 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr,= unsigned int size) qemu_log_mask(LOG_GUEST_ERROR, "Read from write-only register 0x%x\n", (unsigned)ad= dr); break; + case AIC_CTRL: + val =3D s->regs.aic_ctrl; + break; + case AIC_PT_BASE: + val =3D s->regs.aic_pt_base; + break; + case AIC_LO_ADDR: + val =3D s->regs.aic_lo_addr; + break; + case AIC_HI_ADDR: + val =3D s->regs.aic_hi_addr; + break; + case MC_FB_LOCATION: + val =3D s->regs.mc_fb_location; + break; default: break; } @@ -1046,6 +1110,25 @@ static void ati_mm_write(void *opaque, hwaddr addr, s->host_data.next =3D 0; } break; + case AIC_CTRL: + s->regs.aic_ctrl =3D data; + break; + case AIC_PT_BASE: + s->regs.aic_pt_base =3D data & 0xfffff000; + break; + case AIC_LO_ADDR: + s->regs.aic_lo_addr =3D data & 0xfffff000; + break; + case AIC_HI_ADDR: + s->regs.aic_hi_addr =3D data & 0xfffff000; + break; + case MC_FB_LOCATION: + /* + * The bottom 6 bits of fb start are hard-wired to 0 + * and the bottom 6 bits of fb top are hard-wired to 1 + */ + s->regs.mc_fb_location =3D (data & 0xffc0ffc0) | 0x003f0000; + break; default: break; } diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index 0c48934d33..bb08e0c23d 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -95,6 +95,11 @@ typedef struct ATIVGARegs { uint16_t default_sc_bottom; uint16_t default_sc_right; uint32_t default_tile; + uint32_t aic_ctrl; + uint32_t aic_pt_base; + uint32_t aic_lo_addr; + uint32_t aic_hi_addr; + uint32_t mc_fb_location; } ATIVGARegs; =20 typedef struct ATIHostDataState { @@ -127,8 +132,14 @@ struct ATIVGAState { ATIHostDataState host_data; }; =20 +typedef struct { + bool is_vram; + hwaddr addr; +} ATIMemRoute; + const char *ati_reg_name(int num); =20 +ATIMemRoute ati_mc_route(ATIVGAState *s, uint32_t gpu_addr); void ati_2d_blt(ATIVGAState *s); bool ati_host_data_flush(ATIVGAState *s); void ati_host_data_finish(ATIVGAState *s); diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h index b813fa119e..5e9396bd7a 100644 --- a/hw/display/ati_regs.h +++ b/hw/display/ati_regs.h @@ -73,6 +73,10 @@ #define MPP_TB_CONFIG 0x01C0 #define MPP_GP_CONFIG 0x01C8 #define VIPH_CONTROL 0x01D0 +#define AIC_CTRL 0x01D0 +#define AIC_PT_BASE 0x01D8 +#define AIC_LO_ADDR 0x01DC +#define AIC_HI_ADDR 0x01E0 #define CRTC_H_TOTAL_DISP 0x0200 #define CRTC_H_SYNC_STRT_WID 0x0204 #define CRTC_V_TOTAL_DISP 0x0208 @@ -477,6 +481,9 @@ /* CRTC2_GEN_CNTL constants */ #define CRTC2_EN 0x02000000 =20 +/* AIC_CTRL constants */ +#define PCIGART_TRANSLATE_EN 0x00000001 + /* POWER_MANAGEMENT constants */ #define PWR_MGT_ON 0x00000001 #define PWR_MGT_MODE_MASK 0x00000006 --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477807; cv=none; d=zohomail.com; s=zohoarc; b=NMcvDeYFtnV+imDaYtRZuQc7iTqwWqNeE1w3DAtSqoPlRT0CutWV4buyan9c9z2Q9lNnzWK5hhwdqJ71ZE3W+8qGqupVvjj6R6fSHKINtW/ekNxdy1QG7rawJ0qeMy/cCp2s5RQwO4lUht/fS5h35iLg9matlSk0/XkV+06dfOc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477807; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=SMfM5tOPVVJjB6fA5OJrqvCV54hWKQWqeNa0ZvBSgq0=; b=MduGcRlD6vzerHptaGWa7z5ICkkzDChcvpEkdm8IHv/MxkwabKFmy+1KJxr1Jp3NXzaHw5bZ3Lk4jGnpJZbb1/bmdDE0ASSgWiFkHTDUfEalba1G2g8Z6phW0tyvWzEH363YwgQXlp7xkrctKMIXkOx0zN0KUDUV2tBibTKhq+s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477807503593.2686229471125; Sun, 19 Jul 2026 09:16:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBC-0007kL-RA; Sun, 19 Jul 2026 12:15:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB9-0007i3-Fd for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from fout-b3-smtp.messagingengine.com ([202.12.124.146]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB7-0002PI-Ga for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:47 -0400 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.stl.internal (Postfix) with ESMTP id C06481D00085; Sun, 19 Jul 2026 12:15:44 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Sun, 19 Jul 2026 12:15:44 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:44 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 04b61daf; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477744; x= 1784564144; bh=SMfM5tOPVVJjB6fA5OJrqvCV54hWKQWqeNa0ZvBSgq0=; b=j 8k6kA3jsh4BrLfobc9QLXPkfQJYbc3XfrT8zJJYaVWmuRbDBOMneQshVeO1QjSJZ yiGRqNewBqCv2ttzo1hDsKZMVeC/1LnWLNSCkuA9TlsoBBikey+1Fa5DXyxGA5Zs aAxoIbPBzPilCPIEAyzVqRV4taLfQH/i0rvsw4IQoDghpGUdpVQYX4YXlnvTscJM 68o64/vJ/7FIjazxrBFqaade/uJpQLvKgY+eXepVTq0l76q2qLPRmmUQQf3z2vNR ITfqfIhAIpHG8qvcIStbPq3s7vihCCCzesck85MXNuLzvoKjMxCqXi3X6DFtu7gH MUQD0oBCMYD7vJ/k0uHTg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477744; x=1784564144; bh=S MfM5tOPVVJjB6fA5OJrqvCV54hWKQWqeNa0ZvBSgq0=; b=p98CsUxti//9JpwNs /V4pObda5aOJjGo2zs+BZjBxMqPg/uuTekZWkTspZqxzM0zFqFScMW6q+83lQnK0 ABmiZ+MKYFRkkeDaui+4dfmtMjKjRsq7KD2g9myzTSmz0ROU5MXTtJdwU8U11+xp DEVKjxDuveU6Rh4rpBIntqusUG3VbqE42SvtuWYL+rZUnC14soExOT0qtDiSP++R +8+kItFDigQmiW9J2Fc2O5DVb7BPUHxPlsP5TsnAeeA3qTLt3jENhJvjRBbHFOvS B1hbsb9YOqypKf5izjyoV70dd4dzdxqf1qgdmPmg9yBhsW8zKDa4pBxzFhCeYlsO IwG+A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF2M8/td2x4uX0quVUht6oTuzlOtlV8s/xAIpba0AK3yD3yx/edKpxJCFjEj6RVFW tZylprZe+5ZeJQcZMYpgGdlyYr4p2Wtx0Pp9uwz7oCUjsZcueHidxeZqaoOMQW+WpAqS8o 36DmnFTRazz4ZZYy3JE1PDUxJVJ6kQybtpH5PX9NmR/So+sfpFNwXUOFOf+enlYoThGfBq /4lv/qCY4C+TNW42jFI8nDAtYiw5rFjgpjUCC0EAiSX1/r68t1adlaGfPCZ9kDzHhyIsa/ zjm0Fxwf9RtbwH8g1DU4zTrN01nzO9FlVCZHr0GOq/w+LWaLMT81m5uJTc0ahE79g4sRDp MrujM+TRxleVO6L17NotoAvZ7Cxru+b/zWS2K0A5CC9Z9T4Y7dzdF43Q9WlA2NwRBg7w8f oMmZYHt++huXN9EUqtAbvTFFTJFIiNj4UeJsG7UrXgvdR6YakF/xSP9T0uY2P2ZnxSl2k4 FAu4Je3mF3a8w1+Yeyeo6dseRsAMpAe3xsHQO+mFLJFbMBvnwlbFW3mDRZpWvTYSOVrmOZ XJGUG/4en84g73sEvcmeiz+7t9v82NP8d6jcufWeMzcbdsACPNWX2g7gAA9gbEfbn2sd80 qainyZtYH3kcjHo9PCwz4DtVLiJywxT9IeXMW7BgukNgVB4CSv2mwOEd5sOQ X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 5/9] ati-vga: Route r100 src and dst offsets through memory controller Date: Sun, 19 Jul 2026 12:15:32 -0400 Message-ID: <20260719161536.774061-6-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.146; envelope-from=chad@jablonski.xyz; helo=fout-b3-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477809122158500 Content-Type: text/plain; charset="utf-8" The r100 stores a full GPU address in the dst, src, and default offset registers. For this reason the addresses need to be routed via the memory controller to obtain offsets. This differs from the r128 which directly stores framebuffer offsets. Blits outside of VRAM are still not supported. The existing bounds checks catch this in most cases. A small edge case exists where an offset register could be set to a low memory address outside of the VRAM mapping and end up treated as a VRAM offset. This has not been observed in real drivers but should be handled when implementing blits outside of VRAM. Signed-off-by: Chad Jablonski --- hw/display/ati_2d.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c index f51ecb747a..e1cbf9efa9 100644 --- a/hw/display/ati_2d.c +++ b/hw/display/ati_2d.c @@ -135,10 +135,13 @@ static void setup_2d_blt_ctx(ATIVGAState *s, ATI2DCtx= *ctx) ctx->dst_stride =3D s->regs.dst_pitch * ctx->bpp; ctx->dst_offset =3D s->regs.dst_offset; } else { + ATIMemRoute res =3D ati_mc_route(s, s->regs.dp_gui_master_cntl & + GMC_DST_PITCH_OFFSET_CNTL + ? s->regs.dst_offset + : s->regs.default_offset); ctx->dst_stride =3D s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFF= SET_CNTL ? s->regs.dst_pitch : s->regs.default_pitch; - ctx->dst_offset =3D s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFF= SET_CNTL - ? s->regs.dst_offset : s->regs.default_offset; + ctx->dst_offset =3D res.addr; } ctx->dst_bits =3D s->vga.vram_ptr + ctx->dst_offset; =20 @@ -150,11 +153,13 @@ static void setup_2d_blt_ctx(ATIVGAState *s, ATI2DCtx= *ctx) ctx->src_stride =3D s->regs.src_pitch * ctx->bpp; ctx->src_bits =3D s->vga.vram_ptr + s->regs.src_offset; } else { + uint32_t src =3D s->regs.dp_gui_master_cntl & GMC_SRC_PITCH_OFFSET= _CNTL + ? s->regs.src_offset + : s->regs.default_offset; + ATIMemRoute res =3D ati_mc_route(s, src); ctx->src_stride =3D s->regs.dp_gui_master_cntl & GMC_SRC_PITCH_OFF= SET_CNTL ? s->regs.src_pitch : s->regs.default_pitch; - ctx->src_bits =3D s->vga.vram_ptr + - (s->regs.dp_gui_master_cntl & GMC_SRC_PITCH_OFFSET= _CNTL - ? s->regs.src_offset : s->regs.default_offset); + ctx->src_bits =3D s->vga.vram_ptr + res.addr; } DPRINTF("%d %d %d, %d %d %d, (%d,%d) -> (%d,%d) %dx%d %c %c\n", s->regs.src_offset, s->regs.dst_offset, s->regs.default_offset, --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477820; cv=none; d=zohomail.com; s=zohoarc; b=dpF0gdUQh6LL7jS00ktwlrOUGBVUUgYJJIfCh7KiKUJ+iW5PKtyEmNXilrPFNIyjezxTPKYtb4CMdtAyXA2uMZ7RZvog3gjip6EM7RBslfA7q+BQXRDspPeLax124DdLsJ7pTs+ZBaHBf0WKu8xxVlV3qRFjmGiJY6PxvWCIooc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477820; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=XIEbaKbA6qCI+vUiKXGbW6ddbkkTKmWPHJ44Mdgl4hM=; b=XxQT+xdDzAv5wrKNORtT4mbS3ozVnixEiPA50Esk4qXiO8IvXnP5kPdDqWbLS+BO4wkbXxzixxf1wO2JDP1+oM+4OfneXsEVgFg2LDXPDTyB8znYnlJwayO2EEL/v8t+aZEvZfQz+6IPQpLwY4IgTbvU9QiQH2qu/IHZ/OvkNS8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477820445375.89860472647865; Sun, 19 Jul 2026 09:17:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBD-0007l2-R1; Sun, 19 Jul 2026 12:15:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUBA-0007io-GV for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:48 -0400 Received: from fout-b3-smtp.messagingengine.com ([202.12.124.146]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB8-0002PO-BX for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:48 -0400 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.stl.internal (Postfix) with ESMTP id 943641D0008A; Sun, 19 Jul 2026 12:15:45 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Sun, 19 Jul 2026 12:15:45 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:44 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 387629cd; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477745; x= 1784564145; bh=XIEbaKbA6qCI+vUiKXGbW6ddbkkTKmWPHJ44Mdgl4hM=; b=u vDUn8CbeokcTgGtr3sJOXfOD98Y6jA4k48msLsRuxadkGZYqtdUytQIIFT8hCbyE QSWREeMg+Xqz3izRuaoKVDy5Ip/1IF+IcNIs44ZAz8Ui1bKBE52OFKBo3iFlwe1w EjuytJuxoLEG59NxhyJRHAWncb3j1bZzMZ9aEyryfj8Nm5A4nhyfrgqhRhJK5Aqh u8hPrVDnQ4ykEIyMe/024t3rdMAYVZzyfYkGG6pSomQY4JIolB1MQi5uO7E5+l8G DMXh0IZn8XJFZodN1aAdrGm1gK+X3CL00SBG5ft8jfQ5aS8MMHmFOAowDd3bVWqr rIeRHyfqyvWn4pqMny9AQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477745; x=1784564145; bh=X IEbaKbA6qCI+vUiKXGbW6ddbkkTKmWPHJ44Mdgl4hM=; b=a1jNkmkmTAaCKXmUz iL2KprdQ0wBHk6UQS2jjzAIV9ZsAENQNEWMCSx1HwU2hsCay30Flqtrm+jY5cIlP 2A4Bgr848LPDzfn59WMYAtzhBzLUr6ez14uBzDCRh9DOMhdI6RvKH4pHeTMZ4528 d0a3jAuTTdhnIsdSriNGwfrYmSQ6XU8fQ2YhuL5XwxB/v5HwfVvolzQVI8D9FG6n oooVa7WNlJXxnml4iJ7dxeoWkG3kt7XuRxQwBOtyA1yzuI5sUuCTY5qFO1LNMoKZ dBVbtDi8oP/CqbsbPIAvuamY51h4yNxx0Vk0XOJR8suLegAg7ZhfPdmZ/cQuNw+1 UlUWg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFX22WwMbS2sW99eCB50G1QKT6MSqCpx6iK5itrq8JxZaP0521f6QSaZn8xZ08MPO fOwSNa6WDSeLTJNQVc/fxMSGvDLkf+yg/0G9Q09ZIOYGIXIBd2hVswgLVRGFoWlNQkKsDF GdNkKsfijsKMESGF+IJc7XNHY6Tof4qnJ8h5MKF7zpjgYI3Er1oT6Sc3p82wEBVA4tVY6K sm0munSEzPQOSr/py3N0SGFxIhaHx4yY0PMKs1GFt63biT3SGPXDCwnyEFOs/p40onWKAs 7IByVaX4T1Xvhqors54F3a+bmhyr13Lneen+jWeanFhb1s0umv08sceX1eK90gcHhjDIfe FEyRmoosCfObZC303QICRwqNW0LYjTK7vWfEfuH5qRTjEblV5YstMrxrFu1cmOBzJb5LC2 9pFCn3y7XqzRbB7HdZt1vLIZJ+VG1I8xfkJgWXDyKCC21fPKUCpXaBc0Aoy3Q0gsQj4BkM 7AOfprQQxR0+rx96We3pJsdIIaAxPzAQjeP26larrmN/vIy2IxmJuXAC50U2WofXZguKQ8 hQgXpBnAiWff1wUDfbsAfixFPbduHjADtk2u5Ldbkpf6VmDR8LUZUFlFLGEKU4WDzPQl7T rrS2/skI+AG1BfVnzbyXwOLE/ZzuxGqrlfSfk9SeJXIKe9QHozXmm/B13CFQ X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 6/9] ati-vga: Process Type-0/1/2 CP packets Date: Sun, 19 Jul 2026 12:15:33 -0400 Message-ID: <20260719161536.774061-7-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.146; envelope-from=chad@jablonski.xyz; helo=fout-b3-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477820833158501 Content-Type: text/plain; charset="utf-8" This implements packet processing for r100. Type-0 and Type-1 packets write to registers. Type-2 packets are NOPs. Type-3 packet headers are parsed but only logged as of now. Hardware testing and poking at the microcode suggests that Type-0/1/2 packets may be implemented in hardware and not the microcode. Type-3, however, depends on the microcode. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 3 +- hw/display/ati_int.h | 55 +++++++++++++++ hw/display/ati_pkt.c | 151 ++++++++++++++++++++++++++++++++++++++++ hw/display/meson.build | 3 +- hw/display/trace-events | 9 +++ 5 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 hw/display/ati_pkt.c diff --git a/hw/display/ati.c b/hw/display/ati.c index f19a0613d7..ad32965866 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -626,7 +626,7 @@ static inline void ati_reg_write_offs(uint32_t *reg, in= t offs, } } =20 -static void ati_mm_write(void *opaque, hwaddr addr, +void ati_mm_write(void *opaque, hwaddr addr, uint64_t data, unsigned int size) { ATIVGAState *s =3D opaque; @@ -1251,6 +1251,7 @@ static void ati_vga_reset(DeviceState *dev) s->host_data.next =3D 0; s->host_data.row =3D 0; s->host_data.col =3D 0; + memset(&s->cur_packet, 0, sizeof(s->cur_packet)); } =20 static void ati_vga_exit(PCIDevice *dev) diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index bb08e0c23d..bbc360b636 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -38,6 +38,30 @@ #define TYPE_ATI_VGA "ati-vga" OBJECT_DECLARE_SIMPLE_TYPE(ATIVGAState, ATI_VGA) =20 +#define ATI_PKT_TYPE_MASK 0xc0000000 +#define ATI_PKT_TYPE_SHIFT 30 + +#define ATI_PKT_TYPE0 0 +#define ATI_PKT_TYPE0_BASE_REG_MASK 0x00007fff +#define ATI_PKT_TYPE0_BASE_REG_SHIFT 0 +#define ATI_PKT_TYPE0_ONE_REG_WR 0x00008000 +#define ATI_PKT_TYPE0_COUNT_MASK 0x3fff0000 +#define ATI_PKT_TYPE0_COUNT_SHIFT 16 + +#define ATI_PKT_TYPE1 1 +#define ATI_PKT_TYPE1_REG0_MASK 0x000007ff +#define ATI_PKT_TYPE1_REG0_SHIFT 0 +#define ATI_PKT_TYPE1_REG1_MASK 0x003ff800 +#define ATI_PKT_TYPE1_REG1_SHIFT 11 + +#define ATI_PKT_TYPE2 2 + +#define ATI_PKT_TYPE3 3 +#define ATI_PKT_TYPE3_OPCODE_MASK 0x0000ff00 +#define ATI_PKT_TYPE3_OPCODE_SHIFT 8 +#define ATI_PKT_TYPE3_COUNT_MASK 0x3fff0000 +#define ATI_PKT_TYPE3_COUNT_SHIFT 16 + typedef struct ATIVGARegs { uint32_t mm_index; uint32_t bios_scratch[8]; @@ -110,6 +134,34 @@ typedef struct ATIHostDataState { uint32_t acc[4]; } ATIHostDataState; =20 +typedef struct ATIType0Header { + uint32_t base_reg; + uint16_t count; + bool one_reg_wr; +} ATIType0Header; + +typedef struct ATIType1Header { + uint32_t reg0; + uint32_t reg1; +} ATIType1Header; + +/* Type-2 headers are a no-op and have no state */ + +typedef struct ATIType3Header { + uint8_t opcode; + uint16_t count; +} ATIType3Header; + +typedef struct ATIPktState { + uint8_t type; + uint16_t dwords_processed; + union { + ATIType0Header t0; + ATIType1Header t1; + ATIType3Header t3; + }; +} ATIPktState; + struct ATIVGAState { PCIDevice dev; VGACommonState vga; @@ -130,6 +182,7 @@ struct ATIVGAState { MemoryRegion mm; ATIVGARegs regs; ATIHostDataState host_data; + ATIPktState cur_packet; }; =20 typedef struct { @@ -139,9 +192,11 @@ typedef struct { =20 const char *ati_reg_name(int num); =20 +void ati_mm_write(void *opaque, hwaddr addr, uint64_t data, unsigned int s= ize); ATIMemRoute ati_mc_route(ATIVGAState *s, uint32_t gpu_addr); void ati_2d_blt(ATIVGAState *s); bool ati_host_data_flush(ATIVGAState *s); void ati_host_data_finish(ATIVGAState *s); +void ati_pkt_receive_data(ATIVGAState *s, ATIPktState *p, uint32_t data); =20 #endif /* ATI_INT_H */ diff --git a/hw/display/ati_pkt.c b/hw/display/ati_pkt.c new file mode 100644 index 0000000000..584ab667f0 --- /dev/null +++ b/hw/display/ati_pkt.c @@ -0,0 +1,151 @@ +/* + * QEMU ATI SVGA emulation + * Packet processing functions + * + * Copyright (c) 2026 Chad Jablonski + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" +#include "ati_regs.h" +#include "ati_int.h" +#include "trace.h" +#include "qemu/log.h" + +static inline uint32_t ati_pkt_dwords_remaining(const ATIPktState *p) +{ + switch (p->type) { + case ATI_PKT_TYPE0: + return p->t0.count - p->dwords_processed; + case ATI_PKT_TYPE1: + return 2 - p->dwords_processed; + case ATI_PKT_TYPE2: + return 0; + case ATI_PKT_TYPE3: + return p->t3.count - p->dwords_processed; + default: + /* This should never happen, type is 2-bits wide */ + g_assert_not_reached(); + return 0; + } +} + +static void ati_pkt_parse_header(ATIPktState *p, uint32_t header) +{ + p->dwords_processed =3D 0; + p->type =3D (header & ATI_PKT_TYPE_MASK) >> ATI_PKT_TYPE_SHIFT; + switch (p->type) { + case ATI_PKT_TYPE0: { + ATIType0Header t0 =3D { + /* Packet stores base_reg as word offset, convert to byte offs= et */ + .base_reg =3D ((header & ATI_PKT_TYPE0_BASE_REG_MASK) >> + ATI_PKT_TYPE0_BASE_REG_SHIFT) << 2, + /* Packet stores count as n-1, convert to actual count */ + .count =3D ((header & ATI_PKT_TYPE0_COUNT_MASK) >> + ATI_PKT_TYPE0_COUNT_SHIFT) + 1, + .one_reg_wr =3D !!(header & ATI_PKT_TYPE0_ONE_REG_WR), + }; + p->t0 =3D t0; + trace_ati_pkt_type0(t0.base_reg, ati_reg_name(t0.base_reg), + t0.count, t0.one_reg_wr); + break; + } + case ATI_PKT_TYPE1: { + ATIType1Header t1 =3D { + /* Packet stores reg0 as word offset, convert to byte offset */ + .reg0 =3D ((header & ATI_PKT_TYPE1_REG0_MASK) >> + ATI_PKT_TYPE1_REG0_SHIFT) << 2, + /* Packet stores reg1 as word offset, convert to byte offset */ + .reg1 =3D ((header & ATI_PKT_TYPE1_REG1_MASK) >> + ATI_PKT_TYPE1_REG1_SHIFT) << 2, + }; + p->t1 =3D t1; + trace_ati_pkt_type1(t1.reg0, t1.reg1); + break; + } + case ATI_PKT_TYPE2: { + /* Type-2 is a no-op, it has no header state */ + trace_ati_pkt_type2(); + break; + } + case ATI_PKT_TYPE3: { + ATIType3Header t3 =3D { + .opcode =3D (header & ATI_PKT_TYPE3_OPCODE_MASK) >> + ATI_PKT_TYPE3_OPCODE_SHIFT, + /* Packet stores count as n-1, convert to actual count */ + .count =3D ((header & ATI_PKT_TYPE3_COUNT_MASK) >> + ATI_PKT_TYPE3_COUNT_SHIFT) + 1, + }; + p->t3 =3D t3; + qemu_log_mask(LOG_UNIMP, "Type-3 CCE packets not yet implemented\n= "); + trace_ati_pkt_type3(t3.opcode, t3.count); + break; + } + default: + /* This should never happen, type is 2-bits wide */ + g_assert_not_reached(); + break; + } +} + +static void ati_pkt_type0_data(ATIVGAState *s, ATIPktState *p, uint32_t da= ta) +{ + uint32_t offset =3D p->t0.one_reg_wr ? 0 : + (p->dwords_processed * sizeof(uint32_t)); + uint32_t reg =3D p->t0.base_reg + offset; + trace_ati_pkt_type0_data(p->dwords_processed, reg, ati_reg_name(reg), = data); + ati_mm_write(s, reg, data, sizeof(uint32_t)); +} + +static void ati_pkt_type1_data(ATIVGAState *s, ATIPktState *p, uint32_t da= ta) +{ + uint32_t reg =3D p->dwords_processed =3D=3D 0 ? p->t1.reg0 : p->t1.reg= 1; + trace_ati_pkt_type1_data(p->dwords_processed, reg, data); + ati_mm_write(s, reg, data, sizeof(uint32_t)); +} + +static void ati_pkt_type3_data(ATIVGAState *s, ATIPktState *p, uint32_t da= ta) +{ + uint32_t opcode =3D p->t3.opcode; + trace_ati_pkt_type3_data(p->dwords_processed, opcode, data); +} + +static void ati_pkt_data(ATIVGAState *s, ATIPktState *p, uint32_t data) +{ + switch (p->type) { + case ATI_PKT_TYPE0: { + ati_pkt_type0_data(s, p, data); + p->dwords_processed +=3D 1; + break; + } + case ATI_PKT_TYPE1: { + ati_pkt_type1_data(s, p, data); + p->dwords_processed +=3D 1; + break; + } + case ATI_PKT_TYPE2: + /* Type-2 packets have no data, we should never end up here */ + g_assert_not_reached(); + break; + case ATI_PKT_TYPE3: { + ati_pkt_type3_data(s, p, data); + p->dwords_processed +=3D 1; + break; + } + default: + /* This should never happen, type is 2-bits wide */ + g_assert_not_reached(); + break; + } +} + +void ati_pkt_receive_data(ATIVGAState *s, ATIPktState *p, uint32_t data) +{ + uint32_t remaining =3D ati_pkt_dwords_remaining(p); + if (remaining =3D=3D 0) { + /* We're ready to start processing a new packet header */ + ati_pkt_parse_header(p, data); + return; + } + ati_pkt_data(s, p, data); +} diff --git a/hw/display/meson.build b/hw/display/meson.build index ffecedbf70..0fd2bb79c6 100644 --- a/hw/display/meson.build +++ b/hw/display/meson.build @@ -60,7 +60,8 @@ system_ss.add(when: 'CONFIG_XLNX_DISPLAYPORT', if_true: f= iles('xlnx_dp.c')) =20 system_ss.add(when: 'CONFIG_ARTIST', if_true: files('artist.c')) =20 -system_ss.add(when: 'CONFIG_ATI_VGA', if_true: [files('ati.c', 'ati_2d.c',= 'ati_dbg.c'), pixman]) +system_ss.add(when: 'CONFIG_ATI_VGA', + if_true: [files('ati.c', 'ati_2d.c', 'ati_dbg.c', 'ati_pkt.c= '), pixman]) =20 system_ss.add(when: [pvg, 'CONFIG_MAC_PVG_PCI'], if_true: [files('appl= e-gfx.m', 'apple-gfx-pci.m')]) system_ss.add(when: [pvg, 'CONFIG_MAC_PVG_MMIO'], if_true: [files('appl= e-gfx.m', 'apple-gfx-mmio.m')]) diff --git a/hw/display/trace-events b/hw/display/trace-events index 4bfc457fba..52bd91313b 100644 --- a/hw/display/trace-events +++ b/hw/display/trace-events @@ -147,6 +147,15 @@ sii9022_switch_mode(const char *mode) "mode: %s" ati_mm_read(unsigned int size, uint64_t addr, const char *name, uint64_t v= al) "%u 0x%"PRIx64 " %s -> 0x%"PRIx64 ati_mm_write(unsigned int size, uint64_t addr, const char *name, uint64_t = val) "%u 0x%"PRIx64 " %s <- 0x%"PRIx64 =20 +# ati_pkt.c +ati_pkt_type0(uint32_t base_reg, const char *name, uint32_t count, bool on= e_reg_wr) "base_reg=3D0x%x name=3D%s count=3D%u one_reg_wr=3D%d" +ati_pkt_type0_data(uint32_t data_idx, uint32_t reg, const char *name, uint= 32_t data) "data_idx=3D%u reg=3D0x%x name=3D%s data=3D0x%x" +ati_pkt_type1(uint32_t reg0, uint32_t reg1) "reg0=3D0x%x reg1=3D0x%x" +ati_pkt_type1_data(uint32_t data_idx, uint32_t reg, uint32_t data) "data_i= dx=3D%u reg=3D0x%x data=3D0x%x" +ati_pkt_type2(void) "" +ati_pkt_type3(uint8_t opcode, uint32_t count) "opcode=3D0x%x count=3D%u" +ati_pkt_type3_data(uint32_t data_idx, uint8_t opcode, uint32_t data) "data= _idx=3D%u opcode=3D0x%x data=3D0x%x" + # artist.c artist_reg_read(unsigned int size, uint64_t addr, const char *name, uint64= _t val) "%u 0x%"PRIx64 "%s -> 0x%08"PRIx64 artist_reg_write(unsigned int size, uint64_t addr, const char *name, uint6= 4_t val) "%u 0x%"PRIx64 "%s <- 0x%08"PRIx64 --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477812; cv=none; d=zohomail.com; s=zohoarc; b=Ur2M++XDv0KQGJJEbu+qk/vX9ZkBTGun3w04Q62DmOeSbGci7bfYgzDDPkFjTVE3wBN1ouOFT2+6LJeKkJMXQLQqpNJd25YoTpZZCJv0ZCX7Ahk6CfDLPbjcyLqcIjjReAqPJhA5JNxS8Ku4DDk+K9+7bLMtzxoy2cpWQmkhEr8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477812; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HWb35YkY/8g06RTKPli1Lm3ckz8PxQcr8AtNlo0k3Do=; b=M1waWTKG97zerb84D0ucfeQBHOFCzGYg3k8U6tf3lyqiM46AOk7gYhE69JbASiUjj7vmU7CBYwbfBBKNQhCd+HG3AbyK5XviW7GXFrrasWP57rbVQcHl1H9MXz6OQnAV7HyJZErYI+3jRl4N4DjIiZdKp0Kune7z/vdV/olyTUk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178447781224875.11606143762253; Sun, 19 Jul 2026 09:16:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBF-0007l4-7H; Sun, 19 Jul 2026 12:15:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUBA-0007j2-OC for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:48 -0400 Received: from fhigh-b4-smtp.messagingengine.com ([202.12.124.155]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUB9-0002Pf-00 for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:48 -0400 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.stl.internal (Postfix) with ESMTP id 489177A0098; Sun, 19 Jul 2026 12:15:46 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Sun, 19 Jul 2026 12:15:46 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:45 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 0f942022; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477746; x= 1784564146; bh=HWb35YkY/8g06RTKPli1Lm3ckz8PxQcr8AtNlo0k3Do=; b=C 7xVMRkZUcaupDCGciGlT0j+oDOHAOdFlTHwPbaoPTSoZm3n3QmoxOudWvXRnZjVj q7oSgjCwgouPMImbivz076D0PAIgw8ju57fmRBqKtq8/eRsKzBIREDEal4h6wHn8 pBiAsbIXNMWTpTqNthUIlS56G7OtBdT+8VoS0vFbuzTHiYV5GxSttw89MeStFx4x dJu6R6E4ayKYkbv2NI2gw/C/Y1HjD9+3E1GWAAR53HN8MAlYcTyXf19iR4qNxPja n4aaaorG8K5eMvs+od+pDVhtQwFUpZq2kkvQZKBHF8TjrqgkocTyz+VIicMj62Ey 4yW4S2XVDUd98R7thxrTw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477746; x=1784564146; bh=H Wb35YkY/8g06RTKPli1Lm3ckz8PxQcr8AtNlo0k3Do=; b=gDVzgv+EfVQVSvaJv xt4yVWAb6Azxd1HbtBm9hY638AgMGvOsr+pgU+f6yXKSbIEsaU7EvjUJDdzwePpG kktypFOlcjoHBHDcRGY2cl+84YTwqFWbadUya+GCkv7LQGriNVoJOaSsSRkqqQB3 8mfGUDyfIpz4TZwEn+3T8dBD7RqDavXLSNRt1iSE7z/Nt+DqaapTX7ZhRdm97lMX lskSTJPDnG5/vPRsgy3iMjlQoRU4SaLGnHr+8T3CN/U5Xux9Y54eSQs+Ez/UTrom ZerrHkZCnp88N6GAl3+UwVjTsW5+kM2GEbo6q/vg/tiR/YOEjw9fXYEr5xF17Cij 5zsdQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFX22WwMbS2sW99eCB50G1QKT6MSqCpx6iK5itrq8JxZaP0521f6QSaZn8xZ08MPO fOwSNa6WDSeLTJNQVc/fxMSGvDLkf+yg/0G9Q09ZIOYGIXIBd2hVswgLVRGFoWlNQkKsDF GdNkKsfijsKMESGF+IJc7XNHY6Tof4qnJ8h5MKF7zpjgYI3Er1oT6Sc3p82wEBVA4tVY6K sm0munSEzPQOSr/py3N0SGFxIhaHx4yY0PMKs1GFt63biT3SGPXDCwnyEFOs/p40onWKAs 7IByVaX4T1Xvhqors54F3a+bmhyr13Lneen+jWeanFhb1s0umv08sceX1eK90gcHhjDIjR Nrttgw8Cj9xIOr9Yt6qtxvxfVnCDAuIO9v69KQ2rzmO1ZDHnhdRlmiKiHdmH2kkCFSIz5n Gx3Llmx6R1mkmWDRiSoJHT/R4PCiKZHFXhGvxCP0jrW6pE0sTMWwTyDy56FEpjp1grCTps 1NuZhx5hjfaGzVMAjRE0hzNd4zYCqGQ+6mpsW43zuQI1HVd2bYd095LSNctVIQfFOptjvO sGzFp7af7Wlr1dEGaFydbrhcb6QQk/vsPlmbMY5kdVwK31FnzXtjVP30I1qlnBw2Nh8fWd 0RoHDZH3qC9TYDbdYedtMGzHUXh/NGCKVDLp3g2jN/B7kRw7Bx9Awa+bx5cg X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 7/9] ati-vga: CP engine ring buffer Date: Sun, 19 Jul 2026 12:15:34 -0400 Message-ID: <20260719161536.774061-8-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.155; envelope-from=chad@jablonski.xyz; helo=fhigh-b4-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477812864158500 Content-Type: text/plain; charset="utf-8" Drivers for the r100 submit packets using the ring buffer. The real CP engine operates asynchronously. This is a synchronous implementation of it. Packet processing is triggered by a write to CP_RB_WPTR and proceeds until the buffer has been emptied. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 50 +++++++++++++++++++++++++++++++++++++++++++ hw/display/ati_int.h | 5 +++++ hw/display/ati_regs.h | 5 +++++ 3 files changed, 60 insertions(+) diff --git a/hw/display/ati.c b/hw/display/ati.c index ad32965866..d758e652b5 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -606,6 +606,23 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr,= unsigned int size) case MC_FB_LOCATION: val =3D s->regs.mc_fb_location; break; + case CP_CSQ_CNTL: + if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RADEON_QY) { + val =3D s->regs.cp_csq_cntl; + } + break; + case CP_RB_BASE: + val =3D s->regs.cp_rb_base; + break; + case CP_RB_CNTL: + val =3D s->regs.cp_rb_cntl; + break; + case CP_RB_RPTR: + val =3D s->regs.cp_rb_rptr; + break; + case CP_RB_WPTR: + val =3D s->regs.cp_rb_wptr; + break; default: break; } @@ -1129,6 +1146,35 @@ void ati_mm_write(void *opaque, hwaddr addr, */ s->regs.mc_fb_location =3D (data & 0xffc0ffc0) | 0x003f0000; break; + case CP_CSQ_CNTL: + if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RADEON_QY) { + s->regs.cp_csq_cntl =3D data & 0xf0000000; + } + break; + case CP_RB_BASE: + s->regs.cp_rb_base =3D data & 0xfffffffc; + break; + case CP_RB_CNTL: + s->regs.cp_rb_cntl =3D data & 0x880f3f3f; + break; + case CP_RB_WPTR: + { + uint32_t size_l2qw =3D s->regs.cp_rb_cntl & 0x3f; + /* + * RPTR and WPTR are only 23 bits wide, sizes larger + * than this make no sense. + */ + unsigned shift =3D size_l2qw > 22 ? 23 : size_l2qw + 1; + uint32_t size_msk =3D (1U << shift) - 1; + s->regs.cp_rb_wptr =3D data & size_msk; + while (s->regs.cp_rb_rptr !=3D s->regs.cp_rb_wptr) { + uint32_t offs =3D s->regs.cp_rb_base + + s->regs.cp_rb_rptr * sizeof(uint32_t); + ati_pkt_receive_data(s, &s->cur_packet, ati_mc_read(s, offs)); + s->regs.cp_rb_rptr =3D (s->regs.cp_rb_rptr + 1) & size_msk; + } + break; + } default: break; } @@ -1251,6 +1297,10 @@ static void ati_vga_reset(DeviceState *dev) s->host_data.next =3D 0; s->host_data.row =3D 0; s->host_data.col =3D 0; + s->regs.cp_rb_rptr =3D 0; + s->regs.cp_rb_wptr =3D 0; + s->regs.cp_rb_base =3D 0; + s->regs.cp_rb_cntl =3D 0; memset(&s->cur_packet, 0, sizeof(s->cur_packet)); } =20 diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index bbc360b636..00fb03c4b4 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -124,6 +124,11 @@ typedef struct ATIVGARegs { uint32_t aic_lo_addr; uint32_t aic_hi_addr; uint32_t mc_fb_location; + uint32_t cp_csq_cntl; + uint32_t cp_rb_base; + uint32_t cp_rb_cntl; + uint32_t cp_rb_rptr; + uint32_t cp_rb_wptr; } ATIVGARegs; =20 typedef struct ATIHostDataState { diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h index 5e9396bd7a..755b9656b1 100644 --- a/hw/display/ati_regs.h +++ b/hw/display/ati_regs.h @@ -117,11 +117,15 @@ #define OV0_SCALE_CNTL 0x0420 #define SUBPIC_CNTL 0x0540 #define PM4_BUFFER_OFFSET 0x0700 +#define CP_RB_BASE 0x0700 #define PM4_BUFFER_CNTL 0x0704 +#define CP_RB_CNTL 0x0704 #define PM4_BUFFER_WM_CNTL 0x0708 #define PM4_BUFFER_DL_RPTR_ADDR 0x070c #define PM4_BUFFER_DL_RPTR 0x0710 +#define CP_RB_RPTR 0x0710 #define PM4_BUFFER_DL_WPTR 0x0714 +#define CP_RB_WPTR 0x0714 #define PM4_VC_FPU_SETUP 0x071c #define PM4_FPU_CNTL 0x0720 #define PM4_VC_FORMAT 0x0724 @@ -132,6 +136,7 @@ #define PM4_IW_INDOFF 0x0738 #define PM4_IW_INDSIZE 0x073c #define PM4_FPU_FPX0 0x0740 +#define CP_CSQ_CNTL 0x0740 #define PM4_FPU_FPY0 0x0744 #define PM4_FPU_FPX1 0x0748 #define PM4_FPU_FPY1 0x074c --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477830; cv=none; d=zohomail.com; s=zohoarc; b=i3SVvKRkuN4nqNY00B2dAg/mbEiXhw8NgzFRJi5CuC9V4GiKmNSSkKSMMpjELCfNriribrno2l++hqLDUQGSblhaFpBZHbUKDrMYEgKYlS5DLP9VHhAGrR4hDLoSLbCidCf+58fjzSrMsbe+KhvoQMjw7xFkzVfXYvZ5nLI4Vqc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477830; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=9nuB8094LMtH1LjibVqjG4RDOw0IU7XdwLUG8GMKbdM=; b=ZSiOzjgFWOmtSJPkT5E9BpcACemt0LFSvFVS08QN+By0f6EhL1X5UyIx97sOS7Jke6aSYziTG0m28noKbKiFJalPWfR3Jsz5NOtYGyL5IoyhFDdTUKmfOb8Di5SvAN7pThSeyN33cYhbxgJz9YlPBkkt+Gxph86y5BEUr+kwKZE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477830057253.01155829775826; Sun, 19 Jul 2026 09:17:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBF-0007l6-9Z; Sun, 19 Jul 2026 12:15:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUBB-0007jI-IM for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:49 -0400 Received: from fhigh-b4-smtp.messagingengine.com ([202.12.124.155]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUBA-0002Pq-3F for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:49 -0400 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.stl.internal (Postfix) with ESMTP id 03ADE7A0097; Sun, 19 Jul 2026 12:15:46 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Sun, 19 Jul 2026 12:15:47 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:46 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 03405d9f; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477746; x= 1784564146; bh=9nuB8094LMtH1LjibVqjG4RDOw0IU7XdwLUG8GMKbdM=; b=Y sSSKDhVi/GcVan70fy5gVDC3KT/8yBAyJ0oratY4cMFisycBck0lVmkvB0cKGd4q Zfby/KmN54k4AopJSIq2vBwNeQX3+/MYZgIjtYAQvb/jEeFQT1l4tcC+j5tdaNWj qcLM6DCPIEy7GW0YkD+BUV/KgZijiMzMg91RjXFwhBPdlYVC5Aa4sqV4+MZzez/o 2jwhOG2Y8EP/PjhJLLP6mJCwdImWYZm6Z/+0w1Bj1BxT6tVwiFqZ3S8lpj/YBFAN M0fVG8mKRXGyWorgcIQWzH8e3VrSagzL1zMbtCFnKNBmwbm2Pgh4fQ4p9YtTI1u/ Zt6LAiZ4rFWFl/vGUz+Mg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477746; x=1784564146; bh=9 nuB8094LMtH1LjibVqjG4RDOw0IU7XdwLUG8GMKbdM=; b=GeasKRLsLQLw9+0IJ kex+8PHj5BLMEtGy93leJs60b29mMoeURN3TXnDHl2cMJDA1BGF/b/XEEs0gnbfE lOo1bk/9BZJoUIGfmX7ttOqigNg0OsZM5Lp4KdTZ5a3de0zgedwaCJqzsKxkR2et fLG78Zigjf5eKbE5UhkyKz6e2w1ICQ66c3kIi7urxPTcdMtOqS4Cc2GZOGZISPfU ButfwSPoKQyiWPfX+GKO0Wy+L0+RBeQUgSmN4u1OP1oKlrDo9FIxy1T+26zjy2ZV VmfqHIyCLWRdXMamK6clNpNbRevGoBVZiFSON8dwqryLwTE5/VKNURhj17/Ck2lD 5PfyA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTFX22WwMbS2sW99eCB50G1QKT6MSqCpx6iK5itrq8JxZaP0521f6QSaZn8xZ08MPO fOwSNa6WDSeLTJNQVc/fxMSGvDLkf+yg/0G9Q09ZIOYGIXIBd2hVswgLVRGFoWlNQkKsDF GdNkKsfijsKMESGF+IJc7XNHY6Tof4qnJ8h5MKF7zpjgYI3Er1oT6Sc3p82wEBVA4tVY6K sm0munSEzPQOSr/py3N0SGFxIhaHx4yY0PMKs1GFt63biT3SGPXDCwnyEFOs/p40onWKAs 7IByVaX4T1Xvhqors54F3a+bmhyr13Lneen+jWeanFhb1s0umv08sceX1eK90gcHhjDIZM Gq3OisFsc6EpCJFDU+EraLOMLnRXOFU+HEDL8dQx11KaZOkwrrHjXF7d3pA9dTCSBF+WAU yCu3WILrQ0WvGlqzNZ1k9zOi7oI6RFDCtVs1GMRvslrgm68rkUJS0E4yZiiw2VrrOoX9F3 t0wJXZsERLjEhFzI0LxVBedeSlSDBPOI5wKfiIdjXNjB8ZHAVL7948xUBH5TUJwXU4ZJj+ 0ZoG/37m8YT0jH0pxJxTWQV5/zKm1kYQKIRSJtm6zTxm82eL0hNe6/t1g+Eai2SquBsN8W tRu5+NI1Jyv/v84ns3YSq9zaV0kzEYqJGuYHx62TOCAsJEdFnpeeIaANY+OA X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 8/9] ati-vga: CP engine indirect buffer Date: Sun, 19 Jul 2026 12:15:35 -0400 Message-ID: <20260719161536.774061-9-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.155; envelope-from=chad@jablonski.xyz; helo=fhigh-b4-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477831094158500 Content-Type: text/plain; charset="utf-8" Xorg acceleration (XAA) makes use of the indirect buffer for 2D operations. Instead of writing packets directly to the ring buffer, they are written to indirect buffers and then referenced by a small packet on the ring. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 22 ++++++++++++++++++++++ hw/display/ati_int.h | 2 ++ hw/display/ati_regs.h | 2 ++ 3 files changed, 26 insertions(+) diff --git a/hw/display/ati.c b/hw/display/ati.c index d758e652b5..0c550599cc 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -623,6 +623,12 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr,= unsigned int size) case CP_RB_WPTR: val =3D s->regs.cp_rb_wptr; break; + case CP_IB_BASE: + val =3D s->regs.cp_ib_base; + break; + case CP_IB_BUFSZ: + val =3D s->regs.cp_ib_bufsz; + break; default: break; } @@ -1175,6 +1181,22 @@ void ati_mm_write(void *opaque, hwaddr addr, } break; } + case CP_IB_BASE: + s->regs.cp_ib_base =3D data & 0xfffffffc; + break; + case CP_IB_BUFSZ: { + uint32_t bufsz =3D data & 0x007fffff; + uint32_t base =3D s->regs.cp_ib_base; + ATIPktState ib_pkt =3D {0}; + uint32_t dwords =3D 0; + s->regs.cp_ib_bufsz =3D bufsz; + while (dwords < bufsz) { + uint32_t offs =3D base + dwords * sizeof(uint32_t); + ati_pkt_receive_data(s, &ib_pkt, ati_mc_read(s, offs)); + dwords +=3D 1; + } + break; + } default: break; } diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index 00fb03c4b4..df08b6ae01 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -129,6 +129,8 @@ typedef struct ATIVGARegs { uint32_t cp_rb_cntl; uint32_t cp_rb_rptr; uint32_t cp_rb_wptr; + uint32_t cp_ib_base; + uint32_t cp_ib_bufsz; } ATIVGARegs; =20 typedef struct ATIHostDataState { diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h index 755b9656b1..e8e1b90374 100644 --- a/hw/display/ati_regs.h +++ b/hw/display/ati_regs.h @@ -134,7 +134,9 @@ #define PM4_VC_VLOFF 0x0730 #define PM4_VC_VLSIZE 0x0734 #define PM4_IW_INDOFF 0x0738 +#define CP_IB_BASE 0x0738 #define PM4_IW_INDSIZE 0x073c +#define CP_IB_BUFSZ 0x073c #define PM4_FPU_FPX0 0x0740 #define CP_CSQ_CNTL 0x0740 #define PM4_FPU_FPY0 0x0744 --=20 2.54.0 From nobody Sat Jul 25 12:31:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1784477831; cv=none; d=zohomail.com; s=zohoarc; b=ky0PAjiMoDGxEX3YjJNjumVGoSrpzjbPUKFIPDSK6E/a3kqOS4H4K6Xy9e10ZyAT1F/2gFeuflM6NyZSfPzlgoMnK6cKfsfeg5/NXdKq9MICmYeJj4LDJeyjqMTjdASUuiZhuq5rftPVKGmxu493j1xPCCOC/OCBNmUFUZfFydM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784477831; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FxYe49VlUpL49RJnm5W6cmxC8BRM74U3nkrbigB7SYI=; b=MuI/HLvVLsXphqUSXIvjfRK1cXi/y1aki4ckukd3YXPeDn6xsbJJKZqR8GjYYQjxquJtLVVLgkzSXYAHPPeDWdZ6h8VsTIdVwJIJtuBpPddU3VvLcSbG3S9Vkqa5LwfExPL8MwqLWch043uw2G9bJ0PWgquCNz8YwY0ue6/AVac= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784477831854277.41214682940995; Sun, 19 Jul 2026 09:17:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wlUBF-0007l7-M4; Sun, 19 Jul 2026 12:15:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUBB-0007jg-St for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:49 -0400 Received: from fout-b3-smtp.messagingengine.com ([202.12.124.146]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wlUBA-0002QC-Dl for qemu-devel@nongnu.org; Sun, 19 Jul 2026 12:15:49 -0400 Received: from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41]) by mailfout.stl.internal (Postfix) with ESMTP id AA11B1D0003C; Sun, 19 Jul 2026 12:15:47 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-01.internal (MEProxy); Sun, 19 Jul 2026 12:15:47 -0400 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 19 Jul 2026 12:15:47 -0400 (EDT) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id bd063b2c; Sun, 19 Jul 2026 16:15:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1784477747; x= 1784564147; bh=FxYe49VlUpL49RJnm5W6cmxC8BRM74U3nkrbigB7SYI=; b=b pYaFSgC0v6ky8nX0cnMJlqfnDziu7bh09GRPsqdNSJ6E6Az2lvKvd/Q2DnP5tK9U uRGm8QZI0GmiEzpoZBKAEHhcp6Z9J8lngjEI1tC+0z67YWRusPlN4ARD6xjYDu4/ vPaPUm3sxx9J45UxUXKF6ZOqIUKWLTzmWr4m6KUu00BmPIBlrdmHD26wOVJLWACv bqnRtA6+aGKr27w6AGnM8SuNl8vwtJdVe4qFPnnirDuMzu6V359aKuqmF0TrOS8J hEMEezwMIa7jLluzefNEX0ijkjn+Y0oQo5bBacJdiefVUXmsMoNbmv2r7R8QrNCI EbK7R64tqRVbfSUt5SmzQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm2; t=1784477747; x=1784564147; bh=F xYe49VlUpL49RJnm5W6cmxC8BRM74U3nkrbigB7SYI=; b=eeHrq2sHK9fGA8fGp 6A0N7rXP2Lws2lTakoliKMMXxYS+LGMSJI4muPwWOk7YhYafQjDdgFVY0cUjIGso WPP5+cwrjFnqKFUNd34PBiLeUPIXwwDieiaRrkyFofDi4U8hC7mwDw8zn5Izc+Ad 2ES9Z9f+zoMOzi5nnksq/ak9QND07lBkVxL43i9iTq6FQANEfl+jI0TIpuOUYEd6 ZoDaoKe7RwnkFgpZsfEBuMV/hktcRjqIY1h9vszZP6aXIXHSg/ElltWJ7vwmHKPB xt0RwcuQmrqi4oPGHnN9FsOYOLQngWOUANqk+W49cFJfUbsKOVrYd7mnwmwj20V2 PLfdA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGbgkTlNDQ1Bvo8f+LUT+Zm1EtdS57c514xXo1/s9L2sic9WUzeQs4iwnWAqOr1vm G18BnC0XuOJCLxxKPJpmle9nfBudcOBbX4QWBH4zFAN5PSM5KjovtnhBnCqm8fGZLnzPYS e/Jmi9RpHIUyCg00RgRmuxPm78q3BjA13/PltbYmRrdxKrX2ID5zAI7IshEx6unZxmJRy+ VKb+JekVlp1MyncK30ci5XSKZ+099TmxMVErmbpUkc2snVorb9wF8J4jbpfcooGEWEf6uG HrTzbOyLckcmFTHfvwdCMMcA5p0fezk58hbQbVWs0+N1rjoy1epuw9LZkhZuVtPd9k8ude KBx8pqPS524fciCjtuiw3bTSZVcZmUIVWrY+9XDSNtELyTtzr0XsvPHYwxlvehHBXdjr75 LNizXvKkdGLy7IPCegXGH/3f15mAGZC5oQyWlx3i76Myg43SrGhQ++gLFL4Ta8O5t38PPJ WleQBS0r6hUERKoN/oxp6VpK9aIlm+nAGRGcpLgaemXaY0lq9ouIIHDYEbbK3QVqcm6/o7 Pxr4PZxYRp+sfY1TMv/yNGu5umvcv2dEltMISQRbSuBww2g5Icb6Y12f1E3qlimGAEn/mF dOhUw2EMdrkKZj2S3O8APCUOGoojNFshiaJZXGESdGuqY0NC1UnFyjlpFFRw X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Chad Jablonski Subject: [PATCH 9/9] ati-vga: Scratch registers Date: Sun, 19 Jul 2026 12:15:36 -0400 Message-ID: <20260719161536.774061-10-chad@jablonski.xyz> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260719161536.774061-1-chad@jablonski.xyz> References: <20260719161536.774061-1-chad@jablonski.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=202.12.124.146; envelope-from=chad@jablonski.xyz; helo=fout-b3-smtp.messagingengine.com X-Spam_score_int: -2 X-Spam_score: -0.3 X-Spam_bar: / X-Spam_report: (-0.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5, PDS_OTHER_BAD_TLD=2, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @jablonski.xyz) X-ZM-MESSAGEID: 1784477832841158500 Content-Type: text/plain; charset="utf-8" Scratch registers are used by the Linux DRM driver to store sequence numbers related to fencing. Without them, Xorg starts but quickly hangs. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 19 +++++++++++++++++++ hw/display/ati_int.h | 1 + hw/display/ati_regs.h | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/hw/display/ati.c b/hw/display/ati.c index 0c550599cc..86e5c16946 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -629,6 +629,14 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr,= unsigned int size) case CP_IB_BUFSZ: val =3D s->regs.cp_ib_bufsz; break; + case SCRATCH_REG0: + case SCRATCH_REG1: + case SCRATCH_REG2: + case SCRATCH_REG3: + case SCRATCH_REG4: + case SCRATCH_REG5: + val =3D s->regs.scratch_reg[(addr - SCRATCH_REG0) / sizeof(uint32_= t)]; + break; default: break; } @@ -1197,6 +1205,17 @@ void ati_mm_write(void *opaque, hwaddr addr, } break; } + case SCRATCH_REG0: + case SCRATCH_REG1: + case SCRATCH_REG2: + case SCRATCH_REG3: + case SCRATCH_REG4: + case SCRATCH_REG5: + { + int reg_idx =3D (addr - SCRATCH_REG0) / sizeof(uint32_t); + s->regs.scratch_reg[reg_idx] =3D data; + break; + } default: break; } diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index df08b6ae01..daa45a2009 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -131,6 +131,7 @@ typedef struct ATIVGARegs { uint32_t cp_rb_wptr; uint32_t cp_ib_base; uint32_t cp_ib_bufsz; + uint32_t scratch_reg[6]; } ATIVGARegs; =20 typedef struct ATIHostDataState { diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h index e8e1b90374..54d63cf26b 100644 --- a/hw/display/ati_regs.h +++ b/hw/display/ati_regs.h @@ -222,6 +222,12 @@ #define CLR_CMP_MASK 0x15cc #define DP_SRC_FRGD_CLR 0x15d8 #define DP_SRC_BKGD_CLR 0x15dc +#define SCRATCH_REG0 0x15e0 +#define SCRATCH_REG1 0x15e4 +#define SCRATCH_REG2 0x15e8 +#define SCRATCH_REG3 0x15ec +#define SCRATCH_REG4 0x15f0 +#define SCRATCH_REG5 0x15f4 #define DST_BRES_ERR 0x1628 #define DST_BRES_INC 0x162c #define DST_BRES_DEC 0x1630 --=20 2.54.0