From nobody Fri Aug 21 21:26:30 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass(p=quarantine dis=none) header.from=aspeedtech.com ARC-Seal: i=2; a=rsa-sha256; t=1787213621; cv=pass; d=zohomail.com; s=zohoarc; b=PjjMfsjsxE7Cj2OSuilueKuRJjgvaW1H8VpSP+M+tgPDXls4C2D24ND7BOzfmbWOAcKC4rfWYY0rlV4QTZE+0ri6vlx1t/qdYYW3/k+CoMMKsNnEWq8X3IluVWJ6ZIIyfYBtdxDzcjEpDe+SbkPEMBhZEyvZLXko11y0srcsP9w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787213621; h=Content-Type: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=7Q1pGueYLUyYTXY4N/1a82fyMGH+6fLDGpvDo7WfpMA=; b=LZhkCxmmOXWn1CdER0mj1bZIwZcM4BQBxONikR48WHqMJDDYFiIFjRnDZ9B3BjOb1+czc0DDlbsaXgFIALTX048tF/XL+W8qnga3idjbaFPH2qmopZxTtmGr7L2Vrwy4otzjvvMvcnGsCcLKqMOdBpvbNIg9DE/eMQCgxFb92LI= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787213621581886.4781883392042; Thu, 20 Aug 2026 01:13:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwxsw-00029e-FR; Thu, 20 Aug 2026 04:12:26 -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 1wwxsv-00029J-2E; Thu, 20 Aug 2026 04:12:25 -0400 Received: from mail-koreacentralazlp170130006.outbound.protection.outlook.com ([2a01:111:f403:c40f::6] helo=SEYPR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwxsr-0001n5-J9; Thu, 20 Aug 2026 04:12:24 -0400 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com (2603:1096:400:1cc::10) by TYZPR06MB5661.apcprd06.prod.outlook.com (2603:1096:400:28e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 08:12:09 +0000 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3]) by TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3%6]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 08:12:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Fww/J8p0vXIPGo2k3W25HBSluDQ/HdqUSIHrVwKgBWsPlUkBiCmZEI7G7v6S6OGsBNfCrE3NnjjZGeCkBYPcnctDWYahSTwJiU5w443UJ5O3VpCCTpK5IVW2pSxGRhkXutI2sZRWe+1WwuqMUOOv0GCsCGe7bREFg6xh7GVdi6c1dbPlSYT1odfCj9QEhCnFnd22/Ov5w+dQzCTjYGDTMq0eEb2gB6TjONsdTqF5qyYK+1uZBHIy6dZ3fRLGenQjRy+TFQ0kzB8lHhAHri5LP7jXzqXNc/ow7kxqOLztKHdeQ9wMkVphpE4t3fP/xBIeSVmtsapYO3fcU0JlOT4d8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=7Q1pGueYLUyYTXY4N/1a82fyMGH+6fLDGpvDo7WfpMA=; b=vliDdyTmqtNsC2kjBl55INI2qsoFIQynEBYhoVWUkOQtEO5my/qLUg+jG7TP/QmX8KYneMiGU73EGHsH/rl+eU96sv4U5yIFPrkUFOt6Vk08tOKF+Uk/Agk11AZFjMCQQG4B0CPYjW5k+APL7t2xPyR+/DPrGBC/0+uVYEnd69a4JufuXUfQyP8Djh071xq3QWl3Du1EyVtBSYYz9PSTV6JsbT4UASV1+loYm4japZI2mFCO+mglbXFOfVQREZ7c4DoGuoROyDrH/OvK7d6SnC+VTDbkxkn+0DBp5lFuz/+RrbxWaAP+HTn9XCUv+Q7ldC3XUawK/4MNLMrUGKKw0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none 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; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7Q1pGueYLUyYTXY4N/1a82fyMGH+6fLDGpvDo7WfpMA=; b=pdTsjK2Aczxwz/B3F1klxCpnOb0YcnO8N7N1efRCa1UspzxsADgZWMVER+EhoChGjusmgZ8jVIKy9A/sgerb6tVum2PDXBb0vUOLCOtlXaY3YbBaExyXmqNLY4AYuujxnBcewXHu/p3O/vPwlUqVYza+g98dfH1QFBgXCRPdh4gc0IP4LwAz3E9E6quZBWylGXubMk8bhtze67ZI88BZYHGfr6nEHersHOfSykDI1BVf38veIjSQAUkvBp73wbWu+L6X1wJjkmEQyB6LP2yCZUu/klyQRh+S8u9HuXLsYSW89t3Ik5XhDh3Sw8O/nz6rXmO70Q/6JmBlzGmPwNS/wA== From: Jamin Lin To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Kane Chen , Andrew Jeffery , Joel Stanley , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:ASPEED BMCs" , "open list:All patches CC here" CC: Jamin Lin , Troy Lee Subject: [PATCH v2 1/4] hw/misc/aspeed_acry: Add ASPEED ACRY model Thread-Topic: [PATCH v2 1/4] hw/misc/aspeed_acry: Add ASPEED ACRY model Thread-Index: AQHdMHuYKgbwzsHZCEaQi7SLQU0AFQ== Date: Thu, 20 Aug 2026 08:12:09 +0000 Message-ID: <20260820081206.3353463-2-jamin_lin@aspeedtech.com> References: <20260820081206.3353463-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260820081206.3353463-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: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR06MB4980:EE_|TYZPR06MB5661:EE_ x-ms-office365-filtering-correlation-id: ea08431c-ebee-4e67-7c35-08defe92bb3a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|7416014|23010399003|1800799024|366016|921020|38070700021|6133799003|3023799007|56012099006|10067099003|22082099003|18002099003; x-microsoft-antispam-message-info: 485IQ0QS+Sp+eRlJlXtwYAPl3TURsJgDWjYyeV7+y+l4b/sTf1cvv8kIY4FIw2nr1UDa3EGefUuR/kPPKl+/BJc9foZwIpbkNC3R0m+tupyPT1TWYp4faR0UuBM2SKo9NBbK4YDZoue36elyJkj36jwUmLENzKes1F4zNl7oZjrNp4gVexD+1rWd85ffAbB1y9lyy/pjtfg0VCwzb7UWmGEoTDulIM/Rkh3Kd4+Fab0xfBG52mO/diqQrndXi8M7CPfOOCBEu0kHVBuoJ9ejhtdDjbLPk+4ePvdKWEwz7jF0TGLy09nT6Lb3pr1g5bsuWe/75VgoCFleyoJiYz0oWTgn5VZ+Jp5aL1ZoXyo9FALaNoieNCIiaTLYJMrfbjMDsKwuJFhISeebk5K6e7eTgxcm7F9SYt43aYSmOAxlDdE2J2uzavEZ9c2Z2LASsWbfqag5EC4atIqNvukNRBKd278wKsl8ifyskyflPNYyoaMzjzZ7C3m048RMp88KnU5nS+YwLD7hq41MqG2J07+GkZbf7KliHU4A/avrastJFj94AE56ImFq1DUnozSYAuduotlxF7c3hwHaOKC+3ntzqBRAY5DCzNwtNWQZshUaUmPosqU8P92wsk/d+HypAnZNDyx738AnaYGkLEuSE0Do7qdoFexYXusV0pKyUJeBj9l0moth8pxwk8aPy5FYSQKR75/A/AN7Sn/q3kfiD8SexfpQ9H7mTmHFZxG1pbI8ifI= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4980.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(921020)(38070700021)(6133799003)(3023799007)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?CwZDtQuvigbk42neAJfvJV+EoNV7EUyzx9+IIzxWs6G9CcKfetjEqgp8qt?= =?iso-8859-1?Q?F3A1dzGq9ujUyutL68/pGmVaPKFwM6JkuVlQcwws4a4+4ByEHuAFHgOZXW?= =?iso-8859-1?Q?7h2GNXMOYgD3XsFnCa8VbjUq59xhp87vzliyhQ7n3CX9vacKhlbkIks2E8?= =?iso-8859-1?Q?IIvn2nGyjlB4mjLRHRVbmFyTFrHCm00UAVZt0ocKQZG3lpW1s7JHCvdYDI?= =?iso-8859-1?Q?QmWWZjYjiagph1OmlAh3ajmX+SlYi75ox69w9A0FTY4ObmKDGx2ZECCIjx?= =?iso-8859-1?Q?2vphi8qLqzmzveJp7oJarSGVEwCh3i7HzhlxkmJ232OHnRdXySwiN3StUl?= =?iso-8859-1?Q?yFQDxvE1S3GDchrm8PPWPS2GxtSqiqtnBTxTVOxps5ibWwmaGDbIZXybMD?= =?iso-8859-1?Q?AwMZjUOnooINaR6AdKT5iQhawwZSj2UhZkglIQ9ivqXkh+3wj3/JffUzQD?= =?iso-8859-1?Q?ASPmsNPeHZVJGWzbza0V6a5+Du5Zd5r83wYAgMfC3tAOZU7KhHvPNt1tgo?= =?iso-8859-1?Q?AHmOAfp57ynCSSNIGQN/84cdlUkvhtTpwhbJPY6VBnUrsCiF/NIQxpFbMH?= =?iso-8859-1?Q?3b6QS2oxfXgAMHXd7OwY+JamReFLk5eOXnwh5F6hla82XfRGCi8rNggzOq?= =?iso-8859-1?Q?BKnqh2p9eM7OQd5Cb7Id1vOkOR3+4h1kTkFic6Pspxics5h8zjZX5iAktP?= =?iso-8859-1?Q?MQJG3ypo+nOhglF9R6KZ7SUaF9oWzD4ano26vrySQzpc0wgk6oEMDLcXgh?= =?iso-8859-1?Q?J0fX4Cszy8W1+TgjyrMhX+CM30qJfzehkAVTxrwPGhqtO397LVhQwhgca1?= =?iso-8859-1?Q?8fQvB6ZX7pHSWysoVTN+iWucbKu/3rEsWrrIebeldCW2Jr4sS0kEJs3H6+?= =?iso-8859-1?Q?8uUK/8CxfrB0vvJSdOmMNjUHrPuDsr9jJtShCqlMblKmzVWqK/vcqVGdEm?= =?iso-8859-1?Q?rkxh4wEkUPSMln0lQrdvnd6jLBDTVF5as0Tp8re0JlbEMTwxHQ16QUr33b?= =?iso-8859-1?Q?qy5k0ubF0Bs1ClqwXqUYJuZiX/MvioZ+GnHB6jo/5m1wRVviiZQrcsRGD6?= =?iso-8859-1?Q?APfuAqschbJ9qiSdzUk9mRPirScbwam23e8A9NojeP5FA0rwMEMXvlOnAU?= =?iso-8859-1?Q?HDAfA0FnFnsZKGYWFjlx5sMAFK9MirwHkX+KeurOVOdNm4lHPzjKKXw1b6?= =?iso-8859-1?Q?Of3pYeo178ntPG5E04CcqymFvoVINeKBj5w85Uq8azmrk1gfRBvBaU0nLC?= =?iso-8859-1?Q?FqAzjnaj0baHA6G/A0vQIzDpbZxVtmeWM42rOYpRj4918kkCLqMMS8GVTr?= =?iso-8859-1?Q?scZFvp9a4MiNkUOhuIPB9NsAaf403h8GSXiZt5S4clVwHmMOC3wJ3XHUx+?= =?iso-8859-1?Q?aHe1Dk/sA6mFG4FQUXNJQnBsvdKqC+sIgXp8/1CcOpyfZMQ2/FK9y+bFpF?= =?iso-8859-1?Q?rxhRUyKMNj3kpeCuYG99CKcRfz+2YC7t9E2zgV+IBtxv80sNwaDqxmHoSW?= =?iso-8859-1?Q?UUobrXzq01hGvfxJWW82RndZiqmSycjGU9UF8x7iUkXXXIJDVe2tbiB/5q?= =?iso-8859-1?Q?NwL2Nrn6lrQtLK+3fMpr8w/Zu8pV930IgrDC0z7wEc5NJvlWo1t8uYXdVw?= =?iso-8859-1?Q?8CaFBzxUAsFLE4cIQU6x2fIGQ4uTdqEneaAGV12wPxP8XFPaPiXzGU5CHi?= =?iso-8859-1?Q?cAED7fUr2qfAGawQ/Bxoh7KfYuygjsqo53rf5vIHnRg8qrd4fBwnYzWhgS?= =?iso-8859-1?Q?3H1MaWY8wQ5n8cO++gf44gbK/yk3EWtHhuZWMD/vWv2WEGSLphvkM9T/OG?= =?iso-8859-1?Q?kECKwVEKQA=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: VpESvpR9VkiCzWtBCtqpJ1BJosiv7MYhLFi4m6matoFfCwoa84VuRIsyaPzIA/496/UVOqF9i+5cWQDio5t5A3HfEm3G++J+NT1jPtvJmxo4kiDVdoGnO6yuN0bts6ShoxUoqcBryVi7mbIq7vfyLur6E1m4eueAmhv0eYZtpSU36ckba/Y01BwBSpoCU9kYeQQ/VoeFKjKnNnoc9QRCYcP5lRNH1WCLFCd2OPbaPKBK6xauWOVX4mjWOu49xGNKuKW5H3DIrrAeAu/Tj0yKzy7488KQtzWW3C6Ywjqn8IlXS/1K30DBKcyIiHgfpJyFsEdghtsUJbgjGcuidbZgOA== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4980.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ea08431c-ebee-4e67-7c35-08defe92bb3a X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Aug 2026 08:12:09.2183 (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: FwHit2yK0/obKJutGxDUobAZrUxt/hrKntN3ntCJmUs0Nz+qludjC/lRoh0DsWSnifKqKyMk+S8fu8f2H3JNN9BDmP9YO3yw4YG6CcD7Kik= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5661 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=2a01:111:f403:c40f::6; envelope-from=jamin_lin@aspeedtech.com; helo=SEYPR02CU001.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, 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 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 @aspeedtech.com) X-ZM-MESSAGEID: 1787213624502158500 Content-Type: text/plain; charset="utf-8" Introduce a ASPEED ACRY model, which performs RSA modular exponentiation. The datasheet documents the engine as supporting both RSA and ECDSA, but ECDSA is broken on this hardware, so only RSA is modelled. The engine DMAs its operands (data, exponent, modulus) from a guest DRAM buffer and writes the result back into a memory-mapped SRAM region. Both regions share the same interleaved byte/dword layout: repeating 12-dword blocks of [4 dwords exponent][4 dwords modulus][4 dwords data], index 0 holding the least-significant word/byte of each value. The engine accesses DRAM by relative offset, so the CPU-visible address written to the DMA source register has its top (base) bit masked off. The modular exponentiation itself is delegated to QEMU's generic akcipher crypto API (crypto/akcipher.c) using raw (unpadded) RSA, matching what the real hardware performs - PKCS1 padding is handled by the guest's software crypto stack, not by this engine. The RSA public-key operand DER encoding needed by that API is built with crypto/der.h's generic encoder. Raw (unpadded) RSA is only implemented by that API's libgcrypt backend (its nettle backend rejects raw padding). When that support is missing, the engine still completes and raises its completion IRQ as real hardware would, but produces an all-zero result so that whatever signature check the guest performs on it fails cleanly instead of the guest hanging forever waiting for an interrupt that would otherwise never come. Signed-off-by: Jamin Lin --- include/hw/misc/aspeed_acry.h | 39 +++ hw/misc/aspeed_acry.c | 455 ++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + hw/misc/trace-events | 6 + 4 files changed, 501 insertions(+) create mode 100644 include/hw/misc/aspeed_acry.h create mode 100644 hw/misc/aspeed_acry.c diff --git a/include/hw/misc/aspeed_acry.h b/include/hw/misc/aspeed_acry.h new file mode 100644 index 0000000000..5ca80deec4 --- /dev/null +++ b/include/hw/misc/aspeed_acry.h @@ -0,0 +1,39 @@ +/* + * ASPEED ACRY Engine + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef ASPEED_ACRY_H +#define ASPEED_ACRY_H + +#include "hw/core/sysbus.h" +#include "system/memory.h" + +#define TYPE_ASPEED_ACRY "aspeed.acry" +OBJECT_DECLARE_SIMPLE_TYPE(AspeedACRYState, ASPEED_ACRY) + +#define ASPEED_ACRY_NR_REGS (0x400 >> 2) +/* Max size of the "data" (message) field within the SRAM buffer. */ +#define ASPEED_ACRY_DATA_MAX_LEN 0x800 +#define ASPEED_ACRY_MAX_BITS 4096 +/* Max exponent/modulus size for a 4096-bit RSA key, in bytes. */ +#define ASPEED_ACRY_MAX_BYTES (ASPEED_ACRY_MAX_BITS / 8) + +struct AspeedACRYState { + SysBusDevice parent_obj; + + MemoryRegion iomem; + qemu_irq irq; + + uint32_t regs[ASPEED_ACRY_NR_REGS]; + + MemoryRegion *dram_mr; + MemoryRegion *sram_mr; + AddressSpace dram_as; + AddressSpace sram_as; +}; + +#endif /* ASPEED_ACRY_H */ diff --git a/hw/misc/aspeed_acry.c b/hw/misc/aspeed_acry.c new file mode 100644 index 0000000000..1f53074648 --- /dev/null +++ b/hw/misc/aspeed_acry.c @@ -0,0 +1,455 @@ +/* + * ASPEED ACRY Engine + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * The datasheet documents the ACRY engine as supporting both RSA and + * ECDSA, but ECDSA is broken on this hardware, so only RSA is modelled + * here. + */ + +#include "qemu/osdep.h" +#include "qemu/cutils.h" +#include "qemu/log.h" +#include "hw/misc/aspeed_acry.h" +#include "hw/core/qdev-properties.h" +#include "hw/core/irq.h" +#include "hw/core/registerfields.h" +#include "qapi/error.h" +#include "crypto/akcipher.h" +#include "crypto/der.h" +#include "trace.h" + +REG32(ACRY_TRIGGER, 0x000) + FIELD(ACRY_TRIGGER, RSA_DMA_DATA, 1, 1) + FIELD(ACRY_TRIGGER, RSA_START, 0, 1) +REG32(ACRY_DMA_CMD, 0x048) +REG32(ACRY_DMA_SRC, 0x04C) +REG32(ACRY_DMA_LEN, 0x050) + FIELD(ACRY_DMA_LEN, DEST, 16, 16) + FIELD(ACRY_DMA_LEN, DATALEN, 0, 16) +REG32(ACRY_RSA_KEY_LEN, 0x058) +REG32(ACRY_INT_MASK, 0x3F8) + FIELD(ACRY_INT_MASK, RSA_DMA_MASK, 2, 1) + FIELD(ACRY_INT_MASK, RSA_ENG_MASK, 1, 1) +REG32(ACRY_STATUS, 0x3FC) + FIELD(ACRY_STATUS, RSA_DMA_DONE, 2, 1) + FIELD(ACRY_STATUS, RSA_ENG_DONE, 1, 1) + +/* + * Total size of the interleaved buffer. Data is 4 of every 12 + * dwords of a block, one third of the buffer, so the whole buffer is 3x + * the data region. + */ +#define ASPEED_ACRY_SRAM_SIZE (3 * ASPEED_ACRY_DATA_MAX_LEN) + +/* Dwords into each 12-dword block where each operand's region starts. */ +#define ASPEED_ACRY_EXP_OFFSET 0 +#define ASPEED_ACRY_MOD_OFFSET 4 +#define ASPEED_ACRY_DATA_OFFSET 8 + +static void aspeed_acry_hexdump(const char *desc, const uint8_t *buf, + size_t size) +{ + g_autoptr(GString) str =3D g_string_sized_new(64); + size_t len; + size_t i; + + for (i =3D 0; i < size; i +=3D len) { + len =3D MIN(16, size - i); + g_string_truncate(str, 0); + qemu_hexdump_line(str, buf + i, len, 1, 4); + trace_aspeed_acry_hexdump(desc, i, str->str); + } +} + +/* + * The interleaved buffer is a series of 12-dword blocks, each split into + * three 4-dword regions - exp, mod, data: + * + * dword in block: 0 1 2 3 4 5 6 7 8 9 10 = 11 + * region: \---- exp ----/ \---- mod ----/ \---- data ---= -/ + * lane: 0 1 2 3 0 1 2 3 0 1 2 = 3 + * + * Successive blocks hold the next 4 dwords of each operand, so operand + * dword d is in block (d / 4), lane (d % 4). Dwords are little-endian, so + * byte b of dword D is at byte D * 4 + b. + * + * Return the buffer offset of byte 'op_byte' (op_byte =3D 0 =3D least + * significant) of the operand whose region starts 'region' dwords into + * each block (0 =3D exp, 4 =3D mod, 8 =3D data). + */ +static int aspeed_acry_operand_offset(int region, int op_byte) +{ + int byte_in_dword; + int op_dword; + int block; + int lane; + + op_dword =3D op_byte / 4; + byte_in_dword =3D op_byte % 4; + block =3D op_dword / 4; + lane =3D op_dword % 4; + + return (block * 12 + region + lane) * 4 + byte_in_dword; +} + +/* + * Read one operand out of the buffer as a big-endian magnitude. + * + * The operand's bytes are scattered through buf; byte k (significance lev= el + * k, k =3D 0 =3D least significant) is at aspeed_acry_operand_offset(regi= on, k). + * Walk from the top down, drop leading zero bytes, and write the result m= ost + * significant byte first into out[]. Returns the number of bytes written + * (the value 0 yields a single 0x00 byte, so always >=3D 1). + */ +static int aspeed_acry_extract_be(const uint8_t *buf, int region, + int max_bytes, uint8_t *out) +{ + int offset; + int msb; + int len; + int k; + + /* Highest significance level holding a non-zero byte (skip leading 0s= ). */ + for (msb =3D max_bytes - 1; msb >=3D 0; msb--) { + offset =3D aspeed_acry_operand_offset(region, msb); + if (buf[offset] !=3D 0) { + break; + } + } + + /* All bytes zero: the value is 0. */ + if (msb < 0) { + out[0] =3D 0; + return 1; + } + + /* Copy most significant byte first: level msb down to level 0. */ + len =3D 0; + for (k =3D msb; k >=3D 0; k--) { + offset =3D aspeed_acry_operand_offset(region, k); + out[len++] =3D buf[offset]; + } + + return len; +} + +/* + * Return a DER INTEGER body for the unsigned big-endian magnitude 'be'. + * + * DER INTEGERs are signed, so if the top byte has bit 7 set the value + * would decode as negative; prepend a 0x00 guard byte in that case. + * + * The padded copy is written into 'pad_buf' (caller-owned, sized len + 1) + * rather than a local, because qcrypto_der_encode_int() only stores the + * pointer we hand it - the bytes are not copied until + * qcrypto_der_encode_ctx_flush_and_free() - so the body must stay valid + * until then. Returns a pointer into 'be' or 'pad_buf' as appropriate, + * with the body length in *body_len. + */ +static const uint8_t *aspeed_acry_der_uint_body(const uint8_t *be, size_t = len, + uint8_t *pad_buf, + size_t *body_len) +{ + if (be[0] & 0x80) { + pad_buf[0] =3D 0x00; + memcpy(pad_buf + 1, be, len); + *body_len =3D len + 1; + return pad_buf; + } + + *body_len =3D len; + return be; +} + +/* + * DER-encode a "RsaPubKey ::=3D SEQUENCE { n INTEGER, e INTEGER }" (see + * crypto/rsakey.h), the format expected by qcrypto_akcipher_new(). n and e + * are minimal big-endian magnitudes (as produced by + * aspeed_acry_extract_be()); the engine does a raw modexp, so the guest's + * exponent is always encoded here as the public 'e'. + */ +static uint8_t *aspeed_acry_der_encode_pubkey(const uint8_t *n, size_t n_l= en, + const uint8_t *e, size_t e_l= en, + size_t *out_len) +{ + QCryptoEncodeContext *ctx =3D qcrypto_der_encode_ctx_new(); + uint8_t n_pad[ASPEED_ACRY_MAX_BYTES + 1]; + uint8_t e_pad[ASPEED_ACRY_MAX_BYTES + 1]; + const uint8_t *n_body; + const uint8_t *e_body; + size_t n_body_len; + size_t e_body_len; + uint8_t *buf; + + n_body =3D aspeed_acry_der_uint_body(n, n_len, n_pad, &n_body_len); + e_body =3D aspeed_acry_der_uint_body(e, e_len, e_pad, &e_body_len); + + qcrypto_der_encode_seq_begin(ctx); + qcrypto_der_encode_int(ctx, n_body, n_body_len); + qcrypto_der_encode_int(ctx, e_body, e_body_len); + qcrypto_der_encode_seq_end(ctx); + + *out_len =3D qcrypto_der_encode_ctx_buffer_len(ctx); + buf =3D g_malloc(*out_len); + qcrypto_der_encode_ctx_flush_and_free(ctx, buf); + + return buf; +} + +/* + * Store the RSA result into the output SRAM data region as 'n_len' bytes + * (the key size): the low 'result_len' bytes are result_be (big-endian), + * the rest is zero. sram_as is a 0-based AddressSpace over the SRAM, so t= he + * offset from aspeed_acry_operand_offset() is used directly; each data dw= ord + * is written as a little-endian word. + */ +static void aspeed_acry_store_result(AspeedACRYState *s, + const uint8_t *result_be, + int result_len, int n_len) +{ + uint32_t result_word; + MemTxResult res; + int offset; + int src; + int i; + int j; + + /* result_be is MSB-first; take bytes from its LSB end. */ + src =3D result_len - 1; + for (i =3D 0; i < n_len / 4; i++) { + /* Pack up to 4 result bytes (LSB first) into a little-endian dwor= d. */ + result_word =3D 0; + for (j =3D 0; j < 4; j++) { + if (src >=3D 0) { + result_word |=3D (uint32_t)result_be[src--] << (8 * j); + } + } + + offset =3D aspeed_acry_operand_offset(ASPEED_ACRY_DATA_OFFSET, 4 *= i); + address_space_stl_le(&s->sram_as, offset, result_word, + MEMTXATTRS_UNSPECIFIED, &res); + if (res !=3D MEMTX_OK) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: failed to write result\n", __func__); + return; + } + } +} + +static void aspeed_acry_do_rsa(AspeedACRYState *s) +{ + QCryptoAkCipherOptions opts =3D { + .alg =3D QCRYPTO_AK_CIPHER_ALGO_RSA, + .u.rsa =3D { + .padding_alg =3D QCRYPTO_RSA_PADDING_ALGO_RAW, + }, + }; + uint32_t len =3D FIELD_EX32(s->regs[R_ACRY_DMA_LEN], ACRY_DMA_LEN, DAT= ALEN); + uint8_t src_buf[ASPEED_ACRY_SRAM_SIZE] =3D { 0 }; + uint8_t result[ASPEED_ACRY_MAX_BYTES] =3D { 0 }; + uint64_t src_addr =3D s->regs[R_ACRY_DMA_SRC]; + uint8_t data[ASPEED_ACRY_DATA_MAX_LEN]; + g_autofree uint8_t *der_key =3D NULL; + uint8_t n[ASPEED_ACRY_MAX_BYTES]; + uint8_t e[ASPEED_ACRY_MAX_BYTES]; + QCryptoAkCipher *cipher =3D NULL; + Error *local_err =3D NULL; + int result_len =3D 0; + size_t der_len; + int data_len; + int n_len; + int e_len; + + if (!qcrypto_akcipher_supports(&opts)) { + qemu_log_mask(LOG_UNIMP, + "%s: RSA ModExp not supported by the crypto backend; " + "completing with an invalid result\n", __func__); + return; + } + + if (len =3D=3D 0 || len > ASPEED_ACRY_SRAM_SIZE) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid DMA length %u\n", + __func__, len); + return; + } + + trace_aspeed_acry_rsa_trigger(src_addr, len); + + if (address_space_read(&s->dram_as, src_addr, MEMTXATTRS_UNSPECIFIED, + src_buf, len) !=3D MEMTX_OK) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: failed to read DMA buffer at 0x%" PRIx64 "\n", + __func__, src_addr); + } + + n_len =3D aspeed_acry_extract_be(src_buf, ASPEED_ACRY_MOD_OFFSET, + ASPEED_ACRY_MAX_BYTES, n); + e_len =3D aspeed_acry_extract_be(src_buf, ASPEED_ACRY_EXP_OFFSET, + ASPEED_ACRY_MAX_BYTES, e); + data_len =3D aspeed_acry_extract_be(src_buf, ASPEED_ACRY_DATA_OFFSET, + ASPEED_ACRY_DATA_MAX_LEN, data); + + if (trace_event_get_state_backends(TRACE_ASPEED_ACRY_HEXDUMP)) { + aspeed_acry_hexdump("buf", src_buf, len); + aspeed_acry_hexdump("n", n, n_len); + aspeed_acry_hexdump("e", e, e_len); + aspeed_acry_hexdump("data", data, data_len); + } + + der_key =3D aspeed_acry_der_encode_pubkey(n, n_len, e, e_len, &der_len= ); + cipher =3D qcrypto_akcipher_new(&opts, QCRYPTO_AK_CIPHER_KEY_TYPE_PUBL= IC, + der_key, der_len, &local_err); + if (!cipher) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: failed to create RSA cipher: %s\n", + __func__, error_get_pretty(local_err)); + error_free(local_err); + return; + } + + result_len =3D qcrypto_akcipher_encrypt(cipher, data, data_len, + result, sizeof(result), + &local_err); + if (result_len < 0) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: RSA modexp failed: %s\n", + __func__, error_get_pretty(local_err)); + error_free(local_err); + result_len =3D 0; + } + + qcrypto_akcipher_free(cipher); + + if (trace_event_get_state_backends(TRACE_ASPEED_ACRY_HEXDUMP)) { + aspeed_acry_hexdump("result", result, result_len); + } + + aspeed_acry_store_result(s, result, result_len, n_len); +} + +static uint64_t aspeed_acry_read(void *opaque, hwaddr offset, unsigned int= size) +{ + AspeedACRYState *s =3D ASPEED_ACRY(opaque); + uint32_t reg =3D offset >> 2; + + trace_aspeed_acry_read(offset, s->regs[reg]); + + return s->regs[reg]; +} + +static void aspeed_acry_write(void *opaque, hwaddr offset, uint64_t data, + unsigned int size) +{ + AspeedACRYState *s =3D ASPEED_ACRY(opaque); + uint32_t reg =3D offset >> 2; + + trace_aspeed_acry_write(offset, data); + + switch (reg) { + case R_ACRY_DMA_SRC: + /* + * The DMA source register holds a CPU-visible DRAM address (e.g. + * 0x8xxxxxxx on AST2600); the engine addresses DRAM from offset 0, + * so mask off the top bit to get the DRAM-relative offset. + */ + data &=3D 0x7FFFFFFF; + break; + case R_ACRY_STATUS: + data =3D s->regs[R_ACRY_STATUS] & ~data; + if (!(data & (R_ACRY_STATUS_RSA_ENG_DONE_MASK | + R_ACRY_STATUS_RSA_DMA_DONE_MASK))) { + qemu_irq_lower(s->irq); + } + break; + case R_ACRY_TRIGGER: + if (FIELD_EX32(data, ACRY_TRIGGER, RSA_START)) { + aspeed_acry_do_rsa(s); + + s->regs[R_ACRY_STATUS] |=3D R_ACRY_STATUS_RSA_ENG_DONE_MASK | + R_ACRY_STATUS_RSA_DMA_DONE_MASK; + if (s->regs[R_ACRY_INT_MASK] & + (R_ACRY_INT_MASK_RSA_ENG_MASK_MASK | + R_ACRY_INT_MASK_RSA_DMA_MASK_MASK)) { + qemu_irq_raise(s->irq); + } + } + break; + default: + break; + } + + s->regs[reg] =3D data; +} + +static const MemoryRegionOps aspeed_acry_ops =3D { + .read =3D aspeed_acry_read, + .write =3D aspeed_acry_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 4, + }, +}; + +static void aspeed_acry_reset_hold(Object *obj, ResetType type) +{ + AspeedACRYState *s =3D ASPEED_ACRY(obj); + + memset(s->regs, 0, sizeof(s->regs)); +} + +static void aspeed_acry_realize(DeviceState *dev, Error **errp) +{ + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + AspeedACRYState *s =3D ASPEED_ACRY(dev); + + if (!s->dram_mr) { + error_setg(errp, TYPE_ASPEED_ACRY ": 'dram' link not set"); + return; + } + address_space_init(&s->dram_as, s->dram_mr, "dram"); + + if (!s->sram_mr) { + error_setg(errp, TYPE_ASPEED_ACRY ": 'sram' link not set"); + return; + } + address_space_init(&s->sram_as, s->sram_mr, "sram"); + + memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_acry_ops, s, + TYPE_ASPEED_ACRY, ASPEED_ACRY_NR_REGS << 2); + sysbus_init_mmio(sbd, &s->iomem); + + sysbus_init_irq(sbd, &s->irq); +} + +static const Property aspeed_acry_properties[] =3D { + DEFINE_PROP_LINK("dram", AspeedACRYState, dram_mr, + TYPE_MEMORY_REGION, MemoryRegion *), + DEFINE_PROP_LINK("sram", AspeedACRYState, sram_mr, + TYPE_MEMORY_REGION, MemoryRegion *), +}; + +static void aspeed_acry_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + dc->desc =3D "ASPEED ACRY Engine"; + dc->realize =3D aspeed_acry_realize; + rc->phases.hold =3D aspeed_acry_reset_hold; + device_class_set_props(dc, aspeed_acry_properties); +} + +static const TypeInfo aspeed_acry_types[] =3D { + { + .name =3D TYPE_ASPEED_ACRY, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(AspeedACRYState), + .class_init =3D aspeed_acry_class_init, + }, +}; + +DEFINE_TYPES(aspeed_acry_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index e86d9ad6b3..3912dc2bce 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -137,6 +137,7 @@ system_ss.add(when: 'CONFIG_PVPANIC_PCI', if_true: file= s('pvpanic-pci.c')) system_ss.add(when: 'CONFIG_PVPANIC_MMIO', if_true: files('pvpanic-mmio.c'= )) system_ss.add(when: 'CONFIG_AUX', if_true: files('auxbus.c')) system_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files( + 'aspeed_acry.c', 'aspeed_hace.c', 'aspeed_lpc.c', 'aspeed_ltpi.c', diff --git a/hw/misc/trace-events b/hw/misc/trace-events index c9a868b3ef..bbec0d2178 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -331,6 +331,12 @@ aspeed_peci_read(uint64_t offset, uint64_t data) "offs= et 0x%" PRIx64 " data 0x%" aspeed_peci_write(uint64_t offset, uint64_t data) "offset 0x%" PRIx64 " da= ta 0x%" PRIx64 aspeed_peci_raise_interrupt(uint32_t ctrl, uint32_t status) "ctrl 0x%" PRI= x32 " status 0x%" PRIx32 =20 +# aspeed_acry.c +aspeed_acry_read(uint64_t offset, uint64_t data) "offset 0x%" PRIx64 " dat= a 0x%" PRIx64 +aspeed_acry_write(uint64_t offset, uint64_t data) "offset 0x%" PRIx64 " da= ta 0x%" PRIx64 +aspeed_acry_rsa_trigger(uint64_t src_addr, uint32_t len) "src_addr 0x%" PR= Ix64 " len 0x%" PRIx32 +aspeed_acry_hexdump(const char *desc, uint32_t offset, const char *s) "%s:= 0x%08x: %s" + # aspeed_hace.c aspeed_hace_read(uint64_t offset, uint64_t data) "offset 0x%" PRIx64 " dat= a 0x%" PRIx64 aspeed_hace_write(uint64_t offset, uint64_t data) "offset 0x%" PRIx64 " da= ta 0x%" PRIx64 --=20 2.53.0 From nobody Fri Aug 21 21:26:30 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass(p=quarantine dis=none) header.from=aspeedtech.com ARC-Seal: i=2; a=rsa-sha256; t=1787213631; cv=pass; d=zohomail.com; s=zohoarc; b=an4df+ZvzSVyipQkP9gGnIf38lc/OPEw836lkASZ2oumxOc38VCT77y4Sfo9rk/KWk57WbFyGtZsS73Z0LQrlLnRKplhYpwhl0digbuEn7FhYYXJK+5uBNu4DWcpLTdD0Ou4F4+wM/UAuN5eLyt3dWGaQSUyDj5OTZoRMEqTWrQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787213631; h=Content-Type: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=4fhox2ooPUmSMZsC0tLODgxEE406q5EtnYQQSBAvUvI=; b=OOnEnZ+90RcszqO+BIsLItXElIn4+0wcB/xNF75ET12a+cYBfMerFHW20bD10GLMGjZtQ5rG99gN9rpvLjD5CUZIvlc1cYwUiBXMEAdKqYa0q+/iTchsxe2Juy68Y3OCxXuYdx9Tas3OMKiL2AaUxXO6Y/UsdQjthL1pspfLM2Q= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178721363046918.783863627339088; Thu, 20 Aug 2026 01:13:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwxsz-0002AN-45; Thu, 20 Aug 2026 04:12:29 -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 1wwxsx-0002AA-HE; Thu, 20 Aug 2026 04:12:27 -0400 Received: from mail-koreacentralazlp170130006.outbound.protection.outlook.com ([2a01:111:f403:c40f::6] helo=SEYPR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwxsv-0001n5-Tf; Thu, 20 Aug 2026 04:12:27 -0400 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com (2603:1096:400:1cc::10) by TYZPR06MB5661.apcprd06.prod.outlook.com (2603:1096:400:28e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 08:12:10 +0000 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3]) by TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3%6]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 08:12:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cC0ykPPa/TFmsPmbJPTIuCXFtYXUhc2lDeb4Ezg6ZnaPoWCrIFdAxo4GSI9WILT7uuB1lLzT6ehcUOHCJ9IuUv2trA0lXMrEUNwsekGqheLbdxwp+TbfGgTng6XMgVP6B/zvlC8lGAPeag0s5UWe39PNunTOm1Hh3ZaiGOBYS5sHrbTgHbsHxuWUx/cmBf9yXvVxOe+CP/ZAV+0EK7lVHrhreBXgO+BA9XSEW/cyh/G9CyL3tY+kjOqKtRt6inkqiA1clb/bugZdmuumkABM0tey//tAhY9tdAz8DQAVC+o/neXKxAOkoKBclPWwaR0zw7zgfr9tA1uxz85FJNRAiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=4fhox2ooPUmSMZsC0tLODgxEE406q5EtnYQQSBAvUvI=; b=oPVlS+TpWzQllUMO5eL4tWaYgrPx1p/A0ka6mdg4lz1DI2HsrVWBJiyJ6JqgZqcabxgl/EvLcXeD+cURjf3OQpUQ5R/glwyxwZApWN+dZJH3GHg6i6wXlkY+9ln2ATKoa/o7ucJ4Rc8Y17I93YTLHnRURVTcqKuU43rUxr3A++JMUWDYU0l/Hirz/HAtBfCz51S3a6+2fa7hhJRjy01UoJ1UTgh2guHXUMxiyybQJuT6v0gN3pu6/eaVACb40eiIK4ezsXYfFgFy1u+J9vNP0Ax2ufmA/I1ICWxV7dwFHm31z775Lsi0yrLt05YJ+qPcpV9eJgwLIy7ej9zi0ATwUg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none 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; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4fhox2ooPUmSMZsC0tLODgxEE406q5EtnYQQSBAvUvI=; b=XMETOM2xO0myDp9GxF+5nZySHP9zk78jcoab2vwUkZoxjbnt9ywsq5WOidOHWGSYoSP1ss0nQdrY0Zb4h5vlXU2HjFzHSg560OAPxSwpvZjFqlw1shGo+96j3qrbec1Ss3CLy29MKzp5uVkR8v+i1Nm8iInLWnW9ojrIkyJY+G1RnmKJxgE/GQtZLyo3vow7D+wh2jm8IDoE/4Xu84TUGIOL+k94edKk+m15YRZKxMgz33fcrMSCv3/uFDRq19BIqLp20HbyRPTB/9NHY15V2vMp1UZOdS2g/DRhAssFmszA9D5G/wazowk2+sULq2siXbLw0GTspJhxnZcYj731Vw== From: Jamin Lin To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Kane Chen , Andrew Jeffery , Joel Stanley , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:ASPEED BMCs" , "open list:All patches CC here" CC: Jamin Lin , Troy Lee Subject: [PATCH v2 2/4] hw/arm/aspeed_ast2600: Introduce the ACRY SRAM Thread-Topic: [PATCH v2 2/4] hw/arm/aspeed_ast2600: Introduce the ACRY SRAM Thread-Index: AQHdMHuZ587zIFAW2UmQTW4ECNe6Eg== Date: Thu, 20 Aug 2026 08:12:10 +0000 Message-ID: <20260820081206.3353463-3-jamin_lin@aspeedtech.com> References: <20260820081206.3353463-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260820081206.3353463-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: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR06MB4980:EE_|TYZPR06MB5661:EE_ x-ms-office365-filtering-correlation-id: 09d7e66c-0ad8-4942-5b0e-08defe92bbf4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|7416014|23010399003|1800799024|366016|921020|38070700021|56012099006|10067099003|22082099003|18002099003; x-microsoft-antispam-message-info: a1R8NpmXeqQ73MNfyHW38dPO4zFbSRBmzW4w0UsB0NP2neRlPI/htRx+C4/5auccvPk25i6lpth6Jq22NYoCkaLW9hOSyM0NVoBWDWK+aoscz0oq/X3dCk3n7ylBjXFaPobibTHs7U1chB+mLhXCUJlxzv58Gf8JubCmBXfIlbKzdk1tGJHhuXBT1UCnWul/s5G8MW0JLLQUzZekm3qIT63EiXvO8U0Fmg/Tn8fEKkl52aCwirDaa7X+DlJ0XXZYcB9XMfXmUnBY0G8ATMmlirpmuMY3B2zB3mfzkk5UmlkaR27WSYy8ktBb+n3+9l0JsQBX9QPeL0/7fajN7YGJ0haVEWdRTd5yBSRxzqHiRWQeq+rU51zN6yvAn2Ey2KJ60isFzN2x5O6dQKJj1btLwrRfE1AuwQ68rIAdjF4rmuigrPsDvee/3cXrLLQx6WwBgWV46P1eviHBNZfVLxSTr2r/wJNUqKYpgxg3uPl497as94Ans0JDpIMfH0iXCEdfPIp+8TywEN4lZqvanRHNESyMomsQdxieUkYVB3OWzYDeSWdjIBDUtETHRNvVyMsrTtWZ9gptE9Lg7VfgizHr985okUQ0SG3LmNuNzQWPYbhGONhyrxMFi6D8J8cgJg2/oslgD2Mry2tI6VjWjXQplfss/jU5vn2A7JmxZ+kgNYkf/dA4DUGAxFaHcrP1qPvP6c+FjYV9pyJIfgADKrlLX/xPeY0JG5Z98LuhOUqmcnTH5Qe0+UknYxp0oykfBkKF x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4980.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(921020)(38070700021)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ImOQZZ83G/r1kMn56kfsfIKuGKNObGgYZu9tjx6/k5+rS7Pofcsewst55D?= =?iso-8859-1?Q?oTyo586qnzF+6riExOPq72VLEPNib6JK8LWMG8kAnDIfiOz7yd0D1D/zI7?= =?iso-8859-1?Q?j2Mv2LCd478nNMaDB4O69bNghK0od1gU1LahvFn1XE7luQRNHChx+auZpK?= =?iso-8859-1?Q?93QtLNiOx8Hf+wqVZL0ULBtX7u6WBENVyua/2Wg6vb7k2PW4KiOW7pun4W?= =?iso-8859-1?Q?i8aHyxenOA79E9inI0Q7aLoQja4y1RGVSAotOUuzu/h2BE9DyOouivFPfo?= =?iso-8859-1?Q?Jn4sTZZokV6AV/x88aVSJqndLjro3kFCHXihPfo+T0KtywVov40L4P7mpb?= =?iso-8859-1?Q?NxSp5D6vxbzVbJIEDA+CaBijgDqBZSCPd7OX7913pAAoN315Dr/vwoMhFa?= =?iso-8859-1?Q?LReFJpJZzzeJhsmccImR84Z+VjO4aDF23L5pJO21rWtx8nV0bLVpqk5/lY?= =?iso-8859-1?Q?wTvmITAeYJ0D101AF57gdsBPQPCKSzSAdv80xuQ69JaY7T7GRS9x7+oxAJ?= =?iso-8859-1?Q?hCnDSvDhiXc9wTAkupgEPtxz1FqeFagTYa1Vw5xNy1V+s0hOydIZO7P2st?= =?iso-8859-1?Q?sdw8DdGZ/C9Yh13hNF2XQOlO7fO1fCuwE+bCGh545z3jMRy+UQ6t+mTYhp?= =?iso-8859-1?Q?dYcFfQMpDvt4f0AT4QXu0mfJLTL7Am6o/KjRspuCFL6f9Fzvv4rk9WehRI?= =?iso-8859-1?Q?BjNM+kx7dZxUtkqnMUffwGSUWasQm+dvhEkWeziUYKBMs/MRDpsPe8PuF5?= =?iso-8859-1?Q?UYhC3DkPY8RM7AljS3nizLcPK9QgNSFXi+VuVc2LPHusQyMvAlp72pb6lQ?= =?iso-8859-1?Q?3nEso3iLfnclo6g5I4hWm6YriW9iYfeb7kNU5r2wrvaEZr1SwaLNJ9/830?= =?iso-8859-1?Q?GgtpwiIXkDIspm/KfdwZMFZr//og2zCL8nXDwmoXDmSsESBjujo1yfudRg?= =?iso-8859-1?Q?iydP8+A5JAHv4wDmNJ7JVju/qzduM+y1XtduiNxJCQrtwIu1sAWmzTR5aC?= =?iso-8859-1?Q?VfDQQ2rxVylI6QTznYwA0yXALoxbeL0Yyw5hJSX9rhEGe9VJQ3M/dDCods?= =?iso-8859-1?Q?uzWuklh1wcd2jasLlGvWnlir4t0s1men3ywshvjlZekXKiUUldD3LQ1apX?= =?iso-8859-1?Q?BKnjzZrNbXAm4sxjSwthvRo9R70KEsk7oZjZbTUbqCm+vRlKRy5lQKTVCU?= =?iso-8859-1?Q?vngGYZ9vLAK8pFif280jQOamN6tBtzXCeZ7GBF9Gej9zH+zg02njbkr23p?= =?iso-8859-1?Q?ozKmY4saeMbUTbgrwJvhnMKO8wv7SOf0RxD9FE6PV5Ltg+aFt1CwEqU7Ok?= =?iso-8859-1?Q?xdIm9r7ff+Mn2/yNNcny2O1/A5ueTo3XCFrsGDxbShyKqnlHouZWRUGbxk?= =?iso-8859-1?Q?Zq4D8XT/qwDu2WReKVvGKAXLD50Gq8uAp6T01CwVV7/Zh1vtluh5px+ZYC?= =?iso-8859-1?Q?3fISTDApjpziCygjIQP7kyhe7gHkNZoaSuOBxI1XtOTfT8bV7l5IF43yAe?= =?iso-8859-1?Q?bTKFVuwr0ISgSjEaxJCHWrRAMN6F0UqOPESNUX+QUaAjFeabv1d3Cakxm2?= =?iso-8859-1?Q?s36GtCJ7qcyOi8lDNdNTxuA6QmTr/X6Pb5gGd47qA78DjvpPmglSvgBQgx?= =?iso-8859-1?Q?iivnUb92vvqGE/WrcNpb/BJlxTyXzt8ODBf4+EqiusQ4kG5tRm91uGzRH0?= =?iso-8859-1?Q?eK5G90gClHBxfPZFBYNq2UzEBwPzsV+FzjGhG0fJlIZFjJbbVpMotUGzV5?= =?iso-8859-1?Q?uLWpqXZQG2exX5sWt0Wty9FWJHALClK/XIBTussZ46zVuSL/jC8YhemOjV?= =?iso-8859-1?Q?9ytUj96MoA=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: FQOjK6k8gVjWU/ie3K4zW8ak3CGz7zZjkU6CXHorN5pqkT8EBExI75atpov05C++Rjy936zF5VXjtQnUy0Z9dnDmEu7ov/h0+UX/C3am705Cyh9ic+tSVaofbN3HfrklSmm/aNd7NvbRWHwEAjuMqkU6hBIS3r5Qjt+XR01clT/D8YPReGBU1JNY9d8gtvLylPfqw3WJc2fEIe7W25l1wjWDN6tY/3x7yfqi5d64FmRDY/U9ZqRJjz5hmJoK86m2+jan9jncBeob1pPYogSUWGb0QTniIYRL00mMQfrkDTIYpSYeGyx91UOEB0qbIPO7uGqmmpve3RqXlRuUi+JStg== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4980.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09d7e66c-0ad8-4942-5b0e-08defe92bbf4 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Aug 2026 08:12:10.4581 (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: yp3uQ2b65tA/O4UdhY0Q+KUEEca/Bv8zOWyi3nZzVaasED/FARAe6jtfvchQQ0VgX5SIPb6QSpnCQAGs666UABzSn4rRigqJQ8ggyuhOwjM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5661 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=2a01:111:f403:c40f::6; envelope-from=jamin_lin@aspeedtech.com; helo=SEYPR02CU001.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, 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 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 @aspeedtech.com) X-ZM-MESSAGEID: 1787213632554158500 Content-Type: text/plain; charset="utf-8" Reuse the existing SRAM array convention on AspeedSoCState to add the 64 KiB ACRY SRAM region to the AST2600 at its real-silicon address (0x1e710000-0x1e71ffff). Wrap the RAM in a container mapped at offset 0 so the ACRY engine wired up in a later patch can address the SRAM by relative offset without the device model knowing its mapping address. Signed-off-by: Jamin Lin Reviewed-by: C=C3=A9dric Le Goater --- include/hw/arm/aspeed_soc.h | 1 + hw/arm/aspeed_ast2600.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h index cd68c7f1ca..46e7854727 100644 --- a/include/hw/arm/aspeed_soc.h +++ b/include/hw/arm/aspeed_soc.h @@ -69,6 +69,7 @@ struct AspeedSoCState { MemoryRegion *dram_mr; MemoryRegion dram_container; MemoryRegion sram[ASPEED_SRAM_NUM]; + MemoryRegion sram_container[ASPEED_SRAM_NUM]; MemoryRegion spi_boot_container; MemoryRegion spi_boot; MemoryRegion vbootrom; diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c index d1f18e471a..f23a51c8a4 100644 --- a/hw/arm/aspeed_ast2600.c +++ b/hw/arm/aspeed_ast2600.c @@ -8,6 +8,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/units.h" #include "qapi/error.h" #include "hw/misc/unimp.h" #include "hw/arm/aspeed_soc.h" @@ -24,6 +25,7 @@ static const hwaddr aspeed_soc_ast2600_memmap[] =3D { [ASPEED_DEV_SPI_BOOT] =3D 0x00000000, [ASPEED_DEV_SRAM0] =3D 0x10000000, + [ASPEED_DEV_SRAM1] =3D 0x1E710000, /* ACRY SRAM */ [ASPEED_DEV_DPMCU] =3D 0x18000000, /* 0x16000000 0x17FFFFFF : AHB BUS do LPC Bus bridge */ [ASPEED_DEV_IOMEM] =3D 0x1E600000, @@ -361,6 +363,7 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev= , Error **errp) AspeedSoCState *s =3D ASPEED_SOC(dev); AspeedSoCClass *sc =3D ASPEED_SOC_GET_CLASS(s); qemu_irq irq; + g_autofree char *sram1_name =3D NULL; g_autofree char *sram_name =3D NULL; int uart; =20 @@ -444,6 +447,19 @@ static void aspeed_soc_ast2600_realize(DeviceState *de= v, Error **errp) memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SRAM0], &s->sram[0]); =20 + /* ACRY SRAM */ + sram1_name =3D g_strdup_printf("aspeed.acry.sram.%d", + CPU(&a->cpu[0])->cpu_index); + if (!memory_region_init_ram(&s->sram[1], OBJECT(s), sram1_name, + sc->sram_size[1], errp)) { + return; + } + memory_region_init(&s->sram_container[1], OBJECT(s), + "aspeed.acry.sram-container", sc->sram_size[1]); + memory_region_add_subregion(&s->sram_container[1], 0, &s->sram[1]); + memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SRAM1], + &s->sram_container[1]); + /* DPMCU */ aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->dpmcu), "aspeed.dpmcu", @@ -765,6 +781,7 @@ static void aspeed_soc_ast2600_class_init(ObjectClass *= oc, const void *data) sc->valid_cpu_types =3D valid_cpu_types; sc->silicon_rev =3D AST2600_A3_SILICON_REV; sc->sram_size[0] =3D 0x16400; + sc->sram_size[1] =3D 64 * KiB; /* ACRY SRAM */ sc->spis_num =3D 2; sc->ehcis_num =3D 2; sc->wdts_num =3D 4; --=20 2.53.0 From nobody Fri Aug 21 21:26:30 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass(p=quarantine dis=none) header.from=aspeedtech.com ARC-Seal: i=2; a=rsa-sha256; t=1787213589; cv=pass; d=zohomail.com; s=zohoarc; b=TezQGRQMGtor/GX48fFBASZcokTZsKLvZNLWp/8YbgNLbQkDS+jCFx12eKpNZZjDTrSJYi6Se7L5ixE8nYcsyYoBQZ/0S318sL1+FUoba2QkNQ2A+G63/Vp8+fP2zwDUEzFGtob/Y0AbsbaDEBGgUI6PGneWTn+8ZreHf6EvFAw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787213589; h=Content-Type: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=pE1td2hTZ9vm6g8idVYcayqlIvLuIs/7DS4fD4DfdVU=; b=BK6szGIS8jrdm+4WqS9FzyggwkpwGYTaYN1C+GU5Pyy88Kv1iU6okkyaqseMXt+UT1Hjyp1OI1nBUG9dci2ZD0p0W8Clk6VR4UiZb99YvGikjlj/NGdb6Ur9gISp8gNlrSGqRAh+U4JdkdoAoGmm+mWiI/YCPotAkPYQTOh2z9w= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787213589377926.2717174714245; Thu, 20 Aug 2026 01:13:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwxt2-0002BY-SU; Thu, 20 Aug 2026 04:12:32 -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 1wwxt1-0002B0-JO; Thu, 20 Aug 2026 04:12:31 -0400 Received: from mail-koreacentralazlp170130006.outbound.protection.outlook.com ([2a01:111:f403:c40f::6] helo=SEYPR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwxt0-0001n5-1T; Thu, 20 Aug 2026 04:12:31 -0400 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com (2603:1096:400:1cc::10) by TYZPR06MB5661.apcprd06.prod.outlook.com (2603:1096:400:28e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 08:12:11 +0000 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3]) by TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3%6]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 08:12:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ActhQIGVZGHVeD1Gd932HXQ8u0YEMqqgbgRD/ixRhH9eUizPxNuS/R1QMbyg3Q/Fpo7qdijrxlRhq5lNCiPlLMVgbwVmQfPqjhQnGJTuDMuwikphfluhnSvDPKyg4tni3uiD1xqGTa9XUAUYvFpCt21ioJJ+RY+vtDirUTqI4TSxN1/snsrTdxuIU6R5xlYEuRUsmc30BUMi1Dx0pjnQqKvRazEsLRody/uwwuEuFH9R/D+u5B6YmuYh14ZWyQeT81H2Wbrx1l7sD3mfBcR7L4rHF+qaT7drC2Ap+xIywsL0KoRDufhfqvIzg1CuYtzeUxt3tLrfCsje2Uv7n6nxZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=pE1td2hTZ9vm6g8idVYcayqlIvLuIs/7DS4fD4DfdVU=; b=AR1ZAhx4DegRj70zjtBIXXQ4FCedUUhYnpOZVnccCG4jNLtHGFYtNrIhRGHRAQFg7nV6VaXLSsLwda64DlDcsDFoQBjSNyGwbTFbRCO8Nj7Tk8yGZ87V7/gYvGvtQTNENsLN4g9PyzvoBjErWqLglp/qtpqD/EJLkRZ6suWdu9CL/2OkfR+5OttNoyG5MGazTct8+FoGlXWrEBgj+IK7VOwzdqpZ1KGxC0ojREOtf843q2KEjsnoMq8gMTWCul3bKGiGD3kLDqp9/nxKmkX845GyzfivZBhOeZxkOUKWhvTk5lQ8+M1D3RX7r3q+jb9R7LSUyZPCExmo7IlytkYIEQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none 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; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pE1td2hTZ9vm6g8idVYcayqlIvLuIs/7DS4fD4DfdVU=; b=h5V1O2LR63d7nxgKBcG6SRn24RccH/0JxDswRCkOszq7yoNIyhHnz1140+yrO78Jsc+6AFt2CQnfr7+LaUYSr5WCAZzmMLdJkswUkGpjkfHAcs1lC0lC2ic1DI+iSVobOLZHJ4vyz9TO6/uI2biC59GFXOTaWVF3IoZqgFYbJ+zh8lMH96RmwT9P7QmduAj9F3FWqtqIazFAFTNDlefWZpXDBfDyA5RO0/hOiRnNVttMmJ73YnijlIklnMl4Ie0PilL4WXCoWT+PBIEX8DSwvOpEcRl5Yxqh7VLaJJeP0MF4v0P9Qc1axFrciyGRk2wr27IvOuMgkc3JGiPxw7Yalg== From: Jamin Lin To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Kane Chen , Andrew Jeffery , Joel Stanley , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:ASPEED BMCs" , "open list:All patches CC here" CC: Jamin Lin , Troy Lee Subject: [PATCH v2 3/4] hw/arm/aspeed_ast2600: Wire up the ACRY model Thread-Topic: [PATCH v2 3/4] hw/arm/aspeed_ast2600: Wire up the ACRY model Thread-Index: AQHdMHua26bF2D6Qkk2Fm6WjmXrk3g== Date: Thu, 20 Aug 2026 08:12:11 +0000 Message-ID: <20260820081206.3353463-4-jamin_lin@aspeedtech.com> References: <20260820081206.3353463-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260820081206.3353463-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: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR06MB4980:EE_|TYZPR06MB5661:EE_ x-ms-office365-filtering-correlation-id: ab8d2b97-309b-411f-a184-08defe92bcab x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|7416014|23010399003|1800799024|366016|921020|38070700021|56012099006|10067099003|22082099003|18002099003; x-microsoft-antispam-message-info: sC0h8morEtuCWt1Nal4T6XiJtzWlghS3+Zp3/8X4uTkVwgAewW1o9vxPuVjVA7tUVBKxiSrolH3RHOzyjEMfTiYgmS+ishSVMHS4/wfce68PWig2Bt8tVkupgB0EBvdjERrUbffI7Qp8JR5Uy6q7E+UQouWc/hUwL8YwIOBRvE7Bg7SRScVArlhHqThhJiLS/GlknzrkdwzEAjQqBCjQZSlROKDIDYkRj6qEwD1PMVzuhTlgRu+5NQN6F0wbMahM2W6tcD4VNqgVcsaB1JhL3jZ+PiFVAwmplZ9FOobGHgYVvSi3qCIivevi/8m565SxfL9rNmG3lGFK4daiddjwLfegYQidKmJC4A2vi1gOL5S0/R3Vy9W8BDBwQ1pD3D5YLOkS1Zfaq8iAScgcKh7mVYgibflUqnpKPfDK/Ca7HW91SlargJt1RelpuUrshxB8nTtEFuEcdZC/+978mAgogkdRGt+bXxBaEvvWbPy5qeIMuwQ4cJoh41hI5/5SdILo34Nu/4YuSXroSgOkMehhWeXGKzotq/mECOpev7l2s2aGIKr+4xJBBEwus2efYqlwVhYagacjayQXStfvrVqIstaGIF06HRsOX6Bn5g2bycnjwiN96XQPWc5N/RE8hb+LJIzZgxa1Wkt6PoQxghNnMwy5N0IdKkXjK+uCpm1pje/grXpUgejf1CdD+kDHn16Gy537LNEsAf9kUWRJMicmuDxQvkEj8QfNJjRuzJpEZrU6yuGwqemovTlbIJfPF4I8 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4980.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(921020)(38070700021)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?My5fEg6b8WteZ6MlkYtStWMiJMCIHprVwdtiWhXM+gxN2AKPG2/rF3stoh?= =?iso-8859-1?Q?HIVWZvnXgb+BkCx4L/CbfpDUQNT2BKBl5+49usu6MGaLueYgWltqC7IIBq?= =?iso-8859-1?Q?LJuuBcfVqnm2T7uw5givOdbfYYwqq6MZbDdKnxgQN8TugflFFZIrotUtHC?= =?iso-8859-1?Q?XI798qNXMvwJjFJwBWftOo9MowVzze75VvQujPzFuB+846cqVUWtEo4wL9?= =?iso-8859-1?Q?Nql84u+5LeFljDX76N2TnJoZgFPogHxJx1LvwMVsCPxSdCts30C4sUpafb?= =?iso-8859-1?Q?Xkc2KWiqI8zR+04JAhMGEexVSxG2ffCfsEJJnBP7HaoXXypgbAh1oBLcI3?= =?iso-8859-1?Q?NEwZW/jR9ZhSiYxC95zpvKgju0Zc8I6u9jWS5rseC4M7JEiq3tNu+MSHHZ?= =?iso-8859-1?Q?Pl3BPCv8EvpBBjSfbOnBpIWIbWb7hDvZiqXB45aWftW8R8pBrudAWqdi7G?= =?iso-8859-1?Q?GDM7IfOMgdOMcfyEj3oaYbH6/C567/ntDO8CaZAJvaAsCuPVh8/6sZzZUj?= =?iso-8859-1?Q?qyjCv/M59jzfR5bFxlWGX3fFzmmlzuFsT0Al9wL72nix6UZBEZqySh5LUQ?= =?iso-8859-1?Q?IM+yutWLUtSOr/p1AW9NfVF0O59rW/OdUc/K4We/f7GRHQRoKLEIp2jPfI?= =?iso-8859-1?Q?wVl/kqSxdfbL1A2SKrvuWIoHZMfEsmUh7tHhGlEfKRDaF3Csfw0B7PxpS9?= =?iso-8859-1?Q?3n54RxXSW2vM9cV5As4jTqvqiGgrU83bhoa93FZmW5ML8V7wOTSNJfMIPn?= =?iso-8859-1?Q?orG7c1aLomIzHJBFRADkEXmjlsrIb/FUqdXXrCxt2lA0fARd380bIGonuB?= =?iso-8859-1?Q?G81QQ170NO+GvsUG6Ukye9jS0TQ9z4fYpLuRnX9L2Zrod1hrUqHbWXjNA3?= =?iso-8859-1?Q?UF7RRKpzfb6eKNpSJX1ZHph5E6in6b0yRwmxaPeG92WZyz7tZOhceZ0hLq?= =?iso-8859-1?Q?OS2sCIeyVKRMmQ27TmfUBVnQx0zH5r9C7mNwNys8Ecg2D/dT4yZX0zd3Hw?= =?iso-8859-1?Q?hkyGauNBD6IOc8F2TRqifLJ2E+v36d7Ig/3+CgCEiLfCAEkBb8bz3IHKnR?= =?iso-8859-1?Q?nyQpy5ny7aQoe6XYWQhEH/yPE4uAXvymU5pe6HJ5qERyYQQFlDWw+HexJj?= =?iso-8859-1?Q?LCPJIYtkdTif195Ab/rp9m3CQ1DyLIUaRdzjqfutpbVcnOZMZVBkols6BC?= =?iso-8859-1?Q?aOvY6ryjwWj1Y89uZChEfQq4uscCDeV1U7AvtRs4DNP8xY/fP8MQHeSTnx?= =?iso-8859-1?Q?QHPKGww4KP1qX4rOcaXGBnFIntTV8S00/4axMtCd3JYvI4fy0VuuXRGai3?= =?iso-8859-1?Q?5DNTyArCdnSRugmDfoLlr2PeZsBOzkSFKF6p+vlAv8Mw0kgbn6oKZ64oYD?= =?iso-8859-1?Q?TBH1NpmqT73aFQPtRv63wc53BZ9bEpUPUQBprkRpSU0ndNue14S6/S5L7C?= =?iso-8859-1?Q?OXu0cI7Xs99jmpn57gctQjSsCcC7oPiBQ2/wstZ7EvJpQmpkHTavQ+2MRf?= =?iso-8859-1?Q?pJ4TSUaWgVgabCaCEVAHczJ2LVyHlbwPMpAujJOZqNPJdZJTbIu5YMliW2?= =?iso-8859-1?Q?VykhfgcBreREoTldUHQ0WA2wCvO9AQcBcXYi+vge4hlubh5nLVPp/01byK?= =?iso-8859-1?Q?CERZIHgTOPTvU2R4nIRTPBoMscOieQxGWTMjeJbPtrMakH8JEfopDa/Vdm?= =?iso-8859-1?Q?eKsDzaDDFDg1mKX5qzd+3ycmX23NbhqEPzIThaDWcO4OHqql4YcRm8eO6D?= =?iso-8859-1?Q?BXjF1pUq1shCawnGtQUB28VNR2L31w3Npq7GLqJhbgXV6gbqzDeqbPTlH/?= =?iso-8859-1?Q?AD76VoWbhA=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: ajtqKiGODDBD5jAgjjwjnOhXMb6ZaLVGmS64gyshd+aigLqUjMTF1CMU9oLZGbYA75D32iNAQg++fly101yc2xs0wP65NqGoJ3rGux5CqBnGveJIqBe2s6mLjGNL9DzuJPE6gU6e6VK9+4KTSOaIF2P9QovHRCx2D7sz+Aq26P6dsXPsyonxo84sZT1tsHGu8fJRS3I7EHt72UdpsEGhP0otAlkro41nq+k3N/sqJKczc8SYfZmSM3SwdM7h86gyLsx9E/pO/JQ6xhRM61S10CGErYJe5raUwmyGtLF5yeE3Xon3h5CsY9/C1/5I39zQl7TmLbYFfYnnC4vYftIo3w== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4980.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ab8d2b97-309b-411f-a184-08defe92bcab X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Aug 2026 08:12:11.6864 (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: pPuKPjz3gYNKGaASNldRYG4uvnr3BA99rKhweTG/6aIb8N1ZWZntvnxITPxKHnnAgAM6MwKm2EMsCMeQwvMZ7yr1299q/3sTKXFFF+hdX0I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5661 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=2a01:111:f403:c40f::6; envelope-from=jamin_lin@aspeedtech.com; helo=SEYPR02CU001.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, 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 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 @aspeedtech.com) X-ZM-MESSAGEID: 1787213592020158500 Content-Type: text/plain; charset="utf-8" Introduce the ASPEED_DEV_ACRY enum slot and add the ACRY model state to AspeedSoCState. Instantiate the new ACRY model on the AST2600 SoC using its real-silicon register address and IRQ: - ACRY register region 0x1e6fa000-0x1e6fafff - IRQ 160 Signed-off-by: Jamin Lin Reviewed-by: C=C3=A9dric Le Goater --- include/hw/arm/aspeed_soc.h | 3 +++ hw/arm/aspeed_ast2600.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h index 46e7854727..8d80f16705 100644 --- a/include/hw/arm/aspeed_soc.h +++ b/include/hw/arm/aspeed_soc.h @@ -25,6 +25,7 @@ #include "hw/i2c/aspeed_i2c.h" #include "hw/i3c/aspeed_i3c.h" #include "hw/ssi/aspeed_smc.h" +#include "hw/misc/aspeed_acry.h" #include "hw/misc/aspeed_hace.h" #include "hw/misc/aspeed_sbc.h" #include "hw/misc/aspeed_sli.h" @@ -82,6 +83,7 @@ struct AspeedSoCState { AspeedSCUState scu; AspeedSCUState scuio; AspeedHACEState hace; + AspeedACRYState acry; AspeedXDMAState xdma; AspeedADCState adc; AspeedSMCState fmc; @@ -271,6 +273,7 @@ enum { ASPEED_DEV_EMMC, ASPEED_DEV_KCS, ASPEED_DEV_HACE, + ASPEED_DEV_ACRY, ASPEED_DEV_DPMCU, ASPEED_DEV_DP, ASPEED_DEV_I3C, diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c index f23a51c8a4..f7c7ec7fb1 100644 --- a/hw/arm/aspeed_ast2600.c +++ b/hw/arm/aspeed_ast2600.c @@ -52,6 +52,7 @@ static const hwaddr aspeed_soc_ast2600_memmap[] =3D { [ASPEED_DEV_DP] =3D 0x1E6EB000, [ASPEED_DEV_PCIE_PHY1] =3D 0x1E6ED200, [ASPEED_DEV_SBC] =3D 0x1E6F2000, + [ASPEED_DEV_ACRY] =3D 0x1E6FA000, [ASPEED_DEV_EMMC_BC] =3D 0x1E6f5000, [ASPEED_DEV_VIDEO] =3D 0x1E700000, [ASPEED_DEV_SDHCI] =3D 0x1E740000, @@ -144,6 +145,7 @@ static const int aspeed_soc_ast2600_irqmap[] =3D { [ASPEED_DEV_FSI1] =3D 100, [ASPEED_DEV_FSI2] =3D 101, [ASPEED_DEV_I3C] =3D 102, /* 102 -> 107 */ + [ASPEED_DEV_ACRY] =3D 160, }; =20 static qemu_irq aspeed_soc_ast2600_get_irq(AspeedSoCState *s, int dev) @@ -269,6 +271,8 @@ static void aspeed_soc_ast2600_init(Object *obj) snprintf(typename, sizeof(typename), "aspeed.hace-%s", socname); object_initialize_child(obj, "hace", &s->hace, typename); =20 + object_initialize_child(obj, "acry", &s->acry, TYPE_ASPEED_ACRY); + object_initialize_child(obj, "i3c", &s->i3c, TYPE_ASPEED_I3C); =20 object_initialize_child(obj, "sbc", &s->sbc, TYPE_ASPEED_AST2600_SBC); @@ -726,6 +730,19 @@ static void aspeed_soc_ast2600_realize(DeviceState *de= v, Error **errp) sysbus_connect_irq(SYS_BUS_DEVICE(&s->hace), 0, aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_HACE)); =20 + /* ACRY */ + object_property_set_link(OBJECT(&s->acry), "dram", OBJECT(s->dram_mr), + &error_abort); + object_property_set_link(OBJECT(&s->acry), "sram", OBJECT(&s->sram[1]), + &error_abort); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->acry), errp)) { + return; + } + aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->acry), 0, + sc->memmap[ASPEED_DEV_ACRY]); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->acry), 0, + aspeed_soc_ast2600_get_irq(s, ASPEED_DEV_ACRY)); + /* I3C */ if (!sysbus_realize(SYS_BUS_DEVICE(&s->i3c), errp)) { return; --=20 2.53.0 From nobody Fri Aug 21 21:26:30 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass(p=quarantine dis=none) header.from=aspeedtech.com ARC-Seal: i=2; a=rsa-sha256; t=1787213646; cv=pass; d=zohomail.com; s=zohoarc; b=Ws1Vqdry7+hXEy058gegYzMkjWa5cuLag+kEqa2XlAUiv+czN/AQDbwEtm6zFdzpRWXTzop11vzEgNGxdFJyn4dQrxaeoNQhXF7P+mdnOGGwR4PLQ+CETsBWqCVPL4nx/aefokAFhDktFyQiSjQf+6M+IAEU+6Z8R5MzdvIwJF4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787213646; h=Content-Type: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=LAq7Kdvv+0IAy/gC9dl/SdiQ3JyI3bxn22MbSvdI9oQ=; b=LWo+HylEmlYq6++dvDQaaAtgNzqXgy5WlSPOd8nseHWGAfbOOI0WT4SZ33tyWEwO6WUdH33iUZ22q4ivnKL4Fy4svXl20ZNwRw8Rrd925K1EASZigFfxvpsyZk6YRW0eajzTUtr4ZDlyDLd3M/PmXSC2Kuo9gM5ktZfEPhHfyrE= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787213646850219.4306104896931; Thu, 20 Aug 2026 01:14:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwxt8-0002D5-9G; Thu, 20 Aug 2026 04:12:38 -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 1wwxt5-0002CX-TA; Thu, 20 Aug 2026 04:12:35 -0400 Received: from mail-koreacentralazlp170130006.outbound.protection.outlook.com ([2a01:111:f403:c40f::6] helo=SEYPR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wwxt2-0001n5-Fo; Thu, 20 Aug 2026 04:12:35 -0400 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com (2603:1096:400:1cc::10) by TYZPR06MB5661.apcprd06.prod.outlook.com (2603:1096:400:28e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 08:12:13 +0000 Received: from TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3]) by TYZPR06MB4980.apcprd06.prod.outlook.com ([fe80::ea8a:7cb7:4822:2fb3%6]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 08:12:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nSTDUEDlEfvgbWE2h+ruEXjVdQ/OWKsG+W7mwNhxrMqhSwPrjgvoxiAicYbj9DrUMqzspYVCIEmhh6eMcRrsGvq8leHCCmfTHoj5+R5YX+NOPW8mjWwpVgF3tA4Zns23Ld8eZGWFIG2efMjouloc33CbEmIYsiR1NxgwIqECQWUoAr2r1SoLyaUcK7+xhovQIHSQGcBlyuXzPN1aq6WG2sjY3pg9AXcvKb8qoLmY5VQK4wnZQtMaI+eGU8sE1MR6OWxW+6KdnAl5bgwpetCXR2uem2DT2A8IoGjzpXGwDisxTi03yzaqH5mmxijIsrS1+Hv+m5U+XC1f1Y5uBiLhjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=LAq7Kdvv+0IAy/gC9dl/SdiQ3JyI3bxn22MbSvdI9oQ=; b=sS8hiHWbZ8io9VoHzAaX5lt1J+Lv7BQfnjzuq4vWo9tjl3RGh1/9MTGkCE5QZTQTGMOviEL5Dkv6qkBbO4ZFUei0VGcV2qQ06XCaNNqKStE00EpcErGxKNvu/gkXs6vSzD+LUvk2dE8nP3BHS8ro3WzsYnmmKmOaMmswLdp1fsrQF1ArlRkHsYZOvMELDI8i6x4iyFGgAa3Ktk+BHqRu25gdTERKiNrW+dDFMJ7vauKHR/HptTcb02jHSbo+s+7z25T3VrTvTV5fdLRuVUrP44dgvNnpjgyndotfO0ox209VYA0RcMrGv9yhQuCb43MaKHC4SkZIYlD2b2nAs0TEmw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none 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; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LAq7Kdvv+0IAy/gC9dl/SdiQ3JyI3bxn22MbSvdI9oQ=; b=K1InVpyAJdw12YfN7Tim+dDs/lFlT8B7vevrSP11e+8VVlrn3nLVE+G7z21bjjYrM2aEsXdmkfxHmUIh55hcXaM6i+csAAINpyDNrmMAgOEyAMm7r2Mk/h465f/tGtJRLbQRw1KhM0dPEamvPXh92cDG7RMusqpZJFqswcmBAxS976CPbNXvMTTAlSZmHmgjtKjYb+yLbQwuqp0WYGN+J0bBAI3gO+v+5xnkNnw3cFh4HLcjXKOzKulgnAs3zhpcGeNzGXqlTRaUuzyyNM1MKfcJCHKOSenJGbzvQu2Lz5uRevDHrmr3xYFbeqkLC3NQrnnGfE0bBHFfbEEk054j1Q== From: Jamin Lin To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Kane Chen , Andrew Jeffery , Joel Stanley , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:ASPEED BMCs" , "open list:All patches CC here" CC: Jamin Lin , Troy Lee Subject: [PATCH v2 4/4] tests/qtest/aspeed-acry-test: Add RSA ModExp tests Thread-Topic: [PATCH v2 4/4] tests/qtest/aspeed-acry-test: Add RSA ModExp tests Thread-Index: AQHdMHub497/BhE/dEuRliZjDuXh9w== Date: Thu, 20 Aug 2026 08:12:13 +0000 Message-ID: <20260820081206.3353463-5-jamin_lin@aspeedtech.com> References: <20260820081206.3353463-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260820081206.3353463-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: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR06MB4980:EE_|TYZPR06MB5661:EE_ x-ms-office365-filtering-correlation-id: db4cb9d4-6073-43e7-1fe3-08defe92bd8f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|7416014|23010399003|1800799024|366016|921020|38070700021|6133799003|3023799007|56012099006|10067099003|22082099003|18002099003; x-microsoft-antispam-message-info: TIXHZqKEBi/gFU9jvDEC2zsyIMmQVevjsVvzjmT7QJ41Yo1JCbcr9K9nGTBn5rz+2tE2pPDZ+zA6v2JiLGuK3gy3RlTBB0ZhQXxNKfbr5aN83LNTngyF/lbaqTntWXp8M28p7epOHteGXc6VqaTrTZAc05XQvp7UBVPxR/afVWCv1HGFoYcmX65r7+cUFD990lDmQkdAyl8xDFPLSk5gSDEWk10zhzFC8hPHP73wwEk7BNRgGox85w3pxjo1slgDJND4HlOeMdmgQx7oLPfoRQ/+BQFG4bisKHiq83VeiwJhSiwxPCiYntJ4nX4Z8SCaOHROMBCOCDRJsOQ4H2JVKhvLNek8k/86QYUJ1MJgLNtjAcmWlvEbAvyKDBtS27g73Crjuo/PbS4utMz+ElLhOXXdBPhcduYNmlNg61Hie6N2p3g9ECWdY8neqkUbk48x4oI2lhm/HkpLDWolchElEfvV8XHcQ6MGAvXgAPebj7qG3m6CGRr7zs11GN3gDsw03yVy0rnBFUE8t41HnYQ5hdTgHRuFUEooqjKkXC4ktYCvj1k6c2CrEfxV+G5IdoGYYUwAvOk0mPtE8fOIPr8viXloXS+5gMPfrxwqZVUorZGAc0fFhQHJcdX/a5EjvRV7SN2iIXlqnIHLlPHJBB5u+Qq3LNC9Kw4jwNkyG0XjwFmnl80cDkwfy0XQ8aEafyLp5kAJb9+ghJNBPIhUdzFPC0L97jK4fnIUli5DZv3FpjIXHLoS9mEEOzpQIZSVRiQt x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4980.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(921020)(38070700021)(6133799003)(3023799007)(56012099006)(10067099003)(22082099003)(18002099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?VKPaz+ujiZ7qRipZvwGhrOk1yGV3SMQ6vJ1Qr3Wiccp6BAuQhc8YNPgRPI?= =?iso-8859-1?Q?IrbXk6Nuh7xAJrF1+P/Gn7PxF0yBfAZObkIKdTpniz6a0iu/Yo5LZGyd1I?= =?iso-8859-1?Q?PNWM4xJKVB9detfm5Uqj0r+CpqV5waqFUbjj7vIKs9lArXPaDN4rgpqoph?= =?iso-8859-1?Q?V71X/n5DKnSG+0WJZeMimsYl1gLgrx39oeYcd191/drIKv2RQmdAUPlZi1?= =?iso-8859-1?Q?5uzMKMVMnrG04a7U/XQnkfr1IANzS5JlCgWWy2baNRwmLEIDKcQmNZK3qN?= =?iso-8859-1?Q?yh7U11PzJ38bjeAmRyhAd+4LneWxpUPtv1R/AowQkBg7eewTxv1UBeM/yQ?= =?iso-8859-1?Q?o81rn8HfOc1amTDosonm0N9fS4defsVfr33gbqauj69KaXt12pbZFIer80?= =?iso-8859-1?Q?tgmJwHcQA6hgPhxq+Wz4uSh26GTSdJszekTPpHAfxNxkRwjdfw7+OFHTwS?= =?iso-8859-1?Q?3tukM+hUNilZ0WqKdsphCnjzZUfdHVWISffk/qXOS3A8lHN9xi+KXFTBa7?= =?iso-8859-1?Q?JoTRW49aYpC/p52SyxO0lc5D6xIBsWvQ4Py1DwqT7RIjf4O0FxDBUrZjGS?= =?iso-8859-1?Q?t8p+IjrRA13xVZIkuuq9kGGwGCQVc5GNgxBe5Iyy5n6sGe8BwqPaO/lQef?= =?iso-8859-1?Q?L8htu78SRZSyY71gl/7u7Zf9W9v2Toi7Ms0fZNrHEuV3f9l7P3ljWkJ82Y?= =?iso-8859-1?Q?dGO+MrSCzG0mkIy8oola/1s5FOGfk8u2aI1a2xCNFeuj2BGQZjeaglAEeJ?= =?iso-8859-1?Q?SPVP1IJnJmPfBZQc/JzQye9L+3sfD2cUEn1UmmoztUEYcu7+8t3QQ8O2RE?= =?iso-8859-1?Q?1kjATJ3ATPZfilMz7A2Q7AIealddShgUQAq6eH66rQV2OeIlKj35YoDMbR?= =?iso-8859-1?Q?FJsX6OQUHWlVg4+ws+SLG4/SijYFzy6U0kUoxsFO9NKVwEKE/N5DpUFUMz?= =?iso-8859-1?Q?QUoMH6cQtET/Vipb9WXqTopJOUSIXi/cO5CVWtZUb3feOwnOTwkTOHfa29?= =?iso-8859-1?Q?5z9oIyGm4rY8Rilu3JNqEwMiYnxukJ1N9UUggr6+7CbRGMxyTnnbEMO8Vj?= =?iso-8859-1?Q?T6nnSVs/7m2GRS4BptdL+IsJQ0On7Eh5lApCqpdoIlCtRoTqviLKK09khe?= =?iso-8859-1?Q?g0ujqGfgCtkUNfdHdEWDwiWUq95e1yzk3oNrRHfEZVAiPkRJVgtKkzkEA2?= =?iso-8859-1?Q?2VUzkLTLPOXlOReH2Tm1TneP3utzr7zqS/woE/apd8OdPOXUFz9+ozLd77?= =?iso-8859-1?Q?7k7Q2T7EpQBGGYYHJEVOC+eqgNAfhaKFOcr3hI0qj3ashA5nOD2ptTCcwG?= =?iso-8859-1?Q?QKH8MRWXhXCDz9l96eel6CH3sZJKC06UgOt93oaAsvlILwKj4RQPKeqCOh?= =?iso-8859-1?Q?UtzfbVbhTJ+9w9E7MjYNMTeUElhZk1MhPXom3aAN/cNKtXpBL3ua8NWJXa?= =?iso-8859-1?Q?BW4ql8kKbmcLRgC9suzw1tV6Y44VWjxRjSoHeU0gw+Q2fsY6yJJ+bALFiu?= =?iso-8859-1?Q?Kby3BA8+QiYsyzJ99zcGbn5vLxj4tuxD7rGaNHAJ3h96/6pRTmHSfOtu0M?= =?iso-8859-1?Q?5Z5Y9+HGnhu6eb2IqSFApgGBURQ/za4JF4H2LRUxbkoo/p8NVD5fkTNP86?= =?iso-8859-1?Q?NWdZry+zR/HYxtkU0nsDJzJrc04AHi70/H+8Ul8+7k9FnJR+ib85SXpnqB?= =?iso-8859-1?Q?XDO5Pamw7Mz1A5s4JCkfCaQrBWEZIvgRKp6LRB0CkgTz6kOf7sIxfwYf7R?= =?iso-8859-1?Q?BUhNkp2UqlxXICyCWYhra6PezjWbqTR5XGaKp2DFGwNbzQyEF7GA6mNf0s?= =?iso-8859-1?Q?wSMgECjn1w=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: nMORNVbiGu1Nt0rkOdEAGAm3bTjLqpXz1vuce3aLYkkZzs/iYHIlm5F/e1Z8hl31r9K9mdAZyNYcU8bvvs8gwGtCd1EBsHR5HkiyP5lethSiO3IATCRk7Ucqi4brhaFcJep7G1h5x/S4KqQr+OQA73x/Eg9if8rxwbpXV8SSD1w7sxgyDX6k/Y197ez2eDu+pOY+2/fH8yu5KihXPT2dcdcJmM+ZXENDgTyRyOkVSE4IBXKnrLAwPQttflBoNthiGzYU9c9g5InJfsI/Yy6ZZXpzyumyu+v9B8wpYLZyXyOPiiOnxSeui934NBzPAyEIlmDIMelB4Ik5QGKeEquS0Q== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4980.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: db4cb9d4-6073-43e7-1fe3-08defe92bd8f X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Aug 2026 08:12:13.1421 (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: KpUosbAkBCWfUFQGzwoKlmZffDTierzZEB8aJPvunbFB9dtu+av/63+UzaLUVpfRdT8M8EZ3v6dVhVBnam7xIht2hyAIUfIwghkQiB/kvGg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5661 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=2a01:111:f403:c40f::6; envelope-from=jamin_lin@aspeedtech.com; helo=SEYPR02CU001.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, 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 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 @aspeedtech.com) X-ZM-MESSAGEID: 1787213648265158500 Content-Type: text/plain; charset="utf-8" Add qtest cases exercising the AST2600 ACRY RSA ModExp engine end to end. Each case lays out the exponent, modulus and message in the scattered SRAM byte layout the engine expects, triggers the engine, checks that both completion bits (RSA_ENG_DONE and RSA_DMA_DONE) are asserted together in the status register, reads the result back from the result SRAM, and checks the status bits clear afterwards. Comparing the result against a known-answer ciphertext also validates the SRAM byte mapping end to end. The cases cover raw (unpadded) public-exponent RSA, c =3D m^e mod n - exactly what the "rsa" akcipher transform backed by the ACRY FW performs, since PKCS1 padding is applied by a separate template layered on top in Linux, not by the ACRY hardware. QEMU's akcipher backend only implements raw RSA via libgcrypt, so the tests skip rather than fail when the build lacks it. The 2048-bit and 4096-bit vectors are rsa_tv_template[2] and [3] from the Linux kernel crypto self-test suite (crypto/testmgr.h, v6.18). Signed-off-by: Jamin Lin --- tests/qtest/aspeed-acry-test.c | 395 +++++++++++++++++++++++++++++++++ tests/qtest/meson.build | 5 +- 2 files changed, 399 insertions(+), 1 deletion(-) create mode 100644 tests/qtest/aspeed-acry-test.c diff --git a/tests/qtest/aspeed-acry-test.c b/tests/qtest/aspeed-acry-test.c new file mode 100644 index 0000000000..c80323cfe2 --- /dev/null +++ b/tests/qtest/aspeed-acry-test.c @@ -0,0 +1,395 @@ +/* + * QTest testcase for the ASPEED ACRY Engine + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "libqtest.h" +#include "qemu/bitops.h" +#include "crypto/akcipher.h" + +#define ACRY_TRIGGER 0x000 +#define ACRY_TRIGGER_RSA_DMA_DATA BIT(1) +#define ACRY_TRIGGER_RSA_START BIT(0) +#define ACRY_DMA_CMD 0x048 +#define ACRY_DMA_CMD_DMEM_AHB BIT(8) +#define ACRY_DMA_CMD_SRAM_MODE_RSA (0x3 << 4) +#define ACRY_DMA_SRC 0x04C +#define ACRY_DMA_LEN 0x050 +#define ACRY_RSA_KEY_LEN 0x058 +#define ACRY_INT_MASK 0x3F8 +#define ACRY_INT_MASK_RSA_DMA_MASK BIT(2) +#define ACRY_INT_MASK_RSA_ENG_MASK BIT(1) +#define ACRY_STATUS 0x3FC +#define ACRY_STATUS_RSA_DMA_DONE BIT(2) +#define ACRY_STATUS_RSA_ENG_DONE BIT(1) +#define ACRY_STATUS_RSA_DONE (ACRY_STATUS_RSA_ENG_DONE | \ + ACRY_STATUS_RSA_DMA_DONE) + +#define ACRY_DATA_MAX_LEN 0x800 +#define ACRY_SRAM_SIZE (3 * ACRY_DATA_MAX_LEN) +#define ACRY_MAX_BITS 4096 +#define ACRY_MAX_BYTES (ACRY_MAX_BITS / 8) + +/* Dwords into each 12-dword block where each operand's region starts. */ +#define ACRY_EXP_OFFSET 0 +#define ACRY_MOD_OFFSET 4 +#define ACRY_DATA_OFFSET 8 + +/* + * Raw (unpadded) RSA known-answer vectors: c =3D m^e mod n with + * e =3D 0x10001 (65537) - exactly what the "rsa" akcipher transform backe= d by + * the ACRY FW computes. PKCS1 padding is a separate "pkcs1pad(rsa)" templ= ate + * layered on top in Linux, not done by the ACRY hardware. + * + * rsa2048_* and rsa4096_* are from the Linux kernel crypto/testmgr.h (v6.= 18), + * rsa_tv_template[2] and [3]. Grep that file's own comment to find them: + * + * RSA test vectors. Borrowed from openSSL. + * + * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tr= ee/crypto/testmgr.h?h=3Dv6.18 + * + * There the modulus n is DER-encoded in the .key field (not a raw field),= the + * ciphertext is .c, and every entry reuses the same 8-byte .m message. + */ +/* rsa_tv_template[].m, shared by every entry */ +static const uint8_t rsa_m[8] =3D { + 0x54, 0x85, 0x9B, 0x34, 0x2C, 0x49, 0xEA, 0x2A, +}; +/* public exponent e =3D 65537, DER-encoded in every .key */ +static const uint8_t rsa_e[3] =3D { 0x01, 0x00, 0x01 }; + +/* rsa_tv_template[2].key, modulus n */ +static const uint8_t rsa2048_n[256] =3D { + 0xDB, 0x10, 0x1A, 0xC2, 0xA3, 0xF1, 0xDC, 0xFF, 0x13, 0x6B, 0xED, 0x44, + 0xDF, 0xF0, 0x02, 0x6D, 0x13, 0xC7, 0x88, 0xDA, 0x70, 0x6B, 0x54, 0xF1, + 0xE8, 0x27, 0xDC, 0xC3, 0x0F, 0x99, 0x6A, 0xFA, 0xC6, 0x67, 0xFF, 0x1D, + 0x1E, 0x3C, 0x1D, 0xC1, 0xB5, 0x5F, 0x6C, 0xC0, 0xB2, 0x07, 0x3A, 0x6D, + 0x41, 0xE4, 0x25, 0x99, 0xAC, 0xFC, 0xD2, 0x0F, 0x02, 0xD3, 0xD1, 0x54, + 0x06, 0x1A, 0x51, 0x77, 0xBD, 0xB6, 0xBF, 0xEA, 0xA7, 0x5C, 0x06, 0xA9, + 0x5D, 0x69, 0x84, 0x45, 0xD7, 0xF5, 0x05, 0xBA, 0x47, 0xF0, 0x1B, 0xD7, + 0x2B, 0x24, 0xEC, 0xCB, 0x9B, 0x1B, 0x10, 0x8D, 0x81, 0xA0, 0xBE, 0xB1, + 0x8C, 0x33, 0xE4, 0x36, 0xB8, 0x43, 0xEB, 0x19, 0x2A, 0x81, 0x8D, 0xDE, + 0x81, 0x0A, 0x99, 0x48, 0xB6, 0xF6, 0xBC, 0xCD, 0x49, 0x34, 0x3A, 0x8F, + 0x26, 0x94, 0xE3, 0x28, 0x82, 0x1A, 0x7C, 0x8F, 0x59, 0x9F, 0x45, 0xE8, + 0x5D, 0x1A, 0x45, 0x76, 0x04, 0x56, 0x05, 0xA1, 0xD0, 0x1B, 0x8C, 0x77, + 0x6D, 0xAF, 0x53, 0xFA, 0x71, 0xE2, 0x67, 0xE0, 0x9A, 0xFE, 0x03, 0xA9, + 0x85, 0xD2, 0xC9, 0xAA, 0xBA, 0x2A, 0xBC, 0xF4, 0xA0, 0x08, 0xF5, 0x13, + 0x98, 0x13, 0x5D, 0xF0, 0xD9, 0x33, 0x34, 0x2A, 0x61, 0xC3, 0x89, 0x55, + 0xF0, 0xAE, 0x1A, 0x9C, 0x22, 0xEE, 0x19, 0x05, 0x8D, 0x32, 0xFE, 0xEC, + 0x9C, 0x84, 0xBA, 0xB7, 0xF9, 0x6C, 0x3A, 0x4F, 0x07, 0xFC, 0x45, 0xEB, + 0x12, 0xE5, 0x7B, 0xFD, 0x55, 0xE6, 0x29, 0x69, 0xD1, 0xC2, 0xE8, 0xB9, + 0x78, 0x59, 0xF6, 0x79, 0x10, 0xC6, 0x4E, 0xEB, 0x6A, 0x5E, 0xB9, 0x9A, + 0xC7, 0xC4, 0x5B, 0x63, 0xDA, 0xA3, 0x3F, 0x5E, 0x92, 0x7A, 0x81, 0x5E, + 0xD6, 0xB0, 0xE2, 0x62, 0x8F, 0x74, 0x26, 0xC2, 0x0C, 0xD3, 0x9A, 0x17, + 0x47, 0xE6, 0x8E, 0xAB, +}; +/* rsa_tv_template[2].c */ +static const uint8_t rsa2048_c[256] =3D { + 0xB2, 0x97, 0x76, 0xB4, 0xAE, 0x3E, 0x38, 0x3C, 0x7E, 0x64, 0x1F, 0xCC, + 0xA2, 0x7F, 0xF6, 0xBE, 0xCF, 0x49, 0xBC, 0x48, 0xD3, 0x6C, 0x8F, 0x0A, + 0x0E, 0xC1, 0x73, 0xBD, 0x7B, 0x55, 0x79, 0x36, 0x0E, 0xA1, 0x87, 0x88, + 0xB9, 0x2C, 0x90, 0xA6, 0x53, 0x5E, 0xE9, 0xEF, 0xC4, 0xE2, 0x4D, 0xDD, + 0xF7, 0xA6, 0x69, 0x82, 0x3F, 0x56, 0xA4, 0x7B, 0xFB, 0x62, 0xE0, 0xAE, + 0xB8, 0xD3, 0x04, 0xB3, 0xAC, 0x5A, 0x15, 0x2A, 0xE3, 0x19, 0x9B, 0x03, + 0x9A, 0x0B, 0x41, 0xDA, 0x64, 0xEC, 0x0A, 0x69, 0xFC, 0xF2, 0x10, 0x92, + 0xF3, 0xC1, 0xBF, 0x84, 0x7F, 0xFD, 0x2C, 0xAE, 0xC8, 0xB5, 0xF6, 0x41, + 0x70, 0xC5, 0x47, 0x03, 0x8A, 0xF8, 0xFF, 0x6F, 0x3F, 0xD2, 0x6F, 0x09, + 0xB4, 0x22, 0xF3, 0x30, 0xBE, 0xA9, 0x85, 0xCB, 0x9C, 0x8D, 0xF9, 0x8F, + 0xEB, 0x32, 0x91, 0xA2, 0x25, 0x84, 0x8F, 0xF5, 0xDC, 0xC7, 0x06, 0x9C, + 0x2D, 0xE5, 0x11, 0x2C, 0x09, 0x09, 0x87, 0x09, 0xA9, 0xF6, 0x33, 0x73, + 0x90, 0xF1, 0x60, 0xF2, 0x65, 0xDD, 0x30, 0xA5, 0x66, 0xCE, 0x62, 0x7B, + 0xD0, 0xF8, 0x2D, 0x3D, 0x19, 0x82, 0x77, 0xE3, 0x0A, 0x5F, 0x75, 0x2F, + 0x8E, 0xB1, 0xE5, 0xE8, 0x91, 0x35, 0x1B, 0x3B, 0x33, 0xB7, 0x66, 0x92, + 0xD1, 0xF2, 0x8E, 0x6F, 0xE5, 0x75, 0x0C, 0xAD, 0x36, 0xFB, 0x4E, 0xD0, + 0x66, 0x61, 0xBD, 0x49, 0xFE, 0xF4, 0x1A, 0xA2, 0x2B, 0x49, 0xFE, 0x03, + 0x4C, 0x74, 0x47, 0x8D, 0x9A, 0x66, 0xB2, 0x49, 0x46, 0x4D, 0x77, 0xEA, + 0x33, 0x4D, 0x6B, 0x3C, 0xB4, 0x49, 0x4A, 0xC6, 0x7D, 0x3D, 0xB5, 0xB9, + 0x56, 0x41, 0x15, 0x67, 0x0F, 0x94, 0x3C, 0x93, 0x65, 0x27, 0xE0, 0x21, + 0x5D, 0x59, 0xC3, 0x62, 0xD5, 0xA6, 0xDA, 0x38, 0x26, 0x22, 0x5E, 0x34, + 0x1C, 0x94, 0xAF, 0x98, +}; + +/* rsa_tv_template[3].key, modulus n */ +static const uint8_t rsa4096_n[512] =3D { + 0xC3, 0x8B, 0x55, 0x7B, 0x73, 0x4D, 0xFF, 0xE9, 0x9B, 0xC6, 0xDC, 0x67, + 0x3C, 0xB4, 0x8E, 0xA0, 0x86, 0xED, 0xF2, 0xB9, 0x50, 0x5C, 0x54, 0x5C, + 0xBA, 0xE4, 0xA1, 0xB2, 0xA7, 0xAE, 0x2F, 0x1B, 0x7D, 0xF1, 0xFB, 0xAC, + 0x79, 0xC5, 0xDF, 0x1A, 0x00, 0xC9, 0xB2, 0xC1, 0x61, 0x25, 0x33, 0xE6, + 0x9C, 0xE9, 0xCF, 0xD6, 0x27, 0xC4, 0x4E, 0x44, 0x30, 0x44, 0x5E, 0x08, + 0xA1, 0x87, 0x52, 0xCC, 0x6B, 0x97, 0x70, 0x8C, 0xBC, 0xA5, 0x06, 0x31, + 0x0C, 0xD4, 0x2F, 0xD5, 0x7D, 0x26, 0x24, 0xA2, 0xE2, 0xAC, 0x78, 0xF4, + 0x53, 0x14, 0xCE, 0xF7, 0x19, 0x2E, 0xD7, 0xF7, 0xE6, 0x0C, 0xB9, 0x56, + 0x7F, 0x0B, 0xF1, 0xB1, 0xE2, 0x43, 0x70, 0xBD, 0x86, 0x1D, 0xA1, 0xCC, + 0x2B, 0x19, 0x08, 0x76, 0xEF, 0x91, 0xAC, 0xBF, 0x20, 0x24, 0x0D, 0x38, + 0xC0, 0x89, 0xB8, 0x9A, 0x70, 0xB3, 0x64, 0xD9, 0x8F, 0x80, 0x41, 0x10, + 0x5B, 0x9F, 0xB1, 0xCB, 0x76, 0x43, 0x00, 0x21, 0x25, 0x36, 0xD4, 0x19, + 0xFC, 0x55, 0x95, 0x10, 0xE4, 0x26, 0x74, 0x98, 0x2C, 0xD9, 0xBD, 0x0B, + 0x2B, 0x04, 0xC2, 0xAC, 0x82, 0x38, 0xB4, 0xDD, 0x4C, 0x04, 0x7E, 0x51, + 0x36, 0x40, 0x1E, 0x0B, 0xC4, 0x7C, 0x25, 0xDD, 0x4B, 0xB2, 0xE7, 0x20, + 0x0A, 0x57, 0xF9, 0xB4, 0x94, 0xC3, 0x08, 0x33, 0x22, 0x6F, 0x8B, 0x48, + 0xDB, 0x03, 0x68, 0x5A, 0x5B, 0xBA, 0xAE, 0xF3, 0xAD, 0xCF, 0xC3, 0x6D, + 0xBA, 0xF1, 0x28, 0x67, 0x7E, 0x6C, 0x79, 0x07, 0xDE, 0xFC, 0xED, 0xE7, + 0x96, 0xE3, 0x6C, 0xE0, 0x2C, 0x87, 0xF8, 0x02, 0x01, 0x28, 0x38, 0x43, + 0x21, 0x53, 0x84, 0x69, 0x75, 0x78, 0x15, 0x7E, 0xEE, 0xD2, 0x1B, 0xB9, + 0x23, 0x40, 0xA8, 0x86, 0x1E, 0x38, 0x83, 0xB2, 0x73, 0x1D, 0x53, 0xFB, + 0x9E, 0x2A, 0x8A, 0xB2, 0x75, 0x35, 0x01, 0xC3, 0xC3, 0xC4, 0x94, 0xE8, + 0x84, 0x86, 0x64, 0x81, 0xF4, 0x42, 0xAA, 0x3C, 0x0E, 0xD6, 0x4F, 0xBC, + 0x0A, 0x09, 0x2D, 0xE7, 0x1B, 0xD4, 0x10, 0xA8, 0x54, 0xEA, 0x89, 0x84, + 0x8A, 0xCB, 0xF7, 0x5A, 0x3C, 0xCA, 0x76, 0x08, 0x29, 0x62, 0xB4, 0x6A, + 0x22, 0xDF, 0x14, 0x95, 0x71, 0xFD, 0xB6, 0x86, 0x39, 0xB8, 0x8B, 0xF8, + 0x91, 0x7F, 0x38, 0xAA, 0x14, 0xCD, 0xE5, 0xF5, 0x1D, 0xC2, 0x6D, 0x53, + 0x69, 0x52, 0x84, 0x7F, 0xA3, 0x1A, 0x5E, 0x26, 0x04, 0x83, 0x06, 0x73, + 0x52, 0x56, 0xCF, 0x76, 0x26, 0xC9, 0xDD, 0x75, 0xD7, 0xFC, 0xF4, 0x69, + 0xD8, 0x7B, 0x55, 0xB7, 0x68, 0x13, 0x53, 0xB9, 0xE7, 0x89, 0xC3, 0xE8, + 0xD6, 0x6E, 0xA7, 0x6D, 0xEA, 0x81, 0xFD, 0xC4, 0xB7, 0x05, 0x5A, 0xB7, + 0x41, 0x0A, 0x23, 0x8E, 0x03, 0x8A, 0x1C, 0xAE, 0xD3, 0x1E, 0xCE, 0xE3, + 0x5E, 0xFC, 0x19, 0x4A, 0xEE, 0x61, 0x9B, 0x8E, 0xE5, 0xE5, 0xDD, 0x85, + 0xF9, 0x41, 0xEC, 0x14, 0x53, 0x92, 0xF7, 0xDD, 0x06, 0x85, 0x02, 0x91, + 0xE3, 0xEB, 0x6C, 0x43, 0x03, 0xB1, 0x36, 0x7B, 0x89, 0x5A, 0xA8, 0xEB, + 0xFC, 0xD5, 0xA8, 0x35, 0xDC, 0x81, 0xD9, 0x5C, 0xBD, 0xCA, 0xDC, 0x9B, + 0x98, 0x0B, 0x06, 0x5D, 0x0C, 0x5B, 0xEE, 0xF3, 0xD5, 0xCC, 0x57, 0xC9, + 0x71, 0x2F, 0x90, 0x3B, 0x3C, 0xF0, 0x8E, 0x4E, 0x35, 0x48, 0xAE, 0x63, + 0x74, 0xA9, 0xFC, 0x72, 0x75, 0x8E, 0x34, 0xA8, 0xF2, 0x1F, 0xEA, 0xDF, + 0x3A, 0x37, 0x2D, 0xE5, 0x39, 0x39, 0xF8, 0x57, 0x58, 0x3C, 0x04, 0xFE, + 0x87, 0x06, 0x98, 0xBC, 0x7B, 0xD3, 0x21, 0x36, 0x60, 0x25, 0x54, 0xA7, + 0x3D, 0xFA, 0x91, 0xCC, 0xA8, 0x0B, 0x92, 0x8E, 0xB4, 0xF7, 0x06, 0xFF, + 0x1E, 0x95, 0xCB, 0x07, 0x76, 0x97, 0x3B, 0x9D, +}; +/* rsa_tv_template[3].c */ +static const uint8_t rsa4096_c[512] =3D { + 0x5C, 0xCE, 0x9C, 0xD7, 0x9A, 0x9E, 0xA1, 0xFE, 0x7A, 0x82, 0x3C, 0x68, + 0x27, 0x98, 0xE3, 0x5D, 0xD5, 0xD7, 0x07, 0x29, 0xF5, 0xFB, 0xC3, 0x1A, + 0x7F, 0x63, 0x1E, 0x62, 0x31, 0x3B, 0x19, 0x87, 0x79, 0x4F, 0xEC, 0x7B, + 0xF3, 0xCB, 0xEA, 0x9B, 0x95, 0x52, 0x3A, 0x40, 0xE5, 0x87, 0x7B, 0x72, + 0xD1, 0x72, 0xC9, 0xFB, 0x54, 0x63, 0xD8, 0xC9, 0xD7, 0x2C, 0xFC, 0x7B, + 0xC3, 0x14, 0x1E, 0xBC, 0x18, 0xB4, 0x34, 0xA1, 0xBF, 0x14, 0xB1, 0x37, + 0x31, 0x6E, 0xF0, 0x1B, 0x35, 0x19, 0x54, 0x07, 0xF7, 0x99, 0xEC, 0x3E, + 0x63, 0xE2, 0xCD, 0x61, 0x28, 0x65, 0xC3, 0xCD, 0xB1, 0x38, 0x36, 0xA5, + 0xB2, 0xD7, 0xB0, 0xDC, 0x1F, 0xF5, 0xEF, 0x19, 0xC7, 0x53, 0x32, 0x2D, + 0x1C, 0x26, 0xDA, 0xE4, 0x0D, 0xD6, 0x90, 0x7E, 0x28, 0xD8, 0xDC, 0xE4, + 0x61, 0x05, 0xD2, 0x25, 0x90, 0x01, 0xD3, 0x96, 0x6D, 0xA6, 0xCF, 0x58, + 0x20, 0xBB, 0x03, 0xF4, 0x01, 0xBC, 0x79, 0xB9, 0x18, 0xD8, 0xB8, 0xBA, + 0xBD, 0x93, 0xFC, 0xF2, 0x62, 0x5D, 0x8C, 0x66, 0x1E, 0x0E, 0x84, 0x59, + 0x93, 0xDD, 0xE2, 0x93, 0xA2, 0x62, 0x7D, 0x08, 0x82, 0x7A, 0xDD, 0xFC, + 0xB8, 0xBC, 0xC5, 0x4F, 0x9C, 0x4E, 0xBF, 0xB4, 0xFC, 0xF4, 0xC5, 0x01, + 0xE8, 0x00, 0x70, 0x4D, 0x28, 0x26, 0xCC, 0x2E, 0xFE, 0x0E, 0x58, 0x41, + 0x8B, 0xEC, 0xAF, 0x7C, 0x4B, 0x54, 0xD0, 0xA0, 0x64, 0xF9, 0x32, 0xF4, + 0x2E, 0x47, 0x65, 0x0A, 0x67, 0x88, 0x39, 0x3A, 0xDB, 0xB2, 0xDB, 0x7B, + 0xB5, 0xF6, 0x17, 0xA8, 0xD9, 0xC6, 0x5E, 0x28, 0x13, 0x82, 0x8A, 0x99, + 0xDB, 0x60, 0x08, 0xA5, 0x23, 0x37, 0xFA, 0x88, 0x90, 0x31, 0xC8, 0x9D, + 0x8F, 0xEC, 0xFB, 0x85, 0x9F, 0xB1, 0xCE, 0xA6, 0x24, 0x50, 0x46, 0x44, + 0x47, 0xCB, 0x65, 0xD1, 0xDF, 0xC0, 0xB1, 0x6C, 0x90, 0x1F, 0x99, 0x8E, + 0x4D, 0xD5, 0x9E, 0x31, 0x07, 0x66, 0x87, 0xDF, 0x01, 0xAA, 0x56, 0x3C, + 0x71, 0xE0, 0x2B, 0x6F, 0x67, 0x3B, 0x23, 0xED, 0xC2, 0xBD, 0x03, 0x30, + 0x79, 0x76, 0x02, 0x10, 0x10, 0x98, 0x85, 0x8A, 0xFF, 0xFD, 0x0B, 0xDA, + 0xA5, 0xD9, 0x32, 0x48, 0x02, 0xA0, 0x0B, 0xB9, 0x2A, 0x8A, 0x18, 0xCA, + 0xC6, 0x8F, 0x3F, 0xBB, 0x16, 0xB2, 0xAA, 0x98, 0x27, 0xE3, 0x60, 0x43, + 0xED, 0x15, 0x70, 0xD4, 0x57, 0x15, 0xFE, 0x19, 0xD4, 0x9B, 0x13, 0x78, + 0x8A, 0xF7, 0x21, 0xF1, 0xA2, 0xA2, 0x2D, 0xB3, 0x09, 0xCF, 0x44, 0x91, + 0x6E, 0x08, 0x3A, 0x30, 0x81, 0x3E, 0x90, 0x93, 0x8A, 0x67, 0x33, 0x00, + 0x59, 0x54, 0x9A, 0x25, 0xD3, 0x49, 0x8E, 0x9F, 0xC1, 0x4B, 0xE5, 0x86, + 0xF3, 0x50, 0x4C, 0xBC, 0xC5, 0xD3, 0xF5, 0x3A, 0x54, 0xE1, 0x36, 0x3F, + 0xE2, 0x5A, 0xB4, 0x37, 0xC0, 0xEB, 0x70, 0x35, 0xEC, 0xF6, 0xB7, 0xE8, + 0x44, 0x3B, 0x7B, 0xF3, 0xF1, 0xF2, 0x1E, 0xDB, 0x60, 0x7D, 0xD5, 0xBE, + 0xF0, 0x71, 0x34, 0x90, 0x4C, 0xCB, 0xD4, 0x35, 0x51, 0xC7, 0xDD, 0xD8, + 0xC9, 0x81, 0xF5, 0x5D, 0x57, 0x46, 0x2C, 0xB1, 0x7B, 0x9B, 0xAA, 0xCB, + 0xD1, 0x22, 0x25, 0x49, 0x44, 0xA3, 0xD4, 0x6B, 0x29, 0x7B, 0xD8, 0xB2, + 0x07, 0x93, 0xBF, 0x3D, 0x52, 0x49, 0x84, 0x79, 0xEF, 0xB8, 0xE5, 0xC4, + 0xAD, 0xCA, 0xA8, 0xC6, 0xF6, 0xA6, 0x76, 0x70, 0x5B, 0x0B, 0xE5, 0x83, + 0xC6, 0x0E, 0xEF, 0x55, 0xF2, 0xE7, 0xFF, 0x04, 0xEA, 0xE6, 0x13, 0xBE, + 0x40, 0xE1, 0x40, 0x45, 0x48, 0x66, 0x75, 0x31, 0xAE, 0x35, 0x64, 0x91, + 0x11, 0x6F, 0xDA, 0xEE, 0x26, 0x86, 0x45, 0x6F, 0x0B, 0xD5, 0x9F, 0x03, + 0xB1, 0x65, 0x5B, 0xDB, 0xA4, 0xE4, 0xF9, 0x45, +}; + +/* + * Offset in the scattered buffer of byte 'op_byte' (0 =3D least significa= nt) + * of the operand whose region starts 'region' dwords into each 12-dword + * block (0 =3D exp, 4 =3D mod, 8 =3D data). Reproduces the byte layout th= e ACRY + * engine mandates, so the test lays out its DMA input and decodes the + * result the same way the hardware does. + */ +static int acry_operand_offset(int region, int op_byte) +{ + int byte_in_dword; + int op_dword; + int block; + int lane; + + op_dword =3D op_byte / 4; + byte_in_dword =3D op_byte % 4; + block =3D op_dword / 4; + lane =3D op_dword % 4; + + return (block * 12 + region + lane) * 4 + byte_in_dword; +} + +/* + * Write a big-endian (most significant byte first) bignum of 'be_len' byt= es + * into the scattered buffer region 'region' (exp, mod, or data), placing + * significance level k at acry_operand_offset(region, k). + */ +static void put_bignum_be_bytes(uint8_t *buf, int region, + const uint8_t *be, int be_len) +{ + int be_index; + int offset; + int k; + + /* be[0] (MSB) maps to the highest level; be_index walks up from 0. */ + be_index =3D 0; + for (k =3D be_len - 1; k >=3D 0; k--) { + offset =3D acry_operand_offset(region, k); + buf[offset] =3D be[be_index++]; + } +} + +/* Inverse of put_bignum_be_bytes(): gather a big-endian bignum back out. = */ +static void get_bignum_be_bytes(const uint8_t *buf, int region, + uint8_t *out_be, int be_len) +{ + int be_index; + int offset; + int k; + + /* Inverse of put_bignum_be_bytes(): highest level -> out_be[0] (MSB).= */ + be_index =3D 0; + for (k =3D be_len - 1; k >=3D 0; k--) { + offset =3D acry_operand_offset(region, k); + out_be[be_index++] =3D buf[offset]; + } +} + +typedef struct AspeedACRYModExp { + const char *name; + const uint8_t *n; + size_t n_len; + const uint8_t *e; + size_t e_len; + const uint8_t *m; + size_t m_len; + const uint8_t *c; + size_t c_len; +} AspeedACRYModExp; + +static const AspeedACRYModExp acry_modexp_tests[] =3D { + { + .name =3D "modexp_rsa2048", + .n =3D rsa2048_n, + .n_len =3D sizeof(rsa2048_n), + .e =3D rsa_e, + .e_len =3D sizeof(rsa_e), + .m =3D rsa_m, + .m_len =3D sizeof(rsa_m), + .c =3D rsa2048_c, + .c_len =3D sizeof(rsa2048_c), + }, + { + .name =3D "modexp_rsa4096", + .n =3D rsa4096_n, + .n_len =3D sizeof(rsa4096_n), + .e =3D rsa_e, + .e_len =3D sizeof(rsa_e), + .m =3D rsa_m, + .m_len =3D sizeof(rsa_m), + .c =3D rsa4096_c, + .c_len =3D sizeof(rsa4096_c), + }, +}; + +typedef struct AspeedACRYTest { + const char *machine; + uint64_t dram_addr; + uint64_t sram_addr; + uint64_t acry_addr; + int index; +} AspeedACRYTest; + +static void test_modexp_rsa(const void *opaque) +{ + const AspeedACRYTest *c =3D opaque; + const AspeedACRYModExp *t =3D &acry_modexp_tests[c->index]; + QTestState *qts =3D qtest_init(c->machine); + uint8_t dram_buf[ACRY_SRAM_SIZE] =3D { 0 }; + uint8_t sram_buf[ACRY_SRAM_SIZE] =3D { 0 }; + uint8_t result[ACRY_MAX_BYTES] =3D { 0 }; + + g_assert_cmpuint(t->c_len, <=3D, sizeof(result)); + + put_bignum_be_bytes(dram_buf, ACRY_EXP_OFFSET, t->e, t->e_len); + put_bignum_be_bytes(dram_buf, ACRY_MOD_OFFSET, t->n, t->n_len); + put_bignum_be_bytes(dram_buf, ACRY_DATA_OFFSET, t->m, t->m_len); + + qtest_memwrite(qts, c->dram_addr, dram_buf, sizeof(dram_buf)); + + qtest_writel(qts, c->acry_addr + ACRY_DMA_CMD, ACRY_DMA_CMD_DMEM_AHB); + qtest_writel(qts, c->acry_addr + ACRY_DMA_SRC, c->dram_addr); + qtest_writel(qts, c->acry_addr + ACRY_RSA_KEY_LEN, + ((uint32_t)(t->e_len * 8) << 16) | (uint32_t)(t->n_len * 8= )); + qtest_writel(qts, c->acry_addr + ACRY_DMA_LEN, ACRY_SRAM_SIZE); + qtest_writel(qts, c->acry_addr + ACRY_INT_MASK, + ACRY_INT_MASK_RSA_ENG_MASK | ACRY_INT_MASK_RSA_DMA_MASK); + qtest_writel(qts, c->acry_addr + ACRY_DMA_CMD, ACRY_DMA_CMD_SRAM_MODE_= RSA); + qtest_writel(qts, c->acry_addr + ACRY_TRIGGER, + ACRY_TRIGGER_RSA_START | ACRY_TRIGGER_RSA_DMA_DATA); + + /* Completion requires both RSA_ENG_DONE and RSA_DMA_DONE to be assert= ed. */ + g_assert_cmphex(qtest_readl(qts, c->acry_addr + ACRY_STATUS), =3D=3D, + ACRY_STATUS_RSA_DONE); + + qtest_memread(qts, c->sram_addr, sram_buf, sizeof(sram_buf)); + get_bignum_be_bytes(sram_buf, ACRY_DATA_OFFSET, result, t->c_len); + g_assert_cmpmem(result, t->c_len, t->c, t->c_len); + + /* Clear IRQ status and check it is deasserted */ + qtest_writel(qts, c->acry_addr + ACRY_STATUS, ACRY_STATUS_RSA_DONE); + g_assert_cmphex(qtest_readl(qts, c->acry_addr + ACRY_STATUS), =3D=3D, = 0); + + qtest_quit(qts); +} + +static void aspeed_add_acry_tests(const char *prefix, const char *machine, + uint64_t acry_addr, uint64_t sram_addr, + uint64_t dram_addr) +{ + QCryptoAkCipherOptions opts =3D { + .alg =3D QCRYPTO_AK_CIPHER_ALGO_RSA, + .u.rsa.padding_alg =3D QCRYPTO_RSA_PADDING_ALGO_RAW, + }; + int i; + + if (!qcrypto_akcipher_supports(&opts)) { + g_printerr("# skip ACRY tests: raw RSA not supported by the crypto= " + "backend\n"); + return; + } + + for (i =3D 0; i < ARRAY_SIZE(acry_modexp_tests); i++) { + g_autofree char *path =3D NULL; + AspeedACRYTest *t; + + path =3D g_strdup_printf("%s/acry/%s", prefix, + acry_modexp_tests[i].name); + t =3D g_new0(AspeedACRYTest, 1); + t->machine =3D machine; + t->acry_addr =3D acry_addr; + t->sram_addr =3D sram_addr; + t->dram_addr =3D dram_addr; + t->index =3D i; + qtest_add_data_func_full(path, t, test_modexp_rsa, g_free); + } +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + aspeed_add_acry_tests("ast2600", "-machine ast2600-evb", + 0x1e6fa000, 0x1e710000, 0x80001000); + + return g_test_run(); +} diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index f7c7d06620..c58be94c25 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -220,7 +220,8 @@ qtests_npcm7xx =3D \ qtests_npcm8xx =3D \ ['npcm_gmac-test'] qtests_aspeed =3D \ - ['aspeed_gpio-test', + ['aspeed-acry-test', + 'aspeed_gpio-test', 'aspeed_hace-test', 'aspeed_scu-test', 'aspeed_smc-test'] @@ -392,6 +393,8 @@ if get_option('replication').allowed() endif =20 qtests =3D { + 'aspeed-acry-test': [files('aspeed-acry-test.c'), + crypto], 'aspeed_hace-test': [files('aspeed-hace-utils.c', 'aspeed_hace-test.c'), crypto], 'aspeed_smc-test': files('aspeed-smc-utils.c', 'aspeed_smc-test.c'), --=20 2.53.0