From nobody Sun Jul 26 10:07:33 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1784849822; cv=none; d=zohomail.com; s=zohoarc; b=fgy4Zsh2NobJg3dAe8rS66Kb3eiBEelACVcMCgh851br1+v0nb6PjPOh0uNw0giSohmIvMPKV8OC/ZN7e43P8Cl4wVxOz/2Rd/JQ8Q8AvSAnTKaTlAoJbNiN1xFZaa/AhNoSlVwG5BADAQ/d+Gs+do7BXx9tfGLxQcAkTwcK1+w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784849822; h=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=PRIi6XtfgqYlUx793rNESywQHULiK6u+HEEbogPG23Q=; b=ZOTaxWGp10+jweQRAqJESWj/nUDNLULugC3hY7EGot5pyArzREj6nrbrw6KIiy7rr3ufdxHk3J8ola8o1PpX6nfLzRborAN+dXPPbUDPrWQN31c2vMr/JoUo3RvtiRTLGuoYIC1gWqh/g5BMhFOE8S6E91sayHGkNbUuG3LAhyM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784849822115953.1999722571529; Thu, 23 Jul 2026 16:37:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wn2xZ-0004st-RV; Thu, 23 Jul 2026 19:36: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 1wn2xY-0004rS-8P for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:12 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wn2xW-0001cH-LV for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:11 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-43bf9548df4so655153fac.0 for ; Thu, 23 Jul 2026 16:36:10 -0700 (PDT) Received: from HPE-2MQ6131DV6.home.local ([23.124.244.239]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4ab248c6667sm3631997b6e.0.2026.07.23.16.36.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jul 2026 16:36:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784849769; x=1785454569; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PRIi6XtfgqYlUx793rNESywQHULiK6u+HEEbogPG23Q=; b=YX+weK1kZ6qpuv6z/1auEN053Xss9KwuMZhSS0VY/Qm6jXaZj4uKolxBc5bm1W3BDw drduNUwvEDO2D+Kc4P+NouAFj9QzYjfmfHJaC77WZrfqE0PsxrQ+BbsmN6ZGqcZI8jJw AZoeGCBOFq5QwRDapbV++zOyUfdsSssC0fwKU9tO/vwtoxEl7CHg/uCdsbvmanxhYM/2 jAR7Qtci0SDyroHEsOp1azWGRh9ZO7nMu7wvzQVhPSrZqB8gx62T4+lmEYCLTdOEbNjC jWZxsotERYbQNINjzxbLsfiOjjU0+cH5+9QErUgWursGhid/m7TxQXGBBpO61GserTpZ Zi6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784849769; x=1785454569; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PRIi6XtfgqYlUx793rNESywQHULiK6u+HEEbogPG23Q=; b=kGP0LK/PW6GLGNUSnYTZs7rJv107/jWLVUI1DojTBmXZ5K0nS2i7de8nwaV1ryqi9F ryISuodu5X9tUABdp+v2NttdmfugVbefRyUif3le6gO6MWkOU4212mitFnmJcBk+MOzZ FIsUaEHCezlque6Aollcilvo1vuYkqX7nRYmWSNMZTSJYbpwhlomJ0b40ZR41pXyCPsR iNq8KHV4FeoFTh2rgaviJsyyCUFj99nza0ONzqn4Q2D9l+irN+9P5TdTvYCpACO6h+1w ReWsmNTt13xvmQMSoa7PEgjGwv1EgQbKqHXXZepip1SJcfmcXFgYU3ghC8JgnzmKAcoc vJEg== X-Gm-Message-State: AOJu0YwYW/r4stAhI0izJ50T35zmWMA6tcQ8Nm5aBOGwheI02MqJWroU /QMvqtk9Rn/5Fmi/eofuXQJrj7h8goceSfalDu149WI8Zkd8+DzG28I4Qd9JF/yI X-Gm-Gg: AR+sD13OaYTXcY+yua/571ucXK0xK6c76uLwww/Ec5lh5LIFpkA5L4vFrb5W6PUIWU2 OoOoDFzAzJ3uUclLIzmImyyEOy+9OsiN8gpjNyh+Qp4Y7FyBGI8wmIzpc+sqeBvguSOFcYCfBZw h3V9XG2Fn6NZ2Zr62OlXZz8AzQ93MrK0YYhmLoHV2AoDGxdSOfpqapSTAqeGkiiAp3AHXhsI/lU d6Ml6dYBjhFM3L996pvXUaC7d3IbtRhaM+UFh5Sjj6xSnyENju/vNO3hhcC2PVXuk+Vbnv3Rj3A UNYdtGuA8Yed4IF4rQg+L+Rqul7P8z8hgQ3FxmkPW891clDfO+/agIXiVRK0oUCeSXHqbjm7B+9 VCfvWZslebuccEn0j/WA9xjEyZT9bYBzkh++rUMIHogO0Ai3hCZB5K0y7JB3X7lTNzCHxw+Lb0Z cxr+ZE3JNO2NYsc3xY73c8cWU= X-Received: by 2002:a05:6808:f07:b0:4a1:296:adec with SMTP id 5614622812f47-4ab352904famr3191656b6e.15.1784849769077; Thu, 23 Jul 2026 16:36:09 -0700 (PDT) From: Simon Xu To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell , Owen Giles , Pierrick Bouvier , Robert Elliott , Simon Xu Subject: [PATCH 1/4] target/arm/tcg/cpu-v7m.c: add cortex-m85 model Date: Thu, 23 Jul 2026 18:36:02 -0500 Message-Id: <20260723233605.805-2-simonxhy0404@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260723233605.805-1-simonxhy0404@gmail.com> References: <20260723233605.805-1-simonxhy0404@gmail.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=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=simonxhy0404@gmail.com; helo=mail-oa1-x2d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 @gmail.com) X-ZM-MESSAGEID: 1784849825370158500 Content-Type: text/plain; charset="utf-8" Add Arm Cortex-M85 CPU, modeld after the existing M55 CPU. The new M85 feature PACBTI is not implemented in QEMU and the midr value is based off the r1p1 product revision identifier. Arm Cortex-M85 TRM: https://developer.arm.com/documentation/101924/0101/ Reviewed-by: Owen Giles Reviewed-by: Robert Elliott Signed-off-by: Simon Xu --- target/arm/tcg/cpu-v7m.c | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/target/arm/tcg/cpu-v7m.c b/target/arm/tcg/cpu-v7m.c index dc249ce1f1..a1e62a20f8 100644 --- a/target/arm/tcg/cpu-v7m.c +++ b/target/arm/tcg/cpu-v7m.c @@ -237,6 +237,45 @@ static void cortex_m55_initfn(Object *obj) cpu->ctr =3D 0x8303c003; } =20 +static void cortex_m85_initfn(Object *obj) +{ + ARMCPU *cpu =3D ARM_CPU(obj); + ARMISARegisters *isar =3D &cpu->isar; + + /* QEMU currently does not support the PACBTI feature */ + set_feature(&cpu->env, ARM_FEATURE_V8); + set_feature(&cpu->env, ARM_FEATURE_V8_1M); + set_feature(&cpu->env, ARM_FEATURE_M); + set_feature(&cpu->env, ARM_FEATURE_M_MAIN); + set_feature(&cpu->env, ARM_FEATURE_M_SECURITY); + set_feature(&cpu->env, ARM_FEATURE_THUMB_DSP); + cpu->midr =3D 0x411fd231; /* r1p1 */ + cpu->revidr =3D 0; + cpu->pmsav7_dregion =3D 16; + cpu->sau_sregion =3D 8; + /* These are the MVFR* values for the FPU + full MVE configuration */ + cpu->isar.mvfr0 =3D 0x10110221; + cpu->isar.mvfr1 =3D 0x12100211; + cpu->isar.mvfr2 =3D 0x00000040; + SET_IDREG(isar, ID_PFR0, 0x20000030); + SET_IDREG(isar, ID_PFR1, 0x00000230); + SET_IDREG(isar, ID_DFR0, 0x10200000); + SET_IDREG(isar, ID_AFR0, 0x00000000); + SET_IDREG(isar, ID_MMFR0, 0x00111040); + SET_IDREG(isar, ID_MMFR1, 0x00000000); + SET_IDREG(isar, ID_MMFR2, 0x01000000); + SET_IDREG(isar, ID_MMFR3, 0x00000011); + SET_IDREG(isar, ID_ISAR0, 0x01103110); + SET_IDREG(isar, ID_ISAR1, 0x02212000); + SET_IDREG(isar, ID_ISAR2, 0x20232232); + SET_IDREG(isar, ID_ISAR3, 0x01111131); + SET_IDREG(isar, ID_ISAR4, 0x01310132); + SET_IDREG(isar, ID_ISAR5, 0x00000000); + SET_IDREG(isar, ID_ISAR6, 0x00000000); + SET_IDREG(isar, CLIDR, 0x00000000); /* caches not implemented */ + cpu->ctr =3D 0x8303c003; +} + static const TCGCPUOps arm_v7m_tcg_ops =3D { /* ARM processors have a weak memory model */ .guest_default_memory_order =3D 0, @@ -290,6 +329,8 @@ static const ARMCPUInfo arm_v7m_cpus[] =3D { .class_init =3D arm_v7m_class_init }, { .name =3D "cortex-m55", .initfn =3D cortex_m55_initfn, .class_init =3D arm_v7m_class_init }, + { .name =3D "cortex-m85", .initfn =3D cortex_m85_initfn, + .class_init =3D arm_v7m_class_init }, }; =20 static void arm_v7m_cpu_register_types(void) --=20 2.34.1 From nobody Sun Jul 26 10:07:33 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1784849881; cv=none; d=zohomail.com; s=zohoarc; b=aE5A9YR8uM9kZUgLyTdR3mSu5bXtJEV8YfBVOvXRUlfGjwPoQ7kvnMW6gj7GfIQaZyluQIzkiepLTUr7AVaGlNkGiqB4ATTxgMm2j+IWieTU0k5FTqpBRcBtenyKBc181x3XvDYjPhGEoBUocAMsTYlfi8eGt9YdZoHjPYnBGlI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784849881; h=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=peh2Pmyv7l6hf9+ZkMIxYhy7GzBfBvGbGeUeyFh5t4c=; b=I/PBCMFzw1cunW8rh1gRhLduiLItzsrQsv7oXg64YtjrmrR2a8sGqwyl2pGu6FwDDeaf80wp/hxYefjCjCQVna/wefSrXh7pFo2xun3ecrCSs6yvDOZbZbpGbbX1GQkBSWl/zhh37dgkVdn4Q+HX7E/WKUfDya0fwpneb4YiucI= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784849881145105.54707723591082; Thu, 23 Jul 2026 16:38:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wn2xd-0004wu-J8; Thu, 23 Jul 2026 19:36:17 -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 1wn2xb-0004vw-R1 for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:15 -0400 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wn2xY-0001ci-N8 for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:15 -0400 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-4a451915d8aso694889b6e.2 for ; Thu, 23 Jul 2026 16:36:12 -0700 (PDT) Received: from HPE-2MQ6131DV6.home.local ([23.124.244.239]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4ab248c6667sm3631997b6e.0.2026.07.23.16.36.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jul 2026 16:36:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784849771; x=1785454571; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=peh2Pmyv7l6hf9+ZkMIxYhy7GzBfBvGbGeUeyFh5t4c=; b=pU2lUWvBrspGBQyxe4uMno1dwmdqXaRh8r3C1Aeguq+rXO+nBeRPMLDLTKBwoAtvWK yHc7KrPSG9MkOQIf01/OI61gHHKaVh8aMazlIdbl01bp2F11vjVJD9s7p5qfkuxhYNzj DyFF55R59g12hTw9xCj4SH7Ed0chFYCbTDU7tub6yv4gsxuFuOqAqoWdIKkpVoCgKXRV ecFiPnhMZPmuioIAR2+Y/YBrTXjX0DKwsO4z5TYwq2C+gPmD0zcwb2wwEOECHDp+ie4K 7iNE1bedeTGeI7YZX5eq7PR38IeglzSGxPIzARrv1jq+YGR4yk7bzv8xGpRgu4jArq+N 36CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784849771; x=1785454571; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=peh2Pmyv7l6hf9+ZkMIxYhy7GzBfBvGbGeUeyFh5t4c=; b=HXsp/OwcvRvcOkNthhU7UIpYy+4k310RqNXGby8gqUgF9NjQxef3ckRw7rC3xQrSnZ zHB+tAZMEhlAVRF/HB2uiVgM6LfhWzSukugDSM7T5Kobq1RHWT0cb9Tio/vNXfRfWLoK bC8y9CehE/pysGViMoBhpO/uojiXkjWXXqE2MqaVWhrQCDhbhKKzyX6PI6FPNlaBHZww x/cSnX+++4EqGyRYP4GFQ1snJPN83jwF+V5JB0U/baVYqxpqzmEYI9cGcgmsznHfWVmq SyaugblGm2btOl813SgGHity6kKNDgSJwyzLc4QNIS+kr2oQAwhT+aAO5zJIvngRM4BQ 2oWw== X-Gm-Message-State: AOJu0Yxrr/Kn8x8EnoWXKVc0tprtKHUsIirYt3noF7dg8sD8OXbs+9bh 47Qtaq013nHgdLZZubWVlaF6k67Zb2uWOXmEq8VWbEiLcQnhVGkVhjSfUJvIUgTs X-Gm-Gg: AR+sD116K3oTq1J++QPjck/FR+Tucm5YOh8pmuzi91BY3Wf4PzrC3dXT//4w04FK8s5 mtWoHdGBup0pa9VtszVmoCavMfB6+trvFr3ggukSxbCGiVN1MFyaDKh30Z8eIOugcksTkpxDMqM ZQcToyD/RQUKX56S7nXrXebKHiYJHkSOFsayEm8XzmLLfS7RuTxWe10k4NcShYMt7su1+JvcLyu MxiSLvL/jbY93g5rKTtEhSFKl/Njot2Rrz7KNZ/I/0t5oKX288fH7ZgPlj3e/QySaYgcUBxmMLs ixj4Rzn8gpXV2BXK2VrQx5UHmvJMtgPneByQ4pO2EX5sh/SFAZa2KoBMG6/dxt8cxvgshmu0+D6 bzQWXDbpNA5/WyKUETFANAPDT2VSNqLeK1hXDESif5pbZ5U+68qnmUOETKqv951FK/j37vH23hm p2I5XoHJQSdIfsUcY5hKGVD9w= X-Received: by 2002:a05:6808:1305:b0:4a4:68a9:5f06 with SMTP id 5614622812f47-4ab3561ac03mr3358485b6e.42.1784849771059; Thu, 23 Jul 2026 16:36:11 -0700 (PDT) From: Simon Xu To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell , Owen Giles , Pierrick Bouvier , Robert Elliott , Simon Xu Subject: [PATCH 2/4] hw/arm/armsse: add Arm Corstone SSE-310 Date: Thu, 23 Jul 2026 18:36:03 -0500 Message-Id: <20260723233605.805-3-simonxhy0404@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260723233605.805-1-simonxhy0404@gmail.com> References: <20260723233605.805-1-simonxhy0404@gmail.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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::22d; envelope-from=simonxhy0404@gmail.com; helo=mail-oi1-x22d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 @gmail.com) X-ZM-MESSAGEID: 1784849884098158500 Content-Type: text/plain; charset="utf-8" Add Arm Corstone SSE-310 model. - Include new NPU power policy unit and configuration interface in device list as unimplemented devices. - sys_version and iidr values from the "SSE-310 with M85 and U55 FPGA" documentation for the mps3-an555. - Refractor comments and code pertaining to both the SSE-300 and SSE-310. - Add support for SSE-310 in the iotkit files. - Add SSE-310 PIDR and CIDR registers according to the SSE-310 TRM. Arm Corstone SSE-310 TRM: https://developer.arm.com/documentation/102778/0000/ Reviewed-by: Owen Giles Reviewed-by: Robert Elliott Signed-off-by: Simon Xu --- hw/arm/armsse.c | 208 +++++++++++++++++++++++++++++++- hw/misc/iotkit-secctl.c | 18 +++ hw/misc/iotkit-sysctl.c | 60 +++++++-- hw/misc/iotkit-sysinfo.c | 12 +- include/hw/arm/armsse-version.h | 2 + include/hw/arm/armsse.h | 1 + 6 files changed, 287 insertions(+), 14 deletions(-) diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index ddb210c895..1847c73322 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -26,7 +26,7 @@ #include "hw/core/qdev-clock.h" =20 /* - * The SSE-300 puts some devices in different places to the + * The SSE-300 and SSE-310 put some devices in different places to the * SSE-200 (and original IoTKit). We use an array of these structs * to define how each variant lays out these devices. (Parts of the * SoC that are the same for all variants aren't handled via these @@ -118,6 +118,18 @@ static const Property sse300_properties[] =3D { DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8), }; =20 +static const Property sse310_properties[] =3D { + DEFINE_PROP_LINK("memory", ARMSSE, board_memory, TYPE_MEMORY_REGION, + MemoryRegion *), + DEFINE_PROP_UINT32("EXP_NUMIRQ", ARMSSE, exp_numirq, 64), + DEFINE_PROP_UINT32("SRAM_ADDR_WIDTH", ARMSSE, sram_addr_width, 21), + DEFINE_PROP_UINT32("init-svtor", ARMSSE, init_svtor, 0x10000000), + DEFINE_PROP_BOOL("CPU0_FPU", ARMSSE, cpu_fpu[0], true), + DEFINE_PROP_BOOL("CPU0_DSP", ARMSSE, cpu_dsp[0], true), + DEFINE_PROP_UINT32("CPU0_MPU_NS", ARMSSE, cpu_mpu_ns[0], 8), + DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8), +}; + static const ARMSSEDeviceInfo iotkit_devices[] =3D { { .name =3D "timer0", @@ -480,6 +492,146 @@ static const ARMSSEDeviceInfo sse300_devices[] =3D { } }; =20 +static const ARMSSEDeviceInfo sse310_devices[] =3D { + { + .name =3D "timer0", + .type =3D TYPE_SSE_TIMER, + .index =3D 0, + .addr =3D 0x48000000, + .ppc =3D 0, + .ppc_port =3D 0, + .irq =3D 3, + }, + { + .name =3D "timer1", + .type =3D TYPE_SSE_TIMER, + .index =3D 1, + .addr =3D 0x48001000, + .ppc =3D 0, + .ppc_port =3D 1, + .irq =3D 4, + }, + { + .name =3D "timer2", + .type =3D TYPE_SSE_TIMER, + .index =3D 2, + .addr =3D 0x48002000, + .ppc =3D 0, + .ppc_port =3D 2, + .irq =3D 5, + }, + { + .name =3D "timer3", + .type =3D TYPE_SSE_TIMER, + .index =3D 3, + .addr =3D 0x48003000, + .ppc =3D 0, + .ppc_port =3D 5, + .irq =3D 27, + }, + { + .name =3D "s32ktimer", + .type =3D TYPE_CMSDK_APB_TIMER, + .index =3D 0, + .addr =3D 0x4802f000, + .ppc =3D 1, + .ppc_port =3D 0, + .irq =3D 2, + .slowclk =3D true, + }, + { + .name =3D "s32kwatchdog", + .type =3D TYPE_CMSDK_APB_WATCHDOG, + .index =3D 0, + .addr =3D 0x5802e000, + .ppc =3D NO_PPC, + .irq =3D NMI_0, + .slowclk =3D true, + }, + { + .name =3D "watchdog", + .type =3D TYPE_UNIMPLEMENTED_DEVICE, + .index =3D 0, + .addr =3D 0x48040000, + .size =3D 0x2000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "armsse-sysinfo", + .type =3D TYPE_IOTKIT_SYSINFO, + .index =3D 0, + .addr =3D 0x48020000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "armsse-sysctl", + .type =3D TYPE_IOTKIT_SYSCTL, + .index =3D 0, + .addr =3D 0x58021000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "SYS_PPU", + .type =3D TYPE_UNIMPLEMENTED_DEVICE, + .index =3D 1, + .addr =3D 0x58022000, + .size =3D 0x1000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "CPU0CORE_PPU", + .type =3D TYPE_UNIMPLEMENTED_DEVICE, + .index =3D 2, + .addr =3D 0x58023000, + .size =3D 0x1000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "MGMT_PPU", + .type =3D TYPE_UNIMPLEMENTED_DEVICE, + .index =3D 3, + .addr =3D 0x58028000, + .size =3D 0x1000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "DEBUG_PPU", + .type =3D TYPE_UNIMPLEMENTED_DEVICE, + .index =3D 4, + .addr =3D 0x58029000, + .size =3D 0x1000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "NPU0_PPU", + .type =3D TYPE_UNIMPLEMENTED_DEVICE, + .index =3D 5, + .addr =3D 0x5802a000, + .size =3D 0x1000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D "NPU0_CFG", + .type =3D TYPE_UNIMPLEMENTED_DEVICE, + .index =3D 6, + .addr =3D 0x40004000, + .size =3D 0x1000, + .ppc =3D NO_PPC, + .irq =3D NO_IRQ, + }, + { + .name =3D NULL, + } +}; + /* Is internal IRQ n shared between CPUs in a multi-core SSE ? */ static const bool sse200_irq_is_common[32] =3D { [0 ... 5] =3D true, @@ -507,6 +659,20 @@ static const bool sse300_irq_is_common[32] =3D { /* 30, 31: reserved */ }; =20 +static const bool sse310_irq_is_common[32] =3D { + [0 ... 5] =3D true, + /* 6-8: reserved */ + [9 ... 12] =3D true, + /* 13: reserved */ + [14] =3D true, + /* 15: reserved */ + [16] =3D true, + /* 17-26: reserved */ + [27] =3D true, + /* 28, 29: per-CPU CTI interrupts */ + /* 30, 31: reserved */ +}; + static const ARMSSEInfo armsse_variants[] =3D { { .name =3D TYPE_IOTKIT, @@ -574,6 +740,28 @@ static const ARMSSEInfo armsse_variants[] =3D { .devinfo =3D sse300_devices, .irq_is_common =3D sse300_irq_is_common, }, + { + .name =3D TYPE_SSE310, + .sse_version =3D ARMSSE_SSE310, + .cpu_type =3D ARM_CPU_TYPE_NAME("cortex-m85"), + .sram_banks =3D 2, + .sram_bank_base =3D 0x21000000, + .num_cpus =3D 1, + .sys_version =3D 0x7e10043b, + .iidr =3D 0x74e0043b, + .cpuwait_rst =3D 0, + .has_mhus =3D false, + .has_cachectrl =3D false, + .has_cpusecctrl =3D true, + .has_cpuid =3D true, + .has_cpu_pwrctrl =3D true, + .has_sse_counter =3D true, + .has_tcms =3D true, + .props =3D sse310_properties, + .props_count =3D ARRAY_SIZE(sse310_properties), + .devinfo =3D sse310_devices, + .irq_is_common =3D sse310_irq_is_common, + } }; =20 static uint32_t armsse_sys_config_value(ARMSSE *s, const ARMSSEInfo *info) @@ -604,6 +792,14 @@ static uint32_t armsse_sys_config_value(ARMSSE *s, con= st ARMSSEInfo *info) sys_config =3D deposit32(sys_config, 4, 5, s->sram_addr_width); sys_config =3D deposit32(sys_config, 16, 3, 3); /* CPU0 =3D Cortex= -M55 */ break; + case ARMSSE_SSE310: + sys_config =3D 0; + sys_config =3D deposit32(sys_config, 0, 4, info->sram_banks); + sys_config =3D deposit32(sys_config, 4, 5, s->sram_addr_width); + sys_config =3D deposit32(sys_config, 10, 1, 0); /* No CoreSight So= C */ + sys_config =3D deposit32(sys_config, 11, 2, 0); /* Basic level PI = */ + sys_config =3D deposit32(sys_config, 16, 3, 4); /* CPU0 =3D Cortex= -M85 */ + break; default: g_assert_not_reached(); } @@ -1205,7 +1401,7 @@ static void armsse_realize(DeviceState *dev, Error **= errp) qdev_connect_gpio_out(DEVICE(&s->nmi_orgate), 0, qdev_get_gpio_in_named(DEVICE(&s->armv7m), "NMI"= , 0)); =20 - /* The SSE-300 has a System Counter / System Timestamp Generator */ + /* The SSE-300/SSE-310 has a System Counter / System Timestamp Generat= or */ if (info->has_sse_counter) { SysBusDevice *sbd =3D SYS_BUS_DEVICE(&s->sse_counter); =20 @@ -1225,12 +1421,12 @@ static void armsse_realize(DeviceState *dev, Error = **errp) } =20 if (info->has_tcms) { - /* The SSE-300 has an ITCM at 0x0000_0000 and a DTCM at 0x2000_000= 0 */ - memory_region_init_ram(&s->itcm, NULL, "sse300-itcm", 512 * KiB, e= rrp); + /* The SSE-300/SSE-310 has an ITCM at 0x0000_0000 and a DTCM at 0x= 2000_0000 */ + memory_region_init_ram(&s->itcm, NULL, "itcm", 512 * KiB, errp); if (*errp) { return; } - memory_region_init_ram(&s->dtcm, NULL, "sse300-dtcm", 512 * KiB, e= rrp); + memory_region_init_ram(&s->dtcm, NULL, "dtcm", 512 * KiB, errp); if (*errp) { return; } @@ -1461,7 +1657,7 @@ static void armsse_realize(DeviceState *dev, Error **= errp) * 0x50010000: L1 icache control registers * 0x50011000: CPUSECCTRL (CPU local security control registers) * 0x4001f000 and 0x5001f000: CPU_IDENTITY register block - * The SSE-300 has an extra: + * The SSE-300 and SSE-310 have an extra: * 0x40012000 and 0x50012000: CPU_PWRCTRL register block */ if (info->has_cachectrl) { diff --git a/hw/misc/iotkit-secctl.c b/hw/misc/iotkit-secctl.c index 54bfe1ba59..38add5b1f1 100644 --- a/hw/misc/iotkit-secctl.c +++ b/hw/misc/iotkit-secctl.c @@ -109,6 +109,18 @@ static const uint8_t iotkit_secctl_ns_sse300_idregs[] = =3D { 0x0d, 0xf0, 0x05, 0xb1, }; =20 +static const uint8_t iotkit_secctl_s_sse310_idregs[] =3D { + 0x04, 0x00, 0x00, 0x00, + 0x52, 0xb8, 0x3b, 0x00, + 0x0d, 0xf0, 0x05, 0xb1, +}; + +static const uint8_t iotkit_secctl_ns_sse310_idregs[] =3D { + 0x04, 0x00, 0x00, 0x00, + 0x53, 0xb8, 0x3b, 0x00, + 0x0d, 0xf0, 0x05, 0xb1, +}; + =20 /* The register sets for the various PPCs (AHB internal, APB internal, * AHB expansion, APB expansion) are all set up so that they are @@ -232,6 +244,9 @@ static MemTxResult iotkit_secctl_s_read(void *opaque, h= waddr addr, case ARMSSE_SSE300: r =3D iotkit_secctl_s_sse300_idregs[(offset - A_PID4) / 4]; break; + case ARMSSE_SSE310: + r =3D iotkit_secctl_s_sse310_idregs[(offset - A_PID4) / 4]; + break; default: r =3D iotkit_secctl_s_idregs[(offset - A_PID4) / 4]; break; @@ -499,6 +514,9 @@ static MemTxResult iotkit_secctl_ns_read(void *opaque, = hwaddr addr, case ARMSSE_SSE300: r =3D iotkit_secctl_ns_sse300_idregs[(offset - A_PID4) / 4]; break; + case ARMSSE_SSE310: + r =3D iotkit_secctl_ns_sse310_idregs[(offset - A_PID4) / 4]; + break; default: r =3D iotkit_secctl_ns_idregs[(offset - A_PID4) / 4]; break; diff --git a/hw/misc/iotkit-sysctl.c b/hw/misc/iotkit-sysctl.c index dff89c677f..e6b1fe5d32 100644 --- a/hw/misc/iotkit-sysctl.c +++ b/hw/misc/iotkit-sysctl.c @@ -87,6 +87,12 @@ static const int sse200_sysctl_id[] =3D { 0x0d, 0xf0, 0x05, 0xb1, /* CID0..CID3 */ }; =20 +static const int sse310_sysctl_id[] =3D { + 0x04, 0x00, 0x00, 0x00, /* PID4..PID7 */ + 0x54, 0xb8, 0x4b, 0x00, /* PID0..PID3 */ + 0x0d, 0xf0, 0x05, 0xb1, /* CID0..CID3 */ +}; + /* * Set the initial secure vector table offset address for the core. * This will take effect when the CPU next resets. @@ -118,6 +124,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->scsecctrl; break; default: @@ -130,6 +137,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->fclk_div; break; default: @@ -142,6 +150,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->sysclk_div; break; default: @@ -154,6 +163,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->clock_force; break; default: @@ -180,6 +190,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, r =3D s->initsvtor1; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -193,6 +204,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, break; case ARMSSE_SSE300: /* In SSE300 this is reserved (for INITSVTOR2) */ + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -209,6 +221,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, break; case ARMSSE_SSE300: /* In SSE300 this is reserved (for INITSVTOR3) */ + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -221,7 +234,8 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, r =3D s->wicctrl; break; case ARMSSE_SSE300: - /* In SSE300 this offset is CPUWAIT */ + case ARMSSE_SSE310: + /* In SSE300 and SSE310 this offset is CPUWAIT */ r =3D s->cpuwait; break; default: @@ -236,7 +250,8 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, r =3D s->ewctrl; break; case ARMSSE_SSE300: - /* In SSE300 this offset is NMI_ENABLE */ + case ARMSSE_SSE310: + /* In SSE300 and SSE310 this offset is NMI_ENABLE */ r =3D s->nmi_enable; break; default: @@ -249,6 +264,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, case ARMSSE_SSE200: goto bad_offset; case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->pwrctrl; break; default: @@ -261,6 +277,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->pdcm_pd_sys_sense; break; default: @@ -273,6 +290,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, case ARMSSE_SSE200: goto bad_offset; case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->pdcm_pd_cpu0_sense; break; default: @@ -287,6 +305,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, r =3D s->pdcm_pd_sram0_sense; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -300,6 +319,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, r =3D s->pdcm_pd_sram1_sense; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -313,6 +333,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, r =3D s->pdcm_pd_sram2_sense; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->pdcm_pd_vmr0_sense; break; default: @@ -327,6 +348,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, r =3D s->pdcm_pd_sram3_sense; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: r =3D s->pdcm_pd_vmr1_sense; break; default: @@ -342,6 +364,9 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, case ARMSSE_SSE300: r =3D sse200_sysctl_id[(offset - A_PID4) / 4]; break; + case ARMSSE_SSE310: + r =3D sse310_sysctl_id[(offset - A_PID4) / 4]; + break; default: g_assert_not_reached(); } @@ -367,7 +392,8 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr= offset, =20 static void cpuwait_write(IoTKitSysCtl *s, uint32_t value) { - int num_cpus =3D (s->sse_version =3D=3D ARMSSE_SSE300) ? 1 : 2; + int num_cpus =3D (s->sse_version =3D=3D ARMSSE_SSE300 || + s->sse_version =3D=3D ARMSSE_SSE310) ? 1 : 2; int i; =20 for (i =3D 0; i < num_cpus; i++) { @@ -418,7 +444,8 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, case A_INITSVTOR0: switch (s->sse_version) { case ARMSSE_SSE300: - /* SSE300 has a LOCK bit which prevents further writes when se= t */ + case ARMSSE_SSE310: + /* SSE300 and SSE310 have a LOCK bit which prevents further wr= ites when set */ if (s->initsvtor0 & R_INITSVTOR0_LOCK_MASK) { qemu_log_mask(LOG_GUEST_ERROR, "IoTKit INITSVTOR0 write when register locke= d\n"); @@ -444,6 +471,8 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, break; case ARMSSE_SSE300: /* In SSE300 this is reserved (for INITSVTOR2) */ + case ARMSSE_SSE310: + /* In SSE310 this is reserved */ goto bad_offset; default: g_assert_not_reached(); @@ -457,7 +486,8 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, s->wicctrl =3D value; break; case ARMSSE_SSE300: - /* In SSE300 this offset is CPUWAIT */ + case ARMSSE_SSE310: + /* In SSE300 and SSE310 this offset is CPUWAIT */ cpuwait_write(s, value); break; default: @@ -485,6 +515,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl SCSECCTRL unimplemente= d\n"); s->scsecctrl =3D value; break; @@ -498,6 +529,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl FCLK_DIV unimplemented= \n"); s->fclk_div =3D value; break; @@ -511,6 +543,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl SYSCLK_DIV unimplement= ed\n"); s->sysclk_div =3D value; break; @@ -524,6 +557,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl CLOCK_FORCE unimplemen= ted\n"); s->clock_force =3D value; break; @@ -540,6 +574,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, set_init_vtor(1, s->initsvtor1); break; case ARMSSE_SSE300: + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -554,7 +589,8 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, s->ewctrl =3D value; break; case ARMSSE_SSE300: - /* In SSE300 this offset is NMI_ENABLE */ + case ARMSSE_SSE310: + /* In SSE300 and SSE310 this offset is NMI_ENABLE */ qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl NMI_ENABLE unimplement= ed\n"); s->nmi_enable =3D value; break; @@ -568,6 +604,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, case ARMSSE_SSE200: goto bad_offset; case ARMSSE_SSE300: + case ARMSSE_SSE310: if (!(s->pwrctrl & R_PWRCTRL_PPU_ACCESS_UNLOCK_MASK)) { qemu_log_mask(LOG_GUEST_ERROR, "IoTKit PWRCTRL write when register locked\n= "); @@ -585,6 +622,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, goto bad_offset; case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl PDCM_PD_SYS_SENSE unimplemented\n= "); s->pdcm_pd_sys_sense =3D value; @@ -599,6 +637,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, case ARMSSE_SSE200: goto bad_offset; case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl PDCM_PD_CPU0_SENSE unimplemented\= n"); s->pdcm_pd_cpu0_sense =3D value; @@ -617,6 +656,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, s->pdcm_pd_sram0_sense =3D value; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -632,6 +672,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, s->pdcm_pd_sram1_sense =3D value; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: goto bad_offset; default: g_assert_not_reached(); @@ -647,6 +688,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, s->pdcm_pd_sram2_sense =3D value; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl PDCM_PD_VMR0_SENSE unimplemented\= n"); s->pdcm_pd_vmr0_sense =3D value; @@ -665,6 +707,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, s->pdcm_pd_sram3_sense =3D value; break; case ARMSSE_SSE300: + case ARMSSE_SSE310: qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl PDCM_PD_VMR1_SENSE unimplemented\= n"); s->pdcm_pd_vmr1_sense =3D value; @@ -684,6 +727,8 @@ static void iotkit_sysctl_write(void *opaque, hwaddr of= fset, break; case ARMSSE_SSE300: /* In SSE300 this is reserved (for INITSVTOR3) */ + case ARMSSE_SSE310: + /* In SSE310 this is reserved */ goto bad_offset; default: g_assert_not_reached(); @@ -769,7 +814,8 @@ static bool sse300_needed(void *opaque) { IoTKitSysCtl *s =3D IOTKIT_SYSCTL(opaque); =20 - return s->sse_version =3D=3D ARMSSE_SSE300; + return s->sse_version =3D=3D ARMSSE_SSE300 || + s->sse_version =3D=3D ARMSSE_SSE310; } =20 static const VMStateDescription iotkit_sysctl_sse300_vmstate =3D { diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c index 19f089e6ee..21e161bdc2 100644 --- a/hw/misc/iotkit-sysinfo.c +++ b/hw/misc/iotkit-sysinfo.c @@ -58,6 +58,12 @@ static const int sysinfo_sse300_id[] =3D { 0x0d, 0xf0, 0x05, 0xb1, /* CID0..CID3 */ }; =20 +static const int sysinfo_sse310_id[] =3D { + 0x04, 0x00, 0x00, 0x00, /* PID4..PID7 */ + 0x58, 0xb8, 0x2b, 0x00, /* PID0..PID3 */ + 0x0d, 0xf0, 0x05, 0xb1, /* CID0..CID3 */ +}; + static uint64_t iotkit_sysinfo_read(void *opaque, hwaddr offset, unsigned size) { @@ -68,13 +74,13 @@ static uint64_t iotkit_sysinfo_read(void *opaque, hwadd= r offset, case A_SYS_VERSION: r =3D s->sys_version; break; - case A_SYS_CONFIG: r =3D s->sys_config; break; case A_SYS_CONFIG1: switch (s->sse_version) { case ARMSSE_SSE300: + case ARMSSE_SSE310: return 0; break; default: @@ -84,6 +90,7 @@ static uint64_t iotkit_sysinfo_read(void *opaque, hwaddr = offset, case A_IIDR: switch (s->sse_version) { case ARMSSE_SSE300: + case ARMSSE_SSE310: return s->iidr; break; default: @@ -95,6 +102,9 @@ static uint64_t iotkit_sysinfo_read(void *opaque, hwaddr= offset, case ARMSSE_SSE300: r =3D sysinfo_sse300_id[(offset - A_PID4) / 4]; break; + case ARMSSE_SSE310: + r =3D sysinfo_sse310_id[(offset - A_PID4) / 4]; + break; default: r =3D sysinfo_id[(offset - A_PID4) / 4]; break; diff --git a/include/hw/arm/armsse-version.h b/include/hw/arm/armsse-versio= n.h index 60780fa984..6b498cb334 100644 --- a/include/hw/arm/armsse-version.h +++ b/include/hw/arm/armsse-version.h @@ -25,6 +25,7 @@ enum { ARMSSE_IOTKIT =3D 0, ARMSSE_SSE200 =3D 200, ARMSSE_SSE300 =3D 300, + ARMSSE_SSE310 =3D 310 }; =20 static inline bool armsse_version_valid(uint32_t sse_version) @@ -33,6 +34,7 @@ static inline bool armsse_version_valid(uint32_t sse_vers= ion) case ARMSSE_IOTKIT: case ARMSSE_SSE200: case ARMSSE_SSE300: + case ARMSSE_SSE310: return true; default: return false; diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index bdf2d4db8e..d0dcba1fbb 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -127,6 +127,7 @@ OBJECT_DECLARE_TYPE(ARMSSE, ARMSSEClass, #define TYPE_IOTKIT "iotkit" #define TYPE_SSE200 "sse-200" #define TYPE_SSE300 "sse-300" +#define TYPE_SSE310 "sse-310" =20 /* We have an IRQ splitter and an OR gate input for each external PPC * and the 2 internal PPCs --=20 2.34.1 From nobody Sun Jul 26 10:07:33 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1784849833; cv=none; d=zohomail.com; s=zohoarc; b=Dcv8JU7is8AH+UYFhUPP4jGUYjUD1UIc15bMWdm0XcFrXvxkxTS9V8QBZiBxtj4XkE5rpXxQuCqfvdop+YujLo8/yx3YbH8MsiGQeWYUZH2aptElrKqMh0HT5NA9Tp/lmrhqgmaAbg4OmdiOynYeVkBXaOgf3ZZgFpGl/28G+0c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784849833; h=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=d16CZApBwdbjAv2BZVQc7wNcffZyxmsi63Xs9rslxdM=; b=gAckKYlkp3pnnxrHf5O+iXbZac/BkPvf/96chXiLqaxkRJbBmitjMjVn8MCjzFqK6B4hhqXKU5aRAUd6+u4SWEC9jhAxpm9+7bBoBOe2Loi56W4JjzetcdlDWxIqLNPe6KORMpKlA4+yEYlJVxHLozmBvR8MfwLsH7UyYB4fiJw= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784849833850730.0672212904261; Thu, 23 Jul 2026 16:37:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wn2xf-0004xx-HW; Thu, 23 Jul 2026 19:36:19 -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 1wn2xd-0004wa-5U for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:17 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wn2xZ-0001d4-Gv for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:16 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-456f7012050so729339fac.0 for ; Thu, 23 Jul 2026 16:36:13 -0700 (PDT) Received: from HPE-2MQ6131DV6.home.local ([23.124.244.239]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4ab248c6667sm3631997b6e.0.2026.07.23.16.36.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jul 2026 16:36:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784849772; x=1785454572; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=d16CZApBwdbjAv2BZVQc7wNcffZyxmsi63Xs9rslxdM=; b=QzN8EiHNvVhPVFiDYeSrPnwssJYO74uyEeLre4ehsPjja4jKwtS5rzIUDn3PaCDt+4 pZhu29Vic1KZ7VG2wTshREOb2bRbypYaWlgcp+6hV63mYe0vbcvscvv+27HwDap5SPbw BvC4rydRiZCzc095/zQ2OGWnxtha+TufkmthR1vvXgdgANGcdXE1qjGRdE3vD2ZN9wHN nyPfe7+5GWp9LIG6HXU6x/z1/TZjMuLiVmAJYqfr8CYsiXpGYe9AKz/Cp/3Q4/f3Z9+K PCJQ2Rzg22aaMNwMYiUbWWFZuA/uon89mdgnWj6m1qr7Tpv1sEgYII+vYs8A+Y7KytTa h0HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784849772; x=1785454572; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=d16CZApBwdbjAv2BZVQc7wNcffZyxmsi63Xs9rslxdM=; b=nuDl4Muj9CKJoODHLkfmGksrw9o7LGdblOnUGja49VnCNJmSGnhCRPD8fhfMqArVQq +Wz8zSElQ8XuNXeLNNjWqOwOHNjQlUUbcH7YdQWlZgvfRtlAFZuC17rYk8SJbCELE7vy IGTH8rJAlOCqRGBa6mzj5FJt4bFwwv3VKDFES/AMdWdRaXwnl0gFrDuQJnvvi3auPOC7 RDaL2PCWcC+nhwhC1vipYTWFrNuL8nhPURRcginrQZoJ1Cud7vrPq6cEMMhJC2u9YnUh GfgDvdXWUMOw+D4Utej6yg25lCUAXkWTf7vIIsrgRb0LWXEmSuzHYAHfW+raT2XiqDwN me5w== X-Gm-Message-State: AOJu0YzcH0l2UAER5EvJmtL7q3BxYcQm94L/NVLOgzejKNvr4FR+xRBN 2ikhNuJQervNWpK43Pdg29SdpUdFMiH8OMPVtDN3jb6sOYFNa4/hyG+W7T+bHa32 X-Gm-Gg: AR+sD12cpOVWgd0Vpps5vHvXwMlWaSdiN9C6Ekk2vdCTY3/RnqEMKNJAfC8mZmGabxC 9s+iy3GEKNmOFlP0mIYc450KrdIJyziK7MCRlSbys5sV82EjUPfdX1S0hRHlwooZ8RffbCj0eH/ o2MyLdXcolRsregHdGIF/PXs0VnA2zhMIK04xzrO2/5tEELUIeoUL/0FuPiJZkskjrrCJWUeERd m86Gt+QF7WcrG5ubwE7GSBHFxC1Jxq9UyXTLLK2cUG1hqa3x4NaCVrjjBJV9Vr7hOAAjVpbu3pg n7TJKiVSqxAdDm5x/0Ir3YGpzP+sBMw6K20myxwQ/exv+HMr7NqlO4BHPxUtX7GWHCRZ6n/LOTF COTLUVmgVnMl2rM47/UvWJ3C967CkJsolz0hwbfds4Ip+R6jgz7abRIkpNNTu/29FDCBUA8xqqQ VTFvPUjGYnYUecJkVVej9uTXM= X-Received: by 2002:a05:6808:3190:b0:49e:d43f:1b94 with SMTP id 5614622812f47-4ab380fc337mr2158575b6e.0.1784849772333; Thu, 23 Jul 2026 16:36:12 -0700 (PDT) From: Simon Xu To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell , Owen Giles , Pierrick Bouvier , Robert Elliott , Simon Xu Subject: [PATCH 3/4] hw/misc/iotkit-sysinfo: make sys_config2 configurable for SSE-310 Date: Thu, 23 Jul 2026 18:36:04 -0500 Message-Id: <20260723233605.805-4-simonxhy0404@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260723233605.805-1-simonxhy0404@gmail.com> References: <20260723233605.805-1-simonxhy0404@gmail.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=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=simonxhy0404@gmail.com; helo=mail-oa1-x2b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 @gmail.com) X-ZM-MESSAGEID: 1784849834780158500 Content-Type: text/plain; charset="utf-8" Add sys_config2 as QEMU property like sys_config. - Modify the sys_config2 register on the SSE-310 for the NPU configurations. - Currently sys_config2 is configured to report Ethos-U55 as the NPU type. Reviewed-by: Owen Giles Reviewed-by: Robert Elliott Signed-off-by: Simon Xu --- hw/arm/armsse.c | 21 +++++++++++++++++++++ hw/misc/iotkit-sysinfo.c | 11 +++++++++++ include/hw/misc/iotkit-sysinfo.h | 2 ++ 3 files changed, 34 insertions(+) diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 1847c73322..cf8f6c25d1 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -806,6 +806,22 @@ static uint32_t armsse_sys_config_value(ARMSSE *s, con= st ARMSSEInfo *info) return sys_config; } =20 +static uint32_t armsse_sys_config2_value(ARMSSE *s, const ARMSSEInfo *info) +{ + /* Return the SYS_CONFIG2 value for this SSE */ + uint32_t sys_config2; + + switch (info->sse_version) { + case ARMSSE_SSE310: + sys_config2 =3D 0; + sys_config2 =3D deposit32(sys_config2, 0, 3, 1); /* NPU0 =3D Ethos= -U55 */ + break; + default: + g_assert_not_reached(); + } + return sys_config2; +} + /* Clock frequency in HZ of the 32KHz "slow clock" */ #define S32KCLK (32 * 1000) =20 @@ -1496,6 +1512,11 @@ static void armsse_realize(DeviceState *dev, Error *= *errp) info->sse_version, &error_abort); object_property_set_int(OBJECT(&s->sysinfo), "IIDR", info->iidr, &error_abort); + if (info->sse_version =3D=3D ARMSSE_SSE310) { + object_property_set_int(OBJECT(&s->sysinfo), "SYS_CONFIG2", + armsse_sys_config2_value(s, info), + &error_abort); + } if (!sysbus_realize(sbd, errp)) { return; } diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c index 21e161bdc2..0905949ef7 100644 --- a/hw/misc/iotkit-sysinfo.c +++ b/hw/misc/iotkit-sysinfo.c @@ -31,6 +31,7 @@ REG32(SYS_VERSION, 0x0) REG32(SYS_CONFIG, 0x4) REG32(SYS_CONFIG1, 0x8) +REG32(SYS_CONFIG2, 0xc) REG32(IIDR, 0xfc8) REG32(PID4, 0xfd0) REG32(PID5, 0xfd4) @@ -87,6 +88,15 @@ static uint64_t iotkit_sysinfo_read(void *opaque, hwaddr= offset, goto bad_read; } break; + case A_SYS_CONFIG2: + switch (s->sse_version) { + case ARMSSE_SSE310: + return s->sys_config2; + break; + default: + goto bad_read; + } + break; case A_IIDR: switch (s->sse_version) { case ARMSSE_SSE300: @@ -144,6 +154,7 @@ static const MemoryRegionOps iotkit_sysinfo_ops =3D { static const Property iotkit_sysinfo_props[] =3D { DEFINE_PROP_UINT32("SYS_VERSION", IoTKitSysInfo, sys_version, 0), DEFINE_PROP_UINT32("SYS_CONFIG", IoTKitSysInfo, sys_config, 0), + DEFINE_PROP_UINT32("SYS_CONFIG2", IoTKitSysInfo, sys_config2, 0), DEFINE_PROP_UINT32("sse-version", IoTKitSysInfo, sse_version, 0), DEFINE_PROP_UINT32("IIDR", IoTKitSysInfo, iidr, 0), }; diff --git a/include/hw/misc/iotkit-sysinfo.h b/include/hw/misc/iotkit-sysi= nfo.h index 36dc702c53..1c1b2758d9 100644 --- a/include/hw/misc/iotkit-sysinfo.h +++ b/include/hw/misc/iotkit-sysinfo.h @@ -16,6 +16,7 @@ * QEMU interface: * + QOM property "SYS_VERSION": value to use for SYS_VERSION register * + QOM property "SYS_CONFIG": value to use for SYS_CONFIG register + * + QOM property "SYS_CONFIG2": value to use for SYS_CONFIG2 register * + sysbus MMIO region 0: the system information register bank */ =20 @@ -38,6 +39,7 @@ struct IoTKitSysInfo { /* Properties */ uint32_t sys_version; uint32_t sys_config; + uint32_t sys_config2; uint32_t sse_version; uint32_t iidr; }; --=20 2.34.1 From nobody Sun Jul 26 10:07:33 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1784849822; cv=none; d=zohomail.com; s=zohoarc; b=KtgrhUYvVXy/7j2fjctvjttCix62hDdmspozI8qKEBkP6V4ZzSQEcBL8Xh1mUjF8gXMNURwVZoqSPbUJVhlkSjiz6Tq04Fq7Hid/94JrDjuVHH9BRfCC9C+xBM2RAgUhWbFmsP2+Y2Cxcv8suklelgly7TutMcLIyv94LA+10Tg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784849822; h=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=QsTjDwNUUrvIiFVJJdy+rAADKq2UP2nfPLvn8JArCrk=; b=ktgSFeh81k/Y8PPURtYqBOinNT8Gk0vYgcCZOsT/aUU2ka4COkJM2p47TvgjHiW1CLXTr/+sHC4SWXAnu2aQiq1I//n8ZTftoWloeAmR7w6TpRHTbhvgW0YZ61aJ8vZd3iMMEB+xJ1Jg1ionNv4naUMSGtYk9MagiVhKuisvVZw= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784849822559425.49684275983213; Thu, 23 Jul 2026 16:37:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wn2xg-0004ym-3d; Thu, 23 Jul 2026 19:36:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wn2xd-0004x3-V5 for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:17 -0400 Received: from mail-ot1-x32e.google.com ([2607:f8b0:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wn2xa-0001dH-Rs for qemu-devel@nongnu.org; Thu, 23 Jul 2026 19:36:17 -0400 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7e9fc3de7ceso534697a34.1 for ; Thu, 23 Jul 2026 16:36:14 -0700 (PDT) Received: from HPE-2MQ6131DV6.home.local ([23.124.244.239]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4ab248c6667sm3631997b6e.0.2026.07.23.16.36.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jul 2026 16:36:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784849774; x=1785454574; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QsTjDwNUUrvIiFVJJdy+rAADKq2UP2nfPLvn8JArCrk=; b=HJ+BcOZaD+KitL02EyRACl+zc/Ze1N5w4XjLO0MNqWm3g+MeOXMKNswzNuMYnxBaDz k5I6SBxmUnxGRbLNTqEdQWzgRp8lCQmlx6tcfxcGV8uehzPy7NpXIvXu/G3PcVCB77Pb vYM0TVzsAgrgNQ3QdO6BwbJ685jUxh6V9L43z7W3oGrf9cflt5VMQXG+l3lmJp4X2bFQ KLTbVFAZ4754HWCdDLh5ieAksp9LxNf+w3hTgl6kO/LKovJwvj0jeRhXpaau144RTl+B ZMndYn/hkk0TpZQibBPo309ASdglGpXM0+DESy9WydJUKepcbNis/Wfu6tp1rHkZcg1t ryMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784849774; x=1785454574; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=QsTjDwNUUrvIiFVJJdy+rAADKq2UP2nfPLvn8JArCrk=; b=mzyaPBOwGPQu0JztJmOuCZDQ2Hh5mt4m2f2qS2qlQ6He5iUgVBgmVMkawbMoXKOO9h 1dnAb0rNsSteJS7SRrsDkHwynA49Orm2lR2A8vh0V2MTYzEqzxgGTDBDZl2ngYjmEeCU +OZ/jzf0JuKBAkTQ2r21IoaqRGDS98evU8x663PhtdaCp8OBbV30zWcxiPUjeMuHtj+z 2tlVAk+e10O2NEo0eQhbrlqjIZDfjVU+7BYg64o0Zt7tlEGVaH/2tgVq9NF3so55m46h IH2v7iltWtiGmkZ2/GaHTT7XbgRF4h61hypsBARs1+87hongmwpgFXNqwOWlGzSxPvbz 5jEA== X-Gm-Message-State: AOJu0YwiMVyBXFA/9V0g5eD+ZGfSeqtqh0qunNtSDy7f4DBoFMYbgU1K 5b7uzh1znZuF3uzpR5vINlZnDLLx99V6Iagfv3KBjnK240jApGpBxR8wm2o3Qb75 X-Gm-Gg: AR+sD11N20z7T+ctVxDhxIuMNuuGB5Lv3nql43+ta4r4B3vJgetIoSqWZtq0lPlTLg1 U8ewekBNcw1xiwnLQqQ/GoIEQzhAXmT2a9+SwoKOovaRvUIBzlyZTwr53Pqx3rGaKKU9hyTmSvg /YxKhgnqpNWJTVq4FrTAPKUflbt8Cz6FKerEDDcNl+4iQS1rEQMB4TX8J1AZBUTeKe1Ir2COFt/ lfbxRD54beK+Z6g8hYN/IBHVHCA8Zwv77KDWmYQREsNw6Db3cvcJIwZVdN1zHAEFL/DTOnssyBP XgpqwuQcTqF47JS4GdIHaBuVEPUFsVXzMfY6Av/kxrAbl/5CrfTI+uR+kNzsIv/rE6/f9T7Z7Na KAVf9ifg+toV/EkgcZPZl0UHu4/+Z+2ewqefet0ODB+fp4Ebcm1VBI5jjxc+UjCH+FrgD6y9Sox +sOM2dtH/07N+1pcwCmmVoww90pcYcg35d4g== X-Received: by 2002:a05:6808:1385:b0:479:f7e7:4a81 with SMTP id 5614622812f47-4ab350afc06mr2973941b6e.0.1784849773550; Thu, 23 Jul 2026 16:36:13 -0700 (PDT) From: Simon Xu To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell , Owen Giles , Pierrick Bouvier , Robert Elliott , Simon Xu Subject: [PATCH 4/4] hw/arm/mps2-tz.c: add new mps3-an555 board Date: Thu, 23 Jul 2026 18:36:05 -0500 Message-Id: <20260723233605.805-5-simonxhy0404@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260723233605.805-1-simonxhy0404@gmail.com> References: <20260723233605.805-1-simonxhy0404@gmail.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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::32e; envelope-from=simonxhy0404@gmail.com; helo=mail-ot1-x32e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 @gmail.com) X-ZM-MESSAGEID: 1784849825455158500 Content-Type: text/plain; charset="utf-8" Add mps3-an555 board modeled after the existing mps3-an547 board. - Add additional AHB PPC EXP 1. Add unimplemented timing adapters for SSE-3= 10. - Include documentation for SSE-310 and mps3-an555. Arm mps3-an555 TRM: https://developer.arm.com/documentation/107642/latest/ Reviewed-by: Owen Giles Reviewed-by: Robert Elliott Signed-off-by: Simon Xu --- docs/system/arm/mps2.rst | 6 +- hw/arm/mps2-tz.c | 143 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 144 insertions(+), 5 deletions(-) diff --git a/docs/system/arm/mps2.rst b/docs/system/arm/mps2.rst index a305935cc4..489a8b0fa7 100644 --- a/docs/system/arm/mps2.rst +++ b/docs/system/arm/mps2.rst @@ -1,5 +1,5 @@ -Arm MPS2 and MPS3 boards (``mps2-an385``, ``mps2-an386``, ``mps2-an500``, = ``mps2-an505``, ``mps2-an511``, ``mps2-an521``, ``mps3-an524``, ``mps3-an53= 6``, ``mps3-an547``) -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +Arm MPS2 and MPS3 boards (``mps2-an385``, ``mps2-an386``, ``mps2-an500``, = ``mps2-an505``, ``mps2-an511``, ``mps2-an521``, ``mps3-an524``, ``mps3-an53= 6``, ``mps3-an547``, ``mps3-an555``) +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 These board models use Arm M-profile or R-profile CPUs. =20 @@ -31,6 +31,8 @@ FPGA images using M-profile CPUs: Dual Cortex-M33 on an MPS3, as documented in Arm Application Note AN524 ``mps3-an547`` Cortex-M55 on an MPS3, as documented in Arm Application Note AN547 +``mps3-an555`` + Cortex-M85 on an MPS3, as documented in Arm Application Note AN555 =20 FPGA images using R-profile CPUs: =20 diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index f101c1b7c3..04a2b37fd8 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -1,5 +1,5 @@ /* - * ARM V2M MPS2 board emulation, trustzone aware FPGA images + * Arm V2M MPS2 and MPS3 board emulation, trustzone aware FPGA images * * Copyright (c) 2017 Linaro Limited * Written by Peter Maydell @@ -18,12 +18,13 @@ * "mps2-an521" -- Dual Cortex-M33 as documented in Application Note AN521 * "mps2-an524" -- Dual Cortex-M33 as documented in Application Note AN524 * "mps2-an547" -- Single Cortex-M55 as documented in Application Note AN= 547 + * "mps3-an555" -- Single Cortex-M85 as documented in Application Note AN= 555 * * Links to the TRM for the board itself and to the various Application * Notes which document the FPGA images can be found here: * https://developer.arm.com/products/system-design/development-boards/fpg= a-prototyping-boards/mps2 * - * Board TRM: + * MPS2 and MPS2+ Board TRM: * https://developer.arm.com/documentation/100112/latest/ * Application Note AN505: * https://developer.arm.com/documentation/dai0505/latest/ @@ -31,8 +32,12 @@ * https://developer.arm.com/documentation/dai0521/latest/ * Application Note AN524: * https://developer.arm.com/documentation/dai0524/latest/ + * MPS3 Board TRM: + * https://developer.arm.com/documentation/100765/latest/ * Application Note AN547: * https://developer.arm.com/documentation/dai0547/latest/ + * Application Note AN555: + * https://developer.arm.com/documentation/107642/latest/ * * The AN505 defers to the Cortex-M33 processor ARMv8M IoT Kit FVP User Gu= ide * (ARM ECM0601256) for the details of some of the device layout: @@ -42,6 +47,8 @@ * https://developer.arm.com/documentation/101104/latest/ * and the AN547 uses the SSE-300, whose layout is in the SSE-300 TRM: * https://developer.arm.com/documentation/101773/latest/ + * and the AN555 uses the SSE-310, whose layout is in the SSE-310 TRM: + * https://developer.arm.com/documentation/102778/latest/ */ =20 #include "qemu/osdep.h" @@ -77,7 +84,7 @@ #include "qom/object.h" #include "hw/core/irq.h" =20 -#define MPS2TZ_NUMIRQ_MAX 96 +#define MPS2TZ_NUMIRQ_MAX 100 #define MPS2TZ_RAM_MAX 5 =20 typedef enum MPS2TZFPGAType { @@ -85,6 +92,7 @@ typedef enum MPS2TZFPGAType { FPGA_AN521, FPGA_AN524, FPGA_AN547, + FPGA_AN555, } MPS2TZFPGAType; =20 /* @@ -173,6 +181,7 @@ struct MPS2TZMachineState { #define TYPE_MPS2TZ_AN521_MACHINE MACHINE_TYPE_NAME("mps2-an521") #define TYPE_MPS3TZ_AN524_MACHINE MACHINE_TYPE_NAME("mps3-an524") #define TYPE_MPS3TZ_AN547_MACHINE MACHINE_TYPE_NAME("mps3-an547") +#define TYPE_MPS3TZ_AN555_MACHINE MACHINE_TYPE_NAME("mps3-an555") =20 OBJECT_DECLARE_TYPE(MPS2TZMachineState, MPS2TZMachineClass, MPS2TZ_MACHINE) =20 @@ -207,6 +216,15 @@ static const uint32_t an524_oscclk[] =3D { 23750000, }; =20 +static const uint32_t an555_oscclk[] =3D { + 24000000, + 25000000, + 30000000, + 50000000, + 24576000, + 23750000, +}; + static const RAMInfo an505_raminfo[] =3D { { .name =3D "ssram-0", .base =3D 0x00000000, @@ -1103,6 +1121,72 @@ static void mps2tz_common_init(MachineState *machine) }, }; =20 + const PPCInfo an555_ppcs[] =3D { { + .name =3D "apb_ppcexp0", + .ports =3D { + { "ssram-mpc", make_mpc, &mms->mpc[0], 0x57000000, 0x1000 = }, + { "qspi-mpc", make_mpc, &mms->mpc[1], 0x57001000, 0x1000 }, + { "ddr-mpc", make_mpc, &mms->mpc[2], 0x57002000, 0x1000 }, + }, + }, { + .name =3D "apb_ppcexp1", + .ports =3D { + { "i2c0", make_i2c, &mms->i2c[0], 0x49200000, 0x1000, {}, + { .i2c_internal =3D true /* touchscreen */ } }, + { "i2c1", make_i2c, &mms->i2c[1], 0x49201000, 0x1000, {}, + { .i2c_internal =3D true /* audio conf */ } }, + { "spi0", make_spi, &mms->spi[0], 0x49202000, 0x1000, { 53= } }, + { "spi1", make_spi, &mms->spi[1], 0x49203000, 0x1000, { 54= } }, + { "spi2", make_spi, &mms->spi[2], 0x49204000, 0x1000, { 55= } }, + { "i2c2", make_i2c, &mms->i2c[2], 0x49205000, 0x1000, {}, + { .i2c_internal =3D false /* shield 0 */ } }, + { "i2c3", make_i2c, &mms->i2c[3], 0x49206000, 0x1000, {}, + { .i2c_internal =3D false /* shield 1 */ } }, + { /* port 7 reserved */ }, + { "i2c4", make_i2c, &mms->i2c[4], 0x49208000, 0x1000, {}, + { .i2c_internal =3D true /* DDR4 EEPROM */ } }, + }, + }, { + .name =3D "apb_ppcexp2", + .ports =3D { + { "scc", make_scc, &mms->scc, 0x49300000, 0x1000 }, + { "i2s-audio", make_unimp_dev, &mms->i2s_audio, 0x49301000= , 0x1000 }, + { "fpgaio", make_fpgaio, &mms->fpgaio, 0x49302000, 0x1000 = }, + { "uart0", make_uart, &mms->uart[0], 0x49303000, 0x1000, {= 33, 34, 43 } }, + { "uart1", make_uart, &mms->uart[1], 0x49304000, 0x1000, {= 35, 36, 44 } }, + { "uart2", make_uart, &mms->uart[2], 0x49305000, 0x1000, {= 37, 38, 45 } }, + { "uart3", make_uart, &mms->uart[3], 0x49306000, 0x1000, {= 39, 40, 46 } }, + { "uart4", make_uart, &mms->uart[4], 0x49307000, 0x1000, {= 41, 42, 47 } }, + { "uart5", make_uart, &mms->uart[5], 0x49308000, 0x1000, {= 125, 126, 127 } }, + + { /* port 9 reserved */ }, + { "clcd", make_unimp_dev, &mms->cldc, 0x4930a000, 0x1000 }, + { "rtc", make_rtc, &mms->rtc, 0x4930b000, 0x1000 }, + }, + }, { + .name =3D "ahb_ppcexp0", + .ports =3D { + { "gpio0", make_unimp_dev, &mms->gpio[0], 0x41100000, 0x10= 00 }, + { "gpio1", make_unimp_dev, &mms->gpio[1], 0x41101000, 0x10= 00 }, + { "gpio2", make_unimp_dev, &mms->gpio[2], 0x41102000, 0x10= 00 }, + { "gpio3", make_unimp_dev, &mms->gpio[3], 0x41103000, 0x10= 00 }, + { /* port 4 USER AHB interface 0 */ }, + { /* port 5 USER AHB interface 1 */ }, + { /* port 6 USER AHB interface 2 */ }, + { /* port 7 USER AHB interface 3 */ }, + { "eth-usb", make_eth_usb, NULL, 0x41400000, 0x200000, { 4= 9 } }, + }, + }, { + .name =3D "ahb_ppcexp1", + .ports =3D { + { "dma0", make_dma, &mms->dma[0], 0x41200000, 0x1000, { 59= , 57, 58 } }, + { "dma1", make_dma, &mms->dma[1], 0x41201000, 0x1000, { 62= , 60, 61 } }, + { "dma2", make_dma, &mms->dma[2], 0x41202000, 0x1000, { 65= , 63, 64 } }, + { "dma3", make_dma, &mms->dma[3], 0x41203000, 0x1000, { 68= , 66, 67 } }, + }, + }, + }; + switch (mmc->fpga_type) { case FPGA_AN505: case FPGA_AN521: @@ -1117,6 +1201,10 @@ static void mps2tz_common_init(MachineState *machine) ppcs =3D an547_ppcs; num_ppcs =3D ARRAY_SIZE(an547_ppcs); break; + case FPGA_AN555: + ppcs =3D an555_ppcs; + num_ppcs =3D ARRAY_SIZE(an555_ppcs); + break; default: g_assert_not_reached(); } @@ -1200,6 +1288,12 @@ static void mps2tz_common_init(MachineState *machine) create_unimplemented_device("U55 timing adapter 1", 0x48103000, 0x= 1000); } =20 + if (mmc->fpga_type =3D=3D FPGA_AN555) { + create_unimplemented_device("FPGA SRAM timing adapter", 0x41700000= , 0x1000); + create_unimplemented_device("QSPI timing adapter", 0x41701000, 0x1= 000); + create_unimplemented_device("DDR4 timing adapter", 0x41702000, 0x1= 000); + } + create_non_mpc_ram(mms); =20 if (mmc->fpga_type =3D=3D FPGA_AN524) { @@ -1447,6 +1541,41 @@ static void mps3tz_an547_class_init(ObjectClass *oc,= const void *data) mps2tz_set_default_ram_info(mmc); } =20 +static void mps3tz_an555_class_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + MPS2TZMachineClass *mmc =3D MPS2TZ_MACHINE_CLASS(oc); + static const char * const valid_cpu_types[] =3D { + ARM_CPU_TYPE_NAME("cortex-m85"), + NULL + }; + + mc->desc =3D "ARM MPS3 with AN555 FPGA image for Cortex-M85"; + mc->default_cpus =3D 1; + mc->min_cpus =3D mc->default_cpus; + mc->max_cpus =3D mc->default_cpus; + mmc->fpga_type =3D FPGA_AN555; + mc->default_cpu_type =3D ARM_CPU_TYPE_NAME("cortex-m85"); + mc->valid_cpu_types =3D valid_cpu_types; + mmc->scc_id =3D 0x41055551; + mmc->sysclk_frq =3D 25 * 1000 * 1000; /* 25MHz */ + mmc->apb_periph_frq =3D 25 * 1000 * 1000; /* 25MHz */ + mmc->oscclk =3D an555_oscclk; + mmc->len_oscclk =3D ARRAY_SIZE(an555_oscclk); + mmc->fpgaio_num_leds =3D 10; + mmc->fpgaio_has_switches =3D true; + mmc->fpgaio_has_dbgctrl =3D true; + mmc->numirq =3D 100; + mmc->uart_overflow_irq =3D 48; + mmc->init_svtor =3D 0x00000000; + mmc->cpu0_mpu_s =3D mmc->cpu0_mpu_ns =3D 8; + mmc->sram_addr_width =3D 21; + mmc->raminfo =3D an547_raminfo; /* same as AN547*/ + mmc->armsse_type =3D TYPE_SSE310; + mmc->boot_ram_size =3D 512 * KiB; + mps2tz_set_default_ram_info(mmc); +} + static const TypeInfo mps2tz_info =3D { .name =3D TYPE_MPS2TZ_MACHINE, .parent =3D TYPE_MACHINE, @@ -1488,6 +1617,13 @@ static const TypeInfo mps3tz_an547_info =3D { .interfaces =3D arm_machine_interfaces, }; =20 +static const TypeInfo mps3tz_an555_info =3D { + .name =3D TYPE_MPS3TZ_AN555_MACHINE, + .parent =3D TYPE_MPS2TZ_MACHINE, + .class_init =3D mps3tz_an555_class_init, + .interfaces =3D arm_machine_interfaces, +}; + static void mps2tz_machine_init(void) { type_register_static(&mps2tz_info); @@ -1495,6 +1631,7 @@ static void mps2tz_machine_init(void) type_register_static(&mps2tz_an521_info); type_register_static(&mps3tz_an524_info); type_register_static(&mps3tz_an547_info); + type_register_static(&mps3tz_an555_info); } =20 type_init(mps2tz_machine_init); --=20 2.34.1