Cover Letter Detail
Show a cover letter.
GET /api/covers/2202586/?format=api
{ "id": 2202586, "url": "http://patchwork.ozlabs.org/api/covers/2202586/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260227203944.746471-1-chad@jablonski.xyz/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260227203944.746471-1-chad@jablonski.xyz>", "list_archive_url": null, "date": "2026-02-27T20:39:26", "name": "[v9,00/18] ati-vga: Implement HOST_DATA transfers to enable X.org text rendering", "submitter": { "id": 91805, "url": "http://patchwork.ozlabs.org/api/people/91805/?format=api", "name": "Chad Jablonski", "email": "chad@jablonski.xyz" }, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260227203944.746471-1-chad@jablonski.xyz/mbox/", "series": [ { "id": 493814, "url": "http://patchwork.ozlabs.org/api/series/493814/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=493814", "date": "2026-02-27T20:39:27", "name": "ati-vga: Implement HOST_DATA transfers to enable X.org text rendering", "version": 9, "mbox": "http://patchwork.ozlabs.org/series/493814/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/covers/2202586/comments/", "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=jablonski.xyz header.i=@jablonski.xyz\n header.a=rsa-sha256 header.s=fm2 header.b=pYr0snH6;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=messagingengine.com header.i=@messagingengine.com\n header.a=rsa-sha256 header.s=fm3 header.b=IGInhldU;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fN0cC4kJlz1xyQ\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Feb 2026 07:41:47 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vw4e8-0002JD-Vf; Fri, 27 Feb 2026 15:41:14 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <chad@jablonski.xyz>)\n id 1vw4dx-0001MZ-PG\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:03 -0500", "from fout-a1-smtp.messagingengine.com ([103.168.172.144])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <chad@jablonski.xyz>)\n id 1vw4dv-0007Oh-8h\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:01 -0500", "from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46])\n by mailfout.phl.internal (Postfix) with ESMTP id 906EDEC0632;\n Fri, 27 Feb 2026 15:40:57 -0500 (EST)", "from phl-frontend-03 ([10.202.2.162])\n by phl-compute-06.internal (MEProxy); Fri, 27 Feb 2026 15:40:57 -0500", "by mail.messagingengine.com (Postfix) with ESMTPA; Fri,\n 27 Feb 2026 15:40:56 -0500 (EST)", "from localhost (chomposaur [local])\n by chomposaur (OpenSMTPD) with ESMTPA id 431869eb;\n Fri, 27 Feb 2026 20:40:55 +0000 (UTC)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz;\n h=cc:cc:content-transfer-encoding:content-type:date:date:from\n :from:in-reply-to:message-id:mime-version:reply-to:subject\n :subject:to:to; s=fm2; t=1772224857; x=1772311257; bh=D/9XodGQWU\n gEMOapxbVo8SZR9Sw8LUVI01gh4qzXrW4=; b=pYr0snH6WmC2KZYtqDnLuYDuP3\n +W+0xBlp6hnlkr23TRPGTgDtOzjCYskKAe6HG8fP1P9sRo2zzB9KebiRdWBFOfrI\n B5RJCRyZvIuQRQbCp1LRSsryupxSBuFPh0NaGCXmn+M7oKIxLvawLp11OBs4m35P\n Zx7oYzSGJ92QQdvRhPPuE2KHhYNJiBmi29CyCLeGQk4nKjfKUr7GzTH0/sTv9bsy\n AvJyeEh5027khKp7+Xw2glfad4vyrtfmcRGcv65gz4EFULDiU25FKRLGs3XfBU2t\n 5bV0HLG3LJps4vhIB/izqagDb1bWpEUApovJWHpGXSKpM1b67B0RNYzUI64A==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=\n messagingengine.com; h=cc:cc:content-transfer-encoding\n :content-type:date:date:feedback-id:feedback-id:from:from\n :in-reply-to:message-id:mime-version:reply-to:subject:subject:to\n :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=\n 1772224857; x=1772311257; bh=D/9XodGQWUgEMOapxbVo8SZR9Sw8LUVI01g\n h4qzXrW4=; b=IGInhldU7TrZflqliD7PwONH3YlLzapazjKcqpWI3Uqev44N95Z\n 6r9kebQnxq7BOg3UPPQl/HzUs9zZJoJTYA8LdlDZCEuliKer3MzwRw+gUNzlP6fN\n AFFjJx1hPaJ7sbf9u/9J5UprxbyDnooiymqNbbLFzPzel/Y66w35j6u8nrmfr/Nq\n bYnM8FODPryYS3UI2b81ypl1UObgjilJFRq0xKGu/bXE+8Y9FaR5FB1m8GbIwJvN\n t/jahUpDP9uZqaFMykKsB35Umy7iMy7rjHkQvm0WtSBcy0CZTrnIBhTSvL0XHn8o\n n1pKn5xXTIylL6u5Er1qdgrOcHG03t1kKzQ==" ], "X-ME-Sender": "<xms:WAGiaa5IEqY3h28YEt6M2eLBx0aiCTCfKqqOi_qQVyMLHXRBbuFyYQ>\n <xme:WAGiaawsqiI3nw3euPMBOVtteyd5bYm748tfdcuBv_5iujbmoheGiRDmkkG5KMH9f\n Y1WNd9krSdlqEdbBZDIxgYGUXLXoRWfsrmfWuf9kdREsXOIFoHY_qM>", "X-ME-Received": "\n <xmr:WAGiaRwgOqA_jyFWgJGt2j4Fw2A-dMooUvBijnmynBcMErt9GOCeSKujbg_1>", "X-ME-Proxy-Cause": "\n gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvgeelleekucetufdoteggodetrf\n dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu\n rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnegfrh\n hlucfvnfffucdlfeehmdenucfjughrpefhvfevufffkffoggfgsedtkeertdertddtnecu\n hfhrohhmpeevhhgrugculfgrsghlohhnshhkihcuoegthhgrugesjhgrsghlohhnshhkih\n drgiihiieqnecuggftrfgrthhtvghrnhephfdtvdehieevgefgteffheeigeehtdelvddv\n ueeijeejvdeliefftedvffejtdeunecuffhomhgrihhnpegtohguvggsvghrghdrohhrgh\n enucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegthhgr\n ugesjhgrsghlohhnshhkihdrgiihiidpnhgspghrtghpthhtohephedpmhhouggvpehsmh\n htphhouhhtpdhrtghpthhtohepkhhrrgigvghlsehrvgguhhgrthdrtghomhdprhgtphht\n thhopehmrghrtggrnhgurhgvrdhluhhrvggruhesrhgvughhrghtrdgtohhmpdhrtghpth\n htohepqhgvmhhuqdguvghvvghlsehnohhnghhnuhdrohhrghdprhgtphhtthhopegthhgr\n ugesjhgrsghlohhnshhkihdrgiihiidprhgtphhtthhopegsrghlrghtohhnsegvihhkrd\n gsmhgvrdhhuh", "X-ME-Proxy": "<xmx:WAGiaSz-Cdnk-fvEUeyFn9b1WKtjz2xhhEmCn0I_JQo-JNFBTom5zw>\n <xmx:WAGiabZ9QhHvjLf-1bFTj0pkc1Luhq6cycriaywECbzZSsvP_o_zUg>\n <xmx:WAGiaTVkBdIMBY_01mmSBWio5IieORztIOMjVzMNx8SOac_XkhR4Jg>\n <xmx:WAGiaZiQaPHZB0ELhlmtQ0Xj-cLZkg_JKlOXfWiFgk7Gh7IbkiB3wg>\n <xmx:WQGiaYfgTAc0mLcBTHobf9qotd3PVfehuAlQK4YgCbqZt1jgWc7i0ouz>", "Feedback-ID": "ib26944c1:Fastmail", "From": "Chad Jablonski <chad@jablonski.xyz>", "To": "qemu-devel@nongnu.org", "Cc": "BALATON Zoltan <balaton@eik.bme.hu>, Gerd Hoffmann <kraxel@redhat.com>,\n\t=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Chad Jablonski <chad@jablonski.xyz>", "Subject": "[PATCH v9 00/18] ati-vga: Implement HOST_DATA transfers to enable\n X.org text rendering", "Date": "Fri, 27 Feb 2026 15:39:26 -0500", "Message-ID": "<20260227203944.746471-1-chad@jablonski.xyz>", "X-Mailer": "git-send-email 2.52.0", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=103.168.172.144;\n envelope-from=chad@jablonski.xyz;\n helo=fout-a1-smtp.messagingengine.com", "X-Spam_score_int": "28", "X-Spam_score": "2.8", "X-Spam_bar": "++", "X-Spam_report": "(2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1,\n DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5,\n FROM_SUSPICIOUS_NTLD_FP=1.999, PDS_OTHER_BAD_TLD=1.999,\n RCVD_IN_DNSWL_LOW=-0.7,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.706,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.401,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001,\n 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 <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "This series implements HOST_DATA as a blit source enabling text rendering in\nxterm under X.org with 2D acceleration.\n\nThe series builds up functionality incrementally:\n\n* Patches 1-6: Bug fixes and register implementations\n* Patches 7-15: Refactor of ati_2d_blt to decouple from ATIVGAState\n* Patch 16: Scissor clipping implementation\n* Patches 17-18: HOST_DATA register writes, color expansion, and\n accumulator flush\n\nTested with xterm on X.org using the r128 driver built with\n--disable-dri (MMIO mode).\n\nHardware tests can be found at:\nhttps://codeberg.org/cjab/ati-tests/src/commit/995cdccbbe969920984bc30d953379b02cb132f8/tests/common/host_data.c\n\nChanges from v8:\n- Rename tmp_stride to tmp_stride_words\n- Small formatting tweaks\n- Add clipping debug logging\n- Replace extract8 with BIT masking in expansion hot path\n- Add SRC_COLOR support\n- Fix SRC_COLOR value (was 0x20000, should have been 0x30000)\n- Add partial SRC_MONO_FRGD support\n- Src bound validation now only done on ROP3_SRCCOPY blits\n- Other improved log messages\n- Host data accumulator expanded from 128-bits to 256-bits based on hardware\n testing. Real hardware flushes after 128-bits but early HOST_DATA_LAST writes\n make use of the entire 256-bits to finish the blit.\n- Added ati_finish_host_data to match hardware in the early HOST_DATA_LAST case\n- Added active flag for host_data blits ignoring HOST_DATA writes\n when no blit is active.\n- Removed ati_host_data_reset. This is now handled either when flushing or a new\n blit is started.\n\nChanges from v7:\n- Avoid potential issue with dst_offset calculation (found by Zoltan)\n- Remove unnecessary newlines and other small formatting fixes\n- Squash patch 15 into patches 13 and 14\n- Note: Zoltan's suggestion to embed ATI2DCtx in ATIVGAState will be\n revisited in a follow-up series\n\nChanges from v6:\n- Reduce churn by adding ctx_ struct and pointer\n- Moved extraction of ati_set_dirty helper earlier in the series\n- Moved register logging into setup_2d_blt_ctx\n- Remove unnecessary comments\n\nChanges from v5:\n- Added previously standalone aperture size patch to series\n- Introduced ATI2DCtx to hold all blit state (suggested by Zoltan)\n- Made refactor patches more granular\n- Simplified DP_GUI_MASTER_CNTL bit shifting\n- Sorted clipping regs by offsets\n- Removed dst_x/y update after blit (confirmed by hardware testing)\n\nChanges from v4:\n- Refactored ati_2d_blt to accept src and dst state\n- Implemented host_data blits on top of the refactored ati_2d_blt\n (suggested by Zoltan)\n- Dropped separate field storage for DP_DATATYPE/DP_MIX (per Zoltan)\n\nChanges from v3:\n- New patch 1 fixing DP_DATATYPE/MIX register aliasing, this supersedes old patch 5\n- Fix MSB/LSB HOST_DATA bit ordering, it is per-byte rather than per-word\n- Fixed a missing break in register write handler\n- Squashed and reorganized the dst/scissor helper patches (per Zoltan)\n- Simplified register field constants and increment logic (per Zoltan)\n- Tested with MorphOS and TVPaint (opaque bitmap fonts now work)\n\nChanges from v2:\n- Verified with hardware that clipping default bit latches\n- Verified with hardware that pitch/offset default bits latch\n (supersedes Zoltan's \"ati-vga: Separate default control bit for\n source\")\n- A new approach to HOST_DATA using a 128-bit accumulator instead of a\n large buffer\n- Fixed a longstanding bug in (DST/SRC)_PITCH reads that zeroed pitch value.\n- Removed mask from the DP_GUI_MASTER_CNTL write, all fields are\n important\n- Created helpers for code shared between ati_2d_blt and\n ati_host_data_flush\n\nChanges from v1:\n- Split monolithic patch into 7 logical patches as requested\n- Integrate HOST_DATA blit into existing ati_2d_blt()\n- Add fallback implementation for non-pixman builds\n- Remove unnecessary initialization in realize (kept in reset only)\n- Fixed DP_GUI_MASTER_CNTL mask to preserve GMC_SRC_SOURCE field\n- Implement scissor clipping\n\nChad Jablonski (18):\n ati-vga: Fix framebuffer mapping by using hardware-correct aperture\n sizes\n ati-vga: Fix DST_PITCH and SRC_PITCH reads\n ati-vga: Read aliased values from DP_GUI_MASTER_CNTL\n ati-vga: Latch src and dst pitch and offset on master_cntl default\n ati-vga: Implement foreground and background color register writes\n ati-vga: Add scissor clipping register support\n ati-vga: Remove dst_x/y updates after blit\n ati-vga: Consolidate dirty region tracking in ati_2d_blt\n ati-vga: Remove src and dst stride mutation in ati_2d_blt\n ati-vga: Use local variables for register values in ati_2d_blt\n ati-vga: Introduce ATI2DCtx struct for 2D blit context\n ati-vga: Extract setup_2d_blt_ctx from ati_2d_blt\n ati-vga: Split ati_2d_do_blt from ati_2d_blt\n ati-vga: Remove ATIVGAState param from ati_2d_do_blt\n ati-vga: Move source bounds validation to ati_2d_blt\n ati-vga: Implement scissor rectangle clipping for 2D operations\n ati-vga: Implement HOST_DATA register writes\n ati-vga: Implement HOST_DATA flush to VRAM\n\n hw/display/ati.c | 144 +++++++++++++-\n hw/display/ati_2d.c | 452 +++++++++++++++++++++++++++++-------------\n hw/display/ati_dbg.c | 9 +\n hw/display/ati_int.h | 27 ++-\n hw/display/ati_regs.h | 20 ++\n 5 files changed, 510 insertions(+), 142 deletions(-)" }