From nobody Tue Aug 25 21:44:50 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=1779346417; cv=pass; d=zohomail.com; s=zohoarc; b=XVP4KjWAk4U7z4TvDKyFLev7I9znX1sLhboq/rjrFjFv5gA+v/EATY1yinndmc/hu5YlH1n6sseTUdk4GVLi0HXdhsCvZZxB6M7PnricVLn0f0ClpgqjB6WYBWya4fu1+GBJOxHnQdKP3OMrF6AEMsQtJS2pBqX0FLewuYUMXM4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779346417; 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=RbX5OqKV0dVPGrmzjpa0DD1S7iQGQZhQHsQoJ5Wa8wY=; b=KdWLDasoPlTtgHgX0zHNkrNXtrFGLd4Kn4/WjlJA21iAwPeqLQ49nEHHAclHpIgNrNqkFHDDcg7zRugmafh/g41dRAps0mJJsvL/h9sJovDcHBIqEP6hUBDzMbITPOf7T+RZGxgVVKFZK9a6BmSmhUIOi6mpjtLyBO6tzP2C9xc= 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 1779346417700836.0675648657026; Wed, 20 May 2026 23:53:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPxHE-0003RC-DH; Thu, 21 May 2026 02:53:04 -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 1wPxGi-0003HO-Ss; Thu, 21 May 2026 02:52:37 -0400 Received: from mail-japaneastazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c405::5] helo=TYPPR03CU001.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 1wPxGg-00083B-P9; Thu, 21 May 2026 02:52:32 -0400 Received: from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19) by KL1PR06MB6044.apcprd06.prod.outlook.com (2603:1096:820:d2::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Thu, 21 May 2026 06:52:08 +0000 Received: from TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3%2]) with mapi id 15.21.0048.013; Thu, 21 May 2026 06:52:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LNu85ffMdgy91ESU4GxIb77M3mieeIQgaZfpV7r0W//URAt2F6DACQseUXIpoWeM18RUyfXhUEY6CHQva84VgiBRg98We82Ev3Sn3Dpn/XabI1OXc7OXO1h8LJCoFUyLw5gAAdrj9lBayIOGWrOY0TjgVfMP7cOWOkSe9jbtDpl/XAYHrWllXn1ze0vKzdsMcv9KZy/997CshAypjWHvcyiTIenK+J+QLOiqNyFEgCkO2m3H/IkroAgIG7eJGvzRUPeVPWnEBQXa8a/a+YUbhAOFRB/LeJteP0HE4Wso7zYi37uTmyTOkp+0HdbwLmOtPdCFh6wv8rdLDniO9Z47uA== 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=RbX5OqKV0dVPGrmzjpa0DD1S7iQGQZhQHsQoJ5Wa8wY=; b=sPK/7BHCmPbnexb1pQFor+eHXfC58w5a+7RR5npMX5katcuSmwKJvUcqgrOwlQm8K0BZ4YFbjPUDFxDyiqCmUOQC+mZXnfJdX+0E0XgcobUmBKMMvZn7bI/ZQAxxbHVIxyHLL9tPev7Mh7TAOuPit/i6nhheqWqbBcV6H7imaYBokmM5dvS3HEw3YtMue+F10h0Y+sDe9GjErHVbz1fuwG13gIm8XVXsHz6yWK1fcSVCgqrssS+Z0upSZ4IUj6erMhgAGJkzCjLkyv2Smr9I0/yIXr0Uv7OSpCzbXsnfxI8kawjqGkORnDXa7c/TyG1/gM0e+JvJjKxfuaAgkoddsA== 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=RbX5OqKV0dVPGrmzjpa0DD1S7iQGQZhQHsQoJ5Wa8wY=; b=ZVX3ELWXz49yG+J/NWPPGg2XIYQD6wO/RdYD1HjIp6RC1qu55e3eb7BsYGqkhpPQyZd6x6Dmeu1d2iuZ4cDgh6kf48v+R/eHyvWLjcco3OPJH0tfemd7EeeBI8afEd49WPMpwHD/fRusndM0XJMW4vUOTXpOk8mpxLY6taAOSqK2tx+62QqeDtBE8bL2stBvKwAm9Bc1lOKI6zWmxek7gNNA61eyzYuK6B3tQjVHAwfbvBZstgp5qbLoevEXX/9U7l3xJKAbTOUHCi4DpsvPUrDHgngYAWNmIk/NZ2axECBMY5XpMPfJQaGAfPRWIE/dpr38RReXyvkVbE8wfHTbHQ== From: Jamin Lin To: =?iso-8859-1?Q?C=E9dric_Le_Goater?= , Peter Maydell , Steven Lee , Troy Lee , Kane Chen , Andrew Jeffery , Joel Stanley , "open list:ASPEED BMCs" , "open list:All patches CC here" CC: Jamin Lin , Troy Lee Subject: [PATCH v1 3/4] hw/arm/aspeed: Introduce AST1040 A0 SoC model Thread-Topic: [PATCH v1 3/4] hw/arm/aspeed: Introduce AST1040 A0 SoC model Thread-Index: AQHc6O5XFjwe/7SkkU6GD4dyjSgfEg== Date: Thu, 21 May 2026 06:52:08 +0000 Message-ID: <20260521065203.3713466-4-jamin_lin@aspeedtech.com> References: <20260521065203.3713466-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260521065203.3713466-1-jamin_lin@aspeedtech.com> Accept-Language: zh-TW, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYPPR06MB8206:EE_|KL1PR06MB6044:EE_ x-ms-office365-filtering-correlation-id: 6028b8f3-3d2c-423f-20f8-08deb70579eb x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|1800799024|376014|18002099003|56012099003|38070700021|22082099003; x-microsoft-antispam-message-info: xriSvBk6Sf7IkDyduDqi6k9wfOAFlh274knQz3xz7Y6ZITxCJ2u3OHVoFtyLDQ0oxgJAEP/M77h5wOVS3SNLHXQIts1Sg0b3enIStVXUtGx25PM+y95cxH47cwxWzukhBx6cJ4+J9nQ+dA7K12yI1yJBZErsMZfUwpE/wXovlDwj6kgt6eYfIYLycZb2LwGMsJHh9VmaBlcN7uN3r6Jgrp/ofYdAU/L2onptSL/198P76V2FxZUb/R747wSubo+cRWtJPNwcNmK9yUQA5mBcvAftgoaNQwEPSd2u1eOAbJer5YwtisaDEmEjXHdf/eiM7Q8DH9QuAx2Ttw3Rn3RPv861+XLWkMvtwKI4AFKVBzeu/nfA4MgxoRwjrAFzL5wvWjY/0dQGLuRpRPW5CvGVUOP9g+kdCdKYAL1q91G3+rEBv4x5pVF045tjEFLIa+UqTPSXRpyoS5U0j4t9A8VJytJ9A7fg8Y0V12WIwCrR3b75cjp++tCgVMXmjwVvJ+IH6XxI1c2PwZIBDg8Ncmv0VNwy1n13bjqJJGBoKeg6f0ARpLFgwjbmQhRIc8BbqwsKD6+7xgU8Asj8WAoaIoFrfUFKEi4ZwJK5cIbTfP6i0n2kboBwOeE0NJZ81YK5PcMizFdT2uoyDB4Wvk7e2kVWaqS+4/c3QaGBQpGh/rc1BgpvOHNAQD1YflOB0tBFVhPjeBKeSMhLPuOd8GAH5NJ2DXFKTB/FHWQr38gksJWhNICWjMMpyJ6GMurDA6RlqtDL x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYPPR06MB8206.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(56012099003)(38070700021)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?+YF8B4vqXoyHazeWz+WwDDy429ZfkQLAGQoa+Rumxuy0Ld91Nlm0BTJpYD?= =?iso-8859-1?Q?S+tfJjBMc3EGKEumGk/UUqRq4jIsT8wPmGZx4qLcJhrmAdzS6VSOqXIc6l?= =?iso-8859-1?Q?ZM3zPMEc8VR0sfFTS5kvnOsmzfXegIihKVcYu1V4OEvBsfvZZXcDYyAB4d?= =?iso-8859-1?Q?3r87woELWGaBZfiAY3exi9SJzmwxIh5TTAAkOWFX3Qec/aDl20CMoqr6qF?= =?iso-8859-1?Q?jssTvuxRgJUf6L85tGF1nMp0hrTXfhuZNdoaIdhd0M67b6MYBzVVF6w6rc?= =?iso-8859-1?Q?YCWaa74JPjq4sU1oFpFrz/C1cN39nLxj5eubWyk+w4tx5dA5P15k5GNqRx?= =?iso-8859-1?Q?3kQPcO2A1CLU4WmhhJr+tCHYWRaE5561eY1WkFy5Bfx0z97CpYHEuYHNCD?= =?iso-8859-1?Q?+fw9whqpc1KhpoESTKtaNqCG0DWTm/pxFpNY3yqITqsPUvx5gXwasdSjoq?= =?iso-8859-1?Q?KSwPIyGS8jWc/YJkzgiBagS0IHK+riPNNFTMuTvQgClRlqmm5wnyHMPafU?= =?iso-8859-1?Q?f6fuJ8YNyKuq0y8VjqMi5TEyX54fzXYYL0A+swUP/tmoWiyxA8GLQzzVJP?= =?iso-8859-1?Q?+lbQVTkunwoKAPMTqEvMZABOy457Qib/EUdob5eEIEA3dPGGYX6RdbW6lu?= =?iso-8859-1?Q?mpWasldlJ3zH3p1Krz0w/yPvz0c4vYv6/m4ECJbkzc0uoh1F5WmEJaBLqv?= =?iso-8859-1?Q?dcrpaJFkFd5wgBlapG+QbMHtM48uV/GDP7ExjZ70FpK9F7rihJo3TIFbGn?= =?iso-8859-1?Q?E3/OEdVLAmb4UzFWcrDUSKwSbNCbkF2I7MuarBA1PUyez+8I1ZwlQvLC8j?= =?iso-8859-1?Q?tEflkQXTUOfiwQka54/z63peKJTpd743ZB12zEjMIuXNqZBe6i8K0oKS8m?= =?iso-8859-1?Q?Ll7O8jL/k9+BUOsRw7h9W+X/UoDPJNDVzBch5WFuR9rSm2t6/W3akF/CZA?= =?iso-8859-1?Q?99qowI6yNzaMkLxEvJN3O/4jTsKZBeJqsLpU8jWtiJv5Hrpf74DGxW8TJn?= =?iso-8859-1?Q?IT9vLoBud5rTIDNB02gqXhVZg8kWyDb3zEZ2zeYwC/9D53wg6vzd/poVWI?= =?iso-8859-1?Q?Vy8Llgj7VkukIPz6ylxOp0ofuJ3dCDyacM6mcWMUKBNAwrEYlwWjEXoztz?= =?iso-8859-1?Q?KiUEjyM/L6eRGjSlyEfaSZjco5LYuAArDB/3p52vFtwWM21ogZb81a65C3?= =?iso-8859-1?Q?HbuOM4Ty3lo3MSUqTfNN9qJIxU0GC+9MM1Rw6H2df0oFWVfUOzaDKNcA1l?= =?iso-8859-1?Q?LG7C1jxnRp+qsiMZZiuux0zHAX2PCJI48RdweKuvqksmUoHiuRshoIiOhZ?= =?iso-8859-1?Q?n99qAhjcECuYIo6/P3KfhdFSMHwVl62XhSjSWBX9I5mWP5qAWCFF4F/Rqe?= =?iso-8859-1?Q?ICTPr966fN9vz0NOqV9KmFfdzrw0IEgqyUWW7RUB5MhiX3xvFJdLyq4iG+?= =?iso-8859-1?Q?EiUMENC3vFH9sKLW6+mrKfCBXvpWGG8u671V/8wLj7/OqFu8yS7tM4V2GE?= =?iso-8859-1?Q?GBBLZKlj7HFF11YI2kfqTWcSISoJsNdkeJCLOcWzrZ2QXAw0AgUYihUAfi?= =?iso-8859-1?Q?u+d45UUF+wKGtK2bysAuB91agwRQ/AjgZlkRjLgoI6s8mC+vyp5o60+40K?= =?iso-8859-1?Q?7KJVvVChNeHLKVZou0AsQV/bdBBxZxB9T1rqOEtFun5GdYxkXYStwLfP9+?= =?iso-8859-1?Q?AvRVio+z0RABH9+Abv/OpPJ5cN8Zd4hqBwHf4WA9lwx/umCG6Nw48IaaWi?= =?iso-8859-1?Q?pUXSILYVMAQ8vOoLWjJOV5ImT0xR1falzearSHzUGzfxoI5E2Zopjrk2kn?= =?iso-8859-1?Q?r9lJL7zHdw=3D=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: exgUeJQkv44qKHWCh3KhwjxGWxABEHCwJiFtUi3jNOXp/6lzvu+Zw5V4mgTdWPZkMANS0T6FefFe7UjwjkP4NQuQQlj75MEBbR+7gLsLWCzLsA6uCY8em/KoI7Me2ueEnWtfk3hXPpQOsayk8YET3yL3mS8NdDgkaUaPA0GOwaRWPNKmTvouEdgUSdQe7zyjOqN/Ij2MjmKwUW+UzsRjkL9eGOeP7N98VF65v47ZrkIzlNwdUDM7WVwRJhDuniEbl/2qM8BDrkCjiZ+6cPoOXd18AIJn2ioDQar3fkKrgtl54XiyQMSMn9WvoYbTy/Z+0aeF0AvQ6XT7GDPF6/4GAg== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYPPR06MB8206.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6028b8f3-3d2c-423f-20f8-08deb70579eb X-MS-Exchange-CrossTenant-originalarrivaltime: 21 May 2026 06:52:08.0904 (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: 3IPpn967cbSAbnz6XtapVbRXokZOudPJ1C+95xa1FaXR7IqM1Z80X6yPIy8vp3QxH0IiinOFliuwFFE4fee7vsOFeIqFy3ZM8Nc/OoywH2o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR06MB6044 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:c405::5; envelope-from=jamin_lin@aspeedtech.com; helo=TYPPR03CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: 1779346418402158500 Content-Type: text/plain; charset="utf-8" The AST1040 is based on an ARM Cortex-M4F CPU core. Since QEMU currently does not provide Cortex-M4F support, use the existing Cortex-M4 CPU model as a temporary replacement. This initial implementation provides the basic infrastructure required to boot firmware and run a minimal firmware shell, including: - ARM Cortex-M4 CPU integration - NVIC interrupt controller support - Internal SDRAM and SRAM memory regions - SCU integration - UART devices and interrupt wiring AST1040 SCU behavior is compatible with the AST2700 SCUIO model, so reuse the existing AST2700 SCUIO implementation directly instead of introducing another identical SCU model. This reduces duplicate code and helps minimize long-term codebase maintenance. Several peripherals are currently modeled as unimplemented devices and can be added incrementally in future updates. Signed-off-by: Jamin Lin --- hw/arm/aspeed_ast1040.c | 246 ++++++++++++++++++++++++++++++++++++++++ hw/arm/meson.build | 3 +- 2 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 hw/arm/aspeed_ast1040.c diff --git a/hw/arm/aspeed_ast1040.c b/hw/arm/aspeed_ast1040.c new file mode 100644 index 0000000000..615f9c4e15 --- /dev/null +++ b/hw/arm/aspeed_ast1040.c @@ -0,0 +1,246 @@ +/* + * ASPEED AST1040 SoC + * + * Copyright (C) 2026 ASPEED Technology Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + */ + +#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/arm/aspeed_soc.h" + +static const hwaddr aspeed_soc_ast1040_memmap[] =3D { + [ASPEED_DEV_SDRAM] =3D 0x00000000, + [ASPEED_DEV_FMC] =3D 0x74000000, + [ASPEED_DEV_SPI0] =3D 0x74010000, + [ASPEED_DEV_SPI1] =3D 0x74020000, + [ASPEED_DEV_PWM] =3D 0x740C0000, + [ASPEED_DEV_UDC] =3D 0x74120000, + [ASPEED_DEV_SRAM] =3D 0x74B80000, + [ASPEED_DEV_ADC] =3D 0x74C00000, + [ASPEED_DEV_JTAG0] =3D 0x74C01000, + [ASPEED_DEV_SCU] =3D 0x74C02000, + [ASPEED_DEV_ESPI] =3D 0x74C05000, + [ASPEED_DEV_JTAG1] =3D 0x74C09000, + [ASPEED_DEV_GPIO] =3D 0x74C0B000, + [ASPEED_DEV_SGPIOM0] =3D 0x74C0C000, + [ASPEED_DEV_SGPIOM1] =3D 0x74C0D000, + [ASPEED_DEV_I2C] =3D 0x74C0F000, + [ASPEED_DEV_I3C] =3D 0x74C20000, + [ASPEED_DEV_UART0] =3D 0x74C33000, + [ASPEED_DEV_UART1] =3D 0x74C33100, + [ASPEED_DEV_UART2] =3D 0x74C33200, + [ASPEED_DEV_UART3] =3D 0x74C33300, + [ASPEED_DEV_UART4] =3D 0x74C33400, + [ASPEED_DEV_UART5] =3D 0x74C33500, + [ASPEED_DEV_UART6] =3D 0x74C33600, + [ASPEED_DEV_UART7] =3D 0x74C33700, + [ASPEED_DEV_UART8] =3D 0x74C33800, + [ASPEED_DEV_UART9] =3D 0x74C33900, + [ASPEED_DEV_UART10] =3D 0x74C33A00, + [ASPEED_DEV_UART11] =3D 0x74C33B00, + [ASPEED_DEV_UART12] =3D 0x74C33C00, + [ASPEED_DEV_WDT] =3D 0x74C37000, + [ASPEED_DEV_TIMER1] =3D 0x74C3A000, +}; + +static const int aspeed_soc_ast1040_irqmap[] =3D { + [ASPEED_DEV_ESPI] =3D 10, + [ASPEED_DEV_I2C] =3D 64, /* 64 ~ 77 */ + [ASPEED_DEV_ADC] =3D 80, + [ASPEED_DEV_GPIO] =3D 82, + [ASPEED_DEV_SGPIOM0] =3D 85, + [ASPEED_DEV_TIMER1] =3D 92, + [ASPEED_DEV_I3C] =3D 96, /* 96 ~ 103 */ + [ASPEED_DEV_WDT] =3D 112, + [ASPEED_DEV_FMC] =3D 121, + [ASPEED_DEV_SPI0] =3D 122, + [ASPEED_DEV_SPI1] =3D 123, + [ASPEED_DEV_PWM] =3D 125, + [ASPEED_DEV_UART0] =3D 135, + [ASPEED_DEV_UART1] =3D 136, + [ASPEED_DEV_UART2] =3D 137, + [ASPEED_DEV_UART3] =3D 138, + [ASPEED_DEV_UART4] =3D 139, + [ASPEED_DEV_UART5] =3D 140, + [ASPEED_DEV_UART6] =3D 141, + [ASPEED_DEV_UART7] =3D 142, + [ASPEED_DEV_UART8] =3D 143, + [ASPEED_DEV_UART9] =3D 144, + [ASPEED_DEV_UART10] =3D 145, + [ASPEED_DEV_UART11] =3D 146, + [ASPEED_DEV_UART12] =3D 147, + [ASPEED_DEV_JTAG0] =3D 162, +}; + +static qemu_irq aspeed_soc_ast1040_get_irq(AspeedSoCState *s, int dev) +{ + Aspeed10x0SoCState *a =3D ASPEED10X0_SOC(s); + AspeedSoCClass *sc =3D ASPEED_SOC_GET_CLASS(s); + + return qdev_get_gpio_in(DEVICE(&a->armv7m), sc->irqmap[dev]); +} + +static void aspeed_soc_ast1040_init(Object *obj) +{ + Aspeed10x0SoCState *a =3D ASPEED10X0_SOC(obj); + AspeedSoCState *s =3D ASPEED_SOC(obj); + AspeedSoCClass *sc =3D ASPEED_SOC_GET_CLASS(s); + int i; + object_initialize_child(obj, "armv7m", &a->armv7m, TYPE_ARMV7M); + + s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); + + /* AST1040 uses the AST2700 IO SCU model */ + object_initialize_child(obj, "scu", &s->scu, TYPE_ASPEED_2700_SCUIO); + qdev_prop_set_uint32(DEVICE(&s->scu), "silicon-rev", sc->silicon_rev); + + 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"); + + for (i =3D 0; i < sc->uarts_num; i++) { + object_initialize_child(obj, "uart[*]", &s->uart[i], TYPE_SERIAL_M= M); + } + + object_initialize_child(obj, "pwm", &s->pwm, TYPE_UNIMPLEMENTED_DEVICE= ); + object_initialize_child(obj, "espi", &s->espi, TYPE_UNIMPLEMENTED_DEVI= CE); + object_initialize_child(obj, "udc", &s->udc, TYPE_UNIMPLEMENTED_DEVICE= ); + object_initialize_child(obj, "sgpiom", &s->sgpiom[0], + TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "jtag[0]", &s->jtag[0], + TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "jtag[1]", &s->jtag[1], + TYPE_UNIMPLEMENTED_DEVICE); +} + +static void aspeed_soc_ast1040_realize(DeviceState *dev_soc, Error **errp) +{ + Aspeed10x0SoCState *a =3D ASPEED10X0_SOC(dev_soc); + AspeedSoCState *s =3D ASPEED_SOC(dev_soc); + AspeedSoCClass *sc =3D ASPEED_SOC_GET_CLASS(s); + DeviceState *armv7m; + Error *err =3D NULL; + char name[64]; + int uart; + int i; + + if (!clock_has_source(s->sysclk)) { + error_setg(errp, "sysclk clock must be wired up by the board code"= ); + return; + } + + /* AST1040 CPU Core */ + armv7m =3D DEVICE(&a->armv7m); + qdev_prop_set_uint32(armv7m, "num-irq", 256); + qdev_prop_set_string(armv7m, "cpu-type", + aspeed_soc_cpu_type(sc->valid_cpu_types)); + qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk); + object_property_set_link(OBJECT(&a->armv7m), "memory", + OBJECT(s->memory), &error_abort); + sysbus_realize(SYS_BUS_DEVICE(&a->armv7m), &error_abort); + + /* Internal SDRAM */ + snprintf(name, sizeof(name), "aspeed.sdram.%d", + CPU(a->armv7m.cpu)->cpu_index); + memory_region_init_ram(&s->sdram, OBJECT(s), name, sc->sdram_size, &er= r); + if (err) { + error_propagate(errp, err); + return; + } + memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SDRAM], + &s->sdram); + + /* Internal SRAM */ + snprintf(name, sizeof(name), "aspeed.sram.%d", + CPU(a->armv7m.cpu)->cpu_index); + memory_region_init_ram(&s->sram, OBJECT(s), name, sc->sram_size, &err); + if (err) { + error_propagate(errp, err); + return; + } + memory_region_add_subregion(s->memory, sc->memmap[ASPEED_DEV_SRAM], + &s->sram); + + /* SCU */ + if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) { + return; + } + aspeed_mmio_map(s->memory, SYS_BUS_DEVICE(&s->scu), 0, + sc->memmap[ASPEED_DEV_SCU]); + + /* UART */ + for (i =3D 0, uart =3D sc->uarts_base; i < sc->uarts_num; i++, uart++)= { + if (!aspeed_soc_uart_realize(s->memory, &s->uart[i], + sc->memmap[uart], errp)) { + return; + } + sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0, + aspeed_soc_ast1040_get_irq(s, uart)); + } + + /* Unimplemented peripherals */ + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->pwm), + "aspeed.pwm", + sc->memmap[ASPEED_DEV_PWM], 0x10000); + + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->espi), + "aspeed.espi", + sc->memmap[ASPEED_DEV_ESPI], 0x1000); + + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->udc), + "aspeed.udc", + sc->memmap[ASPEED_DEV_UDC], 0x4000); + + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->sgpiom[0]), + "aspeed.sgpiom", + sc->memmap[ASPEED_DEV_SGPIOM0], 0x1000); + + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->jtag[0]), + "aspeed.jtag0", + sc->memmap[ASPEED_DEV_JTAG0], 0x100); + + aspeed_mmio_map_unimplemented(s->memory, SYS_BUS_DEVICE(&s->jtag[1]), + "aspeed.jtag1", + sc->memmap[ASPEED_DEV_JTAG1], 0x100); +} + +static void aspeed_soc_ast1040_class_init(ObjectClass *klass, const void *= data) +{ + static const char * const valid_cpu_types[] =3D { + ARM_CPU_TYPE_NAME("cortex-m4"), /* TODO cortex-m4f */ + NULL + }; + DeviceClass *dc =3D DEVICE_CLASS(klass); + AspeedSoCClass *sc =3D ASPEED_SOC_CLASS(dc); + + /* Reason: The Aspeed SoC can only be instantiated from a board */ + dc->user_creatable =3D false; + dc->realize =3D aspeed_soc_ast1040_realize; + + sc->valid_cpu_types =3D valid_cpu_types; + sc->silicon_rev =3D AST1040_A0_SILICON_REV; + sc->sdram_size =3D 16 * MiB; + sc->sram_size =3D 512 * KiB; + sc->uarts_num =3D 13; + sc->uarts_base =3D ASPEED_DEV_UART0; + sc->irqmap =3D aspeed_soc_ast1040_irqmap; + sc->memmap =3D aspeed_soc_ast1040_memmap; + sc->num_cpus =3D 1; +} + +static const TypeInfo aspeed_soc_ast1040_types[] =3D { + { + .name =3D "ast1040-a0", + .parent =3D TYPE_ASPEED10X0_SOC, + .instance_init =3D aspeed_soc_ast1040_init, + .class_init =3D aspeed_soc_ast1040_class_init, + } +}; + +DEFINE_TYPES(aspeed_soc_ast1040_types) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index 80068f70bb..fa3a848492 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -62,7 +62,8 @@ arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files( 'aspeed_ast2600_gb200nvl.c', 'aspeed_ast2600_rainier.c', 'aspeed_ast10x0.c', - 'aspeed_ast10x0_evb.c')) + 'aspeed_ast10x0_evb.c', + 'aspeed_ast1040.c')) arm_common_ss.add(when: ['CONFIG_ASPEED_SOC', 'TARGET_AARCH64'], if_true: = files( 'aspeed_ast1700.c', 'aspeed_ast27x0.c', --=20 2.43.0