{"id":2223000,"url":"http://patchwork.ozlabs.org/api/patches/2223000/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260414080025.3005916-10-jamin_lin@aspeedtech.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","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":"<20260414080025.3005916-10-jamin_lin@aspeedtech.com>","list_archive_url":null,"date":"2026-04-14T08:00:36","name":"[v2,09/17] hw/usb/hcd-ehci: Implement 64-bit QH descriptor addressing","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"879eb41c5fb93fefd0a02d4a4e8349611c963905","submitter":{"id":81768,"url":"http://patchwork.ozlabs.org/api/people/81768/?format=json","name":"Jamin Lin","email":"jamin_lin@aspeedtech.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260414080025.3005916-10-jamin_lin@aspeedtech.com/mbox/","series":[{"id":499795,"url":"http://patchwork.ozlabs.org/api/series/499795/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=499795","date":"2026-04-14T08:00:26","name":"hw/usb/ehci: Add 64-bit descriptor addressing support","version":2,"mbox":"http://patchwork.ozlabs.org/series/499795/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2223000/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2223000/checks/","tags":{},"related":[],"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=BVLO10EL;\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 4fvxcV4bhCz1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 18:03:54 +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 1wCYhY-0003ZC-GV; Tue, 14 Apr 2026 04:00:52 -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 1wCYhW-0003Xh-2d; Tue, 14 Apr 2026 04:00:50 -0400","from mail-japaneastazlp170120005.outbound.protection.outlook.com\n ([2a01:111:f403:c405::5] helo=TYPPR03CU001.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 1wCYhP-0005tv-O3; Tue, 14 Apr 2026 04:00:47 -0400","from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by SI4PR06MB8423.apcprd06.prod.outlook.com (2603:1096:4:299::18) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr\n 2026 08:00:38 +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.9769.046; Tue, 14 Apr 2026\n 08:00:37 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=pw0gcrKW5gokvjyAwBSvmI/5nyP/9xqovaihLHmFVT+UsAAmOrF89QtZG4DwInupnAT2F0g9Rjq/rI6WU6BXb6PxFqeNGtxk1gqZr3tJKwL/p+ZrHrnduBFsNKvBuw5Y4rUQvWzvvf+VendbqJ2JgOzKs5D4rwLe7F1E2xYSv1kK7WV/HniVFg5+d/qwRggmGKT+h3X7y19IOah14TKjWGZbFAKiVnQ0VQw9oakNMaSesSWE0PtuEEF4A7UtkElL0p4yJIzy1fc94BqSLZVlkN6Rp0NL4bu0EyiEiYl/bNfreSjBExhgPHiCQkRzwgnblnKXu0wxyceIwWMlnBRJbg==","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=MvnFkrtpXH4axWxrpZt231+nV+QZRS1GNqSEMuOKNjM=;\n b=Rrm+EYT5RYfgCSRFm+VAt3mmUajjszS4rH5aHjujlhdPTBUEkBc5x2VAKflL2w6D+i6ke8OEIThm4IiFpxZI37gXqyzwCIGFD6Kk/UKKmGEe069acusRPlJDpY6JmYdxuzSjXEw29NbPuP/IxSXbROwNAoz6nya4wTb6A3jnCnOBWLU6Ymc76/55PaLByWf5g1us2XMJ+pUEXlRuHXIu3Ul91QWUVWH7Zf21O1ispOzVNpy7HkhD4PGJfYgwNbNhddqCVMSlqtd0jnKPYTanbBgUMUn7UNZYH38lAqlCaP4sLW697QNMwjBOk0VH4UVBRx+UgVL9pbnipwDJKetVEw==","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=MvnFkrtpXH4axWxrpZt231+nV+QZRS1GNqSEMuOKNjM=;\n b=BVLO10ELOHRyu64DZtR2QYB50dB86jNKUOzwysmhNFk23wac9gy1eoXOxrV+s82jXq1ADx3MEDUAUcVqFZ7zy7X7BUnpkponlDO4lgL5kswyNbNGHitXVCm9zxNT0iZqXpr4w9k5sPNmi0whxaJ+OUj4/o6jGJ52Yi2BYT8k10aw5j7WYJ6n9xRso7xzNJLTPzbKMP/IFrgP0l2KVsFYhxWKVmVS3XCwIjQgdT83JpR002jThJVquyCvrgN8Mx2nxUlCL9eRFdyrfXxO2cP/bCMHA4fq88hZ9HEQxJkIUyZTfhZmMbfhLa/gwORQWoOvKEGRdoVXO1kFpi+/Vwehcw==","From":"Jamin Lin <jamin_lin@aspeedtech.com>","To":"=?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 \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>","CC":"Jamin Lin <jamin_lin@aspeedtech.com>, Troy Lee <troy_lee@aspeedtech.com>,\n \"flwu@google.com\" <flwu@google.com>, \"nabihestefan@google.com\"\n <nabihestefan@google.com>","Subject":"[PATCH v2 09/17] hw/usb/hcd-ehci: Implement 64-bit QH descriptor\n addressing","Thread-Topic":"[PATCH v2 09/17] hw/usb/hcd-ehci: Implement 64-bit QH descriptor\n addressing","Thread-Index":"AQHcy+TH2pgmCK05ZUmQPzt4XoYVlA==","Date":"Tue, 14 Apr 2026 08:00:36 +0000","Message-ID":"<20260414080025.3005916-10-jamin_lin@aspeedtech.com>","References":"<20260414080025.3005916-1-jamin_lin@aspeedtech.com>","In-Reply-To":"<20260414080025.3005916-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=BVLO10EL;\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_|SI4PR06MB8423:EE_","x-ms-office365-filtering-correlation-id":"c3eb7b70-382e-42d4-4f48-08de99fbea02","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|366016|1800799024|376014|38070700021|56012099003|18002099003|22082099003;","x-microsoft-antispam-message-info":"\n po4pDmxr6SpeSe9Qe3MdGrmFMxQgya9gNVq/wwRgTzvyQ9CoydNDx6wsmB6EBqg8CDD1f6WknJg4y6yxW4vd03zhVyOylY/cPvsYRiXcyLoP/RfJjqsTIhkoNihEeudtES8m+ssSLDYGKnKgaMPmavbU+tAHvwKgwV9bDLT/nRKk9c59mTMJbPNco+Rmwdq0VLKkNQPqofF6RXjQabZXGRjcRKIVFVCgYraPuSMGj9LoiQRuYa1qeB4ghQZnMNDdq/Sa/3XoSu0xShqcf5jQkI917P84cN4ZkTd5dV5jAuAiDOd22hydw2xIAOeU1MMjvnb2SHxthBXDilz/WvgjqPFJvjuNubqkAbqbySvULov/9j3If7FF4swvR0ZQ/twef48LAj/ITRy8dX+51EwYBMvXYHWs/fzAceOpvyudm4LcGjeG4SnKn94lS9tB3gDVoyuIbdmZlnSog1Ffd/+4M4/Kb6IdLyPydPRpMr1XeuF12aE6QxM7FvE/7kgflTbu6pI4KG5KR45Z3BrnRHLM/4eLib16Glq3BeJ/hFkBt0jn2MWdhM4LwNq92M+3a1undfU+47q+wDXG+ZCRki7XPtV7FqfFTRbjEdWyKNZ574AA4/14ETelg0BWCDF5spTpPu+QxbTBWfovNlbB2SfWNcdaznNZhU8A3L9FopkTNXq0RBUQFfVUuRrymm2EtdA1j6co8dy8eFEDR2auEx7TQDuToaiLFIXqLZ6rYV62QT7M1+IupuXMqom1A6K6iNGxIvDDhRuuQtSAJ2TmTwFoZOYLgFqnRUnXWg/XJ38nkxk=","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)(366016)(1800799024)(376014)(38070700021)(56012099003)(18002099003)(22082099003);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?iso-8859-1?q?xZ5yYmn/sO5yKn5mBX+QIFb?=\n\t=?iso-8859-1?q?yUBwmg+1sschNPSXO7bo2mpAfyy7B2Jsuxtl8/DXjw+9B1AkpDm/z50adLoM?=\n\t=?iso-8859-1?q?2oqq+aL5qr28Hjd+f1e/XNjtCVzjivZtQnW0aAK2HrivGY9lXv54X2u4Wipv?=\n\t=?iso-8859-1?q?HdZ9Ot4yQu2HbA7BiGerygaFkpdV1HZFTW0mv/9RGAJPt4B7zB3a08rAscfD?=\n\t=?iso-8859-1?q?ZJCn6U1KhcqetpTS6ItMoF1P81k0fhysdmjQcyOxuHKKANhJWFfqkPFd/rtt?=\n\t=?iso-8859-1?q?tRZEhfBFJX/FaX+VrM4qwnJlvkHv6n8kwTpTXIYUTPrsuHeAXWd+T69GIJXB?=\n\t=?iso-8859-1?q?qqKveFo/yAZp+kgYvft9B1+W3RvfiuX/aOV3bsjjAXAc5GffrHJ5MFc6pton?=\n\t=?iso-8859-1?q?+SEGjn03LfAWdE+PYAWLk+T/IQr/wdbktLaMLsP6MTIU695B6MOQ0MEMW+ba?=\n\t=?iso-8859-1?q?kYj2xyt4bc/oljMpm1bBAV3TZH63XidAXkX0AJiqpEOfaE5+Z5cBz+R43lcS?=\n\t=?iso-8859-1?q?8Zh2lBYtS9jbCOkjS0Jy9ybWyZs5wvgnZ0Z16ILgkozQQebgXadsYrBj7dWC?=\n\t=?iso-8859-1?q?RB7PIvpQFM81jaci9BvxXL3xDkotoUUHFYAvAyLuoTrqRnMCHh5CSQriC13F?=\n\t=?iso-8859-1?q?pl5K1Uyk6G8HE0lIy+/d474PFQv6qcRCGspFOmfB+l7H4vHK1D7QKU36KaEQ?=\n\t=?iso-8859-1?q?r7K5k6EMK7Ky/thjRoQn/tju13Y6L7ijzIY8FVFlc/KXnt5X61GAgHbgFeeg?=\n\t=?iso-8859-1?q?drZI7NMpr5O5a6TbxGswr2cbxCP0ckWJ6Lru8aGT77B4tsPtWVhuwv7DWjEO?=\n\t=?iso-8859-1?q?2G/IA3Z6QRHsMVMMMj347CeDtIGigVrCkBw7HZW5pQPTkcL1aOchnkIh62UA?=\n\t=?iso-8859-1?q?BBCOLlasBZW8kvRbmaTAIvWeIaLQTtXGbkBl12UjQZAKxzt+OefHxf2FeiUc?=\n\t=?iso-8859-1?q?BYMwVed+nJjfHWkiZcFCoHXxlgvVwxFQsw/WvZvOMUePs9iV7Sk3k9CR++Ls?=\n\t=?iso-8859-1?q?N0/Vd3wbu7zC7h0e+srpP2YzH5sEpV5KCMmGz9vA82p3jXq58RwYaWzkQ0MF?=\n\t=?iso-8859-1?q?DG3J6rr3f16Ykw3MJOWsuA9JEMeEt3liit1/n1sjGFrIukxUglnBI1cVhLlS?=\n\t=?iso-8859-1?q?wPIkQbnrAL1Fp0DiQ6yOTTU9J33fLq/pf6op7b6zUv/B77tH2ZhNOy95GAK3?=\n\t=?iso-8859-1?q?wilNjClUvtoN3S+M4Asvezt7Q4xk0HHPSI1M+FJQDLvVdZQSgZwEKA2PC2s7?=\n\t=?iso-8859-1?q?IhmtS2lJ2R8tCPRDZd3EX6/5JMvc1ZL/dXns6P5fBBkYurLabLYm5f12sEBW?=\n\t=?iso-8859-1?q?OUoxQxvUQObB+wwmMU1EehR1ttKUPeKmCsWLp1HkTirO13TP/3TyFAUQzh6k?=\n\t=?iso-8859-1?q?botgZwAY2EyNJ1G84pAebaeTlbSjIaJhtLW1Ww+Iyy46HxJvVyA+11y4evU1?=\n\t=?iso-8859-1?q?oT3AYQ9rtBFPxb1BQk8qaxq2vYwY9ktUSu9vFQrKHOO/3mDX8oj1UkQ3U/Iy?=\n\t=?iso-8859-1?q?BrfckLHXTFuRQ3FIPlROdHJ3To13npznFvvvh6Q7JgWFLBv1L51HWt9MMz4x?=\n\t=?iso-8859-1?q?doDUZiQ8iJEYuF9OLjTVQ89YgUvSm0+bjs8i1RpYFbNmmc2LD++ZPl4UVgLy?=\n\t=?iso-8859-1?q?iTHT37Yrn5xDItHrposhc77Ha/fKPmdDhhYMye4cIK54lc7/4zM9j8cVTic3?=\n\t=?iso-8859-1?q?XA2GSFJLCCR6CDR4msFyCodHZXzoRZp9XxiADA6G2RFTJ5+/DP58c/d9yuGP?=\n\t=?iso-8859-1?q?rqDhd6c9YBD2/JENSYzGfrdaK5HTlWAUBrWiY8yJBgNrX0g=3D=3D?=","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n MkqQDiB9XjrTDDVtuX/cdleu2XlDnzErKgUcppinqXzCxrXLyQ09B5sERNhrzqMxF371tNb9fCb3iDk3SxhSHQkBlItPjS/EaAL0P4iD5blBLm5Ymrh9Bd/XCJRmkjUgELVgD7Zs0vezHXMpDfgZcoaOmdUmvCizEFC8sIHIZXkxdyGp5G83IvZnCyTc2iY7RuAlMQAx6BepFJlLTJIFp4123MIK+GvQp3BL+6Y4W7igpIuQGjo9WzmGwh9tzaYCXjijEK6tolY7UKhPGAwsY2eaLnLOcMXozX27s3wH3aYCeqjfUupCVq6a/k6oghKDXy007KZ30YocTbVfgZ6uNA==","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 c3eb7b70-382e-42d4-4f48-08de99fbea02","X-MS-Exchange-CrossTenant-originalarrivaltime":"14 Apr 2026 08:00:36.9808 (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 kulnf8EQqPTMwZxi2AzUR1QTekdC4e2squmtokYV446YQC/KDdTTnEnr737mOUs9koolettQn2h5OWNU8pyiVEYJX75d+8XJztphiPVzV/Q=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"SI4PR06MB8423","Received-SPF":"pass client-ip=2a01:111:f403:c405::5;\n envelope-from=jamin_lin@aspeedtech.com;\n helo=TYPPR03CU001.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,\n SPF_HELO_PASS=-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\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\nSigned-off-by: Jamin Lin <jamin_lin@aspeedtech.com>\n---\n hw/usb/hcd-ehci.h   |  4 ++++\n hw/usb/hcd-ehci.c   | 48 ++++++++++++++++++++++++++++++++++-----------\n hw/usb/trace-events |  2 +-\n 3 files changed, 42 insertions(+), 12 deletions(-)","diff":"diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h\nindex fe4c508c32..773f376834 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 54a1a6f7f3..d1d68b0342 100644\n--- a/hw/usb/hcd-ehci.c\n+++ b/hw/usb/hcd-ehci.c\n@@ -147,6 +147,24 @@ 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(EHCIState *s, uint32_t hi, uint32_t low,\n+                                  uint32_t mask)\n+{\n+    uint64_t addr;\n+\n+    addr = (uint64_t)(low & mask);\n+    if (s->caps_64bit_addr) {\n+        addr |= (uint64_t)hi << 32;\n+    }\n+\n+    return addr;\n+}\n+\n+static uint64_t ehci_get_desc_addr(EHCIState *s, uint32_t low)\n+{\n+    return ehci_get_buf_addr(s, s->ctrldssegment, low, UINT32_MAX);\n+}\n+\n static void ehci_trace_usbsts(uint32_t mask, int state)\n {\n     /* interrupts */\n@@ -440,7 +458,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@@ -1536,7 +1554,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@@ -1564,8 +1584,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@@ -1691,7 +1711,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@@ -1868,10 +1888,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@@ -2200,6 +2222,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@@ -2224,12 +2248,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":["v2","09/17"]}