Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2227747/?format=api
{ "id": 2227747, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2227747/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260424080508.53992-12-jamin_lin@aspeedtech.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.1/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": "" }, "msgid": "<20260424080508.53992-12-jamin_lin@aspeedtech.com>", "date": "2026-04-24T08:05:24", "name": "[v5,11/18] hw/usb/hcd-ehci: Implement 64-bit QH descriptor addressing", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "ad1cdfe66c2b9fe2450f08a9bb80cca6f59504ed", "submitter": { "id": 81768, "url": "http://patchwork.ozlabs.org/api/1.1/people/81768/?format=api", "name": "Jamin Lin", "email": "jamin_lin@aspeedtech.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260424080508.53992-12-jamin_lin@aspeedtech.com/mbox/", "series": [ { "id": 501315, "url": "http://patchwork.ozlabs.org/api/1.1/series/501315/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501315", "date": "2026-04-24T08:05:08", "name": "hw/usb/ehci: Add 64-bit descriptor addressing support", "version": 5, "mbox": "http://patchwork.ozlabs.org/series/501315/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2227747/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2227747/checks/", "tags": {}, "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=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=YGAwmEaO;\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=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=aspeedtech.com;" ], "Received": [ "from lists1p.gnu.org (lists1p.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 4g25Fz0Zbqz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 18:09:11 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wGBXv-0005Er-TA; Fri, 24 Apr 2026 04:05:55 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jamin_lin@aspeedtech.com>)\n id 1wGBXg-00053M-F4; Fri, 24 Apr 2026 04:05:45 -0400", "from mail-japaneastazlp170130007.outbound.protection.outlook.com\n ([2a01:111:f403:c405::7] helo=TYDPR03CU002.outbound.protection.outlook.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jamin_lin@aspeedtech.com>)\n id 1wGBXe-0001GV-2b; Fri, 24 Apr 2026 04:05:40 -0400", "from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by SEZPR06MB5856.apcprd06.prod.outlook.com (2603:1096:101:9e::8) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18; Fri, 24 Apr\n 2026 08:05:25 +0000", "from TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3%3]) with mapi id 15.20.9846.021; Fri, 24 Apr 2026\n 08:05:24 +0000" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=UH9aPMzaQxVu5aX0J5SmgxdWkPfZuWg70cSrwZD7Tb6TiPZLFFnkRuB0ejVyHUTl0bcYi2kL+0dudOD+vym+YGwnknWcqMf9U/KZF6M7mRo3rJaQ0yJwsS5DUX4DrbnNqVIjV7sXyZogZvip9mLp7GBZy6roZGTL8V2/ZCdR7iDvESnVt/jRRPCGmNv8NellUCzP+31PLjJnjJeTqTfSG4BZyccAnkU42jNGMVFr5aOnf18vtUryn6gmne+DxqLjhGk6t+vzs861qxJyOS2j0xH79/+qbfbfeYw1B36JFp75PIraVRmdOdOTSp+z4phywMXNmQYwqU9kWy18LQj75g==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=84a6H1AYkCG3PlZqCD6Dcg7C2Qm8Mm+r6Pi+HNsJuUc=;\n b=vXzep0RvNmwXldgSaeR0RD/0TaN91GgwuuYtLWie8JvnKChMjL/6OJ/EHXO+16jBR42zpwbNuIrUc25SckbjWPhfxWBJnbsWj4Xrgx9Qeabhd778EwTLZB20iy8cphlfycLnXVlPQBhUGFPOVdzGucI4nnSJAhDLUnYK+j+ExbEOTplsau2bx9J74cWEHuNEpSXsO5mCGoL6OA8A0L7Uqaqx/K+y01ee6NXhNSKYUZooLAuvDGtGAsmS8pgvKXqGjvbFWkc/9g1kWvapAli6Xa13gNkScanIDz4hcFzEHRh8+YBk+xw04jbvP9lfCtFPW0frDLKx49XN83P4Bpuesw==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=aspeedtech.com; dmarc=pass action=none\n header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=84a6H1AYkCG3PlZqCD6Dcg7C2Qm8Mm+r6Pi+HNsJuUc=;\n b=YGAwmEaOGVMcY0XXrJnsz7/27wvR/s6l1eyRVrVkuI1FwG9qMHgrJwaY6GCqKHTQEUOWhVv6TCSDimBKNakTNI80xyEh8KjvTbzsRQsCK6Lhp+5Q1e7LwR6shmFQMLo9dRlt880PBybEFMcQ5SMGJm06Ue0xon24M9pX0GrBwQPfkEyiZDMauWG+ui0z7z5WMOjqfbX611TmddwKWzNSDkxwP/sb6mZ5zHOqS61x2+xgn0dOxCiZG9dRvf0NOduU7v3uiz6eV9unTJdKBlewR7fuO9J5Ofy4XNZqPfhzAcJzAvX2Dov3jZ5vghXjmKKoqabqdDEAVoGsKdkk7D56PQ==", "From": "Jamin Lin <jamin_lin@aspeedtech.com>", "To": "\"peterx@redhat.com\" <peterx@redhat.com>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n =?iso-8859-1?q?C=E9dric_Le_Goater?= <clg@kaod.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>,\n \"Michael S. Tsirkin\" <mst@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n Laurent Vivier <laurent@vivier.eu>, Nicholas Piggin <npiggin@gmail.com>,\n Harsh Prateek Bora <harshpb@linux.ibm.com>,\n Ilya Leoshkevich <iii@linux.ibm.com>, David Hildenbrand <david@kernel.org>,\n Halil Pasic <pasic@linux.ibm.com>,\n Christian Borntraeger <borntraeger@linux.ibm.com>,\n Eric Farman <farman@linux.ibm.com>, Matthew Rosato <mjrosato@linux.ibm.com>,\n Cornelia Huck <cohuck@redhat.com>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>,\n \"open list:sPAPR pseries\" <qemu-ppc@nongnu.org>,\n \"open list:S390 TCG CPUs\" <qemu-s390x@nongnu.org>", "CC": "Jamin Lin <jamin_lin@aspeedtech.com>, Troy Lee <troy_lee@aspeedtech.com>,\n \"farosas@suse.de\" <farosas@suse.de>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>", "Subject": "[PATCH v5 11/18] hw/usb/hcd-ehci: Implement 64-bit QH descriptor\n addressing", "Thread-Topic": "[PATCH v5 11/18] hw/usb/hcd-ehci: Implement 64-bit QH descriptor\n addressing", "Thread-Index": "AQHc08Eaxh1bCtBkGUq/Gjwbf+9McQ==", "Date": "Fri, 24 Apr 2026 08:05:24 +0000", "Message-ID": "<20260424080508.53992-12-jamin_lin@aspeedtech.com>", "References": "<20260424080508.53992-1-jamin_lin@aspeedtech.com>", "In-Reply-To": "<20260424080508.53992-1-jamin_lin@aspeedtech.com>", "Accept-Language": "zh-TW, en-US", "Content-Language": "en-US", "X-MS-Has-Attach": "", "X-MS-TNEF-Correlator": "", "authentication-results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=YGAwmEaO;\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=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=aspeedtech.com;" ], "x-ms-publictraffictype": "Email", "x-ms-traffictypediagnostic": "TYPPR06MB8206:EE_|SEZPR06MB5856:EE_", "x-ms-office365-filtering-correlation-id": "394affad-efb9-434a-da55-08dea1d83d18", "x-ms-exchange-senderadcheck": "1", "x-ms-exchange-antispam-relay": "0", "x-microsoft-antispam": "BCL:0;\n ARA:13230040|1800799024|366016|7416014|376014|38070700021|921020|18002099003|22082099003|56012099003;", "x-microsoft-antispam-message-info": "\n TcQP1I4eAAq1M4yga+NQCCJ3Ge9slQPuEAnqm2XZ9jgObQenIDlb1nY6hcskiiGWDc2hh1BjEn4uqEPCDHJ4uPxmdntIrC2JxnTSHcDbA76mujBsuTfMVO9DRI6FYaiJ+6iDk5L6nB5bVr+buYM2+anT5qR2sT7i9bbqRxy6uucJkDC43QYgX599DlawsKgx5qytyiLoYqLitJBFu2RYV4Y8G0BhnOB5rV0IAiS6Ppod/wk+kkO9ioCwvMmmq2KQPQ4mK1W7w6raktdaHlmZa+Xca+82gv174djFuCjYsZtO8Uy8w6D3CoGpSRK/nDXyK2OMpiP1hTGHgifFHXJ1ybdhkx9GcK6Fu7lUFOK4+MckSEEdCi3ZhjRbA2OAXwCznoGcjlSYBWmj2+iDdYzzItgC0GPWsIsAyW+KzKrbslVRZeqPB+dEJBPA6QMa0GqJ4TcMSGdNW3i9tNjPeoj0HSEmLPAx4SFqG/c/AYJoMdeS4GnPjFmQAWF62ryNA3F2pJO9kNJI2svUZ1NlPg7DCadAPu0KIwArytbPPRZNyesJOHs6pHMlQucM5qtWv1OfYIYgCNa9sM88v6ud3c6rcl18dVoPeRR+2mB4lUko33CFJs/EGzejXfsGK0u8Y5D/yq3X5pxDUcyS3TLs7OWF34zw0iv55b1CLQ43O061QfeJiP//7zsB8dSvhAQ134hIqP/RVIu2RNSfN4sVamsFrciZacW0eL2MmMfp8i6xfhZxLazH3Iwx+HkFBpXR9GVtjlJWq1G42r7ceIo/VyjtZz/gqkm/V4GnNIvJdXngi2unWSDp7Cn//Zoy1A9mc7k6", "x-forefront-antispam-report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:TYPPR06MB8206.apcprd06.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(1800799024)(366016)(7416014)(376014)(38070700021)(921020)(18002099003)(22082099003)(56012099003);\n DIR:OUT; SFP:1102;", "x-ms-exchange-antispam-messagedata-chunkcount": "1", "x-ms-exchange-antispam-messagedata-0": "=?iso-8859-1?q?YYXMYMqKbMBn8cfXE/6kHEy?=\n\t=?iso-8859-1?q?adLtzKkXBdCgnRj/NdRXRBbgj5kaSfUiQD0kbOaLPO6Hyvdn1itqUdUt3dck?=\n\t=?iso-8859-1?q?CqMD8PpEzleuNCKFtXgv2qMcppfdDyZvq+2Ql0ohqNnITYjyty9RsArasa+r?=\n\t=?iso-8859-1?q?YBooEqoHvyHccnFTwObshpepNPFpqCxirySbZRtF1AeIFvO4lMJZZSYlvpG9?=\n\t=?iso-8859-1?q?Af9cjTzyuPoeTJucZ0blVyGzX8l4O8wVRiuf14znZjS2pWmus9Jyo6SLA1dJ?=\n\t=?iso-8859-1?q?HCwWaLdA6f/0CmEPjWvEQMQiq5G/ObIhMI7F0FkwH0UUPL9+bkcQ3bgiu/7R?=\n\t=?iso-8859-1?q?Y3bCKBauK6azunHgbE6k7urUrpcHq++JXTRO1flCPMvPu3RJYmvticWCJAjk?=\n\t=?iso-8859-1?q?r2Ewq5Lh1g1BhAqK3rtq+924j5Y5PCthl6sP1dDbeA1YinQ0UGW+ug+xtK6/?=\n\t=?iso-8859-1?q?t0iTyg3fZTjoniZSdRFtK4Q0ZQydFl2dw49bqq2rl7QPe2s5tBtYtKn/NBLD?=\n\t=?iso-8859-1?q?uNo4kd5hC53aWxtR5BFelzGImydCGp7ykpT7wRXeBw5wYsgX7BIIk9ksUefT?=\n\t=?iso-8859-1?q?nvuwWOL28qp7l36Anx6MGzp+C0C4fSpa/l5ydZrZHr2EFL51EAnREUxQWDGR?=\n\t=?iso-8859-1?q?093a/4GZtRuulluzwdKOvDRVUFZpNm25jz4wukqZVc4LDfaPa7xeyPpPjvk7?=\n\t=?iso-8859-1?q?7kMT71rjWMjOX+GtuHzflPwKKu9HIqeAZAnnkpdsU/lvlmzigegRNm1Eeepq?=\n\t=?iso-8859-1?q?SXmgB95aTLKk2OYQMwaqq+xw39gmbtXF4km3xK1tRp1xJMolFcQGBD9eRUUD?=\n\t=?iso-8859-1?q?HM3h/wqq3aahSjroEvIw9VRWctnczrir7JQ+RxQrX8OqA/1iaqKMqvYWOeh3?=\n\t=?iso-8859-1?q?wMejg4SYERShIjyGboLedNWtcQIjhYbviV8OwwGQFm/8e67PeH016gDQ/U5W?=\n\t=?iso-8859-1?q?rojrYeOrwCX0e/HP7Pj9POOeNGb3b61tFe4+Mpd7IDozJux38MJbF45bdz9T?=\n\t=?iso-8859-1?q?3A6ZMB4MjOu0YzjJOfndkF7Cy6o54RJyvpFMwneaMs+6gpHk52gk6a/B43C6?=\n\t=?iso-8859-1?q?qCe97uMfU3n17UqqMip97AaeRLf23cIWCOjOwReoCpe+tLvNL4c4zUKiDWgu?=\n\t=?iso-8859-1?q?UYoYxsZoMmluFpOaYJzjOnJGl4gTgJBytBFILARu/1UjqYOw34U9/nggPcMU?=\n\t=?iso-8859-1?q?o87c5QfLf3YJZsAFBRjL2/1M+OchvLvRf8xL7wsQQX8QOmuDAb85ZrydBxHw?=\n\t=?iso-8859-1?q?Sdj25ncZS3xznWXi2a1Ir9HREbkH/X1KN96YxiiJ27ulN60O++GW5KwZZWu5?=\n\t=?iso-8859-1?q?HekNy+D6gm0uAxcDbZm5VcR1iXlHIUjdxmvDQ2kHuZ4+/3Hxkt7Q0aM6T51/?=\n\t=?iso-8859-1?q?9d2h2hTvtHw8ssldtWR64RUEXoyCSZyseofVpS3yyfR/axOji8OPuePdHJhm?=\n\t=?iso-8859-1?q?A3QOwDKLSrkBoBOJwD+yHqTNtPejvzHY7ihL8ieC1Qy1EbWy2ZV8pxed4c+C?=\n\t=?iso-8859-1?q?lTguQh0QuDv8Q0kydYfiAHV8EjHJK+UvDlRLoZCgH0EB2tPlJwkn3mHT7SE4?=\n\t=?iso-8859-1?q?iMOWULqJpBRU6vDxM45Kh6XYS9hWrjSVYfzghUy4NUXa5HDCwCA01eGLZfxQ?=\n\t=?iso-8859-1?q?3veg1vmiIC3mwiDxp4ip3VZU+ePWNe7l9XF7rYzL2BsnJlnytzoenjc17L/x?=\n\t=?iso-8859-1?q?9Tk4Py8KsU9QH/z+Bmxuqli4ISR2zL4WyUA0e4EXf19lpTNJKghIP+XfiKpA?=\n\t=?iso-8859-1?q?GmOCBy7Ru8h5qAgM/2v/O6Ev1z4qgfGjB9T5DEKZZKyHYOA=3D=3D?=", "Content-Type": "text/plain; charset=\"iso-8859-1\"", "Content-Transfer-Encoding": "quoted-printable", "MIME-Version": "1.0", "X-Exchange-RoutingPolicyChecked": "\n LDI2XEl7jnL8yMocssCrp8rcCiEFAaqFZzRywnRUTXe4QRRrblNm+csqhPYfSYL6gojpnETc9trZgM5zRugPq137BagIvZm7pBtkPdhvhogJK2FlNgnypMpu40+tL5prNwOqotubcNx0wyuZpCYga9uE1xP1xTLhFX0oL/hH2Y5ho3xkMm+GDFNa7hxeJLlhbEriuPY5Ps6DJI7WesXhnvJwhNBvj8dzyCAVb4vBpu+a7x+5wGdxfwDzFGmHwyavyrHzzxTAf3UF31GJcE+iHehITfP1sZQh7lnoddZG+nF1FNBqRqVFAf/5PJCbCdLxOAkyXLUBJNug+r6mqCUyMA==", "X-OriginatorOrg": "aspeedtech.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-AuthSource": "TYPPR06MB8206.apcprd06.prod.outlook.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 394affad-efb9-434a-da55-08dea1d83d18", "X-MS-Exchange-CrossTenant-originalarrivaltime": "24 Apr 2026 08:05:24.2774 (UTC)", "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted", "X-MS-Exchange-CrossTenant-id": "43d4aa98-e35b-4575-8939-080e90d5a249", "X-MS-Exchange-CrossTenant-mailboxtype": "HOSTED", "X-MS-Exchange-CrossTenant-userprincipalname": "\n 1pFv5ALz+mZy8YxMW/W6IjQ7D7V8x9sPv6m6CFGV3VInnwrL3CBM5/t8CDgYv5bvDjZpjoZCif1yKXmmtn4ak4s+3VL927GGFdekfnXXLKs=", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SEZPR06MB5856", "Received-SPF": "pass client-ip=2a01:111:f403:c405::7;\n envelope-from=jamin_lin@aspeedtech.com;\n helo=TYDPR03CU002.outbound.protection.outlook.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham 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": "EHCI supports 64-bit control data structure addressing when the\n64-bit Addressing Capability bit in HCCPARAMS is set. In that mode,\nthe CTRLDSSEGMENT register supplies the upper 32 bits which are\nconcatenated with 32-bit link pointer fields to form full 64-bit\ndescriptor addresses (EHCI 1.0, section 2.3.5 and Appendix B).\n\nThe current implementation assumes 32-bit QH descriptor addresses\nand directly uses link pointer values without applying the\nCTRLDSSEGMENT upper dword.\n\nIntroduce a helper, ehci_get_desc_addr(), to construct full 64-bit\ndescriptor addresses when 64-bit capability is enabled. Update QH\ntraversal paths (async list walk, horizontal QH link, and periodic\nschedule entry handling) to use the translated 64-bit addresses.\n\nEHCI 64-bit buffer pointer fields are defined in Appendix B as\nsplit 32-bit low/high parts located at separate offsets, rather\nthan a single contiguous 64-bit field. Therefore, the buffer\npointers cannot be represented as uint64_t bufptr[5] without\nviolating the descriptor layout defined by the specification.\n\nIntroduce ehci_get_buf_addr() to construct full 64-bit buffer\naddresses from bufptr[] and bufptr_hi[] fields. Use this helper\nwhen calculating transfer buffer addresses so that data buffers\nabove 4GB are correctly handled.\n\nAlso add bufptr_hi[5] to EHCIqh to support 64-bit buffer pointer\nfields as defined in Appendix B.\n\nWhen 64-bit capability is disabled, descriptor addresses remain\n32-bit and existing behaviour is unchanged.\n\nNote: Similar split 64-bit buffer pointer handling is required for\nqTD, iTD and siTD descriptors, which will be addressed in follow-up\nchanges.\n\nSigned-off-by: Jamin Lin <jamin_lin@aspeedtech.com>\nReviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n---\n hw/usb/hcd-ehci.h | 4 ++++\n hw/usb/hcd-ehci.c | 47 ++++++++++++++++++++++++++++++++++-----------\n hw/usb/trace-events | 2 +-\n 3 files changed, 41 insertions(+), 12 deletions(-)", "diff": "diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h\nindex f1f2fde578..3428839ec6 100644\n--- a/hw/usb/hcd-ehci.h\n+++ b/hw/usb/hcd-ehci.h\n@@ -141,6 +141,9 @@ typedef struct EHCIqtd {\n #define QTD_BUFPTR_SH 12\n } EHCIqtd;\n \n+/* QH overlay: altnext_qtd, token, bufptr[5], bufptr_hi[5] */\n+#define EHCI_QH_OVERLAY_COUNT 12\n+\n /*\n * EHCI spec version 1.0 Section 3.6\n */\n@@ -194,6 +197,7 @@ typedef struct EHCIqh {\n #define BUFPTR_FRAMETAG_MASK 0x0000001f\n #define BUFPTR_SBYTES_MASK 0x00000fe0\n #define BUFPTR_SBYTES_SH 5\n+ uint32_t bufptr_hi[5];\n } EHCIqh;\n \n enum async_state {\ndiff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c\nindex b23ff92e12..5ffd4c9885 100644\n--- a/hw/usb/hcd-ehci.c\n+++ b/hw/usb/hcd-ehci.c\n@@ -147,6 +147,23 @@ static const char *addr2str(hwaddr addr)\n return nr2str(ehci_mmio_names, ARRAY_SIZE(ehci_mmio_names), addr);\n }\n \n+static uint64_t ehci_get_buf_addr(const EHCIState *s, uint32_t hi,\n+ uint32_t lo, uint32_t lo_mask)\n+{\n+ uint64_t addr = lo & lo_mask;\n+\n+ if (s->caps_64bit_addr) {\n+ addr = deposit64(addr, 32, 32, hi);\n+ }\n+\n+ return addr;\n+}\n+\n+static uint64_t ehci_get_desc_addr(const EHCIState *s, uint32_t lo)\n+{\n+ return ehci_get_buf_addr(s, s->ctrldssegment, lo, UINT32_MAX);\n+}\n+\n static void ehci_trace_usbsts(uint32_t mask, int state)\n {\n /* interrupts */\n@@ -440,7 +457,7 @@ static bool ehci_verify_qh(EHCIQueue *q, EHCIqh *qh)\n (qh->current_qtd != q->qh.current_qtd) ||\n (q->async && qh->next_qtd != q->qh.next_qtd) ||\n (memcmp(&qh->altnext_qtd, &q->qh.altnext_qtd,\n- 7 * sizeof(uint32_t)) != 0) ||\n+ EHCI_QH_OVERLAY_COUNT * sizeof(uint32_t)) != 0) ||\n (q->dev != NULL && q->dev->addr != devaddr)) {\n return false;\n } else {\n@@ -1538,7 +1555,9 @@ static int ehci_state_waitlisthead(EHCIState *ehci, int async)\n EHCIqh qh;\n int i = 0;\n int again = 0;\n- uint64_t entry = ehci->asynclistaddr;\n+ uint64_t entry = 0;\n+\n+ entry = ehci_get_desc_addr(ehci, ehci->asynclistaddr);\n \n /* set reclamation flag at start event (4.8.6) */\n if (async) {\n@@ -1566,8 +1585,8 @@ static int ehci_state_waitlisthead(EHCIState *ehci, int async)\n goto out;\n }\n \n- entry = qh.next;\n- if (entry == ehci->asynclistaddr) {\n+ entry = ehci_get_desc_addr(ehci, qh.next);\n+ if (entry == ehci_get_desc_addr(ehci, ehci->asynclistaddr)) {\n break;\n }\n }\n@@ -1693,7 +1712,7 @@ static EHCIQueue *ehci_state_fetchqh(EHCIState *ehci, int async)\n }\n \n if (trace_event_get_state_backends(TRACE_USB_EHCI_FETCHQH_DBG)) {\n- if (q->qhaddr != q->qh.next) {\n+ if (q->qhaddr != ehci_get_desc_addr(ehci, q->qh.next)) {\n trace_usb_ehci_fetchqh_dbg(q->qhaddr,\n q->qh.epchar & QH_EPCHAR_H,\n q->qh.token & QTD_TOKEN_HALT,\n@@ -1876,10 +1895,12 @@ static int ehci_state_fetchqtd(EHCIQueue *q)\n \n static int ehci_state_horizqh(EHCIQueue *q)\n {\n+ uint64_t addr;\n int again = 0;\n \n- if (ehci_get_fetch_addr(q->ehci, q->async) != q->qh.next) {\n- ehci_set_fetch_addr(q->ehci, q->async, q->qh.next);\n+ addr = ehci_get_desc_addr(q->ehci, q->qh.next);\n+ if (ehci_get_fetch_addr(q->ehci, q->async) != addr) {\n+ ehci_set_fetch_addr(q->ehci, q->async, addr);\n ehci_set_state(q->ehci, q->async, EST_FETCHENTRY);\n again = 1;\n } else {\n@@ -2205,6 +2226,8 @@ static void ehci_advance_periodic_state(EHCIState *ehci)\n uint32_t entry;\n uint32_t list;\n const int async = 0;\n+ uint64_t entry64;\n+ uint64_t list64;\n \n /* 4.6 */\n \n@@ -2229,12 +2252,14 @@ static void ehci_advance_periodic_state(EHCIState *ehci)\n break;\n }\n list |= ((ehci->frindex & 0x1ff8) >> 1);\n-\n- if (get_dwords(ehci, list, &entry, 1) < 0) {\n+ list64 = ehci_get_desc_addr(ehci, list);\n+ if (get_dwords(ehci, list64, &entry, 1) < 0) {\n break;\n }\n- trace_usb_ehci_periodic_state_advance(ehci->frindex / 8, list, entry);\n- ehci_set_fetch_addr(ehci, async, entry);\n+ entry64 = ehci_get_desc_addr(ehci, entry);\n+ trace_usb_ehci_periodic_state_advance(ehci->frindex / 8,\n+ list64, entry64);\n+ ehci_set_fetch_addr(ehci, async, entry64);\n ehci_set_state(ehci, async, EST_FETCHENTRY);\n ehci_advance_state(ehci, async);\n ehci_queues_rip_unused(ehci, async);\ndiff --git a/hw/usb/trace-events b/hw/usb/trace-events\nindex 8c90688bb3..67249d69c2 100644\n--- a/hw/usb/trace-events\n+++ b/hw/usb/trace-events\n@@ -113,7 +113,7 @@ usb_ehci_dma_error(void) \"\"\n usb_ehci_execute_complete(uint64_t qhaddr, uint32_t next, uint64_t qtdaddr, int status, int actual_length) \"qhaddr=0x%\" PRIx64 \", next=0x%x, qtdaddr=0x%\" PRIx64 \", status=%d, actual_length=%d\"\n usb_ehci_fetchqh_reclaim_done(uint64_t qhaddr) \"QH 0x%\" PRIx64 \" H-bit set, reclamation status reset - done processing\"\n usb_ehci_fetchqh_dbg(uint64_t qhaddr, uint32_t h, uint32_t halt, uint32_t active, uint32_t next) \"QH 0x%\" PRIx64 \" (h 0x%x halt 0x%x active 0x%x) next 0x%08x\"\n-usb_ehci_periodic_state_advance(uint32_t frame, uint32_t list, uint32_t entry) \"frame=%d, list=0x%x, entry=0x%x\"\n+usb_ehci_periodic_state_advance(uint32_t frame, uint64_t list, uint64_t entry) \"frame=%d, list=0x%\" PRIx64 \", entry=0x%\" PRIx64\n usb_ehci_skipped_uframes(uint64_t skipped_uframes) \"skipped %\" PRIu64 \" uframes\"\n usb_ehci_log(const char *msg) \"%s\"\n \n", "prefixes": [ "v5", "11/18" ] }