From nobody Mon Jun 8 04:26:14 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=1780382133; cv=pass; d=zohomail.com; s=zohoarc; b=MPVRMEFD9zkyzTcLVs5wJDwG/hHtOQ+mXousJXDKCSbrpX+OtCwY7FKxohyvz+5A7fQorJq9/yjWJXqzEzC2Qmxj0zBcoRwUoNAUrjBqJ/266hQD4au55ejf+w1XEEwJfjT50cZRdAxyxn8vJIxtnE7WNBXzRRMRt+A9nmZ6inM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780382133; 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=kqDuTLlbD/pqC07vlzjNCr3/ydrt2tHEEBebMBQfS8k=; b=IdrfstJUM1mfjwwYOsxBxiTTAfMh+PJFtkjGM7uFC3QUtAWc8U5JqweMtXwQ8rfrKHRwNTMbKTpbbNEahZlGFQNZpij+XnzZxpXnNbmSA2VAJHnQ/SiQDfJjZk4WhYfOY8Im1sUu0s+1CpfuFMBsF3tqho8OxUQAytykbTocgnc= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178038213369972.32100825572286; Mon, 1 Jun 2026 23:35:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUIhb-0005lZ-7Z; Tue, 02 Jun 2026 02:34: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 1wUIhS-0005gV-P2 for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:07 -0400 Received: from mail-centralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c111::5] helo=DM1PR04CU001.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 1wUIhN-0004bs-Qe for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:05 -0400 Received: from SN7PR18CA0006.namprd18.prod.outlook.com (2603:10b6:806:f3::8) by CO6PR18MB4452.namprd18.prod.outlook.com (2603:10b6:303:13e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.17; Tue, 2 Jun 2026 06:33:56 +0000 Received: from SA2PEPF00003F61.namprd04.prod.outlook.com (2603:10b6:806:f3:cafe::8e) by SN7PR18CA0006.outlook.office365.com (2603:10b6:806:f3::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.71.16 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from smtp.corp.axiado.com (64.62.143.114) by SA2PEPF00003F61.mail.protection.outlook.com (10.167.248.36) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.5 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from axiado.com (vm-swbuild01.axiadoRD [10.4.1.181]) by smtp.corp.axiado.com (Postfix) with ESMTP id 6C85D4186B51; Mon, 1 Jun 2026 23:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DjLZDfEv8/A+I22UeT8ZwoNYnqb/nhMyOSn6nEVOGohu8ea40xVoDS8Usm/jHn6Q3Abr0pR61H3Pn3Vx/z8cDKv08qGid6gnyd/wwan6QSyJXtw/cYwPO/kgploB0818oxBb6i3H/Oa6YhCSMhAUyB5+ehwWdsfrgUgioZBDmTMuUlt3huN/3q6vIjVyEgCsSOdnuIrQtdDN1jLpRiT8xNBnOR20z5s5MOZodYQNHFYCZ5TMA/wWRe9oJIS1IuM5yh5dI/EB53ma7kyt2IkpTbhfWKCAh4dN5FamMI1J0pgitwAhkKhZE/Owb1cIKSY5IsObs9+4s1Tw41uLMVpA5Q== 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=kqDuTLlbD/pqC07vlzjNCr3/ydrt2tHEEBebMBQfS8k=; b=zK1/Cc4soy46vL3XPlNLnVoWrmsbhyp0Nstf5Q7DEzbN+F+QmiamH4UjUOg/ifYSsGJyoEAWFmIajkoESFyWPz5xqrSX5xU8Qa4glJOfOK6US2Y5PC9fEKAt5tGiawcRAjGixAr16WSM2rS0i0kVt0Ltu/Cfxp8pHb1ujacMDlwhfBm9nsreqsCkJxEXu+/XUTgyElJksHer7W/qYEJZMEcfytDWonExQCA/HSx0+fpDO3mb3devZqV+2H/MkxAA983z0u/l0kz5zY70Qzr1jk7kTgmdkxjzwtb5/OtaWrSSIE1v69j/sXrLkOCEotAfLYKt4dHctnTTt1OZhJp6KA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) 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=kqDuTLlbD/pqC07vlzjNCr3/ydrt2tHEEBebMBQfS8k=; b=aTYizlM5aJm5Hh7y8Co4OJdi1cT99hxhumNgMRG1AxQju3M3s67+IhjnQL9JobkVb/BbhfjK4AHWF9wyiekMHEVRTCqoSzvVrywM7ugealZsuqii++fG6hQOf6F1KBM+rHs7nTSPAp/hxc70RlP2FcxKqUqpeh6VItT1q2qwHwT/VIBL6DRKEqxjozdHIJl4Ly/SIhsA+g0DJVOMWlyvYOmLTg2mafnjhQMHoIFRhkIr6PtwlUkTjmVT6KTJ74JtQzsCSzOMPlbxEU4yw57vosr6vg8HT/IDM2wLi6ekTAAaeY9nv3j0E+kx5kbsTGlpMYwifAf3QHqazrokY5gA5A== X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; 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: Fail (protection.outlook.com: domain of axiado.com does not designate 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org, peter.maydell@linaro.org Cc: Kuan-Jui Chiu Subject: [PATCH v3 1/6] hw/arm: Add Axiado SoC AX3000 Date: Mon, 1 Jun 2026 23:33:45 -0700 Message-Id: <20260602063350.3623723-2-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260602063350.3623723-1-kchiu@axiado.com> References: <20260602063350.3623723-1-kchiu@axiado.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003F61:EE_|CO6PR18MB4452:EE_ X-MS-Office365-Filtering-Correlation-Id: f30b2a3b-682f-4f2f-5a16-08dec070ec03 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|34020700016|82310400026|1800799024|376014|3023799007|56012099006|18002099003|22082099003|5023799004|6133799003; X-Microsoft-Antispam-Message-Info: TEzEVGuITCcHM/sGsy3q/3Ma9VBQCghZWnpjOhfyCsdcXjFQXNLgzFw3+jbthuZ7OZTEa8DXi7zwdfZcjQDua50AVb6lO3FK40RGdANLetj+1GDxx+ao9xEcylnp6riPxF01t2EKoXaYclI7i/f0vh/Y2V7MUI/OowQZWeKPqqMIOYdToW+TRtKanNH6zWbIZ+Jhq6jbTMLDHzAF6jLjmh34/0zPBdFxjfLdqOMmH0hNxZEh303jeyQPfeBRfffxtWe9tIbT+kvW4yyPuHjnntgLFx1jjbkJ2bnPa60CYwf1vJuO/6ga8cgUeCh6Dls1L+q8HZQ05fOSBSrlVO6lK3vINRx0P1DBHIYrBp9/TMBjTwxLrp/GfQ9kTqJhDGGaatWwYmNCzQ7dTZgBAXKB9ChQz+9DUSTt0IR0pRTSmahZRxFAfroMT3v3Zq4BDjKCF+zW5z1u4bis2tZx1Pu1JW8GyYml6Sn8W4j/zSmHQswH4rKKZU3YAkudkAzqDOXiaoyjyWCBLTQrAmqfPAcNwevfFinUM108I9FTZPFSe5l42fFmzAtE7tLyiOwvtCrZUgMif9Ff8Q9VFc2DLyAkuJfncg5URZzuWDIcJ73MBJePkiQHCXQlbOiSbAy4DMYCNBe5Qe9MgD2L4kvklHtDjW7m7buGp6rj9yUxwPZuNjKRo1D5ke2oCKmfE69Ry4u10Ab4TZRR1K17j1DNPH4tqmYR9gwcbe8N31+HuY8yCyQ= X-Forefront-Antispam-Report: CIP:64.62.143.114; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:smtp.corp.axiado.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(36860700016)(34020700016)(82310400026)(1800799024)(376014)(3023799007)(56012099006)(18002099003)(22082099003)(5023799004)(6133799003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: WpoSrxnnRxgxhjYfqHNYQPrYgeaUGYKy1d9uF5z9DjXoWOaQaJhsCp79/L1Km95E4t9ho/B3pYMJ6vOHxggev3DP0tPmSWQFvmeUWz2T7pDcf+YoGeUK2emv+2ZpEwOzloRBC7tz/H+wc0ZHwa6wlSJM9TCDaL5hx8bSGvttZ0EoMX9gl1seSNfJMO0wjolxX+/558a85F/tiZcPsra0h0RPcMutgmKLheh0/82jgiyM3MDDpKW/1/ZlmWtY06RdWu65Pz8rVFtMSIK+7cp5LgNEbnyX6iC2NFZbv7uTkCaLdKztgVdEhiIcO+b2sUkc1DgvC6FtWhLpIHmV7Zffk8jFXs0aFb/bFMqxwmrtOZU7/tLpFa2uIcJSjF02fBKYxIdbxXfYDCH56R2lNbkjZvphCSRNbNqmBRnCmyITrXwRJZrM9dpwczZ81wL1v0Jm X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 06:33:56.0500 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f30b2a3b-682f-4f2f-5a16-08dec070ec03 X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7; Ip=[64.62.143.114]; Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F61.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR18MB4452 Received-SPF: pass client-ip=2a01:111:f403:c111::5; envelope-from=kchiu@axiado.com; helo=DM1PR04CU001.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: 1780382136075154100 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 Signed-off-by: Kuan-Jui Chiu --- MAINTAINERS | 7 ++ hw/arm/Kconfig | 7 ++ hw/arm/ax3000-soc.c | 218 ++++++++++++++++++++++++++++++++++++ hw/arm/meson.build | 3 + include/hw/arm/ax3000-soc.h | 71 ++++++++++++ 5 files changed, 306 insertions(+) create mode 100644 hw/arm/ax3000-soc.c create mode 100644 include/hw/arm/ax3000-soc.h diff --git a/MAINTAINERS b/MAINTAINERS index cd5c4831e27..3782c83738a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1298,6 +1298,13 @@ M: Manos Pitsidianakis S: Maintained F: rust/hw/char/pl011/ =20 +Axiado SoCs and EVKs +M: Kuan-Jui Chiu +L: qemu-arm@nongnu.org +S: Maintained +F: hw/arm/ax3000*.c +F: include/hw/arm/ax3000*.h + AVR Machines ------------- =20 diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 5b198402d5e..39f0b652a0f 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -716,3 +716,10 @@ config ARMSSE select UNIMP select SSE_COUNTER select SSE_TIMER + +config AXIADO_SOC + bool + depends on ARM + select ARM_GIC + select CADENCE # UART + select UNIMP diff --git a/hw/arm/ax3000-soc.c b/hw/arm/ax3000-soc.c new file mode 100644 index 00000000000..517cc6f52d5 --- /dev/null +++ b/hw/arm/ax3000-soc.c @@ -0,0 +1,218 @@ +/* + * Axiado SoC AX3000 + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "system/address-spaces.h" +#include "hw/arm/bsa.h" +#include "hw/arm/ax3000-soc.h" +#include "hw/misc/unimp.h" +#include "system/system.h" +#include "qobject/qlist.h" +#include "qom/object.h" +#include "hw/core/boards.h" + +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) +{ +} + +static const MemoryRegionOps pll_ops =3D { + .read =3D pll_read, + .write =3D pll_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .impl =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + } +}; + +static void ax3000_init(Object *obj) +{ + Ax3000SoCState *s =3D AX3000_SOC(obj); + Ax3000SoCClass *sc =3D AX3000_SOC_GET_CLASS(s); + + for (int 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 (int 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); + } +} + +static void ax3000_realize(DeviceState *dev, Error **errp) +{ + Ax3000SoCState *s =3D AX3000_SOC(dev); + Ax3000SoCClass *sc =3D AX3000_SOC_GET_CLASS(s); + SysBusDevice *gic_sbd =3D SYS_BUS_DEVICE(&s->gic); + DeviceState *gic_dev =3D DEVICE(&s->gic); + QList *redist_region_count; + SysBusDevice *sdhci0_sbd; + DeviceState *card; + + /* CPUs */ + for (int 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(gic_dev, "num-cpu", sc->num_cpus); + qdev_prop_set_uint32(gic_dev, "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(gic_dev, "redist-region-count", redist_region_coun= t); + + if (!sysbus_realize(gic_sbd, errp)) { + return; + } + + sysbus_mmio_map(gic_sbd, 0, AX3000_GIC_DIST_BASE); + sysbus_mmio_map(gic_sbd, 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 (int i =3D 0; i < sc->num_cpus; i++) { + DeviceState *cpu_dev =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(gic_dev, intidbase + timer_irqs[j]); + qdev_connect_gpio_out(cpu_dev, j, irq); + } + + irq =3D qdev_get_gpio_in(gic_dev, intidbase + ARCH_GIC_MAINT_IRQ); + qdev_connect_gpio_out_named(cpu_dev, "gicv3-maintenance-interrupt", + 0, irq); + + sysbus_connect_irq(gic_sbd, i, + qdev_get_gpio_in(cpu_dev, ARM_CPU_IRQ)); + sysbus_connect_irq(gic_sbd, i + sc->num_cpus, + qdev_get_gpio_in(cpu_dev, ARM_CPU_FIQ)); + sysbus_connect_irq(gic_sbd, i + 2 * sc->num_cpus, + qdev_get_gpio_in(cpu_dev, ARM_CPU_VIRQ)); + sysbus_connect_irq(gic_sbd, i + 3 * sc->num_cpus, + qdev_get_gpio_in(cpu_dev, ARM_CPU_VFIQ)); + } + + /* DRAM */ + for (int 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 (int 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(gic_dev, serial_table[i].irq)); + } + + /* Timer control */ + create_unimplemented_device("ax3000.timerctrl", AX3000_TIMER_CTRL, 32); + + /* PLL control */ + memory_region_init_io(&s->pll_ctrl, OBJECT(s), &pll_ops, s, + "ax3000.pllctrl", 32); + memory_region_add_subregion(get_system_memory(), AX3000_PLL_BASE, + &s->pll_ctrl); +} + +static void ax3000_class_init(ObjectClass *oc, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + Ax3000SoCClass *sc =3D AX3000_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_AX3000_SOC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(Ax3000SoCState), + .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 80068f70bb9..772ae5211dc 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -103,6 +103,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')) =20 +arm_common_ss.add(when: ['CONFIG_AXIADO_SOC', 'TARGET_AARCH64'], if_true: = files( + 'ax3000-soc.c')) + arm_common_ss.add(files('boot.c')) =20 hw_arch +=3D {'arm': arm_ss} diff --git a/include/hw/arm/ax3000-soc.h b/include/hw/arm/ax3000-soc.h new file mode 100644 index 00000000000..6e3b5f51d30 --- /dev/null +++ b/include/hw/arm/ax3000-soc.h @@ -0,0 +1,71 @@ +/* + * Axiado SoC AX3000 + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#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/core/sysbus.h" +#include "qemu/units.h" + +#define TYPE_AX3000_SOC "ax3000" +OBJECT_DECLARE_TYPE(Ax3000SoCState, Ax3000SoCClass, AX3000_SOC) + +#define AX3000_DRAM0_BASE 0x3C000000 +#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_UART1_BASE 0x805a0000 +#define AX3000_UART2_BASE 0x80620000 +#define AX3000_UART3_BASE 0x80520800 + +#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, +}; + +typedef struct Ax3000SoCState { + SysBusDevice parent; + + ARMCPU cpu[AX3000_NUM_CPUS]; + GICv3State gic; + MemoryRegion dram[AX3000_NUM_BANKS]; + MemoryRegion pll_ctrl; + CadenceUARTState uart[AX3000_NUM_UARTS]; +} Ax3000SoCState; + +typedef struct Ax3000SoCClass { + SysBusDeviceClass parent; + + uint32_t num_cpus; +} Ax3000SoCClass; + +enum Ax3000Irqs { + AX3000_UART0_IRQ =3D 112, + AX3000_UART1_IRQ =3D 113, + AX3000_UART2_IRQ =3D 114, + AX3000_UART3_IRQ =3D 170, +}; + +#endif /* AXIADO_AX3000_H */ --=20 2.34.1 From nobody Mon Jun 8 04:26:14 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=1780382110; cv=pass; d=zohomail.com; s=zohoarc; b=goC6XcBbMgwnsmf2h82CHF3CnauGl3DADmO1YfcH9hx5zkKd1GjKH+iHknrgLCHI313lRB6wyvrdQKZLC+DYykmu17NvtOEzZQXvjBet/9xF8Sa+YBtRDRryTAHJlDn/uMUlbKLXXVDKBbuKJWuEfUYd28mvK3p+paa1nAQr0p0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780382110; 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=vF08zCjMnCLWTRtKoPVETzfY9I7HF+uryP52JMgnxGM=; b=Is/DtH1V4l9pHCzmq+b6QinV1NGvUubzjqqfPTX5/OZlUvtfZGmQzmg4VWmFK/Yfx2XUUJU42Wdz5wJavC3Os1PZ4bP18VZWtZi8K2/m+6DcYbT4/rELr8AZnHZbC/ISBECpAm4HS2RoBp61gnNZyt/8gdQT6tLAarSruGACSZY= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780382110898221.07329459335403; Mon, 1 Jun 2026 23:35:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUIhZ-0005ku-9t; Tue, 02 Jun 2026 02:34:13 -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 1wUIhR-0005fi-MK for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:05 -0400 Received: from mail-eastus2azlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c110::3] helo=BN8PR05CU002.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 1wUIhO-0004c0-B3 for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:05 -0400 Received: from MN2PR06CA0005.namprd06.prod.outlook.com (2603:10b6:208:23d::10) by SJ0PR18MB5054.namprd18.prod.outlook.com (2603:10b6:a03:43d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.15; Tue, 2 Jun 2026 06:33:56 +0000 Received: from BL6PEPF00020E65.namprd04.prod.outlook.com (2603:10b6:208:23d:cafe::97) by MN2PR06CA0005.outlook.office365.com (2603:10b6:208:23d::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.7 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from smtp.corp.axiado.com (64.62.143.114) by BL6PEPF00020E65.mail.protection.outlook.com (10.167.249.26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.5 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from axiado.com (vm-swbuild01.axiadoRD [10.4.1.181]) by smtp.corp.axiado.com (Postfix) with ESMTP id 7E25B4186B5A; Mon, 1 Jun 2026 23:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KQuZHgFulNyLKlJV6d7wtng+dJjTGQm5WG67Mz2M9WhlYmEDXGGLTUJ6YfHnVxRZl50YdHGmHur2od5LbVxbG5fDrmrNdMU2NI3PuwnJ0kyU+XaCLLCnpoMLRcH48+F55VKTPAjDU014JSwEK2rhSrpVngino4VAh+CJrhJMCoQOzGxawOgHnfaDUyLE311HOJV8iKj5cWve9BNGnRP3fkIBXCKdYLMFZRis2rC/tv391LdUU9BKD5a8rA/2SK040yNr78BLm7jubNo6lMzu1LBsinQSDPorY8//u9KbRF7ThQ9UYlRE4bUQzUixmVyps+eUpnPPjihSYPwTkDX9KQ== 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=vF08zCjMnCLWTRtKoPVETzfY9I7HF+uryP52JMgnxGM=; b=ZkOuKAgrlAFnVXB/WYcgEsZx4+q5urnVmpaGqTsKntcpZq+JaqoMeUzF6h3tWCbXU6Z0cMn3mM01U6jnLAab8ObY0snt17IKDaUxAO1dyROE1kkjgaPx5ZThXvD8zTsUb54B7MEFWbwYEXstW/cIqHqkq/nuaI57eenyHUI0dEvwASe4chzLHVn2+4XMkoN5vY5JDNUUrV0juPG6GunFxbIewZSU2W142vaGufZ/LKo8Rr5N5wkXLIJ0xkg7KIlFbyY8O0I80ZlcWCngtQTW7YPRFQR8gbsFh3dAJKbXPlVL6k2dH6OGhCyvpc/DUIN5KJMXBGPHeNXQCpHAyd7bsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) 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=vF08zCjMnCLWTRtKoPVETzfY9I7HF+uryP52JMgnxGM=; b=VwdlSW4hY9BXWtFypJImsOyKvkG2AjdQ7TQmoJ7PsaJsXboter70gZdtHDOMqKCbzTIGgf9OHi7DfetD67zxig68EznJk34sb3wpeC7rfPC8k1HQl7SdCRKudH5ov7ZIcZ9OK5z9M4+JZwPpFIUKdCDVKeMBq7HN3yaJXcXddk2lLlcIBDzZCUzG2VOta3AlLAfqMuqa0Pyxdt5r13Hf5Cif3dwxAXcpAwMmccVUoAxDEJkO+wmQBSbzgOj5Y6w0DlCz5ZhEzqBcWvctF1LZVN+KlKvmw5AVb16WGzWVdUIbjWctf0JbUGZmpJ+mG09nkNI5PDloJoOKcMLL9vzCGA== X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; 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: Fail (protection.outlook.com: domain of axiado.com does not designate 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org, peter.maydell@linaro.org Cc: Kuan-Jui Chiu Subject: [PATCH v3 2/6] hw/sd: Add Axiado SD host controller with eMMC PHY Date: Mon, 1 Jun 2026 23:33:46 -0700 Message-Id: <20260602063350.3623723-3-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260602063350.3623723-1-kchiu@axiado.com> References: <20260602063350.3623723-1-kchiu@axiado.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF00020E65:EE_|SJ0PR18MB5054:EE_ X-MS-Office365-Filtering-Correlation-Id: 87ecb350-b412-44e6-eb9a-08dec070ec32 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|34020700016|376014|1800799024|82310400026|18002099003|22082099003|56012099006; X-Microsoft-Antispam-Message-Info: sLturhLsfCKk1g3kdTKhd1shhKd9+mPFloUvKQt38/F++RkOZUt+qvjwHKr57OEBPC9FIINjMprwdG1scK9vA5AS/KaVFSF+V7MFjlQ7Mkia8TMb2dcTqpMtP7F9VTCvSpA27AyqZFNzon2n29EWjW0mT53T74wCwKRepfoO3GTWa4+kRFJ7QTaZuZsdBAqG0G7hs48LAHFyyd+4s/3ZXoHLl4CWirV4l9FFRg8WZGQ3wfqP2i+IteVUZuR19RQYcNYQiIawNnnxsFCFTeqmgUGWaBaNMWkWe5JcnRw5oRzHUVHa6aWdgV2PPfwTHrurPAsN8BKyPE91/U2G08QdqMt52XFrd09AUBuV6gKlofvKdAbjWQcE6rE6SX1YZ9KH+EIPt6+1mNrRmb7ErNBjJE1omGy9cscNeSSdE8g2qXiNjrZQ7bF4/z1Bk2f5b1Ec9aeXBovw9MydTwforlZASUFkhq1s4ACwfNQiOtbi6ZUGektGdI2yt54F/WQqSd61YNlXBvcaxN+tXr6YPoPu5MYFCT7MpFTl6hINlixF+ufKMYT/ylgCy+eg923J34DRy3nlgO3xSpmVsTtTyVMGp87xp5CpvtodnVIYofJhhKyUThNQd1FvaDB/Na47fBNO4EBm9O0rRjzDiwdadvu0Zd/xLsT62D3rnoTA62Jhqf9JQRuhVe9/roNt0Fv1s9yD0O6dXFXfNV1UMnTSOSqbD44qyZux+dFOCtYu9B+QfEU= X-Forefront-Antispam-Report: CIP:64.62.143.114; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:smtp.corp.axiado.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(36860700016)(34020700016)(376014)(1800799024)(82310400026)(18002099003)(22082099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EblrxPHSlcAeAU0/LXYuG2RkubEGeM6P60obXrrNQZNbQnR6kzy+7o9j/8t8FLc69Bxdtt+OnJLldM7vv4E/NKdeStXZ9NhECIoZMPmyeWkATpO4KSKYBA0Ego3Q9kPuIbDeiT2JYf6nM5BYQXY8dHP5RGKCWZvdHgmcSIJdM4NJIK25yUw9ojIrX5vKQO3zT05tUtu/0ScPt86eWfYn5begoyUg4ioVZQjuctaGIjUgUxtVtZ6T6P0ug1hp4KyTQqCytkRLqCzIchNksL9LKblMy4hoMI7WdNjcbUoFOt2PsdsFksWZ7TTjxxatQskFR0E7TfT6OWUwI6HHpRav2jzYeLqTTNisjUAgmkxT05XRIKH7Fyu2Krd/MjWUMq6lZ5HX34Y+jCwGwJfl3AmeTqtLUD9GoaxzkeW4upA3Q8ll9p3Fsy3feVcUPS4/xJtq X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 06:33:56.3071 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 87ecb350-b412-44e6-eb9a-08dec070ec32 X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7; Ip=[64.62.143.114]; Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF00020E65.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR18MB5054 Received-SPF: pass client-ip=2a01:111:f403:c110::3; envelope-from=kchiu@axiado.com; helo=BN8PR05CU002.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 @axiado.com) X-ZM-MESSAGEID: 1780382113648154100 Content-Type: text/plain; charset="utf-8" This patch add a new model for Axiado SD host controller which is compatible with SDHCI 3.0 spec This device model also includes a eMMC PHY which helps to control SD/eMMC Signed-off-by: Kuan-Jui Chiu --- MAINTAINERS | 2 + hw/sd/Kconfig | 4 ++ hw/sd/axiado_sdhci.c | 115 +++++++++++++++++++++++++++++++++++ hw/sd/meson.build | 1 + include/hw/sd/axiado_sdhci.h | 21 +++++++ 5 files changed, 143 insertions(+) create mode 100644 hw/sd/axiado_sdhci.c create mode 100644 include/hw/sd/axiado_sdhci.h diff --git a/MAINTAINERS b/MAINTAINERS index 3782c83738a..0a3b26c5417 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1303,7 +1303,9 @@ M: Kuan-Jui Chiu L: qemu-arm@nongnu.org S: Maintained F: hw/arm/ax3000*.c +F: hw/*/axiado*.c F: include/hw/arm/ax3000*.h +F: include/hw/*/axiado*.h =20 AVR Machines ------------- diff --git a/hw/sd/Kconfig b/hw/sd/Kconfig index 633b9afec91..c69bf24f8de 100644 --- a/hw/sd/Kconfig +++ b/hw/sd/Kconfig @@ -23,3 +23,7 @@ config SDHCI_PCI config CADENCE_SDHCI bool select SDHCI + +config AXIADO_SDHCI + bool + select SDHCI diff --git a/hw/sd/axiado_sdhci.c b/hw/sd/axiado_sdhci.c new file mode 100644 index 00000000000..245b11ac3e5 --- /dev/null +++ b/hw/sd/axiado_sdhci.c @@ -0,0 +1,115 @@ +/* + * Axiado SD Host Controller + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/sd/axiado_sdhci.h" +#include "sdhci-internal.h" +#include "qapi/error.h" +#include "hw/core/qdev-properties.h" + +#define EMMC_PHY_ID 0x00 +#define EMMC_PHY_STATUS 0x50 + +#define DLL_RDY (1u << 0) +#define CAL_DONE (1u << 6) + +static uint64_t emmc_phy_read(void *opaque, hwaddr offset, unsigned size) +{ + uint32_t val =3D 0x00; + + switch (offset) { + case EMMC_PHY_ID: + val =3D 0x3dff6870; + break; + case EMMC_PHY_STATUS: + val =3D DLL_RDY | CAL_DONE; + break; + default: + break; + } + + return val; +} + +static void emmc_phy_write(void *opaque, hwaddr offset, uint64_t value, + unsigned size) +{ +} + +static const MemoryRegionOps emmc_phy_ops =3D { + .read =3D emmc_phy_read, + .write =3D emmc_phy_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .impl =3D { + .min_access_size =3D 2, + .max_access_size =3D 4, + }, + .valid =3D { + .min_access_size =3D 2, + .max_access_size =3D 4, + } +}; + +static void axiado_sdhci_realize(DeviceState *dev, Error **errp) +{ + AxiadoSDHCIState *s =3D AXIADO_SDHCI(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + SysBusDevice *sdhci_sbd; + + qdev_prop_set_uint64(DEVICE(&s->sdhci), "capareg", 0x216737eed0b0); + qdev_prop_set_uint64(DEVICE(&s->sdhci), "sd-spec-version", 3); + + sdhci_sbd =3D SYS_BUS_DEVICE(&s->sdhci); + sysbus_realize(sdhci_sbd, errp); + if (*errp) { + return; + } + + sysbus_init_mmio(sbd, sysbus_mmio_get_region(sdhci_sbd, 0)); + + /* Propagate IRQ from SDHCI and SD bus */ + sysbus_pass_irq(sbd, sdhci_sbd); + s->sd_bus =3D qdev_get_child_bus(DEVICE(sdhci_sbd), "sd-bus"); + + /* Initialize eMMC PHY MMIO */ + memory_region_init_io(&s->emmc_phy, OBJECT(s), &emmc_phy_ops, s, + "axiado.emmc-phy", 0x1000); + + sysbus_init_mmio(sbd, &s->emmc_phy); +} + +static void axiado_sdhci_instance_init(Object *obj) +{ + AxiadoSDHCIState *s =3D AXIADO_SDHCI(obj); + + object_initialize_child(OBJECT(s), "sdhci", &s->sdhci, + TYPE_SYSBUS_SDHCI); +} + +static void axiado_sdhci_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D axiado_sdhci_realize; + dc->desc =3D "Axiado SD Host Controller with eMMC PHY"; +} + +static const TypeInfo axiado_sdhci_info =3D { + .name =3D TYPE_AXIADO_SDHCI, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(AxiadoSDHCIState), + .instance_init =3D axiado_sdhci_instance_init, + .class_init =3D axiado_sdhci_class_init, +}; + +static void axiado_sdhci_register_types(void) +{ + type_register_static(&axiado_sdhci_info); +} + +type_init(axiado_sdhci_register_types); diff --git a/hw/sd/meson.build b/hw/sd/meson.build index b43d45bc564..ebf09e30a48 100644 --- a/hw/sd/meson.build +++ b/hw/sd/meson.build @@ -10,3 +10,4 @@ system_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('= aspeed_sdhci.c')) system_ss.add(when: 'CONFIG_ALLWINNER_H3', if_true: files('allwinner-sdhos= t.c')) system_ss.add(when: 'CONFIG_NPCM7XX', if_true: files('npcm7xx_sdhci.c')) system_ss.add(when: 'CONFIG_CADENCE_SDHCI', if_true: files('cadence_sdhci.= c')) +system_ss.add(when: 'CONFIG_AXIADO_SDHCI', if_true: files('axiado_sdhci.c'= )) diff --git a/include/hw/sd/axiado_sdhci.h b/include/hw/sd/axiado_sdhci.h new file mode 100644 index 00000000000..85afebad931 --- /dev/null +++ b/include/hw/sd/axiado_sdhci.h @@ -0,0 +1,21 @@ +/* + * Axiado SD Host Controller + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "hw/sd/sdhci.h" +#include "qom/object.h" + +#define TYPE_AXIADO_SDHCI "axiado-sdhci" +OBJECT_DECLARE_SIMPLE_TYPE(AxiadoSDHCIState, AXIADO_SDHCI) + +typedef struct AxiadoSDHCIState { + SysBusDevice parent; + + SDHCIState sdhci; + MemoryRegion emmc_phy; + BusState *sd_bus; +} AxiadoSDHCIState; --=20 2.34.1 From nobody Mon Jun 8 04:26:14 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=1780382132; cv=pass; d=zohomail.com; s=zohoarc; b=aAtUm+6cQzkE7BFt1peWuU0ik16kpkDxjnzycCqIXpLuRo50oKt53rWQ0ba3PePPpFo+8qAEzE81idBmY96RQPqnzIl4bMdhMcwb5S6M5IkZnS//eAkNXZlh419Q4SmIN5u6v9NxukbWVYanNkaQPwjDcGDr8k5OGEXccz1bhrk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780382132; 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=5i++P1WeTSff2Wd3mJRaaTQ5SXXN+Yy4VHduISAx1Xs=; b=n+CFgG/Y5asRja6QBlyWt1ek+Dw4CDA14CzDRpAp+HCvJwqjDMENJaYCwUUB79whBCf28pG6yWP4ChJf2SauSijJxCqWWeLx6dC5rreugY7WJ9fgurlNxbApuebYGgddID1Kmtt6MrMT54utjs00/KTbr823P8/xAwZFT9VxZTY= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17803821319981020.6802397233937; Mon, 1 Jun 2026 23:35:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUIhR-0005fJ-3B; Tue, 02 Jun 2026 02:34:05 -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 1wUIhQ-0005eT-6J for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:04 -0400 Received: from mail-westus3azlp170100009.outbound.protection.outlook.com ([2a01:111:f403:c107::9] helo=PH7PR06CU001.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 1wUIhN-0004bq-Ni for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:03 -0400 Received: from MN2PR16CA0040.namprd16.prod.outlook.com (2603:10b6:208:234::9) by SJ0PR18MB4413.namprd18.prod.outlook.com (2603:10b6:a03:3ad::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.16; Tue, 2 Jun 2026 06:33:56 +0000 Received: from BL02EPF0001A0FD.namprd03.prod.outlook.com (2603:10b6:208:234:cafe::7) by MN2PR16CA0040.outlook.office365.com (2603:10b6:208:234::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.71.16 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from smtp.corp.axiado.com (64.62.143.114) by BL02EPF0001A0FD.mail.protection.outlook.com (10.167.242.104) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.5 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from axiado.com (vm-swbuild01.axiadoRD [10.4.1.181]) by smtp.corp.axiado.com (Postfix) with ESMTP id 8CAA74186B5B; Mon, 1 Jun 2026 23:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EezmFBNFuUhhs0c5OmjW082KVOsqP4aZkBQjb9QfmWFUPQ1+LN4nWSA5expp/Uy+P88ER+IJMPlbSKhnkbQ2Z6leXK3/wmaZTd+PyBIkXaYNS9lGyk/UCaJdUjp/7jxubEFAfd5E5skrdYiRip7NN08pF/W/G/heuVKQvefJuM63EJgC4zAG9ecek/sQEciu9J223fEJwxhXdi57B8whQDmCGX/djF3fjrYpaS8AhlX/txuB+1DuJanzsrEx8eEu29Zri6UYst70sN+SH8G0f3qQ+93z8W8H4ymoMG7VRvNwhCZbRPdVydxBB6qDCa6WMgX66NGrP5CxtRU90a896Q== 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=5i++P1WeTSff2Wd3mJRaaTQ5SXXN+Yy4VHduISAx1Xs=; b=SLTWQJN5vZ1HXR9wSP1ZlIf1TfNSJ2YFFnEZbgnRe/7E20H6vH1goix0wjhiQw0dzD8pCsX2Z7GsyBNg94+HPAMqjLl+Cf9klg+q0cM8qGk7WzkPocVOjbBxo6yYdKvFfrjBWcsvik0tLmqW3BQ6nU7ybZDN/1YwZC/H4msXlXNI/yXo0y78wEqnfUgsQIlYnN3em3TQqOSEOnJAr9r3N6R6jLLA6A1aWo6w5ybrt0bNxZAE9Qt98d/k1vNeH03BwhwPFbQuXVtPWfrq7XbfJAF6jVwQeug9qEieKCAZaxRtr8h7O5lpViv6MIi8nx53uC6SIPZ1P5RoQMAdL8rjhQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) 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=5i++P1WeTSff2Wd3mJRaaTQ5SXXN+Yy4VHduISAx1Xs=; b=e5OlYPluzgLnZt1YH0DU7gtkr7bISvL4dB4zZ/FEsLBIMLkVKbZDVId/OfEujaLTfLNIJK8+ERpOFKnW6duMXv1G/MLuC6X3jurndS8xmglbJhyalcJO/e+Wx0IAqCVaZbtEejYOT7L8lKbfegpPKeNIYxac5zjjlQRDtaiB4iIzOa9W2fDLVU6BxDwAHyMPUbgZIZTkwnD39nTupZs0Oa03vuwhxH4A3C9OLXGvK+Tzb1jkXDsn8RbPeCABB0M7lXMt9I/WzJfQgr8gLC5gXiQwCqpzbvTEoR4jN5b4hcRP2o4SeiGolrpXk6ZHofjIG1FbWC3suF+pmKh3BJ+AAQ== X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; 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: Fail (protection.outlook.com: domain of axiado.com does not designate 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org, peter.maydell@linaro.org Cc: Kuan-Jui Chiu Subject: [PATCH v3 3/6] hw/arm: ax3000-soc: Enable Axiado SD host controller Date: Mon, 1 Jun 2026 23:33:47 -0700 Message-Id: <20260602063350.3623723-4-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260602063350.3623723-1-kchiu@axiado.com> References: <20260602063350.3623723-1-kchiu@axiado.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A0FD:EE_|SJ0PR18MB4413:EE_ X-MS-Office365-Filtering-Correlation-Id: 3e6c9474-1d7c-4b97-2923-08dec070ec3d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700016|82310400026|376014|34020700016|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: fs+jtroeySDaRk0sZtTizctF8+9N6UIxR7G1iIhYcm9xCLPeHDLC7UDX7XZEkucYMJrnnVnFIjOnNGRgxk1b7PhdhFbZG4NGuG/96l7yTEBZkt0Pipqr0kys53b9K05cN2rLmahptvYwrRWCTiWql1Bme67Z8/75Cs029+rVgc1V2ACn4mynmpklSOpiQ/NvswnZdf4JJ50BLzNCENdvIFqy+WO6oy34nqe4q8M70nQ0TqwA0BXkeXqODciok71XCm9CQ1XiydNz2ifmYPN4vhSpJ7oHbo9uP5Yt5n6fChtx7tFBxYYRDcd7LQzTLXTkxK7PWzXzPjGfW/brcFuaLJU0LuSh536vaqHbP/y1Hi19zoY1tR4XZk/EXnlp/tjLsVn1KZH4NLwq8uMHgwyKnOPtq/THpAkRLgfUT3fydtVJ9O2H35rSmMK2U6Jd4PkC9ZNZfuNA3JsaNcyF3RURLouJ7HOy0C0xc/XVbyQ9ZFXhooKx3+VYnEqsmUYPNGI5b3fkGDI51brDwBCDJ1keah7x8CP7tPIGywEDF8628Qs3HYDbWuGzJBYY5kv2fRXT2rX6dxBNB64ZJlI0ZLqSyj9cXDl6wTD44g3vbwHzmRErUIDRgtlnujeLOZSYPdiQOW5Pl/dUYnlIV3KIGeHhqkAGSeYB3CE2fMLavpqaeYEFpoGWdzo8fkHSWzp1kRGoA++fp1e/eqn+AOBaTSlsfkceYd9MMKtJBNpN2GfNcpI= X-Forefront-Antispam-Report: CIP:64.62.143.114; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:smtp.corp.axiado.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(82310400026)(376014)(34020700016)(22082099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SKzcJbNgBQQHqm2gO3wYpvKqXjNyP+ZS49wu9QWEq9d36GwUnhVsao3fYu0cIatXLSr1zM1amCpOrYRl5ErqPCVKqLSzUSIXv37b31a83VBsXQwgBGcJbiu4sTpGBLxXzfaBWf6lAtCkYTuZueN2jQihSNIO73TIt6puUnMZza/advO5A4Vp2itte91rdqBVJxUFiCNxqALnm5XFN7fYp9FusW9QmhrDRByCvCrFq9NebLeChWafyrud3M8jad12jgX0AQb3wNCDngdF6Y1inz33/BrMmjUARLYjl/KBc0Ry6JNuvuubA2Yn2Xp+YGr+YGiY4O3RCPLXFzxHcioBEmCjqwkOM3XyTpbbykOztCZQ7iO2/fefq7P44MySDWy68CGwbNzWx3Yw6XSq0zckMXrzvPOUWMduHXHAAvmulMQmAT5B/CX/JcxeciOiMk7q X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 06:33:56.3751 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3e6c9474-1d7c-4b97-2923-08dec070ec3d X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7; Ip=[64.62.143.114]; Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A0FD.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR18MB4413 Received-SPF: pass client-ip=2a01:111:f403:c107::9; envelope-from=kchiu@axiado.com; helo=PH7PR06CU001.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 @axiado.com) X-ZM-MESSAGEID: 1780382137749158501 Content-Type: text/plain; charset="utf-8" Enable SD host controller into Axiado AX3000 SoC to load kernel and rootfs from eMMC. Signed-off-by: Kuan-Jui Chiu --- hw/arm/Kconfig | 1 + hw/arm/ax3000-soc.c | 19 +++++++++++++++++++ include/hw/arm/ax3000-soc.h | 7 +++++++ 3 files changed, 27 insertions(+) diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 39f0b652a0f..5b9cf25dd31 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -722,4 +722,5 @@ config AXIADO_SOC depends on ARM select ARM_GIC select CADENCE # UART + select AXIADO_SDHCI select UNIMP diff --git a/hw/arm/ax3000-soc.c b/hw/arm/ax3000-soc.c index 517cc6f52d5..fd8c2f977e7 100644 --- a/hw/arm/ax3000-soc.c +++ b/hw/arm/ax3000-soc.c @@ -63,6 +63,8 @@ static void ax3000_init(Object *obj) 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_AXIADO_SDHCI); } =20 static void ax3000_realize(DeviceState *dev, Error **errp) @@ -193,6 +195,23 @@ static void ax3000_realize(DeviceState *dev, Error **e= rrp) "ax3000.pllctrl", 32); memory_region_add_subregion(get_system_memory(), AX3000_PLL_BASE, &s->pll_ctrl); + + /* SDHCI */ + sdhci0_sbd =3D SYS_BUS_DEVICE(&s->sdhci0); + if (!sysbus_realize(sdhci0_sbd, errp)) { + return; + } + + sysbus_mmio_map(sdhci0_sbd, 0, AX3000_SDHCI0_BASE); + sysbus_mmio_map(sdhci0_sbd, 1, AX3000_EMMC_PHY_BASE); + sysbus_connect_irq(sdhci0_sbd, 0, + qdev_get_gpio_in(gic_dev, AX3000_SDHCI0_IRQ)); + + card =3D qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(card, "drive", + blk_by_legacy_dinfo((drive_get(IF_SD, 0, 0))), + &error_fatal); + qdev_realize_and_unref(card, s->sdhci0.sd_bus, &error_fatal); } =20 static void ax3000_class_init(ObjectClass *oc, const void *data) diff --git a/include/hw/arm/ax3000-soc.h b/include/hw/arm/ax3000-soc.h index 6e3b5f51d30..763866ce6e2 100644 --- a/include/hw/arm/ax3000-soc.h +++ b/include/hw/arm/ax3000-soc.h @@ -12,6 +12,7 @@ #include "cpu.h" #include "hw/intc/arm_gicv3_common.h" #include "hw/char/cadence_uart.h" +#include "hw/sd/axiado_sdhci.h" #include "hw/core/sysbus.h" #include "qemu/units.h" =20 @@ -33,6 +34,9 @@ OBJECT_DECLARE_TYPE(Ax3000SoCState, Ax3000SoCClass, AX300= 0_SOC) #define AX3000_UART2_BASE 0x80620000 #define AX3000_UART3_BASE 0x80520800 =20 +#define AX3000_SDHCI0_BASE 0x86000000 +#define AX3000_EMMC_PHY_BASE 0x80801C00 + #define AX3000_TIMER_CTRL 0x8A020000 #define AX3000_PLL_BASE 0x80000000 #define CLKRST_CPU_PLL_POSTDIV_OFFSET 0x0C @@ -53,6 +57,7 @@ typedef struct Ax3000SoCState { MemoryRegion dram[AX3000_NUM_BANKS]; MemoryRegion pll_ctrl; CadenceUARTState uart[AX3000_NUM_UARTS]; + AxiadoSDHCIState sdhci0; } Ax3000SoCState; =20 typedef struct Ax3000SoCClass { @@ -66,6 +71,8 @@ enum Ax3000Irqs { AX3000_UART1_IRQ =3D 113, AX3000_UART2_IRQ =3D 114, AX3000_UART3_IRQ =3D 170, + + AX3000_SDHCI0_IRQ =3D 123, }; =20 #endif /* AXIADO_AX3000_H */ --=20 2.34.1 From nobody Mon Jun 8 04:26:14 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=1780382085; cv=pass; d=zohomail.com; s=zohoarc; b=ALdvL2VSNirnIm46vjhQCwvkMf5WMu/ZQ/tlK/3+y/n4we0FPoMZozSbsH6QMOLgQTzdz74vaUEUFmdneMWeayZ8s4YZSXU8nB35gHSb5q7I+jbEir/KIiLkuAUrT6CAV/3LQ8Vkizo+6niELBvPeN1Cc6hNmmnz1p2uWr3r53U= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780382085; 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=NX0EPeMPqRpvn7bbq9ArpShILkpLrhyBVR8hikhMdf8=; b=bO7oM57u2ZTbg2Nfbvkp+cdT3fwBOMhPNM5hY0DapJxViP8cdQFUYGxHFHYitoUwqip3/9b0HA9DHmKWUhkmREbUYYyVQfHu9O1A6K/qp9thYMMWfiDAe6KwlpCTku8GHR+4zDqj/D1qCNqdSbE6zD6dptL5/9bfJ7j4gtBbxXQ= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780382085387258.18803543593003; Mon, 1 Jun 2026 23:34:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUIhX-0005hO-GF; Tue, 02 Jun 2026 02:34:13 -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 1wUIhR-0005fg-IP for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:05 -0400 Received: from mail-westusazlp170120002.outbound.protection.outlook.com ([2a01:111:f403:c001::2] helo=SJ2PR03CU001.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 1wUIhO-0004bt-At for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:05 -0400 Received: from MN2PR06CA0027.namprd06.prod.outlook.com (2603:10b6:208:23d::32) by CO6PR18MB3987.namprd18.prod.outlook.com (2603:10b6:5:34e::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Tue, 2 Jun 2026 06:33:57 +0000 Received: from BL6PEPF00020E65.namprd04.prod.outlook.com (2603:10b6:208:23d:cafe::66) by MN2PR06CA0027.outlook.office365.com (2603:10b6:208:23d::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.71.16 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from smtp.corp.axiado.com (64.62.143.114) by BL6PEPF00020E65.mail.protection.outlook.com (10.167.249.26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.5 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from axiado.com (vm-swbuild01.axiadoRD [10.4.1.181]) by smtp.corp.axiado.com (Postfix) with ESMTP id 9A51E4186B5D; Mon, 1 Jun 2026 23:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CyEE4AWP/lUPjgfXce0l9lK6DQAK0WSu9l25HJT7KCkPcCNZTgWl+AHC0U7OShZxrj/uw1cFRofiJZQs2c6a32+ktaNdFvWytUhNpX97it2guwBycopu1IIkfJcmfWy8YwdtM8WIOz6sRdV1nmShCRdQ/rEWmJ+EoYSDMrrnl7M3n0z0zIFEiBnHeihvc1Ec56iolhgHfqKTaPD1KwlVsSC7cxHRivq+Fcv9ZJbkGLHuEgRZyingA+jusSxzpTRU0YRjNBU4zYVD7Gj7vrPTeMR8V2or12CI0+dYp+HYtxM+ljdf331jXZFvNSFFH3bBRVfJz7SHOg/nngrcpjPyrQ== 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=NX0EPeMPqRpvn7bbq9ArpShILkpLrhyBVR8hikhMdf8=; b=csXSU/nGgbcvraLqgAABTe0Ee9biawf2au7PZzlGMWs7KMbOUCEB8XxWn+dAzN1yqscGheAs6R2KOV/ykQFFuxB2lQdhobzTgsn3upRnmQfcxXiLpdiKayWNQf7WximSdwJmwDJqMSl5ZH2ynzmQ76OK0XN4Aevi5tPVcbFmmB/F3gEM12vyT/uIv6t4KaUb3/xJB0uytlYpF27kDj9oHb/WFdTlr7HI3pElSBr1tLLJZpxBUZK/qEUX+kEHTbUKMxkNf5X3BeZesUu1TW78uep1Gv17xhoKctyUap2c9K5wA2qsgJaIPJrF6k6sTGY4+JZgVgBG8Z7gwKwxbuG8aw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) 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=NX0EPeMPqRpvn7bbq9ArpShILkpLrhyBVR8hikhMdf8=; b=PYG2OFrJxut7uwyxhCkc0P5zCIHsFDpw+fvHtzwlciccHx1ISK9WQyuTgV7phj2ZR2eQwzQqCBk2XnT32MhkkencQdUkXFJrAYDxnemSzv0x7H29nFBq0xw1bPuBEKZO2eV96xREH1mfs5o65x5LiPD2JGMd9BPU4KGvNew2IkRtsg6bqt0aX/XbbT+1SJ+WsQQpc4RBuNPXtGGLu/rmLsoEm01oCcP5L4Noe/7J9VmgDBn79ghpAfNaR562CsxAbm0GZ8CGLNqbcLpzJwLkv7MOkqSU4v6x0bVhNO2PwSCY1PeCrD7GRlScTzwSn9lH/vkQX3GpO4w27Ou9poJ2uQ== X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; 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: Fail (protection.outlook.com: domain of axiado.com does not designate 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org, peter.maydell@linaro.org Cc: Kuan-Jui Chiu Subject: [PATCH v3 4/6] hw/arm: Add Axiado EVK SCM3003 Date: Mon, 1 Jun 2026 23:33:48 -0700 Message-Id: <20260602063350.3623723-5-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260602063350.3623723-1-kchiu@axiado.com> References: <20260602063350.3623723-1-kchiu@axiado.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF00020E65:EE_|CO6PR18MB3987:EE_ X-MS-Office365-Filtering-Correlation-Id: 2cf339d8-6c31-480c-e804-08dec070ec43 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|34020700016|82310400026|1800799024|376014|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: kz6r7TsqihqxQYltZMQTy0ghs3hExkEBUBXEksh/9hZm/gwkfVhpMEoXOQvEZgUZCv/d8z6hoPQ3yl1UcJWmx0hh9cI4TJV7rnlpJaQTOLGRuFxKKSobQLgsKcyxx2TAjp+fMMv+0FQCZvVilqG5/OUxjUiWJAsrUcfr8imsCbhk/zC3+wQGxLcsUTJIRMrzEKVy63pdN0W8igQWyuFjURkByvXZpm8i2P5gk8v1PpRn6b5Fk5RWy/3Kg+1c2e8a/2PejvxkFcd3jBw4k1Ikf39L+VoFfu/zNzaDzdsWM1nXDvVtch4thKEmK/fPZmWtGlAwfnBR1H1kUPBmI/zze8xcpTTti6oqBdCu5qRyVGPIZEF/fKs7lPg9YrnQmcaa9XwAS36gC9BW62iDxW60VxXnGYAfN4Cv0FtFhiwCnDp10sL0g8tPPkQ8WgfGZAsXdXNmZCJAwmWVyh8fHbvC/oSemIBbEti+wISnjvb8S0gD0+JyYdvrb+aqiWtAlG5e+9EnpFER7Ba3sSkdl5s9NlainLLBvdVfGZOjfZPgAuusQ3Ynfw1RqQsbtkTHPQoVsf1UjfAnYaHf2YRZRZARC+KGFxIjNWkce+snXofwR7I0+9THgljCsLldEdDgW+7qjCVZy+UJWFu8cwy2bPXMYhTNnkRNMlFgJ+sBxmupk1s7RF9qmZi/VIEFksYNZ14rxQUSj6ir53ugiy5J/jFasZ38uy5kb25v71AwdA3r/cY= X-Forefront-Antispam-Report: CIP:64.62.143.114; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:smtp.corp.axiado.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(36860700016)(34020700016)(82310400026)(1800799024)(376014)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Y8IabIAehZN80OFWbldU+jgOgyX+q3DZCquNI2B9P8aYruA4rmcdmyqanYAhO3JA+UMMNrGGCPGhquUwNId2Nmhs+F2ThHk/uNLLoYCeIZxkHzsE87sl0m8VIRIWiNxsmhGXSfRQP48vSphkofENLNBtlv5lj4hUa8oroVYaIRNRp2CEmTPAj2KpPmpZ4o/yF+k1LsUvkx2pHwqXr46nrmq+0rgu4uqxS/3eh106j7lkRZUTOuZWqWWLfq18Rc0JZ3ZzuD1BNXw4SkPKQ9xmQkEiEU168dpEVxPwe4cyoO3XS++auMB4UctKSuiAlDy3uoJSnpOFgU0SiAMcxN6ZdSAc/C6S7yqRsb1r27/O/zhiXcV0XR93MX/eceMmi8tWvc5uOEcLbX+FosHvBWjnPUCd3SjzN0d0jfAcpQJRd9sOmAT0Qv3aN4GDY/jIh8X/ X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 06:33:56.4197 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2cf339d8-6c31-480c-e804-08dec070ec43 X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7; Ip=[64.62.143.114]; Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF00020E65.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR18MB3987 Received-SPF: pass client-ip=2a01:111:f403:c001::2; envelope-from=kchiu@axiado.com; helo=SJ2PR03CU001.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: 1780382087260154100 Content-Type: text/plain; charset="utf-8" Add EVK axiado-scm3003 built with AX3000 SoC Signed-off-by: Kuan-Jui Chiu --- hw/arm/Kconfig | 5 ++++ hw/arm/ax3000-boards.c | 47 ++++++++++++++++++++++++++++++++++ hw/arm/ax3000-evk.c | 27 +++++++++++++++++++ hw/arm/meson.build | 3 +++ include/hw/arm/ax3000-boards.h | 28 ++++++++++++++++++++ 5 files changed, 110 insertions(+) create mode 100644 hw/arm/ax3000-boards.c create mode 100644 hw/arm/ax3000-evk.c create mode 100644 include/hw/arm/ax3000-boards.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 5b9cf25dd31..175e6c7985b 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -724,3 +724,8 @@ config AXIADO_SOC select CADENCE # UART select AXIADO_SDHCI select UNIMP + +config AXIADO_EVK + bool + default y + select AXIADO_SOC diff --git a/hw/arm/ax3000-boards.c b/hw/arm/ax3000-boards.c new file mode 100644 index 00000000000..ad3dd963656 --- /dev/null +++ b/hw/arm/ax3000-boards.c @@ -0,0 +1,47 @@ +/* + * Axiado Boards + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/arm/ax3000-boards.h" +#include "hw/arm/machines-qom.h" +#include "qemu/error-report.h" +#include "qom/object.h" + +static void ax3000_machine_init(MachineState *machine) +{ + Ax3000MachineState *ams =3D AX3000_MACHINE(machine); + + ams->soc =3D AX3000_SOC(object_new(TYPE_AX3000_SOC)); + object_property_add_child(OBJECT(machine), "soc", OBJECT(ams->soc)); + sysbus_realize_and_unref(SYS_BUS_DEVICE(ams->soc), &error_fatal); +} + +static void ax3000_machine_class_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + + mc->init =3D ax3000_machine_init; + mc->default_cpus =3D AX3000_NUM_CPUS; + mc->min_cpus =3D AX3000_NUM_CPUS; + mc->max_cpus =3D AX3000_NUM_CPUS; + mc->default_cpu_type =3D ARM_CPU_TYPE_NAME("cortex-a53"); +} + +static const TypeInfo ax3000_machine_types[] =3D { + { + .name =3D TYPE_AX3000_MACHINE, + .parent =3D TYPE_MACHINE, + .instance_size =3D sizeof(Ax3000MachineState), + .class_size =3D sizeof(Ax3000MachineClass), + .class_init =3D ax3000_machine_class_init, + .interfaces =3D aarch64_machine_interfaces, + .abstract =3D true, + } +}; + +DEFINE_TYPES(ax3000_machine_types) diff --git a/hw/arm/ax3000-evk.c b/hw/arm/ax3000-evk.c new file mode 100644 index 00000000000..a1708488710 --- /dev/null +++ b/hw/arm/ax3000-evk.c @@ -0,0 +1,27 @@ +/* + * Axiado Evaluation Kit Emulation + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/arm/ax3000-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 ax3000_evk_types[] =3D { + { + .name =3D MACHINE_TYPE_NAME("axiado-scm3003"), + .parent =3D TYPE_AX3000_MACHINE, + .class_init =3D axiado_scm3003_class_init, + } +}; + +DEFINE_TYPES(ax3000_evk_types) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index 772ae5211dc..61358dd4c8f 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -105,6 +105,9 @@ arm_common_ss.add(when: 'CONFIG_VEXPRESS', if_true: fil= es('vexpress.c')) =20 arm_common_ss.add(when: ['CONFIG_AXIADO_SOC', 'TARGET_AARCH64'], if_true: = files( 'ax3000-soc.c')) +arm_common_ss.add(when: ['CONFIG_AXIADO_EVK', 'TARGET_AARCH64'], if_true: = files( + 'ax3000-boards.c', + 'ax3000-evk.c')) =20 arm_common_ss.add(files('boot.c')) =20 diff --git a/include/hw/arm/ax3000-boards.h b/include/hw/arm/ax3000-boards.h new file mode 100644 index 00000000000..4a632661e1e --- /dev/null +++ b/include/hw/arm/ax3000-boards.h @@ -0,0 +1,28 @@ +/* + * Axiado Boards + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef AXIADO_BOARD_H +#define AXIADO_BOARD_H + +#include "hw/core/boards.h" +#include "hw/arm/ax3000-soc.h" + +#define TYPE_AX3000_MACHINE MACHINE_TYPE_NAME("ax3000") +OBJECT_DECLARE_TYPE(Ax3000MachineState, Ax3000MachineClass, AX3000_MACHINE) + +typedef struct Ax3000MachineState { + MachineState parent; + + Ax3000SoCState *soc; +} Ax3000MachineState; + +typedef struct Ax3000MachineClass { + MachineClass parent; + +} Ax3000MachineClass; +#endif --=20 2.34.1 From nobody Mon Jun 8 04:26:14 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=1780382182; cv=pass; d=zohomail.com; s=zohoarc; b=kwDeRNu8Qgwp/3F6LxYyphRIBVpQlSyzgoOqA5kuR0ZbxmWI3MkinbScr1Q1QJVrzAx2mh7TAcdjtF8RmobaGoP9dpj53od9KsQ9SAjDNQHCtYhC2olpiBod7CE0MdmFFTNnI+C7ZEnT3ztyqTCamg1dWBK0oeH99fzWatUPbrs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780382182; 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=WpP7HWCPpfYtEZZzdzvdeYu6vtHj81QZl13sJ8iJOHs=; b=aSG/8DMB6PfetiaIhq+N90kx5j4SYYc8KxkLLMBYMkbMEFZxtfrHHyczTsfCLm3XhUV+XuZZA77G1HwjKwN5XOEZLDt4q+jxpFJzEpzRlXMQmRDp+0PYP1+CGBoUGlq9iN9cq+BfIiKN3xCVH6Ho6ljyVWxJJgz+xsbIG9U8e0g= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780382182187705.2723103389243; Mon, 1 Jun 2026 23:36:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUIhb-0005nt-RS; Tue, 02 Jun 2026 02:34: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 1wUIhS-0005gU-Oi for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:07 -0400 Received: from mail-northcentralusazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c105::5] helo=CH5PR02CU005.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 1wUIhP-0004cQ-4K for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:05 -0400 Received: from SN1PR12CA0086.namprd12.prod.outlook.com (2603:10b6:802:21::21) by CO1PR18MB4714.namprd18.prod.outlook.com (2603:10b6:303:e9::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.16; Tue, 2 Jun 2026 06:33:57 +0000 Received: from SA2PEPF00003F68.namprd04.prod.outlook.com (2603:10b6:802:21:cafe::91) by SN1PR12CA0086.outlook.office365.com (2603:10b6:802:21::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.71.17 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from smtp.corp.axiado.com (64.62.143.114) by SA2PEPF00003F68.mail.protection.outlook.com (10.167.248.43) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.5 via Frontend Transport; Tue, 2 Jun 2026 06:33:56 +0000 Received: from axiado.com (vm-swbuild01.axiadoRD [10.4.1.181]) by smtp.corp.axiado.com (Postfix) with ESMTP id A871F40BFE07; Mon, 1 Jun 2026 23:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nNDrDv5HpQdnP+mKsME1UuG8DuATzP7XuHILSpr3DNXXvJsL1KhVcHqVSK7eP+RjueX219adOhrXA4QAqAmbb55jMxZneLQGFJ+aV9ZMJIyMRzwMN7DCeVqyCVM7sbdMl1dnVV2HM8Slof7Zrurnd2m44Az8v+dLIhMZD4kbnJkr6Qw2/NOQinsWlFRNTuXeJ51Izql6+3/4ixLAhWueit0ht+tF4XgSe5r8E2K/0tZJf+Yjl2A9AYS093t7hAe/czSRYKGMcdN0/418it4arWZX3qokw3Lf/rLZWrC5dBgwiaJnd4dD3BKFsWNyRMQavAmVDc70xN4GT1risRJDeQ== 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=WpP7HWCPpfYtEZZzdzvdeYu6vtHj81QZl13sJ8iJOHs=; b=kTXn5SuePHy3fF2vZ2MVvwqWxqXTuJ2JKp2dzeJXrXgdsoV38s4eTw8dh7mw3TPGRLbIDC6o1HJcqcFsLwwMYY5fk2WMnYmyJ7IHxyP09havQluurElOk6aNNG8AjufQmyWSDC8e67thRjIeIpdjxmGvWLX3VbURdcLWNzD5QCEwtOwHUjY5hukinr+jVkXhAcbMklbgpiVmE2Xb8Yn9VTswj1g/k8JOjCX0SWhcuhzHpIgsZlII/+xnLby4fSivfD/sAvtG+W2QQFsHG85Th0QW/Pu2EIjjLqnmabZnAIG43svdlnwySLwL4skDoEFaeX15adwBgtl1wZYKP/3I/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) 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=WpP7HWCPpfYtEZZzdzvdeYu6vtHj81QZl13sJ8iJOHs=; b=Xu/bXDGQepFX/hRymx+r7F44swO2MO3Uc2qgMVg2Ou3dSOHVbpKQjfLn1oHQCzbur5OZw5H+NqIkaTs6Oe7INrEwKJuhWnhOWVCm655ZULrwHbIgpoSdhK93e205DfdkIsSvRX3DWQmOeIHDIH3VnXTdlcJ/9iQdQ0HhgUVcb8kwp89n/dUwcbdjQ7sV5x49AL4/hI1LcbsbfS+psItlPQjGBNiSDuBYQ0/2ZorEk3YKAVvh8IoKeyZ4ZhkZi2oaJERgJmKf6ZzBQ/bKyWMQlfLKoea8qVD2+cnI8L5p4ORvnICwN+T3vk+S8xiZICvFfVBvE+2gzm8Oxkb43YEdWw== X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; 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: Fail (protection.outlook.com: domain of axiado.com does not designate 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org, peter.maydell@linaro.org Cc: Kuan-Jui Chiu Subject: [PATCH v3 5/6] hw/gpio: Add Cadence GPIO controller Date: Mon, 1 Jun 2026 23:33:49 -0700 Message-Id: <20260602063350.3623723-6-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260602063350.3623723-1-kchiu@axiado.com> References: <20260602063350.3623723-1-kchiu@axiado.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003F68:EE_|CO1PR18MB4714:EE_ X-MS-Office365-Filtering-Correlation-Id: eb35a0ad-1a13-48b7-a41c-08dec070ec2e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700016|82310400026|376014|34020700016|6133799003|3023799007|18002099003|22082099003|56012099006; X-Microsoft-Antispam-Message-Info: H/koFA8kLf7I7iYkga6rEv40GwOnuydMAOIbknrKE4zUbaxo9chbQxIZlo8AIqcV8Y46V4e8Rj/XNVXSasf7VPvblvZzpDHYsy1rUSIRbwNhkBu53gtcNRtzfWY0UnW7UZCkkzeVDU6BVZmdjK2AJUYo5PkRofzmxAkd9YyeeZymY08kfNb7+eAAp2ZnWjwK3rAAJXqQqLpyVWVC9YtrAQ+6S2K5wTUfoo/tVJeJnu2KFxn4cWECE2MRpWLXRkdq255rADXXsA6MIifFTxscBTYnNDha9erKOhDvUOmwJNd4dM4KLoyKH7l99vMZcUHooSfXINHlPuyLMRfkVyfiHuRZy2SSiBZSsSsbfaVBpr3bBYwiZpWfdI+yNauhdUHwF4kxlsHG0M99khhsbGCVpIBBzREX8xbgqlQKRqT0w1F9G7rBK7LaVinmwn3jGHFCaqGc/n6f7qHU//n/RXNsZcMwzYCZHubFwulSd7ySBHTCVVmI/Q49Om7UnPxkgjJs+KmQy+dQYQK2Zt8SYH2vczWkzr37aIgLc+uH0B/lykV7PrsgxnZ2jHRUZs0naasYdw0r7pt3nh6iZ4ipcn7pfAT6J8mCivmM5jCfjqzQKsny1GDCQlTzGzaBw85pBMS63wuXG5rduhLSMgw9MMGacpAt1Wo+kdCRF/eR7nf+YDoUl+0SNaPRHmvLxYQ/WcS3sP2mxSiGN+oFuDBkph1lE/XEot6y5EFywQ9T795uv8E= X-Forefront-Antispam-Report: CIP:64.62.143.114; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:smtp.corp.axiado.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(82310400026)(376014)(34020700016)(6133799003)(3023799007)(18002099003)(22082099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Qhai3rouz/W+OAta3QBWuek3fFk0DXobmrxliCnb6vbpUxDH/wwuglwS2lqONjeQloSa9HVVJ2gNEMj/8XyXZ2MlBJAxkIfsEZA/Y8XqXoOh+X2MHkH+p097UYcVi4LkGoN5v4Druq1kKo0mZdyXCrF36uIf0fBf2D2AZ9byjaLPuyUm/y8g0Yixyh2cxoQHfpz5S7BG6Tz6RqhBUJaRoazx18TXZZz9pl/A8RvXquqM5iB+Ig9SFAszIwR4OtPdJYX8e2tn30QB841K7BsGbbNuLKCX8fuQh55uCUp4JbTWzTQv/nXASz+rY+V7EedmNgn6PMCGSYs6cvlyTfnO3C1KrNaadBq4XhpBcinmeR+Tk6MSD8tjdTlNbX+KJ+roWzCwMIHkRZUMhojY3/Zoriwgpp24bqgGGbczc4ksXChhleoLYpDK5CHI4eoBl5Sd X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 06:33:56.3281 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eb35a0ad-1a13-48b7-a41c-08dec070ec2e X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7; Ip=[64.62.143.114]; Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F68.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR18MB4714 Received-SPF: pass client-ip=2a01:111:f403:c105::5; envelope-from=kchiu@axiado.com; helo=CH5PR02CU005.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: 1780382184809154100 Content-Type: text/plain; charset="utf-8" This patch add a new model for Cadence GPIO controller which supports 32 pins and interrupts for level-triggered/edge-triggered type on input pins. Also define new trace functions for analysis purpose and new configuration = to enable this model. Signed-off-by: Kuan-Jui Chiu --- hw/gpio/Kconfig | 3 + hw/gpio/cadence_gpio.c | 307 +++++++++++++++++++++++++++++++++ hw/gpio/meson.build | 1 + hw/gpio/trace-events | 5 + include/hw/gpio/cadence_gpio.h | 55 ++++++ 5 files changed, 371 insertions(+) create mode 100644 hw/gpio/cadence_gpio.c create mode 100644 include/hw/gpio/cadence_gpio.h diff --git a/hw/gpio/Kconfig b/hw/gpio/Kconfig index a209294c20c..fcc7c70bd50 100644 --- a/hw/gpio/Kconfig +++ b/hw/gpio/Kconfig @@ -30,3 +30,6 @@ config PCF8574 =20 config ZAURUS_SCOOP bool + +config CADENCE_GPIO + bool diff --git a/hw/gpio/cadence_gpio.c b/hw/gpio/cadence_gpio.c new file mode 100644 index 00000000000..08a8cf71968 --- /dev/null +++ b/hw/gpio/cadence_gpio.c @@ -0,0 +1,307 @@ +/* + * Cadence GPIO emulation. + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/gpio/cadence_gpio.h" +#include "hw/core/irq.h" +#include "migration/vmstate.h" +#include "qemu/log.h" +#include "trace.h" + +static void cdns_gpio_update_irq(CadenceGPIOState *s) +{ + qemu_set_irq(s->irq, s->isr ? 1 : 0); +} + +static void cdns_gpio_update_isr_per_line(CadenceGPIOState *s, int line, + uint32_t new) +{ + uint32_t old =3D extract32(s->inpvr, line, 1); + uint32_t ivr =3D extract32(s->ivr, line, 1); + + /* Deassert in bypass mode or not input pin */ + if (extract32(s->bmr, line, 1) || !extract32(s->dmr, line, 1) || + extract32(s->imr, line, 1)) { + s->isr =3D deposit32(s->isr, line, 1, 0); + return; + } + + if (extract32(s->itr, line, 1)) { + /* Level-triggered */ + if (ivr && new) { + /* High level */ + s->isr =3D deposit32(s->isr, line, 1, 1); + } + if (!ivr && !new) { + /* Low level */ + s->isr =3D deposit32(s->isr, line, 1, 1); + } + } else { + /* Edge-triggered */ + if (extract32(s->ioar, line, 1) && (old !=3D new)) { + /* On any edge */ + s->isr =3D deposit32(s->isr, line, 1, 1); + } else { + if (ivr && !old && new) { + /* Rising edge */ + s->isr =3D deposit32(s->isr, line, 1, 1); + } + if (!ivr && old && !new) { + /* Falling edge */ + s->isr =3D deposit32(s->isr, line, 1, 1); + } + } + } +} + +static void cdns_gpio_update_isr(CadenceGPIOState *s) +{ + for (int i =3D 0; i < CDNS_GPIO_NUM; i++) { + uint32_t level =3D extract32(s->inpvr, i, 1); + cdns_gpio_update_isr_per_line(s, i, level); + } +} + +static void cdns_gpio_set(void *opaque, int line, int level) +{ + CadenceGPIOState *s =3D CADENCE_GPIO(opaque); + uint32_t new =3D level ? 1 : 0; + + trace_cdns_gpio_set(DEVICE(s)->canonical_path, line, level); + + cdns_gpio_update_isr_per_line(s, line, new); + + /* Sync INPVR with new value */ + s->inpvr =3D deposit32(s->inpvr, line, 1, new); + + cdns_gpio_update_irq(s); +} + +static inline void cdns_gpio_update_output_irq(CadenceGPIOState *s) +{ + for (int i =3D 0; i < CDNS_GPIO_NUM; i++) { + /* Forward the output value to corresponding irq */ + if (!extract32(s->bmr, i, 1) && !extract32(s->dmr, i, 1) && + extract32(s->oer, i, 1) && s->output[i]) { + qemu_set_irq(s->output[i], extract32(s->ovr, i, 1)); + } + } +} + +static uint64_t cdns_gpio_read(void *opaque, hwaddr offset, unsigned size) +{ + CadenceGPIOState *s =3D CADENCE_GPIO(opaque); + uint32_t reg_value =3D 0x0; + + switch (offset) { + case CDNS_GPIO_BYPASS_MODE: + reg_value =3D s->bmr; + break; + + case CDNS_GPIO_DIRECTION_MODE: + reg_value =3D s->dmr; + break; + + case CDNS_GPIO_OUTPUT_EN: + reg_value =3D s->oer; + break; + + case CDNS_GPIO_OUTPUT_VALUE: + reg_value =3D s->ovr; + break; + + case CDNS_GPIO_INPUT_VALUE: + reg_value =3D s->inpvr; + break; + + case CDNS_GPIO_IRQ_MASK: + reg_value =3D s->imr; + break; + + case CDNS_GPIO_IRQ_STATUS: + reg_value =3D s->isr; + break; + + case CDNS_GPIO_IRQ_TYPE: + reg_value =3D s->itr; + break; + + case CDNS_GPIO_IRQ_VALUE: + reg_value =3D s->ivr; + break; + + case CDNS_GPIO_IRQ_ANY_EDGE: + reg_value =3D s->ioar; + break; + + default: + qemu_log_mask(LOG_GUEST_ERROR, "[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx "\n", TYPE_CADENCE_GPIO, __func__, offse= t); + break; + } + + trace_cdns_gpio_read(DEVICE(s)->canonical_path, offset, reg_value); + + return reg_value; +} + +static void cdns_gpio_write(void *opaque, hwaddr offset, uint64_t value, + unsigned size) +{ + CadenceGPIOState *s =3D CADENCE_GPIO(opaque); + + trace_cdns_gpio_write(DEVICE(s)->canonical_path, offset, value); + + switch (offset) { + case CDNS_GPIO_BYPASS_MODE: + s->bmr =3D value; + cdns_gpio_update_output_irq(s); + cdns_gpio_update_isr(s); + cdns_gpio_update_irq(s); + break; + + case CDNS_GPIO_DIRECTION_MODE: + s->dmr =3D value; + cdns_gpio_update_output_irq(s); + cdns_gpio_update_isr(s); + cdns_gpio_update_irq(s); + break; + + case CDNS_GPIO_OUTPUT_EN: + s->oer =3D value; + cdns_gpio_update_output_irq(s); + break; + + case CDNS_GPIO_OUTPUT_VALUE: + s->ovr =3D value; + cdns_gpio_update_output_irq(s); + break; + + case CDNS_GPIO_IRQ_EN: + s->imr &=3D ~value; + cdns_gpio_update_isr(s); + cdns_gpio_update_irq(s); + break; + + case CDNS_GPIO_IRQ_DIS: + s->imr |=3D value; + cdns_gpio_update_isr(s); + cdns_gpio_update_irq(s); + break; + + case CDNS_GPIO_IRQ_TYPE: + s->itr =3D value; + break; + + case CDNS_GPIO_IRQ_VALUE: + s->ivr =3D value; + break; + + case CDNS_GPIO_IRQ_ANY_EDGE: + s->ioar =3D value; + break; + + case CDNS_GPIO_INPUT_VALUE: + case CDNS_GPIO_IRQ_MASK: + case CDNS_GPIO_IRQ_STATUS: + /* Read-Only */ + break; + + default: + qemu_log_mask(LOG_GUEST_ERROR, "[%s]%s: Bad register at offset 0x%" + HWADDR_PRIx "\n", TYPE_CADENCE_GPIO, __func__, offse= t); + break; + } +} + +static const MemoryRegionOps cdns_gpio_ops =3D { + .read =3D cdns_gpio_read, + .write =3D cdns_gpio_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .impl =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + } +}; + +static const VMStateDescription vmstate_cdns_gpio =3D { + .name =3D TYPE_CADENCE_GPIO, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(bmr, CadenceGPIOState), + VMSTATE_UINT32(dmr, CadenceGPIOState), + VMSTATE_UINT32(oer, CadenceGPIOState), + VMSTATE_UINT32(ovr, CadenceGPIOState), + VMSTATE_UINT32(inpvr, CadenceGPIOState), + VMSTATE_UINT32(imr, CadenceGPIOState), + VMSTATE_UINT32(isr, CadenceGPIOState), + VMSTATE_UINT32(itr, CadenceGPIOState), + VMSTATE_UINT32(ivr, CadenceGPIOState), + VMSTATE_UINT32(ioar, CadenceGPIOState), + VMSTATE_END_OF_LIST() + } +}; + +static void cdns_gpio_reset(DeviceState *dev) +{ + CadenceGPIOState *s =3D CADENCE_GPIO(dev); + + s->bmr =3D 0; + s->dmr =3D 0; + s->oer =3D 0; + s->ovr =3D 0; + s->inpvr =3D 0; + s->imr =3D 0xffffffff; + s->isr =3D 0; + s->itr =3D 0; + s->ivr =3D 0; + s->ioar =3D 0; +} + +static void cdns_gpio_init(Object *obj) +{ + CadenceGPIOState *s =3D CADENCE_GPIO(obj); + + memory_region_init_io(&s->iomem, obj, &cdns_gpio_ops, s, + TYPE_CADENCE_GPIO, CDNS_GPIO_REG_SIZE); + + qdev_init_gpio_in(DEVICE(s), cdns_gpio_set, CDNS_GPIO_NUM); + qdev_init_gpio_out(DEVICE(s), s->output, CDNS_GPIO_NUM); + + sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->iomem); +} + +static void cdns_gpio_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + device_class_set_legacy_reset(dc, cdns_gpio_reset); + dc->vmsd =3D &vmstate_cdns_gpio; + dc->desc =3D "Cadence GPIO controller"; +} + +static const TypeInfo cdns_gpio_info =3D { + .name =3D TYPE_CADENCE_GPIO, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(CadenceGPIOState), + .instance_init =3D cdns_gpio_init, + .class_init =3D cdns_gpio_class_init, +}; + +static void cdns_gpio_register_types(void) +{ + type_register_static(&cdns_gpio_info); +} + +type_init(cdns_gpio_register_types) diff --git a/hw/gpio/meson.build b/hw/gpio/meson.build index 6a67ee958fa..0555f44b6a7 100644 --- a/hw/gpio/meson.build +++ b/hw/gpio/meson.build @@ -19,3 +19,4 @@ system_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('= aspeed_gpio.c')) system_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('aspeed_sgpio.c')) system_ss.add(when: 'CONFIG_SIFIVE_GPIO', if_true: files('sifive_gpio.c')) system_ss.add(when: 'CONFIG_PCF8574', if_true: files('pcf8574.c')) +system_ss.add(when: 'CONFIG_CADENCE_GPIO', if_true: files('cadence_gpio.c'= )) diff --git a/hw/gpio/trace-events b/hw/gpio/trace-events index cea896b28f6..80ca783a039 100644 --- a/hw/gpio/trace-events +++ b/hw/gpio/trace-events @@ -46,3 +46,8 @@ stm32l4x5_gpio_read(char *gpio, uint64_t addr) "GPIO%s ad= dr: 0x%" PRIx64 " " stm32l4x5_gpio_write(char *gpio, uint64_t addr, uint64_t data) "GPIO%s add= r: 0x%" PRIx64 " val: 0x%" PRIx64 "" stm32l4x5_gpio_update_idr(char *gpio, uint32_t old_idr, uint32_t new_idr) = "GPIO%s from: 0x%x to: 0x%x" stm32l4x5_gpio_pins(char *gpio, uint16_t disconnected, uint16_t high) "GPI= O%s disconnected pins: 0x%x levels: 0x%x" + +# cadence_gpio.c +cdns_gpio_read(const char *path, uint64_t offset, uint32_t value) "%s:reg[= 0x%04" PRIx64 "] -> 0x%" PRIx32 +cdns_gpio_write(const char *path, uint64_t offset, uint64_t value) "%s:reg= [0x%04" PRIx64 "] <- 0x%04" PRIx64 +cdns_gpio_set(const char *path, int line, int level) "%s:[%d] <- %d" diff --git a/include/hw/gpio/cadence_gpio.h b/include/hw/gpio/cadence_gpio.h new file mode 100644 index 00000000000..ed3f77b894f --- /dev/null +++ b/include/hw/gpio/cadence_gpio.h @@ -0,0 +1,55 @@ +/* + * Cadence GPIO registers definition. + * + * Author: Kuan-Jui Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef CADENCE_GPIO_H +#define CADENCE_GPIO_H + +#include "hw/core/sysbus.h" +#include "qom/object.h" + +#define TYPE_CADENCE_GPIO "cadence_gpio" +OBJECT_DECLARE_SIMPLE_TYPE(CadenceGPIOState, CADENCE_GPIO) + +#define CDNS_GPIO_REG_SIZE 0x400 +#define CDNS_GPIO_NUM 32 + +#define CDNS_GPIO_BYPASS_MODE 0x00 +#define CDNS_GPIO_DIRECTION_MODE 0x04 +#define CDNS_GPIO_OUTPUT_EN 0x08 +#define CDNS_GPIO_OUTPUT_VALUE 0x0c +#define CDNS_GPIO_INPUT_VALUE 0x10 +#define CDNS_GPIO_IRQ_MASK 0x14 +#define CDNS_GPIO_IRQ_EN 0x18 +#define CDNS_GPIO_IRQ_DIS 0x1c +#define CDNS_GPIO_IRQ_STATUS 0x20 +#define CDNS_GPIO_IRQ_TYPE 0x24 +#define CDNS_GPIO_IRQ_VALUE 0x28 +#define CDNS_GPIO_IRQ_ANY_EDGE 0x2c + +struct CadenceGPIOState { + /*< private >*/ + SysBusDevice parent_obj; + + /*< public >*/ + MemoryRegion iomem; + + uint32_t bmr; + uint32_t dmr; + uint32_t oer; + uint32_t ovr; + uint32_t inpvr; + uint32_t imr; + uint32_t isr; + uint32_t itr; + uint32_t ivr; + uint32_t ioar; + qemu_irq irq; + qemu_irq output[CDNS_GPIO_NUM]; +}; + +#endif /* CADENCE_GPIO_H */ --=20 2.34.1 From nobody Mon Jun 8 04:26:14 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=1780382105; cv=pass; d=zohomail.com; s=zohoarc; b=QlohMJvbTRNHHgBqEPukbiek8E9MBERqZSYbPL9HsGMGNEUPgsE6Gh87e761Hu1+6280KAIH5spkHr7v1FJ62P2RPRkB7OcjOEHY3kG+DPzcGNIwlNjPxfLbC5Rhk4qzQ1LrR1QHb0UdbWwbfrfyVLW+XuUtgfeTa4mVuGFrvbE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780382105; 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=604fLzWtT33lyCZ8SEvyoaj7ruGF3ReTRMguGEFCk40=; b=K9ztMjmBTDYE1M+DiDz+r+cF8lyrubhxDiKgJo0HNdBKEZQjsqMrEV5qfUCgMlYCauKdUxVUuwb0svGk1Ldl7rKaScOLjQ1CAn+iXThJp9y2fI+jryhLizxiubqN/pDAJWgcfrJFhjT/nyO9OkqWEjmGTPO0aPUxScaZtL36brM= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780382105783525.830942479055; Mon, 1 Jun 2026 23:35:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUIhR-0005ff-J8; Tue, 02 Jun 2026 02:34:05 -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 1wUIhQ-0005eU-6r for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:04 -0400 Received: from mail-centralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c111::5] helo=DM1PR04CU001.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 1wUIhN-0004bv-R5 for qemu-devel@nongnu.org; Tue, 02 Jun 2026 02:34:03 -0400 Received: from BL1PR13CA0200.namprd13.prod.outlook.com (2603:10b6:208:2be::25) by IA2PR18MB5961.namprd18.prod.outlook.com (2603:10b6:208:4ba::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.15; Tue, 2 Jun 2026 06:33:57 +0000 Received: from BL6PEPF00020E62.namprd04.prod.outlook.com (2603:10b6:208:2be:cafe::9e) by BL1PR13CA0200.outlook.office365.com (2603:10b6:208:2be::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.7 via Frontend Transport; Tue, 2 Jun 2026 06:33:57 +0000 Received: from smtp.corp.axiado.com (64.62.143.114) by BL6PEPF00020E62.mail.protection.outlook.com (10.167.249.23) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.5 via Frontend Transport; Tue, 2 Jun 2026 06:33:57 +0000 Received: from axiado.com (vm-swbuild01.axiadoRD [10.4.1.181]) by smtp.corp.axiado.com (Postfix) with ESMTP id BAD4240BFE11; Mon, 1 Jun 2026 23:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FyEUlZ5zzl3uw3lQ+pEhpX9rPVL1JAzHT9xbjwW+EF8dbuYgLwf/+CdeVByBkKLK42Vn8PhYIrSUNucSiRhD9du4dyvMExeyG7m0hNPqh0HtdrdfpIGIM//VY5DFbqL0JmSfeXXBj2tAdiO1D2tDd6N4KcqTS8QGcPU02MhBGg3bDVuOMC+M56zQ1BybLr7fVgjgJXdWu9SAviTaX1Cj57IL1FupXktuwv/ngzHac6xx9Eotbz/cpDcK1X8J69pM5kasJk4dvuwqqHqpqPu+psON2QCx/bXP0+hUUUmxpKSp3xd4dSjSzcJvzTKU2kB5uiKRUxkAUVA/Pep/wClLVA== 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=604fLzWtT33lyCZ8SEvyoaj7ruGF3ReTRMguGEFCk40=; b=gny2Dat+aMpqQwN7zG341pQesUPtr+vm8ix51NJgjJpVpT/Ca4fk+du4l+207eKLzeS8ALz03jfGWJo3uo6xnfsgbJcBexkcjMpxtqaUQFWYWUdvNhZ+uWkzv4Qx6khEeNwxgFsLPRdqJOiN2jqbCxUmxz5NxZSLlyQK5GVll9DtwES+nLH+N6aCacTszQXBZydUJAO9MXICYX5eVdMm2hd/NDXsZJrVCtrkdpjtrUkeitNak/xU7pq66eRC/el6XSMYkSl0ulfkZssmaCOxlc4H6A8ikr64JWYg2WTU1pGQdmt+bYMSf98L2e7oDwd1fpVoxYnD/Brva3TZJF2HaQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) 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=604fLzWtT33lyCZ8SEvyoaj7ruGF3ReTRMguGEFCk40=; b=Geo13iawreCp/jlbtA/NQyHVLfBVFiel6a0qEdfyD/q0HljjlhKWWdIZR600xw92vgy5bnYX+tX3Iy9wrxAkUXuVat2HQYoscNjnG4Ekhx1aESsgp4xCIj8WT6gb8YKM+JlpuVBcUVIaTcDb/TDUvVyaDHpDoU2sWPCz78XNK12/xMyqR2EXkTNO/voAqcY5G9bjDS0Mi9EzTnN8brqfl02OYrAwQ45Hh+FM2xKiBCB6Uo1qfBW7JJBOU6ifO1Eyq68WvXVVg4nMs86uxV0UBSxr8gLlktZ/iThKormAYycmDziYgYK+8BNIm5bSun0iVSMxhq9Ewwh2gH+3PmB/8A== X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; 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: Fail (protection.outlook.com: domain of axiado.com does not designate 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; From: Kuan-Jui Chiu To: qemu-devel@nongnu.org, peter.maydell@linaro.org Cc: Kuan-Jui Chiu Subject: [PATCH v3 6/6] hw/arm: ax3000-soc: Enable Cadence GPIO controllers Date: Mon, 1 Jun 2026 23:33:50 -0700 Message-Id: <20260602063350.3623723-7-kchiu@axiado.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260602063350.3623723-1-kchiu@axiado.com> References: <20260602063350.3623723-1-kchiu@axiado.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF00020E62:EE_|IA2PR18MB5961:EE_ X-MS-Office365-Filtering-Correlation-Id: 11769ea2-71dd-4dc6-5491-08dec070ecd5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|376014|1800799024|82310400026|34020700016|56012099006|6133799003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: v3/i/LE07Ezpla0q4b3s3i1PJkUCB1EAyJTzdVAfYqLBcSzI/G1BrV7l7zJEOsi4Epjx/wgbU4jSPKrHjhkdJI+uoRlTPqdvhJS5rBlz4cIKjrCBHLeXXyaBknQJWb85R6KyW7rThBNa+BlbXyoNk1baVmQncJTJMuA6NtE5SSl5u46OPzhiG+JezutnRv4wOq8hCyacoy3SDwUU4j57tdyAM8vbVc3dN76fAwoLtUM7Q1gKs0YUrc9JJXTS6mFa1+HvRr7RrK50q5CoOFdZL0DFdXrs+u1aSdczI56/4nWMfFWI6ywDv3x5MZZQKhu3/RpYYnzS4F/qpL1XAo3IoOzwJA1dy+pfmBvkw9tOWNoaVUF5PCaMvBfiMs3CSUjF+m4vki5nB1g/uORAq58R19TVdA1znSS/Y3J3HKeJrqRldM50StMq0INRNg7qnvFMekGwAcwVvRuqJ4el61a+n6MMneuDuXyBT5yn/0O3iUcuTVD+6L74QuPzkNwFqotEpzL8BRfyFK+emP0Q4Riw+zdbkrEL67BfJ3qF9Iyld//wJVZY8osq/+5E7ICPJ/NYaR0PuT6O/PWbpwGYFNZb+ZHsBh7kQmXx4iTlj+OdxatAtPDjxLME/b7pJ4nELsVO5wPoogptF430sGCpORIY7mm92ZFNzpr+hJgk5EjjD8MIyRJ3jBkkWSkiVC3Pjz31Z3D8/HNcLWN5UEWvk4erYDzs9sEmUxxxdHOLc3DnTmE= X-Forefront-Antispam-Report: CIP:64.62.143.114; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:smtp.corp.axiado.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(36860700016)(376014)(1800799024)(82310400026)(34020700016)(56012099006)(6133799003)(18002099003)(22082099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2rmUGbQbBNUS1ZUEaxYJdwirHt1KZCg5ZOoYU1CmR4HOv6o+1lp24f6KTN95+TIyDCk55Ge3fLPsOivELoUdYlFQFTLEFTErE5hbyj3zD4hfyC2hpmizFgib/fx6bt0opKFWgTeVCzUWUftSmxIq4uL1okzFw4h7Dg+3XJlPc1v9SYzGtwwkR8mgZ6EPGjpRcMvxlveyuyIkNfSzkeIWCM0BrBxOlQKCnFa/VHgMhjkno6pN04/aemCVm5SNFGcsPI5O0kT3A5KMc0Ufk9+JDcKWhq1kVm0BWE7PqiEDwppPKK9WlslxXg/w7QTF85xk5mILaPVKz6h0cDqWhYgOxgNomtkmdm5UzITfri0QHadu7NDk1LYIMqPNHdcUap7X97CF04zBctdoN8zSM5yjwOpISNqoyU0uGVIT0eJc4qfvLsmdzqJyyI0GzmWFZSbY X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 06:33:57.3723 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 11769ea2-71dd-4dc6-5491-08dec070ecd5 X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7; Ip=[64.62.143.114]; Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF00020E62.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA2PR18MB5961 Received-SPF: pass client-ip=2a01:111:f403:c111::5; envelope-from=kchiu@axiado.com; helo=DM1PR04CU001.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: 1780382109615154100 Content-Type: text/plain; charset="utf-8" Enable 8 Cadence GPIO controllers into Axiado AX3000 SoC Signed-off-by: Kuan-Jui Chiu --- hw/arm/Kconfig | 1 + hw/arm/ax3000-soc.c | 30 ++++++++++++++++++++++++++++++ include/hw/arm/ax3000-soc.h | 21 +++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 175e6c7985b..1affb1f6228 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -722,6 +722,7 @@ config AXIADO_SOC depends on ARM select ARM_GIC select CADENCE # UART + select CADENCE_GPIO select AXIADO_SDHCI select UNIMP =20 diff --git a/hw/arm/ax3000-soc.c b/hw/arm/ax3000-soc.c index fd8c2f977e7..3f9abc59dff 100644 --- a/hw/arm/ax3000-soc.c +++ b/hw/arm/ax3000-soc.c @@ -65,6 +65,11 @@ static void ax3000_init(Object *obj) } =20 object_initialize_child(obj, "sdhci0", &s->sdhci0, TYPE_AXIADO_SDHCI); + + for (int i =3D 0; i < AX3000_NUM_GPIOS; i++) { + g_autofree char *name =3D g_strdup_printf("gpio%d", i); + object_initialize_child(obj, name, &s->gpio[i], TYPE_CADENCE_GPIO); + } } =20 static void ax3000_realize(DeviceState *dev, Error **errp) @@ -212,6 +217,31 @@ static void ax3000_realize(DeviceState *dev, Error **e= rrp) blk_by_legacy_dinfo((drive_get(IF_SD, 0, 0))), &error_fatal); qdev_realize_and_unref(card, s->sdhci0.sd_bus, &error_fatal); + + /* GPIOs */ + for (int i =3D 0; i < AX3000_NUM_GPIOS; i++) { + struct { + hwaddr addr; + unsigned int irq; + } gpio_table[] =3D { + { AX3000_GPIO0_BASE, AX3000_GPIO0_IRQ }, + { AX3000_GPIO1_BASE, AX3000_GPIO1_IRQ }, + { AX3000_GPIO2_BASE, AX3000_GPIO2_IRQ }, + { AX3000_GPIO3_BASE, AX3000_GPIO3_IRQ }, + { AX3000_GPIO4_BASE, AX3000_GPIO4_IRQ }, + { AX3000_GPIO5_BASE, AX3000_GPIO5_IRQ }, + { AX3000_GPIO6_BASE, AX3000_GPIO6_IRQ }, + { AX3000_GPIO7_BASE, AX3000_GPIO7_IRQ } + }; + + if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio[i]), errp)) { + return; + } + + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio[i]), 0, gpio_table[i].addr= ); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio[i]), 0, + qdev_get_gpio_in(gic_dev, gpio_table[i].irq)); + } } =20 static void ax3000_class_init(ObjectClass *oc, const void *data) diff --git a/include/hw/arm/ax3000-soc.h b/include/hw/arm/ax3000-soc.h index 763866ce6e2..aa388f79f0e 100644 --- a/include/hw/arm/ax3000-soc.h +++ b/include/hw/arm/ax3000-soc.h @@ -12,6 +12,7 @@ #include "cpu.h" #include "hw/intc/arm_gicv3_common.h" #include "hw/char/cadence_uart.h" +#include "hw/gpio/cadence_gpio.h" #include "hw/sd/axiado_sdhci.h" #include "hw/core/sysbus.h" #include "qemu/units.h" @@ -37,6 +38,15 @@ OBJECT_DECLARE_TYPE(Ax3000SoCState, Ax3000SoCClass, AX30= 00_SOC) #define AX3000_SDHCI0_BASE 0x86000000 #define AX3000_EMMC_PHY_BASE 0x80801C00 =20 +#define AX3000_GPIO0_BASE 0x80500000 +#define AX3000_GPIO1_BASE 0x80580000 +#define AX3000_GPIO2_BASE 0x80600000 +#define AX3000_GPIO3_BASE 0x80680000 +#define AX3000_GPIO4_BASE 0x80700000 +#define AX3000_GPIO5_BASE 0x80780000 +#define AX3000_GPIO6_BASE 0x80800000 +#define AX3000_GPIO7_BASE 0x80880000 + #define AX3000_TIMER_CTRL 0x8A020000 #define AX3000_PLL_BASE 0x80000000 #define CLKRST_CPU_PLL_POSTDIV_OFFSET 0x0C @@ -47,6 +57,7 @@ enum Ax3000Configuration { AX3000_NUM_IRQS =3D 224, AX3000_NUM_BANKS =3D 2, AX3000_NUM_UARTS =3D 4, + AX3000_NUM_GPIOS =3D 8, }; =20 typedef struct Ax3000SoCState { @@ -57,6 +68,7 @@ typedef struct Ax3000SoCState { MemoryRegion dram[AX3000_NUM_BANKS]; MemoryRegion pll_ctrl; CadenceUARTState uart[AX3000_NUM_UARTS]; + CadenceGPIOState gpio[AX3000_NUM_GPIOS]; AxiadoSDHCIState sdhci0; } Ax3000SoCState; =20 @@ -73,6 +85,15 @@ enum Ax3000Irqs { AX3000_UART3_IRQ =3D 170, =20 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, }; =20 #endif /* AXIADO_AX3000_H */ --=20 2.34.1