From nobody Mon Jun 8 06:38:44 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=1780468747; cv=pass; d=zohomail.com; s=zohoarc; b=SxZoVJhaKW897hBXgTkpc1TxaBhBk4d+F5b2ap83H7HaSNR2/VKwC53VxSYK9Lh9pYQYYj9S+IO2fF30417Gd42aOe8Vycmv02JzzdGPBpmtQDgzfTsPsl8VzW44IyERwT+RQ8iKgzypohg66TsGLNFN5V2a5TEC4Bbi3sjfCp0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780468747; 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=0GzQITYdSQ4PHvEFsqv3NmxgB55AenqB8H6OKIA9d80=; b=Wq0I2xc3SxWWeiY3reCHxORUDxcWkw9VIx3B5bYzAl52apJZpC6U0QWhTt3ddzTv+NdWhIDTLpOWXZNwLpeUdrUaf6h/qd5PhZu+fwhdMGiA4GYRiIdBC23NTuvOhRVS6KEAbUkI3k1/NXAhKp9a1+bySWmd2BSkx2fzVjeBRP0= 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 1780468747535781.7623079802025; Tue, 2 Jun 2026 23:39:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUfF1-00006l-JH; Wed, 03 Jun 2026 02:38:15 -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 1wUfEz-000069-Hv; Wed, 03 Jun 2026 02:38:13 -0400 Received: from mail-japanwestazlp170120003.outbound.protection.outlook.com ([2a01:111:f403:c406::3] helo=OS8PR02CU002.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 1wUfEx-0008HM-7i; Wed, 03 Jun 2026 02:38:13 -0400 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com (2603:1096:400:129::9) by SEYPR06MB5859.apcprd06.prod.outlook.com (2603:1096:101:c0::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 06:37:59 +0000 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995]) by TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995%6]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 06:37:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tHdGrw3uXXcC7KQKN3QcY/h4ddxSIY61wRPwEw1ChRP+as6snCjsiGCSuCbD6gXkYH2ggNfxBKEOwv+qSzsOD7Lg8QFeatjGf1/wqq2Fk3vzs6+9wbwyjOGp9j4yxDIio3nNE+/Z0AM1iCUTS1drLQQlipamO5f8nndGUBIQl9h6AbDMquhAdivf0yvm3ZqCpJ6BNlfjTSbvMAVfn6m8CV/VfkxdbCCOrJRMNHrV1sIpBnv1B03FKeSj9UbrzJs44Pmda0hOle9yHSx1UuksI1uyOquOLwQBgtPht/ZRX1umiZgrdD3lATdpiH94xP3iERwsXQUIIaI3nLRTc0o+Nw== 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=0GzQITYdSQ4PHvEFsqv3NmxgB55AenqB8H6OKIA9d80=; b=wSj4OkJ3eVANmk0mlsL8GfFm2AhBGct4WbKIXNsj7x4Ukm+bSruNMxIYPIHdBwCweEps0CTjeqhSSJMOmu9FzbOve5neJPCkP1bl7witabidgtg6u9Ki0aJmeOreXrU1zqjGreIEyVvsA9JiupjdT6zvcI2z6y9sqeRB1nkKWT6o1wNxw+1WHlh2K+tNotkPAVn8qAKz6eRipiGBGJx3luCKF52s3e9/ibZgdjERsJIeDulceP+Xn68pZSRUcOr3qx9cpNLzKcwjpr6UZuJsZhu0j2Glyw+b1FLRQGahNKtx7QQQ40yeE4xRGsIpHwx2R/shOQfQnC/qLjgKTa2IWg== 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=0GzQITYdSQ4PHvEFsqv3NmxgB55AenqB8H6OKIA9d80=; b=knH64CXodu9Iam92hszB3tOuwIpCfJMfWJqRyms2KrevnKHPswWdqrzDNotgLGPBV8T9Cy4s2v1paRB29OdPjz8L3lJ+tphxjXxnBnB1t9+6mubA1W8YXrTqJN1XcK1Vjqg7fjpBvL/VygoBI+bcDRrZAKcb+NPH+RI+ErvttyxBOOw6/5XHk53FUdD9dTWnR51HgZzfZOeAVMBXrIFqTSypfVnw6ZCM3aJDjjnaYyPa0+q9LFKAHNdzrA8WuzeWGVeUzHCOuYRf9F2yleckg34nBY2nX8JlFNkwNLYijChMVmoEksMFkN8feP0Ht+IEJWLQHpHEVEaHX8M8zg8SJg== From: Steven Lee To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Kane Chen , Andrew Jeffery , Joel Stanley , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:All patches CC here" , "open list:ASPEED BMCs" CC: Troy Lee , "longzl2@lenovo.com" , Yunlin Tang Subject: [RESEND PATCH 1/6] hw/misc/aspeed_scu: Add AST1040 SCU model Thread-Topic: [RESEND PATCH 1/6] hw/misc/aspeed_scu: Add AST1040 SCU model Thread-Index: AQHc8yOEJotrwQ0ri0q1fUaX2ZNe6Q== Date: Wed, 3 Jun 2026 06:37:59 +0000 Message-ID: <20260603063756.1481524-2-steven_lee@aspeedtech.com> References: <20260603063756.1481524-1-steven_lee@aspeedtech.com> In-Reply-To: <20260603063756.1481524-1-steven_lee@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: TYZPR06MB4746:EE_|SEYPR06MB5859:EE_ x-ms-office365-filtering-correlation-id: 0149c426-6f34-4c27-fe87-08dec13aa772 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|7416014|921020|6133799003|18002099003|22082099003|56012099006|38070700021; x-microsoft-antispam-message-info: yyiHvfnVdBvLXPQnuOKO3/nsRpxDzZpRF+FPAxqT2j7UzDAFsoRYOod+s8vYVH8DIdHCs5JOmSzVevcn9xe5QkRJnPz9XGC8h8ZnYKZg0qyDXCMKUP81aQfD9jqPTAnLuON+CikLnNqdvQpZXAyiT1novJHbSxRI3weVWrExmfJmRAIQ/0putwnyA4I2nln+7m9eNcCzZEUHMQ76lg0oipweyAX0dGZU2oVW8jAE7PT5MZjdNC6V3FQX/OZLIoO1ogaHdLrBRknWGULtaVk0ru1THnsQAQhAI6eiw0MOd0zasfjCd4FmtzP/4jDJTv474hPYcpYzOuQhE/9CL0PxcDKGmq4wnaNX2bWGOsKS43wqRa0Dh0oskcvvoNYG7lcuywJio5zTTzp8NJOZ9teaSK4KMfBoUDvSNG/Xznxh2BleFnNHNjFjsRqz+Qs9MpBAbwpjAb9f7ngTMuuNAf1tZ0CXSlHp6HPFR4AqQY/pAAFXGyhTb/n7t9d0RvP3vZr3XzeEce2BT4PcIKCHCdKcc5FVE1ThSqQuN86Gzk4254Et0mZfzgTk1lc7EmOsuJDFsWaic1Y0aSGX/BJVvFHZPKfCUqHiTLE6TZ+eIjRh6MIv3V+TQQGwvNMTYvsb3HKaPwyh4K/c7lRSTZT3xcWEMBCcq2s0VRq/9KOuGsbc0Lm5lQ9+xYVYx5C3ROeuNo/ya5cGyjIdDSj6PYbSPM3toIk35u4Ko/vMZXqGfl8RcL8BY/t/1lB+QmCJ9dv4OjrDZa7zXG0zfiqtS4jLNTHpfQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4746.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(7416014)(921020)(6133799003)(18002099003)(22082099003)(56012099006)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?rpgjyTwppcSfahNEcPJHnFYcQbtrdsC7aEsr35aIil2FE7x8jK5Q0Bc3t8?= =?iso-8859-1?Q?kwYoFsjaE9zPYD9vJvI3Px1FvvwCRDKeyzZ4JxkzLxC1pEH8ItAc7+fbSJ?= =?iso-8859-1?Q?qItzAeWcBAQ0H3nYXbbA7YPuLEvgc17lcqf2lrgvcsd0iUFVYe6RcF41h1?= =?iso-8859-1?Q?i/UJN67G0LQi+nhXHoSOfoL/oEz9f9HZKkHLEBkCTsknimgRzSY3qSgxaX?= =?iso-8859-1?Q?v8Kwn8JKXBbSivWV5KDNwEf6ivXAOoZIiwOrlcznXmIKc8dTdS9wTGUD/s?= =?iso-8859-1?Q?Y2FiGnseCO2C7b4LmMKSQjIS14JUyXj9nE90ggJENBkhbuuc0dFwjDzep8?= =?iso-8859-1?Q?rMWqX+rZ9qGRoiebvi0wxgoy1OLTGljy73xjUA9yaJ4c+1AfGXzx35rxJ1?= =?iso-8859-1?Q?Blfurl7m6/az4tJLveFTpfXPo16fsz+wURjz6rmA/69fmTfphWEJyXlOoU?= =?iso-8859-1?Q?Y5uKW2EHn/we+GCYqUbzLm2+/MsAkyl93Z2oGuK3lif2qEwCEeuKANbcyD?= =?iso-8859-1?Q?ibd4elwllfl47Liwrrhu/4u6KdML6dOIu5wmZOlFkLEcaL8mCzPEF9S1Qp?= =?iso-8859-1?Q?RLgS1sdPwo/oBjiLqMELVQagMSS2me7WP2CXi4vq//08Z/7EYAsCavfW0r?= =?iso-8859-1?Q?vndvgEnZhjF0UwlOUxbK4puL/Qac7kQCgbgm1t3f5VNWXwT54sKar2Q3SH?= =?iso-8859-1?Q?rMoWUFwrfQHW4WTzLyg3TyckJS/XjK1/GHAV6BTnnJwsKc7GQ+CShyokwI?= =?iso-8859-1?Q?sRwZ7wCpJyyow20D0Vx1Z30mXxrTFUTodhls+dLMo4Q9uNZxPQHsqk++lS?= =?iso-8859-1?Q?6Hr9eHXu4mIYr7NcED0o7gPfPuopkt+Yzky78z0u5pYhL/p3qhaokku2Ag?= =?iso-8859-1?Q?Ch4ttNXyXpS9yO/qEaSFkb/KP8DECveDKp8VHXO6Xk/ET1GoC54WzG2iUQ?= =?iso-8859-1?Q?vnCIzrR1pwDeV+h4ZNjG7FJn77KwOwB/oUiLeaNY30jt50k9p3W1xe6sso?= =?iso-8859-1?Q?6QKLgKnokHou0AfU0+D7UKLkHXoMkOGOeNWaWs1QziATQNWMHXbjuhA4YI?= =?iso-8859-1?Q?Z+1UwR69plxNLmXKvtTzaoJhRil5kbFFk7MTJ/v/x3yW2Yj9m+09eM3DOi?= =?iso-8859-1?Q?OXfI3zgFeFeIBysj+gjgM9Nvhz6zW6qUBS1TER6uVw5Vbc+24PTGQfD/Oi?= =?iso-8859-1?Q?JJHlHsENOI0R4XbId6ztGeFDnmPaPRuQY04EwCJ4AcevazTXRoT5tmNwQV?= =?iso-8859-1?Q?PJGSf7DlPjfRaLVFsirtLuyg+8pSHKVkFfFERbzgektA8yKTp5xeGDydGb?= =?iso-8859-1?Q?F/9bK558rnhhBizhOyxgTT70OGHYxRFzvVBxHkiYsiqQ6niEzbWhXCv5FI?= =?iso-8859-1?Q?7n94swG6oRIp0yH5yjx9guGFUGHVdCithUGlNxjdIT/Qw1UrocHTFzWwe2?= =?iso-8859-1?Q?5XE162zJ8cFoHHl+k9ncLZHTpd6cUKrsZg3LYTVzKmmMp1ppXc+nocSW8f?= =?iso-8859-1?Q?bYb5Z/gy2G7/Be/670QsP7Oy7mvJa4Ak+8bqAAOKowq3/CN0Q5Zl/1tYYY?= =?iso-8859-1?Q?ZVqzFA2M33NIIpIii3MKWcwgBuEazBHi0/GT+MhiHn3oS8KyRPmHuXRoOF?= =?iso-8859-1?Q?pmk0QjsHNkRz0Au1LmTydFN/NY78pA0Sd4d9lZtQj1VbYedB69Pz3jLhqx?= =?iso-8859-1?Q?2syczkl/lQsgcqLad3/spK1ZSeoiwXMITUQ2Hv1pcQJxfLbMnX6RLzld0K?= =?iso-8859-1?Q?cHCbJjte65c1LumuNe1SfnnYmXKm75UAy/dogFVKf2KLU4xgE5jiTK2E8y?= =?iso-8859-1?Q?4CTj9/deYg=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: qpVYv4JkwBq0frSMefLVssxbXzsUP1ifQG+h99hW8XaBgT/fChataiopnAfSZpY/7mMqNnPK6JY5adO+kLw4ED/zBsHgEtsKILgz9it0Fcx+OOs2AiWp0gqPCdMhwEiCvn26OkROEHz8sC9OnvgKyQhTHQifh70oDPGVDnt5e12I5wdzkveSSfx+fNnW8s2IGI6J00HOVxAifiGhp6nIUfhD0v9wDJNGHdWpND/b1L08s31mLq+B2oR/jvPNIPwrYTnB1eachzMklalUByy69qIZJ5owKt4EQiQ7vcs+xcBFqkeWeoPNnnPHww26XhDbQbsAkqVrf869LCyDzS0ZDw== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4746.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0149c426-6f34-4c27-fe87-08dec13aa772 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jun 2026 06:37:59.4251 (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: WE0LYihy180sopmegy9meClOFza7EPgYkrvigc8KCDCbsFE3d+p3Ddo/OpQkcsEAqlRgqbRojpP++R2aZdkSfRDiDpfftBkSjNijSoToIMw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEYPR06MB5859 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:c406::3; envelope-from=steven_lee@aspeedtech.com; helo=OS8PR02CU002.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_NONE=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: 1780468750396154100 Content-Type: text/plain; charset="utf-8" Add an AST1040 variant of the ASPEED SCU with reset values, APB clock calcu= lation, clock-stop handling, and CPTRA page-select registers. Expose the Caliptra page aperture as a QOM link so the SoC model can wire t= he remap window without callbacks. Signed-off-by: Steven Lee --- include/hw/misc/aspeed_scu.h | 10 ++ hw/misc/aspeed_scu.c | 251 +++++++++++++++++++++++++++++++++++ hw/misc/trace-events | 2 + 3 files changed, 263 insertions(+) diff --git a/include/hw/misc/aspeed_scu.h b/include/hw/misc/aspeed_scu.h index c30940ab76..6445ae5cf4 100644 --- a/include/hw/misc/aspeed_scu.h +++ b/include/hw/misc/aspeed_scu.h @@ -22,6 +22,7 @@ OBJECT_DECLARE_TYPE(AspeedSCUState, AspeedSCUClass, ASPEE= D_SCU) #define TYPE_ASPEED_2700_SCU TYPE_ASPEED_SCU "-ast2700" #define TYPE_ASPEED_2700_SCUIO TYPE_ASPEED_SCU "io" "-ast2700" #define TYPE_ASPEED_1030_SCU TYPE_ASPEED_SCU "-ast1030" +#define TYPE_ASPEED_1040_SCU TYPE_ASPEED_SCU "-ast1040" =20 #define ASPEED_SCU_NR_REGS (0x1A8 >> 2) #define ASPEED_AST2600_SCU_NR_REGS (0xE20 >> 2) @@ -39,6 +40,15 @@ struct AspeedSCUState { uint32_t hw_strap1; uint32_t hw_strap2; uint32_t hw_prot_key; + + /* + * AST1040 only: alias region (the Caliptra MCI page aperture) whose + * target offset is selected by SCU_CPTRA_PAGE_REG0, linked in by the = SoC. + * cptra_page_window_base is its base in the address map, used to reje= ct a + * self-referential remap. + */ + MemoryRegion *cptra_page_window; + uint64_t cptra_page_window_base; }; =20 #define AST2400_A1_SILICON_REV 0x02010303U diff --git a/hw/misc/aspeed_scu.c b/hw/misc/aspeed_scu.c index 19da6c075f..028677880f 100644 --- a/hw/misc/aspeed_scu.c +++ b/hw/misc/aspeed_scu.c @@ -17,6 +17,7 @@ #include "qapi/visitor.h" #include "qemu/bitops.h" #include "qemu/log.h" +#include "qemu/range.h" #include "qemu/guest-random.h" #include "qemu/module.h" #include "trace.h" @@ -179,6 +180,41 @@ #define AST2700_SCUIO_CLK_DUTY_MEAS_RST TO_REG(0x388) #define AST2700_SCUIO_FREQ_CNT_CTL TO_REG(0x3A0) =20 +/* AST1040 SCU */ +#define AST1040_SILICON_REV TO_REG(0x00) +#define AST1040_HW_STRAP1 TO_REG(0x10) +#define AST1040_HW_STRAP1_CLR TO_REG(0x14) +#define AST1040_HW_STRAP1_LOCK TO_REG(0x20) +#define AST1040_HW_STRAP1_SEC1 TO_REG(0x24) +#define AST1040_SCU_CPTRA_PAGE_REG0 TO_REG(0x120) +#define AST1040_SCU_CPTRA_PAGE_REG1 TO_REG(0x124) +#define AST1040_SCU_CPTRA_PAGE_REG2 TO_REG(0x128) +#define AST1040_SCU_CPTRA_PAGE_REG3 TO_REG(0x12C) +#define AST1040_SCU_CPTRA_PAGE_REG4 TO_REG(0x130) +#define AST1040_SCU_CPTRA_PAGE_REG5 TO_REG(0x134) +#define AST1040_SCU_CLK_STOP_CTL_1 TO_REG(0x240) +#define AST1040_SCU_CLK_STOP_CLR_1 TO_REG(0x244) +#define AST1040_SCU_CLK_STOP_CTL_2 TO_REG(0x260) +#define AST1040_SCU_CLK_STOP_CLR_2 TO_REG(0x264) +#define AST1040_SCU_CLK_SEL_1 TO_REG(0x280) +#define AST1040_SCU_CLK_SEL_2 TO_REG(0x284) +#define AST1040_SCU_HPLL_PARAM TO_REG(0x300) +#define AST1040_SCU_HPLL_EXT_PARAM TO_REG(0x304) +#define AST1040_SCU_APLL_PARAM TO_REG(0x310) +#define AST1040_SCU_APLL_EXT_PARAM TO_REG(0x314) +#define AST1040_SCU_DPLL_PARAM TO_REG(0x320) +#define AST1040_SCU_DPLL_EXT_PARAM TO_REG(0x324) +#define AST1040_SCU_DPLL_PARAM_READ TO_REG(0x328) +#define AST1040_SCU_DPLL_EXT_PARAM_READ TO_REG(0x32c) +#define AST1040_SCU_UARTCLK_GEN TO_REG(0x330) +#define AST1040_SCU_HUARTCLK_GEN TO_REG(0x334) +#define AST1040_SCU_CLK_DUTY_MEAS_RST TO_REG(0x388) +#define AST1040_SCU_FREQ_CNT_CTL TO_REG(0x3A0) +#define AST1040_SCU_CLK_GET_PCLK_DIV(x) (((x) >> 18) & 0x7) + +#define ASPEED_AST1040_SCU_NR_REGS (0xE20 >> 2) +#define AST1040_SCU_CPTRA_PAGE_SIZE 0x1000 + #define SCU_IO_REGION_SIZE 0x1000 =20 static const uint32_t ast2400_a0_resets[ASPEED_SCU_NR_REGS] =3D { @@ -1165,6 +1201,220 @@ static const TypeInfo aspeed_1030_scu_info =3D { .class_init =3D aspeed_1030_scu_class_init, }; =20 +/* AST1040 SCU */ + +static void aspeed_ast1040_scu_update_cptra_page(AspeedSCUState *s) +{ + hwaddr page_base =3D s->regs[AST1040_SCU_CPTRA_PAGE_REG0] & + ~(hwaddr)(AST1040_SCU_CPTRA_PAGE_SIZE - 1); + + if (!s->cptra_page_window) { + return; + } + + if (ranges_overlap(page_base, AST1040_SCU_CPTRA_PAGE_SIZE, + s->cptra_page_window_base, + AST1040_SCU_CPTRA_PAGE_SIZE)) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: refusing self-referential remap to 0x%" HWADDR_= PRIx + "\n", __func__, page_base); + memory_region_set_enabled(s->cptra_page_window, false); + return; + } + + memory_region_set_alias_offset(s->cptra_page_window, page_base); + memory_region_set_enabled(s->cptra_page_window, true); +} + +static uint64_t aspeed_ast1040_scu_read(void *opaque, hwaddr offset, + unsigned size) +{ + AspeedSCUState *s =3D ASPEED_SCU(opaque); + int reg =3D TO_REG(offset); + + if (reg >=3D ASPEED_AST1040_SCU_NR_REGS) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Out-of-bounds read at offset 0x%" HWADDR_PRIx "= \n", + __func__, offset); + return 0; + } + + trace_aspeed_ast1040_scu_read(offset, size, s->regs[reg]); + return s->regs[reg]; +} + +static void aspeed_ast1040_scu_write(void *opaque, hwaddr offset, + uint64_t data64, unsigned size) +{ + AspeedSCUState *s =3D ASPEED_SCU(opaque); + int reg =3D TO_REG(offset); + uint32_t data =3D data64; + bool updated =3D false; + + if (reg >=3D ASPEED_AST1040_SCU_NR_REGS) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Out-of-bounds write at offset 0x%" HWADDR_PRIx = "\n", + __func__, offset); + return; + } + + trace_aspeed_ast1040_scu_write(offset, size, data); + + switch (reg) { + case AST1040_SCU_CLK_STOP_CTL_1: + case AST1040_SCU_CLK_STOP_CTL_2: + s->regs[reg] |=3D data; + updated =3D true; + break; + case AST1040_SCU_CLK_STOP_CLR_1: + case AST1040_SCU_CLK_STOP_CLR_2: + s->regs[reg - 1] &=3D ~data; + updated =3D true; + break; + case AST1040_SCU_FREQ_CNT_CTL: + s->regs[reg] =3D deposit32(s->regs[reg], 6, 1, !!(data & BIT(1))); + updated =3D true; + break; + case AST1040_SCU_CPTRA_PAGE_REG0: + s->regs[reg] =3D data; + aspeed_ast1040_scu_update_cptra_page(s); + updated =3D true; + break; + case AST1040_SCU_CPTRA_PAGE_REG1: + case AST1040_SCU_CPTRA_PAGE_REG2: + case AST1040_SCU_CPTRA_PAGE_REG3: + case AST1040_SCU_CPTRA_PAGE_REG4: + case AST1040_SCU_CPTRA_PAGE_REG5: + s->regs[reg] =3D data; + updated =3D true; + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Unhandled write at offset 0x%" HWADDR_PRIx "\n", + __func__, offset); + break; + } + + if (!updated) { + s->regs[reg] =3D data; + } +} + +static const MemoryRegionOps aspeed_ast1040_scu_ops =3D { + .read =3D aspeed_ast1040_scu_read, + .write =3D aspeed_ast1040_scu_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .impl.min_access_size =3D 4, + .impl.max_access_size =3D 4, + .valid.min_access_size =3D 1, + .valid.max_access_size =3D 8, + .valid.unaligned =3D false, +}; + +static uint32_t aspeed_1040_scu_calc_hpll(AspeedSCUState *s, uint32_t hpll= _reg) +{ + uint32_t multiplier =3D 1; + uint32_t clkin =3D aspeed_scu_get_clkin(s); + + if (hpll_reg & SCU_AST2600_H_PLL_OFF) { + return 0; + } + + if (!(hpll_reg & SCU_AST2600_H_PLL_BYPASS_EN)) { + uint32_t p =3D (hpll_reg >> 19) & 0xf; + uint32_t n =3D (hpll_reg >> 13) & 0x3f; + uint32_t m =3D hpll_reg & 0x1fff; + + multiplier =3D ((m + 1) / (n + 1)) / (p + 1); + } + + return clkin * multiplier; +} + +static uint32_t aspeed_1040_scu_get_apb_freq(AspeedSCUState *s) +{ + AspeedSCUClass *asc =3D ASPEED_SCU_GET_CLASS(s); + uint32_t hpll =3D asc->calc_hpll(s, s->regs[AST1040_SCU_HPLL_PARAM]); + + return hpll / + (AST1040_SCU_CLK_GET_PCLK_DIV(s->regs[AST1040_SCU_CLK_SEL_1]) + 1) + / asc->apb_divider; +} + +static void aspeed_ast1040_scu_reset_hold(Object *obj, ResetType type) +{ + AspeedSCUState *s =3D ASPEED_SCU(obj); + AspeedSCUClass *asc =3D ASPEED_SCU_GET_CLASS(obj); + + memcpy(s->regs, asc->resets, asc->nr_regs * 4); + s->regs[AST1040_SILICON_REV] =3D s->silicon_rev; + s->regs[AST1040_HW_STRAP1] =3D s->hw_strap1; + aspeed_ast1040_scu_update_cptra_page(s); +} + +static const uint32_t ast1040_a0_scu_resets[ASPEED_AST1040_SCU_NR_REGS] = =3D { + [AST1040_HW_STRAP1_CLR] =3D 0xFFF0FFF0, + [AST1040_HW_STRAP1_LOCK] =3D 0x00000FFF, + [AST1040_HW_STRAP1_SEC1] =3D 0x000000FF, + [AST1040_SCU_CLK_STOP_CTL_1] =3D 0xffff8400, + [AST1040_SCU_CLK_STOP_CTL_2] =3D 0x00005f30, + [AST1040_SCU_CLK_SEL_1] =3D 0x86900000, + [AST1040_SCU_CLK_SEL_2] =3D 0x00400000, + [AST1040_SCU_HPLL_PARAM] =3D 0x10000027, + [AST1040_SCU_HPLL_EXT_PARAM] =3D 0x80000014, + [AST1040_SCU_APLL_PARAM] =3D 0x1000001f, + [AST1040_SCU_APLL_EXT_PARAM] =3D 0x8000000f, + [AST1040_SCU_DPLL_PARAM] =3D 0x106e42ce, + [AST1040_SCU_DPLL_EXT_PARAM] =3D 0x80000167, + [AST1040_SCU_DPLL_PARAM_READ] =3D 0x106e42ce, + [AST1040_SCU_DPLL_EXT_PARAM_READ] =3D 0x80000167, + [AST1040_SCU_UARTCLK_GEN] =3D 0x00014506, + [AST1040_SCU_HUARTCLK_GEN] =3D 0x000145c0, + [AST1040_SCU_CLK_DUTY_MEAS_RST] =3D 0x0c9100d2, + [AST1040_SCU_FREQ_CNT_CTL] =3D 0x00000080, +}; + +static const Property aspeed_1040_scu_props[] =3D { + DEFINE_PROP_UINT64("cptra-page-window-base", AspeedSCUState, + cptra_page_window_base, 0), +}; + +static void aspeed_1040_scu_init(Object *obj) +{ + AspeedSCUState *s =3D ASPEED_SCU(obj); + + object_property_add_link(obj, "cptra-page-window", TYPE_MEMORY_REGION, + (Object **)&s->cptra_page_window, + qdev_prop_allow_set_link_before_realize, + OBJ_PROP_LINK_STRONG); +} + +static void aspeed_1040_scu_class_init(ObjectClass *klass, const void *dat= a) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + AspeedSCUClass *asc =3D ASPEED_SCU_CLASS(klass); + + dc->desc =3D "ASPEED 1040 System Control Unit"; + rc->phases.hold =3D aspeed_ast1040_scu_reset_hold; + device_class_set_props(dc, aspeed_1040_scu_props); + asc->resets =3D ast1040_a0_scu_resets; + asc->calc_hpll =3D aspeed_1040_scu_calc_hpll; + asc->get_apb =3D aspeed_1040_scu_get_apb_freq; + asc->apb_divider =3D 2; + asc->nr_regs =3D ASPEED_AST1040_SCU_NR_REGS; + asc->clkin_25Mhz =3D true; + asc->ops =3D &aspeed_ast1040_scu_ops; +} + +static const TypeInfo aspeed_1040_scu_info =3D { + .name =3D TYPE_ASPEED_1040_SCU, + .parent =3D TYPE_ASPEED_SCU, + .instance_size =3D sizeof(AspeedSCUState), + .instance_init =3D aspeed_1040_scu_init, + .class_init =3D aspeed_1040_scu_class_init, +}; + static void aspeed_scu_register_types(void) { type_register_static(&aspeed_scu_info); @@ -1174,6 +1424,7 @@ static void aspeed_scu_register_types(void) type_register_static(&aspeed_1030_scu_info); type_register_static(&aspeed_2700_scu_info); type_register_static(&aspeed_2700_scuio_info); + type_register_static(&aspeed_1040_scu_info); } =20 type_init(aspeed_scu_register_types); diff --git a/hw/misc/trace-events b/hw/misc/trace-events index b88accc437..82ddbf4d15 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -103,6 +103,8 @@ aspeed_ast2700_scu_write(uint64_t offset, unsigned size= , uint32_t data) "To 0x%" aspeed_ast2700_scu_read(uint64_t offset, unsigned size, uint32_t data) "To= 0x%" PRIx64 " of size %u: 0x%" PRIx32 aspeed_ast2700_scuio_write(uint64_t offset, unsigned size, uint32_t data) = "To 0x%" PRIx64 " of size %u: 0x%" PRIx32 aspeed_ast2700_scuio_read(uint64_t offset, unsigned size, uint32_t data) "= To 0x%" PRIx64 " of size %u: 0x%" PRIx32 +aspeed_ast1040_scu_write(uint64_t offset, unsigned size, uint32_t data) "T= o 0x%" PRIx64 " of size %u: 0x%" PRIx32 +aspeed_ast1040_scu_read(uint64_t offset, unsigned size, uint32_t data) "To= 0x%" PRIx64 " of size %u: 0x%" PRIx32 =20 # mps2-scc.c mps2_scc_read(uint64_t offset, uint64_t data, unsigned size) "MPS2 SCC rea= d: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" --=20 2.43.0 From nobody Mon Jun 8 06:38:44 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=1780468787; cv=pass; d=zohomail.com; s=zohoarc; b=L9jIBrxco6ybgVd1UJsFaUqFubUPpwCimm27XajGzQWFbn/CUSEXBPxl4BNp6xtaqeTkqND9fh7GR6IrJWmj0IOEEi2qeXu2bjl9ETRfFAoTktVBzwRAkzVlOrJ58R2IOVIfm3v9vN80dU5Rk8MMdg6r1cIchHEpKZ4/j4RsKtM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780468787; 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=CfmzFh+8mkKZMhd9TBqC7CdNLesi+xSQeqfY2iSj32U=; b=gEHAl3A+hTdjPjbVyE3T1a22vthpGaCRqATm3KPPISDj6cpKi4EOT7J9KNxvZ73utqFb4fLJKGqjktID4wbWi/AqQgE8Spo9k1ufNfHj4HXafKSFqQgu7PWSm3bzM4ei70RfAmtb+neUc2//SQnRKLuY4Sa+M/3yZHqfblnaOks= 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 1780468787575361.48560574479905; Tue, 2 Jun 2026 23:39:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUfF4-00009J-FC; Wed, 03 Jun 2026 02:38:18 -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 1wUfF3-00008K-0b; Wed, 03 Jun 2026 02:38:17 -0400 Received: from mail-japanwestazlp170120003.outbound.protection.outlook.com ([2a01:111:f403:c406::3] helo=OS8PR02CU002.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 1wUfF0-0008HM-9z; Wed, 03 Jun 2026 02:38:16 -0400 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com (2603:1096:400:129::9) by SEYPR06MB5859.apcprd06.prod.outlook.com (2603:1096:101:c0::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 06:38:01 +0000 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995]) by TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995%6]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 06:38:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kpco4KNHZ9LazJHxjrbTsxg8n+oywHV467hhLsZPiiscQxGu205tMWE+u4C8n1jw+nJMc3opdCnIFgSJ2NIxiKVu3Mru/qVJAuIlEcNEfKRMvQxoi1AVJkxSF6LK0Ny4LPQk03cNdGPJvfOyF51ILqf6q18Ad8Fu0Yfu7cPDNtAAiJHb+4lt+UAuEFt9Fkhwa9RQ3dNB2HxtZJfeqsLL4nkfYzW4psajmUzrPvo0rW92PJu2fqd1Lf3t2L+c+QcK8hK5V/fhYmnWIEdR5/GFMvBId72f2v1otdPFBOML74kZoEonh5AnHzG2lM51l4eamId3VWJzmxc+kM3lffSIEQ== 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=CfmzFh+8mkKZMhd9TBqC7CdNLesi+xSQeqfY2iSj32U=; b=Og5eLRatwTcO7dAYxcm54r54FAj0O/r3rgbW5lgRmrr95cNlvTPugjFJ6LKBytDzqho6wJT1PwWllK5cbTEk3STqSBmnSRSEXOZIxXhKu8cSMfh+rP9eSCWVK4prS4XGbGrLQuQA1d13TWN8nTvG5TrQ2rQFiCDSRr7WetigrjbRFQPZ+BsRQZDiuxgFA3MxCmO4vdqhOZIQuErNLgUQjXoqFi2BexQMzySGgXOhDyQTJXUsfwMRUgJWw35/s/bcmFFAt42JfkmHhynDaYfY5xO12kQMivfJWffU50IRiaLOChwdilNFUtH/3TbGyo982w7fdT+nJQAExghg8oPpag== 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=CfmzFh+8mkKZMhd9TBqC7CdNLesi+xSQeqfY2iSj32U=; b=V2DvNUeDNIDp9veAtbMg9gT1Oo0pUKtdRSg9xBuy6r5xKZ8kdahkfuKF2aihA63jfJDISzyFyVpqAUJ2LAW2jZKUIVBbYqOVSLgKVKLlW3jHbrq2VBtHfnHlx0SIpn45S1IBQY94+cAXXpAGDMDVrKQQm4qKdA2Z8EvurNXdYCuxR2nxFMPJPGxnsTfExQBuyxfRUdlHwrRvPUq9i9cmbEMNTNTM5Bh8Cc+WxXDOTgl3yRCI5W4z46G/f1GZNwgfD4cMoyy0Y+iYOdqvhQRVqoZPW1X9z/NSfJNhWUkBodxbRjLBsLb85UG5z3a1r/kC/86d9ZhU1VmxaiJLx0oZgA== From: Steven Lee To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Kane Chen , Andrew Jeffery , Joel Stanley , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:All patches CC here" , "open list:ASPEED BMCs" CC: Troy Lee , "longzl2@lenovo.com" , Yunlin Tang Subject: [RESEND PATCH 2/6] hw/misc: Add ASPEED Caliptra mailbox frontend Thread-Topic: [RESEND PATCH 2/6] hw/misc: Add ASPEED Caliptra mailbox frontend Thread-Index: AQHc8yOF8h7ze7L5ZkuRlaiJfE4lSA== Date: Wed, 3 Jun 2026 06:38:00 +0000 Message-ID: <20260603063756.1481524-3-steven_lee@aspeedtech.com> References: <20260603063756.1481524-1-steven_lee@aspeedtech.com> In-Reply-To: <20260603063756.1481524-1-steven_lee@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: TYZPR06MB4746:EE_|SEYPR06MB5859:EE_ x-ms-office365-filtering-correlation-id: 0ea39cc6-47a8-4c2f-935b-08dec13aa847 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|7416014|921020|6133799003|3023799007|18002099003|22082099003|56012099006|38070700021; x-microsoft-antispam-message-info: hGrO4pdCIL4ZZok/9nsJtPiHdxT85ogEyanbn9SOc42IXpYQAR+dl2dbduJgXbXDuoNEbyVi1lBDoeZ2A8LRZNtYRKSL+qnIEhZn2sWAUQb0r6d2aiv3GlfsmbojLwI5rvKcy5yZHLPyQcpcUClH4Oa8swqZ3uYqBniXsfYQOE498fx8eeY/HZB1DSImt8iu3EjHD3P+xDdmThTw3pqENmC/3Ky+POKlFkbM/MsK1Sqm+LdLJVUAXWleH5ARPGiP9vG5t41L0CMDMN+KjpA86pRDASNKC+2v9+IUr3R0PuDNddGt9p4lew19GDQMGqQpZEvp43MAwwZxloiePCHTq8yO8vaHWOHvBlHwz+Q3kLv9DHK9TDPLNyHZp/bl59EvJXswuWkUQOKcEeM15GnfDeGojsPNPxH/WhVv7oT776h6V5kpLdJCpeDiTL4JOgH/ZGKw54sd2NcnelfZh5JY0AQ9vQ2mh//KvgxlhpeQGvQKQzanszJNqpc2cA8SLraio0UDEZr4En0kTauV4ipW1UkyQbNwWGUhmIhdNVocgiuuYe78tSbFs6fc4SD/AZmIoTot2e/LFunispVPfQKtMn0vCUS2H/QnR5QRhdfyZ1EtOeL/R2Wa9AKdYPNNUybIRPXaMjGXOTmoHcklSYuDH5A/K+6Ng+tfnBcbo8RzYAAqGKUhxtJ3kQU6zrxhRi1PaTHiQ42wyQABAAzpG5rVpp1QMHJVxWwXOcQjCPQAKfGIrMmFD+BhXIZ/K3A4mxVchcETGv5LmFNLdwSXLAEn9A== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4746.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(7416014)(921020)(6133799003)(3023799007)(18002099003)(22082099003)(56012099006)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?0unYaqkrALPSGd9xLHUHVKr05Aw0XFM7B2Kj4CL2vL1lo1f3z/ygGBhMzu?= =?iso-8859-1?Q?vJiMLa5S/pwpFTvgqC2UJBLAw1V67YrtvRhPSP142PxBZOFVTfTb8H2/vL?= =?iso-8859-1?Q?EU9ereE1D0g9HtB+Xce+XwMLhrs525KphNOFsGEAmNW0TSXDKHasPOxgK/?= =?iso-8859-1?Q?GN26oqLg8kFySSkH8VUc3j1FMZnyukeuMjRUsc1dnP/d9X4TVfYy9hhcHk?= =?iso-8859-1?Q?GyovTFjQPsLXVLWlAveqW0PGyjnd1cFHx8X4fkpc67wrBo4nelPBB7/kd+?= =?iso-8859-1?Q?IQ7E0kRwLj9evMnnO3JQr5sp4MayQYQHxgcD82GOB4Ih8jorFBe4RFl2r8?= =?iso-8859-1?Q?xbCdDz/eLl+EClkQkVreYtYbl1U8UUND5ys7n/RXgdU/TvWZVICJnyB1RT?= =?iso-8859-1?Q?XJjYk9zhu/onMYgz3maWKhPSFTND1QIW8EuFBVljK6oB19jaszvsE6GTr3?= =?iso-8859-1?Q?ofAVJI6cHV8m0nWxsTLj3N1dWmR3N7hKCWIqsY1e0dz5T0meig/gO7uU9M?= =?iso-8859-1?Q?TTVfNhwHfG5J/d13IST6PkMR2wdgolK4rj2quK6KqZGhO6wbxHyVinytaF?= =?iso-8859-1?Q?9EABcuI2WIpLINNKKbCSwxUMVkYuEJriN8R4/lMF4aOy4+ouN7h44yOwpe?= =?iso-8859-1?Q?eV5YiuHkzGcugMkq4nwcbom1ydLwmeFj/F9eUpMQiHI0WZpf0hBYhYB6Rx?= =?iso-8859-1?Q?Sa6lw3dnqYK3WIvFfIh1Ko8qgx530Zj+QOztim3e/YmJI8FyJr4qto4xJ3?= =?iso-8859-1?Q?bfiG1mfwV/bWroQ9tjr9xu8f3dME8DnEe1bgiT+7sPLXhfwpUjflvHT7wu?= =?iso-8859-1?Q?w4Uhi/1t9blxGGUX+mSugq1DmnQTTUgU8C7XXAlA2bIiSGYej2BUU1fU7h?= =?iso-8859-1?Q?Icb4cL6EWUGe02RRr5ETb0tIff3IlLEiUSVAiOfc7mpyH/XpgnFhQQUTZD?= =?iso-8859-1?Q?iVLRVo5L8wYM3ghker4YYNkkQElFNMk7ZC1HEykv6mWdmnEfsy7T732m4n?= =?iso-8859-1?Q?dfZiCvHNOcGriygdILi3OCmq8heND+JIwbxSGT3p3SQIPfzajoijx7/Bzn?= =?iso-8859-1?Q?oI+qUyF31IfzYXp2L8fRPZuD5AVlU4ugya3VQUeTpKxk5PXLrZtzzAAGXH?= =?iso-8859-1?Q?vXVFsxXMsbcsMDrxaEEGDRq8QLZp8/nSB8185wcNHI4VqUWNdCPGO1KQZS?= =?iso-8859-1?Q?1tQsuuwzNGOaQDY2ChSZb8e1NUoNjcAO5eqB1KPTxuHw41sI7v0RY9MIB4?= =?iso-8859-1?Q?Xl+E9kdUIFu8/7toilrv9yO1iZyYc+qitShm1O6xpaY6DKrmb1NlYsctND?= =?iso-8859-1?Q?4X6B1aoa7ODuWv1tmdIXEQvv+q05Py7XufpDvjEK8qpDIlPjI6pOTGhRra?= =?iso-8859-1?Q?wkzdKwCrpUsuI92+qt+YP1Cirs/s6Q76hPnX0HQRkNDV6BaYJUPLz92e1z?= =?iso-8859-1?Q?ghcn5Cj5rII9kq4pQTLfM3KDnjkXiCp/E9eXqZGhBH4mP8QS24nJNG1s2H?= =?iso-8859-1?Q?ZThcWrOANhsg0pxB34vzmHm7OBFzfvvXzCabRnTghmXPVP/qdhSu1UsU1S?= =?iso-8859-1?Q?SXiIn6Tvqoic9Ckber64gg+pLHiBS0Hbhez3YUloZmMkz8aI2AsjRQD1wc?= =?iso-8859-1?Q?HieGydcAdtjD+m6ECqT3vmiFwN+OZbIuxLZiz8+5mLGGS5ju+X9GTVmWLr?= =?iso-8859-1?Q?hjP5zPvOL0A0JntZppPLG2gnnjkSO972xYIer0HY+FOnY1urjD7oem/jAC?= =?iso-8859-1?Q?ibjcr4IHB2Rxx84t07OST31oBpH15aV+NSFrWAdzq2/63sGTp0DbrbO4pi?= =?iso-8859-1?Q?8RkkNNtG9g=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: TowlAB3U+TnkahWrh7Zx+jWKz1XUtBTSYsXXGg4GrFIMTp8Oabhz4YI9dcEDWQmsWmSy3vrGIfxM2+aL91JpJ6W7dmYi7xuu1+VFZFiqLctMKs1Jobo9LVfJd0u1/cP/8m6efc0DVxFkjs60QRj4rxYRWZ0hKTK+RQSH5swkLVeEhHkgYRx2zjODUhd2vgKh7LvBV5js/ZdizRGRZnhcAsQ6N8pY21jqB89gZpmKrXKKVyLxdtfRsVG33wLOyPcRjJVarPGK4znWjDONYBsweCTuR7qgSXpBePx7kAJRFa+HGHzrQeBAKzyu/VqBq0oQRGuju0js7l9Nf9hvS1q3rA== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4746.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ea39cc6-47a8-4c2f-935b-08dec13aa847 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jun 2026 06:38:00.8215 (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: bt+XB0Dzqc1kh3jP3PLm2526MkS9O0drcBMFDiR4OByApeg9IEVqnSfFJ7JwI1HC7o3qRjtyYwtgdQ0ehmmBFsjheyJss57YWCLYa+pvXVY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEYPR06MB5859 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:c406::3; envelope-from=steven_lee@aspeedtech.com; helo=OS8PR02CU002.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_NONE=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: 1780468789660158500 Content-Type: text/plain; charset="utf-8" Add a Caliptra mailbox frontend device with SRAM and CSR regions for the AS= T1040 MCI mailbox window. Model the mailbox lock, command registers, execute flow and completion path= through a pluggable peer interface so backends can service commands synchr= onously or asynchronously. Signed-off-by: Steven Lee --- include/hw/misc/aspeed_cptra_mbox.h | 133 ++++++++++ hw/misc/aspeed_cptra_mbox.c | 380 ++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + hw/misc/trace-events | 4 + 4 files changed, 518 insertions(+) create mode 100644 include/hw/misc/aspeed_cptra_mbox.h create mode 100644 hw/misc/aspeed_cptra_mbox.c diff --git a/include/hw/misc/aspeed_cptra_mbox.h b/include/hw/misc/aspeed_c= ptra_mbox.h new file mode 100644 index 0000000000..470e91597f --- /dev/null +++ b/include/hw/misc/aspeed_cptra_mbox.h @@ -0,0 +1,133 @@ +/* + * ASPEED Caliptra mailbox model (Caliptra 2.x subsystem mode) + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_MISC_ASPEED_CPTRA_MBOX_H +#define HW_MISC_ASPEED_CPTRA_MBOX_H + +#include "qom/object.h" +#include "hw/core/sysbus.h" + +typedef struct Error Error; + +/* SRAM size: 2 MiB (matches MCU_MAILBOX0_SRAM_SIZE in caliptra-mcu-sw) */ +#define CPTRA_MBOX0_SRAM_SIZE (2u * 1024u * 1024u) +#define CPTRA_MBOX0_SRAM_WORDS (CPTRA_MBOX0_SRAM_SIZE / 4) + +/* CSR window: 4 KiB (covers all defined registers) */ +#define CPTRA_MBOX0_CSR_SIZE 0x1000u + +/* CSR register offsets (relative to CSR BAR) */ +#define CPTRA_MBOX0_LOCK_OFF 0x000 +#define CPTRA_MBOX0_USER_OFF 0x004 +#define CPTRA_MBOX0_TARGET_USER_OFF 0x008 +#define CPTRA_MBOX0_TARGET_USER_VAL_OFF 0x00C +#define CPTRA_MBOX0_CMD_OFF 0x010 +#define CPTRA_MBOX0_DLEN_OFF 0x014 +#define CPTRA_MBOX0_EXECUTE_OFF 0x018 +#define CPTRA_MBOX0_TARGET_STATUS_OFF 0x01C +#define CPTRA_MBOX0_CMD_STATUS_OFF 0x020 +#define CPTRA_MBOX0_HW_STATUS_OFF 0x024 + +/* CMD_STATUS values */ +#define CPTRA_MBOX0_STATUS_BUSY 0 +#define CPTRA_MBOX0_STATUS_DATA_READY 1 +#define CPTRA_MBOX0_STATUS_COMPLETE 2 +#define CPTRA_MBOX0_STATUS_CMD_FAILURE 3 + +/* SoC agent ID reported in the USER register when the lock is acquired */ +#define CPTRA_MBOX0_SOC_USER_ID 1u + +/* + * Caliptra mailbox interface (frontend), implemented as a QOM interface so + * that backends can deliver an asynchronous response without depending on= the + * concrete frontend device type. + */ +#define TYPE_CPTRA_MBOX_IF "cptra-mbox-if" +typedef struct CptraMboxIfClass CptraMboxIfClass; +DECLARE_CLASS_CHECKERS(CptraMboxIfClass, CPTRA_MBOX_IF, TYPE_CPTRA_MBOX_IF) +typedef struct CptraMboxIf CptraMboxIf; +#define CPTRA_MBOX_IF(obj) \ + INTERFACE_CHECK(CptraMboxIf, (obj), TYPE_CPTRA_MBOX_IF) + +struct CptraMboxIfClass { + InterfaceClass parent; + + /* + * Called by the peer when a command submitted via handle_execute() has + * completed. @status is a CPTRA_MBOX0_STATUS_* value; @data/@len carr= y the + * response payload to be written back into the mailbox SRAM (@len byt= es, + * @dlen is the reported DLEN). + */ + void (*complete)(CptraMboxIf *s, uint32_t status, uint32_t dlen, + const uint8_t *data, uint32_t len); +}; + +/* + * Caliptra mailbox peer (backend) base class. + */ +#define TYPE_CPTRA_MBOX_PEER "cptra-mbox-peer" +OBJECT_DECLARE_TYPE(CptraMboxPeer, CptraMboxPeerClass, CPTRA_MBOX_PEER) + +struct CptraMboxPeer { + DeviceState parent; + + /* Set by the frontend when this peer is linked to it. */ + CptraMboxIf *intf; +}; + +struct CptraMboxPeerClass { + DeviceClass parent; + + /* + * Process a command. @data/@len is a copy of the request payload from= the + * mailbox SRAM. The peer must eventually report completion by calling= the + * interface's complete() method (synchronously or asynchronously). + */ + void (*handle_execute)(CptraMboxPeer *p, uint32_t cmd, uint32_t dlen, + const uint8_t *data, uint32_t len); + + /* Optional: notify the peer of a mailbox reset. */ + void (*handle_reset)(CptraMboxPeer *p); +}; + +/* Concrete frontend device type. */ +#define TYPE_ASPEED_CPTRA_MBOX "aspeed-cptra-mbox" +OBJECT_DECLARE_SIMPLE_TYPE(AspeedCptraMboxState, ASPEED_CPTRA_MBOX) + +struct AspeedCptraMboxState { + SysBusDevice parent_obj; + + /* Linked backend; NULL means no Caliptra peer is present. */ + CptraMboxPeer *peer; + + bool locked; + bool command_pending; + bool release_pending; + uint32_t user; + uint32_t target_user; + uint32_t target_user_valid; + uint32_t cmd; + uint32_t dlen; + uint32_t execute; + uint32_t target_status; + uint32_t cmd_status; + uint32_t hw_status; + + uint32_t sram[CPTRA_MBOX0_SRAM_WORDS]; + + MemoryRegion sram_mr; + MemoryRegion csr_mr; +}; + +bool aspeed_cptra_mbox_set_peer(AspeedCptraMboxState *s, CptraMboxPeer *pe= er, + Error **errp); + +/* Concrete external (chardev) peer type. */ +#define TYPE_CPTRA_MBOX_PEER_EXTERN "cptra-mbox-peer-extern" + +#endif /* HW_MISC_ASPEED_CPTRA_MBOX_H */ diff --git a/hw/misc/aspeed_cptra_mbox.c b/hw/misc/aspeed_cptra_mbox.c new file mode 100644 index 0000000000..8c1faf69df --- /dev/null +++ b/hw/misc/aspeed_cptra_mbox.c @@ -0,0 +1,380 @@ +/* + * ASPEED Caliptra mailbox host interface (frontend) and peer base class. + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/misc/aspeed_cptra_mbox.h" +#include "hw/core/qdev-properties.h" +#include "migration/vmstate.h" +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "qemu/log.h" +#include "system/memory.h" +#include "trace.h" + +static size_t cptra_mbox_padded_len(uint32_t dlen) +{ + return (size_t)((dlen + 3) / 4) * 4; +} + +static void cptra_mbox_clear(AspeedCptraMboxState *s) +{ + s->locked =3D false; + s->release_pending =3D false; + s->user =3D 0; + s->target_user =3D 0; + s->target_user_valid =3D 0; + s->cmd =3D 0; + s->dlen =3D 0; + s->execute =3D 0; + s->target_status =3D 0; + s->cmd_status =3D 0; + s->hw_status =3D 0; + memset(s->sram, 0, sizeof(s->sram)); +} + +static void cptra_mbox_submit(AspeedCptraMboxState *s) +{ + CptraMboxPeerClass *pc; + g_autofree uint8_t *data =3D NULL; + size_t len; + + if (s->dlen > CPTRA_MBOX0_SRAM_SIZE) { + s->cmd_status =3D CPTRA_MBOX0_STATUS_CMD_FAILURE; + qemu_log_mask(LOG_GUEST_ERROR, + "%s: DLEN 0x%x exceeds SRAM size\n", __func__, s->dl= en); + return; + } + + if (!s->peer) { + /* No Caliptra peer present: the command cannot be serviced. */ + s->cmd_status =3D CPTRA_MBOX0_STATUS_CMD_FAILURE; + return; + } + + len =3D cptra_mbox_padded_len(s->dlen); + if (len) { + data =3D g_malloc(len); + for (size_t i =3D 0; i < len / 4; i++) { + stl_le_p(data + i * 4, s->sram[i]); + } + } + + s->command_pending =3D true; + s->release_pending =3D false; + trace_cptra_mbox_execute(s->cmd, s->dlen); + + pc =3D CPTRA_MBOX_PEER_GET_CLASS(s->peer); + pc->handle_execute(s->peer, s->cmd, s->dlen, data, len); +} + +/* CptraMboxIf::complete - called by the peer when a command finishes. */ +static void cptra_mbox_complete(CptraMboxIf *iface, uint32_t status, + uint32_t dlen, const uint8_t *data, + uint32_t len) +{ + AspeedCptraMboxState *s =3D ASPEED_CPTRA_MBOX(iface); + + s->command_pending =3D false; + trace_cptra_mbox_complete(status, dlen); + + if (s->release_pending) { + cptra_mbox_clear(s); + return; + } + + /* + * Report the peer's status verbatim and write back whatever response + * payload it returned. The peer signals a transport/command failure w= ith + * CPTRA_MBOX0_STATUS_CMD_FAILURE and no data. + */ + s->cmd_status =3D status; + s->dlen =3D dlen; + if (data && len) { + size_t words =3D MIN(len, CPTRA_MBOX0_SRAM_SIZE) / 4; + + for (size_t i =3D 0; i < words; i++) { + s->sram[i] =3D ldl_le_p(data + i * 4); + } + } +} + +static uint64_t cptra_mbox_sram_read(void *opaque, hwaddr offset, unsigned= size) +{ + AspeedCptraMboxState *s =3D opaque; + uint32_t idx =3D offset / 4; + + if (idx >=3D CPTRA_MBOX0_SRAM_WORDS) { + return 0; + } + return s->sram[idx]; +} + +static void cptra_mbox_sram_write(void *opaque, hwaddr offset, + uint64_t value, unsigned size) +{ + AspeedCptraMboxState *s =3D opaque; + uint32_t idx =3D offset / 4; + + if (idx < CPTRA_MBOX0_SRAM_WORDS) { + s->sram[idx] =3D (uint32_t)value; + } +} + +static const MemoryRegionOps cptra_mbox_sram_ops =3D { + .read =3D cptra_mbox_sram_read, + .write =3D cptra_mbox_sram_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static uint64_t cptra_mbox_csr_read(void *opaque, hwaddr offset, unsigned = size) +{ + AspeedCptraMboxState *s =3D opaque; + + switch (offset) { + case CPTRA_MBOX0_LOCK_OFF: + if (!s->locked) { + s->locked =3D true; + s->user =3D CPTRA_MBOX0_SOC_USER_ID; + return 0; + } + return 1; + case CPTRA_MBOX0_USER_OFF: + return s->user; + case CPTRA_MBOX0_TARGET_USER_OFF: + return s->target_user; + case CPTRA_MBOX0_TARGET_USER_VAL_OFF: + return s->target_user_valid; + case CPTRA_MBOX0_CMD_OFF: + return s->cmd; + case CPTRA_MBOX0_DLEN_OFF: + return s->dlen; + case CPTRA_MBOX0_EXECUTE_OFF: + return s->execute; + case CPTRA_MBOX0_TARGET_STATUS_OFF: + return s->target_status; + case CPTRA_MBOX0_CMD_STATUS_OFF: + return s->cmd_status; + case CPTRA_MBOX0_HW_STATUS_OFF: + return s->hw_status; + default: + return 0; + } +} + +static void cptra_mbox_csr_write(void *opaque, hwaddr offset, + uint64_t value, unsigned size) +{ + AspeedCptraMboxState *s =3D opaque; + uint32_t val =3D (uint32_t)value; + + switch (offset) { + case CPTRA_MBOX0_LOCK_OFF: + case CPTRA_MBOX0_USER_OFF: + case CPTRA_MBOX0_HW_STATUS_OFF: + break; + case CPTRA_MBOX0_TARGET_USER_OFF: + s->target_user =3D val; + break; + case CPTRA_MBOX0_TARGET_USER_VAL_OFF: + s->target_user_valid =3D val; + break; + case CPTRA_MBOX0_CMD_OFF: + s->cmd =3D val; + break; + case CPTRA_MBOX0_DLEN_OFF: + if (val > CPTRA_MBOX0_SRAM_SIZE) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: DLEN 0x%x exceeds SRAM size, clamped\n", + __func__, val); + val =3D CPTRA_MBOX0_SRAM_SIZE; + } + s->dlen =3D val; + break; + case CPTRA_MBOX0_EXECUTE_OFF: + if (val =3D=3D 1 && s->execute !=3D 1 && !s->command_pending) { + s->execute =3D 1; + s->cmd_status =3D CPTRA_MBOX0_STATUS_BUSY; + cptra_mbox_submit(s); + } else if (val =3D=3D 0 && s->execute !=3D 0) { + if (s->command_pending) { + s->release_pending =3D true; + } else { + cptra_mbox_clear(s); + } + } + break; + case CPTRA_MBOX0_TARGET_STATUS_OFF: + s->target_status =3D val; + break; + case CPTRA_MBOX0_CMD_STATUS_OFF: + s->cmd_status =3D val; + break; + default: + break; + } +} + +static const MemoryRegionOps cptra_mbox_csr_ops =3D { + .read =3D cptra_mbox_csr_read, + .write =3D cptra_mbox_csr_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static void cptra_mbox_reset_hold(Object *obj, ResetType type) +{ + AspeedCptraMboxState *s =3D ASPEED_CPTRA_MBOX(obj); + + if (s->command_pending) { + /* Defer the clear until the in-flight command completes. */ + s->release_pending =3D true; + return; + } + cptra_mbox_clear(s); + + if (s->peer) { + CptraMboxPeerClass *pc =3D CPTRA_MBOX_PEER_GET_CLASS(s->peer); + if (pc->handle_reset) { + pc->handle_reset(s->peer); + } + } +} + +static void cptra_mbox_peer_check(const Object *obj, const char *name, + Object *val, Error **errp) +{ + CptraMboxPeer *peer; + + if (!val) { + return; + } + + peer =3D CPTRA_MBOX_PEER(val); + if (peer->intf) { + error_setg(errp, "Caliptra mailbox peer is already in use"); + } +} + +bool aspeed_cptra_mbox_set_peer(AspeedCptraMboxState *s, CptraMboxPeer *pe= er, + Error **errp) +{ + CptraMboxPeer *old_peer =3D s->peer; + + if (old_peer =3D=3D peer) { + if (s->peer) { + s->peer->intf =3D CPTRA_MBOX_IF(s); + } + return true; + } + if (!object_property_set_link(OBJECT(s), "peer", + peer ? OBJECT(peer) : NULL, errp)) { + return false; + } + if (old_peer) { + old_peer->intf =3D NULL; + } + if (s->peer) { + s->peer->intf =3D CPTRA_MBOX_IF(s); + } + return true; +} + +static void cptra_mbox_init(Object *obj) +{ + AspeedCptraMboxState *s =3D ASPEED_CPTRA_MBOX(obj); + + object_property_add_link(obj, "peer", TYPE_CPTRA_MBOX_PEER, + (Object **)&s->peer, cptra_mbox_peer_check, + OBJ_PROP_LINK_STRONG); +} + +static void cptra_mbox_realize(DeviceState *dev, Error **errp) +{ + AspeedCptraMboxState *s =3D ASPEED_CPTRA_MBOX(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + + if (s->peer) { + if (!aspeed_cptra_mbox_set_peer(s, s->peer, errp)) { + return; + } + } + + memory_region_init_io(&s->sram_mr, OBJECT(s), &cptra_mbox_sram_ops, s, + "cptra-mbox.sram", CPTRA_MBOX0_SRAM_SIZE); + sysbus_init_mmio(sbd, &s->sram_mr); + + memory_region_init_io(&s->csr_mr, OBJECT(s), &cptra_mbox_csr_ops, s, + "cptra-mbox.csr", CPTRA_MBOX0_CSR_SIZE); + sysbus_init_mmio(sbd, &s->csr_mr); +} + +static const VMStateDescription vmstate_cptra_mbox =3D { + .name =3D TYPE_ASPEED_CPTRA_MBOX, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_BOOL(locked, AspeedCptraMboxState), + VMSTATE_UINT32(user, AspeedCptraMboxState), + VMSTATE_UINT32(target_user, AspeedCptraMboxState), + VMSTATE_UINT32(target_user_valid, AspeedCptraMboxState), + VMSTATE_UINT32(cmd, AspeedCptraMboxState), + VMSTATE_UINT32(dlen, AspeedCptraMboxState), + VMSTATE_UINT32(execute, AspeedCptraMboxState), + VMSTATE_UINT32(target_status, AspeedCptraMboxState), + VMSTATE_UINT32(cmd_status, AspeedCptraMboxState), + VMSTATE_UINT32(hw_status, AspeedCptraMboxState), + VMSTATE_UINT32_ARRAY(sram, AspeedCptraMboxState, + CPTRA_MBOX0_SRAM_WORDS), + VMSTATE_END_OF_LIST() + }, +}; + +static void cptra_mbox_class_init(ObjectClass *oc, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + ResettableClass *rc =3D RESETTABLE_CLASS(oc); + CptraMboxIfClass *ic =3D CPTRA_MBOX_IF_CLASS(oc); + + dc->desc =3D "Caliptra mailbox host interface"; + dc->realize =3D cptra_mbox_realize; + dc->vmsd =3D &vmstate_cptra_mbox; + rc->phases.hold =3D cptra_mbox_reset_hold; + ic->complete =3D cptra_mbox_complete; + set_bit(DEVICE_CATEGORY_MISC, dc->categories); +} + +static const TypeInfo cptra_mbox_types[] =3D { + { + .name =3D TYPE_CPTRA_MBOX_IF, + .parent =3D TYPE_INTERFACE, + .class_size =3D sizeof(CptraMboxIfClass), + }, + { + .name =3D TYPE_CPTRA_MBOX_PEER, + .parent =3D TYPE_DEVICE, + .instance_size =3D sizeof(CptraMboxPeer), + .class_size =3D sizeof(CptraMboxPeerClass), + .abstract =3D true, + }, + { + .name =3D TYPE_ASPEED_CPTRA_MBOX, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(AspeedCptraMboxState), + .instance_init =3D cptra_mbox_init, + .class_init =3D cptra_mbox_class_init, + .interfaces =3D (const InterfaceInfo[]) { + { TYPE_CPTRA_MBOX_IF }, + { } + }, + }, +}; + +DEFINE_TYPES(cptra_mbox_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index fa6a961ac9..d23045c4b5 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -135,6 +135,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_cptra_mbox.c', 'aspeed_hace.c', 'aspeed_lpc.c', 'aspeed_ltpi.c', diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 82ddbf4d15..9fe2d27fef 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -106,6 +106,10 @@ aspeed_ast2700_scuio_read(uint64_t offset, unsigned si= ze, uint32_t data) "To 0x% aspeed_ast1040_scu_write(uint64_t offset, unsigned size, uint32_t data) "T= o 0x%" PRIx64 " of size %u: 0x%" PRIx32 aspeed_ast1040_scu_read(uint64_t offset, unsigned size, uint32_t data) "To= 0x%" PRIx64 " of size %u: 0x%" PRIx32 =20 +# aspeed_cptra_mbox.c +cptra_mbox_execute(uint32_t cmd, uint32_t dlen) "EXECUTE cmd 0x%" PRIx32 "= dlen 0x%" PRIx32 +cptra_mbox_complete(uint32_t status, uint32_t dlen) "complete status %u dl= en 0x%" PRIx32 + # mps2-scc.c mps2_scc_read(uint64_t offset, uint64_t data, unsigned size) "MPS2 SCC rea= d: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" mps2_scc_write(uint64_t offset, uint64_t data, unsigned size) "MPS2 SCC wr= ite: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" --=20 2.43.0 From nobody Mon Jun 8 06:38:44 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=1780468748; cv=pass; d=zohomail.com; s=zohoarc; b=Nn4K9Pd7qKGxfksYPLxzqXr1nljrVrJe58PCOF2WatKsfiWliNyKVnFDhXeziDZIxQjoVbGm5XlaINwmedV0Es1jgPkOZYcfKHhsIZVHoYRdxVR5yp54fYVLrzoH8ImU3NakgGL293V6uhyYEo+XElfWfQOdag5fu5S4mC2x6+Q= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780468748; 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=nf7S7F8aRxSN2RBA0im64tndZUAiNIOEfUKvqRgggX0=; b=MaArhWY4Q+P5YvFuSR5OsHvLNht879Cky4Y9uT0/NmHoSRC2d4EW9GhjfiDcBzJjp1GZSFbvPTqEf4rmI7/VnPVIekTiLP1sn7tJ5gTu78fgq7JVIXYhg2R9rrPeS3KiZsabd6+WBRWgP4onEqMf76KbZtMvjaq7Sb7+oqQ4u40= 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 1780468747811730.7174554533282; Tue, 2 Jun 2026 23:39:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUfF0-00006a-B5; Wed, 03 Jun 2026 02:38:14 -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 1wUfEy-00005t-Q1; Wed, 03 Jun 2026 02:38:12 -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 1wUfEw-0008Ja-Df; Wed, 03 Jun 2026 02:38:12 -0400 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com (2603:1096:400:129::9) by TYNPR06MB8525.apcprd06.prod.outlook.com (2603:1096:405:3d0::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 06:38:02 +0000 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995]) by TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995%6]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 06:38:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EGL5fxz6PtjzZercPI07o+rdpD4JMKhuOBpjc9ukbeBkuV4f65kz45UXin9ComVbxN8XaEXnr8KDZ7NNtNQZW/XljeSnCLILKG8y0q36/5lQHUO1cX4MYSPaQVA0qnG5wY6F29CYGjZnu33D5ZxQADgMKMQKHauLlPbwr7j1CjARO5U5uj1BWkyPdOJwZCEUCh/coHkZiquLVPz95RI/vi/XMhROJONdgZgP7MJq7832IFCZfvqyy3IOgzkIKjo7hmK75NoxWkzpztyI4BsBBt4nK9i71CamPA/bNSGBOXJ1/YMw8CMI9sAEkCCyKxArlpTiq3iePYKxoQkPa9FlMg== 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=nf7S7F8aRxSN2RBA0im64tndZUAiNIOEfUKvqRgggX0=; b=wraSestNkNH5xVWD2JoWfzuLrXbsmJKr5UF1Y847HXv8xZnnX+Pwzom0zGgz6ryERORRidSQzj3gPAFekZdsH7P/QuE8zji7ZKUU4qtEnlo4aMPeqSfTL0jG1/Yor0Xn437Qt8qNNVepBCMNKZUhQTuzPFOGZkPADZsSiEJUvIqVv5v/cAv5QZXfioNnIFbdwC1Q7XEM25GxsAQqOHgdPDpk4wdwUBTiJdvPqmXBYQO2GOgZkKsbLATr5+0gCbWn8RXT9Frsd06XCmXbPmjEcXwqD7mar1u3wl09W3WDpryWBpYVxw8xHpAclpVkZaCoyeifXV5u7AhVcDFGn/9F0w== 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=nf7S7F8aRxSN2RBA0im64tndZUAiNIOEfUKvqRgggX0=; b=YeEDIylk9KgkYAt8hXm2Dwd+yNCANzAwaA+qk/Y+LBYp53ebsA5m1uZvuL6xWxznQ/9UgDj3DS80jd0mhgzXy7pFPtxsG7RLKtUSGISGdeLweEWdR24HzyUaVs79/UyABbNJJ4U6w9a1BWBQPTNXioLKk6qvQIAqcfpCO6kfSgsbyX3Xow1RD7zLt7FMEI+v0N9beK/7W4T82r8ECZ69UpfVn1ObNgaqJzzxIcw31M05G+e7etI0wjFEmEqw0DzKQKlE/uYfPFNlKhHesfL+yJ+m/v18pkwPISMxta044QmfifnCeI8BC+M2+nD48VOo1BE2dh6U6W8AvBFfgPDW3A== From: Steven Lee To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Kane Chen , Andrew Jeffery , Joel Stanley , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:All patches CC here" , "open list:ASPEED BMCs" CC: Troy Lee , "longzl2@lenovo.com" , Yunlin Tang Subject: [RESEND PATCH 3/6] hw/misc: Add external Caliptra mailbox peer Thread-Topic: [RESEND PATCH 3/6] hw/misc: Add external Caliptra mailbox peer Thread-Index: AQHc8yOGVsgLN5+rAkWBO7I3alIf7A== Date: Wed, 3 Jun 2026 06:38:02 +0000 Message-ID: <20260603063756.1481524-4-steven_lee@aspeedtech.com> References: <20260603063756.1481524-1-steven_lee@aspeedtech.com> In-Reply-To: <20260603063756.1481524-1-steven_lee@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: TYZPR06MB4746:EE_|TYNPR06MB8525:EE_ x-ms-office365-filtering-correlation-id: 38e74462-bc70-4b1a-021e-08dec13aa94e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|7416014|921020|6133799003|3023799007|18002099003|22082099003|56012099006|38070700021; x-microsoft-antispam-message-info: UpDeKngaEaxUsg9Nv+WQ/Dy2TdLO48kOiVHmA//KvHdZXYHDGpdckJwJBXbVFgvFl9mfBPTR6DBm3srIgKcMb5Ks0KuI9bKotaYSN5oQT+fUBIKaLZmANMMklwNW2TF9endH/V8lMaruNEnk4qPk21DLWklfktLRdGtOWKt/J437qxzlvirZJbcJwHRbVgkz8JjNXP7OCxZLxGGfOYbLQB1AUK0J9BcWyu7/mLEdtXn7BJckVJJWlNxRApB2jXhuOkZy5g8sTXtRSjtMJwAyM2xgyahb+Y99cvAn0MZPFMsxRq24w7UsGs57tS37mj09DcIILsecCND9PmW7KEcZgpEdfOFGNZk/zFSFVLvjINqlI/umRKp0wwkQFHjrtVRoQxSSkaQGApVCPQveakKy6AxXNkr9CqLQAOAMCW+23mpq4bNlD8WRLEKxfTpysJ4oL+4WbCYwK+Ry4ZPkI0+KZ8fPKXfC02wI6KpCEqv2JgOa+frKcVRTvqoxy4PWtx1BEA2mqmoQ8KUlNqD6cjhFiaCcKiSi/sa9CmDCmJosy2in1fgATZN0Wc2Ik7WpDE1fxJy332SnvSWshhEycKymJFs8luAme+CS9iw6mHcP+XGL1c0MgPfv3ucfiMsRFphel/riNQ5ufqpZ1xqZzgQUyTEXDVGD6DusaDCxW/S8KYzCdhiCxPS/bTXDNUWdN0zIGPJQdELoXMk0txBVE670baoQDMR+NqZJMHc2JkI2Z4Xo1t4e0u7FFL0b4o1+LLwEvjEEU2mcmhKumaFBRacVrA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4746.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(7416014)(921020)(6133799003)(3023799007)(18002099003)(22082099003)(56012099006)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?cygRZ+5s3HjjHdr24MII0NOjADOIzWaLT8NFdCx4uUtJPg+UCWkS0UHjPh?= =?iso-8859-1?Q?YGZB+D7yLSOKKySnz00nbwghIf/DVY98u2ftyGlVYGzwQX+Q32qjKVVvdD?= =?iso-8859-1?Q?7MZv9y9ZAd6OAID3im3EKJZ5OxqFTrBxxH26DauNm53cyJUzebYcCwOzcT?= =?iso-8859-1?Q?YybPi7JgYd7XrAjlciYqFwGOkP3kd5/yvM0NMKQ7ar3ygync/qGTUN/gKd?= =?iso-8859-1?Q?saPJFSiP11JeJBOLC4XbLXdEM0Hmkly8EFobunjL3pXocmWZvEkB+NjRHt?= =?iso-8859-1?Q?gbF4yKdIsBWAAPsFKF7yKLIlJNwjQu+YLVVAmTNpilW7vtIEcLQzdQCt9h?= =?iso-8859-1?Q?bT8V3u4+T8gcfDmhFlLSdoujsbDb3TNZWP6Z2EAF0i9DENppPpW6/iWTWa?= =?iso-8859-1?Q?R7I8tiaRawMxBEGESFhU+q5UA6UoDonLc+SpAiGZJCGed3rNgZGvbWX84I?= =?iso-8859-1?Q?vj3CpSazcksYzn8Jq84M/bRC+XTiLQCmxyJa5l3GzHsj0jlxyfwqWcBVg+?= =?iso-8859-1?Q?B3LzrxJO2FspF6a63MI3e5+25jSkQUyoDn4KiqPDZZYVQ3K4akuH0GED12?= =?iso-8859-1?Q?7FIJTxy4zeJFPnsdidA7WAD+dCmX3hoTQ/KNwIhHaDqip23Jn+Aq75QF6F?= =?iso-8859-1?Q?RD31Uz0tD8uRGjKe+hqu3zEFKP/0vlKyu6HAJ4LzvSlBhflgHrNuudIxe5?= =?iso-8859-1?Q?xX/JqP6MBmK6PlQQM6NSAdvCeJtTDjR65ctNq1d4J/SqmLXlyLqifraB5y?= =?iso-8859-1?Q?zHv1d4sH7U902t9BQil+cnNXlnpzWiNXEAZOm6bfSbggtETjEyPrFn9wN6?= =?iso-8859-1?Q?uSxwPkSVUYOuoWa166USVWmWzasIWWuaJRlPI3ca13+yu3e9ZXiABze9sv?= =?iso-8859-1?Q?mnBQrHMfNPRs6rkpDJh7ieeyPH0LK7Qfsn7lk23w+LlJwLfQsSx5eDPb81?= =?iso-8859-1?Q?X8Zt7DKhhI7MkTzKvkhapayCGhL+Y7rRElp5tPYEwgS1c/s/LNHdGo8X77?= =?iso-8859-1?Q?A721w+0XPm6rDBnswYjncqaAzDG28gQupTBmAzcs13NhhPIz9cnrP4DMDr?= =?iso-8859-1?Q?wmiFVEqWqvilWjvPOrDj+wkSj4lspv6WdgXIfiMyemHtjKfozASb/91u0V?= =?iso-8859-1?Q?QaATMkxemYrCVy6jIKjxaW9UIo9R1nRRG0FgrFmwnx0NzrUsr0P2Na7hNX?= =?iso-8859-1?Q?Uhx92kbKizqBAHfBeiJCnSK+VkDZ7mLyFIV5fzU5oKtN7DDWlWHCDJ5tOr?= =?iso-8859-1?Q?ayb/6ZRKReF2qCCYBsBjlxuYRs7XoMLozqlWyTGiRShRY5NCH5jA8S0uAa?= =?iso-8859-1?Q?wqxNgxH8O5TR1MJ1GvR04WEuYOCfFsn/ehK3tCPixc4Srlme+JnsUER4tS?= =?iso-8859-1?Q?WSdjogEmnJRT6VDj+eeJ4ggW+w+ukp5ytfEQC1gt8U6iOYDlqvmzVFLdI+?= =?iso-8859-1?Q?/ZpE6o/z0PqqzXXKgB+BTd3KGfXtjBTT/vV0lCtIjSCf3CjBmFg4AI6wdY?= =?iso-8859-1?Q?BO9Cf9zfSK1N/ujch/oM/YJ8VMHomPfVPAfXjZMr6oYtEPFJswGk7gb99n?= =?iso-8859-1?Q?BROxIHYrkyb73JWO7Xqvjgq0p5qkUIuqJIqxKGl6M/+X1D6Y2PZ9Y8qU3G?= =?iso-8859-1?Q?WdbhQ7tlgTOK3Qwo1/fLid14Pf9hX645APx4HN3m+SkyBWt3or4r+ml4og?= =?iso-8859-1?Q?gkTyWgOYhpMaxozYXiUInW9q9LdD0B549c754/xIgMdYhqTAwTvxlkY5jn?= =?iso-8859-1?Q?u3t9WOGqba1ERkG/W9yRyP+plOF6X3nrZGtbhLmWy+E2ws2xdcCH8t8jVE?= =?iso-8859-1?Q?wFXCX3xFig=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: LqkZUT9wOuMavjs7IJ/KM+s85f6VyEqPlYpVVwHUk/0p+CYLKwsg9AqPhiJUCPBmljRQoYKrq3qXMkh+NmTuNh1oUakFdelYbctVQw3cvpA052F08IZLi6eEZsEkeKBDPsMnjY2VQd9Cb/mamoHaVnffWDqamK8F1UxotYIRCsharbkC8/FdtZnYZhnTBAjfPh+8ROvEDzblmY69lLAHnuDdzc3RLWr4jd/9NfNf2gBmYa0gGnbuhcR6jaz5ItOWES1RrOuTA4NAyajOjlr7Hbu6KNsnZMuadnGCaLycyIqbqpJ+H65EOhqME3Js8BnmUKmJ37svpX5CLbPWf4W4bg== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4746.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38e74462-bc70-4b1a-021e-08dec13aa94e X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jun 2026 06:38:02.5285 (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: FABXDVwidusN06KQ8j9y7P5lq4XEaVYKPQrUfMLnObmQTRUseV/Cknn2DU7fG51wa+OZkr8vrCKrvs8elwUpgUooYSPBaudliDHNJmPYNGc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYNPR06MB8525 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=steven_lee@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: 1780468750265158500 Content-Type: text/plain; charset="utf-8" Add a cptra-mbox-peer-extern backend that forwards mailbox execute requests= to a chardev peer using a small framed protocol. Run the blocking chardev transaction from the thread pool and report comple= tion back through the mailbox peer interface. Block migration while this ex= ternal backend is realized because the peer state lives outside QEMU. Signed-off-by: Steven Lee --- MAINTAINERS | 1 + hw/misc/cptra_mbox_peer_extern.c | 318 +++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + 3 files changed, 320 insertions(+) create mode 100644 hw/misc/cptra_mbox_peer_extern.c diff --git a/MAINTAINERS b/MAINTAINERS index cd5c4831e2..a0e11d4a0e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1270,6 +1270,7 @@ L: qemu-arm@nongnu.org S: Maintained F: hw/*/*aspeed* F: include/hw/*/*aspeed* +F: hw/misc/cptra_mbox_peer_extern.c F: hw/net/ftgmac100.c F: include/hw/net/ftgmac100.h F: docs/system/arm/aspeed.rst diff --git a/hw/misc/cptra_mbox_peer_extern.c b/hw/misc/cptra_mbox_peer_ext= ern.c new file mode 100644 index 0000000000..f8d5886880 --- /dev/null +++ b/hw/misc/cptra_mbox_peer_extern.c @@ -0,0 +1,318 @@ +/* + * Caliptra mailbox external peer (backend). + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "block/thread-pool.h" +#include "chardev/char-fe.h" +#include "hw/misc/aspeed_cptra_mbox.h" +#include "hw/core/qdev-properties.h" +#include "hw/core/qdev-properties-system.h" +#include "migration/blocker.h" +#include "qapi/error.h" +#include "qemu/bswap.h" +#include "qemu/error-report.h" + +#define CPTRA_MBOX_PROTO_MAGIC 0x4D424F58u /* "MBOX" */ +#define CPTRA_MBOX_PROTO_VERSION 1u +#define CPTRA_MBOX_CMD_EXECUTE 1u +#define CPTRA_MBOX_CMD_RESPONSE 2u +#define CPTRA_MBOX_PROTO_MAX_PAYLOAD (8 + CPTRA_MBOX0_SRAM_SIZE) + +typedef struct QEMU_PACKED CptraMboxProtoHdr { + uint32_t magic; + uint16_t version; + uint16_t command; + uint32_t payload_len; +} CptraMboxProtoHdr; + +OBJECT_DECLARE_SIMPLE_TYPE(CptraMboxPeerExtern, CPTRA_MBOX_PEER_EXTERN) + +struct CptraMboxPeerExtern { + CptraMboxPeer parent; + + CharFrontend chr; + Error *migration_blocker; +}; + +typedef struct CptraMboxExternReq { + CptraMboxPeerExtern *p; + + uint32_t cmd; + uint32_t dlen; + uint8_t *req_data; + size_t req_len; + + uint32_t rsp_status; + uint32_t rsp_dlen; + uint8_t *rsp_data; + size_t rsp_len; + + char *error; +} CptraMboxExternReq; + +static size_t cptra_padded_len(uint32_t dlen) +{ + return (size_t)((dlen + 3) / 4) * 4; +} + +static int G_GNUC_PRINTF(2, 3) +cptra_req_fail(CptraMboxExternReq *req, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + g_free(req->error); + req->error =3D g_strdup_vprintf(fmt, ap); + va_end(ap); + + return -1; +} + +static int cptra_write_all(CptraMboxExternReq *req, const void *buf, size_= t len) +{ + int ret; + + if (len > INT_MAX) { + return cptra_req_fail(req, "write too large: %zu", len); + } + ret =3D qemu_chr_fe_write_all(&req->p->chr, buf, len); + if (ret < 0 || (size_t)ret !=3D len) { + return cptra_req_fail(req, "backend write failed"); + } + return 0; +} + +static int cptra_read_all(CptraMboxExternReq *req, void *buf, size_t len) +{ + int ret; + + if (len > INT_MAX) { + return cptra_req_fail(req, "read too large: %zu", len); + } + ret =3D qemu_chr_fe_read_all(&req->p->chr, buf, len); + if (ret < 0 || (size_t)ret !=3D len) { + return cptra_req_fail(req, "backend read failed"); + } + return 0; +} + +/* + * Wire protocol (magic 0x4D424F58 "MBOX"): + * + * Header (12 bytes, little-endian): + * u32 magic =3D 0x4D424F58 + * u16 version =3D 1 + * u16 command + * u32 payload_len + * + * MBOX_EXECUTE (1) QEMU -> backend + * payload: u32 cmd, u32 dlen, u8 sram[ROUND_UP(dlen, 4)] + * + * MBOX_RESPONSE (2) backend -> QEMU + * payload: u32 status, u32 dlen, u8 sram[ROUND_UP(dlen, 4)] + */ +static int cptra_extern_worker(gpointer data) +{ + CptraMboxExternReq *req =3D data; + CptraMboxProtoHdr hdr; + size_t tx_payload_len =3D 8 + req->req_len; + g_autofree uint8_t *payload =3D NULL; + size_t rsp_data_len; + + if (!qemu_chr_fe_backend_open(&req->p->chr)) { + return cptra_req_fail(req, "backend is not connected"); + } + + payload =3D g_malloc0(tx_payload_len); + stl_le_p(payload, req->cmd); + stl_le_p(payload + 4, req->dlen); + if (req->req_len) { + memcpy(payload + 8, req->req_data, req->req_len); + } + + hdr.magic =3D cpu_to_le32(CPTRA_MBOX_PROTO_MAGIC); + hdr.version =3D cpu_to_le16(CPTRA_MBOX_PROTO_VERSION); + hdr.command =3D cpu_to_le16(CPTRA_MBOX_CMD_EXECUTE); + hdr.payload_len =3D cpu_to_le32(tx_payload_len); + + if (cptra_write_all(req, &hdr, sizeof(hdr)) < 0 || + cptra_write_all(req, payload, tx_payload_len) < 0) { + return -1; + } + + if (cptra_read_all(req, &hdr, sizeof(hdr)) < 0) { + return -1; + } + + hdr.magic =3D le32_to_cpu(hdr.magic); + hdr.version =3D le16_to_cpu(hdr.version); + hdr.command =3D le16_to_cpu(hdr.command); + hdr.payload_len =3D le32_to_cpu(hdr.payload_len); + + if (hdr.magic !=3D CPTRA_MBOX_PROTO_MAGIC) { + return cptra_req_fail(req, "bad response magic 0x%08x", hdr.magic); + } + if (hdr.version !=3D CPTRA_MBOX_PROTO_VERSION) { + return cptra_req_fail(req, "bad response version %u", hdr.version); + } + if (hdr.command !=3D CPTRA_MBOX_CMD_RESPONSE) { + return cptra_req_fail(req, "unexpected response command %u", + hdr.command); + } + if (hdr.payload_len < 8 || hdr.payload_len > CPTRA_MBOX_PROTO_MAX_PAYL= OAD) { + return cptra_req_fail(req, "invalid response payload length %u", + hdr.payload_len); + } + + g_free(payload); + payload =3D g_malloc(hdr.payload_len); + if (cptra_read_all(req, payload, hdr.payload_len) < 0) { + return -1; + } + + req->rsp_status =3D ldl_le_p(payload); + req->rsp_dlen =3D ldl_le_p(payload + 4); + if (req->rsp_dlen > CPTRA_MBOX0_SRAM_SIZE) { + return cptra_req_fail(req, "response DLEN 0x%x exceeds SRAM", + req->rsp_dlen); + } + + rsp_data_len =3D cptra_padded_len(req->rsp_dlen); + if (8 + rsp_data_len > hdr.payload_len) { + return cptra_req_fail(req, "short response payload for DLEN 0x%x", + req->rsp_dlen); + } + + if (rsp_data_len) { + req->rsp_data =3D g_malloc0(rsp_data_len); + memcpy(req->rsp_data, payload + 8, rsp_data_len); + req->rsp_len =3D rsp_data_len; + } + + return 0; +} + +static void cptra_extern_req_free(CptraMboxExternReq *req) +{ + g_free(req->req_data); + g_free(req->rsp_data); + g_free(req->error); + g_free(req); +} + +static void cptra_extern_complete(void *opaque, int ret) +{ + CptraMboxExternReq *req =3D opaque; + CptraMboxPeerExtern *p =3D req->p; + CptraMboxIf *intf =3D p->parent.intf; + CptraMboxIfClass *ic =3D intf ? CPTRA_MBOX_IF_GET_CLASS(intf) : NULL; + + if (req->error) { + error_report("cptra-mbox-peer-extern: %s", req->error); + } + + if (ic) { + if (ret =3D=3D 0) { + ic->complete(intf, req->rsp_status, req->rsp_dlen, + req->rsp_data, req->rsp_len); + } else { + ic->complete(intf, CPTRA_MBOX0_STATUS_CMD_FAILURE, 0, NULL, 0); + } + } + + cptra_extern_req_free(req); + object_unref(OBJECT(p)); +} + +static void cptra_extern_handle_execute(CptraMboxPeer *peer, uint32_t cmd, + uint32_t dlen, const uint8_t *data, + uint32_t len) +{ + CptraMboxPeerExtern *p =3D CPTRA_MBOX_PEER_EXTERN(peer); + CptraMboxIf *intf =3D peer->intf; + CptraMboxExternReq *req; + + if (!qemu_chr_fe_backend_connected(&p->chr) || + !qemu_chr_fe_backend_open(&p->chr)) { + if (intf) { + CPTRA_MBOX_IF_GET_CLASS(intf)->complete( + intf, CPTRA_MBOX0_STATUS_CMD_FAILURE, 0, NULL, 0); + } + return; + } + + req =3D g_new0(CptraMboxExternReq, 1); + req->p =3D p; + req->cmd =3D cmd; + req->dlen =3D dlen; + if (len) { + req->req_data =3D g_memdup2(data, len); + req->req_len =3D len; + } + + object_ref(OBJECT(p)); + thread_pool_submit_aio(cptra_extern_worker, req, + cptra_extern_complete, req); +} + +static void cptra_extern_realize(DeviceState *dev, Error **errp) +{ + CptraMboxPeerExtern *p =3D CPTRA_MBOX_PEER_EXTERN(dev); + + if (!qemu_chr_fe_backend_connected(&p->chr)) { + error_setg(errp, "cptra-mbox-peer-extern requires a chardev attrib= ute"); + return; + } + + qemu_chr_fe_set_open(&p->chr, true); + error_setg(&p->migration_blocker, + "Migration disabled: cptra-mbox-peer-extern chardev backend= " + "state is external"); + if (migrate_add_blocker(&p->migration_blocker, errp) < 0) { + return; + } +} + +static void cptra_extern_finalize(Object *obj) +{ + CptraMboxPeerExtern *p =3D CPTRA_MBOX_PEER_EXTERN(obj); + + migrate_del_blocker(&p->migration_blocker); + qemu_chr_fe_deinit(&p->chr, false); +} + +static const Property cptra_extern_props[] =3D { + DEFINE_PROP_CHR("chardev", CptraMboxPeerExtern, chr), +}; + +static void cptra_extern_class_init(ObjectClass *oc, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + CptraMboxPeerClass *pc =3D CPTRA_MBOX_PEER_CLASS(oc); + + dc->desc =3D "Caliptra mailbox external (chardev) peer"; + dc->realize =3D cptra_extern_realize; + dc->hotpluggable =3D false; + device_class_set_props(dc, cptra_extern_props); + pc->handle_execute =3D cptra_extern_handle_execute; +} + +static const TypeInfo cptra_extern_type =3D { + .name =3D TYPE_CPTRA_MBOX_PEER_EXTERN, + .parent =3D TYPE_CPTRA_MBOX_PEER, + .instance_size =3D sizeof(CptraMboxPeerExtern), + .instance_finalize =3D cptra_extern_finalize, + .class_init =3D cptra_extern_class_init, +}; + +static void cptra_extern_register_types(void) +{ + type_register_static(&cptra_extern_type); +} + +type_init(cptra_extern_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index d23045c4b5..9d545e8fb7 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -136,6 +136,7 @@ system_ss.add(when: 'CONFIG_PVPANIC_MMIO', if_true: fil= es('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_cptra_mbox.c', + 'cptra_mbox_peer_extern.c', 'aspeed_hace.c', 'aspeed_lpc.c', 'aspeed_ltpi.c', --=20 2.43.0 From nobody Mon Jun 8 06:38:44 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=1780468747; cv=pass; d=zohomail.com; s=zohoarc; b=IJGIHndM7IiGa9OPIoKBQJwoJ99s5LLaY5uZgQYkRKZTZiu2cnfV0JDk/soL26H9L8DZmNvWkUdRNJL6//8sy1Qq/8wpEWil57vXbE+HQrdTAYfMriZMIefDbS3XxZyM3iWEtS6iDEKwwVP0q2dWizNvR4r+fxt0qRDXDFsRdJM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780468747; 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=hugjYfbVn3TZzHsqf6p+fWyxF7mOkdc/9kgjdKtWAeM=; b=gFXyEA3R5OJmHZmX7/dVpqg8yyZaRLlHp/xXcp44UFEgKXch4ugbJwbviy1jzu/4Cga6rdBbYFfSI+CwRx4pE6+IWnESSSOp1Y5tYvJxyYT+3IGCe5S3TkATke/Ob1PBukHpCoDa+Vi6gMCYHJMe2+dS6xGKke0rrDw0WoZQFdA= 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 1780468747534357.5797812147059; Tue, 2 Jun 2026 23:39:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUfF4-00009V-Uz; Wed, 03 Jun 2026 02:38:18 -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 1wUfF1-00006o-Ou; Wed, 03 Jun 2026 02:38:15 -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 1wUfEz-0008Ja-Ka; Wed, 03 Jun 2026 02:38:15 -0400 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com (2603:1096:400:129::9) by TYNPR06MB8525.apcprd06.prod.outlook.com (2603:1096:405:3d0::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 06:38:04 +0000 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995]) by TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995%6]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 06:38:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ktejWSfrNXvdnfs011KD7Qq/KkPpVuT7R7LLywHmHXsVaQS0JskP8YOrj3X9NY0dtQmRUTZymzo4xOJIFYISJt6Tb1d2ArTNmUdkTuzoKRMD2umxvmfifkq7i8hHH2caQTM/97UGW9RgM33rEQXLVXPjlis329KLposHECvVbbyC5nN0vl2RCu7YgGs5Dgb9pcWaFPWi13+APePlTVx37avdoR4JCE6zs/VQgSiuT5r85vok4bv5WoNF+Ui4LkwYAvHcbNEikR2oItsjd1qcm0NDRAwK0U3Qkg0udhpaW7/g0swrJk3FbOoePB7W2RGCkRzZ/OERbBYitVIJ+JnTxw== 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=hugjYfbVn3TZzHsqf6p+fWyxF7mOkdc/9kgjdKtWAeM=; b=XoUHNDZtPfbdB6lkuWzhBpSakAEErixxnZW8cDsE2oxiEDIMiTUvvuUN0ULPjFgJUkaLnL8nAWAtUu8buqXWpyZq1nPs2/VUNMgZWwGUKH9xZptaEb1OAZE107O1ZKLPNhPE43VD8MSOBFNOuHfBEq5Aoc7Ikhl5fUMKLE+DVFE5d9VxAjmXAbHRTOCeZDTcNXupeHVl2XUpmlxmcqeicsGill2JgkPUXD1WJfjN916f+hrujAStcfW3usKUHgSr/YEYMimWtUVONZkf/D8DNKB8TK6BWnfY23qm6i8HJLLU16CIj4hemI8I7WatsrN3K0f0QHMAONX9N8W7BTSLzw== 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=hugjYfbVn3TZzHsqf6p+fWyxF7mOkdc/9kgjdKtWAeM=; b=dwR8HkpC7VXS5URQoZ/gwksSFeqqluJO+IhXi3NoQsfFEIieOxxQdlHHd7SGUqTUuMJHcK7tqqoacFk+8xrIoHiIWyHi4HnIfHQFYh520MwVEUzJuGN49s67EzST1G+T/Wb2il+KegQSy0V9WtZqLxQUT2HcjvhVtZ5iIQmYATgqma709me9P4JvE9+HqPmk03ynGaFGkAyRD+VQNc2iXKK45IGdaUxvEaZYCnfI1nYzTddon5e/godRhNOZJ3yP+x4gZ1A2PjsIauV2XJwnzlUeKSS/T0KgWgjvm/MRc/whymM7FBBS4EJZ5rLrLj5pCp47b26UEgRBpFBQmhasNQ== From: Steven Lee To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Kane Chen , Andrew Jeffery , Joel Stanley , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:All patches CC here" , "open list:ASPEED BMCs" CC: Troy Lee , "longzl2@lenovo.com" , Yunlin Tang Subject: [RESEND PATCH 4/6] hw/arm/aspeed_ast1040: Wire Caliptra mailbox Thread-Topic: [RESEND PATCH 4/6] hw/arm/aspeed_ast1040: Wire Caliptra mailbox Thread-Index: AQHc8yOHJFB0imqHzkmuJPy6oLm/Gg== Date: Wed, 3 Jun 2026 06:38:03 +0000 Message-ID: <20260603063756.1481524-5-steven_lee@aspeedtech.com> References: <20260603063756.1481524-1-steven_lee@aspeedtech.com> In-Reply-To: <20260603063756.1481524-1-steven_lee@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: TYZPR06MB4746:EE_|TYNPR06MB8525:EE_ x-ms-office365-filtering-correlation-id: bfe60f29-d599-4322-5d17-08dec13aaa26 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|7416014|921020|6133799003|18002099003|22082099003|56012099006|38070700021; x-microsoft-antispam-message-info: wEMavIjegsJ0QmLB+hZZQixRk5DwewQ70lZ5SfoVuXlPE0ADuUBZmNEoA9RIrUs6a5Ys5I6Xw6aaKvn8wlwAn2iYwRXNUxOJN8ZQi9ys46kpmzZVXd9YR+mvynHbRHzEWG60L2yujdQ3RtlieqDhKf56LFKv7EpQAF62Cb+/Gx1ALANtkwry3lhoeIThKRFQJftDq51Cd/Nt6NPRsqHOA0YXv8jiQqeOgGSm/OcJYv+tURJl17igvick5/yc3LrT8zyMW05031XWzMduMmBNULlu4NaVLHx/DFLwSZismBy8GpB5uTODWHfL7euJ4Aeo/ddaUbkrysPk23yDjOS50tjgZpzWX4/Ph5ByjWdAgIqmkaHnU3DJ01L3vvnByfsN3kNDR4RNqVNDLchfJdNg+/UeD4liGN4I1VLUgD2mJDqmEhAbtBO6B3SpqFA/vUKhqIT7l8IJaohDCfc2mzFiQsLKLI7VKzLsVXh/lFQqe3BNygs0o2uAFK5hA41w2nzjTOLeVhdiFrCCkEO6n/Id7+6TDts9viuBVgG5KbjP9ccgw6UqSq3HU0I84YHkymktaLbu5nsvSsO/UouGihXEu2A+Vr2G/HIic5K/mZTg6sckIzYC3x2656j5eBpHSUfOiv+HsnWn5/1Cj9SL4AU1s4o0dDXeoUIgL2wNXpgyLqUo/G1KG5vMEUmS3siOdgiEMPEhZaTGQ+s/xNYVDCJ3X+zTqV8FGSOB5rAcdLbnzD/KFiDuyQjTXmc/uICRGNI91lVvUiXd1nd0YKk/U2gt3w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4746.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(7416014)(921020)(6133799003)(18002099003)(22082099003)(56012099006)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?mG3GQR82KVncjgvEMP4zAcdqvxw7p5/ZTNbDev85V5zDgFX5lgz6NIbu+W?= =?iso-8859-1?Q?anOx1d/41vTVzzJbW1ctZEOdyxwQfIbuMSUpiozWLt1dMvt9tB9q+W2Lyk?= =?iso-8859-1?Q?skmJ67WPPfW6gK5rcaBZBUaZ4z5PK37ZhnGLzeM+mPk9aD8k0/oBUXL+FT?= =?iso-8859-1?Q?ovk4cE0TOBBcWWEXvEhlfwwKllOwqQUqhqCKjfzkHuXN36GZfWrAUrIBm0?= =?iso-8859-1?Q?RYFPS6H48b9BxTq7R1YD11Mb9h4zqjjmMMLVqeBeAN1Sbcc12uORTL3+2t?= =?iso-8859-1?Q?exk9RdgL2wx1FBhJPd16VBkIcjola8gDnkp5HbAI/XuWQ/A20AlQ3HSl38?= =?iso-8859-1?Q?oMJVCnOoU8GHJ7pn07+nUEEpzO9yz75iPTBIiIZtsoR8Na59ih7DDKsxAx?= =?iso-8859-1?Q?9ZHWrsNnv0yNBf7LqZRSNf6BTD9cHVRNyI/NPAS6uuhKO1Fb3gpA6mSRYw?= =?iso-8859-1?Q?EuMkZINbN3aAC3KjObHUig4GKkKeZj1Qla7vSgP6bkaRRbn9JoVsaUloVN?= =?iso-8859-1?Q?3QX5NHJ9TxRTSVpV1CVkY7NnDCpj7B5riOg4gh1HnhOoTptAG7/ajpS3m9?= =?iso-8859-1?Q?pkvDgLIVg6Rs2gUUIQN+uQYobz73buwafmPjBrAhO+wahyJzhLXbUKhlo+?= =?iso-8859-1?Q?wrl02ns7E2xnfWmtF/iDI6TNiaaini69vKE1xo9g8pCpaBR2OYwQa+JIAX?= =?iso-8859-1?Q?n8MciOeyVbVBKrMaILkAZGu8kSxkB6C49QFnTweEsx8qOIHeeRcbMnf44I?= =?iso-8859-1?Q?wiRZ6mmBE6/EeTa8eDzUbuvx9gcqXBvLIs0oqaXqce+aIkjhYDjrecY64m?= =?iso-8859-1?Q?KpMq1nVgVDUxiQjgQrKxVCJgB00EnbKh4OOtemWDjjx/2VK+Ng0TUgaMQO?= =?iso-8859-1?Q?Onw2ULSLM+8TqRF/DwqscVOPFbo4f6iS6wJ6fkIPw1bawWwt3CvjL2r+Q4?= =?iso-8859-1?Q?KtIl+DOe31upg8EAV/NCL+qfuv+/IKPP6x9fhHiMofjs1pYFLomZfpoNp9?= =?iso-8859-1?Q?WT6omJ1iE1mW1bgD0sEuh7O/ln0pbhRgLQefCvu1s3Q2hpjqvGZ53znkY8?= =?iso-8859-1?Q?DF7GghLyIH78WNoqyFs8ldoTAyjZJRLl0aqgTO+jMQMPlMMyS/3ZrUQi62?= =?iso-8859-1?Q?7IQp0SfMQpvKJzAaI65znJI2ljxe1IozWAis0ofK9j8+kR0wi2+apOJ6d9?= =?iso-8859-1?Q?RP+OXP0nRZCckT8lMm6hOPGoHs74AhiwlfM2flFXGklMtT7AKwM1BoNFgn?= =?iso-8859-1?Q?GQdR/9B901TwWbLulqe2i4GHaNfRQbXpOsl03zhvQSHKo/TNa4fbelMSAw?= =?iso-8859-1?Q?IUW6oSn3ZGA/LONX1WiolnItrFMNYvaWAO70VbWSrbBPuJy4n0qi85PjUt?= =?iso-8859-1?Q?rWztkTh80Hc/MGnGdjpBICtkTtKlP60GujIFb04tLPLnapIucItJqiSDcS?= =?iso-8859-1?Q?e22IMyNGiWEyoP4cLZIgJVxyOL7Oj2h+1P0Tqzv3DgxdjzhpLoLJgzTNPH?= =?iso-8859-1?Q?wahJroY9a0FLJyVeIcdAv0aZJiLie0v9iK9NdpG6Aye/a67eUXlNlCT0OP?= =?iso-8859-1?Q?Frx3TE6/2By/r8fmlpePVBfBt/IR/bExBH8clDf2UppPy/xTHysGTCa1aF?= =?iso-8859-1?Q?PMlcw1J23qscgCHciqwESOncSCH4ySgcAwsqXSjJz34rzR4M5YfJI23sIs?= =?iso-8859-1?Q?LjniL9NR5nByLtfxNWd72NDuUPATJgH4kki2EXO4bt7SyluI9RVJRo2cXk?= =?iso-8859-1?Q?C9ALRPV+TtC1mEy60+WUot0pfHu5K3C6fEGqOLi3p6tUHxdIPOBNPUuTlJ?= =?iso-8859-1?Q?du5k1mlOFA=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: g6rif89+FQ9EFTVlpDKgLQZ/XJ0XFrBemako076uWPrRuVGSvWS6J1D/P/eyWTxZDKVHyx+UV+7uwpyuuDtHnUnSozLQRZ5TtsGpIeFtDMiXa/q/zfr1yprk3PWsQUx+VC/AWPYPoYE7xMUcg/wmT2gOB9b8o4Aoan/qyi8OWkLpyipthVtUqUXmFuYbQDZ9v7U4T/X8Gq8EFQbrvZl0kW7GVbkkMdHOvJ+Uf9S0bkaWkGKykNP32FXreR2gYyhCqorFwWLyELdIL44Dz9/ZgdRCeUjuhKeRQArpGi5RnHkzhSUG2nxX9qM0C9qOZOmx2q49ISlgqZiPxyGyB5KmkA== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4746.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bfe60f29-d599-4322-5d17-08dec13aaa26 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jun 2026 06:38:03.9464 (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: q3EDG31K91eqjbdsUce6gfhun026XGNcOJFZo/gq7AnHX9z6QnSucx0zxZwjxWfMZV5Ukh4C2zqE/wB02MnAQ0R8+Mdw5kbCG1Y45bmLnCM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYNPR06MB8525 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=steven_lee@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: 1780468750402154100 Content-Type: text/plain; charset="utf-8" Instantiate the Caliptra mailbox in the AST1040 SoC and map its SRAM and CS= R windows at the guest-visible MCI addresses. Add the 4 KiB MCI aperture controlled by the AST1040 SCU CPTRA page registe= r, switch the SoC to the AST1040 SCU model, and expose a machine option tha= t links an external mailbox peer after machine initialization. Signed-off-by: Steven Lee --- include/hw/arm/aspeed_soc.h | 11 ++++++ hw/arm/aspeed_ast1040.c | 60 ++++++++++++++++++++++++++++-- hw/arm/aspeed_ast1040_evb.c | 74 ++++++++++++++++++++++++++++++++++++- 3 files changed, 140 insertions(+), 5 deletions(-) diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h index 3aac144cd4..9fad3bc082 100644 --- a/include/hw/arm/aspeed_soc.h +++ b/include/hw/arm/aspeed_soc.h @@ -46,6 +46,7 @@ #include "hw/intc/arm_gicv3.h" #include "hw/misc/aspeed_ltpi.h" #include "hw/arm/aspeed_ast1700.h" +#include "hw/misc/aspeed_cptra_mbox.h" =20 #define VBOOTROM_FILE_NAME "ast27x0_bootrom.bin" =20 @@ -165,6 +166,16 @@ struct Aspeed10x0SoCState { #define TYPE_ASPEED10X0_SOC "aspeed10x0-soc" OBJECT_DECLARE_SIMPLE_TYPE(Aspeed10x0SoCState, ASPEED10X0_SOC) =20 +struct Aspeed1040SoCState { + Aspeed10x0SoCState parent; + + AspeedCptraMboxState cptra_mbox; + MemoryRegion cptra_mci_window; +}; + +#define TYPE_ASPEED1040_SOC "ast1040-a0" +OBJECT_DECLARE_SIMPLE_TYPE(Aspeed1040SoCState, ASPEED1040_SOC) + struct AspeedSoCClass { DeviceClass parent_class; =20 diff --git a/hw/arm/aspeed_ast1040.c b/hw/arm/aspeed_ast1040.c index 8efcdad8f6..c597982bc5 100644 --- a/hw/arm/aspeed_ast1040.c +++ b/hw/arm/aspeed_ast1040.c @@ -8,12 +8,17 @@ =20 #include "qemu/osdep.h" #include "qapi/error.h" -#include "system/address-spaces.h" #include "system/system.h" #include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" +#include "hw/misc/aspeed_cptra_mbox.h" #include "hw/arm/aspeed_soc.h" =20 +#define AST1040_CPTRA_MCI_WINDOW_BASE 0x74200000 +#define AST1040_CPTRA_MCI_WINDOW_SIZE 0x1000 +#define AST1040_CPTRA_MBOX_SRAM_BASE 0x21400000 +#define AST1040_CPTRA_MBOX_CSR_BASE 0x21600000 + static const hwaddr aspeed_soc_ast1040_memmap[] =3D { [ASPEED_DEV_SRAM1] =3D 0x00000000, /* Hyper RAM */ [ASPEED_DEV_FMC] =3D 0x74000000, @@ -88,6 +93,7 @@ static qemu_irq aspeed_soc_ast1040_get_irq(AspeedSoCState= *s, int dev) =20 static void aspeed_soc_ast1040_init(Object *obj) { + Aspeed1040SoCState *a1040 =3D ASPEED1040_SOC(obj); Aspeed10x0SoCState *a =3D ASPEED10X0_SOC(obj); AspeedSoCState *s =3D ASPEED_SOC(obj); AspeedSoCClass *sc =3D ASPEED_SOC_GET_CLASS(s); @@ -96,12 +102,13 @@ static void aspeed_soc_ast1040_init(Object *obj) =20 s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); =20 - /* AST1040 uses the AST2700 SCUIO model */ - object_initialize_child(obj, "scu", &s->scu, TYPE_ASPEED_2700_SCUIO); + object_initialize_child(obj, "scu", &s->scu, TYPE_ASPEED_1040_SCU); qdev_prop_set_uint32(DEVICE(&s->scu), "silicon-rev", sc->silicon_rev); =20 object_property_add_alias(obj, "hw-strap1", OBJECT(&s->scu), "hw-strap= 1"); object_property_add_alias(obj, "hw-strap2", OBJECT(&s->scu), "hw-strap= 2"); + object_initialize_child(obj, "cptra-mbox", &a1040->cptra_mbox, + TYPE_ASPEED_CPTRA_MBOX); =20 for (i =3D 0; i < sc->uarts_num; i++) { object_initialize_child(obj, "uart[*]", &s->uart[i], TYPE_SERIAL_M= M); @@ -120,8 +127,31 @@ static void aspeed_soc_ast1040_init(Object *obj) TYPE_UNIMPLEMENTED_DEVICE); } =20 +static bool aspeed_soc_ast1040_realize_cptra_mbox(Aspeed1040SoCState *a104= 0, + Error **errp) +{ + AspeedSoCState *s =3D ASPEED_SOC(a1040); + DeviceState *mbox =3D DEVICE(&a1040->cptra_mbox); + + /* + * Caliptra is an AST1040 integrated RoT IP. The external peer is + * optional; without a peer, the mailbox registers remain present and + * EXECUTE completes with CMD_FAILURE. + */ + if (!sysbus_realize(SYS_BUS_DEVICE(mbox), errp)) { + return false; + } + + aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(mbox), 0, + AST1040_CPTRA_MBOX_SRAM_BASE); + aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(mbox), 1, + AST1040_CPTRA_MBOX_CSR_BASE); + return true; +} + static void aspeed_soc_ast1040_realize(DeviceState *dev_soc, Error **errp) { + Aspeed1040SoCState *a1040 =3D ASPEED1040_SOC(dev_soc); Aspeed10x0SoCState *a =3D ASPEED10X0_SOC(dev_soc); AspeedSoCState *s =3D ASPEED_SOC(dev_soc); AspeedSoCClass *sc =3D ASPEED_SOC_GET_CLASS(s); @@ -171,6 +201,27 @@ static void aspeed_soc_ast1040_realize(DeviceState *de= v_soc, Error **errp) memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SRAM1], &s->sram[1]); =20 + if (!aspeed_soc_ast1040_realize_cptra_mbox(a1040, errp)) { + return; + } + + /* + * The Caliptra MCI aperture is a 4 KiB alias whose target is selected= by + * AST1040_SCU_CPTRA_PAGE_REG0. Firmware commonly switches it between + * mailbox SRAM (0x21400000) and mailbox CSR (0x21600000), then access= es + * the selected page through 0x74200000. + */ + memory_region_init_alias(&a1040->cptra_mci_window, OBJECT(s), + "aspeed.ast1040.cptra-mci-window", s->memory, + 0, AST1040_CPTRA_MCI_WINDOW_SIZE); + memory_region_add_subregion(s->memory, AST1040_CPTRA_MCI_WINDOW_BASE, + &a1040->cptra_mci_window); + /* The SCU drives the aperture's target offset via SCU_CPTRA_PAGE_REG0= . */ + object_property_set_link(OBJECT(&s->scu), "cptra-page-window", + OBJECT(&a1040->cptra_mci_window), &error_abor= t); + object_property_set_uint(OBJECT(&s->scu), "cptra-page-window-base", + AST1040_CPTRA_MCI_WINDOW_BASE, &error_abort); + /* SCU */ if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) { return; @@ -244,8 +295,9 @@ static void aspeed_soc_ast1040_class_init(ObjectClass *= klass, const void *data) =20 static const TypeInfo aspeed_soc_ast1040_types[] =3D { { - .name =3D "ast1040-a0", + .name =3D TYPE_ASPEED1040_SOC, .parent =3D TYPE_ASPEED10X0_SOC, + .instance_size =3D sizeof(Aspeed1040SoCState), .instance_init =3D aspeed_soc_ast1040_init, .class_init =3D aspeed_soc_ast1040_class_init, } diff --git a/hw/arm/aspeed_ast1040_evb.c b/hw/arm/aspeed_ast1040_evb.c index 1d9b55247f..eb325a1095 100644 --- a/hw/arm/aspeed_ast1040_evb.c +++ b/hw/arm/aspeed_ast1040_evb.c @@ -8,17 +8,59 @@ =20 #include "qemu/osdep.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "hw/arm/aspeed.h" #include "hw/arm/aspeed_soc.h" #include "hw/core/qdev-clock.h" +#include "hw/misc/aspeed_cptra_mbox.h" #include "system/system.h" =20 #define AST1040_INTERNAL_FLASH_SIZE (4 * MiB) /* Main SYSCLK frequency in Hz (400MHz) */ #define SYSCLK_FRQ 400000000ULL =20 +#define TYPE_AST1040_EVB_MACHINE MACHINE_TYPE_NAME("ast1040-evb") +OBJECT_DECLARE_SIMPLE_TYPE(Ast1040EvbMachineState, AST1040_EVB_MACHINE) + +struct Ast1040EvbMachineState { + AspeedMachineState parent_obj; + + char *cptra_peer; + Notifier machine_done; +}; + +static void aspeed_bic_machine_done(Notifier *notifier, void *data) +{ + Ast1040EvbMachineState *m =3D container_of(notifier, + Ast1040EvbMachineState, + machine_done); + AspeedMachineState *bmc =3D ASPEED_MACHINE(m); + Aspeed1040SoCState *a1040 =3D ASPEED1040_SOC(bmc->soc); + bool ambiguous =3D false; + Object *peer; + Error *err =3D NULL; + + if (!m->cptra_peer) { + return; + } + + peer =3D object_resolve_path_type(m->cptra_peer, TYPE_CPTRA_MBOX_PEER, + &ambiguous); + if (!peer || ambiguous) { + error_report("cptra-peer: peer '%s' not found%s", + m->cptra_peer, ambiguous ? " (ambiguous)" : ""); + exit(1); + } + + if (!aspeed_cptra_mbox_set_peer(&a1040->cptra_mbox, + CPTRA_MBOX_PEER(peer), &err)) { + error_report_err(err); + exit(1); + } +} + static void aspeed_bic_machine_init(MachineState *machine) { AspeedMachineState *bmc =3D ASPEED_MACHINE(machine); @@ -38,12 +80,35 @@ static void aspeed_bic_machine_init(MachineState *machi= ne) aspeed_connect_serial_hds_to_uarts(bmc); qdev_realize(DEVICE(bmc->soc), NULL, &error_abort); =20 + if (AST1040_EVB_MACHINE(machine)->cptra_peer) { + AST1040_EVB_MACHINE(machine)->machine_done.notify =3D + aspeed_bic_machine_done; + qemu_add_machine_init_done_notifier( + &AST1040_EVB_MACHINE(machine)->machine_done); + } + armv7m_load_kernel(ARM_CPU(first_cpu), machine->kernel_filename, 0, AST1040_INTERNAL_FLASH_SIZE); } =20 +static char *aspeed_bic_get_cptra_peer(Object *obj, Error **errp) +{ + Ast1040EvbMachineState *m =3D AST1040_EVB_MACHINE(obj); + + return g_strdup(m->cptra_peer); +} + +static void aspeed_bic_set_cptra_peer(Object *obj, const char *value, + Error **errp) +{ + Ast1040EvbMachineState *m =3D AST1040_EVB_MACHINE(obj); + + g_free(m->cptra_peer); + m->cptra_peer =3D g_strdup(value); +} + static void aspeed_machine_ast1040_evb_class_init(ObjectClass *oc, const void *data) { @@ -59,12 +124,19 @@ static void aspeed_machine_ast1040_evb_class_init(Obje= ctClass *oc, amc->macs_mask =3D 0; amc->uart_default =3D ASPEED_DEV_UART12; aspeed_machine_class_init_cpus_defaults(mc); + + object_class_property_add_str(oc, "cptra-peer", + aspeed_bic_get_cptra_peer, + aspeed_bic_set_cptra_peer); + object_class_property_set_description(oc, "cptra-peer", + "Caliptra mailbox peer object id"); } =20 static const TypeInfo aspeed_ast1040_evb_types[] =3D { { - .name =3D MACHINE_TYPE_NAME("ast1040-evb"), + .name =3D TYPE_AST1040_EVB_MACHINE, .parent =3D TYPE_ASPEED_MACHINE, + .instance_size =3D sizeof(Ast1040EvbMachineState), .class_init =3D aspeed_machine_ast1040_evb_class_init, .interfaces =3D arm_machine_interfaces, } --=20 2.43.0 From nobody Mon Jun 8 06:38:44 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=1780468783; cv=pass; d=zohomail.com; s=zohoarc; b=oFcs176D5IfCGPbOI3r+9i1GnYDzv9+68Y3fcEf2E2E0XFn+3m0ipZ7sW38k6YwrfwO+nyn1g/frQy77SjqarRO3wjcdKIps15QLA0gabAafXIINrorssyi+zssu/rnSpkJQoZ5oPF4gbK6a0zIWR8WYnikzB8Lcy/huMD/JV8k= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780468783; 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=SHvXAtoDpqiLRdefaANbWrlPKxnjnVGo7wGi+Hd6peM=; b=iQhZYZFXwFwharoHa+EUjQuHVY/NMRKqdCRyZTlr38KW4IoAJkbAcSQ9b9kqD4hHJSBG3r8Y7XUQMb2vuaZlerJK1/SY8hWBU/LO+SwcqJ61ndo/dlOwtqo/aw1kXNOx+06RhhCIy8wyfCbBTxD/P3W2kL70eLYyCdidKNdhONo= 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 1780468783741516.0148425299567; Tue, 2 Jun 2026 23:39:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUfF6-0000A6-M0; Wed, 03 Jun 2026 02:38:20 -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 1wUfF5-00009Y-4y; Wed, 03 Jun 2026 02:38:19 -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 1wUfF2-0008Ja-PD; Wed, 03 Jun 2026 02:38:18 -0400 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com (2603:1096:400:129::9) by TYNPR06MB8525.apcprd06.prod.outlook.com (2603:1096:405:3d0::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 06:38:05 +0000 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995]) by TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995%6]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 06:38:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=igtbXG5T9t3tieGTx0u6iHwljYiZwaPon5MvwCySzMZGxoy+dQL3zuRCrjmSyvwZCgCfNn6KT3ttLraJgk4J0PoJA/bfIwQ7fUk8YBeqDPu/vLKNDiyQbvf2FUxNn4KiqBBZTC/ZRtxtj3/soS/AXz4BXAqIA+Myog0qlbsFRp0XMgip9xLnFkYOJipdDwdOZGCXDjd63d4jHatK4BCsSrpL0DWWrLcU9PjD0/nu5NsvX+sn2WcLSXUVGkGz9hq6ebEDmDoHcx6JtvdLClUKYdtTFo18WNFf2aZ6D7mXdTg2HZy1DwvdQTNL9dL282mjHRip5UPF6fsgY6HoqblHNw== 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=SHvXAtoDpqiLRdefaANbWrlPKxnjnVGo7wGi+Hd6peM=; b=MXLVqofHhcOydjf+TdgsX1Wfn875vbz6FRhBScyIVXZBF7vzCMqB5a4XxYETZe7sm16XUiL+9q916f/cJur4FQ8dZpIGgxL1LJ99zJaEqzsdrPQ3s5nhMXBf9EOK5MVHbpxYsf+BWJNVdFvJL6VDkHd3gejiSDPozzCW/d/gWILcfRbPUkMlS0CFPP6+2MLx9NizH3BKwTuHqMiUyOzGf/0iO6ZRZT0n4y1/5ZFVom3zVCpcQn0eA6sRyd1EdDE9hPFFLEFvuX8yb1O2nyO40D02NoDIvEUAIneVqLVFJJV9V/TLQ733k+vFdi8Z8zYY8kE2n3pPdtHfCGqdFZFcXg== 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=SHvXAtoDpqiLRdefaANbWrlPKxnjnVGo7wGi+Hd6peM=; b=IAqL+W1POv9gAYOgKKi2EuIcqtk/9FlzRMtSZ+Ng+ipuiBVDylx4cpyAXxil8pKTYwdvt32r16SiLrt4zeiW1ScB5u7diVgLtinPI9Bat1uUzZcPoc4XDi0yXGL0jcQ84HQTRXVDe7Q0O3/1PmRR5cOnTUOCtNVJZOuer2PLzJg8/ZnCMi6AnfhQIfFdIAiLASNznlnLPOF3vhisMCFhibGyh/s3Gspgpm7cs4ibl+GjDX5Nl4ewErZ/iOt2jEiKK3DA76Wfk3N2gVyujZ3wGopkcl/u8tirmyzgPcplSywWM/0wkyav5B7I6buV8+megFJXV5u0S7PsjHZMAntMKw== From: Steven Lee To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Kane Chen , Andrew Jeffery , Joel Stanley , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:All patches CC here" , "open list:ASPEED BMCs" CC: Troy Lee , "longzl2@lenovo.com" , Yunlin Tang Subject: [RESEND PATCH 5/6] tests/qtest: Add ASPEED Caliptra mailbox test Thread-Topic: [RESEND PATCH 5/6] tests/qtest: Add ASPEED Caliptra mailbox test Thread-Index: AQHc8yOIR74D0z49m0Sx9lMadPVCRw== Date: Wed, 3 Jun 2026 06:38:05 +0000 Message-ID: <20260603063756.1481524-6-steven_lee@aspeedtech.com> References: <20260603063756.1481524-1-steven_lee@aspeedtech.com> In-Reply-To: <20260603063756.1481524-1-steven_lee@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: TYZPR06MB4746:EE_|TYNPR06MB8525:EE_ x-ms-office365-filtering-correlation-id: a0ab7bfe-d49c-4467-e958-08dec13aaaef x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|7416014|921020|6133799003|3023799007|18002099003|22082099003|56012099006|38070700021; x-microsoft-antispam-message-info: lKtixkLx3NRqJpk2uMqFBHM9gQMINczkYTcRas71gXrJ/3hhY/pmN1RZN22imWgIJuFBMWwy4Uw5gGBSldeC4TtmjxLEDHriOXZwrZmRbKLqkjxuuWt0lzcnoQHxSFnSsjg7J/KX6rObZhxG0jUOrq2H+jPSESHjwDKqeTVVEgJvIV+i0r8D6Jif9DOep+g7EwnVCDjAAk0UmtMKgotfEDBtooz62FqWaLRgpwWMAS350Vlx5FjUgFeIp8WlNGQ9OGaXuHtHs+HPpevpzWJp+J7VUoS2QEmrM5Uu/Yr4RvG4HJonnb7yZQT5Z6TEnyTjBmuAH5tl+g7LCVfW2zzthcg5v+ivXP801eS2oNJ/zsGX0N39m8MoLDvVFUx0YLatJ7Zu1Yuf945IFxnSMKr78e69IsOe9Tv7aIuZJnxKMN32TGtIZe9+kPt41MBuKJVlLvgdpMR/DCf11IGm2xud63w1sOFxm85jk+5irqzPyQIM+bkEhlD97AqIROp3BjNKbtnTiCEBBnE6po1nUXMOJ+zJabEqO5ChVvLnfy1a9U15qvSUC21VGdGlDWmJQq+eJ37OCCEMeisSGiEV4uBTkTsBf964twj3M91MuhlACIeUEoV/22s4aSZ63YEqzQWgrRxzazPYZ+gpTn00Y/zN5iAcoiDsZwE4qWiGeqRzrx+EKurXSsbL5+Q3dNUlh94HLqqEOkwDcgRAM93UeHCMvr53Rrx/23waV2B49g+qoOZah7XX8Ab3Poeap5v1cg3GA+0nGk/+O79Wd9kVBsGkUA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4746.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(7416014)(921020)(6133799003)(3023799007)(18002099003)(22082099003)(56012099006)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?v3CyxcNxQwxxSH4mP7ER3vW/EvGt72DS65ayEYCBp1gWEsLhWF/3pHM8bF?= =?iso-8859-1?Q?2utIqBG6RzQ6+luqXOOwmLiiWYFRI119BU2SPQe80eqJazTDVz30Th06Vp?= =?iso-8859-1?Q?Pimkxf/P+2Agjk7T9Zc5MZQYlk1hzE2g+D6yfnWhn/MYRVJv29yn3Oy0lH?= =?iso-8859-1?Q?yQtib1tkb8FABNPktOBwhEwOrtk7oH88cIjYCms6hLo3QE5FPalYA1tIZs?= =?iso-8859-1?Q?BxzUx1EGs5BL5Qnr7EtRl2rtUJcRKtfjhf4ZJRcHMx7Gighzq20QtP+NGA?= =?iso-8859-1?Q?GyrrGeIfzR5JVD9+0AutLiyIFtTIuyga5eddYILtxXdEnTwTYoutLOWgva?= =?iso-8859-1?Q?X3XDgbDSe++OPDPzrlcmz8Mcwf+x/jTQpjPSOizu3yNRb+RSYWrW9OsnkU?= =?iso-8859-1?Q?/9ajTdiYHA+rYFhExJRtEKf9Kzf2nXuNpSrVT4JJwcylQN5IsbSHAoBDg6?= =?iso-8859-1?Q?MGJHpW5v4rbSv4z+qt3SldSOz1XCxNoJABVTOpSqPdL6SLmNVbPfNO1FHx?= =?iso-8859-1?Q?duH93wAPeXh6cgxrTtgrZ+56SktdaL38HJjzGlaHJF2R/JNme2df5QBMUO?= =?iso-8859-1?Q?Fd4SWqVQWWZ+StQDzfeDzzVfyYmTd1E2biZF2fLpk6BK0shBouX5urbWHo?= =?iso-8859-1?Q?WXS05L0FE/P2YD2XrrAEq6Jpa127prmxnjhSV3TkKrB1MmWamgFDS2wCYx?= =?iso-8859-1?Q?eJNCeXASmuWIwRjluLUEzdpab4kug/x1eB4EbAaNv3iPIm199ACV7aW898?= =?iso-8859-1?Q?f87SeoynuTyKYp5xzL206iB2HcH9xKCQx9mhcatsTXtKlt0M14OXggwN+d?= =?iso-8859-1?Q?+VsVpjhRTbv2PH5DIxXUFlKKJCcs18lXGyKDDj2DT2d75LHR2j6k2ChToS?= =?iso-8859-1?Q?O8K0gKHFNuKl1et3/1MI87WqGjGMt3Lo2pTBJPG4SCjfc+IU9ILeXvoetM?= =?iso-8859-1?Q?yljPiuztyqxNMLmahBgNofiwc+bKqU30iohV49YdQouAcavckuX3BSrGoF?= =?iso-8859-1?Q?1GP4BaR3AEws+93BeyszhJWywjTEdMlmMV6RnS9EOJ7BOrnChrEt4G142Z?= =?iso-8859-1?Q?r4yxOjzKEQFkDTdn2/qvWtK5KG+F5FE+RnK2POLTusepX/uXPER86XWGFy?= =?iso-8859-1?Q?e5NEv4jox8uXcARFc9+un8ccwY3ECzyW/s+mhbQA3jEfvpOE/qtR5kQ0/Y?= =?iso-8859-1?Q?9pkUWI8T/C3Ey0uGoam9BX5TNpgPGNRyQ/b+lmBBeSb6qCfkC+8iqy9nT8?= =?iso-8859-1?Q?+TcnbghtPlJrful2fDRQ4qJ9V8+2PpjNIE9aKbiZxglzqddWzDBxvyhSnV?= =?iso-8859-1?Q?oqwvL3IRRtuwqKm6EPq1n3ci6w65+ieHRrCmg4rCk0iATME4eMUC0BeH3Q?= =?iso-8859-1?Q?yKQsi/+fmcpZdXFKPQLBcuyJUXFqBEHKG9BOf7ss34tYp7WTTbd2dR/Bos?= =?iso-8859-1?Q?P7UHmAJfHUvXws7jyJS3fyBnMCCnSecnlP024/EkPidGzzrD4VFqnxgP54?= =?iso-8859-1?Q?gELLEjYtew6DwiqIq8tzahw4rzW1SJZXOYVkWCIHRJLeHVOMqWiJ8IMZzB?= =?iso-8859-1?Q?AQ8828cqIPeLJ7FvVb0bjoKMyEe26kEOYPLMbqV8v+/zSykEMiqX6I+CMF?= =?iso-8859-1?Q?noNpnHebJZbybH3xK1tWC4HCmrQ5SYB4Lj1Wm5Yenes9Ijf9P0C4dYySi6?= =?iso-8859-1?Q?shQFESyuY8AqBIdzchC7zBtN5zXcmJmm2tPG2juJBSjPbNZwGBZlRncOkL?= =?iso-8859-1?Q?V1y2P9IASdbfcT9u3bwGrz2IrvugI6k/4LgGeTNkagjWVFO427e3/PttBJ?= =?iso-8859-1?Q?lBoQzlOqhA=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: jrjUVySDpNg68ia/3ls0/78+vBN2CqODhSrEju6ZF7p8SVDtqlrEZEuuxk/9OKLQXW8FYmf/uyeN5I97MwGUOtQR7DHRhbTcdnK308kV3DJP329o8haeLkYBUttSCHrHE4d8KiyAHS7bJTG4WWCVUnwzoXvMZxAvqhk/dV6r56X6tsWoGufCdrG/863cbO2AySz4ZNm8476oF1NliwR4IXs8b6g6MybUTbPrmjPIOSQ0Tl6s4jIsozmcUZ3UgJ3E3cuvCNyd1ik+S03iIeo25EmkA17uLIeisfqus/Ik+Q5a3pDU/e1sAQw+em+JMmB/LL+4xPvGjw7ERV1DOr13RA== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4746.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a0ab7bfe-d49c-4467-e958-08dec13aaaef X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jun 2026 06:38:05.2908 (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: 5zFgEplLYsHfdeG6MKxAT18C2ys205FNyBUcqrpquLEwsyuVRm6L0TT/aD8ml6T+GaJEByWwsS4ZpGKcHxwASD77SCDOfiP58ZZbmgY6Fo4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYNPR06MB8525 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=steven_lee@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: 1780468786035154100 Content-Type: text/plain; charset="utf-8" Cover the AST1040 Caliptra mailbox execute flow through the external peer p= rotocol and verify that the SCU CPTRA page register remaps the MCI aperture= between CSR and SRAM pages. Signed-off-by: Steven Lee --- tests/qtest/aspeed_cptra_mbox-test.c | 223 +++++++++++++++++++++++++++ tests/qtest/meson.build | 3 +- 2 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 tests/qtest/aspeed_cptra_mbox-test.c diff --git a/tests/qtest/aspeed_cptra_mbox-test.c b/tests/qtest/aspeed_cptr= a_mbox-test.c new file mode 100644 index 0000000000..4d0e1682da --- /dev/null +++ b/tests/qtest/aspeed_cptra_mbox-test.c @@ -0,0 +1,223 @@ +/* + * QTest for the ASPEED Caliptra mailbox on the ast1040-evb machine. + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "libqtest-single.h" +#include "qemu/sockets.h" + +/* AST1040 guest-visible mailbox bases. */ +#define SRAM_BASE 0x21400000ULL +#define CSR_BASE 0x21600000ULL + +#define CSR_LOCK 0x000 +#define CSR_USER 0x004 +#define CSR_CMD 0x010 +#define CSR_DLEN 0x014 +#define CSR_EXECUTE 0x018 +#define CSR_CMD_STATUS 0x020 + +#define STATUS_BUSY 0 +#define STATUS_COMPLETE 2 +#define STATUS_CMD_FAILURE 3 + +/* SCU CPTRA page-select register (SCU base 0x74C02000 + 0x120). */ +#define SCU_CPTRA_PAGE_REG0 0x74C02120ULL +/* MCI remap aperture. */ +#define MCI_WINDOW 0x74200000ULL + +/* Wire protocol. */ +#define PROTO_MAGIC 0x4D424F58u +#define PROTO_VERSION 1u +#define CMD_EXECUTE 1u +#define CMD_RESPONSE 2u + +static int peer_lfd =3D -1; +static int peer_fd =3D -1; + +static void peer_read(void *buf, size_t len) +{ + size_t off =3D 0; + + while (off < len) { + ssize_t r =3D read(peer_fd, (uint8_t *)buf + off, len - off); + g_assert_cmpint(r, >, 0); + off +=3D r; + } +} + +static void peer_write(const void *buf, size_t len) +{ + size_t off =3D 0; + + while (off < len) { + ssize_t w =3D write(peer_fd, (const uint8_t *)buf + off, len - off= ); + g_assert_cmpint(w, >, 0); + off +=3D w; + } +} + +static uint32_t ld32(const uint8_t *p) +{ + return p[0] | (p[1] << 8) | (p[2] << 16) | ((uint32_t)p[3] << 24); +} + +static void st32(uint8_t *p, uint32_t v) +{ + p[0] =3D v; p[1] =3D v >> 8; p[2] =3D v >> 16; p[3] =3D v >> 24; +} + +/* + * Service one MBOX_EXECUTE: read the request, optionally check it, then r= eply + * with MBOX_RESPONSE carrying @rsp_status and @rsp_data. + */ +static void peer_serve_execute(uint32_t expect_cmd, uint32_t expect_dlen, + uint32_t rsp_status, + const uint8_t *rsp_data, uint32_t rsp_dlen) +{ + uint8_t hdr[12]; + uint32_t plen, cmd, dlen; + g_autofree uint8_t *payload =3D NULL; + uint32_t rsp_padded =3D (rsp_dlen + 3) & ~3u; + uint32_t rsp_plen =3D 8 + rsp_padded; + g_autofree uint8_t *rsp =3D g_malloc0(12 + rsp_plen); + + peer_read(hdr, sizeof(hdr)); + g_assert_cmpuint(ld32(hdr), =3D=3D, PROTO_MAGIC); + g_assert_cmpuint(hdr[4] | (hdr[5] << 8), =3D=3D, PROTO_VERSION); + g_assert_cmpuint(hdr[6] | (hdr[7] << 8), =3D=3D, CMD_EXECUTE); + plen =3D ld32(hdr + 8); + g_assert_cmpuint(plen, >=3D, 8); + + payload =3D g_malloc(plen); + peer_read(payload, plen); + cmd =3D ld32(payload); + dlen =3D ld32(payload + 4); + g_assert_cmpuint(cmd, =3D=3D, expect_cmd); + g_assert_cmpuint(dlen, =3D=3D, expect_dlen); + + st32(rsp, PROTO_MAGIC); + rsp[4] =3D PROTO_VERSION; rsp[5] =3D 0; + rsp[6] =3D CMD_RESPONSE; rsp[7] =3D 0; + st32(rsp + 8, rsp_plen); + st32(rsp + 12, rsp_status); + st32(rsp + 16, rsp_dlen); + if (rsp_dlen) { + memcpy(rsp + 20, rsp_data, rsp_dlen); + } + peer_write(rsp, 12 + rsp_plen); +} + +static uint32_t poll_cmd_status(void) +{ + uint32_t s =3D STATUS_BUSY; + int tries =3D 1000; + + while (tries--) { + s =3D qtest_readl(global_qtest, CSR_BASE + CSR_CMD_STATUS); + if (s !=3D STATUS_BUSY) { + break; + } + } + return s; +} + +/* + * Realistic mailbox transaction: acquire the lock, run an EXECUTE roundtr= ip + * against the peer, verify the response lands in SRAM, then release. + */ +static void test_execute(void) +{ + static const uint8_t resp[] =3D { + 0x11, 0xf9, 0xff, 0xff, /* checksum */ + 0x00, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, /* inner dlen =3D 20 */ + 'C', 'a', 'l', 'i', 'p', 't', 'r', 'a', + '_', 'C', 'o', 'r', 'e', '_', 'v', '2', '.', '0', '.', '0', + }; + uint32_t status; + + /* + * Acquire: first read returns 0, USER reflects the SoC agent, busy af= ter. + */ + g_assert_cmpuint(qtest_readl(global_qtest, CSR_BASE + CSR_LOCK), =3D= =3D, 0); + g_assert_cmpuint(qtest_readl(global_qtest, CSR_BASE + CSR_USER), =3D= =3D, 1); + g_assert_cmpuint(qtest_readl(global_qtest, CSR_BASE + CSR_LOCK), =3D= =3D, 1); + + qtest_writel(global_qtest, SRAM_BASE + 0, 0xfffffec0); + qtest_writel(global_qtest, CSR_BASE + CSR_CMD, 0x4d465756); + qtest_writel(global_qtest, CSR_BASE + CSR_DLEN, 8); + qtest_writel(global_qtest, CSR_BASE + CSR_EXECUTE, 1); + + peer_serve_execute(0x4d465756, 8, STATUS_COMPLETE, resp, sizeof(resp)); + + status =3D poll_cmd_status(); + g_assert_cmpuint(status, =3D=3D, STATUS_COMPLETE); + g_assert_cmpuint(qtest_readl(global_qtest, CSR_BASE + CSR_DLEN), + =3D=3D, sizeof(resp)); + g_assert_cmpuint(qtest_readl(global_qtest, SRAM_BASE + 0), =3D=3D, 0xf= ffff911); + g_assert_cmpuint(qtest_readl(global_qtest, SRAM_BASE + 8), =3D=3D, 0x1= 4); + g_assert_cmpuint(qtest_readl(global_qtest, SRAM_BASE + 12), =3D=3D, 0x= 696c6143); + + /* Completing the transaction (EXECUTE 1->0) releases the lock. */ + qtest_writel(global_qtest, CSR_BASE + CSR_EXECUTE, 0); + g_assert_cmpuint(qtest_readl(global_qtest, CSR_BASE + CSR_LOCK), =3D= =3D, 0); + qtest_writel(global_qtest, CSR_BASE + CSR_EXECUTE, 0); +} + +/* SCU CPTRA_PAGE_REG0 selects the target page seen through the MCI window= . */ +static void test_scu_remap(void) +{ + /* Window pointed at the CSR page exposes the CMD register. */ + qtest_writel(global_qtest, CSR_BASE + CSR_CMD, 0xdeadbeef); + qtest_writel(global_qtest, SCU_CPTRA_PAGE_REG0, CSR_BASE); + g_assert_cmpuint(qtest_readl(global_qtest, MCI_WINDOW + CSR_CMD), + =3D=3D, 0xdeadbeef); + + /* Re-point at the SRAM page. */ + qtest_writel(global_qtest, SRAM_BASE + 0, 0x12345678); + qtest_writel(global_qtest, SCU_CPTRA_PAGE_REG0, SRAM_BASE); + g_assert_cmpuint(qtest_readl(global_qtest, MCI_WINDOW + 0), + =3D=3D, 0x12345678); +} + +int main(int argc, char **argv) +{ + g_autofree char *sock_path =3D NULL; + g_autofree char *cmdline =3D NULL; + int ret; + + g_test_init(&argc, &argv, NULL); + + sock_path =3D g_strdup_printf("%s/cptra-mbox-%u.sock", + g_get_tmp_dir(), getpid()); + unlink(sock_path); + peer_lfd =3D qtest_socket_server(sock_path); + + cmdline =3D g_strdup_printf( + "-machine ast1040-evb,cptra-peer=3Dpeer0 " + "-chardev socket,id=3Dcptra0,path=3D%s " + "-device cptra-mbox-peer-extern,id=3Dpeer0,chardev=3Dcptra0", sock= _path); + qtest_start(cmdline); + + peer_fd =3D accept(peer_lfd, NULL, NULL); + g_assert_cmpint(peer_fd, >=3D, 0); + + qtest_add_func("/cptra-mbox/execute", test_execute); + qtest_add_func("/cptra-mbox/scu-remap", test_scu_remap); + + ret =3D g_test_run(); + + qtest_end(); + if (peer_fd >=3D 0) { + close(peer_fd); + } + close(peer_lfd); + unlink(sock_path); + + return ret; +} diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 728dde54b3..c50da850f7 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -219,7 +219,8 @@ qtests_aspeed =3D \ ['aspeed_gpio-test', 'aspeed_hace-test', 'aspeed_scu-test', - 'aspeed_smc-test'] + 'aspeed_smc-test', + 'aspeed_cptra_mbox-test'] qtests_aspeed64 =3D \ ['ast2700-gpio-test', 'ast2700-hace-test', --=20 2.43.0 From nobody Mon Jun 8 06:38:44 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=1780468748; cv=pass; d=zohomail.com; s=zohoarc; b=ZgvPK57wYLfuTChFk8lShE3QOA8t0R0W3BnjNKqtD6Hj9r2NcWu8De5L6ORQjAC3iz7TqFLoSg7ubGzEdoxLPSeh9iqQhGudo5n1762O18+EMkjDB3isgD5ZVa/O/dweQsE9ddlfnke7wYw6EF2m2vWaV8wwZs/pLwcwCEXcs0c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780468748; 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=5NgAKbHhIGYOKlNWxbnpc77BWpuspkxp7Io2YLfQu9k=; b=AgvofvnU01WWU7nyZWtJ3hs1dwa2+aKjKArghywYfTTY3YAt7hX6H9zEFIPaWuuP6zSlDlvWLYp3MrAUr+ow3UQc5rooqECKus3/y+j9W0tCOz8lFuVmc0ySvZfaGnUzG6D3K2uGOpCDFwQYFVBb1UbeDavD+UTmI5rmjSQ/D6o= 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 1780468748306830.3856768861192; Tue, 2 Jun 2026 23:39:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUfF2-00006p-3v; Wed, 03 Jun 2026 02:38:16 -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 1wUfEz-00006H-Ob; Wed, 03 Jun 2026 02:38:13 -0400 Received: from mail-japanwestazlp170120003.outbound.protection.outlook.com ([2a01:111:f403:c406::3] helo=OS8PR02CU002.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 1wUfEx-0008Je-UX; Wed, 03 Jun 2026 02:38:13 -0400 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com (2603:1096:400:129::9) by SEZPR06MB6572.apcprd06.prod.outlook.com (2603:1096:101:184::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 06:38:06 +0000 Received: from TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995]) by TYZPR06MB4746.apcprd06.prod.outlook.com ([fe80::b6d5:b318:c4a6:d995%6]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 06:38:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=B4gcc+rX+DiKcWDO46K5euUqVbcrmxpFUu+88Z1bRSrLDJlfW6FD352FzhijF6DeT8jRw2t8FtYksNjS8h20sxbWdSCFAwyV2G4O75SQ7k7ed8mAdfmn4hYKhFiScw9GBeCFXUnVHBXo+haMeaSN4esKwORdAQb5gpuvPT2fb3cMe8yYD3PplrAUTh/V98lyBl31qE+tGL5rX1qaIC+mzdIw1RssaVPe8+OKY5pyp+AZ7AUudctzKEzKegJpl69LN7wYsGBKQObixq2SH7YJF5ue0rCKyI0yBL2G/eBj/Kl26bD7d6oTvhNXaYb99Qfi1bEGXxPKUEbq32vMKZAkFw== 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=5NgAKbHhIGYOKlNWxbnpc77BWpuspkxp7Io2YLfQu9k=; b=N3T9eW+9nEiNDDKSbYdSEb2+XpyUF1zZfN1nAsDCo1XYxzsvCdHgrXDSR1HknM2YcPFMLFO4uqTzFnWrGGQHVmbo7iYEpG/pfZgGxPdojb4P35kXxD3foZpCjud2aXkx2gbljeVIeN27m2yX3wLbkE9D1w258Ffy5wTdb4lxwb3JBguHLRgkGneqbIfoj1i7BytRaHZH8GQ6H14FUfYMh6rG3OCq/zDmZCRxk4JuPblVwwR1oxL12PnzqBK5SXHUN7iE0aR9iMr+poBEqsHRlC23tBIKkFMqphnMnnXCM1TvN5ckZ/8H1nFXJqwCkCoPtDznSexiJJnT/MCr/EudgQ== 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=5NgAKbHhIGYOKlNWxbnpc77BWpuspkxp7Io2YLfQu9k=; b=DSZMvSWE26b3i4IqgN9mNCQ83fu+K27seQO3H5+kwJCfNLXfnLmrW/7AaeRZdI1TxWCCKURR+xdm3rxGo/Y1mv4AbSpzAd4Zek/34OEXU9/hXW1KQs8noLRV2N6d+3F6kZKcztsoQEIJlUDYrZszIuiMCHfa8bQFGy/DUnCZR1Z04UmDTXE/zWUsgI5Cu/8HtWq6m76hL3r9f71uOzp+rPYzgekSH7bpgmr/DNk3nJd+K8BR+2GJmyJitb5l/3BwCfeLvNCt2uMNwMKgq0GCYsWC6ZxkLIZBMnhDKfKNo63smpD6z9w1x0Rr5IvUEyEzL9VMm42wJnbj59hu98jYHw== From: Steven Lee To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Kane Chen , Andrew Jeffery , Joel Stanley , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "open list:All patches CC here" , "open list:ASPEED BMCs" CC: Troy Lee , "longzl2@lenovo.com" , Yunlin Tang Subject: [RESEND PATCH 6/6] docs/system/arm: Document AST1040 Caliptra mailbox Thread-Topic: [RESEND PATCH 6/6] docs/system/arm: Document AST1040 Caliptra mailbox Thread-Index: AQHc8yOJiD0gPjj7QE+aUl73xW3lVw== Date: Wed, 3 Jun 2026 06:38:06 +0000 Message-ID: <20260603063756.1481524-7-steven_lee@aspeedtech.com> References: <20260603063756.1481524-1-steven_lee@aspeedtech.com> In-Reply-To: <20260603063756.1481524-1-steven_lee@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: TYZPR06MB4746:EE_|SEZPR06MB6572:EE_ x-ms-office365-filtering-correlation-id: 2fec0f8d-be7b-4cdc-bb7f-08dec13aabb5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|7416014|1800799024|376014|366016|6133799003|18002099003|22082099003|3023799007|56012099006|38070700021|921020; x-microsoft-antispam-message-info: cVXjpdW/R5VhpyhAOfej/LuyDYw+60GD8kUONuQzItvYU7quNZSoFrLu+rMn3Hs81VxzYssikXBQlJHV2CsA783XgTz4kUxDWVakFz2+5TO+KQ3Mv+3y3oLPNcouZBNephZbYsDapIDakV5pefUFFkfCSzz6ez1BDPgYpuSeS+FrW5QLc2a0gz1mHawEPMVEdGvrEvnqQGT89/xomKiZTcdxpQf8rsGx3aE/oHnuSOSHp2od4Ev4izJS3OKEcEIA0931wGbd+mBvtovxT2/QWXi2hkrxR5zx26+HJi8/U5A3JPro0Qhqdevh6Qg+Ix2X6CNByrnTZ2WF8E8fzJ1ZYZ8mwVNUyroWmEgNwB6SEd47vxLNdBqzPeFm1RpmWLRbcCvawzLtXoDu3hFjdf5axDWSlaruKvq8f4/1wvP9IQyWwydmIHfbhh2I2M73DhjjLgnxqYP9RWcSgzoZSkFF2z5delAY1rVWMK7W/Vq11NdZnOekXSuWnoWixrpvgcGWZVW+7SkXz5XHAmmREVLbXYR0ljaSkvO+D5z6klLZqEZsiSL8LFaIs5VIjCbK0Z3iBCkMKCzjwqiIw7d9q/xkZIV7VFP3lm6HjNq4hqHPAVH6xeQXqgH63YGcOEjMmZn5tYXS7jydmk6UamXvrTCXytrkVK5wrgZ009X8nMVbUSI8dJ9JlXs1+l4wnispLwWX/A3CvrkQ0KtBF3fGMCxvDW2Qc33AyxHNjgBFAGTYGHwLKyLKTLByISTFCvMjOYCp3Fh7lYKM2kPUgfa5UlGt9g== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB4746.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(1800799024)(376014)(366016)(6133799003)(18002099003)(22082099003)(3023799007)(56012099006)(38070700021)(921020); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?qEDLEZ8UbOWVM0sTaS8vIBoBP2EYdD1jxAZf5nWFKf2uKwW46nvaOPHOYc?= =?iso-8859-1?Q?NgLA+nTNCtKxta/+dFneb2WuGHIsYBTlxsNuvhFTwN/FkIcedfzXehZIER?= =?iso-8859-1?Q?G1nMSIwO5IpGhSPjPkOIbj+aPKPgkp/Ei6DkYGBjac+2EIwROterQc5KMy?= =?iso-8859-1?Q?oeFicrDmT6jyzt5hhBIPGzB+aHM0awkbhO2o+FHkGaPp/yNf3nfG/cbB2F?= =?iso-8859-1?Q?ewBDH/t/RU6kIuFPrvRrli80N7TxXs6y7zW5FKjI0Sc6PiygEAWjW1SxN6?= =?iso-8859-1?Q?LS0sL9H3iYTo+ZWauEGi1yhLV+kc3Qe3GVBWRCruXJYhpNhEglManf8ncN?= =?iso-8859-1?Q?lMHqGlHCCUm1GQcZAIoDUTUn7fPr5RaXiZGsOrbrN4UH0FynSzIhdg22y1?= =?iso-8859-1?Q?BV1D9KQRUkqEp8vMxcRhfSyVv2RHmd5Ze+jPtVAqSSBrVJJjvniHBNFrLL?= =?iso-8859-1?Q?xSrz1faiSLoC6Cr0DNLR5JRVFipnAA5so8nkVLaZTdF0WDhXtPyiwswMHG?= =?iso-8859-1?Q?lY2oedFlLdaWAjYeJiSiOiq/uJPuMCls/TEdn302f497tiAJ0SLYtRgcLV?= =?iso-8859-1?Q?AYy3MAosxZXJPAOMw9lIXaMET+Rtry1W5NXMUmmYHLH4NzSrCnb2zuwm91?= =?iso-8859-1?Q?iBJ/5eukoNsqdF5OQ7ceFsbUzkDyPC/uAhlJiEdiV7VLi0/HFOCxRHiMFC?= =?iso-8859-1?Q?xbjvjEXWu/t/bLOgpQWUqAeXZQkZ8p4sbVFvMU948ZbT9t6yh/uA6LzC7L?= =?iso-8859-1?Q?qs4LZhBya+JwNv7n3ruUn5v2bMh8zFoImaCShRYA7pJEJfT2gi7jjeaa1D?= =?iso-8859-1?Q?8Ll6f0/7aDHRa9ifvwgfO6utwpB6znEgJI6Ew1fHFMlJwJ99f6bPHE9UKX?= =?iso-8859-1?Q?g/jWyBZ9oDgiA2vLoqGkHsA0yMv9433ibczN/SorHkwEJxaZkJoC6ptQe3?= =?iso-8859-1?Q?dqybl6rew3NytGg3rMnRdnC4Pm/qhOoJrzWHUZkEnLg6veYIx7RdPvjd8v?= =?iso-8859-1?Q?RR5neICm81H++j7v4OEN2K2DqUZFJu7O2er1YuKH/MCK2DE6GHhynv0W+Q?= =?iso-8859-1?Q?KnROcy357/R0wxISyHYPCqNAt0thdk3bi1G7XyfmLoT9wjuTC2Yda3ymEW?= =?iso-8859-1?Q?cN8M+Ep9nyR5KjYbDx1rpZEkBsjfoAza+ouQqdyJHq6HbzN/bJMw+dAdYj?= =?iso-8859-1?Q?24F0uwtygPEC1qqYuuqCERJAmvfsJIlun7KtQa8t8F+1KkH5zlTS4ZePo1?= =?iso-8859-1?Q?DrvHD1xs/BmlkF0mhs9M//mv/pexooRsXXMWSc2upzdKSzOU0xzNQ9Js1+?= =?iso-8859-1?Q?gTOpUS5OJwMlnxbPG8v8QdU0N5H5e10v2Tl4nC0o9z2ND0HIT6lRjUPP0E?= =?iso-8859-1?Q?6E+VMb4NCYCi0OcPb14soO1mluer21gGq4RBItwhqsE3JYkX7pM1q0RAl2?= =?iso-8859-1?Q?0El8mj/CbFBpN9YGUPGVZD4AMgfVIS1nppMwV475lG3YgM6PJb6CQSQrYu?= =?iso-8859-1?Q?NJGaQCEt4AiykXqjEJI0+XcKgdBv2gqC1gfRZw14MdFEvXyeIGiI0owVEq?= =?iso-8859-1?Q?1iTjIQkx42XjHBdGbGPtmOwaLzsurwAwQyJ3VExRGLdtUB3jUSwH66y3jq?= =?iso-8859-1?Q?J36ONMiwtcqfBSIEaSS+Bi901DtSZk9ZVW1Ykz3IPoCwTeIvXMwzqEGzWn?= =?iso-8859-1?Q?x7yvpB6BSMskhrl7jLVYKGZhmiNZAUDeqsxfmNjq05SsHO4z7hd47cHX0X?= =?iso-8859-1?Q?oOOvTYq07kQi4xAUGp9qCVDLGsS2Y1nEcxhDWZwYlEHXq5sa9F/z/1V6wZ?= =?iso-8859-1?Q?hckakzcKUg=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: p0a0Va8rJo50OpoMcno/Mw6KFFlONlPboUvIWs+OW4w7Lq6IdCfXFYJP6qWuRIUTBuQopg3heno7cOcuSLzoLEc0P2crUD5wddVAUqS9QzpnQZv2hbfzxfk7v4WiT6UOBFedeZ7Ijb4x2h+hqPT8qmq0M1vTPpD3e54qGN/nQ6paY5mtibcTx5WKpEfHiGRQqPq9lJwm7Epj4zFdFWpO2b7dQqeLB+xQMn58goIGFkscMUrCEXyz7QxTtkgWgrDn4rgDPJbQrZx25ekHdgEYa0Gv/VnyQRAyM0txCIAxe7dmM19cgunxQ1Lqh+BcDdMaVpnfC71Y5FqCo/uN/F8OIA== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB4746.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2fec0f8d-be7b-4cdc-bb7f-08dec13aabb5 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jun 2026 06:38:06.6103 (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: QFAUX8rnYFnQUaaroypmaV+V1rRuz58TUFrEOo1oHn+EZvw4K1dcyYwLUcVSbBEII6LEz43F8T9qT1J7EmbhwGjIvESh7sY73O/KAp15eBU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6572 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:c406::3; envelope-from=steven_lee@aspeedtech.com; helo=OS8PR02CU002.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_NONE=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: 1780468750292154100 Content-Type: text/plain; charset="utf-8" Document the AST1040 Caliptra MCI mailbox windows, the SCU-controlled remap= aperture, and how to connect the external mailbox peer through a chardev b= ackend. Signed-off-by: Steven Lee --- docs/system/arm/aspeed.rst | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst index 2d51ceeb84..1ffa88c2ae 100644 --- a/docs/system/arm/aspeed.rst +++ b/docs/system/arm/aspeed.rst @@ -483,6 +483,7 @@ Supported devices * ADC * Secure Boot Controller * PECI Controller (minimal) + * Caliptra MCI mailbox (AST1040 only) =20 =20 Missing devices @@ -512,3 +513,34 @@ To boot a kernel directly from a Zephyr build tree: =20 $ qemu-system-arm -M ast1030-evb -nographic \ -kernel zephyr.bin + +Caliptra MCI mailbox (ast1040-evb) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The AST1040 chip provides a mechanism to map the Caliptra MCI mailbox +register space into the Cortex-M4F address space. The Caliptra MCI mailbox +SRAM and CSR are accessible at fixed addresses: + +- Mailbox SRAM at ``0x21400000`` (2 MiB, command/response payload) +- Mailbox CSR at ``0x21600000`` (4 KiB, LOCK/CMD/DLEN/EXECUTE/STATUS) + +The SCU ``CPTRA_PAGE_REG0`` register (at ``0x74C02120``) selects which +Caliptra MCI page (SRAM or CSR) is exposed through the 4 KiB aperture at +``0x74200000``, allowing firmware to access either window through a single +address. + +By default the mailbox has no Caliptra peer, so writing ``EXECUTE`` reports +``CMD_FAILURE``. To service commands with an external Caliptra simulator (= for +example caliptra-server) over a UNIX socket, start the simulator first, th= en +create an external peer device and link it with the machine's ``cptra-peer= `` +option: + +.. code-block:: bash + + $ qemu-system-arm -M ast1040-evb,cptra-peer=3Dpeer0 -nographic \ + -chardev socket,id=3Dcptra0,path=3D/tmp/mcu_mbox.sock \ + -device cptra-mbox-peer-extern,id=3Dpeer0,chardev=3Dcptra0 \ + -kernel zephyr.elf + +Writing ``EXECUTE`` bridges the command and the mailbox SRAM payload to the +peer over the socket, and writes the response back into the mailbox SRAM. --=20 2.43.0