From nobody Mon Apr 14 23:38:35 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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; dmarc=pass(p=none dis=none) header.from=nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1741845003; cv=none; d=zohomail.com; s=zohoarc; b=JFUkV3P1Akk3KnLw92R5zYqRTuhKjQmQ6a6CjoQZo3OvDIFbmQoNfjXQ+dwmOOBFRa+vRA2cMAlFeZta4CqQaofFgHmn9VWrW2Z+2KeVNSQF7CWXo7s8osPDhHAeEwfez10/2jDPZe7U64IJAJPYKRqcySVKhhl6g60JCqFQ6zw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1741845003; 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:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=O7b3TmSnMBVV3uVe5JsAxrDkWMC+pzQMJyPOMDZH9y8=; b=foLKP8rKbTxnCovjS5ChadpHUIp7T4J9ttqKhTG28U4Zr17W38xZR7kA7i2FpuKAPhPcYZjFkKdxf7N7YT3gwzGL8XM+o9G57mBDrYs83RmykCEMUzRzSeAZjLgDRPjUqAKRV0SQtqtwoI3VdTKzhwCy4TI/Sz23FVP+tOwK+J8= ARC-Authentication-Results: i=1; mx.zohomail.com; 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; dmarc=pass header.from=<qemu-devel@nongnu.org> (p=none dis=none) Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org> Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1741845003610340.47166488561265; Wed, 12 Mar 2025 22:50:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <qemu-devel-bounces@nongnu.org>) id 1tsbOp-00051h-VJ; Thu, 13 Mar 2025 01:46:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <steven_lee@aspeedtech.com>) id 1tsbOP-0004qF-MY; Thu, 13 Mar 2025 01:46:08 -0400 Received: from mail.aspeedtech.com ([211.20.114.72] helo=TWMBX01.aspeed.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <steven_lee@aspeedtech.com>) id 1tsbON-0005Ve-WC; Thu, 13 Mar 2025 01:46:05 -0400 Received: from TWMBX01.aspeed.com (192.168.0.62) by TWMBX01.aspeed.com (192.168.0.62) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.12; Thu, 13 Mar 2025 13:40:22 +0800 Received: from mail.aspeedtech.com (192.168.10.10) by TWMBX01.aspeed.com (192.168.0.62) with Microsoft SMTP Server id 15.2.1258.12 via Frontend Transport; Thu, 13 Mar 2025 13:40:22 +0800 To: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= <clg@kaod.org>, Peter Maydell <peter.maydell@linaro.org>, Troy Lee <leetroy@gmail.com>, Jamin Lin <jamin_lin@aspeedtech.com>, Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>, "open list:ASPEED BMCs" <qemu-arm@nongnu.org>, "open list:All patches CC here" <qemu-devel@nongnu.org> CC: <troy_lee@aspeedtech.com>, <yunlin.tang@aspeedtech.com> Subject: [PATCH 06/13] hw/arm/aspeed_ast27x0-ssp: Introduce AST27x0 A1 SSP SoC Date: Thu, 13 Mar 2025 13:40:10 +0800 Message-ID: <20250313054020.2583556-7-steven_lee@aspeedtech.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250313054020.2583556-1-steven_lee@aspeedtech.com> References: <20250313054020.2583556-1-steven_lee@aspeedtech.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=211.20.114.72; envelope-from=steven_lee@aspeedtech.com; helo=TWMBX01.aspeed.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_FAIL=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-devel.nongnu.org> List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe> List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel> List-Post: <mailto:qemu-devel@nongnu.org> List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help> List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=subscribe> Reply-to: Steven Lee <steven_lee@aspeedtech.com> From: Steven Lee via <qemu-devel@nongnu.org> Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1741845006212019100 Content-Type: text/plain; charset="utf-8" The AST2700 SSP (Secondary Service Processor) is a Cortex-M4 coprocessor. This patch adds support for A1 SSP with the following updates: - Defined IRQ maps for AST27x0 A1 SSP SoC - Implemented initialization functions The IRQ mapping is similar to AST2700 CA35 SoC, featuring a two-level interrupt controller. Difference from AST2700: - AST2700 - Support GICINT128 to GICINT136 in INTC - The INTCIO GIC_192_201 has 10 output pins, mapped as follows: Bit 0 -> GIC 192 Bit 1 -> GIC 193 Bit 2 -> GIC 194 Bit 3 -> GIC 195 Bit 4 -> GIC 196 - AST2700-ssp - Support SSPINT128 to SSPINT136 in INTC - The INTCIO SSPINT_160_169 has 10 output pins, mapped as follows: Bit 0 -> SSPINT 160 Bit 1 -> SSPINT 161 Bit 2 -> SSPINT 162 Bit 3 -> SSPINT 163 Bit 4 -> SSPINT 164 Signed-off-by: Steven Lee <steven_lee@aspeedtech.com> Change-Id: Ic5121dd78c5dacf1ec4b4e791cc7bf476a8b608f --- hw/arm/aspeed_ast27x0-ssp.c | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/hw/arm/aspeed_ast27x0-ssp.c b/hw/arm/aspeed_ast27x0-ssp.c index 88f27b9459..5553190a62 100644 --- a/hw/arm/aspeed_ast27x0-ssp.c +++ b/hw/arm/aspeed_ast27x0-ssp.c @@ -60,6 +60,24 @@ static const int aspeed_soc_ast27x0a0ssp_irqmap[] =3D { [ASPEED_DEV_TIMER1] =3D 16, }; =20 +static const int aspeed_soc_ast27x0a1ssp_irqmap[] =3D { + [ASPEED_DEV_SCU] =3D 12, + [ASPEED_DEV_UART0] =3D 164, + [ASPEED_DEV_UART1] =3D 164, + [ASPEED_DEV_UART2] =3D 164, + [ASPEED_DEV_UART3] =3D 164, + [ASPEED_DEV_UART4] =3D 8, + [ASPEED_DEV_UART5] =3D 164, + [ASPEED_DEV_UART6] =3D 164, + [ASPEED_DEV_UART7] =3D 164, + [ASPEED_DEV_UART8] =3D 164, + [ASPEED_DEV_UART9] =3D 164, + [ASPEED_DEV_UART10] =3D 164, + [ASPEED_DEV_UART11] =3D 164, + [ASPEED_DEV_UART12] =3D 164, + [ASPEED_DEV_TIMER1] =3D 16, +}; + /* SSPINT 164 */ static const int ast2700_ssp132_ssp164_intcmap[] =3D { [ASPEED_DEV_UART0] =3D 7, @@ -167,6 +185,46 @@ static void aspeed_soc_ast27x0a0ssp_init(Object *obj) TYPE_UNIMPLEMENTED_DEVICE); } =20 +static void aspeed_soc_ast27x0a1ssp_init(Object *obj) +{ + Aspeed27x0SSPSoCState *a =3D ASPEED27X0SSP_SOC(obj); + AspeedSoCState *s =3D ASPEED_SOC(obj); + AspeedSoCClass *sc =3D ASPEED_SOC_GET_CLASS(s); + char socname[8]; + char typename[64]; + int i; + + if (sscanf(object_get_typename(obj), "%7s", socname) !=3D 1) { + g_assert_not_reached(); + } + + object_initialize_child(obj, "armv7m", &a->armv7m, TYPE_ARMV7M); + + s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); + + snprintf(typename, sizeof(typename), "aspeed.scu-%s", socname); + object_initialize_child(obj, "scu", &s->scu, typename); + qdev_prop_set_uint32(DEVICE(&s->scu), "silicon-rev", sc->silicon_rev); + + for (i =3D 0; i < sc->uarts_num; i++) { + object_initialize_child(obj, "uart[*]", &s->uart[i], TYPE_SERIAL_M= M); + } + + object_initialize_child(obj, "intc0", &a->intc[0], + TYPE_ASPEED_2700SSP_INTC); + object_initialize_child(obj, "intc1", &a->intc[1], + TYPE_ASPEED_2700SSP_INTCIO); + + object_initialize_child(obj, "timerctrl", &s->timerctrl, + TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "ipc0", &a->ipc[0], + TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "ipc1", &a->ipc[1], + TYPE_UNIMPLEMENTED_DEVICE); + object_initialize_child(obj, "scuio", &a->scuio, + TYPE_UNIMPLEMENTED_DEVICE); +} + static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **er= rp) { Aspeed27x0SSPSoCState *a =3D ASPEED27X0SSP_SOC(dev_soc); @@ -292,6 +350,34 @@ static void aspeed_soc_ast27x0a0ssp_class_init(ObjectC= lass *klass, void *data) sc->get_irq =3D aspeed_soc_ast27x0ssp_get_irq; } =20 +static void aspeed_soc_ast27x0a1ssp_class_init(ObjectClass *klass, void *d= ata) +{ + static const char * const valid_cpu_types[] =3D { + ARM_CPU_TYPE_NAME("cortex-m4"), /* TODO: cortex-m4f */ + NULL + }; + DeviceClass *dc =3D DEVICE_CLASS(klass); + AspeedSoCClass *sc =3D ASPEED_SOC_CLASS(dc); + + /* Reason: The Aspeed SoC can only be instantiated from a board */ + dc->user_creatable =3D false; + dc->realize =3D aspeed_soc_ast27x0ssp_realize; + + sc->valid_cpu_types =3D valid_cpu_types; + sc->silicon_rev =3D AST2700_A1_SILICON_REV; + sc->sram_size =3D AST2700_SSP_RAM_SIZE; + sc->spis_num =3D 0; + sc->ehcis_num =3D 0; + sc->wdts_num =3D 0; + sc->macs_num =3D 0; + sc->uarts_num =3D 13; + sc->uarts_base =3D ASPEED_DEV_UART0; + sc->irqmap =3D aspeed_soc_ast27x0a1ssp_irqmap; + sc->memmap =3D aspeed_soc_ast27x0ssp_memmap; + sc->num_cpus =3D 1; + sc->get_irq =3D aspeed_soc_ast27x0ssp_get_irq; +} + static const TypeInfo aspeed_soc_ast27x0ssp_types[] =3D { { .name =3D TYPE_ASPEED27X0SSP_SOC, @@ -303,6 +389,11 @@ static const TypeInfo aspeed_soc_ast27x0ssp_types[] = =3D { .parent =3D TYPE_ASPEED27X0SSP_SOC, .instance_init =3D aspeed_soc_ast27x0a0ssp_init, .class_init =3D aspeed_soc_ast27x0a0ssp_class_init, + }, { + .name =3D "ast2700ssp-a1", + .parent =3D TYPE_ASPEED27X0SSP_SOC, + .instance_init =3D aspeed_soc_ast27x0a1ssp_init, + .class_init =3D aspeed_soc_ast27x0a1ssp_class_init, }, }; =20 --=20 2.34.1