From nobody Wed Aug 26 15:52:39 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