From nobody Mon Apr 13 12:33:05 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=axiado.com) ARC-Seal: i=2; a=rsa-sha256; t=1772799683; cv=pass; d=zohomail.com; s=zohoarc; b=lPiZEcdZild7C4w9zr/ki/uAa251N+jkaWPW3+faeZdYW5YQZF5n6L/XtGB4NkeUfU4RmRqzzZUd8JsvJhbZ5jpQ7czBXUrvK147GRk7RAO9GbWrc7EE93aGV82N+VKH1rHSztZljA34FfEgCezOFmETMR1i9Q7PeU4aDEPKIKM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772799683; 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=iv/6lhr0aDU0UYnEjhHhx5koSgVgigHXltmbsBKWSfo=; b=FrRSN2mnTtVbqPqklmhptBP1jZTjJKGWkdsKAdaEhgBwmKpkriOXh3T3KZKRmDryhVmZ8aSsbr4w/4yAxcyRqLJ/GpQuJNEJ8F3ZG8MSPE9evjhTxKpIPxR3pZaVZDsW1fr8Kwe4DSgAge8XtF1fhoPA38MuT8RW/oy99uF+sJM= 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=axiado.com) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772799683391884.3211851317893; Fri, 6 Mar 2026 04:21:23 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyUAb-0000Br-Bd; Fri, 06 Mar 2026 07:20:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyUAU-0000Ai-E0 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 07:20:35 -0500 Received: from mail-westusazon11020127.outbound.protection.outlook.com ([52.101.85.127] helo=BYAPR05CU005.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 1vyUAS-0000gD-05 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 07:20:34 -0500 Received: from SJ0PR18MB4479.namprd18.prod.outlook.com (2603:10b6:a03:37f::19) by IA2PR18MB5977.namprd18.prod.outlook.com (2603:10b6:208:4ba::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.17; Fri, 6 Mar 2026 12:15:27 +0000 Received: from SJ0PR18MB4479.namprd18.prod.outlook.com ([fe80::eaf4:3aec:73e:d5ba]) by SJ0PR18MB4479.namprd18.prod.outlook.com ([fe80::eaf4:3aec:73e:d5ba%3]) with mapi id 15.20.9678.017; Fri, 6 Mar 2026 12:15:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NI24q1oLU6IOCqZu108BbaSAuqwlHADCjXG9ubAwHebeTivNHxxuALXr24DhmIg+qJlsY/3euQpiW3vmRzMxGXJv3RidmIJ7PUao0otZHsxy+sHQu8mCs2ZM06mmhEYmo4normgx06ut3/kR5JNwrY3k+OHumfWybUMnZ0uNwHZR6eodDLj9xiRps9FdOYV+9RZuhqtLPCG+SUj++DVWzTiAFB/5G+3FGG0IA3Q43wHbeWHCDElI0A4j3g3jDOGkVoNJ7jBCL1olu7XvjYEdzHyfCuMy+oFiBPMjQTPd9dkI873b83gCWtYYakTQdPTUUmpJTF5QY5UjjnPpxQvG+Q== 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=iv/6lhr0aDU0UYnEjhHhx5koSgVgigHXltmbsBKWSfo=; b=amCqEChIGNzl8PDrQFrPJDQoZ98uSulBJYcGJuh40ZA7wGxwZOD8wbAADVUNW1huAAirYJ71BD1HT7hZlccmXkD9/vdLgAy4aefnvmSgBmKMqCyqoC/+oSHCb6HQIJKBkhk8S+YBr4F/qcMUEiUxi3avt3X5566uH/mJxlBzItexRT7Hn8S8WePdgGnmKsCftLATCPPTG3PgQsVo4GmVD9nrodycwA5x/eUU+Im0oUGamlF1vQetcedHTK3Cllp6RDEy8pgUPNIl9kWHQBpJCneSTMWCxrlCPvTtyRg9BDc/7x+fJytW1/MOSsa7GQx8CZrYesXTaR5MGJbHSsHFjA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=axiado.com; dmarc=pass action=none header.from=axiado.com; dkim=pass header.d=axiado.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axiado.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iv/6lhr0aDU0UYnEjhHhx5koSgVgigHXltmbsBKWSfo=; b=HY23xkR5QLAbJIVvJL0hNZcYUnjlu8yHL+Sq+aOerbq2fB2tcda4A1B8bGlD+8eUtBVXVx8FhL00LiQ5Ok9RDSi84PGWu89RMmpT8svXmhrKi7B/6k81zJCHm2m+Tvx5BFaiO6YCR+gr+L+MaP4SoPYd0H1xW4c8Ti60zMC7nFGRG87FnM/5YZ5xliDGUIeETBsafMq/RAbB1wyvjaSvo/Hvccx51TozCzaH2Q0xlL+GGrK4hy+b+RfyjArFnBgXgmJDKmI6v230+ooJEt5m7mLYKXdRfLNcDxFg4KC+ZgdxmkbsuFlw4u0VYnNns8PNT6qIKbYzk5hCG9wjKMte5g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org Cc: Kuan-Jui Chiu Subject: [PATCH v1 1/2] hw/arm: Add Axiado SoC AX3000 Date: Fri, 6 Mar 2026 04:15:10 -0800 Message-Id: <20260306121511.1781020-2-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260306121511.1781020-1-kchiu@axiado.com> References: <20260306121511.1781020-1-kchiu@axiado.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH5P222CA0007.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:34b::13) To SJ0PR18MB4479.namprd18.prod.outlook.com (2603:10b6:a03:37f::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR18MB4479:EE_|IA2PR18MB5977:EE_ X-MS-Office365-Filtering-Correlation-Id: c6b6d4f9-5953-4661-23f8-08de7b7a0d0c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|366016|376014|52116014|38350700014|13003099007; X-Microsoft-Antispam-Message-Info: +iS3WC8fq5SgLbOinzQwiIpeyiLm0kZNOVihgI84a2MQKV7z9kzoZgHZv4YnAy/dG49ua98gaTlayBcnF9bO4GdmDl2ZsMGn8jCGghYd5AjU0PDH+2HHl2QaO0hMH9UU0bg7lzW3p1rU22rYk2p1yNXR80DBvvcYrA09+oX9jCP1/k4RV/mFHOui+21rsItAIapAdFZeTGX7+DhWHnfbyvMDZTKduo5VJpzTNPyd1QzX3ZTvW48wBvmlaep70R5IPHkl9/ORrO1J6kPM8mfS6PZncZtgQ4WgKsrxuXrUQoMs5qijjBTQNI2KmMpy1PfigpdApT5zSzwcyY6bOe/VQT5qS6I2OCaaM+Kj6SMTmquA8pqMoU2mou/mR3+DkLZRhRQhIpRhVbVOjhVx3Clz3VxlEu1LNCtdQYRt3bm8JiMPbf9qJMEYwHGDuDQ/umMY/wde6SLNyydrJZ8ErvC9JWG+PsJPUkVkp7aT2rJc3p4KUa20eu1rwA+DVyU/fYFLyjM/FfvTEoyWLgTB5t7ctjbNcwrdPgLFbvpqF6e7eN/gCJJ86kcMgZXgWvbpY9JohGwymQYd2e6xRd5rslKZFBxKlNeN/Ule0KQ96NpTRpgpITpm+7YfAGKXo6Rkyf2DM41yDVnUJ+7EivqmPrOAGz8FzEuJ4bCTNJ04I/eDO/HnlJSNR0oKmZsCgpWoY0F5fHznTtO7qGgW/etptvDiibuaueu/muUj+dS3ILgw5R2loEnuj4ZwAWJTsFnWrFgKi11iU46U53CI6nbSEnM20aDLnauRKZNuWBG/qRhBzG0= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR18MB4479.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(52116014)(38350700014)(13003099007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ep6FBwrFKT8oXQ6LIYHdf9P3gMDOFubtN2rGs4C4sPCzYPHlH6LhCOh/tOWN?= =?us-ascii?Q?Lo3lsIfa8tEjNQrWOnglm6kdGq3QzWnmlzBY3x/Q6niaN7T0Ftm5t/OwCkmC?= =?us-ascii?Q?obIwtFcBriVS4TskKV8X82qY1JhG8Y0a5PYU783NbgWJAiupCMu2Mmjj4qCZ?= =?us-ascii?Q?12fNd6ckrdPXnLQdPR3ptilWpBYcqo2XzFwTyU09gjYY5xeWF7UvU6jGDK4K?= =?us-ascii?Q?0Eo0RE+cL4DMGGwwRPOAvuCqXBp368a5SQfKLak9mJs28u0N+IM4MOUgnSqE?= =?us-ascii?Q?PthRmnDLEtU0qQ4+4v8HUIZ5UTvxo99trjy7igryLPuGbVCznYAJhpbb0d1w?= =?us-ascii?Q?BERl2MRc1I+asn9R2ASGrT8z01Cn0edY3US3Sud4azxWAaI6PStaSbyR0dWw?= =?us-ascii?Q?ekG/aKYAA82Jb6SGVedq1fD3O5emt/F7Sh0dE7OVe2p7NCXn06TxaWfTSN2U?= =?us-ascii?Q?u9+eJxmuEnMHWP97gXP2Cv1g4oOoEUPTHBtFgeE2vimA9hD799InV4szRz9f?= =?us-ascii?Q?fz6vXPm4L9eczRnHOob8g2L04+2eWliv0JrlgVfiJhERPk3AqHsbDlAxSAo5?= =?us-ascii?Q?Wh6pb4LzzdZ1hjYuBahfNzchtWobRIauf3OuyHmCOUWZPdxJEuyvrVi1qM90?= =?us-ascii?Q?7hQy2PPCILvHbmegPamoiC26wNaObTUnDVCO+sOrOs/JAf5f18iX/MbNVe5P?= =?us-ascii?Q?S2X0FCFL6bHbw73P/xLP4J9Azcr3W6iGRgbExltPiwP/Ct2OROruzdQm5m94?= =?us-ascii?Q?6pfo/WNI5VfhTuQOShG8A1qxVIylfYqbvYdHxYdN3KfJyUkwzx3hN+F3q908?= =?us-ascii?Q?jpcKYAYgOGbBcpmxOwwV4PkELFSdwutz4RY/8pxrkv/EOyMWqrgpLzTFqRbD?= =?us-ascii?Q?Fyjqq7xt3viOj3wTrZFzVwZ1Dhaw+1L/W7kGVEKjj9aMIUi2I9cQn+RPJ88a?= =?us-ascii?Q?mJExmwyhxk+vq5emQTw0l9OBGeRMsc9zwW8zW2YKJBjSJasraLiFBdqemyx6?= =?us-ascii?Q?aE/07czfK4nPfQtjDxK7fIMCpi+CBDniCTe1jFk0JqEoxzp9G7QKmfHR8ElC?= =?us-ascii?Q?3pn/6ExE3a3NEW5evddpwTJY5a8ZeqXRMrlIzHWWiUcdmr6Gml7y8CWwWywV?= =?us-ascii?Q?OBQbqjUDZcUCK/g72vRyEM7W7CdYh2DwAIVLV6wCNarMED41i62iQ39BGYRb?= =?us-ascii?Q?KnUpBMBuSfknG62Ht0BDuDB0LxiYbU0sDAiTNLdvTmiUhEq00wLQyool9kMa?= =?us-ascii?Q?t+mIgtYEWF13UOIBC+aTlvUZwmMd9BWO21DJZx8mwoHaWMdd82hL17HCYhhh?= =?us-ascii?Q?X6O6ADD9/H/jrgIgrBqE+a1AlKojA/5nGNeznXgOVoBYTMLMH9zUYyNQmAy/?= =?us-ascii?Q?rq/zaEV7RBC1L3Yom8rlIaHwQXmEnsnEXciNuvCKBWsXxzM0/wlvuXrRs+vx?= =?us-ascii?Q?oVdx7W2BOosdvsHMljp95i/mtaICqofdztqR7l1Bb0IyeyZUbFZeiWWq+D9c?= =?us-ascii?Q?smO/UsSTqtUECXeZWhOdzh8JQIEc8mZIKHaJkgJijlUMHS88SznwGN4YsBxW?= =?us-ascii?Q?SA39/te2QgaAGILWGHq6K7m9ZermvifoP0ehh3N9sYRniyWuA5k+TPpmuShb?= =?us-ascii?Q?lxr2uRmsXCkPH1T5ukNGy2nAkjrqqa8J/kysHWmzjBov2y4hY8GaEiL+qkoS?= =?us-ascii?Q?FAgNB8Q20/pFizz7n2ohLzUY/FP1e0eE0C3E/dq62KVbvSpFEZbFQ9XgeJVk?= =?us-ascii?Q?LF2HLLaDSQ=3D=3D?= X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-Network-Message-Id: c6b6d4f9-5953-4661-23f8-08de7b7a0d0c X-MS-Exchange-CrossTenant-AuthSource: SJ0PR18MB4479.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2026 12:15:27.0089 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TH88eEfkXjoo8a8R0cMY7ZHWxRBg+mLP5fSpjWNFRXUDVZuHVIjuEiqUoLx2FOHCRj5uxwvAMsrW1VIk3JYLHA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA2PR18MB5977 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=lists.gnu.org; Received-SPF: pass client-ip=52.101.85.127; envelope-from=kchiu@axiado.com; helo=BYAPR05CU005.outbound.protection.outlook.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 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, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.411, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.679, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @axiado.com) X-ZM-MESSAGEID: 1772799684560158500 Content-Type: text/plain; charset="utf-8" This patch adds new model for Axiado SoC AX3000 which supports 4 Cortex-A53 ARM64 CPUs Arm Generic Interrupt Controller v3 4 Cadence UARTs 1 SDHCI controller with PHY Signed-off-by: Kuan-Jui Chiu --- hw/arm/Kconfig | 8 + hw/arm/axiado-soc.c | 287 ++++++++++++++++++++++++++++++++++++ hw/arm/meson.build | 2 + include/hw/arm/axiado-soc.h | 152 +++++++++++++++++++ 4 files changed, 449 insertions(+) create mode 100644 hw/arm/axiado-soc.c create mode 100644 include/hw/arm/axiado-soc.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index c66c452737..a91b81b298 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -699,3 +699,11 @@ config ARMSSE select UNIMP select SSE_COUNTER select SSE_TIMER + +config AXIADO_SOC + bool + default y + depends on ARM + select ARM_GIC + select CADENCE # UART + select SDHCI diff --git a/hw/arm/axiado-soc.c b/hw/arm/axiado-soc.c new file mode 100644 index 0000000000..e23410c147 --- /dev/null +++ b/hw/arm/axiado-soc.c @@ -0,0 +1,287 @@ +/* + * Axiado SoC AX3000 + * + * Author: Kuan-Jui Chiu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "system/address-spaces.h" +#include "hw/arm/bsa.h" +#include "hw/arm/axiado-soc.h" +#include "system/system.h" +#include "qobject/qlist.h" +#include "qom/object.h" + +static uint64_t sdhci_phy_read(void *opaque, hwaddr offset, unsigned size) +{ + uint32_t val =3D 0x00; + + switch (offset) { + case REG_ID: + val =3D 0x3dff6870; + break; + case REG_STATUS: + // Make DLL_RDY | CAL_DONE + val =3D (1u << 0) | (1u << 6); + break; + default: + break; + } + + return val; +} + +static void sdhci_phy_write(void *opaque, hwaddr offset, uint64_t val, uns= igned size) +{ + /* TBD */ +} + +static const MemoryRegionOps sdhci_phy_ops =3D { + .read =3D sdhci_phy_read, + .write =3D sdhci_phy_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static uint64_t timer_ctrl_read(void *opaque, hwaddr offset, unsigned size) +{ + return 0x0; +} + +static void timer_ctrl_write(void *opaque, hwaddr offset, uint64_t val, un= signed size) +{ + /* TBD */ +} + +static const MemoryRegionOps timer_ctrl_ops =3D { + .read =3D timer_ctrl_read, + .write =3D timer_ctrl_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static uint64_t pll_read(void *opaque, hwaddr offset, unsigned size) +{ + switch (offset) { + case CLKRST_CPU_PLL_POSTDIV_OFFSET: + return 0x20891b; + case CLKRST_CPU_PLL_STS_OFFSET: + return 0x01; + default: + return 0x00; + } +} + +static void pll_write(void *opaque, hwaddr offset, uint64_t val, unsigned = size) +{ + /* TBD */ +} + +static const MemoryRegionOps pll_ops =3D { + .read =3D pll_read, + .write =3D pll_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static void ax3000_init(Object *obj) +{ + AxiadoSoCState *s =3D AXIADO_SOC(obj); + AxiadoSoCClass *sc =3D AXIADO_SOC_GET_CLASS(s); + int i; + + for (i =3D 0; i < sc->num_cpus; i++) { + g_autofree char *name =3D g_strdup_printf("cpu%d", i); + object_initialize_child(obj, name, &s->cpu[i], ARM_CPU_TYPE_NAME("= cortex-a53")); + } + + object_initialize_child(obj, "gic", &s->gic, gicv3_class_name()); + + for (i =3D 0; i < AX3000_NUM_UARTS; i++) { + g_autofree char *name =3D g_strdup_printf("uart%d", i); + object_initialize_child(obj, name, &s->uart[i], TYPE_CADENCE_UART); + } + + object_initialize_child(obj, "sdhci0", &s->sdhci0, TYPE_SYSBUS_SDHCI); +} + +static void ax3000_realize(DeviceState *dev, Error **errp) +{ + AxiadoSoCState *s =3D AXIADO_SOC(dev); + AxiadoSoCClass *sc =3D AXIADO_SOC_GET_CLASS(s); + SysBusDevice *gicsbd =3D SYS_BUS_DEVICE(&s->gic); + DeviceState *gicdev =3D DEVICE(&s->gic); + QList *redist_region_count; + int i; + + /* CPUs */ + for (i =3D 0; i < sc->num_cpus; i++) { + object_property_set_int(OBJECT(&s->cpu[i]), "cntfrq", 8000000, + &error_abort); + + if (object_property_find(OBJECT(&s->cpu[i]), "has_el3")) { + object_property_set_bool(OBJECT(&s->cpu[i]), "has_el3", + false, &error_abort); + } + + if (!qdev_realize(DEVICE(&s->cpu[i]), NULL, errp)) { + return; + } + } + + /* GIC */ + qdev_prop_set_uint32(gicdev, "num-cpu", sc->num_cpus); + qdev_prop_set_uint32(gicdev, "num-irq", + AX3000_NUM_IRQS + GIC_INTERNAL); + + redist_region_count =3D qlist_new(); + qlist_append_int(redist_region_count, sc->num_cpus); + qdev_prop_set_array(gicdev, "redist-region-count", redist_region_count= ); + + if (!sysbus_realize(gicsbd, errp)) { + return; + } + + sysbus_mmio_map(gicsbd, 0, AX3000_GIC_DIST_BASE); + sysbus_mmio_map(gicsbd, 1, AX3000_GIC_REDIST_BASE); + + /* + * Wire the outputs from each CPU's generic timer and the GICv3 + * maintenance interrupt signal to the appropriate GIC PPI inputs, and + * the GIC's IRQ/FIQ interrupt outputs to the CPU's inputs. + */ + for (i =3D 0; i < sc->num_cpus; i++) { + DeviceState *cpudev =3D DEVICE(&s->cpu[i]); + int intidbase =3D AX3000_NUM_IRQS + i * GIC_INTERNAL; + qemu_irq irq; + + /* + * Mapping from the output timer irq lines from the CPU to the + * GIC PPI inputs. + */ + static const int timer_irqs[] =3D { + [GTIMER_PHYS] =3D ARCH_TIMER_NS_EL1_IRQ, + [GTIMER_VIRT] =3D ARCH_TIMER_VIRT_IRQ, + [GTIMER_HYP] =3D ARCH_TIMER_NS_EL2_IRQ, + [GTIMER_SEC] =3D ARCH_TIMER_S_EL1_IRQ + }; + + for (int j =3D 0; j < ARRAY_SIZE(timer_irqs); j++) { + irq =3D qdev_get_gpio_in(gicdev, intidbase + timer_irqs[j]); + qdev_connect_gpio_out(cpudev, j, irq); + } + + irq =3D qdev_get_gpio_in(gicdev, intidbase + ARCH_GIC_MAINT_IRQ); + qdev_connect_gpio_out_named(cpudev, "gicv3-maintenance-interrupt", + 0, irq); + + sysbus_connect_irq(gicsbd, i, + qdev_get_gpio_in(cpudev, ARM_CPU_IRQ)); + sysbus_connect_irq(gicsbd, i + sc->num_cpus, + qdev_get_gpio_in(cpudev, ARM_CPU_FIQ)); + sysbus_connect_irq(gicsbd, i + 2 * sc->num_cpus, + qdev_get_gpio_in(cpudev, ARM_CPU_VIRQ)); + sysbus_connect_irq(gicsbd, i + 3 * sc->num_cpus, + qdev_get_gpio_in(cpudev, ARM_CPU_VFIQ)); + } + + /* DRAM */ + for (i =3D 0; i < AX3000_NUM_BANKS; i++) { + struct { + hwaddr addr; + size_t size; + const char *name; + } dram_table[] =3D { + { AX3000_DRAM0_BASE, AX3000_DRAM0_SIZE, "dram0" }, + { AX3000_DRAM1_BASE, AX3000_DRAM1_SIZE, "dram1" } + }; + + memory_region_init_ram(&s->dram[i], OBJECT(s), dram_table[i].name, + dram_table[i].size, &error_fatal); + memory_region_add_subregion(get_system_memory(), dram_table[i].add= r, + &s->dram[i]); + } + + /* UARTs */ + for (i =3D 0; i < AX3000_NUM_UARTS; i++) { + struct { + hwaddr addr; + unsigned int irq; + } serial_table[] =3D { + { AX3000_UART0_BASE, AX3000_UART0_IRQ }, + { AX3000_UART1_BASE, AX3000_UART1_IRQ }, + { AX3000_UART2_BASE, AX3000_UART2_IRQ }, + { AX3000_UART3_BASE, AX3000_UART3_IRQ } + }; + + qdev_prop_set_chr(DEVICE(&s->uart[i]), "chardev", serial_hd(i)); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->uart[i]), errp)) { + return; + } + + sysbus_mmio_map(SYS_BUS_DEVICE(&s->uart[i]), 0, serial_table[i].ad= dr); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0, + qdev_get_gpio_in(gicdev, serial_table[i].irq)); + } + + /* Timer control*/ + memory_region_init_io(&s->timer_ctrl, OBJECT(s), &timer_ctrl_ops, s, + "timer_ctrl", 32); + memory_region_add_subregion(get_system_memory(), AX3000_TIMER_CTRL, + &s->timer_ctrl); + + /* PLL control */ + memory_region_init_io(&s->pll_ctrl, OBJECT(s), &pll_ops, s, "pll_ctrl", + 32); + memory_region_add_subregion(get_system_memory(), AX3000_PLL_BASE, + &s->pll_ctrl); + + /* SDHCI */ + qdev_prop_set_uint64(DEVICE(&s->sdhci0), "capareg", 0x216737eed0b0); + qdev_prop_set_uint64(DEVICE(&s->sdhci0), "sd-spec-version", 3); + + if (!sysbus_realize(SYS_BUS_DEVICE(&s->sdhci0), errp)) { + return; + } + + sysbus_mmio_map(SYS_BUS_DEVICE(&s->sdhci0), 0, AX3000_SDHCI0_BASE); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci0), 0, + qdev_get_gpio_in(gicdev, AX3000_SDHCI0_IRQ)); + + memory_region_init_io(&s->sdhci_phy, OBJECT(s), &sdhci_phy_ops, s, + "sdhci_phy", AX3000_SDHCI0_PHY_SIZE); + memory_region_add_subregion(get_system_memory(), AX3000_SDHCI0_PHY_BAS= E, + &s->sdhci_phy); +} + +static void ax3000_class_init(ObjectClass *oc, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + AxiadoSoCClass *sc =3D AXIADO_SOC_CLASS(oc); + + dc->desc =3D "Axiado SoC AX3000"; + dc->realize =3D ax3000_realize; + sc->num_cpus =3D AX3000_NUM_CPUS; +} + +static const TypeInfo axiado_soc_types[] =3D { + { + .name =3D TYPE_AXIADO_SOC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(AxiadoSoCState), + .instance_init =3D ax3000_init, + .class_init =3D ax3000_class_init, + } +}; + +DEFINE_TYPES(axiado_soc_types) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index 47cdc51d13..c3c96c0a70 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -105,6 +105,8 @@ arm_common_ss.add(when: 'CONFIG_STRONGARM', if_true: fi= les('strongarm.c')) arm_common_ss.add(when: 'CONFIG_SX1', if_true: files('omap_sx1.c')) arm_common_ss.add(when: 'CONFIG_VERSATILE', if_true: files('versatilepb.c'= )) arm_common_ss.add(when: 'CONFIG_VEXPRESS', if_true: files('vexpress.c')) +arm_common_ss.add(when: ['CONFIG_AXIADO_SOC', 'TARGET_AARCH64'], if_true: = files( + 'axiado-soc.c')) =20 arm_common_ss.add(files('boot.c')) =20 diff --git a/include/hw/arm/axiado-soc.h b/include/hw/arm/axiado-soc.h new file mode 100644 index 0000000000..2483bdd8c2 --- /dev/null +++ b/include/hw/arm/axiado-soc.h @@ -0,0 +1,152 @@ +/* + * Axiado SoC AX3000 + * + * Author: Kuan-Jui Chiu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#ifndef AXIADO_AX3000_H +#define AXIADO_AX3000_H + +#include "cpu.h" +#include "hw/intc/arm_gicv3_common.h" +#include "hw/char/cadence_uart.h" +#include "hw/sd/sdhci.h" +#include "hw/core/sysbus.h" +#include "qemu/units.h" + +#define TYPE_AXIADO_SOC "ax3000" +OBJECT_DECLARE_TYPE(AxiadoSoCState, AxiadoSoCClass, AXIADO_SOC) + +#define AX3000_RAM_START 0x3C000000 +#define AX3000_RAM_SIZE_MAX (16 * GiB) + +#define AX3000_DRAM0_BASE AX3000_RAM_START +#define AX3000_DRAM0_SIZE (1088 * MiB) +#define AX3000_DRAM1_BASE 0x400000000 +#define AX3000_DRAM1_SIZE (2 * GiB) + +#define AX3000_GIC_DIST_BASE 0x80300000 +#define AX3000_GIC_DIST_SIZE (64 * KiB) +#define AX3000_GIC_REDIST_BASE 0x80380000 +#define AX3000_GIC_REDIST_SIZE (512 * KiB) + +#define AX3000_UART0_BASE 0x80520000 +#define AX3000_UART0_SIZE (256) +#define AX3000_UART1_BASE 0x805a0000 +#define AX3000_UART1_SIZE (256) +#define AX3000_UART2_BASE 0x80620000 +#define AX3000_UART2_SIZE (256) +#define AX3000_UART3_BASE 0x80520800 +#define AX3000_UART3_SIZE (256) + +#define AX3000_SDHCI0_BASE 0x86000000 +#define AX3000_SDHCI0_PHY_BASE 0x80801C00 +#define AX3000_SDHCI0_PHY_SIZE (256) + +#define AX3000_GPIO0_BASE 0x80500000 +#define AX3000_GPIO0_SIZE (1024) +#define AX3000_GPIO1_BASE 0x80580000 +#define AX3000_GPIO1_SIZE (1024) +#define AX3000_GPIO2_BASE 0x80600000 +#define AX3000_GPIO2_SIZE (1024) +#define AX3000_GPIO3_BASE 0x80680000 +#define AX3000_GPIO3_SIZE (1024) +#define AX3000_GPIO4_BASE 0x80700000 +#define AX3000_GPIO4_SIZE (1024) +#define AX3000_GPIO5_BASE 0x80780000 +#define AX3000_GPIO5_SIZE (1024) +#define AX3000_GPIO6_BASE 0x80800000 +#define AX3000_GPIO6_SIZE (1024) +#define AX3000_GPIO7_BASE 0x80880000 +#define AX3000_GPIO7_SIZE (1024) + +#define AX3000_TIMER_CTRL 0x8A020000 +#define AX3000_PLL_BASE 0x80000000 +#define CLKRST_CPU_PLL_POSTDIV_OFFSET 0x0C +#define CLKRST_CPU_PLL_STS_OFFSET 0x14 + + +enum Ax3000Configuration { + AX3000_NUM_CPUS =3D 4, + AX3000_NUM_IRQS =3D 224, + AX3000_NUM_BANKS =3D 2, + AX3000_NUM_UARTS =3D 4, + AX3000_NUM_GPIOS =3D 8, +}; + +typedef struct AxiadoSoCState { + SysBusDevice parent; + + ARMCPU cpu[AX3000_NUM_CPUS]; + GICv3State gic; + MemoryRegion dram[AX3000_NUM_BANKS]; + MemoryRegion timer_ctrl; + MemoryRegion pll_ctrl; + CadenceUARTState uart[AX3000_NUM_UARTS]; + SDHCIState sdhci0; + MemoryRegion sdhci_phy; +} AxiadoSoCState; + +typedef struct AxiadoSoCClass { + SysBusDeviceClass parent; + + uint32_t num_cpus; +} AxiadoSoCClass; + +enum Ax3000MemoryRegions { + AX3000_GIC_DIST, + AX3000_GIC_REDIST, + AX3000_DRAM0, + AX3000_DRAM1, + AX3000_UART0, + AX3000_UART1, + AX3000_UART2, + AX3000_UART3, + AX3000_SDHCI0, + AX3000_GPIO0, + AX3000_GPIO1, + AX3000_GPIO2, + AX3000_GPIO3, + AX3000_GPIO4, + AX3000_GPIO5, + AX3000_GPIO6, + AX3000_GPIO7, +}; + +enum Ax3000Irqs { + AX3000_UART0_IRQ =3D 112, + AX3000_UART1_IRQ =3D 113, + AX3000_UART2_IRQ =3D 114, + AX3000_UART3_IRQ =3D 170, + + AX3000_SDHCI0_IRQ =3D 123, + + AX3000_GPIO0_IRQ =3D 183, + AX3000_GPIO1_IRQ =3D 184, + AX3000_GPIO2_IRQ =3D 185, + AX3000_GPIO3_IRQ =3D 186, + AX3000_GPIO4_IRQ =3D 187, + AX3000_GPIO5_IRQ =3D 188, + AX3000_GPIO6_IRQ =3D 189, + AX3000_GPIO7_IRQ =3D 190, +}; + +enum SDHCI_PHY_REG { + REG_ID =3D 0x00, // ID + REG_STATUS =3D 0x50, // READY/LOCK/CAL_DONE bits +}; + +#endif /* AXIADO_AX3000_H */ --=20 2.34.1 From nobody Mon Apr 13 12:33:05 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=axiado.com) ARC-Seal: i=2; a=rsa-sha256; t=1772799385; cv=pass; d=zohomail.com; s=zohoarc; b=FPObZw94Wb8vcMNI0XKkMMDep412w3FKzaG7EFG27cfFUbFZ3IJnloevYMTvWTR63vKmSUt3N1OhOhLguuzvPF3SSS6mHeZHtpWitV+joKJlmXOed5LZn7w9x6I1Md1bwh57RLw6Zex7X3JPHO0GLoccWUPBuCvqSO7RZBZlCAk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772799385; 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=kqamMI1Euk1BzPDOmezYGSMzxAW/2jSDoX9x7hsRPXE=; b=eX4D0mF6khKhdvzf5oxUNOfzID8MTib5C+SFc1M55+/Cpe7R+L9iD4EYW7VnGC6q+yieDFMXTq3p8BVnq/c614zNqCsbH/HECnEIX+7/BDpXJs0lqYGvEWF5ZUgN6ZXQez1iXJQKh85lUM0p9AEMyVDWNA1bHPh1Ftdt0Y2qeOI= 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=axiado.com) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772799385891978.0360746504836; Fri, 6 Mar 2026 04:16:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyU6K-0007Si-42; Fri, 06 Mar 2026 07:16:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyU6D-0007MC-Cw for qemu-devel@nongnu.org; Fri, 06 Mar 2026 07:16:09 -0500 Received: from mail-northcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c105::7] helo=CH4PR04CU002.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 1vyU6B-0008PE-1U for qemu-devel@nongnu.org; Fri, 06 Mar 2026 07:16:09 -0500 Received: from SJ0PR18MB4479.namprd18.prod.outlook.com (2603:10b6:a03:37f::19) by IA2PR18MB5977.namprd18.prod.outlook.com (2603:10b6:208:4ba::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.17; Fri, 6 Mar 2026 12:15:27 +0000 Received: from SJ0PR18MB4479.namprd18.prod.outlook.com ([fe80::eaf4:3aec:73e:d5ba]) by SJ0PR18MB4479.namprd18.prod.outlook.com ([fe80::eaf4:3aec:73e:d5ba%3]) with mapi id 15.20.9678.017; Fri, 6 Mar 2026 12:15:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U+eZ/fl+yuFpMIkANKZGncC11RSivNnYY600vkmAa/lytpEhqnm5VIf7wc/FTDgYZpGvq9lZxRAxZGl/N7ls1kINpFzHYNVAy7ZVuXDQymtEhF1goBa7ywkUzgO5U9gronXp98UvGrBdqTnK1HulOrOZoWW2MI7LfmwYENauQdh91QzOyk6+646clkWStdvIyui+gIi9x74fGvLmrv4e3sns8JoHwR5QQzWs+PbUTEG+IiwYmRNPUcrV3/AtAx3SOaHtaWcsh24HvcdBdUYPYjzSLmDuhUrChuI6bbTHvlPVQ83BdiiKJZw5AcIq9cQpyoot4KBVFTsJVMqGUI8z/g== 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=kqamMI1Euk1BzPDOmezYGSMzxAW/2jSDoX9x7hsRPXE=; b=c5+ofvNNRJIjW5c3QzlODVzMF2kubvW/pF19hO5fcKhn8R9UODuPJzjaBMVE0ISSEms7BIJQfHsQg2swoDy+dC5nlj6VVx71x36ZHdGrcD3yRWBT7zcRfX0YrGris4V4wpbG+f7SExsr75PEyC86cIlCD4NBDWZIQ5Ev1fwZpMjzzBO2yz2WiHtNC+z+0Vw+gmDs4vMldzLm93b5vLa+Twv/dqXsoZ5VZGlenog31OfDgKgOZrKIBPgJcXS3/6Yqeb4vigaHkp4TeUlVBTlzTKPEyLkB+k9HuC1wUhL1xXADIegt3WxqHfh9y0INFKUlfv7Vip81njJs5wYH7gMMBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=axiado.com; dmarc=pass action=none header.from=axiado.com; dkim=pass header.d=axiado.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axiado.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kqamMI1Euk1BzPDOmezYGSMzxAW/2jSDoX9x7hsRPXE=; b=Enootx0JwQYqgnOzcztjagPNMcnidGPYhBFWJHnTrr814z2MzB28WuD2wh2DWuN3a99jLkmDlHeyylt/GHVmbq5Ti9KMtsS+vc2X3U4lRqAdLrstKnryZ4LF0Kjn3XHPIRAQqiKfveoS5OCltVOOv3Spbir9rq8GYmSN8JQBzRgDAddfONlXxF2JzEaAqi8dBj5vKruUSE99yNpPYsRhCVvEXwy4G2ePHzwyt+/hKvo7VQZtOYPldUW/o8U3aseuj1dc1e5X3ojxRmq91JuBLG3W8NHC5zudCkGG2CB7Mwb7nRKLievilQX0+R7tgiEGZEvY24V0/TOBUiVpALJcpw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org Cc: Kuan-Jui Chiu Subject: [PATCH v1 2/2] hw/arm: Add Axiado EVK board Date: Fri, 6 Mar 2026 04:15:11 -0800 Message-Id: <20260306121511.1781020-3-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260306121511.1781020-1-kchiu@axiado.com> References: <20260306121511.1781020-1-kchiu@axiado.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH5P222CA0007.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:34b::13) To SJ0PR18MB4479.namprd18.prod.outlook.com (2603:10b6:a03:37f::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR18MB4479:EE_|IA2PR18MB5977:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b2632a1-4a8f-4565-a67a-08de7b7a0d60 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|366016|376014|52116014|38350700014|13003099007; X-Microsoft-Antispam-Message-Info: aIbteRHlpyjVrRnuFVnc68PbMxVeCJlnkA9eMojq47YzngDXoxkpe7iLyEwCaz2pN3VWLffnZiJQdDztWCEHSKik+TLMlExscLeensmYiaIEz/S0xQM1QfEsVPr+kI7v3vpDjcGTfr+JrC7fXS52828dUb4EaBXouSwWhNTtzLYac9u2XA+cjwuMVhnjxntV/0GUIGJWCj09j3TNHyBkKmlg9aTrdfKw7jH+94nmk+Pj5LEIFeWb0+m3Szz7JAm69IzkNFrYVRou39TY3DhcYMbjCamBC7j8lr+PNo6a+ue+X+0bkh3hd3N1+YTVwv3HiZDPqoDpkQbG9lG8vPoawWaNUOzkGXtukBKjaWBpHlRVk4dAKn35Jg/Qy/pa8/0O3+O0503mG3Oxs6rN4MHVylt9Iqf3UIeYxN7/JUaAOyGaJcz3diWlBz4dCuGOkVJ6JsrX1D5SSH6D19kfAVeA7XM5GQRI1RZb6voKMiOdHRFy8w25jjD7F/6NotB2lVxoD6a29/bYliB4u8c89fQiI0nj7Ns8gKpmzl2l2SvzQk7prBdVGZCjdE1+ymaEUF9U4KNbevZCmNfGiuKdqmLM/X1xglnXGKOBtqg0UMQ9jkgZeON6v+xixVZprFr7PepmAx3q+J6lghQ5tu7MpN+P+ZtOMVf8cAQTZ1vymTqoVVTo5sJlAz9iTBgwrJuVBMcw5VsG0MmIfAYDg3CkcUX53LVVZFz1TrUhMnmAKMlcEH1FdYehSh4iA8hW5zlHMeITxXahCV5fPllHSyqRddHnkdmlvTJn8EnCFc2tGqaTZso= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR18MB4479.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(52116014)(38350700014)(13003099007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?miC1MiiTcG04VhhmeulHFG+ipmnWnT67TP9a9WiE2z5fHYbBPbXkLorsbQwV?= =?us-ascii?Q?nM1bczdffOsSuwTVKUAxZDCpyxYka9SAoLMjDw7YqO7QBFTVY5T+lwido6kw?= =?us-ascii?Q?ypwJwfbqCY6fp2JcOt/m11a6/UquKyxw7JbdUh/YgIQl/5ZqUm47EZA+KL78?= =?us-ascii?Q?oUiN/x+8eyVH48l4xeNY53qFDcrvkIUFGWf6proGdBJs+fbEAkE3xgrUQ5rY?= =?us-ascii?Q?CAL8BgeFni10uuEGY5fV41ZKZ0Hj0x9As9YNEavTwrXeIgPBNPwkVSfdJa0+?= =?us-ascii?Q?KEfXBf9ALRY80pnu6+a6XGguEKeSt+EAmGt8zSPrYEpnWQIZknyFVd+c25Fw?= =?us-ascii?Q?a66WTyl64sPsgdO78Vr1urxVGK1GfS8j3u+n/GoHgiQddh0vCErPjS4wzglc?= =?us-ascii?Q?qrP6gFo3gVrOLfYIJy08T50bm1OiW66Ucgb1KJIxzm0c4kbq5S+q+5AWvXWx?= =?us-ascii?Q?LuCYssX2ofbIFhnUuzXwGMFXBQXlyGF+4mEUZOO7Ph7pMs3qhsIoKOwfCCCg?= =?us-ascii?Q?bZ4JYMUlI9QBoqSXwJFeAFCYx/2ihYnpHfRpTnM//kRYpNLWX1pY41qIBt2/?= =?us-ascii?Q?ZSR/5ZCfft14Y93bSu/M6Uz+AMovb0s+BieE1f0DEwzBrBJLaoU8T/9obm+w?= =?us-ascii?Q?mgraYrMjOuN7Nu9wNw++UkUMKSfgixeSinoqAkwAGhaCYzbf4tIn37kpLXKV?= =?us-ascii?Q?32/Q0DjbD9Lvp0vSlAMCR6g07lM5Kitt3a00ngZkm9B7XinVWA9daJYoA2/f?= =?us-ascii?Q?9Ybp4rgNgdfjMOjyznOmI9Axmn0dXAtasd2QS/dpO/dXKvVwwkoBW9DBbT6x?= =?us-ascii?Q?SJYE7dmiGR3SYSIpReRR/f26gSHo07dpGBBa5Agv2n7MrIdhr780pPGrEhH4?= =?us-ascii?Q?w3nMBlHyV57DLLgCGG+/ebFpeEr3cAurZdRBczHq7/iEGUCMVGVWNFFpfIRy?= =?us-ascii?Q?FjxCEVE4MTdmeLhh94RoLwMpMCTpB2cMiF7SsbPcu8QNysauUWLl6DdO/E4W?= =?us-ascii?Q?7RbOE89yPyk06k/mzP05MtKW7lHBPMsjBS6cz6nXJpWW+WzPrRPISgwE965R?= =?us-ascii?Q?705/nwFSdCFhF22HbVDUnlOShYvhVoCbpPCV4xvDvqDORxTRa2g2I3MUDHee?= =?us-ascii?Q?QsJMgPx7/JVB1dDmoIo4EJ0Ro7lSsYMPKlsrtamZfNhRlal/NKb6UcdT7Agt?= =?us-ascii?Q?5jLe/0SfX9ywz2xJHjWMD8C/2zsuW7Efiilf9c8a7dLEgCU+wtS3unQOf+DE?= =?us-ascii?Q?6DDkOBIHZJWmTmag1ZAGINYcofdwY6YiueyEZzPb3AonE34DvC59a1Gb08Py?= =?us-ascii?Q?DzaO2lCdl+FYY7OvPv3rmKadx1Gx9lb2rlY9HEqVR0luxuQTcumOLpQayO9A?= =?us-ascii?Q?x1/Clapusy7/C1YMtLJURgI2eRBAKAgtE8+bVIM0P3ZR3aXZGmfvacokt6xX?= =?us-ascii?Q?JnRYqxAJlI8MrECXyI3u9IoKq8kmCyCC+2G51ki/pmClRyP4xP7IOc0/P4SR?= =?us-ascii?Q?pR+4Wo/F9tA5c7GafMm6KkqScghBIQ266hQl7Y0a7ieJcYdWpyqA67wMR0Ux?= =?us-ascii?Q?pcT4nv3Nsw/LCWvLRk+tuu70AajR20KyNGFFexvZEmMbee40qYCNv+GAUxoH?= =?us-ascii?Q?9Va4LmJ57LC7oXyheSgN3z60flr1sm3zHoaxFCbEJVg8SG9w/+Vi1WJGAPGq?= =?us-ascii?Q?6aOnMs1n4ldWgavZnuYI/qUrKMlfd/LDvplyjUOlg6nSsBswv1D5rQXTcJUm?= =?us-ascii?Q?V0kj+XFGKg=3D=3D?= X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b2632a1-4a8f-4565-a67a-08de7b7a0d60 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR18MB4479.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2026 12:15:27.5141 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MvDFXMdwQp6xdZiUmf6w9ll3sBNQ9AqkZMkEEW26Q8kEj94s7ygdvxfCEoCChJtgAk2G0w8n0dETkD9sy+NMsQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA2PR18MB5977 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=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c105::7; envelope-from=kchiu@axiado.com; helo=CH4PR04CU002.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 @axiado.com) X-ZM-MESSAGEID: 1772799388248154100 Content-Type: text/plain; charset="utf-8" This patch adds a new model for Axiado SCM3003 EVK with Axiado SoC AX3000 Signed-off-by: Kuan-Jui Chiu --- hw/arm/axiado-boards.c | 78 ++++++++++++++++++++++++++++++++++ hw/arm/axiado-evk.c | 38 +++++++++++++++++ hw/arm/meson.build | 4 +- include/hw/arm/axiado-boards.h | 41 ++++++++++++++++++ 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 hw/arm/axiado-boards.c create mode 100644 hw/arm/axiado-evk.c create mode 100644 include/hw/arm/axiado-boards.h diff --git a/hw/arm/axiado-boards.c b/hw/arm/axiado-boards.c new file mode 100644 index 0000000000..802d2e5665 --- /dev/null +++ b/hw/arm/axiado-boards.c @@ -0,0 +1,78 @@ +/* + * Axiado Boards + * + * Author: Kuan-Jui Chiu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "hw/arm/axiado-boards.h" +#include "hw/arm/machines-qom.h" +#include "qemu/error-report.h" +#include "qom/object.h" + +static void axiado_machine_init(MachineState *machine) +{ + AxiadoMachineState *ams =3D AXIADO_MACHINE(machine); + AxiadoMachineClass *amc =3D AXIADO_MACHINE_GET_CLASS(machine); + + if (machine->ram_size > AX3000_RAM_SIZE_MAX) { + error_report("RAM size " RAM_ADDR_FMT " above max supported (%08" = PRIx64 ")", + machine->ram_size, AX3000_RAM_SIZE_MAX); + exit(1); + } + + ams->soc =3D AXIADO_SOC(object_new(amc->soc_type)); + object_property_add_child(OBJECT(machine), "soc", OBJECT(ams->soc)); + sysbus_realize_and_unref(SYS_BUS_DEVICE(ams->soc), &error_fatal); + + DeviceState *card =3D qdev_new(TYPE_SD_CARD); + DriveInfo *di =3D drive_get(IF_SD, 0, 0); + qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(di), &error= _fatal); + qdev_realize_and_unref(card, qdev_get_child_bus(DEVICE(&ams->soc->sdhc= i0), + "sd-bus"), &error_fatal); +} + +static const char *axiado_machine_get_default_cpu_type(const MachineState = *ms) +{ + return ARM_CPU_TYPE_NAME("cortex-a53"); +} + +static void axiado_machine_class_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + AxiadoMachineClass *amc =3D AXIADO_MACHINE_CLASS(oc); + + mc->init =3D axiado_machine_init; + mc->default_cpus =3D AX3000_NUM_CPUS; + mc->min_cpus =3D AX3000_NUM_CPUS; + mc->max_cpus =3D AX3000_NUM_CPUS; + mc->get_default_cpu_type =3D axiado_machine_get_default_cpu_type; + amc->soc_type =3D TYPE_AXIADO_SOC; +} + +static const TypeInfo axiado_machine_types[] =3D { + { + .name =3D TYPE_AXIADO_MACHINE, + .parent =3D TYPE_MACHINE, + .instance_size =3D sizeof(AxiadoMachineState), + .class_size =3D sizeof(AxiadoMachineClass), + .class_init =3D axiado_machine_class_init, + .interfaces =3D aarch64_machine_interfaces, + .abstract =3D true, + } +}; + +DEFINE_TYPES(axiado_machine_types) diff --git a/hw/arm/axiado-evk.c b/hw/arm/axiado-evk.c new file mode 100644 index 0000000000..ddfb68d5c0 --- /dev/null +++ b/hw/arm/axiado-evk.c @@ -0,0 +1,38 @@ +/* + * Axiado Evaluation Kit Emulation + * + * Author: Kuan-Jui Chiu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "hw/arm/axiado-boards.h" + +static void axiado_scm3003_class_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + + mc->desc =3D "Axiado SCM3003 EVK Board"; +} + +static const TypeInfo axiado_evk_types[] =3D { + { + .name =3D MACHINE_TYPE_NAME("axiado-scm3003"), + .parent =3D TYPE_AXIADO_MACHINE, + .class_init =3D axiado_scm3003_class_init, + } +}; + +DEFINE_TYPES(axiado_evk_types) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index c3c96c0a70..993a95d33a 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -106,7 +106,9 @@ arm_common_ss.add(when: 'CONFIG_SX1', if_true: files('o= map_sx1.c')) arm_common_ss.add(when: 'CONFIG_VERSATILE', if_true: files('versatilepb.c'= )) arm_common_ss.add(when: 'CONFIG_VEXPRESS', if_true: files('vexpress.c')) arm_common_ss.add(when: ['CONFIG_AXIADO_SOC', 'TARGET_AARCH64'], if_true: = files( - 'axiado-soc.c')) + 'axiado-soc.c', + 'axiado-boards.c', + 'axiado-evk.c')) =20 arm_common_ss.add(files('boot.c')) =20 diff --git a/include/hw/arm/axiado-boards.h b/include/hw/arm/axiado-boards.h new file mode 100644 index 0000000000..f17d513572 --- /dev/null +++ b/include/hw/arm/axiado-boards.h @@ -0,0 +1,41 @@ +/* + * Axiado Boards + * + * Author: Kuan-Jui Chiu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 or + * (at your option) version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#ifndef AXIADO_BOARD_H +#define AXIADO_BOARD_H + +#include "hw/core/boards.h" +#include "hw/arm/axiado-soc.h" + +#define TYPE_AXIADO_MACHINE MACHINE_TYPE_NAME("axiado") +OBJECT_DECLARE_TYPE(AxiadoMachineState, AxiadoMachineClass, AXIADO_MACHINE) + +typedef struct AxiadoMachineState { + MachineState parent; + + AxiadoSoCState *soc; +} AxiadoMachineState; + +typedef struct AxiadoMachineClass { + MachineClass parent; + + const char *soc_type; +} AxiadoMachineClass; + +#endif --=20 2.34.1