From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745589988; cv=pass; d=zohomail.com; s=zohoarc; b=TyfJ3gjIoMaGJoAXGun1Pha+HnoBt3e874mGtvZaqMmFxIs8ty3v2ugCl2jH+PZKnQqCvuvJh6QPK5DazJucaAZT39EdBIrpYJFbXlkJMS+rEc4by1PvumV8uA+Xp7azhmHflfjbVNt3xExY9mPjNCsnrLEL96DnPbw6UEcfe4c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745589988; 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=HshIQ0tYJGlIvCo+Wnnb2m7qo5fLFiPMbgS1khl9fmk=; b=MlICxh7MVt70AqoR3twy32yzNcdTEaChWDAeqGBI/gy5xpXxP53EoVPU+8+wmO5Lp0Umrr8TfExjqOjgZNvVESlpRRggdHrlIBSrTe0U76+qu/degEqxbIIqiua0mBvBUY1ESTHzXXUpcV9iwRnOALLbIzbtWH/+mvw0Vh55t/U= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745589988700206.84786108969922; Fri, 25 Apr 2025 07:06:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jft-0004FF-NO; Fri, 25 Apr 2025 10:05:05 -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 ) id 1u8Hl6-0001ex-5k for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:20 -0400 Received: from mail-am7eur03on20716.outbound.protection.outlook.com ([2a01:111:f403:260e::716] helo=EUR03-AM7-obe.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 1u8Hl3-0001PG-U9 for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:19 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM7PR09MB3976.eurprd09.prod.outlook.com (2603:10a6:20b:114::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.26; Fri, 25 Apr 2025 12:01:43 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ubpaArqygFVL9PnpFR0cYR7HiZpmTcROnu99/pGsVLlc1vhdz1KSX3V2Hu0Io/4OWgwXW3WrUpPM0b3YqIG2gjtxWvlFzjuZY5/46lWbHamyk/k7um3K/pZfHhav1Tf8g37bBa3TL+8t1sHj3M57SjwX0MJgCbZmBukPPeRZbvYifNZRHW8q1ia9wsA4Hmj9k5yM4NXrIqAziIK/j8DNypTuqkw/DSoxIsSeLF5ncNfb2bDECS0fzNan9KjD0+2SDT2OoNk3MoxNwhL0fbr8XJx3PmvrWUraZnSufaM3YC4rkbX8MUDDKOG1xqL9srVcl5tYEW2dkH0whJpbFuin7w== 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=HshIQ0tYJGlIvCo+Wnnb2m7qo5fLFiPMbgS1khl9fmk=; b=Q7QziZwymqs/a1Ztz+gfk4InbofgCncoC2KGIQ+zvha64xeb9fLsHWOW7CogMgaL3Sp4+SThm9Pe6beJPOrdjCMiDxtqk54Oh44RSrzkU9n00Uo01IRkEFVqYNlG20KvOaoSItL4Y8VS3PKUHZnmZyn/KLyp8bkvl1baJ0alYscvgiU/7VbJebqF+wcuM7HrTacU7mDd7YCTFJjrAbE7X6yVS9fHk3D4oJ1Kpia6h5cz7vzpARlT5unGPHeVWRM+gQgpFyDHPoaiPcaMTNO/kZSHPJxxl9FtBoIiqdGeV4ZYThtHdRhuOOrVUTr7uoTUtslEsWhyB6nSbRSoxI+HBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HshIQ0tYJGlIvCo+Wnnb2m7qo5fLFiPMbgS1khl9fmk=; b=e8S4UEjvM+Ikn19foOWisjz8WLrRuuF9/iqVFd61UkFX0Jp+dPZnj+HYAzYyR3kI0uXfPqQXIPfnw2qdO3Wv1LweXaFuVKaKsFXbBUH2k2zYJqfTfaNbKz/5GcOAqxjHB/XFBBjg+6ZzBHZxpEYwb6vjwjTnEe2IDAcBs+BxJqB0RDutvFUUZiI9AMIxtj4tLYqTz5uEqChLtn+eVkGExBC8pt6EAZSyTpwqskUuh5e0HLGnsB2nUC1OUOFln5vUvSP2bzRk895F7P0dOvxFw7C/ZAydL33TmHBGCaOkYURWQDg/8kswkGUdRtMN2mdigHueRqHyf3xVuzxL/q1xaQ== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 1/9] hw/intc: Allow gaps in hartids for aclint and aplic Thread-Topic: [PATCH 1/9] hw/intc: Allow gaps in hartids for aclint and aplic Thread-Index: AQHbtdnP2srbK2C7mE2AaCNqkm9QSA== Date: Fri, 25 Apr 2025 12:01:43 +0000 Message-ID: <20250425115912.912889-2-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM7PR09MB3976:EE_ x-ms-office365-filtering-correlation-id: af81e350-bfb2-4bb5-ace5-08dd83f0f24e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?M4LAUXNJRlpFb45DN5diWe7tpXQfxa1CXhkXN+s7TNPUauZfVrwcvtuKh2?= =?iso-8859-1?Q?5+qkPSfBQY0VXYPm9dpPFLdZuQ6FJmfwM3KvrBicakURfLh3IMynNV5SkV?= =?iso-8859-1?Q?ZDybNFYiX/EZdRdFMVapbgdzEfR4EUBzcVfeXpdnFx/aCnshOpSWf1UsnB?= =?iso-8859-1?Q?4IjIEwSeZju+cw16BfuTjxxWUZ/mEZyJ0HQ0VpdHaADFiiadN4zB7NlLze?= =?iso-8859-1?Q?+2OmkkYEy7dlH/qRM4EqZb25ny5v/w0Vk4kgy5a/HR6J7qNocQwaCaEs+S?= =?iso-8859-1?Q?CLx4euUxTKESXTrfV1T609x+vJLjbGoo+JpEG+XAl1uNcslKQ/JFv61w0i?= =?iso-8859-1?Q?+AqONhMN7kvr9ZKY7vC7XJS1HuHI1FkPiJCZacsVOovv+mkIdowCyAH8gI?= =?iso-8859-1?Q?9c/c2Co0JixHVu3446/YkPUrmWxxjLjcysQeYe2iV5NhogPhNrXJYnPFa7?= =?iso-8859-1?Q?RvyYRMCaSLf4EKX2Jt8J5OA8tvv+i78AbCg0zfOLz9xcmmZ/qEjSpSUM8d?= =?iso-8859-1?Q?3POAYR57Hscg6/xvUvPFR22CcLRZFlJvdJ+N/sKLCH/Bn0YrTUFjSN0ic/?= =?iso-8859-1?Q?tUMAqVk/Y1/2CpOTVsVFRox+0xUcBtCqbVh0S5EDRplkOMxOtPbF6fdu5A?= =?iso-8859-1?Q?4ls/O8i9hujuPNxS8Nc7WqwVgIic3BkUuotjHtksoDop1n7v3s7pyWKP2I?= =?iso-8859-1?Q?sdKgHkDpjFMEkeqstb4W6E8QjAIgIbGdSzO62NLevjksOGxqcJFOOcwHWr?= =?iso-8859-1?Q?cHS0yGpwdXuFPhN5Vsv1DgTV1RZ4tLYSW6SjdKk+haSHkwG6xd9AiuWKuM?= =?iso-8859-1?Q?iTvG9zktasYyr56ZUq/HDKEjVLB8Rj5RGbcMzdFIcOJX3/MnQPKEFtnP/N?= =?iso-8859-1?Q?8qR4w483Nti7ZGurU7+9o47smy9kIDWM4RaLYuhcksl56DSLC4/flki4l+?= =?iso-8859-1?Q?N4Gsr01gjcdL4Hkkrkh5r8MCRvrO2eudPBp3gtdqhSPNrcdYh7fkc9eM/C?= =?iso-8859-1?Q?44iEQtUwna1MBF+lv/YVo8rB9P02IH4PXKFMhZehWJ24iN5FCNqzBBvBzI?= =?iso-8859-1?Q?ZgpSZm/cOyGKUihKxAyLVnD2qJeYRWFFm4sIbJ8nEE7FktbaeSZXVeH9Pb?= =?iso-8859-1?Q?TZZPRpcVGp0LSkwcaqEmH3CvC/eEF1e/oxVQYQtjvSY3aQmgTUyBb8zrft?= =?iso-8859-1?Q?E/lozDibhNU2WSYP5KLYniDX6FDeEKvZaTMAZ4rkp17WE0mpX7DfuLXp/5?= =?iso-8859-1?Q?gVLUzGn2ec56CwQb5dFwrr7WH/wObUIIfU2jPC/N/g/lEAg2MP7F7p8rfX?= =?iso-8859-1?Q?ItqLGM7Q2NWIgMTPbYE+IBKCIfRWkMTCCPYwbhQSnb0OAThLe3jbrubFiG?= =?iso-8859-1?Q?/tUqFRyQ1nlcXtbTrf4sELYZ+FwtRA9Py+UUkB5p9WvUxCWUFxtYVSLY8k?= =?iso-8859-1?Q?sD0HooVNJPJnNJAKtHjQwurabvuLVlWF7KG2nmAnuRYp6xPz565jYT8VY2?= =?iso-8859-1?Q?qG4fHK8tudgGX38+kw0QYuM0Jm4ZkohiTiYhKvrjSouFOQhPPidv5jN24i?= =?iso-8859-1?Q?PZha0z0=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?AtQ09Rw1OP5yGlCVrbf4IgTN0c2hjLJBTkgaJCoesO41Usm2fT/6fV4AjS?= =?iso-8859-1?Q?KXVMaKd5/tIDuO/JZwK3zLmblEa3aj5zsF2V7w9dzFZXFlo8VNhQ5C+ZOY?= =?iso-8859-1?Q?92wlAUsJtMaoypUvRYhiOXZglkbzOL11gF4W7/2G9uNVMectYC0r5gBMbs?= =?iso-8859-1?Q?A4JItHqa/JmGrOPg+JSbd07rUquGbT9iaMGPwtuFTJkInp1JHPGXQ4vAEl?= =?iso-8859-1?Q?Zzr9KrmY+PIsiV6sR0pvySndopnwNEx78+V+T4csKygFlL97BmmzTvk88B?= =?iso-8859-1?Q?pYZRSM+xVgg9sIQ+F3o8dz0PCWGqNUHlPIejbVA+7TPWnmGh9OBY975wWX?= =?iso-8859-1?Q?eFkrpHuXv/mJd+tC48Yiv+O9GM0taonabjcZ0ilMb8lf04LkNQX9c2c1zv?= =?iso-8859-1?Q?W9omaPJ+I4S4G5MF5RM7V4678f0CfSoQscQfI6OLsN2Qn4pRvCl2vtZvcg?= =?iso-8859-1?Q?H2L8rC4Ulw2hPYx5aDmARcLk3wPSjp3xBnsbgfroAsTIRH7styMkZD6+Td?= =?iso-8859-1?Q?aG0pelxVdkUbrpWwTBeVsCYSAB8xqlPJ88z/NPXjMQCEgdGW5X6fjWtwCS?= =?iso-8859-1?Q?sqS33+5/gIvDQnZaMsNU/tZJflFtJWDAw0M54II9JHZrOuGpGgg0rd/1zW?= =?iso-8859-1?Q?VDIOxN9BDoGpfF9GslPmn69fPvMaTBAk3RmeqU47VEyej9J/TrzSm75Aw0?= =?iso-8859-1?Q?Ve3IAi3eMi1bdfa/YLOQv+773JavLZQIPXYM9UHCypPtnLyXUaGTcCv/Un?= =?iso-8859-1?Q?I61VOlKI+qdnRdixKoD6xVqiF+6ZVdLpFIGL8C/bL0ukQ4jkXV8XMoOHko?= =?iso-8859-1?Q?vVDwquHyL57+spc4P57b7dkoyn2cgzHJCbGyKBSnZsS8Prg9n/ggAPWV3F?= =?iso-8859-1?Q?6nKEL8aBpkN1pYSzoLkGPKEFuiG7MGVlsU8H8ViAnLJNiQls2WJk7Ah5uf?= =?iso-8859-1?Q?uVIGiDByV/e23sxhfgmtRbtTAyHm32bie/8EzkmQZvPs3bDm6X4WWltVFc?= =?iso-8859-1?Q?jHmFpWQdzekuUhawG0HXw0xU4xumcVrwRG/S9yHakQLOse3YVwHJexsI+u?= =?iso-8859-1?Q?sk7Wc62+EOKzIIAMt3VbLt3y9X5nAcVjQ4dD24IoKUxA9obAQ1dKZ9p/iz?= =?iso-8859-1?Q?Q2XjQNTCoDMCHCWvABIV06J+1JHNwOIHtXSzrOe5xE3RP9+vRokOLpsZVo?= =?iso-8859-1?Q?eoTCBN572Foe/0NjxdWkNbYBVfn5nFuwza4Juads4/0oT57jwyUTOxBD95?= =?iso-8859-1?Q?hU53ybBn4tRyRZfxtK9Dp3T/+42gFhpWE4ngzI5r0Kj5mOJGB9DkdFb4WD?= =?iso-8859-1?Q?qM/2hm0Nz/xqiEQkooY+u2sJBaBvhNSwZU+j4C7bSkhxLiC3vyjEujanZ0?= =?iso-8859-1?Q?gYVWQqC/7T841FTRTRKKz8BsXaKDQARz4eRmZsnQI4pQUfzmydlHlitbWL?= =?iso-8859-1?Q?43q5gUqk8SaCyghDEhGq/QNeVC5GALqKErIBcZWLt3aS9fbSBwmPA7/iKn?= =?iso-8859-1?Q?UASUFf6+OIQXnhA2B7PhOD+m8sluJwFbYNEE5QQTb8TlT7ZtOAaPoXFjxO?= =?iso-8859-1?Q?kmOnWFI8RGF6IIOcwRRKJAfLUPrA8e21kVB2fPmWzKbYmazd0F2ZvyPHil?= =?iso-8859-1?Q?FpnAZJpLoKZoKnm5Tg4vsY1oTv/fqxcSF3WXGt99u6wPr3iD3xt3mkO/5J?= =?iso-8859-1?Q?UZyxAy4DoKGd6jjRO90=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: af81e350-bfb2-4bb5-ace5-08dd83f0f24e X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:43.6797 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: jbhOCauHuqnNzFfW70k0Ig1bwvzvCneT9DcoHOwuPSmLuoOF+HCTZMMOHOKLemqg6Aep37hH5OLq9/JYVWNF/eaeJyRlEtw0W+7zTfhmtyw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR09MB3976 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:260e::716; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR03-AM7-obe.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745589991674019100 Content-Type: text/plain; charset="utf-8" This is needed for riscv based CPUs by MIPS. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- hw/intc/riscv_aclint.c | 24 ++++++++++++++++++++++-- hw/intc/riscv_aplic.c | 9 ++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/hw/intc/riscv_aclint.c b/hw/intc/riscv_aclint.c index db374a7c2d..403a889bf4 100644 --- a/hw/intc/riscv_aclint.c +++ b/hw/intc/riscv_aclint.c @@ -131,6 +131,8 @@ static uint64_t riscv_aclint_mtimer_read(void *opaque, = hwaddr addr, size_t hartid =3D mtimer->hartid_base + ((addr - mtimer->timecmp_base) >> 3); CPUState *cpu =3D cpu_by_arch_id(hartid); + if (cpu =3D=3D NULL) + return 0; CPURISCVState *env =3D cpu ? cpu_env(cpu) : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -174,6 +176,8 @@ static void riscv_aclint_mtimer_write(void *opaque, hwa= ddr addr, size_t hartid =3D mtimer->hartid_base + ((addr - mtimer->timecmp_base) >> 3); CPUState *cpu =3D cpu_by_arch_id(hartid); + if (cpu =3D=3D NULL) + return; CPURISCVState *env =3D cpu ? cpu_env(cpu) : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -233,6 +237,8 @@ static void riscv_aclint_mtimer_write(void *opaque, hwa= ddr addr, /* Check if timer interrupt is triggered for each hart. */ for (i =3D 0; i < mtimer->num_harts; i++) { CPUState *cpu =3D cpu_by_arch_id(mtimer->hartid_base + i); + if (cpu =3D=3D NULL) + continue; CPURISCVState *env =3D cpu ? cpu_env(cpu) : NULL; if (!env) { continue; @@ -292,7 +298,10 @@ static void riscv_aclint_mtimer_realize(DeviceState *d= ev, Error **errp) s->timecmp =3D g_new0(uint64_t, s->num_harts); /* Claim timer interrupt bits */ for (i =3D 0; i < s->num_harts; i++) { - RISCVCPU *cpu =3D RISCV_CPU(cpu_by_arch_id(s->hartid_base + i)); + CPUState *temp =3D cpu_by_arch_id(s->hartid_base + i); + if (temp =3D=3D NULL) + continue; + RISCVCPU *cpu =3D RISCV_CPU(temp); if (riscv_cpu_claim_interrupts(cpu, MIP_MTIP) < 0) { error_report("MTIP already claimed"); exit(1); @@ -373,6 +382,8 @@ DeviceState *riscv_aclint_mtimer_create(hwaddr addr, hw= addr size, =20 for (i =3D 0; i < num_harts; i++) { CPUState *cpu =3D cpu_by_arch_id(hartid_base + i); + if (cpu =3D=3D NULL) + continue; RISCVCPU *rvcpu =3D RISCV_CPU(cpu); CPURISCVState *env =3D cpu ? cpu_env(cpu) : NULL; riscv_aclint_mtimer_callback *cb =3D @@ -408,6 +419,8 @@ static uint64_t riscv_aclint_swi_read(void *opaque, hwa= ddr addr, if (addr < (swi->num_harts << 2)) { size_t hartid =3D swi->hartid_base + (addr >> 2); CPUState *cpu =3D cpu_by_arch_id(hartid); + if (cpu =3D=3D NULL) + return 0; CPURISCVState *env =3D cpu ? cpu_env(cpu) : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -431,6 +444,8 @@ static void riscv_aclint_swi_write(void *opaque, hwaddr= addr, uint64_t value, if (addr < (swi->num_harts << 2)) { size_t hartid =3D swi->hartid_base + (addr >> 2); CPUState *cpu =3D cpu_by_arch_id(hartid); + if (cpu =3D=3D NULL) + return; CPURISCVState *env =3D cpu ? cpu_env(cpu) : NULL; if (!env) { qemu_log_mask(LOG_GUEST_ERROR, @@ -481,7 +496,10 @@ static void riscv_aclint_swi_realize(DeviceState *dev,= Error **errp) =20 /* Claim software interrupt bits */ for (i =3D 0; i < swi->num_harts; i++) { - RISCVCPU *cpu =3D RISCV_CPU(qemu_get_cpu(swi->hartid_base + i)); + CPUState *temp =3D cpu_by_arch_id(swi->hartid_base + i); + if (temp =3D=3D NULL) + continue; + RISCVCPU *cpu =3D RISCV_CPU(temp); /* We don't claim mip.SSIP because it is writable by software */ if (riscv_cpu_claim_interrupts(cpu, swi->sswi ? 0 : MIP_MSIP) < 0)= { error_report("MSIP already claimed"); @@ -545,6 +563,8 @@ DeviceState *riscv_aclint_swi_create(hwaddr addr, uint3= 2_t hartid_base, =20 for (i =3D 0; i < num_harts; i++) { CPUState *cpu =3D cpu_by_arch_id(hartid_base + i); + if (cpu =3D=3D NULL) + continue; RISCVCPU *rvcpu =3D RISCV_CPU(cpu); =20 qdev_connect_gpio_out(dev, i, diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index 5964cde7e0..be30579028 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -899,9 +899,10 @@ static void riscv_aplic_realize(DeviceState *dev, Erro= r **errp) if (!aplic->msimode) { /* Claim the CPU interrupt to be triggered by this APLIC */ for (i =3D 0; i < aplic->num_harts; i++) { - RISCVCPU *cpu; - - cpu =3D RISCV_CPU(cpu_by_arch_id(aplic->hartid_base + i)); + CPUState *temp =3D cpu_by_arch_id(aplic->hartid_base + i); + if (temp =3D=3D NULL) + continue; + RISCVCPU *cpu =3D RISCV_CPU(temp); if (riscv_cpu_claim_interrupts(cpu, (aplic->mmode) ? MIP_MEIP : MIP_SEIP) < 0) { error_report("%s already claimed", @@ -1076,6 +1077,8 @@ DeviceState *riscv_aplic_create(hwaddr addr, hwaddr s= ize, if (!msimode) { for (i =3D 0; i < num_harts; i++) { CPUState *cpu =3D cpu_by_arch_id(hartid_base + i); + if (cpu =3D=3D NULL) + continue; =20 qdev_connect_gpio_out_named(dev, NULL, i, qdev_get_gpio_in(DEVICE(cpu), --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745589955; cv=pass; d=zohomail.com; s=zohoarc; b=QQJKU+raPZKnns6FRvrJzAzD0ypia7p0As9fTqiZVcknFhwHDu69uCFGSEo6Nc9oIFw3XbjzobkLNZ0PiyF6gFW6vvHYIP1Cwhqx5C1kNcibC4Lp6QPOIwKwarufIbRLh9Kj64XX4/Ff6ua6dGmkmtuLjOheRfF2YwmD1yLhrwc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745589955; 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=0ZvM2bYUn1pvZRs6bp2f/ONMZygBOqWh0oVz32v7nAU=; b=RaVeMbTSN1Uv5rPw4+dIWwK6Y9GvTcTH3rNjZqtY1ZajXwkskSuADv87qVpZS+CMtppx1QNPjGYrNLGcyUpo42tDDpJS8DQxaVv45RsRmWww+Cvv2cppPpYoFzE6zcl6pScMbQeDVKB3WSCAl1H9CPUC+s3Nu+a1WWcu6wKo0oI= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745589955231681.9761242538094; Fri, 25 Apr 2025 07:05:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jfr-0004Ba-6a; Fri, 25 Apr 2025 10:05:03 -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 ) id 1u8Hko-0001YE-6K for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:05 -0400 Received: from mail-westeuropeazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c201::1] helo=AM0PR83CU005.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 1u8Hkd-0001Mc-7e for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:01:59 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by GV2PR09MB6304.eurprd09.prod.outlook.com (2603:10a6:150:e0::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.39; Fri, 25 Apr 2025 12:01:44 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C2KhzG2UIRjvBYxP4ALJPzl8xTJXb5uDeA8pp9gvkK8WKVctXn059kunJUpBT5KMF3KAfcs79sib8JJQvJ+lfatDuQGgynQEckGeniGALSu3zvyG+zonE9wq1eazDadLHnCfXJw6nyKhT7/+NLYqC9xaSPq+bbnJX2uui+ibDYyl60T7LHP+o/zLh4g1BEK04c5xvQ2XdcS9r0eW+2cPOxuEwGleR6CoS+rfXWIotCxi4g+Zjxv8y8uUn2TZgdFdDG1rcQxRF3AUDm4Lwz75WjN338/ubBYAfbxJ/qZmlPV9hRS9wHbDENsNPkEtIsckJztWA1138PZH/ReDgBJ+Sw== 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=0ZvM2bYUn1pvZRs6bp2f/ONMZygBOqWh0oVz32v7nAU=; b=R1hF8axjVjjI+92AA38RzoQ4m8e2iRYsTNxrau0d2a+GcMTh6aomCSqPgwc5M7v/BHI5UhZ0RwdJsCH5BtDhtdMhfqrD2psSDaXebBUMy4ZleUsN1m7eQ1fsUn8hSHRwt0tx6nYkjWOGQyY5qBaaxJJqjRBJYyj/cwpocf0+9q8ojWXV1XrGZDN0L5rNhoe+5vyFwUktcadU4pa2xZJ+cohgnFiJQ6e3TtnjFeJDIvS6+fsAbtxRywfXssYHZQaS8Cul2rOysxney1dR7LSkBHsP5EZbX4bY/hhxiiOFvnaDaWnEIwoFKUUv9EpF6iVIvsAE1sKT5vP1/AJDDSt/LQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0ZvM2bYUn1pvZRs6bp2f/ONMZygBOqWh0oVz32v7nAU=; b=AMHvovVNLKDCmw95Q31U+WMEcZAf/A/QT6HncsmDwODRgzBR7qSD+HYN6b9jA9wnefm1wppqENe2kOU8htjhEVszGliK6bzsWozA7lYkfTmlrtc9LWUXooQxKWK0+TvHNJPtXf8Gf+Gp8RkO0nHW6yN9OdcagfmQkfbAHjTEvJi3prsgFbjN/z7xZaQwGkEHz3pUsYWhfyIO1hK5i9SRBm1Df/2g1sIt8NA29FrBWUp0coSpkWLHp+LQM8s+eVagc5AZTM+X2LWGyVjtqZ4xrnXdKhU8nMW/0jfdkshqTNsvrfJgBjjbyVFCdMbNwsLwa6ThJ0WxvvhbVq0YvbqSCg== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 2/9] target/riscv: Add cpu_set_exception_base Thread-Topic: [PATCH 2/9] target/riscv: Add cpu_set_exception_base Thread-Index: AQHbtdnQ35oqYpmjPEWW8r1TQ6bbfA== Date: Fri, 25 Apr 2025 12:01:44 +0000 Message-ID: <20250425115912.912889-3-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|GV2PR09MB6304:EE_ x-ms-office365-filtering-correlation-id: 6dd6d8dc-9403-461e-e0f7-08dd83f0f287 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?Mjc8a/wd5ytq9DnAv6hbfaoHjv9zZz1LlhX8r4+FuhtD+XYRRNfenXzCut?= =?iso-8859-1?Q?8xvIVvGK90/Fk6zVqHk02zuyIbJka/oJmpYrjIhBEyVEXL4F5U9oH9jlsK?= =?iso-8859-1?Q?8isatQDa+N4cQlaQkd6GuN5lG90+5KisIOUjFYTsaEH7ZLv1AZ0OPkho2L?= =?iso-8859-1?Q?T0xSswXLRtbhf6XeZHcphqeFYK6GVht4UbWRq3Hz1zvCjaivAaJtYfdWNl?= =?iso-8859-1?Q?kJww/NapKqltlNSYAbyj/BE5SEoJjcpdrKj+BGd7tg+tp9kbjR96vHQxIA?= =?iso-8859-1?Q?1VX4K/VuctJAA1YXQ0+dAPMgaLNjNJ/KTmB/ckHJBa+RApgemWhp3OMEXh?= =?iso-8859-1?Q?Ev7F3IBtUpIAhrCSpSJtL4DEyzwIcBGv7AYHB51SrJd4YtRTB8QC6fh2pq?= =?iso-8859-1?Q?CurtB8uocRHBjZtarz245BjGvUJOqIi8g6tdGczUAZ1jIYZ+whSEbeF5J0?= =?iso-8859-1?Q?I9b5ENa/LKiHIbAda8O+LkdcGJOkmQOyeq7xAogmdmKIUe+/faF12IQ84g?= =?iso-8859-1?Q?sqnem09edZGcrrQx7vNhjFyxSwpcJ+PeS/i+g2Kb8E9ZCNGWwHGUpzoRdi?= =?iso-8859-1?Q?KN3086+oS2U3l1C1+xwgco6kk9GfPF0asyYDzQvuiXFDVJE2EwOEWcd2oF?= =?iso-8859-1?Q?MvUnjlQQEWYg24dfgwLhXB0FSuaklwnUbWqiL5iWdVL8zhmpO2yfUaR6iU?= =?iso-8859-1?Q?2Su90ENMLWkj6+sEzGa5fy+OU6Tao9pYio16v4kWkq/FF5onVNFoY+e1pF?= =?iso-8859-1?Q?RjoPqyOFKoo7hgP/KGEIKn1Q+ecegKXQ1s3Xq8h/+3tWDwAhuHbG8pPQec?= =?iso-8859-1?Q?Wz1tBelZIVvInCtzfo0y5FJFax1rAlC34jCNcnm6hcNNnGvj1Qg+LAQ/RC?= =?iso-8859-1?Q?j0gCyrHuExIzWWAkmuV00SfNZI7F/GDQpttPjaJY4AiAhobY14+8Erdkp+?= =?iso-8859-1?Q?j5A72VSBEArLj5CuSJaxgzGGLZmZmP9EIvSRjrs7w6MssvOJPaLRteoarQ?= =?iso-8859-1?Q?MydF73EZkirTliecrXxxX4hBTGo2T9VYdjuYyoPToqB1UaZoLEuLQavs70?= =?iso-8859-1?Q?u8Si6EAUa7TZ2tuiApEZ2FJElwPEY41gHy4l+nAdptnaxRcVJdzrHidYJ7?= =?iso-8859-1?Q?4jmgsetnr9m5Cf6rb8XE3ArzagjhaFE8Yq9RJzSy72j9tCe5kI+JWMhJ1u?= =?iso-8859-1?Q?Ceng4DlzKFAcFAKbMHjrRiHdpODzlVDv4ICIIN9JhK4LwEt3ViBw6mz5CS?= =?iso-8859-1?Q?k8bwBuTTzD6q2mhbwUnwWxOMKWWnnHrsuXgMZaI4syrfTWFnwM2p2PuHru?= =?iso-8859-1?Q?iXMdnrl4n8uDrzsn5d3aCpMP/r76krTy2Xz/3SBfV4B60DcwXlbkXI5Wyn?= =?iso-8859-1?Q?/RT5KSPxBdep/mjx4woIudKuGd0NKA+tn4xwJmav62IU7++4Bqe+WJoSmN?= =?iso-8859-1?Q?6m8cS08Yylumz4TvvECkG5BxFUtCGJUuPHVVxN7OkSL31ypXZBOLvj1CYX?= =?iso-8859-1?Q?01H6lNeIB4Zh+n3p2UBSYFrrpcxZEDeu1znascW21ZP25/h2NWBpZ0r5uQ?= =?iso-8859-1?Q?2cC2WCo=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?oUnEeoCVyO9n7zg1qmOCNHlJA/xcio2rbB66JJOvZ0se3U5CvZUV1JqaUM?= =?iso-8859-1?Q?nayzvFdGV/hjo9O1BYyoUhiyXbty7xQ8wvboq3CHaqzzy43Uezm9xo1Akn?= =?iso-8859-1?Q?LfIioupiTjy0uk+MCHd3mdu6bod/r7J9QB1A9ghz4qXqx1flQY1CKLCq51?= =?iso-8859-1?Q?IoDjPF/lIjnIARVL7+fHqXgmA4IS1kYnxoGC9tXHEyqQBh9vQg4pjAdM3w?= =?iso-8859-1?Q?z1TMhIePrNxaD7zajOGFGy7UlHs0b97TeNw3SLVQcbHZ4qfdvkzbqpYn2j?= =?iso-8859-1?Q?P0kpXErY72peCadHZilfGy+REOPo6sx1MnL/kK762bzf2JWKiZK4tL3zIq?= =?iso-8859-1?Q?9v31K88cgw95JhV834f0YW6VKPCZU/lfk1aZYXEkXjyJifzdExZMrGXSn/?= =?iso-8859-1?Q?+2+74pqdQcxHmAdov8y18vKKWXGcfg8Y1vg04tAxmZYE+GSRMZaBdbp665?= =?iso-8859-1?Q?9OuCuaKSLVthuuhNTm9T7YBRLzlY3/xgt2DVR/1VTcUiBrZdNXD8QIKDby?= =?iso-8859-1?Q?DTiJ+5oL4l8BfM5MOLm2lTwxyS7dPRBcVJxH6mBkbID9q254xS8EfslOjE?= =?iso-8859-1?Q?2ouJo3P2hjQ9Jjm3uEEsPS6+EJSXLPro5cbsChbQtRRR+vrWHHOi01KQaH?= =?iso-8859-1?Q?hTB7x+3ZnMkCWvrke1C13LxuqVEdZQE1N2w2N3HKs0D2OPpuvqj+CkvP8u?= =?iso-8859-1?Q?M9lauDHHLSOw5YLzsT1zQSKvLSFXY2xrSFWLK3tCxvDSASmFrB3Mko6sPU?= =?iso-8859-1?Q?EqJpTSGVBraCgYLuxQLv8ynkKpz7xGkvpS8e7Pi6bx7eNSvosJxecHfZnH?= =?iso-8859-1?Q?hNjZo7zYe1MDn2j2dN3uZUgck1cVrv5nmnDP49F5DjPNwGRKcGLhWnNelF?= =?iso-8859-1?Q?tcTUgtOnn1v2zuVM+oMo7IpJcamerBC5XS9IbjB8ZOFW7j5NpdOM2nKTTs?= =?iso-8859-1?Q?FFiQ1c0Wge1t/OduMBJkUly50iM0wOm+3ukDOmOTJedaoyvtZI1BLjK5JD?= =?iso-8859-1?Q?vheBoS2vQtbxmqQL1w0FgATpzVprGSJbp1+CEuEF7zAt3c6CiJ5umcg33J?= =?iso-8859-1?Q?CkwkBAcwSWw5qF6Hi9nyhpwEvit0YiWyIuwcZDWj6zsDiGamWCVOAwpZlf?= =?iso-8859-1?Q?pC4Bu/QehKtC2H5Nr5jyOjU8J3+sJOoIJmHTQq3rT/aILI3sBq3LHDXxJW?= =?iso-8859-1?Q?wyYkZF+MzsyLEocOnX3A9ov4MPPr/LP4Ya4wiNlwgT6QrBagYPXm0IW6iJ?= =?iso-8859-1?Q?gCIRaRzbPMNYQWjtuEegx1Ag3LMz/QMtcp9kqwzk8JBv517m6xVICcQkTI?= =?iso-8859-1?Q?n43wsDJrRmyek0ytcIxACkrnJImx1kf2GQY9EdrBEZAqcayEx/Rv/z7BcP?= =?iso-8859-1?Q?KFOL1241GaN1k+vNbiqsL5Ed7CNRB3q5dmggG5QnW5zwnIQsowsIP9px56?= =?iso-8859-1?Q?XTw/rZP6O5Jo2c6wDHImvOnqImFD3oTW9uXWOkFToKNHk6932SWOdPST7V?= =?iso-8859-1?Q?/1srcV+HiD/ADI7BH7RXkhkbhmfPRkdO7OsVxfJxZ5qfvCa8RZeZ4p5v7J?= =?iso-8859-1?Q?9S6mdEzxD+QJ5rc0SHwjLLuK7T6m0Bd9r1Z2KpCUAlTMIdA030xTJS+HTB?= =?iso-8859-1?Q?bu5/R613/bwPk6jOBQdw2SQLEzt65rKfJzUGGKNswJyTKVT/sWyKEuC3oa?= =?iso-8859-1?Q?eS+dOuWaRkq84s5HFjQ=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6dd6d8dc-9403-461e-e0f7-08dd83f0f287 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:44.0707 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zskv8PyPktlbOYohvez8+kQc/2PXclH49PN26pBqqGzxaYuNAwOzjdoT0ltjKS/Yq0bW/ad+WlLX+vk8gs5UGARu4PPnR/9/jyZNH6ogw/g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR09MB6304 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:c201::1; envelope-from=Djordje.Todorovic@htecgroup.com; helo=AM0PR83CU005.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745589956039019000 Content-Type: text/plain; charset="utf-8" Add a new function, so we can change reset vector from platforms. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- target/riscv/cpu.h | 1 + target/riscv/translate.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 51e49e03de..6d0acbce80 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -632,6 +632,7 @@ G_NORETURN void riscv_raise_exception(CPURISCVState *en= v, target_ulong riscv_cpu_get_fflags(CPURISCVState *env); void riscv_cpu_set_fflags(CPURISCVState *env, target_ulong); =20 +void cpu_set_exception_base(int vp_index, target_ulong address); #include "exec/cpu-all.h" =20 FIELD(TB_FLAGS, MEM_IDX, 0, 3) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index d6651f244f..2b8ddd184f 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1433,3 +1433,11 @@ void riscv_translate_init(void) load_val =3D tcg_global_mem_new(tcg_env, offsetof(CPURISCVState, load_= val), "load_val"); } + +void cpu_set_exception_base(int vp_index, target_ulong address) +{ +#ifndef CONFIG_USER_ONLY + RISCVCPU *vp =3D RISCV_CPU(qemu_get_cpu(vp_index)); + vp->env.resetvec =3D address; +#endif +} --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745589955; cv=pass; d=zohomail.com; s=zohoarc; b=LjxtBRXIdbdMpvqqkLIv527eGsvHOrv5UPQWEwR1g+ksuEN/759LaUd34iRdOYrySSs3W8XPwo76oNgUu+Fl2mf1mHISimUKGRCAi+DZg1t8TWHvt6i4d9DXUmDCUh5vNc/p2183N3s8iTevqN8sYtA0tPTnCnTfR1COn/pkoc0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745589955; 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=QiEsHc0Y2m1YaZy6JTgPAdtFMb2TN3clMrKrYfVh59A=; b=PkhywmJmj+eRRPYvO3JQcQGeHBcYUXdDV6TiDlUc7lQ1Qu8SZGso0Sm29L2KbpJoW3/Fdl81AHxYNKPUMsRzCm6dEoM+mtFzFQBopRtVgqhqje+tqzx8fgmN16A8DSRjYK/zBr+mF4GYlkNoWi830QR+leHywsAk/jP2KVK3KBE= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745589955454420.4449439585901; Fri, 25 Apr 2025 07:05:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jfw-0004Ij-L4; Fri, 25 Apr 2025 10:05:08 -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 ) id 1u8HpT-0004Iv-Dp for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:06:52 -0400 Received: from mail-am7eur03on2110.outbound.protection.outlook.com ([40.107.105.110] helo=EUR03-AM7-obe.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 1u8HpR-00024k-2v for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:06:50 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM0PR09MB3713.eurprd09.prod.outlook.com (2603:10a6:208:180::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Fri, 25 Apr 2025 12:01:44 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BzNHCqWwWBS9H6tbLqim9gTlOyKn1xEshJy0TcKe8ZveaIZVhoipWL9y3hKwAHhLuEIgwt4GSTnm1VPm5bb517W2POC28keHIh0dsCn5iXnn7n23ZJWBNicCmJZ9z8E82pdmbr/KEN/0JdSsTOKi/mnFJf0RXkjiKcw541bB0HBSl8amYKfzmrCGepWRXHwmb6PHJg0H9VkbTFO1nf3tEjFsbEStseQg2UH2M0GnrATYYPieixHP2sBxqA5cL/buQB0aR4XlOnjlZq9ZV0/LxeWA9bd9PN2L3ylsSorWMhKyO8gj5yxsD0wIK987VbY1LkqbNGy3Nh1irPddWOd0og== 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=QiEsHc0Y2m1YaZy6JTgPAdtFMb2TN3clMrKrYfVh59A=; b=VffTJ07587NcOy5WgRawy+7mwR52HrWmlhNQ9bc4Zwuwq760HZdMD3eK1QwO1VbcoL9p7bxsKXuHagh+NOG5zMX3rR4AdLH1X4Wz6rzmk4mbDKN20nK8zKtjpEKv84PtWPZJCSYRSm6zYqyuY9MCzGE9BagPvTNB3A452j12h+fEIhzKXfdXkSDhZty6M6bsZ6EqB3ktCodB4PzUJGf6sE7hz0uFT8x5yWOvO+dzSdWg5tngvhNp+d3Qv+AXSJQI09PO2+hsaezq00kRY851jT7WPunsz3I5eQIrQSvo/VgrMPKNTL0qktB/XARJspps0TtJ2yGVAdNSI+zLWKs6UA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QiEsHc0Y2m1YaZy6JTgPAdtFMb2TN3clMrKrYfVh59A=; b=IiiO+CTnHFoZXyiNhRz+UsK+7b3AUbwUBzy845AC2/p6b7CObi744TD3V2XKSi8e1QZbB4QGRiaJ73nHAXFST55KECrBtrZ2pHYoJXf8eAd904+0gMTSNAJFcAgjozvGTR9vs1qKKEOtutN/E67AoXx0LFn8JLVajF6rudKL2GM6Vp0eOh8QnhDXRBBnO6ulYoxuKI6Oa8WemwcT4oSFO8sJLocCXslMn8c4B7Hrqwzmj1cmGYpZnnekWTuPiaw4oTb0ZTkNZuIBpcmyO518AXl5uyZ+gHED0PDgwddLkxARthvdyJ3NBRRt9i4I8J7/UagOyKJ5H6QJgEHdyP3AQw== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 3/9] target/riscv: Add MIPS P8700 CPU Thread-Topic: [PATCH 3/9] target/riscv: Add MIPS P8700 CPU Thread-Index: AQHbtdnQOqWbi6UnUU2c8zTRtEd17g== Date: Fri, 25 Apr 2025 12:01:44 +0000 Message-ID: <20250425115912.912889-4-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM0PR09MB3713:EE_ x-ms-office365-filtering-correlation-id: 5f452e43-912b-4dfe-eb65-08dd83f0f2e5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?VDkXOosXk0Pswx66LhJeilFLfFu2QdFp9NC5zHduv8DkZrxtKo3s1v22wl?= =?iso-8859-1?Q?RYoMhH/RCDvsO6L6GJ/8pKAAfed7BqejwX9CN5nQBYZqVwfvQBtjWCNPXQ?= =?iso-8859-1?Q?0ictjXICNDgssbgok/EvrM0QFvoD2fgl6WcUl2oyCZdI6hLrNLd0/WLQTD?= =?iso-8859-1?Q?kYjHyqTgldqCH0bTN2HZkkycd//fCZYEbIWxFsVnQiGwOMUi0htW4Dgh8C?= =?iso-8859-1?Q?Mx09QSG/7ckZ2Im4UnythxOv560p7Wuld69uxUNzCEi/I4Y171ZI9CbTPZ?= =?iso-8859-1?Q?q+qgvdATB0QHh/M0n8wGB6GNqKnxS6cDen+jJZX+Pqz5JsNG3tXJkZiYGq?= =?iso-8859-1?Q?gmh52PEZ4RekayJp5ZIHrxQC60NYdAd84avPb8HZxy0siGzb0AedvjS/M5?= =?iso-8859-1?Q?Pi3OzUMnW5Zs24eLqYskrgTtepmpTjP4IB94Hl9+Ycp6HNe2xGosxTeae5?= =?iso-8859-1?Q?pEaqnOcbrQlH02JFUrwxwVJLsYepzyGRzdNbUS/FtsihY0WzmYpCcyBQMS?= =?iso-8859-1?Q?wKfhGZoAzhOclSnzAfKlKPQMnichgOtKy8snJwZpZF4alMDvRvZLd2yI/d?= =?iso-8859-1?Q?h0j0YHZL9mi5BwltCm+IKlHyTZN+eZCQNOlCAQ+n+8ObWjaeLDLyeR9ZXu?= =?iso-8859-1?Q?LHtktQXBwloYJEWZG8EGWZQDLodjZnD1BnqtKTJnsSRtUKA4H5tYR0OXp2?= =?iso-8859-1?Q?GSccv1oBgxRu68e9u1HSipaemr3Bh2Ad4WQYRkxlSKK2WzBqGuA1zP/nzD?= =?iso-8859-1?Q?QCu/GEv1dWOTzrVHe6Y5jknX7L4EQJXXNN7ibfKf3k8TMCTqo4yr7HQ2vx?= =?iso-8859-1?Q?ZiC+RnlHY7GZAtcgLATQQ3otqnOPmn8fc0NvzdJQnn+mr6YjqutAd/mYvT?= =?iso-8859-1?Q?2OzW+i9MndWtnjgViu54nKCO+9r+S8+GtfDZj0Q+xWXkTxIsnqX3YbAZ/9?= =?iso-8859-1?Q?DPhr7uJVjKEgtJkaC+o4pgAp4x/Tb+6xcPYeGtchQmMZid0Z8pDjfYpsps?= =?iso-8859-1?Q?DKNjhmABm+JmO11VhbEgL4SONjMNfS7kJFV17/WWK89NvOvI1WO3h1mlk2?= =?iso-8859-1?Q?xleG1R5Jwf75pSZjyWoKm36j8qZj9ZGn8cj/XX5SVX0osiK/wsI7pZGswX?= =?iso-8859-1?Q?7PrqrM/+PX3kVSjqAefFFl2HeJQ2SMqr4xO+SKr4LY0674v2O9+kw5y8MK?= =?iso-8859-1?Q?5Z8np2eWVWKwoyzMywU/LzlyS3GZXOisfwdBW5HI/GwVeePP44r4V6LRji?= =?iso-8859-1?Q?N0CNDZBe9IJ31sSwZJaSJqqvC3bpYwvruzWRbqx+yXwWA3v0eZD8UyI1aZ?= =?iso-8859-1?Q?5lhZhWyxkTHNCvSY9IUVwlXh/S417Ad6d8XS0rGBuEOsGygPmI24+2sGUf?= =?iso-8859-1?Q?StIFZtofWPAQNM7BvL+IwqdoAt/uvG5abVQlYNY+WViAeQhrm+ZAGn6bFB?= =?iso-8859-1?Q?Ikd8z9PylK96V4Hlzt5l26gKQKBTUicdhxhqcaXO6tq2OF9+S4aUsnBn67?= =?iso-8859-1?Q?fCrG2F+seneTkhCmPa0ft2e0VLHme0MZzHt7G0L4AO99fPtBGfYEJ179JU?= =?iso-8859-1?Q?oQwBqOg=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?q7uoZR6Ezwt+JOMN+8HMkxGSeByKi/fvz2aVGDQgVjk/WxjuAiPsQiWznJ?= =?iso-8859-1?Q?1AiST5RXbjSYYEx33m1RRvg81XYhsitfZeAC/asg0hCdpp+orQzcSneit2?= =?iso-8859-1?Q?37JofmKAoDw6ucFfKu2gbqUQbbt+k2EhvpWNc0EGDwZz8ygbdGe7SzITdh?= =?iso-8859-1?Q?Y7l8g49XTTEXN+7CTocy3JIxLNPnYqdNgu7/1sFrW+6o4dStqptSg93x4d?= =?iso-8859-1?Q?ii/tqiq98LkmD/7tIMtrq9Q/QXx5ypsYsxxWEiCby2v/OW+TYKZ1OOTyRc?= =?iso-8859-1?Q?fT8n8jvPXS77jL/K3SsAwaGmwv6k3JEFhr6ohkgKaAdtukkzSbxrWkefjm?= =?iso-8859-1?Q?G9NUQYOtsok8Bt9+qTCi2AludBF3258XuXbqzuZxNXPSt8bWURZ3zhiCN3?= =?iso-8859-1?Q?aliP6Usqa/S18PdXVRqOFSClGoV3/hbM3bOhwwEUaeGT1Zj81SeXOtg1SU?= =?iso-8859-1?Q?LhR8xbamNWNJBSNyRqrBpIU43z5gPHwmty/6Bvs3gOErE/JWVjAZs0vKei?= =?iso-8859-1?Q?1AsQcf1Ld6F3h1t6FmSNOWtuD0j0xJWFvgRS4V5WDYYGp3KXT9Gll3wvhi?= =?iso-8859-1?Q?g3iCW7KLRMuNORT02h5CDnWjgC1DDIzBsXIJHErV0i7jgWE/glfxfDHWV5?= =?iso-8859-1?Q?dCLJQ5NR2F6SxDKUbCt5oXzKWN5hxu7o6FhkTLJRAPbHMC854UxKqLmk1Q?= =?iso-8859-1?Q?p6nuYRWB6UOn770vzWFeVGJrI9+knaqk4vCZlFQeS72oIKGquQmeJo+t9T?= =?iso-8859-1?Q?/xBhheB/YZTfMbuO1Aoispi1oQevQBp1d3FnRAD7W3rBfSC8zMxuZ5zCEF?= =?iso-8859-1?Q?vcoWmMz1Ks6/KCQAZh5VpqhTkCdXqPdSoJ2SQIwW5xYXldmnGehI1SyJNs?= =?iso-8859-1?Q?wx95Gpr1Y0x55YV2p81vlQ0n/PRBBvM+fKmBZZmAeux/vRyT7CD/KrOFm2?= =?iso-8859-1?Q?g8TQWrb8RRR7Clk+DmeaR24MdJRBhyMaK25p8eAQpqx7Aqedmwo4iCEilM?= =?iso-8859-1?Q?SSjbxK8CRm93EOOIdOMoOdxn8pexKjTF+Y99oV9RfuAcmonvrTrgBPemn/?= =?iso-8859-1?Q?sfSUNwfSZ7hesNc/PP1pdj+GvqopucdgwWHueFR5MO/wDaJS/dXE6LIas2?= =?iso-8859-1?Q?c2b2ddUftjToGZd8kUyDzTGJrH28N87H1Z1wS85URMRVzVnSLD+mWX4SZ8?= =?iso-8859-1?Q?yZOhb1LZuwe3W6jGYVmz2xVAh5colcEC9idPfqExiW8eD9C8KENE51XgDr?= =?iso-8859-1?Q?Ro120tHnR8vQ3B+dmgmfmJbTk4mDH/Fa6w+DdQJh7BjL7bNrqOj/fXoN+y?= =?iso-8859-1?Q?ytkKeWbJjVVzRYOJn0VVe93u3zrzM5O9cjvJCNdtU6WqPEJZ0ecmPtAgtM?= =?iso-8859-1?Q?zqAd90Ps0aLNKtsb3qQLskR6iXtUND3tpRpCO3FBK1zNU/hfjRK4X7EfRl?= =?iso-8859-1?Q?/f88viExHN+y1S8OOrAcJPqN9xoPPq7LuxLq5z5SS72KQAxMDABvunafmi?= =?iso-8859-1?Q?s5CS0EkiO/w/f6BYSoVZUinJ2EPduwNoZSbec40UBZz/9lGn+oZFYk//d9?= =?iso-8859-1?Q?CT7or0aAQieYoPp4LYTYH/+AZUN6ofRc1b3u/kjQ+yBbVElPsHD7XGKQxB?= =?iso-8859-1?Q?Ghtj2wcRfs5S7gDtLphmKJFwUkPkLMHfv6CkT8OmxIDuogqRR1AfACpdiS?= =?iso-8859-1?Q?omXX0pxRQnF4DZnfBf8=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f452e43-912b-4dfe-eb65-08dd83f0f2e5 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:44.4147 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2miDzpKcB6tQ8DedxJg65Kxfy7r/gCTFpsmL9hQAjLdI2gIWKJwbydqR6ggMcWpYlV4S7WlQTTWF101BDSCZLnByoYD5Wi4xux/uIpckxDw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3713 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=40.107.105.110; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR03-AM7-obe.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, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:57 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745589956012019000 Content-Type: text/plain; charset="utf-8" Introduce MIPS P8700 CPU and set reset vector to 0x1fc00000. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- target/riscv/cpu-qom.h | 1 + target/riscv/cpu.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/target/riscv/cpu-qom.h b/target/riscv/cpu-qom.h index 4cfdb74891..da2fb11d93 100644 --- a/target/riscv/cpu-qom.h +++ b/target/riscv/cpu-qom.h @@ -53,6 +53,7 @@ #define TYPE_RISCV_CPU_VEYRON_V1 RISCV_CPU_TYPE_NAME("veyron-v1") #define TYPE_RISCV_CPU_TT_ASCALON RISCV_CPU_TYPE_NAME("tt-ascalon") #define TYPE_RISCV_CPU_XIANGSHAN_NANHU RISCV_CPU_TYPE_NAME("xiangshan-nan= hu") +#define TYPE_RISCV_CPU_MIPS_P8700 RISCV_CPU_TYPE_NAME("mips-p8700") #define TYPE_RISCV_CPU_HOST RISCV_CPU_TYPE_NAME("host") =20 OBJECT_DECLARE_CPU_TYPE(RISCVCPU, RISCVCPUClass, RISCV_CPU) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 09ded6829a..029e2c7929 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -514,6 +514,34 @@ static void rv64_sifive_u_cpu_init(Object *obj) cpu->cfg.pmp =3D true; } =20 +static void set_resetvec(CPURISCVState *env, target_ulong resetvec) +{ +#ifndef CONFIG_USER_ONLY + env->resetvec =3D resetvec; +#endif +} + +static void rv64_mips_p8700_cpu_init(Object *obj) +{ + RISCVCPU *cpu =3D RISCV_CPU(obj); + CPURISCVState *env =3D &cpu->env; + riscv_cpu_set_misa_ext(env, RVI | RVM | RVA | RVF | RVD | RVC | RVS | = RVU); + set_resetvec(env, 0x1fc00000); + env->priv_ver =3D PRIV_VERSION_1_12_0; +#ifndef CONFIG_USER_ONLY + set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV48); +#endif + + /* inherited from parent obj via riscv_cpu_init() */ + cpu->cfg.ext_zifencei =3D true; + cpu->cfg.ext_zicsr =3D true; + cpu->cfg.mmu =3D true; + cpu->cfg.pmp =3D true; + cpu->cfg.ext_zba =3D true; + cpu->cfg.ext_zbb =3D true; + cpu->cfg.marchid =3D 0x8000000000000201; +} + static void rv64_sifive_e_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; @@ -3261,6 +3289,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_VEYRON_V1, MXL_RV64, rv64_veyron_v1= _cpu_init), DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_XIANGSHAN_NANHU, MXL_RV64, rv64_xiangshan_= nanhu_cpu_init), + DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_MIPS_P8700, MXL_RV64, rv64_mips_p870= 0_cpu_init), #ifdef CONFIG_TCG DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE128, MXL_RV128, rv128_base_cpu= _init), #endif /* CONFIG_TCG */ --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745590055; cv=pass; d=zohomail.com; s=zohoarc; b=Rhj8I46bwUCm8ccrLf3BrMzN2ASqRVs7bbXc2KqECoMsb++FkpgTYoC7skazS34pnPVlYo2lZH7pB9RanKz4ti+7NJGgD9ldSGrDJmjm6Cb8qs+uBLx+u9Cs6N5ElJgPEMGF8+AWAUfhaNrXZdnqlSg4/2iHPwqZCqYWLOApsvc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745590055; 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=2V4O4WN/pT8iiTow6Qns/QnNvSIk7Bhp3OjNIubybs0=; b=OwTqx6prl8VK29BQYuTLA4WVlV5/wVpdPoyf8CsKp+1a7rijP7QWvNHJ1J+q7EeVozUdj6klRO01D9ZwuINxUhhV3F36MMdog0o4JEf4PeGzLNZiBfC3G3xsnrSyMsbgtX7QHH/Uc141y/kvfivdlG+QdE/5VndxzS/pwiJz6s4= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745590055969289.7512688838873; Fri, 25 Apr 2025 07:07:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jfo-0004AL-G5; Fri, 25 Apr 2025 10:05:00 -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 ) id 1u8Hks-0001Yd-3j for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:08 -0400 Received: from mail-vi1eur05on20702.outbound.protection.outlook.com ([2a01:111:f403:2613::702] helo=EUR05-VI1-obe.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 1u8Hkk-0001Mx-7U for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:03 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM0PR09MB3713.eurprd09.prod.outlook.com (2603:10a6:208:180::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Fri, 25 Apr 2025 12:01:45 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p6XLPYqPSU7gX9ZtdbQDZuqEkcfv4dZ/KzfeT848+8aRGHdz5lGochquvBhm97d1UbezdySZHYQPNbQltm2lptM3BKWkN8x0TSuJAxNL95GkqK2PrpfIyB8EoX5vIDdZwVNLqN6d1fmGsNh+dMlo2ATbQjYjc+QJ0E6/Nc7JCtHXJecN//pzh5DitPPhp+j4XaKMOi6XvHA1bWcNFGhc890PJu51BW/MGWmyX0cxRNTLb+JF18IMfZpTb7rSWqy/21k8xGZ1JSdfaIWmFJoisC87kMlM8ZOL8t59+CQ3sByr6aCDigt5CEG2Yo9dLsaPC11HV2c1L+f40uUS+Klm7g== 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=2V4O4WN/pT8iiTow6Qns/QnNvSIk7Bhp3OjNIubybs0=; b=E0ocr5nn8NE5F1VyN8so8X5FkhyCfaap6c5OspP5fDkt/5YPQeQwzrL4Bb1byhSG34z8ycEj0Yy/50X++MgNBXUE/Iqz2hnRbds36C5BO9Qec2VK1tzkj6Nbesxi3AHcn/Tr/AfjMAvDonLaWpfISUuGgQqW0wZv7/t3zyWAQfYj7H05YUENNYxnHrxK0Ifzrd3MuN9OpdPVX9Fh027PoW7OQvbzl1oAtlOszU3sg0LbehSfls9S+mb9t5WsePyJar3surxr1U3rKZMPreJP/YyrntZNuri+OFqoA6z2eWzRKrMGjGS843opz5Shz4RWjogWGXucyPjM1TmFTSf5ow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2V4O4WN/pT8iiTow6Qns/QnNvSIk7Bhp3OjNIubybs0=; b=UIzXWVaV4D+k6F5GmmzAHEAoQ6Y1Og0IqOfBHBUk9rIEjct2wvc6itVofLnTl/1CQGefzwpwYjTQ95/4Rvf+A1oHdx8XbMOl22pg7ivkTyW9Zd2lJnEl13kBb6z96RnUgmI1BCTivjL4xIW6LbHXslvGq+x06v/VF+ijjfomksLFPKvBtM2y9BEs6lNeaCcCHaQ8Lj8NNQWT/mVZuIx15tcFOpb4+I3gXQCNEA5wKoPy/qZZOCQFM+/vCaD0voOHN4nFQEUrZDP42PHT5PjZpRArasK2sfbej2Dd8ReiPzV1isVHSOgFbLYCsnoMN4DOinFEt8Jy83azmyv0556IuQ== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 4/9] target/riscv: Add MIPS P8700 CSRs Thread-Topic: [PATCH 4/9] target/riscv: Add MIPS P8700 CSRs Thread-Index: AQHbtdnQQWvOtPWWmUG80QbPYVn3xQ== Date: Fri, 25 Apr 2025 12:01:44 +0000 Message-ID: <20250425115912.912889-5-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM0PR09MB3713:EE_ x-ms-office365-filtering-correlation-id: 69f1847a-9087-40fb-e36d-08dd83f0f30c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?BLqXvNaNdlbdZtmsk1U8O/ai+zkS+xBhxEyvhzKoz743sFcxs0O5crJsE9?= =?iso-8859-1?Q?H+33/aDC71uiKP8XlasKSihjAXlnEH/OI5R3quDPI80no150u5BdCd/s81?= =?iso-8859-1?Q?R8XfGNeJORZmuVVuYFpt/w7XIH7XPZk5fjDZJIbgE0XsZ1nZh5LQX360/o?= =?iso-8859-1?Q?3AZiHy2x1shFIE/K3mPZDacGMMTsDDnbMepnU5VbuUElB1Yxx6JB2Qh+zx?= =?iso-8859-1?Q?XUg4255c9dJTD069SdUqDFlKYnvC5p7NiyiRMNAm+E5mN9mycrlQhYGMB4?= =?iso-8859-1?Q?dlqCikbZd/EuTG3qnjOYvRCYOVZhS8deXk6loRdila/abJwR+cZdGWeA55?= =?iso-8859-1?Q?Gj8yKlM9zaDuR5/GczOwK1foJOzYzRs6DMXC9XKWnQRXb7sldXy9Bh8Uls?= =?iso-8859-1?Q?5HR1W79fP66EcEpK6VSKbTZvS+9jO9AkgPFib/k4zDHOYgcNrwwKgJpeX2?= =?iso-8859-1?Q?QIneQ6Q39ifxzUIFrU5XHnXtBc5qEZFj462Dr6OgE8wjRlvCfxmLmWCnXn?= =?iso-8859-1?Q?45F1l1J2OyDz5Q4ux/jDn/FpAJbfnHagTY6VZQTtgSLqYZznTqqsWcEdaf?= =?iso-8859-1?Q?Yze3rI+Q2QeN/8RtHlnc+pFWaQUo0y0OJM7YsWrkzpcj9okvX8+IJ+yZAK?= =?iso-8859-1?Q?Aon40kGpVv2WlZfuRAo4jb8sXYOEDzuM4SY7nn77I++b+ZKtOG3j0nhLl2?= =?iso-8859-1?Q?lBpU6uJALtD09FG50PTI7Ad6oFXoYOkq3lpoDyTUd0aE0dgFynEmESJEBt?= =?iso-8859-1?Q?3LM0mfayVU20QMc1O0LdKew8IKYeddd3yfgt2i/B1PS7tI4kVHOWRA07UK?= =?iso-8859-1?Q?tjNpQMlYDpt22ZWCTWTSu1Up3ljvGOz2q7mLQHv02Z5JArZbJU6EFmrznF?= =?iso-8859-1?Q?vqDJPxU/nZrCOhA2/3BQH0k5u1w0hiYpclEPH+nw3wsSSmZUN7aldr6lRb?= =?iso-8859-1?Q?mxiNWjaog0Gdrs5TN0TFZFmhkcf/6eBiJ8Jb493KT03uqcVSPmQvErWaNc?= =?iso-8859-1?Q?qzPYWLHw0pha8KTI95Za+xlFPgNQv0faoCva1iKByUEST4Ze/itkG/Y+o/?= =?iso-8859-1?Q?XpHcgpN0aGB3OIegNBO+TVfwMKRdz2nx9ieBgJkcTZalI+2UYx/eWS1quM?= =?iso-8859-1?Q?LawagNZxQpLOBDCTkXXmhmueX2cQg8i8Ze60clT8A8vVYTZQ1hn2nBxCry?= =?iso-8859-1?Q?ohPs5nQFWZulY+d+NoCRL4REb3qsh7FOIm3lBLHB0mu9R38/EfpppZHeZE?= =?iso-8859-1?Q?/LNVovM1tgwEz4/NZCnauvlmDfk/1akZ3pPY2qa2zadOm7DE6V13e+MQDk?= =?iso-8859-1?Q?5PDMesVlmj8Dkr9x9N7mEVCJkXB236DlHzzRH8NNz1O5jQsKbjqlC8ortj?= =?iso-8859-1?Q?7H4YI9V8m/IVJiyF+R8fg8sfqnvVM+cwR+DhfPVIg9fameviDR72TN36TM?= =?iso-8859-1?Q?q1h2xjo26Ub0UNjOnHeB2P50CKd+t1OCLEcFi9wqaDYyD1YIy7STb2G/aa?= =?iso-8859-1?Q?poatySCw8cKRtvbIHGsWE+l/pu2ZTkDtgHM9TGY694592M7RRrSxH7xnjF?= =?iso-8859-1?Q?mSdV3zk=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?0qdrSlD4qu1VcU95NYI6bWZXYmk2eTuHFpCG3Ewj06SoMJuLk3GQGhy1kj?= =?iso-8859-1?Q?9Nrxh08JAoNIwrMb2yha74mnLD71wQfbTY5LwH7AZyfZLDaJw2g/03KX6e?= =?iso-8859-1?Q?AYt6a8n59EciFs8P6seuW6+jPyQDz3HWzN5zbFD42Ms698V0lq/oT5bBmN?= =?iso-8859-1?Q?dwDFwFjzMs6Y5Eg90NZcKePaFNiySmsx4pvUqPm4/eLe5PQy5yXTqC9I/m?= =?iso-8859-1?Q?JR3D1IRVcjYmddodnK4vCkKJphNi41JV3paaFrudKcZIsHjTIyys0WV30F?= =?iso-8859-1?Q?E2naYBh+b02BcCs7TypNK261tq0XwJmzPNgu4vP00yxJ1984ue6hkA50gp?= =?iso-8859-1?Q?HKabZdcuoJbbVW8LwkhjiusZIULGOJ/uYYky/HDc0hYEjoB93qRp5Z4ErX?= =?iso-8859-1?Q?E1En0xUb6pLiuYioiXdiNal/aP4Fxfkpecw4cUNhv9rL1bC7ki2GWZRk6m?= =?iso-8859-1?Q?SV6kQAUHrtn/KjbIyngmVFo6xPqP35k8NqWCevI/CWGx4FYMhn77q2wU0I?= =?iso-8859-1?Q?sJi38p2qVCX5LpbnrS9R09tOTKCwWP+gBxP/GFWB+2jmMmBkI4XXvl3Mlh?= =?iso-8859-1?Q?kxXaZ9j4eCHNWsNlhGLvfaC6r3xhT7AN6h3kbN00HylztlcU/gNQ0i8qQX?= =?iso-8859-1?Q?ThR4IpiyCP45FNu74RkZs4hayQU/vkGsKybAVKoipg48s3lcSK1o240PNT?= =?iso-8859-1?Q?iNi0jS/ZA7w0wHqDjsN8+AHYlCmZrJj18YZbZqZN4BSKw5IY/vrhG4ZV/u?= =?iso-8859-1?Q?V9H/2DzD5LFBsiX7YQMd73dNGd/BbtQpY7U3T4T1WFcjqK89KsGXdROls2?= =?iso-8859-1?Q?W7fOydESn0mE+IuqbKQxr80rw029tL3nhERaYJ98U1VKsTzEOPgE3cAIeg?= =?iso-8859-1?Q?2g0eFFfi84jiPfXSyt6ODODQuiEh+QOYhHIWQGtSdTR+4KjvvCiWnKEB/Y?= =?iso-8859-1?Q?ihYl5m3BSTW58zqZQtB6UXbizr1iNEEpEUmCwxs9zNID9he/RjZ9JKOKdy?= =?iso-8859-1?Q?KR7DUhuTkSuDS1VNv5y+M+m6Ep3gTNk6gbANjXyEK3tUoGuW8WmS2RQKE1?= =?iso-8859-1?Q?tI4lkBL9EXlO8ofiohcFPFK0Z5eNJ3EFvw7ZI3EHAgnSysJxx6RB7P4v2J?= =?iso-8859-1?Q?jFRQrnyv2RoKfTm3yrdkKJxlLeADnNZD5sDM1xhY03oqFlyMU6D+uy/7Jq?= =?iso-8859-1?Q?sQUZW0tejGxlEtXHrIOfXrdBemZ+D8GtdjYb+mr1gCsGYwHZk0JUdwqU8K?= =?iso-8859-1?Q?7WJyJHrduCSrXn8jgSYX2O44Za6gFQ4AN7Ig3zT6HoL8/AeCVhuLBd74NT?= =?iso-8859-1?Q?NhdwE1Kb8QNsGRKJYB8Qy07nZI9FXJORMpOaiiFcUFGIUX/YaMkl/7xI1i?= =?iso-8859-1?Q?L8cNSaQu3etfcOzzbx1Wl90JikoZrsOAdcDvQlsZw+yEtkOGaditvnYgvC?= =?iso-8859-1?Q?nuc/3Gb+d5Ih46oCxePFHCQ/DbWMQUIVbPINNXGSS4wwSdNayi2d4u2i4f?= =?iso-8859-1?Q?etcfCpvX7Fkg64hqNd1ruJO2lRUpc5PChEgx+uyWj+cJuudV02wabTBuT4?= =?iso-8859-1?Q?vywlovzA9ds4fvIXVSWpv76ICzVIPBy9MfI/fkSqidTSz8ydZ4pYpHEv4u?= =?iso-8859-1?Q?qk6MYWSuwINhIRWapE2cGmWvyseX6DUaGsdZ8C19ffDeF5UG2SMsDJwu0P?= =?iso-8859-1?Q?KGuuBQoNvsDlLbfrJcU=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69f1847a-9087-40fb-e36d-08dd83f0f30c X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:44.7780 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: P5VTgLiyfc7iqOl+loMK28svXqNkJQHbJyfd77LLNfy8kFpRlAuwqX0+1tuughLQaa2kdSHYx/2gBPb+3u3B7ZRMvW4i+BcQMEhC3qTJx+Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3713 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2613::702; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR05-VI1-obe.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745590056905019000 Content-Type: text/plain; charset="utf-8" Define MIPS CSRs used for P8700 CPU. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- target/riscv/cpu.c | 1 + target/riscv/cpu.h | 7 ++ target/riscv/meson.build | 1 + target/riscv/mips_csr.c | 226 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 235 insertions(+) create mode 100644 target/riscv/mips_csr.c diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 029e2c7929..d22c1baf09 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -530,6 +530,7 @@ static void rv64_mips_p8700_cpu_init(Object *obj) env->priv_ver =3D PRIV_VERSION_1_12_0; #ifndef CONFIG_USER_ONLY set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV48); + mips_register_custom_csrs(cpu); #endif =20 /* inherited from parent obj via riscv_cpu_init() */ diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 6d0acbce80..f403a743b2 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -500,6 +500,10 @@ struct CPUArchState { target_ulong rnmip; uint64_t rnmi_irqvec; uint64_t rnmi_excpvec; + + uint64_t mipstvec; /* MIPS tvec register */ + uint64_t mipsconfig[12]; /* MIPS config register */ + uint64_t mipspmacfg[15]; /* MIPS pmacfg register */ }; =20 /* @@ -944,5 +948,8 @@ const char *satp_mode_str(uint8_t satp_mode, bool is_32= _bit); /* Implemented in th_csr.c */ void th_register_custom_csrs(RISCVCPU *cpu); =20 +/* Implemented in mips_csr.c */ +void mips_register_custom_csrs(RISCVCPU *cpu); + const char *priv_spec_to_str(int priv_version); #endif /* RISCV_CPU_H */ diff --git a/target/riscv/meson.build b/target/riscv/meson.build index a4bd61e52a..fbb6c8fb45 100644 --- a/target/riscv/meson.build +++ b/target/riscv/meson.build @@ -32,6 +32,7 @@ riscv_system_ss.add(files( 'debug.c', 'monitor.c', 'machine.c', + 'mips_csr.c', 'pmu.c', 'th_csr.c', 'time_helper.c', diff --git a/target/riscv/mips_csr.c b/target/riscv/mips_csr.c new file mode 100644 index 0000000000..b655798cb4 --- /dev/null +++ b/target/riscv/mips_csr.c @@ -0,0 +1,226 @@ +/* + * MIPS-specific CSRs. + * + * Copyright (c) 2025 MIPS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License f= or + * more details. + * + * You should have received a copy of the GNU General Public License along= with + * this program. If not, see . + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "cpu_vendorid.h" + +/* MIPS CSR */ +#define CSR_MIPSTVEC 0x7c0 +#define CSR_MIPSCONFIG0 0x7d0 +#define CSR_MIPSCONFIG1 0x7d1 +#define CSR_MIPSCONFIG2 0x7d2 +#define CSR_MIPSCONFIG3 0x7d3 +#define CSR_MIPSCONFIG4 0x7d4 +#define CSR_MIPSCONFIG5 0x7d5 +#define CSR_MIPSCONFIG6 0x7d6 +#define CSR_MIPSCONFIG7 0x7d7 +#define CSR_MIPSCONFIG8 0x7d8 +#define CSR_MIPSCONFIG9 0x7d9 +#define CSR_MIPSCONFIG10 0x7da +#define CSR_MIPSCONFIG11 0x7db +#define CSR_MIPSPMACFG0 0x7e0 +#define CSR_MIPSPMACFG1 0x7e1 +#define CSR_MIPSPMACFG2 0x7e2 +#define CSR_MIPSPMACFG3 0x7e3 +#define CSR_MIPSPMACFG4 0x7e4 +#define CSR_MIPSPMACFG5 0x7e5 +#define CSR_MIPSPMACFG6 0x7e6 +#define CSR_MIPSPMACFG7 0x7e7 +#define CSR_MIPSPMACFG8 0x7e8 +#define CSR_MIPSPMACFG9 0x7e9 +#define CSR_MIPSPMACFG10 0x7ea +#define CSR_MIPSPMACFG11 0x7eb +#define CSR_MIPSPMACFG12 0x7ec +#define CSR_MIPSPMACFG13 0x7ed +#define CSR_MIPSPMACFG14 0x7ee +#define CSR_MIPSPMACFG15 0x7ef + +static RISCVException any(CPURISCVState *env, int csrno) +{ + return RISCV_EXCP_NONE; +} + +static int read_mipstvec(CPURISCVState *env, int csrno, target_ulong *val) +{ + *val =3D env->mipstvec; + return RISCV_EXCP_NONE; +} + +static int write_mipstvec(CPURISCVState *env, int csrno, target_ulong val) +{ + env->mipstvec =3D val; + return RISCV_EXCP_NONE; +} + +static int read_mipsconfig(CPURISCVState *env, int csrno, target_ulong *va= l) +{ + *val =3D env->mipsconfig[csrno - CSR_MIPSCONFIG0]; + return RISCV_EXCP_NONE; +} + +static int write_mipsconfig(CPURISCVState *env, int csrno, target_ulong va= l) +{ + env->mipsconfig[csrno - CSR_MIPSCONFIG0] =3D val; + return RISCV_EXCP_NONE; +} + +static int read_mipspmacfg(CPURISCVState *env, int csrno, target_ulong *va= l) +{ + *val =3D env->mipspmacfg[csrno - CSR_MIPSPMACFG0]; + return RISCV_EXCP_NONE; +} + +static int write_mipspmacfg(CPURISCVState *env, int csrno, target_ulong va= l) +{ + env->mipspmacfg[csrno - CSR_MIPSPMACFG0] =3D val; + return RISCV_EXCP_NONE; +} + +typedef struct { + int csrno; + riscv_csr_operations csr_ops; +} riscv_csr; + +static riscv_csr mips_csr_list[] =3D { + { + .csrno =3D CSR_MIPSTVEC, + .csr_ops =3D { "mipstvec", any, read_mipstvec, write_mipstvec } + }, + { + .csrno =3D CSR_MIPSCONFIG0, + .csr_ops =3D { "mipsconfig0", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG1, + .csr_ops =3D { "mipsconfig1", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG2, + .csr_ops =3D { "mipsconfig2", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG3, + .csr_ops =3D { "mipsconfig3", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG4, + .csr_ops =3D { "mipsconfig4", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG5, + .csr_ops =3D { "mipsconfig5", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG6, + .csr_ops =3D { "mipsconfig6", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG7, + .csr_ops =3D { "mipsconfig7", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG8, + .csr_ops =3D { "mipsconfig8", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG9, + .csr_ops =3D { "mipsconfig9", any, read_mipsconfig, write_mipsconf= ig } + }, + { + .csrno =3D CSR_MIPSCONFIG10, + .csr_ops =3D { "mipsconfig10", any, read_mipsconfig, write_mipscon= fig } + }, + { + .csrno =3D CSR_MIPSCONFIG11, + .csr_ops =3D { "mipsconfig11", any, read_mipsconfig, write_mipscon= fig } + }, + { + .csrno =3D CSR_MIPSPMACFG0, + .csr_ops =3D { "mipspmacfg0", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG1, + .csr_ops =3D { "mipspmacfg1", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG2, + .csr_ops =3D { "mipspmacfg2", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG3, + .csr_ops =3D { "mipspmacfg3", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG4, + .csr_ops =3D { "mipspmacfg4", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG5, + .csr_ops =3D { "mipspmacfg5", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG6, + .csr_ops =3D { "mipspmacfg6", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG7, + .csr_ops =3D { "mipspmacfg7", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG8, + .csr_ops =3D { "mipspmacfg8", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG9, + .csr_ops =3D { "mipspmacfg9", any, read_mipspmacfg, write_mipspmac= fg } + }, + { + .csrno =3D CSR_MIPSPMACFG10, + .csr_ops =3D { "mipspmacfg10", any, read_mipspmacfg, write_mipspma= cfg } + }, + { + .csrno =3D CSR_MIPSPMACFG11, + .csr_ops =3D { "mipspmacfg11", any, read_mipspmacfg, write_mipspma= cfg } + }, + { + .csrno =3D CSR_MIPSPMACFG12, + .csr_ops =3D { "mipspmacfg12", any, read_mipspmacfg, write_mipspma= cfg } + }, + { + .csrno =3D CSR_MIPSPMACFG13, + .csr_ops =3D { "mipspmacfg13", any, read_mipspmacfg, write_mipspma= cfg } + }, + { + .csrno =3D CSR_MIPSPMACFG14, + .csr_ops =3D { "mipspmacfg14", any, read_mipspmacfg, write_mipspma= cfg } + }, + { + .csrno =3D CSR_MIPSPMACFG15, + .csr_ops =3D { "mipspmacfg15", any, read_mipspmacfg, write_mipspma= cfg } + }, +}; + +void mips_register_custom_csrs(RISCVCPU *cpu) +{ + for (size_t i =3D 0; i < ARRAY_SIZE(mips_csr_list); i++) { + int csrno =3D mips_csr_list[i].csrno; + riscv_csr_operations *csr_ops =3D &mips_csr_list[i].csr_ops; + riscv_set_csr_ops(csrno, csr_ops); + } +} --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745590124; cv=pass; d=zohomail.com; s=zohoarc; b=Qy1dfPbCgMyb2kEQ8ugFJVuEuiYjWzp/43msur3H+wbnOI2Fjp/E+YNLt13jWWNJ+NVZvHhoNhrCab9er7Py21ajO3ZLw/cohjRnoZeyDjIfPhtPbi6N82wE7xJRC3H50JZwWhnZhqFWwnfKg+GVrMn3osV0V3aPnAm5PCCYcoE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745590124; 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=DDeZFIwR8xukKZRCACKs0kzuEFtjltylzaCo5Ohw010=; b=OW2HYFGSxssg2cb3Rt46qggAmt/tTPRSx7ifjpwTvtCrn0yaX8vcA0Fktx9PEYUVBSustD4IkxLk+wPildD7HMnfn8zc13U9UxXDvmjp1yxhHk6C2hT9F3f3hV+wqAnWQldyXO99MlcEH3bm98UtF/xGzFP73XF638DPuqcCyTw= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 174559012430837.04271762380495; Fri, 25 Apr 2025 07:08:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jft-0004Dr-0M; Fri, 25 Apr 2025 10:05:05 -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 ) id 1u8Hkx-0001a2-SS for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:11 -0400 Received: from mail-vi1eur05on20702.outbound.protection.outlook.com ([2a01:111:f403:2613::702] helo=EUR05-VI1-obe.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 1u8Hks-0001Mx-To for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:11 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM0PR09MB3713.eurprd09.prod.outlook.com (2603:10a6:208:180::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Fri, 25 Apr 2025 12:01:45 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=h8mOovwbzXYpL/dADdVgzpdTeGHoFTk9iTtJEOkx9KJYk69YNnkpVkVzSrAt0gZfIa+AQoMP6as7MxEpSav1n7AeulFVlWQWBU9wClFt5QFBv9pUV2V2CbqyfJtGBcip2yyEkTVp69LrRkuxs11TxHJVoHOvvJzVWSIAzQyk+60vvoyu5q6hSu0tOZzLuqh+pPSFXcFbDqB5g88yegRDINsLCGQEoBAxLAHyl7fNCQPVllG7yfV8Q3AhC1VuJD8AAah8+Pkp6ppIIFv7RpqGfjVCewxz+uwP9dImWVskoQMA2xeoNKAo6R79fRt0EqpWoNbBr7yaoubtzwF8WZEFUA== 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=DDeZFIwR8xukKZRCACKs0kzuEFtjltylzaCo5Ohw010=; b=hlOHBAM0GPqGW+UOhczRBJPpCxn3gBYdS/metH7lS2LzBXAkpY8mA28K/DgUfXX6Di7bfzRMr9jbYZ+JW2i7feGWKvgLZj3h78aSQrq64xw3hb68TEzLLayvjCJUnTRzQTKisM4ruDAWiTIf+frNCV1mMShNn3OWD/DICKmUV+BvLSpNfhRukEEqvehQ6S8yGOj1ozCp45btPdzcaW5E3sEXYXlnmDWHCicPMgXHa6JlVDEQIQpDuXYef/n6x3keZs6IWttPEunkW8mmC/Qxmzm+fE0jNvorBwzBFh8o9fwe+e2SB1llE1xKfPycamnGLxo8p7Z2TMnbJ2rOs9Cczw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DDeZFIwR8xukKZRCACKs0kzuEFtjltylzaCo5Ohw010=; b=JYIFlnzay8A0/kP5nLER4YqOjH/pPBK/BPQZ6RnXApLM5y247h8gXanEhMzi25JXdKAXIwouo68lqKNVWYxCrFCHz6PefrROgY1KBC9bXhKt74x4bca92gt5y2uOf0fzprdvIGWSl+wY+9N3VmAajxZPBKuCO01/w3nmFKqp9w+VYw6rDp4qxE0Aqc0RIERir2gQjrFwZB+yNWcKR1e5WvFRhTClslvscmIh4KgtU7+kkladU3/k5H0rD81ckoxyO9+oEdtlz+0WOileTpHwwYTPX9IgcgmvqEvyuLyQXcOYML49rcwbJfcWvd3bjjLutneBtSKpm7O2wKE1nQ5eqg== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 5/9] target/riscv: Add mips.ccmov instruction Thread-Topic: [PATCH 5/9] target/riscv: Add mips.ccmov instruction Thread-Index: AQHbtdnQufFP2rHMS0iUoaYL1e7RkA== Date: Fri, 25 Apr 2025 12:01:45 +0000 Message-ID: <20250425115912.912889-6-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM0PR09MB3713:EE_ x-ms-office365-filtering-correlation-id: 0db595ef-01ec-4037-54e6-08dd83f0f356 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?2aP1Cmjo7Y388NRkQqejD/D0bQ7texOlblKrqOooizSwxJHESgICbb3Pzs?= =?iso-8859-1?Q?c9nZQZ3c74wBMnazdnb3TAkTEU2Z1+KzBtKwFYsWDRBhPaYdGFFgu/OC/i?= =?iso-8859-1?Q?Znx7dkxfQs5Pn7JdInsbQ17JlSKoXaJA+KaalsleigFiMUvHZ+1TVwHi2/?= =?iso-8859-1?Q?lMI9MXlM8/HqbMVDNQcXnnlNKRbv3lY+TH+JkjBqrWsQqzhMwP/aYELUCc?= =?iso-8859-1?Q?oLxElwF1GNU+RaQ6+oDQfYXiBXCTpGH62ejR0H7yewizw6S636Burb8fJj?= =?iso-8859-1?Q?V2a3zLfveCootdRwPx8VwDQRlqpCo4w1yNMfZEcUvOuLZv6tP24XFH9Cyb?= =?iso-8859-1?Q?60XGZeZI5lVqCXo4vv8vl+RQQVVQE3gg1F/znP9mE6gtVAfX7HNdQtROXE?= =?iso-8859-1?Q?IoAUpw3yTp8BrZdJf2LnNUSAokrJfhcW7dfkl3+THlhLyIhvRh8ERYijuj?= =?iso-8859-1?Q?FwhW6efWRUSjLW7csnN2WLSCjpwtWooSHlYGVZBrvlWvXun8/RUHWu4jbj?= =?iso-8859-1?Q?yfZFvJMeITpOjLXGaBi6V+L3OTw5is9ALnJSSP8uINFIUkSvLNB/88tbsP?= =?iso-8859-1?Q?XL6/NPJ7seKmyroUdzyXtcGWkpHmC/pEblQSzO1p2PdM46zl4hqGKxAAx+?= =?iso-8859-1?Q?GAT7ufsLXRwe02KcTLdiDqqe3sw5o1njx4fwFWQGJjs8PvcH0/YAE08jhf?= =?iso-8859-1?Q?e5e6/ma7JTzhFviqe5sCOoOZ1K3egXZSgXeBnis6EQR/viOL+y+X7bdTOr?= =?iso-8859-1?Q?vmVYCU9LUJJiBH4ncqMcUP1GlarJUwovPH74lNF+a7Hzo+ErkrcahTNxqt?= =?iso-8859-1?Q?aea6pJGerxqC5c+jxlSy+YG0KmP1htAmdpLEk/Joch9sWb72Hv+wd2rgWO?= =?iso-8859-1?Q?Ml4YhqPhMzByImmdrIJ1BYOje8oE0g2GhtR//1aN+bs7fazk4Os3hPMFQx?= =?iso-8859-1?Q?IxSPAXm93oW8QpRB8gvduP1qztbCwRDHw5HwJCD8wTtfunhVJsxCFLU40q?= =?iso-8859-1?Q?v3082GPUouKimHCQ3BZgCQLwnSNWCWla+wH+D7z4DUZsV+DzN5KfgKUrY/?= =?iso-8859-1?Q?3WCItqs/X5nuu9l/UzOE5QgLFOswRryOHxjQIzusbXXreqA4jN2EYY2kUb?= =?iso-8859-1?Q?s+kK2eN60EbqTecXar47K1nPmN84NZr5GHZuX8HmZKyJjX9449xYcdD0Jz?= =?iso-8859-1?Q?mjq6SsTmqR0TEUSPYEv4+PkJju61FmQOi7r1pkECXCqxmPZ4TdchR+gar1?= =?iso-8859-1?Q?wFqAM7PikW3hIgv/PnWGrH25hbyRfkStWEsbbWedPvmFLiVYlzNLo8HSxk?= =?iso-8859-1?Q?6B0TbbfNfVPc08AlYDV6/ve4gNxY9erwnyYvzoXpjQ1X0ZDMyVyy39A6yq?= =?iso-8859-1?Q?yby0xftnME5gkr+9AKQD+PTe1k7/yLsmSEtido+Ep0dbUkGRI6AlclWy3O?= =?iso-8859-1?Q?JVdWKL4rFjycQK8TP2SMnrrgu20MbKZ8U3bRNH7yYbOjY8NjlqtWCMTboW?= =?iso-8859-1?Q?0VZOctE95EPahLiifqP9PI7duMEoMog52KpdP4sEpKy1kePpEL6iFtfljb?= =?iso-8859-1?Q?JBzhp7Y=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?U9WjmK6+2tYeY2bNz9KS0CK+OgXKUJIINXcVS9jPAFtJ3Pw2ktHcd6tT7+?= =?iso-8859-1?Q?2wbLX6AhMIvQNKtpSBpCynMaGznuLDUv3CdfYx0luui6CabMCEdfmddIMU?= =?iso-8859-1?Q?352keP7j2w2uuPkNkWgQd283M+pQC/dhTzlDoRlaO3/yzr0CaIZfJxwaxD?= =?iso-8859-1?Q?BuAHUuHO5XC+suWYmGNc8Lr7dAEzS+RdXWTmvh/1iLyIgjXLe9jYn0JxQ2?= =?iso-8859-1?Q?vw5Ztm4l2WMlI7qHlu86WurPCYnUIwuy85FpsnQ+Mp0hV16ourB+vw4wUT?= =?iso-8859-1?Q?+eD6pnq4HY9lSalYZrlSsZcn2mRBKulKnrvOWdb0CghvQWAKW4Q0Bx6yYk?= =?iso-8859-1?Q?IRPig/EminFT46kueb2avcI4fM27C8C7x4J6Ifiel+0YRREkArbdiLwqs6?= =?iso-8859-1?Q?VHhfFwCHTpfMk2hyAXzpcLkcw60FCN9W9iuPORlxIi0Oq1SVyWJPWo2ptX?= =?iso-8859-1?Q?iEwpKdTWJxHOV1xdh4+SNesQU9Bd6VFRBxUrl5XDdOqov5F3gxqR0Z1HPg?= =?iso-8859-1?Q?Ez66NKXHlkSEKj2D1/wBE3XNhDovj2C6QZTPcKpqHxuQOBhYYTLlVKjUvF?= =?iso-8859-1?Q?QSAoHZc/qeV97B13PoYU+2MRVOIWNFJz3KyYbgGcA6CMJN8zMLCq/rHPWJ?= =?iso-8859-1?Q?5vCtx7Zextx/y5OzI6QMjNDlXiOCqPMu1Pi3E/KC4HtQsBH05fs3wPHuEQ?= =?iso-8859-1?Q?Pf4lSb4Z+dQyZ6toe5mPsGGqbgO3qKOyaYHVY12egNmgxOlvI7/LWAzB+J?= =?iso-8859-1?Q?BEeLfABLCbJN5X5YnH8bDtvauoMT7D04/YHC/kBSjmnSTWx0JwGSQa3YrO?= =?iso-8859-1?Q?muGeQAb0Bu02HWNODrVrKyc9SVF3VRtBnAAGipsw+xVMjMd9tofZn1/ELz?= =?iso-8859-1?Q?q5JRYShqr5xFU42vK2oWw5htPR4YV9xzFqwWRg8aVVp4WFO4Sp9hkWGKKx?= =?iso-8859-1?Q?hwI/jOkGnK/yB1iKJ5FuTwAOdR2z8kD0IGyZwYb7hh0205hfF/tsOzxW0C?= =?iso-8859-1?Q?H+uRRsgR/B9RPyo2SHttXuA6z/AMeZx41RXjVl9FtPTLsrNfKgK7llQSZ1?= =?iso-8859-1?Q?qwGmOszPte/dfa8J8lQEKsfbZfUlqb21NzwSoamTPF1QVzvJEeerzeVYNN?= =?iso-8859-1?Q?14gMcLNELFebTwQLi+tLbJ1kL8xgNf1TOptQE19+I+4FMJhF1ybU6RQbfZ?= =?iso-8859-1?Q?wusxevVM3wiPPv0gZomg0bLObfzWwjr+R3TSxQEliabbs4Tn4ON7kFH84C?= =?iso-8859-1?Q?wTDQm7iSjLyhEhmupNBPmrcXSwL8lL4G475FGJpYVqYS3D2F3qC1bS1HiX?= =?iso-8859-1?Q?sjA/Ute9Knq3LDv68+ikkbLwRl3xu3tzphpDSBN0UeoJC3jiwKAYbGXU8a?= =?iso-8859-1?Q?OVJmKoUdWGoknTbU4uOc1rH/PydXPwutehk6ROpNWnLHmB6JC1xFXJdPIM?= =?iso-8859-1?Q?IfyWv2dQ9qRQpD1WyCyaLqLy5gyKMuESFEaokSJxkRUWq2RCtzlDvgaJmc?= =?iso-8859-1?Q?5OKTpxZxiLvFri/a7setE2CuJo8zQ6iEARXjfTCc+AtjBk+x99VUk6uJuP?= =?iso-8859-1?Q?ham3DA5Ol5LtK68icWWlK5FQRRRNzliO4yGbe0eBdJ4+MEWLh0EFGSEcu3?= =?iso-8859-1?Q?PCv8eIekfKZgadhmxLWcvFGCAnqzS/ZLkAx82vhVPv6kR3GGSNRS9u6sSc?= =?iso-8859-1?Q?NUTdyth998uBZJFWD/o=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0db595ef-01ec-4037-54e6-08dd83f0f356 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:45.1030 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: nmljnvzE/5dDi0oduMbnKS+cGisIwWjzpQeULjnFE4WP74JxzUFohiUUxP423gqTp/SIexUDkxkrViqC9qzMbBtVo0rKTyPrWAoXJWfFeFw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3713 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2613::702; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR05-VI1-obe.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745590126214019100 Content-Type: text/plain; charset="utf-8" Add mips.ccmov defined by Xmipscmov. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- target/riscv/cpu.c | 3 ++ target/riscv/cpu_cfg.h | 6 ++++ target/riscv/insn_trans/trans_xmips.c.inc | 38 +++++++++++++++++++++++ target/riscv/meson.build | 1 + target/riscv/translate.c | 3 ++ target/riscv/xmips.decode | 23 ++++++++++++++ 6 files changed, 74 insertions(+) create mode 100644 target/riscv/insn_trans/trans_xmips.c.inc create mode 100644 target/riscv/xmips.decode diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index d22c1baf09..6d866253f5 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -236,6 +236,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(xtheadmempair, PRIV_VERSION_1_11_0, ext_xtheadmempa= ir), ISA_EXT_DATA_ENTRY(xtheadsync, PRIV_VERSION_1_11_0, ext_xtheadsync), ISA_EXT_DATA_ENTRY(xventanacondops, PRIV_VERSION_1_12_0, ext_XVentanaC= ondOps), + ISA_EXT_DATA_ENTRY(xmipscmov, PRIV_VERSION_1_12_0, ext_xmipscmov), =20 { }, }; @@ -540,6 +541,7 @@ static void rv64_mips_p8700_cpu_init(Object *obj) cpu->cfg.pmp =3D true; cpu->cfg.ext_zba =3D true; cpu->cfg.ext_zbb =3D true; + cpu->cfg.ext_xmipscmov =3D true; cpu->cfg.marchid =3D 0x8000000000000201; } =20 @@ -1756,6 +1758,7 @@ const RISCVCPUMultiExtConfig riscv_cpu_vendor_exts[] = =3D { MULTI_EXT_CFG_BOOL("xtheadmempair", ext_xtheadmempair, false), MULTI_EXT_CFG_BOOL("xtheadsync", ext_xtheadsync, false), MULTI_EXT_CFG_BOOL("xventanacondops", ext_XVentanaCondOps, false), + MULTI_EXT_CFG_BOOL("xmipscmov", ext_xmipscmov, false), =20 { }, }; diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h index 8a843482cc..e6cce7fdf8 100644 --- a/target/riscv/cpu_cfg.h +++ b/target/riscv/cpu_cfg.h @@ -182,6 +182,7 @@ struct RISCVCPUConfig { bool ext_xtheadmempair; bool ext_xtheadsync; bool ext_XVentanaCondOps; + bool ext_xmipscmov; =20 uint32_t pmu_mask; uint16_t vlenb; @@ -210,6 +211,11 @@ static inline bool always_true_p(const RISCVCPUConfig = *cfg __attribute__((__unus return true; } =20 +static inline bool has_xmips_p(const RISCVCPUConfig *cfg) +{ + return cfg->ext_xmipscmov; +} + static inline bool has_xthead_p(const RISCVCPUConfig *cfg) { return cfg->ext_xtheadba || cfg->ext_xtheadbb || diff --git a/target/riscv/insn_trans/trans_xmips.c.inc b/target/riscv/insn_= trans/trans_xmips.c.inc new file mode 100644 index 0000000000..a555c94e23 --- /dev/null +++ b/target/riscv/insn_trans/trans_xmips.c.inc @@ -0,0 +1,38 @@ +/* + * RISC-V translation routines for the MIPS extensions (xmips*). + * + * Copyright (c) 2025 MIPS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2.1 or later, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License f= or + * more details. + * + * You should have received a copy of the GNU General Public License along= with + * this program. If not, see . + */ + +#define REQUIRE_XMIPSCMOV(ctx) do { \ + if (!ctx->cfg_ptr->ext_xmipscmov) { \ + return false; \ + } \ +} while (0) + +static bool trans_ccmov(DisasContext *ctx, arg_ccmov *a) +{ + REQUIRE_XMIPSCMOV(ctx); + + TCGv zero, source1, source2, source3; + zero =3D tcg_constant_tl(0); + source1 =3D get_gpr(ctx, a->rs1, EXT_NONE); + source2 =3D get_gpr(ctx, a->rs2, EXT_NONE); + source3 =3D get_gpr(ctx, a->rs3, EXT_NONE); + + tcg_gen_movcond_tl(TCG_COND_NE, cpu_gpr[a->rd], source2, zero, source1= , source3); + + return true; +} diff --git a/target/riscv/meson.build b/target/riscv/meson.build index fbb6c8fb45..26cd11ec00 100644 --- a/target/riscv/meson.build +++ b/target/riscv/meson.build @@ -4,6 +4,7 @@ gen =3D [ decodetree.process('insn32.decode', extra_args: '--static-decode=3Ddecod= e_insn32'), decodetree.process('xthead.decode', extra_args: '--static-decode=3Ddecod= e_xthead'), decodetree.process('XVentanaCondOps.decode', extra_args: '--static-decod= e=3Ddecode_XVentanaCodeOps'), + decodetree.process('xmips.decode', extra_args: '--static-decode=3Ddecode= _xmips'), ] =20 riscv_ss =3D ss.source_set() diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 2b8ddd184f..0dcb9c0a49 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1195,8 +1195,10 @@ static uint32_t opcode_at(DisasContextBase *dcbase, = target_ulong pc) #include "insn_trans/trans_svinval.c.inc" #include "insn_trans/trans_rvbf16.c.inc" #include "decode-xthead.c.inc" +#include "decode-xmips.c.inc" #include "insn_trans/trans_xthead.c.inc" #include "insn_trans/trans_xventanacondops.c.inc" +#include "insn_trans/trans_xmips.c.inc" =20 /* Include the auto-generated decoder for 16 bit insn */ #include "decode-insn16.c.inc" @@ -1217,6 +1219,7 @@ static inline int insn_len(uint16_t first_word) =20 const RISCVDecoder decoder_table[] =3D { { always_true_p, decode_insn32 }, + { has_xmips_p, decode_xmips}, { has_xthead_p, decode_xthead}, { has_XVentanaCondOps_p, decode_XVentanaCodeOps}, }; diff --git a/target/riscv/xmips.decode b/target/riscv/xmips.decode new file mode 100644 index 0000000000..94d37c10ae --- /dev/null +++ b/target/riscv/xmips.decode @@ -0,0 +1,23 @@ +# +# RISC-V translation routines for the MIPS extension +# +# Copyright (c) 2025 MIPS +# +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# Reference: MIPS P8700 instructions +# (https://mips.com/products/hardware/p8700/) + +# Fields +%rs3 27:5 +%rs2 20:5 +%rs1 15:5 +%rd 7:5 + +# Argument sets + +# Formats +@r4 ..... .. ..... ..... ... ..... ....... %rs3 %rs2 %rs1 %rd + +# *** RV64 MIPS Extension *** +ccmov .....11 ..... ..... 011 ..... 0001011 @r4 --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745589981; cv=pass; d=zohomail.com; s=zohoarc; b=djSVdqbRJBVpHTi1OU0dYayZli0wvY0HffjdXe7ABC4XS3NamMQ4eqgIpL3odq2+4X3A/n5q83qy9Aoue1FJSCfKvThJYFES8kZLjIOSMeDioropHBnBzcA20jREouyS1U3r3A/1e0l1DztJirNlclaVcXYkceRiF7exZtER4b8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745589981; 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=hF0gYadvan8aQ7LVsbV7JjNY7DMfggX7SWj9oz0x/T0=; b=KTEm55a/YclldaCxjC7d3siTkJ6tRtnSkfL5RFMvFm3nJrXJ6Fn+rxTC4QCDpX6H1vVSwGSqyF+QLPXWsK8+XJfzjioDqSxB1ls90WN0zp+VUrlYY19wglJAl83ZlDUlIYhWY0oq0OQWd4qzoLVKK/y2EsXriiIjRvh5p5jPKW8= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745589981459154.4386538185031; Fri, 25 Apr 2025 07:06:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jfl-00048c-TT; Fri, 25 Apr 2025 10:04:58 -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 ) id 1u8Hl0-0001bX-KU for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:14 -0400 Received: from mail-vi1eur05on20702.outbound.protection.outlook.com ([2a01:111:f403:2613::702] helo=EUR05-VI1-obe.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 1u8Hky-0001Mx-BE for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:14 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM0PR09MB3713.eurprd09.prod.outlook.com (2603:10a6:208:180::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Fri, 25 Apr 2025 12:01:46 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=B9MHwycbidR9nA1Jqudj1bgiWXPkVJYDjTIEgv/0GmDp85fFIOaePSFN5QxYgwoTAJt4UCq2EhckNcFveAmt27uue4k/+c8mzqTpKSH1bb8MfdS//3GNQXUSQkrYQ8x28+WzqBCMAKsVDNaB+YM9w4NeDU7FyacWJOUO3k5kKkd5YnXmE3yC3b7o9ICow6YTcWzlxJMW8E76Rg6sjDaCUkSJLACwZmamYwU01l7TE/T7px5QROp6YH3eqv9oecv2oBINJKVz++yU3UmlJf9x24Qv22g7flTp3QhEAaZnVbbr9P11mYhigGV06ViiJi38sBCgkCHX0eUSrtjVv/tcLQ== 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=hF0gYadvan8aQ7LVsbV7JjNY7DMfggX7SWj9oz0x/T0=; b=p7mX7fOUnlBBIZVKxIh8D7FS9apbD6NXLC1aKXOUzcgQbHu+NKOHSc9QupchgTq85H//bEUZGekKNipEDZpD41wCSCTi0/XWgg+beVYOzNu3kKg5Qv330XUFTHhpjHLq/ytiXNW/hG+p+ZqsGxBN0XY8xqihA/43Uu1VpL6y3ndfx1h2oAVj18REP3+fkD7GzabUhdbibtuEY2hnbP11kTcQdMaoRR9mq01BkrrbNHsUKtqbr5U0D35y5jlByRFLOeLiOhsLaikx8zQF+JdVgD+eE9xzfnCaUpFLvN6U0QtDZfDQV+/3OER5b9qaP/BYd8PgOq/MUB5a0xfb2eb0QA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hF0gYadvan8aQ7LVsbV7JjNY7DMfggX7SWj9oz0x/T0=; b=sWoyZBd5cIYO8quUIvFh0N1GcS/g7bcLBqVQs7RjpAOC23Rak7uztFTUslD/M3dj4Sc4cB3YOdD9GEcnn0dTkA7dpLTzFiJ2hkYnvgODogaVB+dlg+Cz5QkEFb5mYQ8QcSQAhAn5l60d2nO64dbhi6YUUxKkX2GVdf1uDJM3kMD4nfP18ot0Zjac9Jsv9gH8c7cqWnpXFbRPPOKogEQSiuDbzfh/mQ+V8vYVKwQLKG6b3GPMKSJc4cGZ386dUO7/XzpPNn81FaOKJuklV6j/KZ/Lvp/1TOos77qSSQczUVEZTNlERPZiN6lMyEfTobuAPY7hignfUcWOngzWLFBFAA== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 6/9] target/riscv: Add mips.pref instruction Thread-Topic: [PATCH 6/9] target/riscv: Add mips.pref instruction Thread-Index: AQHbtdnRtgh9BV4/BEKxThGJISTn9A== Date: Fri, 25 Apr 2025 12:01:46 +0000 Message-ID: <20250425115912.912889-7-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM0PR09MB3713:EE_ x-ms-office365-filtering-correlation-id: ab8d2b50-c181-4eb3-5f06-08dd83f0f3d5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?AD5Mzgov7BtcFmZZJKTxBCUTsSJa5JZLFm9Sb9yx57iKq2mj9FcPck24uw?= =?iso-8859-1?Q?gYrtlQnYfsUoM7gru4MNMXVUse44gMbXu6cp89oANPjAli3f1GtLx1AkxU?= =?iso-8859-1?Q?yirXzy2HsxVXiRRXjzlvXYYbJfcudwfRMR1HjE836X5CyV2XYdp7spZD3E?= =?iso-8859-1?Q?2/j2qZ/ueLZVyzTpgbnHYNGCqjRlQ8ZMDvaI9eqDw4whVp9ZBKkgWqFcFw?= =?iso-8859-1?Q?pEs9PPurp2fwtNqXR8TFphe9w4LAK+2zHzwkJKvS8F9ieJmjuPkuQ84GVh?= =?iso-8859-1?Q?rMxEcDXOc0+cfgVjycGot2HuWo5IxR40jHlKPProUX0DqMxLeMmEbkpPPa?= =?iso-8859-1?Q?K/jiDUoAkex8+ubCUu3wRFgCUkggxyAG8WCETE+qiPbATCwxhiOyLZZnPw?= =?iso-8859-1?Q?yajGqmD52tjigte6W4vFBcJWI5R4rJWUv1R3DEDC90CX6WUH3j5RNQnRBD?= =?iso-8859-1?Q?tC2F1dZe0JC0uxIK51qE+VAjjgZCKzoBJM6M0wu3FCkwZQpyVspA2+JueS?= =?iso-8859-1?Q?TVUCu3KQwbc8i7vsOFMqeAQffbmEk+Evyhg9771grMuUM7bCKlNX4Ayu/9?= =?iso-8859-1?Q?l21OI6PmGghU++yDbhDJu5gU2NPkm6PZjltvyhmbhrms6PCoKLqHsZWOHf?= =?iso-8859-1?Q?ZNeC60+tRviWm3vWKEDXdAXQa/fenYMaakTmFqVP9qnMU6CNdWbPxP9Ez5?= =?iso-8859-1?Q?xopnbprRE+fb/XNC/YbdJgjr7vr1nhnC1irD4ieRELYz2M6T6NYJ+4DQAq?= =?iso-8859-1?Q?Pm4kX5OKAeZvCM8He782Syw3EJG7F8M59lTV96V8yd0dbmId/DcZvc0emr?= =?iso-8859-1?Q?liBF16HgidZdKi3Smz4zBS2CjS+UzlJWEz67c/PyONcJXuEnVNzxmip+mr?= =?iso-8859-1?Q?SO2qkAuTT/JFghAB845Aqj0H6b4PdtV3047aOhbZqdz/NWNitSR2DOsc1q?= =?iso-8859-1?Q?RxctPehH2S5UfEaSHUu7Pnb0Oj/VrY6ZO2gKEQh7koN2mtWxVTRvgGoUiE?= =?iso-8859-1?Q?xH/ic4n8zD9U7htGUHChH97QgCHTcD+1/M6NYtLv+IsDULLjrcYSCNKAqc?= =?iso-8859-1?Q?CMEd+scBtqYUAbDZ5ny3h57cwsrbvaxtD2bWLL6sVvxXFHZVuyZJIvMooz?= =?iso-8859-1?Q?MA3dXbIWh9o9sIG2K+WPTwiA7SAs49fLDZ/CEXm4BAhKNF9r38N20YlRM/?= =?iso-8859-1?Q?FZrc/4o4vTAKqqE8w9W7Iutm3eZdS+FvsqePELNFr0/l42sVaYQpxkWJwK?= =?iso-8859-1?Q?3rOp2HJVzUppWiLuVExmm3CguhZifcbjfxJiBHdL7rE+EScGAXd0UCRfx2?= =?iso-8859-1?Q?sp0XFkKoW1A9yE4UvRhVvDMzGvtq8yAp8SZf+PTFKNcelKGLUwga3dOKfz?= =?iso-8859-1?Q?WDBZWfvBbO7gf/Bf38aJuu3WboaCewcX0syeWGUmPjme6G841rxLxbl7j5?= =?iso-8859-1?Q?QkfL2fY59ll+7sYjQD4jUojLr1VnBEdj0bhS9ORum8BTChwyFGhn2uKwn3?= =?iso-8859-1?Q?VEysxeogu2Aq4/Ep5slFU5Uv6u/nSmeEw5lu+qhsYtgqj1rGlQx/K2yxDn?= =?iso-8859-1?Q?SknAzNg=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?uA7Np0OjfRhNtTN3n3Urtl+vUryv+hggieWV8U3J8mgv+JwtyHm2iuDn2B?= =?iso-8859-1?Q?17k0l/6fH3c7Mp8JCXFEaGiP28NKBUaTQBwjVW9OvOTK0Wl5DxRy/BLAoa?= =?iso-8859-1?Q?MVx3CdGfltQ+A34ZQtDiPNm/tvtLLeHkTYjQqXpHXA+qvgnF/Gl7lObS0u?= =?iso-8859-1?Q?fsaLX7fDD+hFwsYblRwuiP8PmqZv/LXgxGoplD+8EWKhJUq/7vfIYK9GKP?= =?iso-8859-1?Q?JrtlS/bgUuzxUavTaN2atn6QCOF4A7KFBnQgk3dJ5WFSsN2RZye15BFD0M?= =?iso-8859-1?Q?MhqXYDx1qdE6JQBjTeEm8zm1kJVPf1Mnd5jqjoakXVLR0VPZcMXdtkzIol?= =?iso-8859-1?Q?Ur1qRyt2hVfc9yKX8U5xHLK1uLvISG6dvZXBdQzbqHMEGkUZc2Mw/Q/W2f?= =?iso-8859-1?Q?pecfjodU+WGXhcK0rCagwjLVrSxGMDnGt2JKkL8YwBSiIx/KCeqwxE2Svx?= =?iso-8859-1?Q?wJPdzIXqkK9b54owBmKVnsJ11MjujMhfHWv2pANyy5IGd8VfW6L1Q0KU8H?= =?iso-8859-1?Q?pZmyMiVcYMVQMo2Jobg6hsgF7ZDSPWJD+94LPeifgSt1LEnhKJJV+poWDS?= =?iso-8859-1?Q?wb4ryDo5owR8L+Dr2DoZu8lXWTn05FMO+gcYK6u26m7ybLDR+j+PmJwhGI?= =?iso-8859-1?Q?N1dewLzkW/P/ZpT9dS640YFk0iBoNrAuc7gMxCGQye4Myyg8I8CHcDdLrn?= =?iso-8859-1?Q?zO5OSMkXUSeT2gIj+wS40u6M8HNYv+mDrH+YLdmMzmfPtkJ6vS3M2fOROx?= =?iso-8859-1?Q?ZmTJfd900kOzjKdU+VdcgoacSCNwrYFGn4YfUh+jUNXNxECYVyVM7TPSCa?= =?iso-8859-1?Q?bVjx2hLsVuegn2CCoemadE3S9lnBTWFaIF82ebiiWt6ElCWprWQ6utCJNT?= =?iso-8859-1?Q?93x2pWh7+B4onacsfpvaK/63JeA3xZaCxaNIzcmJY3gw8giP6Sw155sG8t?= =?iso-8859-1?Q?rYRx/Q+q+Dg2Le69PztfCJrKZ4h+VYs5W6VuFR3yEvW5DXTREWYzc9O5TT?= =?iso-8859-1?Q?sHhfpalHzm5MJl7tkSFJecLMHVNP/yL/dLaSRnYSavAzF2+LjZtC+1IE59?= =?iso-8859-1?Q?GeMh8FtGrCxjzCCjJHNyI8vkZ5VwDpiuK0f0UMfDsF5Cqg5fYCVC/vmjYU?= =?iso-8859-1?Q?DqokhjorJBS+5N4DgKKz8xV5sdCmfezG9cFnjcXQiN7ULv34yhCtMUVUWl?= =?iso-8859-1?Q?W23h+O26hCuXCE8J1u9SFVE8v0EaC4/+NRLoAgr/LVDV1p7ft/ZW5RImPb?= =?iso-8859-1?Q?J/EewexwFogR77yBBirwPpyTTMUEuFfKVerpQQo+ugQzEYYvEV4l6nzlrP?= =?iso-8859-1?Q?mPefs3HM5EaqLDbbnuT/c/5OFsnwTJC5iHi884UaMFbZx6om0UhCiktgfh?= =?iso-8859-1?Q?8GLZaSJD1haHIT+FCKdUDiQR7J4RznkonsFitacWzkx/4usRJiAIsep7kQ?= =?iso-8859-1?Q?L3jUc+U+P5daZu9R+96DRA2EkRNoLCtuYdGhDT8AMExPaviU/Abxyujw4b?= =?iso-8859-1?Q?G6X9twFOiCpc/CFVQbUc4Tqt8zHcJ+PcTVtMmP7Y0vy2R+wymRx0ghSIsF?= =?iso-8859-1?Q?etQtV7/DNH5Ju/tQOrNafgS3TdfPGg0MK9nyCtwkdEVqB5i8zoC2/AbUbE?= =?iso-8859-1?Q?P52XmO6RV++wnKgTUh/1C3UEM4cbn7Pk+VMEbnLYshz0SA7p+aIwwP4gqE?= =?iso-8859-1?Q?X6YxynBWxXRJGEyQ/0k=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ab8d2b50-c181-4eb3-5f06-08dd83f0f3d5 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:46.2604 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lWhc69MVIksQIJEawxI9yxuHVShtSfafVQf9s9DAk4/yTowj95k0SDaD7e7y9NXS+0U6KDGhRuvRFtoFmvfLllCvrgFURm2T3Dg1kttULKk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3713 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2613::702; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR05-VI1-obe.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745589983733019100 Content-Type: text/plain; charset="utf-8" Add MIPS P8700 prefetch instruction defined by Xmipscbop. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- target/riscv/cpu.c | 3 +++ target/riscv/cpu_cfg.h | 3 ++- target/riscv/insn_trans/trans_xmips.c.inc | 14 ++++++++++++++ target/riscv/xmips.decode | 4 ++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 6d866253f5..d201a0dd02 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -236,6 +236,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(xtheadmempair, PRIV_VERSION_1_11_0, ext_xtheadmempa= ir), ISA_EXT_DATA_ENTRY(xtheadsync, PRIV_VERSION_1_11_0, ext_xtheadsync), ISA_EXT_DATA_ENTRY(xventanacondops, PRIV_VERSION_1_12_0, ext_XVentanaC= ondOps), + ISA_EXT_DATA_ENTRY(xmipscbop, PRIV_VERSION_1_12_0, ext_xmipscbop), ISA_EXT_DATA_ENTRY(xmipscmov, PRIV_VERSION_1_12_0, ext_xmipscmov), =20 { }, @@ -541,6 +542,7 @@ static void rv64_mips_p8700_cpu_init(Object *obj) cpu->cfg.pmp =3D true; cpu->cfg.ext_zba =3D true; cpu->cfg.ext_zbb =3D true; + cpu->cfg.ext_xmipscbop =3D true; cpu->cfg.ext_xmipscmov =3D true; cpu->cfg.marchid =3D 0x8000000000000201; } @@ -1758,6 +1760,7 @@ const RISCVCPUMultiExtConfig riscv_cpu_vendor_exts[] = =3D { MULTI_EXT_CFG_BOOL("xtheadmempair", ext_xtheadmempair, false), MULTI_EXT_CFG_BOOL("xtheadsync", ext_xtheadsync, false), MULTI_EXT_CFG_BOOL("xventanacondops", ext_XVentanaCondOps, false), + MULTI_EXT_CFG_BOOL("xmipscbop", ext_xmipscbop, false), MULTI_EXT_CFG_BOOL("xmipscmov", ext_xmipscmov, false), =20 { }, diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h index e6cce7fdf8..9643625018 100644 --- a/target/riscv/cpu_cfg.h +++ b/target/riscv/cpu_cfg.h @@ -182,6 +182,7 @@ struct RISCVCPUConfig { bool ext_xtheadmempair; bool ext_xtheadsync; bool ext_XVentanaCondOps; + bool ext_xmipscbop; bool ext_xmipscmov; =20 uint32_t pmu_mask; @@ -213,7 +214,7 @@ static inline bool always_true_p(const RISCVCPUConfig *= cfg __attribute__((__unus =20 static inline bool has_xmips_p(const RISCVCPUConfig *cfg) { - return cfg->ext_xmipscmov; + return cfg->ext_xmipscbop || cfg->ext_xmipscmov; } =20 static inline bool has_xthead_p(const RISCVCPUConfig *cfg) diff --git a/target/riscv/insn_trans/trans_xmips.c.inc b/target/riscv/insn_= trans/trans_xmips.c.inc index a555c94e23..375970defc 100644 --- a/target/riscv/insn_trans/trans_xmips.c.inc +++ b/target/riscv/insn_trans/trans_xmips.c.inc @@ -16,6 +16,12 @@ * this program. If not, see . */ =20 +#define REQUIRE_XMIPSCBOP(ctx) do { \ + if (!ctx->cfg_ptr->ext_xmipscbop) { \ + return false; \ + } \ +} while (0) + #define REQUIRE_XMIPSCMOV(ctx) do { \ if (!ctx->cfg_ptr->ext_xmipscmov) { \ return false; \ @@ -36,3 +42,11 @@ static bool trans_ccmov(DisasContext *ctx, arg_ccmov *a) =20 return true; } + +static bool trans_pref(DisasContext *ctx, arg_pref *a) +{ + REQUIRE_XMIPSCBOP(ctx); + + /* Nop */ + return true; +} diff --git a/target/riscv/xmips.decode b/target/riscv/xmips.decode index 94d37c10ae..56237fe610 100644 --- a/target/riscv/xmips.decode +++ b/target/riscv/xmips.decode @@ -13,11 +13,15 @@ %rs2 20:5 %rs1 15:5 %rd 7:5 +%imm_9 20:9 +%imm_hint 7:5 =20 # Argument sets =20 # Formats +@r1_pref ... ......... ..... ... ..... ....... %imm_9 %rs1 %imm_hint @r4 ..... .. ..... ..... ... ..... ....... %rs3 %rs2 %rs1 %rd =20 # *** RV64 MIPS Extension *** ccmov .....11 ..... ..... 011 ..... 0001011 @r4 +pref 000 ......... ..... 000 ..... 0001011 @r1_pref --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745589979; cv=pass; d=zohomail.com; s=zohoarc; b=j7yzyNh66uPCHis8LcAMd9PO5RIn+/81GWs6Z7HX+Of6e4urF5nVuZ1Zr0BPoEA3jqDg1FSejNeqWNUduC1SBKbfABOPrSDYWE10SKHMUEQW5R1RLt0fP64veyivJoSer5KbRUvZebSW3aubcyHbovKpXZTdpg2gkFzwt3LDvMA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745589979; 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=SZJFjecIkKnsnjP45fpOOUNA9pV3mbOPdzwE9xu71R0=; b=Ikl1TgG4SjZ8S3H7Xn8Cqp6BPcZOPg7Ug/7TWeNkoIQatAkOIkqQ4pXgR7+0ZSMx+Fe0Pirvq6RBAOo1sHJC1bF2FRqx9K+cqpLw/tVoub5auXwiEW6ZrutfiAIb9iRq0ShIK1BY6GN+QT3Gwswy/cX+MchLltN7HtOvzqD/LPc= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745589978833240.28852679437443; Fri, 25 Apr 2025 07:06:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jfl-00048d-U2; Fri, 25 Apr 2025 10:04:58 -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 ) id 1u8Hl3-0001dN-7w for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:17 -0400 Received: from mail-vi1eur05on20702.outbound.protection.outlook.com ([2a01:111:f403:2613::702] helo=EUR05-VI1-obe.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 1u8Hl1-0001Mx-2s for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:16 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM0PR09MB3713.eurprd09.prod.outlook.com (2603:10a6:208:180::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Fri, 25 Apr 2025 12:01:46 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wKsIjcoEtmO+QEUavDdoQvVnRu/43cpX6VeK6d4WXn5//5dMtj2RybYbQWF+mAp9Km6XRWi3lequRERwQ8gwp3hINOg2/QugCpNjRukicyUB/ZKGdgXk49B1D2aZS1JmejnPQy1Y6oJI0KkbaZXiE7yRsa3MQs+cyE/Az78Wv8h13WwaVKH2BZRTMEMSlC6krLX/MYr1FUQx/rb5BUcydcB1kh9yHGCppHt4THmxbgpLTv0ixAVGVRYMCwq34S2NOjv5nmfDDYv11Tt1a0kAbFNiy2RfHimUL/a9er8MKwPyICkn8xY680BDdnAFDK0t78oDVggDoS5IcYuN11Z5Ww== 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=SZJFjecIkKnsnjP45fpOOUNA9pV3mbOPdzwE9xu71R0=; b=cPKK4pdxLvhJ97QryIuBqWWCn4hZnp7c0IpOh150XJgVjpkbPlb+/sgcJfMWUZ17tmV3syv49SDGt6yAnl23Q4qGhpH/qDVqa0lRPXbvasHk0sTdT6XHNQGqYmJSglpF95u4Wh03PHFLSDOPGdp9IJjWP8aAGyicDeieK4B452JR7QX6vobAvYDTWLPsfljE5FTDcWxoMGU2vOOnvLaz3TPDjO2fuJUBUSY361F94VOGgY+L5oJEsUvkbx4Y6IQ+G4uaotTTBOTw6i14oNtQhxXvsiYoS8bz3Y+6EcVZzy5JYvsDaqCsE660FehChLTYHfVV21TPuNiChFyRBkmRAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SZJFjecIkKnsnjP45fpOOUNA9pV3mbOPdzwE9xu71R0=; b=iFWmmr/9RXlhv020cIbYaA3nq94ea2GflBEI1scrNIh/7lwdx1K6zCstDZFESCRFIQwJ9s7I0ehHpKLaNqg0ybW8FwrG2reXSXoeElMq/BAAFuHMzzuxFtzV0o6U2x3NJU3XCR+tViJzrAofpmLS6RkToxK0qChxKjpkJ2BYYiJtElNIGmsGonHqGPuWUnL9IeU/njK9ghyJG8R3GxWzf3Eclg8jETSD+SN4MbWgwTPdPA3N+bxxIPjbBnXLitpRRE0zTToni/t7P4oK5nuppDVvatDREwPeI5ZOxWi8KuyHhXjhgiWBAc6urICzwR9g2SY2bqLb3bxnD9pQm21aIg== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 7/9] target/riscv: Add Xmipslsp instructions Thread-Topic: [PATCH 7/9] target/riscv: Add Xmipslsp instructions Thread-Index: AQHbtdnRaFsGxDZJmUeWywYHH2rksA== Date: Fri, 25 Apr 2025 12:01:46 +0000 Message-ID: <20250425115912.912889-8-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM0PR09MB3713:EE_ x-ms-office365-filtering-correlation-id: 46f0082b-b07f-40e3-05f0-08dd83f0f40d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?Jpy/O8mvJB2sm/hPz+Gn4z44glcMO0o7IL4WQWsgyi0O6ukqGLp5nkWlLk?= =?iso-8859-1?Q?gp6kZXxhwB/ZhQ1cngB+GiyTfJbSoEiz2K9jWpUJ4OMGdY+/kFsaN8VjLq?= =?iso-8859-1?Q?UnwGwMjlOS7EV8UdIxvVH7R2JnZI58QqcDnOjJ3EJuTantZdbghUV4AySD?= =?iso-8859-1?Q?puNVyUijO9aosXP9MYlRgdTz6DmZKFfD6RrYyT6uIyLoqe8FaAeczgJviS?= =?iso-8859-1?Q?aUwWniqya5rpKtRKNJ85B8uentWBRAXwNNd4TaJETZJQ9hhdBO2WsICEuL?= =?iso-8859-1?Q?dGS/2MhgzmwAH+bEUccqXIcw1EaaEzWv6+6B+Kubh8gUpwypCZkNydWPKx?= =?iso-8859-1?Q?pGzqVSKAmASj1leFF/1aJ9frg+coJ3SOcEM58zBYJT0Ex69F2rm+t5gMkU?= =?iso-8859-1?Q?kiN08gka0YwIR/M16Md8qSjTQqkVkjZTPEbbu2X7PlItZVNC5gehu5mlzw?= =?iso-8859-1?Q?xMW87/JRdkl7R6nCaE2bAIYe4vwPo7ELd7aTD9+Paw0aketK3Msmxte5UP?= =?iso-8859-1?Q?2KLS+kctDQjOjeBRYmdREAxdO9gEq2Kx3T0SdrDs4pg43wTivXfY7/f2Yw?= =?iso-8859-1?Q?cF3XMKnX1qRe/8CyO6m+9GC7W8Sb7LkhLEdopKmbjdMUfJ0KhWohwhx3eO?= =?iso-8859-1?Q?mEang4VTT8uj8rqmrJq4duHolFXZII7Ju2wAc4Sz+TjX6eua8Jy6zyZQ2p?= =?iso-8859-1?Q?0EerfvXkkaUYO6wTt4YP92+xgQCgBzoPzq6ZS8fjvum+ET659e7VVrzZbh?= =?iso-8859-1?Q?EJjvx2HPBB529iqqkzafCAdQIj90eenWEAt66Vh//Hq2obE/wtTzDIvjCv?= =?iso-8859-1?Q?CbJrJvxSMLQCVUKHPI+QHfK0Qm0bpEYWFWAeGWinvoOaUbCX/Rukcm2bMZ?= =?iso-8859-1?Q?Q/hz10xQN50sGROVdPmi4MH8xOVuSffVXEMFM/nLw0hkk3UziQmcCleaxk?= =?iso-8859-1?Q?w3jcGGh2fho3gz7JJVGAIGHMnDespbWM6v020uU03vypX3Gtqz9GNPxc0t?= =?iso-8859-1?Q?q+z//3mt6b4xwcp5jEDd+g00hyEPlXj1TXAvwzsOnwGpxjGzYd5ljXJBoL?= =?iso-8859-1?Q?Cg/MVhT3Ws5oNfUyGMCejnOmdp3DNb81oCYb1t6TnoQHq6f7fJOkKE+iSs?= =?iso-8859-1?Q?5KbNQlVX/hoDE00CN/5Ka/9L8dumuDSZZ7DO42v0DBJof1jEGYyB4GUr8W?= =?iso-8859-1?Q?VonuEyyguwRfac1bwUcaD+/jvigk6vD1IcjrGkTQNVt0FtXSHJEV/jDu8/?= =?iso-8859-1?Q?N99m/sJOZZddFP25P6834yATQ6sqC+gczElPvpwEdXYxCeNjzENN8pbH9M?= =?iso-8859-1?Q?3Qc6+LNaDMVtdVZzsVlho/I4cMfq5MA4GqxyM7xIohqApnNsZLSJuM4PLc?= =?iso-8859-1?Q?XA72yq38tZtcdg/DfLY0RO/au1TxHdKXTIMp1oxuqZWjvCDeyWXiFWF1EH?= =?iso-8859-1?Q?vco12KaajCRqyUSw38TIUXYL8GzkP2ogSF5ACHwZ/603ZIp4bOBj45C245?= =?iso-8859-1?Q?EyGKzf/IUKN5k/X2nszXEF+1IWoV9cvIJrd50O1yLboQ=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?oDB7Mjx+3l5/Jg0hXEw/sZ6L0vgyfO0SnTy/bZvnoRRwsOvlw2p1/Eyc4Y?= =?iso-8859-1?Q?vkqoRxuEurRD/s8qx6DMiLxQI1chU4zm+mRBWLfd87xHp5foqCR/2LLW9A?= =?iso-8859-1?Q?PvYPxD1Si+x2NyeJYiR6DRed1l+eCByeRPUs0gBwek5Eutf88MGnlzd1G4?= =?iso-8859-1?Q?LIxmPMi6yFE7zL6TuCl4Oy6yYnhAPrPfhQ3FJNgCusjtJRmQoQvVnUjs2z?= =?iso-8859-1?Q?+0dkxftauezONaxbxUNkZcP+OxCuqH0KIiSrXbBninb3dzQBzdh2FXhLrJ?= =?iso-8859-1?Q?A/ApHTtLhSa2LupPKRTf46DRvDsSgJzyvG8fpwSwV9EEWCE1Smw9SiP6L2?= =?iso-8859-1?Q?v1gWCxd1KfSe7Klv1El1kr+Y86lydVESd6RP8Ac0kNKGMvktADfQMfOtzp?= =?iso-8859-1?Q?fKIgIlTI3fWgwpXGUJBsKbE1wUT8dBPu1jxW5CgxqAyRjPaxi+nSrCXrxp?= =?iso-8859-1?Q?POIUx2JOnD2cxPOlj56OfMEad5nu52xYgY1L01eIyCY3KylcnRJW8gnNdx?= =?iso-8859-1?Q?GgFH19nkj9vNzpFfSMaQrr6tjhyrGTseh/vzuFBzeN+iwlbFAb8WBFfOqD?= =?iso-8859-1?Q?S9ZfgVEowvvHE3E+FfVWRXG+BX7Vw5Cshdf9H8CJg/+P+VK2BhSYfm7em7?= =?iso-8859-1?Q?mxWDHQluEBJCWCLTHwiM6UD5GG8iAm94KHPRecRT53pYnLTcMjyxFDggdm?= =?iso-8859-1?Q?u1jYjz+yT61S2B/2panTp1ZcX1tz8KYd0pjz/5JKdfo77d0pcT8EgZsKLe?= =?iso-8859-1?Q?sN9l+3RgxD5UB9lbGI1HhGR55JWFlTBFnx5bkartwJLci8WpH05o6DqLB6?= =?iso-8859-1?Q?bpN2ftw7NHdS5shvzEy1MuEaq0sqTNjnC8TsiU3x5mZXG2WyIS3Atkiz9T?= =?iso-8859-1?Q?jqw2kjfTtFpVWXk1zQKdV81IklEWT95Fa+0PK8QwAH4slPZfewCQcQl7A8?= =?iso-8859-1?Q?FRicJIff+V5kXRKuQbjdysCUCbmdmJNNorw5RQ+mAoKoOKI6yDQtysFfDe?= =?iso-8859-1?Q?72gYJLf0wlRVumB7QmIQ26E1wftvvypYn+yU0uOEJmrPVauPoa24vL1lcE?= =?iso-8859-1?Q?5jAB00nvHjOk+tt29hv/Fpz36PT0I49oDnoxB3I5nPJwoXmH9h9UeeqqT/?= =?iso-8859-1?Q?zgmXDIuyvsLgIibDDcpbhiXcWQ8PSTB5JcE4cFEVRFG7k6iPsizTvsKU8/?= =?iso-8859-1?Q?OnPo3z3JTabZT8smq2E9+Zh/AcASEkxgxFvfYMm3Eih6T6MD9PIkJzOoxd?= =?iso-8859-1?Q?YoyTqdmNBEZy4lsS5tMk2mF0v6GiO19f8yQDjIYpxiqL64EO1JC2oDsIva?= =?iso-8859-1?Q?tbYN92GIXySd60Y+vPDppGh8KIJD1SCLR+yZLI2UXFGmMElLorPlyA/ye8?= =?iso-8859-1?Q?zUeo88MZtpDdAMFKFY5nOkoYu/kJvrr6NAmNcZbQ064ZB41yHQHZc/FMre?= =?iso-8859-1?Q?fN321ihqT0DmmXOiK9sQWgJsFth8zKa/wwFyQUFstUxHycL7RwxNWwhavV?= =?iso-8859-1?Q?uODrsIbdnENirgnK+0WQRnklwpy8bojYLG26rbqakdSJ/XcOfpu7dWei0j?= =?iso-8859-1?Q?wLg/GuglyEq4gKEvm1Lk3U/SYE/ANigVdSV+gQwq1GdrkXnQQGTq6HYq4g?= =?iso-8859-1?Q?dObrXJyNSv0+TmESkqoexG6+xKKdn3ymOhT0HQ6NkMufLcYzeExXA09/9v?= =?iso-8859-1?Q?Lpq+IKs8VIs45NSEhdA=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46f0082b-b07f-40e3-05f0-08dd83f0f40d X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:46.5149 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9o/GDDEyKx9bnD1oOvnfroGs5O2ww/fa53EzGjIE+qfsRMzE8Xu0zbGajunWyqlJfChomJrrTy2ozWF1imNEl3VSAXg1z2n3BBZoqyWHV1Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3713 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2613::702; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR05-VI1-obe.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745589981979019100 Content-Type: text/plain; charset="utf-8" Add MIPS P8700 ldp, lwp, sdp, swp instructions. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- target/riscv/cpu.c | 3 + target/riscv/cpu_cfg.h | 3 +- target/riscv/insn_trans/trans_xmips.c.inc | 84 +++++++++++++++++++++++ target/riscv/xmips.decode | 12 ++++ 4 files changed, 101 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index d201a0dd02..39872cfec5 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -238,6 +238,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(xventanacondops, PRIV_VERSION_1_12_0, ext_XVentanaC= ondOps), ISA_EXT_DATA_ENTRY(xmipscbop, PRIV_VERSION_1_12_0, ext_xmipscbop), ISA_EXT_DATA_ENTRY(xmipscmov, PRIV_VERSION_1_12_0, ext_xmipscmov), + ISA_EXT_DATA_ENTRY(xmipslsp, PRIV_VERSION_1_12_0, ext_xmipslsp), =20 { }, }; @@ -544,6 +545,7 @@ static void rv64_mips_p8700_cpu_init(Object *obj) cpu->cfg.ext_zbb =3D true; cpu->cfg.ext_xmipscbop =3D true; cpu->cfg.ext_xmipscmov =3D true; + cpu->cfg.ext_xmipslsp =3D true; cpu->cfg.marchid =3D 0x8000000000000201; } =20 @@ -1762,6 +1764,7 @@ const RISCVCPUMultiExtConfig riscv_cpu_vendor_exts[] = =3D { MULTI_EXT_CFG_BOOL("xventanacondops", ext_XVentanaCondOps, false), MULTI_EXT_CFG_BOOL("xmipscbop", ext_xmipscbop, false), MULTI_EXT_CFG_BOOL("xmipscmov", ext_xmipscmov, false), + MULTI_EXT_CFG_BOOL("xmipslsp", ext_xmipslsp, false), =20 { }, }; diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h index 9643625018..68634c49e7 100644 --- a/target/riscv/cpu_cfg.h +++ b/target/riscv/cpu_cfg.h @@ -184,6 +184,7 @@ struct RISCVCPUConfig { bool ext_XVentanaCondOps; bool ext_xmipscbop; bool ext_xmipscmov; + bool ext_xmipslsp; =20 uint32_t pmu_mask; uint16_t vlenb; @@ -214,7 +215,7 @@ static inline bool always_true_p(const RISCVCPUConfig *= cfg __attribute__((__unus =20 static inline bool has_xmips_p(const RISCVCPUConfig *cfg) { - return cfg->ext_xmipscbop || cfg->ext_xmipscmov; + return cfg->ext_xmipscbop || cfg->ext_xmipscmov || cfg->ext_xmipslsp; } =20 static inline bool has_xthead_p(const RISCVCPUConfig *cfg) diff --git a/target/riscv/insn_trans/trans_xmips.c.inc b/target/riscv/insn_= trans/trans_xmips.c.inc index 375970defc..8f6d485a52 100644 --- a/target/riscv/insn_trans/trans_xmips.c.inc +++ b/target/riscv/insn_trans/trans_xmips.c.inc @@ -28,6 +28,12 @@ } \ } while (0) =20 +#define REQUIRE_XMIPSLSP(ctx) do { \ + if (!ctx->cfg_ptr->ext_xmipslsp) { \ + return false; \ + } \ +} while (0) + static bool trans_ccmov(DisasContext *ctx, arg_ccmov *a) { REQUIRE_XMIPSCMOV(ctx); @@ -43,6 +49,84 @@ static bool trans_ccmov(DisasContext *ctx, arg_ccmov *a) return true; } =20 +static bool trans_ldp(DisasContext *ctx, arg_ldp *a) +{ + REQUIRE_XMIPSLSP(ctx); + REQUIRE_64_OR_128BIT(ctx); + + TCGv src =3D get_gpr(ctx, a->rs1, EXT_NONE); + TCGv dest0 =3D dest_gpr(ctx, a->rd); + TCGv dest1 =3D dest_gpr(ctx, a->rs3); + TCGv addr =3D tcg_temp_new(); + + tcg_gen_addi_tl(addr, src, a->imm_y); + tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, MO_TESQ); + gen_set_gpr(ctx, a->rd, dest0); + + tcg_gen_addi_tl(addr, addr, 8); + tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, MO_TESQ); + gen_set_gpr(ctx, a->rs3, dest1); + + return true; +} + +static bool trans_lwp(DisasContext *ctx, arg_lwp *a) +{ + REQUIRE_XMIPSLSP(ctx); + + TCGv src =3D get_gpr(ctx, a->rs1, EXT_NONE); + TCGv dest0 =3D dest_gpr(ctx, a->rd); + TCGv dest1 =3D dest_gpr(ctx, a->rs3); + TCGv addr =3D tcg_temp_new(); + + tcg_gen_addi_tl(addr, src, a->imm_x); + tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, MO_TESL); + gen_set_gpr(ctx, a->rd, dest0); + + tcg_gen_addi_tl(addr, addr, 4); + tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, MO_TESL); + gen_set_gpr(ctx, a->rs3, dest1); + + return true; +} + +static bool trans_sdp(DisasContext *ctx, arg_sdp *a) +{ + REQUIRE_XMIPSLSP(ctx); + REQUIRE_64_OR_128BIT(ctx); + + TCGv src =3D get_gpr(ctx, a->rs1, EXT_NONE); + TCGv data0 =3D get_gpr(ctx, a->rs2, EXT_NONE); + TCGv data1 =3D get_gpr(ctx, a->rs3, EXT_NONE); + TCGv addr =3D tcg_temp_new(); + + tcg_gen_addi_tl(addr, src, a->imm_w); + tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, MO_TEUQ); + + tcg_gen_addi_tl(addr, addr, 8); + tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, MO_TEUQ); + + return true; +} + +static bool trans_swp(DisasContext *ctx, arg_swp *a) +{ + REQUIRE_XMIPSLSP(ctx); + + TCGv src =3D get_gpr(ctx, a->rs1, EXT_NONE); + TCGv data0 =3D get_gpr(ctx, a->rs2, EXT_NONE); + TCGv data1 =3D get_gpr(ctx, a->rs3, EXT_NONE); + TCGv addr =3D tcg_temp_new(); + + tcg_gen_addi_tl(addr, src, a->imm_v); + tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, MO_TESL); + + tcg_gen_addi_tl(addr, addr, 4); + tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, MO_TESL); + + return true; +} + static bool trans_pref(DisasContext *ctx, arg_pref *a) { REQUIRE_XMIPSCBOP(ctx); diff --git a/target/riscv/xmips.decode b/target/riscv/xmips.decode index 56237fe610..07802bf30e 100644 --- a/target/riscv/xmips.decode +++ b/target/riscv/xmips.decode @@ -15,13 +15,25 @@ %rd 7:5 %imm_9 20:9 %imm_hint 7:5 +%imm_v 25:2 9:3 !function=3Dex_shift_2 +%imm_w 25:2 10:2 !function=3Dex_shift_3 +%imm_x 22:5 !function=3Dex_shift_2 +%imm_y 23:4 !function=3Dex_shift_3 =20 # Argument sets =20 # Formats @r1_pref ... ......... ..... ... ..... ....... %imm_9 %rs1 %imm_hint @r4 ..... .. ..... ..... ... ..... ....... %rs3 %rs2 %rs1 %rd +@r4_immv ..... .. ..... ..... ... ... .. ....... %rs2 %rs3 %imm_v %rs1 +@r4_immw ..... .. ..... ..... ... .. ... ....... %rs2 %rs3 %imm_w %rs1 +@r4_immx ..... ..... .. ..... ... ..... ....... %rs3 %imm_x %rs1 %rd +@r4_immy ..... .... ... ..... ... ..... ....... %rs3 %imm_y %rs1 %rd =20 # *** RV64 MIPS Extension *** ccmov .....11 ..... ..... 011 ..... 0001011 @r4 +ldp ..... .... 000 ..... 100 ..... 0001011 @r4_immy +lwp ..... ..... 01 ..... 100 ..... 0001011 @r4_immx +sdp ..... .. ..... ..... 101 .. 0000001011 @r4_immw +swp ..... .. ..... ..... 101 ... 010001011 @r4_immv pref 000 ......... ..... 000 ..... 0001011 @r1_pref --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745590059; cv=pass; d=zohomail.com; s=zohoarc; b=bthiCtqkNgtpb8dWh9nREA9g9XQObNFw4UyfVgBzWtcTU8t5yl5d/u7yRZWkO2dqYFlTWLJ+yiKtaUI+HU6RK2RGncvTOmWzb1v+mll8QQ/KW79AIe1ze17QkDxapD/jpliXVZFBmPG1nN0ySeuChGAyoYA7sf1i9ugoJ93Ia4k= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745590059; 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=AQBDtxYLmkgTnsUn7T/5nLOWQCBBMdNYthJHVWhvYLs=; b=bSQaCy8H73c0N2+2sbsRIAIwFvyMztTXmTz4iQ6CfGI1RJcooEyEJr2dJLNXsGOaASClTKbkfqSPBvmtJK8OZxZLv/GXhJjEagUnZznx6z13LSlqhTLqcBCP2pwDK9y9K5+YMbvfx1h0g6zOqNX7JkeI8APDIJn4xCL4Qwu2X8I= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745590059242101.95675051328112; Fri, 25 Apr 2025 07:07:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jft-0004FI-Sz; Fri, 25 Apr 2025 10:05:05 -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 ) id 1u8HlC-0001hP-0f for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:26 -0400 Received: from mail-vi1eur05on20702.outbound.protection.outlook.com ([2a01:111:f403:2613::702] helo=EUR05-VI1-obe.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 1u8Hl6-0001Mx-PR for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:25 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM0PR09MB3713.eurprd09.prod.outlook.com (2603:10a6:208:180::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Fri, 25 Apr 2025 12:01:47 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kgtNJ2F+lsDyJm9uTPOpHxy0qXMAv/itmbAvDFbCJROnfK9iELu7FEO+cCw6JVHtR/JrTysdgAIigq8IeqU214KbkXe3ZOQD30pRwHe45oJ7ByLFSqFrwL3G/FAyw/qrqoJAstKAyit9b2Ef9GMdH9v20XGV/iSlRidLl3fnO0s6Z5H1ozzb7aDU8aNWJZ6KmAUh9/Ai2mkDwmtiwQqTD3PBZOC08yr31NsFAF4seiy9gG9EcPjmqcQq8YRKdQQO+SqiDZc0Br5dj0NoJG/6MBLihXUF2rAXYfQKtPCzWqFAEK4LMofZgfcQArkU6iins2Gs2fzz4ngf64hFTv4t7g== 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=AQBDtxYLmkgTnsUn7T/5nLOWQCBBMdNYthJHVWhvYLs=; b=YpICKhQcdH/H0qtj1Q3mjyzpVcgvJhA5P616D23TS5bCDVvF83yI9Lagl2FPngy/R+wVpL2ywkWCEt41U27btIPPc4kEn0G3Fxr+0D5QCOjolcRe8ZNzhAhdO/QDrxQKUupbJTLymze+UwPzncognHO4jI5YRs15bS3DMoDW76KTJR6m4s5+oufyyUy0IPn4E5G5Al3n7DOlNWN1RLTDvpl9CFGX6zpHDAJA1XPd7VwtKHvJ0xbjXd9iqt/EpCNTMRpUUubBld3yB9xtf3RDTAhJVZLT2OMXfyB+17NEkgvvH9IyMnsHdKKC8KrkMEdIC9ucWbPOiPlS1Mga7l61Vg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AQBDtxYLmkgTnsUn7T/5nLOWQCBBMdNYthJHVWhvYLs=; b=TLV27siKS2P8kJQgquWoESgptHexTOo9X6YuPIWOkWf0tK7Bi3ucUmea5iL6C8CSeYL0oL6XCPF30vjIbjdU16sttw2TZbX7bAncgofSRC2mC83njDABNCxoObaWBQv8X29/eYXugYTFKvaoucWPs4+iKeRX07pX/jQ5dvBpkw8/EEYtdrvPiriDqL9n6lsxA1lbuE5xDc2Z571jRk5g/8E5V/YkZ/m5la7gggnqOaaiT0wynNR2elgcV+lPVRD9o6VccCYxVwGB89SSayckuRg7OFgoGkISQI4J6xz8YWxrH2hvc+gDS53FYlXbxOSojfIC5sgjlkrY23GArHdirQ== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 8/9] configs/devices: Add MIPS Boston-aia board model to RISC-V Thread-Topic: [PATCH 8/9] configs/devices: Add MIPS Boston-aia board model to RISC-V Thread-Index: AQHbtdnR15SrJkGM7UudrfPFaYWd1w== Date: Fri, 25 Apr 2025 12:01:46 +0000 Message-ID: <20250425115912.912889-9-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM0PR09MB3713:EE_ x-ms-office365-filtering-correlation-id: 1106e6aa-c55b-4df2-a003-08dd83f0f45b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|13003099007|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?tEl7MzWxQoQB5QNJFURxzO6P265c9hjX8MejTSMJ029XrPkQt+Zy5Q+HHy?= =?iso-8859-1?Q?qsW7DeKY0/2LbCveYq0aE7D7M12oGGFyXN/03FIaxOGsolTfnCfIRjLrxf?= =?iso-8859-1?Q?BUchIoPLuu4fPZKY2VRpCRYfMrGNpDp/wpvpeYUDaHoeAL26uuDWW+DhoU?= =?iso-8859-1?Q?MS4xKa+v2kuQF9MUxkvTTe4cBnPNDHVOP5o52dpwOM/WGxFIsUhRO3s1yn?= =?iso-8859-1?Q?1JbDU5mPz0nXz0fia70xzp9yPAjaGHSgOudICAr9drqPEzxePNXvo/RQRg?= =?iso-8859-1?Q?WOuqbAvD6k/5Gt+LYpyODJnE5ruoYS0wLm9yj/HuM+SUADDCi0UjcFow6b?= =?iso-8859-1?Q?dmgy6srlPNeD5Op6QeO2pZD/OveyWUXK3e8tFhuCOKjT/f263+XQb5sqvu?= =?iso-8859-1?Q?lCbqczgx4mjgbX6BvvoMdV7l+Rsxl0yJQnwqvKoBAoz9N9LEqBRzV9izVl?= =?iso-8859-1?Q?UosR8OIZ5p04zM26uZu30SWeHotqqaVTyXJtaODq6TudjsvEp/7qDYqaMs?= =?iso-8859-1?Q?AfH5mUm6GYFSmafTaG0ACnEmmoKDK24Oav6s+kz+gIRQrAV2smIFBV8T5o?= =?iso-8859-1?Q?WPxjh4cYgT1OF1DDRFuj5UWqjILcK68DXWnh9weV9Dqy5tfAV+rM3VaDVh?= =?iso-8859-1?Q?BMsjIUZfXd/7Zr2ebDAaXA2Hc5D3miKjTEsEypSCQ/X7p8URBO3PiZKv9C?= =?iso-8859-1?Q?g5akxreibMIPmwKBPlEOZxGv3+zh2z0CFO3HtPyB0SFy6tzo+4z0z/61LK?= =?iso-8859-1?Q?z8C1tg3W2kKxClMLzBcPvOW8S0mGd0roZbffLpbLYCFXbHr8aEyMAjfCs2?= =?iso-8859-1?Q?FrwLVo52OkncNATeOiGomplaZQLdF0sj3Nzl5PqZCjrYEguFTK0s9K4DZk?= =?iso-8859-1?Q?7zXZpTCxk3aTdXDlvFB50DCmacFUNHNylxjlwz/4A5zfqOiNxhB6G9mo70?= =?iso-8859-1?Q?hf0wT12r6ANvYgTpN4RQDap2342pLkUP/y+2RYtcCc+GyxtxiGKX+AfZTI?= =?iso-8859-1?Q?1AJ/RhEjMcnJ6DyG5xymNQQxaEUUvd8uEk/zW09aYqeSlkViKQWcrJYPTE?= =?iso-8859-1?Q?dNUNIRYHCwpuPqbZAAvM8rYvXz3BEjpEt4J+ec4YOTQQjgeE0LGoWS7Jvt?= =?iso-8859-1?Q?a9fIg3IknnRn6Nt59Dm8yp91i05EQmg14VZh7sG4m6aFrkAQyZe9vHiGWJ?= =?iso-8859-1?Q?dqXzEFG9Ex6Fw0GHb3tIL1sBdB48sN4q2pXb/VT7ergsfa7jmQA0dVkme7?= =?iso-8859-1?Q?G8XnRvyVM3tbx7fIbcCmQNN8ojvAEw8mTIZuGDZGAIr58JNVGOByYiOUp2?= =?iso-8859-1?Q?MpKvAGO3jjn7Uo9nmGK6r1cvQqd494AFc6CgqiFByqM8ABnj4Bx64q+yCv?= =?iso-8859-1?Q?3kF98knDDoUaasKGIlmfTRw+tNaJ3JQEostwnhpmSPPBibiEy3mGlbD4E1?= =?iso-8859-1?Q?rVixNpIh2QkeUgkH2VpyCEbpVv+XjFdczXAr4zc8rtBPoOeZRLvOm5LbxX?= =?iso-8859-1?Q?eDpOV3618zVNDUwf1WNMpv7/TUBjVo54C8LzE+oLMJRDrM1WytXWrCpZhD?= =?iso-8859-1?Q?vGUZdNM=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(13003099007)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?deCEqQwNn4BDIdOhqRPEcqrOSZJuK40y4K7RNX0eX08AXjP9CuXxEwNtit?= =?iso-8859-1?Q?7+fKjrXd74Kf3GdDbuB6rbwclgSR/tySOgxuRI03oV+jxYxaAjJIAyuoNj?= =?iso-8859-1?Q?DqxOYjeuVkvtvdX+i5ZDcoABqW5Q9/rxFqYc4EH0/2zeBfACv0Pj7HFU6x?= =?iso-8859-1?Q?DEbKG2IzVVtyub3xEQ5avYafpK6KnGY7GQzUSO6mFcI628Te2srgGjydXT?= =?iso-8859-1?Q?S4uDDcV3+ExW2qE8zGdhobvbJ3H1OQajQTa3r8ckhLBSesSji0bEEotqML?= =?iso-8859-1?Q?VK6yR205cYmyMIPiZy2Av7nlk+pOz/tInLXlvet2wMOyimiPX0mMp/7K2b?= =?iso-8859-1?Q?9Yi6Ykq2apnbp046eWVNNBU1ZIqPougDbUAFsW77Fa0YjSCDi3TDu60ujZ?= =?iso-8859-1?Q?y9DjRkxuyuRteSQRCa6J3cv3Q0yyg1mYkHH4aCOGxqDNyltz0kn5GWNAwF?= =?iso-8859-1?Q?XuwBSbDgGzUjgWpqttAWR50N/D1w7wH855MuuggMphC9RBCkaxVbRGGIFf?= =?iso-8859-1?Q?3BOZp7+kh/45pJswu6XsA0A8yMC4HznuJHV0Mk9luccuTyJQQfy8EY95dP?= =?iso-8859-1?Q?CMknoG1lBALBm1DX0oa67Dqmqkg8inl4UMBCE+xtW3Hvk0Q+ZgZ8LvgzhC?= =?iso-8859-1?Q?LOfdiMFAUR1dJrcEZ31J5zLcrCY9aVlpmid+zTAk2688wsIBUKilcOljJF?= =?iso-8859-1?Q?ujpSdjHB4Re9U/TupWwFImptpBxT/xfac1RRsTObuQfmQ7IH/16y40krsX?= =?iso-8859-1?Q?OT5bQheGG4Sokw/K0YhVyl91o8WwhmsBGLWTcvLMZVXcc91/FSrzhf0rZD?= =?iso-8859-1?Q?6pAxEv1ptMmvwy2QD/zqaJGBQZeTEdatYtjPExIw9jOZv9PXV5dRaBRkM0?= =?iso-8859-1?Q?lggCbtemkc4EMfCNGqmqWt4k7WSgAx0kGM80UuxCysyHPfd4CdtM5C1gK+?= =?iso-8859-1?Q?PKT7QhuQgiuCOxV9xiZoj+/fBkEzGb0NIn4+21YERp9/JryHMMyF15yT5R?= =?iso-8859-1?Q?x1rf/2MQCIP+vUrEMsgjMbbkH7kjSrj+0WwxGx95Kh7IoaW56/x5u5MY5F?= =?iso-8859-1?Q?D7DM0/IfG6jv/C2Po9k53XODOvElZ86A8HbS+bWWSVQGxLZYnY4GcnqQCO?= =?iso-8859-1?Q?ki70JI8JR6yKWJr+cnwq6OH0q6EKmtUiaCgrCen1RibKYoCnNkMPmD6m0k?= =?iso-8859-1?Q?KJH9YeK6pI+X8Ih31yOvmXm2/jEoE0+6pOl5GbwEv/FF9w5zabhSsBa6hf?= =?iso-8859-1?Q?N4jXN8At+IavdaSBXagGU4pq9U6ouKweRAo1QeNBQjwSgQhAEYhVdxBzwj?= =?iso-8859-1?Q?fmP3rlYKhsdGgg7c+vNcR2clS3mtk+4zmTkS4nEXIoRneUZZcraHXAbkBu?= =?iso-8859-1?Q?5z368ruZk8jrYHcxEUw6OAR2oLm4y/n7cJXccoRy2wv5OnZNFNsnWbkfxs?= =?iso-8859-1?Q?C/LrtE78xTBRPC5HiZX8o8ujLAxremof7y1SM5w0rhoGzWuKByxa+EshaQ?= =?iso-8859-1?Q?Jf+9UZpOlUo2sVW43Ka5i1aOj1CAUSrWrxwXY/2LVgVDRU4lfU/fGA6T1K?= =?iso-8859-1?Q?QWSnbV1poVCeYU126JPZKKXK2cThzT9utCjSeLMcFyA1kmLIJHR9UpHPj7?= =?iso-8859-1?Q?LwUBNw4DlSi7CImMRzc1IgL/aeHYb0Fu3i0fq3Uf+1NyzCzW6D3d4Mva0P?= =?iso-8859-1?Q?lfkjGRd6ITF75ZwepvI=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1106e6aa-c55b-4df2-a003-08dd83f0f45b X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:46.9146 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: TvNEh0uA17DOfyuH6pN1ojEELiftBf2eWEG3XnxM1sTeAsKSvt372YNfLQT7B4EUiHIyc5w6MKl4WboJZvJ6oDfqhS9HIkiaIRjLjZuXPhA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3713 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2613::702; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR05-VI1-obe.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745590060932019000 Content-Type: text/plain; charset="utf-8" The board model supports up to 64 harts with MIPS CPS, MIPS GCR, MIPS CPC, AIA plic, and AIA clint devices. The model can create boot code, if there is no -bios parameter. We can specify -smp x, cores=3Dy,thread=3Dz. Ex: Use 4 cores and 2 threads with each core to have 8 smp cpus as follows. qemu-system-riscv64 -cpu mips-p8700 -m 2G -M boston-aia \ -smp 8,cores=3D4,threads=3D2 -kernel fw_payload.bin \ -drive file=3Drootfs.ext2,format=3Draw -serial stdio Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- configs/devices/riscv64-softmmu/default.mak | 1 + hw/misc/Kconfig | 5 + hw/misc/meson.build | 1 + hw/misc/riscv_cmgcr.c | 203 +++++++++ hw/misc/riscv_cpc.c | 221 +++++++++ hw/riscv/Kconfig | 6 + hw/riscv/boston-aia.c | 479 ++++++++++++++++++++ hw/riscv/cps.c | 184 ++++++++ hw/riscv/meson.build | 1 + include/hw/misc/riscv_cmgcr.h | 75 +++ include/hw/misc/riscv_cpc.h | 66 +++ include/hw/riscv/cps.h | 72 +++ target/riscv/cpu.h | 1 + 13 files changed, 1315 insertions(+) create mode 100644 hw/misc/riscv_cmgcr.c create mode 100644 hw/misc/riscv_cpc.c create mode 100644 hw/riscv/boston-aia.c create mode 100644 hw/riscv/cps.c create mode 100644 include/hw/misc/riscv_cmgcr.h create mode 100644 include/hw/misc/riscv_cpc.h create mode 100644 include/hw/riscv/cps.h diff --git a/configs/devices/riscv64-softmmu/default.mak b/configs/devices/= riscv64-softmmu/default.mak index 39ed3a0061..2f4f92b978 100644 --- a/configs/devices/riscv64-softmmu/default.mak +++ b/configs/devices/riscv64-softmmu/default.mak @@ -11,3 +11,4 @@ # CONFIG_RISCV_VIRT=3Dn # CONFIG_MICROCHIP_PFSOC=3Dn # CONFIG_SHAKTI_C=3Dn +# CONFIG_MIPS_BOSTON_AIA=3Dn diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index ec0fa5aa9f..65a89637ed 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -108,6 +108,11 @@ config STM32L4X5_RCC config MIPS_ITU bool =20 +config MIPS_BOSTON_AIA + bool + default n + depends on RISCV64 + config MPS2_FPGAIO bool select LED diff --git a/hw/misc/meson.build b/hw/misc/meson.build index 6d47de482c..05b1c0f3cc 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -152,6 +152,7 @@ specific_ss.add(when: 'CONFIG_MAC_VIA', if_true: files(= 'mac_via.c')) =20 specific_ss.add(when: 'CONFIG_MIPS_CPS', if_true: files('mips_cmgcr.c', 'm= ips_cpc.c')) specific_ss.add(when: 'CONFIG_MIPS_ITU', if_true: files('mips_itu.c')) +specific_ss.add(when: 'CONFIG_MIPS_BOSTON_AIA', if_true: files('riscv_cmgc= r.c', 'riscv_cpc.c')) =20 system_ss.add(when: 'CONFIG_SBSA_REF', if_true: files('sbsa_ec.c')) =20 diff --git a/hw/misc/riscv_cmgcr.c b/hw/misc/riscv_cmgcr.c new file mode 100644 index 0000000000..879c8fe093 --- /dev/null +++ b/hw/misc/riscv_cmgcr.c @@ -0,0 +1,203 @@ +/* + * This file is subject to the terms and conditions of the GNU General Pub= lic + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. + * Authors: Sanjay Lal + * + * Copyright (C) 2015 Imagination Technologies + * + * Copyright (C) 2025 MIPS + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "hw/sysbus.h" +#include "migration/vmstate.h" +#include "hw/misc/riscv_cmgcr.h" +#include "hw/misc/riscv_cpc.h" +#include "hw/qdev-properties.h" + +#include "cpu.h" + +void cpu_set_exception_base(int vp_index, target_ulong address); + +static inline bool is_cpc_connected(RISCVGCRState *s) +{ + return s->cpc_mr !=3D NULL; +} + +static inline void update_cpc_base(RISCVGCRState *gcr, uint64_t val) +{ + if (is_cpc_connected(gcr)) { + gcr->cpc_base =3D val & GCR_CPC_BASE_MSK; + memory_region_transaction_begin(); + memory_region_set_address(gcr->cpc_mr, + gcr->cpc_base & GCR_CPC_BASE_CPCBASE_MSK= ); + memory_region_set_enabled(gcr->cpc_mr, + gcr->cpc_base & GCR_CPC_BASE_CPCEN_MSK); + memory_region_transaction_commit(); + } +} + +static inline void update_gcr_base(RISCVGCRState *gcr, uint64_t val) +{ + gcr->gcr_base =3D val & GCR_BASE_GCRBASE_MSK; + memory_region_set_address(&gcr->iomem, gcr->gcr_base); + + /* For boston-aia, cpc_base is set to gcr_base + 0x8001 to enable + cpc automatically. */ + update_cpc_base(gcr, val + 0x8001); +} + +/* Read GCR registers */ +static uint64_t gcr_read(void *opaque, hwaddr addr, unsigned size) +{ + RISCVGCRState *gcr =3D (RISCVGCRState *) opaque; + + switch (addr) { + /* Global Control Block Register */ + case GCR_CONFIG_OFS: + /* Set PCORES to 0 */ + return 0; + case GCR_BASE_OFS: + return gcr->gcr_base; + case GCR_REV_OFS: + return gcr->gcr_rev; + case GCR_CPC_STATUS_OFS: + return is_cpc_connected(gcr); + case GCR_L2_CONFIG_OFS: + /* L2 BYPASS */ + return GCR_L2_CONFIG_BYPASS_MSK; + default: + qemu_log_mask(LOG_UNIMP, "Read %d bytes at GCR offset 0x%" HWADDR_= PRIx + "\n", size, addr); + return 0; + } + return 0; +} + +static inline target_ulong get_exception_base(RISCVGCRVPState *vps) +{ + return vps->reset_base & GCR_CL_RESET_BASE_RESETBASE_MSK; +} + +/* Write GCR registers */ +static void gcr_write(void *opaque, hwaddr addr, uint64_t data, unsigned s= ize) +{ + RISCVGCRState *gcr =3D (RISCVGCRState *)opaque; + RISCVGCRVPState *current_vps; + int cpu_index, c, h; + + for (c =3D 0; c < gcr->num_core; c++) { + for (h =3D 0; h < gcr->num_hart; h++) { + if (addr =3D=3D RISCV_CLCB_OFS + c * 0x100 + h * 8) { + cpu_index =3D c * gcr->num_hart + h; + current_vps =3D &gcr->vps[cpu_index]; + current_vps->reset_base =3D data & GCR_CL_RESET_BASE_MSK; + cpu_set_exception_base(cpu_index + gcr->cluster_id * + gcr->num_core * gcr->num_hart, + get_exception_base(current_vps)); + return; + } + } + } + + switch (addr) { + case GCR_BASE_OFS: + update_gcr_base(gcr, data); + break; + default: + qemu_log_mask(LOG_UNIMP, "Write %d bytes at GCR offset 0x%" HWADDR= _PRIx + " 0x%" PRIx64 "\n", size, addr, data); + break; + } +} + +static const MemoryRegionOps gcr_ops =3D { + .read =3D gcr_read, + .write =3D gcr_write, + .endianness =3D DEVICE_NATIVE_ENDIAN, + .impl =3D { + .max_access_size =3D 8, + }, +}; + +static void riscv_gcr_init(Object *obj) +{ + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + RISCVGCRState *s =3D RISCV_GCR(obj); + + memory_region_init_io(&s->iomem, OBJECT(s), &gcr_ops, s, + "riscv-gcr", GCR_ADDRSPACE_SZ); + sysbus_init_mmio(sbd, &s->iomem); +} + +static void riscv_gcr_reset(DeviceState *dev) +{ + RISCVGCRState *s =3D RISCV_GCR(dev); + int i; + + /* Update cpc_base to gcr_base + 0x8001 to enable cpc automatically. */ + update_cpc_base(s, s->gcr_base + 0x8001); + + for (i =3D 0; i < s->num_vps; i++) { + s->vps[i].reset_base =3D 0x1FC00000 & GCR_CL_RESET_BASE_MSK; + cpu_set_exception_base(i, get_exception_base(&s->vps[i])); + } +} + +static const VMStateDescription vmstate_riscv_gcr =3D { + .name =3D "riscv-gcr", + .version_id =3D 0, + .minimum_version_id =3D 0, + .fields =3D (VMStateField[]) { + VMSTATE_UINT64(cpc_base, RISCVGCRState), + VMSTATE_END_OF_LIST() + }, +}; + +static const Property riscv_gcr_properties[] =3D { + DEFINE_PROP_UINT32("cluster-id", RISCVGCRState, cluster_id, 0), + DEFINE_PROP_UINT32("num-vp", RISCVGCRState, num_vps, 1), + DEFINE_PROP_UINT32("num-hart", RISCVGCRState, num_hart, 1), + DEFINE_PROP_UINT32("num-core", RISCVGCRState, num_core, 1), + DEFINE_PROP_INT32("gcr-rev", RISCVGCRState, gcr_rev, 0xa00), + DEFINE_PROP_UINT64("gcr-base", RISCVGCRState, gcr_base, GCR_BASE_ADDR), + DEFINE_PROP_LINK("cpc", RISCVGCRState, cpc_mr, TYPE_MEMORY_REGION, + MemoryRegion *), +}; + +static void riscv_gcr_realize(DeviceState *dev, Error **errp) +{ + RISCVGCRState *s =3D RISCV_GCR(dev); + + /* Create local set of registers for each VP */ + s->vps =3D g_new(RISCVGCRVPState, s->num_vps); +} + +static void riscv_gcr_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + device_class_set_props(dc, riscv_gcr_properties); + dc->vmsd =3D &vmstate_riscv_gcr; + device_class_set_legacy_reset(dc, riscv_gcr_reset); + dc->realize =3D riscv_gcr_realize; +} + +static const TypeInfo riscv_gcr_info =3D { + .name =3D TYPE_RISCV_GCR, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(RISCVGCRState), + .instance_init =3D riscv_gcr_init, + .class_init =3D riscv_gcr_class_init, +}; + +static void riscv_gcr_register_types(void) +{ + type_register_static(&riscv_gcr_info); +} + +type_init(riscv_gcr_register_types) diff --git a/hw/misc/riscv_cpc.c b/hw/misc/riscv_cpc.c new file mode 100644 index 0000000000..61352dead5 --- /dev/null +++ b/hw/misc/riscv_cpc.c @@ -0,0 +1,221 @@ +/* + * Cluster Power Controller emulation + * + * Copyright (c) 2016 Imagination Technologies + * + * Copyright (c) 2025 MIPS + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "cpu.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "qemu/timer.h" +#include "hw/sysbus.h" +#include "migration/vmstate.h" + +#include "hw/misc/riscv_cpc.h" +#include "hw/qdev-properties.h" +#include "hw/intc/riscv_aclint.h" + +static inline uint64_t cpc_vp_run_mask(RISCVCPCState *cpc) +{ + if (cpc->num_vp =3D=3D 64) + return 0xffffffffffffffff; + return (1ULL << cpc->num_vp) - 1; +} + +static void riscv_cpu_reset_async_work(CPUState *cs, run_on_cpu_data data) +{ + RISCVCPCState *cpc =3D (RISCVCPCState *) data.host_ptr; + + cpu_reset(cs); + cs->halted =3D 0; + cpc->vp_running |=3D 1ULL << cs->cpu_index; +} + +static void cpc_run_vp(RISCVCPCState *cpc, uint64_t vp_run) +{ + CPUState *cs =3D first_cpu; + + CPU_FOREACH(cs) { + uint64_t i =3D 1ULL << cs->cpu_index; + if (i & vp_run & ~cpc->vp_running) { + /* + * To avoid racing with a CPU we are just kicking off. + * We do the final bit of preparation for the work in + * the target CPUs context. + */ + async_safe_run_on_cpu(cs, riscv_cpu_reset_async_work, + RUN_ON_CPU_HOST_PTR(cpc)); + } + } +} + +static void cpc_stop_vp(RISCVCPCState *cpc, uint64_t vp_stop) +{ + CPUState *cs =3D first_cpu; + + CPU_FOREACH(cs) { + uint64_t i =3D 1ULL << cs->cpu_index; + if (i & vp_stop & cpc->vp_running) { + cpu_interrupt(cs, CPU_INTERRUPT_HALT); + cpc->vp_running &=3D ~i; + } + } +} + +static void cpc_write(void *opaque, hwaddr offset, uint64_t data, + unsigned size) +{ + RISCVCPCState *s =3D opaque; + int cpu_index, c; + + for (c =3D 0; c < s->num_core; c++) { + cpu_index =3D c * s->num_hart + + s->cluster_id * s->num_core * s->num_hart; + if (offset =3D=3D CPC_CL_BASE_OFS + CPC_VP_RUN_OFS + c * 0x100) { + cpc_run_vp(s, (data << cpu_index) & cpc_vp_run_mask(s)); + return; + } + if (offset =3D=3D CPC_CL_BASE_OFS + CPC_VP_STOP_OFS + c * 0x100) { + cpc_stop_vp(s, (data << cpu_index) & cpc_vp_run_mask(s)); + return; + } + } + + switch (offset) { + default: + qemu_log_mask(LOG_UNIMP, + "%s: Bad offset 0x%x\n", __func__, (int)offset); + break; + } + + return; +} + +static uint64_t cpc_read(void *opaque, hwaddr offset, unsigned size) +{ + RISCVCPCState *s =3D opaque; + int c; + + for (c =3D 0; c < s->num_core; c++) { + if (offset =3D=3D CPC_CL_BASE_OFS + CPC_STAT_CONF_OFS + c * 0x100)= { + /* Return the state as U6. */ + return CPC_Cx_STAT_CONF_SEQ_STATE_U6; + } + } + + switch (offset) { + case CPC_CM_STAT_CONF_OFS: + return CPC_Cx_STAT_CONF_SEQ_STATE_U5; + case CPC_MTIME_REG_OFS: + return muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ, + NANOSECONDS_PER_SECOND); + return 0; + default: + qemu_log_mask(LOG_UNIMP, + "%s: Bad offset 0x%x\n", __func__, (int)offset); + return 0; + } +} + +static const MemoryRegionOps cpc_ops =3D { + .read =3D cpc_read, + .write =3D cpc_write, + .endianness =3D DEVICE_NATIVE_ENDIAN, + .impl =3D { + .max_access_size =3D 8, + }, +}; + +static void riscv_cpc_init(Object *obj) +{ + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + RISCVCPCState *s =3D RISCV_CPC(obj); + + memory_region_init_io(&s->mr, OBJECT(s), &cpc_ops, s, "riscv-cpc", + CPC_ADDRSPACE_SZ); + sysbus_init_mmio(sbd, &s->mr); +} + +static void riscv_cpc_realize(DeviceState *dev, Error **errp) +{ + RISCVCPCState *s =3D RISCV_CPC(dev); + + if (s->vp_start_running > cpc_vp_run_mask(s)) { + error_setg(errp, + "incorrect vp_start_running 0x%" PRIx64 " for num_vp = =3D %d", + s->vp_running, s->num_vp); + return; + } +} + +static void riscv_cpc_reset(DeviceState *dev) +{ + RISCVCPCState *s =3D RISCV_CPC(dev); + + /* Reflect the fact that all VPs are halted on reset */ + s->vp_running =3D 0; + + /* Put selected VPs into run state */ + cpc_run_vp(s, s->vp_start_running); +} + +static const VMStateDescription vmstate_riscv_cpc =3D { + .name =3D "riscv-cpc", + .version_id =3D 0, + .minimum_version_id =3D 0, + .fields =3D (VMStateField[]) { + VMSTATE_UINT64(vp_running, RISCVCPCState), + VMSTATE_END_OF_LIST() + }, +}; + +static const Property riscv_cpc_properties[] =3D { + DEFINE_PROP_UINT32("cluster-id", RISCVCPCState, cluster_id, 0x0), + DEFINE_PROP_UINT32("num-vp", RISCVCPCState, num_vp, 0x1), + DEFINE_PROP_UINT32("num-hart", RISCVCPCState, num_hart, 0x1), + DEFINE_PROP_UINT32("num-core", RISCVCPCState, num_core, 0x1), + DEFINE_PROP_UINT64("vp-start-running", RISCVCPCState, vp_start_running= , 0x1), +}; + +static void riscv_cpc_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D riscv_cpc_realize; + device_class_set_legacy_reset(dc, riscv_cpc_reset); + dc->vmsd =3D &vmstate_riscv_cpc; + device_class_set_props(dc, riscv_cpc_properties); +} + +static const TypeInfo riscv_cpc_info =3D { + .name =3D TYPE_RISCV_CPC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(RISCVCPCState), + .instance_init =3D riscv_cpc_init, + .class_init =3D riscv_cpc_class_init, +}; + +static void riscv_cpc_register_types(void) +{ + type_register_static(&riscv_cpc_info); +} + +type_init(riscv_cpc_register_types) diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index e6a0ac1fa1..047c6d8ae7 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -119,3 +119,9 @@ config SPIKE select HTIF select RISCV_ACLINT select SIFIVE_PLIC + +config MIPS_BOSTON_AIA + bool + default y + select PCI_EXPRESS + select PCI_EXPRESS_XILINX diff --git a/hw/riscv/boston-aia.c b/hw/riscv/boston-aia.c new file mode 100644 index 0000000000..e075dca33a --- /dev/null +++ b/hw/riscv/boston-aia.c @@ -0,0 +1,479 @@ +/* + * MIPS Boston-aia development board emulation. + * + * Copyright (c) 2016 Imagination Technologies + * + * Copyright (c) 2025 MIPS + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#include "qemu/osdep.h" +#include "qemu/units.h" + +#include "exec/address-spaces.h" +#include "hw/boards.h" +#include "hw/char/serial-mm.h" +#include "hw/ide/pci.h" +#include "hw/ide/ahci-pci.h" +#include "hw/loader.h" +#include "hw/riscv/cps.h" +#include "hw/pci-host/xilinx-pcie.h" +#include "hw/qdev-properties.h" +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "qemu/log.h" +#include "chardev/char.h" +#include "system/device_tree.h" +#include "system/system.h" +#include "system/qtest.h" +#include "system/runstate.h" + +#include +#include "qom/object.h" + +#define TYPE_MIPS_BOSTON_AIA "mips-boston-aia" +typedef struct BostonState BostonState; +DECLARE_INSTANCE_CHECKER(BostonState, BOSTON, + TYPE_MIPS_BOSTON_AIA) + +enum { + BOSTON_PCIE2, + BOSTON_PCIE2_MMIO, + BOSTON_PLATREG, + BOSTON_UART, + BOSTON_LCD, + BOSTON_FLASH, + BOSTON_HIGHDDR, +}; + +static const MemMapEntry boston_memmap[] =3D { + [BOSTON_PCIE2] =3D { 0x14000000, 0x2000000 }, + [BOSTON_PCIE2_MMIO] =3D { 0x16000000, 0x100000 }, + [BOSTON_PLATREG] =3D { 0x17ffd000, 0x1000 }, + [BOSTON_UART] =3D { 0x17ffe000, 0x20 }, + [BOSTON_LCD] =3D { 0x17fff000, 0x8 }, + [BOSTON_FLASH] =3D { 0x18000000, 0x8000000 }, + [BOSTON_HIGHDDR] =3D { 0x80000000, 0x0 }, +}; + +/* Interrupt numbers for APLIC. */ +#define UART_INT 4 +#define PCIE2_INT 7 + +struct BostonState { + SysBusDevice parent_obj; + + MachineState *mach; + RISCVCPSState cps; + SerialMM *uart; + + CharBackend lcd_display; + char lcd_content[8]; + bool lcd_inited; +}; + +enum boston_plat_reg { + PLAT_FPGA_BUILD =3D 0x00, + PLAT_CORE_CL =3D 0x04, + PLAT_WRAPPER_CL =3D 0x08, + PLAT_SYSCLK_STATUS =3D 0x0c, + PLAT_SOFTRST_CTL =3D 0x10, +#define PLAT_SOFTRST_CTL_SYSRESET (1 << 4) + PLAT_DDR3_STATUS =3D 0x14, +#define PLAT_DDR3_STATUS_LOCKED (1 << 0) +#define PLAT_DDR3_STATUS_CALIBRATED (1 << 2) +#define PLAT_DDR3_INTERFACE_RESET (1 << 3) + PLAT_PCIE_STATUS =3D 0x18, +#define PLAT_PCIE_STATUS_PCIE0_LOCKED (1 << 0) +#define PLAT_PCIE_STATUS_PCIE1_LOCKED (1 << 8) +#define PLAT_PCIE_STATUS_PCIE2_LOCKED (1 << 16) + PLAT_FLASH_CTL =3D 0x1c, + PLAT_SPARE0 =3D 0x20, + PLAT_SPARE1 =3D 0x24, + PLAT_SPARE2 =3D 0x28, + PLAT_SPARE3 =3D 0x2c, + PLAT_MMCM_DIV =3D 0x30, +#define PLAT_MMCM_DIV_CLK0DIV_SHIFT 0 +#define PLAT_MMCM_DIV_INPUT_SHIFT 8 +#define PLAT_MMCM_DIV_MUL_SHIFT 16 +#define PLAT_MMCM_DIV_CLK1DIV_SHIFT 24 + PLAT_BUILD_CFG =3D 0x34, +#define PLAT_BUILD_CFG_IOCU_EN (1 << 0) +#define PLAT_BUILD_CFG_PCIE0_EN (1 << 1) +#define PLAT_BUILD_CFG_PCIE1_EN (1 << 2) +#define PLAT_BUILD_CFG_PCIE2_EN (1 << 3) + PLAT_DDR_CFG =3D 0x38, +#define PLAT_DDR_CFG_SIZE (0xf << 0) +#define PLAT_DDR_CFG_MHZ (0xfff << 4) + PLAT_NOC_PCIE0_ADDR =3D 0x3c, + PLAT_NOC_PCIE1_ADDR =3D 0x40, + PLAT_NOC_PCIE2_ADDR =3D 0x44, + PLAT_SYS_CTL =3D 0x48, +}; + +static void boston_lcd_event(void *opaque, QEMUChrEvent event) +{ + BostonState *s =3D opaque; + if (event =3D=3D CHR_EVENT_OPENED && !s->lcd_inited) { + qemu_chr_fe_printf(&s->lcd_display, " "); + s->lcd_inited =3D true; + } +} + +static uint64_t boston_lcd_read(void *opaque, hwaddr addr, + unsigned size) +{ + BostonState *s =3D opaque; + uint64_t val =3D 0; + + switch (size) { + case 8: + val |=3D (uint64_t)s->lcd_content[(addr + 7) & 0x7] << 56; + val |=3D (uint64_t)s->lcd_content[(addr + 6) & 0x7] << 48; + val |=3D (uint64_t)s->lcd_content[(addr + 5) & 0x7] << 40; + val |=3D (uint64_t)s->lcd_content[(addr + 4) & 0x7] << 32; + /* fall through */ + case 4: + val |=3D (uint64_t)s->lcd_content[(addr + 3) & 0x7] << 24; + val |=3D (uint64_t)s->lcd_content[(addr + 2) & 0x7] << 16; + /* fall through */ + case 2: + val |=3D (uint64_t)s->lcd_content[(addr + 1) & 0x7] << 8; + /* fall through */ + case 1: + val |=3D (uint64_t)s->lcd_content[(addr + 0) & 0x7]; + break; + } + + return val; +} + +static void boston_lcd_write(void *opaque, hwaddr addr, + uint64_t val, unsigned size) +{ + BostonState *s =3D opaque; + + switch (size) { + case 8: + s->lcd_content[(addr + 7) & 0x7] =3D val >> 56; + s->lcd_content[(addr + 6) & 0x7] =3D val >> 48; + s->lcd_content[(addr + 5) & 0x7] =3D val >> 40; + s->lcd_content[(addr + 4) & 0x7] =3D val >> 32; + /* fall through */ + case 4: + s->lcd_content[(addr + 3) & 0x7] =3D val >> 24; + s->lcd_content[(addr + 2) & 0x7] =3D val >> 16; + /* fall through */ + case 2: + s->lcd_content[(addr + 1) & 0x7] =3D val >> 8; + /* fall through */ + case 1: + s->lcd_content[(addr + 0) & 0x7] =3D val; + break; + } + + qemu_chr_fe_printf(&s->lcd_display, + "\r%-8.8s", s->lcd_content); +} + +static const MemoryRegionOps boston_lcd_ops =3D { + .read =3D boston_lcd_read, + .write =3D boston_lcd_write, + .endianness =3D DEVICE_NATIVE_ENDIAN, +}; + +static uint64_t boston_platreg_read(void *opaque, hwaddr addr, + unsigned size) +{ + BostonState *s =3D opaque; + uint32_t gic_freq, val; + + if (size !=3D 4) { + qemu_log_mask(LOG_UNIMP, "%uB platform register read\n", size); + return 0; + } + + switch (addr & 0xffff) { + case PLAT_FPGA_BUILD: + case PLAT_CORE_CL: + case PLAT_WRAPPER_CL: + return 0; + case PLAT_DDR3_STATUS: + return PLAT_DDR3_STATUS_LOCKED | PLAT_DDR3_STATUS_CALIBRATED + | PLAT_DDR3_INTERFACE_RESET; + case PLAT_MMCM_DIV: + gic_freq =3D 25000000 / 1000000; + val =3D gic_freq << PLAT_MMCM_DIV_INPUT_SHIFT; + val |=3D 1 << PLAT_MMCM_DIV_MUL_SHIFT; + val |=3D 1 << PLAT_MMCM_DIV_CLK0DIV_SHIFT; + val |=3D 1 << PLAT_MMCM_DIV_CLK1DIV_SHIFT; + return val; + case PLAT_BUILD_CFG: + val =3D PLAT_BUILD_CFG_PCIE0_EN; + val |=3D PLAT_BUILD_CFG_PCIE1_EN; + val |=3D PLAT_BUILD_CFG_PCIE2_EN; + return val; + case PLAT_DDR_CFG: + val =3D s->mach->ram_size / GiB; + assert(!(val & ~PLAT_DDR_CFG_SIZE)); + val |=3D PLAT_DDR_CFG_MHZ; + return val; + default: + qemu_log_mask(LOG_UNIMP, "Read platform register 0x%" HWADDR_PRIx = "\n", + addr & 0xffff); + return 0; + } +} + +static void boston_platreg_write(void *opaque, hwaddr addr, + uint64_t val, unsigned size) +{ + if (size !=3D 4) { + qemu_log_mask(LOG_UNIMP, "%uB platform register write\n", size); + return; + } + + switch (addr & 0xffff) { + case PLAT_FPGA_BUILD: + case PLAT_CORE_CL: + case PLAT_WRAPPER_CL: + case PLAT_DDR3_STATUS: + case PLAT_PCIE_STATUS: + case PLAT_MMCM_DIV: + case PLAT_BUILD_CFG: + case PLAT_DDR_CFG: + /* read only */ + break; + case PLAT_SOFTRST_CTL: + if (val & PLAT_SOFTRST_CTL_SYSRESET) { + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); + } + break; + default: + qemu_log_mask(LOG_UNIMP, "Write platform register 0x%" HWADDR_PRIx + " =3D 0x%" PRIx64 "\n", addr & 0xffff, val); + break; + } +} + +static const MemoryRegionOps boston_platreg_ops =3D { + .read =3D boston_platreg_read, + .write =3D boston_platreg_write, + .endianness =3D DEVICE_NATIVE_ENDIAN, +}; + +static const TypeInfo boston_device =3D { + .name =3D TYPE_MIPS_BOSTON_AIA, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(BostonState), +}; + +static void boston_register_types(void) +{ + type_register_static(&boston_device); +} +type_init(boston_register_types) + +#define NUM_INSNS 6 +static void gen_firmware(uint32_t *p) +{ + int i; + uint32_t reset_vec[NUM_INSNS] =3D { + /* CM relocate */ + 0x1fb802b7, /* li t0,0x1fb80000 */ + 0x16100337, /* li t1,0x16100000 */ + 0x0062b423, /* sd t1,8(t0) */ + /* Jump to 0x80000000 */ + 0x00100293, /* li t0,1 */ + 0x01f29293, /* slli t0,t0,1f */ + 0x00028067 /* jr t0 */ + }; + + for (i =3D 0; i < NUM_INSNS; i ++) + *p++ =3D reset_vec[i]; +} + +static inline XilinxPCIEHost * +xilinx_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr, + hwaddr cfg_base, uint64_t cfg_size, + hwaddr mmio_base, uint64_t mmio_size, + qemu_irq irq) +{ + DeviceState *dev; + MemoryRegion *cfg, *mmio; + + dev =3D qdev_new(TYPE_XILINX_PCIE_HOST); + + qdev_prop_set_uint32(dev, "bus_nr", bus_nr); + qdev_prop_set_uint64(dev, "cfg_base", cfg_base); + qdev_prop_set_uint64(dev, "cfg_size", cfg_size); + qdev_prop_set_uint64(dev, "mmio_base", mmio_base); + qdev_prop_set_uint64(dev, "mmio_size", mmio_size); + + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + + cfg =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0); + memory_region_add_subregion_overlap(sys_mem, cfg_base, cfg, 0); + + mmio =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 1); + memory_region_add_subregion_overlap(sys_mem, 0, mmio, 0); + + qdev_connect_gpio_out_named(dev, "interrupt_out", 0, irq); + + return XILINX_PCIE_HOST(dev); +} + +static void boston_mach_init(MachineState *machine) +{ + DeviceState *dev; + BostonState *s; + MemoryRegion *flash, *ddr_low_alias, *lcd, *platreg; + MemoryRegion *sys_mem =3D get_system_memory(); + XilinxPCIEHost *pcie2; + PCIDevice *pdev; + AHCIPCIState *ich9; + DriveInfo *hd[6]; + Chardev *chr; + int fw_size; + + if ((machine->ram_size % GiB) || + (machine->ram_size > (4 * GiB))) { + error_report("Memory size must be 1GB, 2GB, 3GB, or 4GB"); + exit(1); + } + + if (machine->smp.cpus / machine->smp.cores / machine->smp.threads > 1)= { + error_report("Invalid -smp x,cores=3Dy,threads=3Dz. The max number= of clusters supported is 1"); + exit(1); + } + + dev =3D qdev_new(TYPE_MIPS_BOSTON_AIA); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + + s =3D BOSTON(dev); + s->mach =3D machine; + + object_initialize_child(OBJECT(machine), "cps", &s->cps, TYPE_RISCV_CP= S); + object_property_set_str(OBJECT(&s->cps), "cpu-type", machine->cpu_type, + &error_fatal); + object_property_set_uint(OBJECT(&s->cps), "num-vp", machine->smp.cpus, + &error_fatal); + object_property_set_uint(OBJECT(&s->cps), "num-hart", machine->smp.thr= eads, + &error_fatal); + object_property_set_uint(OBJECT(&s->cps), "num-core", machine->smp.cor= es, + &error_fatal); + object_property_set_uint(OBJECT(&s->cps), "gcr-base", GCR_BASE_ADDR, + &error_fatal); + sysbus_realize(SYS_BUS_DEVICE(&s->cps), &error_fatal); + + sysbus_mmio_map_overlap(SYS_BUS_DEVICE(&s->cps), 0, 0, 1); + + flash =3D g_new(MemoryRegion, 1); + memory_region_init_rom(flash, NULL, "boston.flash", + boston_memmap[BOSTON_FLASH].size, &error_fatal); + memory_region_add_subregion_overlap(sys_mem, + boston_memmap[BOSTON_FLASH].base, + flash, 0); + + memory_region_add_subregion_overlap(sys_mem, + boston_memmap[BOSTON_HIGHDDR].base, + machine->ram, 0); + + ddr_low_alias =3D g_new(MemoryRegion, 1); + memory_region_init_alias(ddr_low_alias, NULL, "boston_low.ddr", + machine->ram, 0, + MIN(machine->ram_size, (256 * MiB))); + memory_region_add_subregion_overlap(sys_mem, 0, ddr_low_alias, 0); + + pcie2 =3D xilinx_pcie_init(sys_mem, 2, + boston_memmap[BOSTON_PCIE2].base, + boston_memmap[BOSTON_PCIE2].size, + boston_memmap[BOSTON_PCIE2_MMIO].base, + boston_memmap[BOSTON_PCIE2_MMIO].size, + qdev_get_gpio_in(s->cps.aplic, PCIE2_INT)); + + platreg =3D g_new(MemoryRegion, 1); + memory_region_init_io(platreg, NULL, &boston_platreg_ops, s, + "boston-platregs", + boston_memmap[BOSTON_PLATREG].size); + memory_region_add_subregion_overlap(sys_mem, + boston_memmap[BOSTON_PLATREG].base, platreg, 0); + + s->uart =3D serial_mm_init(sys_mem, boston_memmap[BOSTON_UART].base, 2, + qdev_get_gpio_in(s->cps.aplic, UART_INT), 100= 00000, + serial_hd(0), DEVICE_NATIVE_ENDIAN); + + lcd =3D g_new(MemoryRegion, 1); + memory_region_init_io(lcd, NULL, &boston_lcd_ops, s, "boston-lcd", 0x8= ); + memory_region_add_subregion_overlap(sys_mem, + boston_memmap[BOSTON_LCD].base, lc= d, 0); + + chr =3D qemu_chr_new("lcd", "vc:320x240", NULL); + qemu_chr_fe_init(&s->lcd_display, chr, NULL); + qemu_chr_fe_set_handlers(&s->lcd_display, NULL, NULL, + boston_lcd_event, NULL, s, NULL, true); + + pdev =3D pci_create_simple_multifunction(&PCI_BRIDGE(&pcie2->root)->se= c_bus, + PCI_DEVFN(0, 0), TYPE_ICH9_AHCI= ); + ich9 =3D ICH9_AHCI(pdev); + g_assert(ARRAY_SIZE(hd) =3D=3D ich9->ahci.ports); + ide_drive_get(hd, ich9->ahci.ports); + ahci_ide_create_devs(&ich9->ahci, hd); + + if (machine->firmware) { + fw_size =3D load_image_targphys(machine->firmware, + 0x1fc00000, 4 * MiB); + if (fw_size =3D=3D -1) { + error_report("unable to load firmware image '%s'", + machine->firmware); + exit(1); + } + if (machine->kernel_filename) { + fw_size =3D load_image_targphys(machine->kernel_filename, + 0x80000000, 64 * MiB); + if (fw_size =3D=3D -1) { + error_report("unable to load kernel image '%s'", + machine->kernel_filename); + exit(1); + } + } + } else if (machine->kernel_filename) { + fw_size =3D load_image_targphys(machine->kernel_filename, + 0x80000000, 64 * MiB); + if (fw_size =3D=3D -1) { + error_report("unable to load kernel image '%s'", + machine->kernel_filename); + exit(1); + } + + gen_firmware(memory_region_get_ram_ptr(flash) + 0x7c00000); + } else if (!qtest_enabled()) { + error_report("Please provide either a -kernel or -bios argument"); + exit(1); + } +} + +static void boston_mach_class_init(MachineClass *mc) +{ + mc->desc =3D "MIPS Boston-aia"; + mc->init =3D boston_mach_init; + mc->block_default_type =3D IF_IDE; + mc->default_ram_size =3D 2 * GiB; + mc->default_ram_id =3D "boston.ddr"; + mc->max_cpus =3D MAX_HARTS; + mc->default_cpu_type =3D TYPE_RISCV_CPU_MIPS_P8700; +} + +DEFINE_MACHINE("boston-aia", boston_mach_class_init) diff --git a/hw/riscv/cps.c b/hw/riscv/cps.c new file mode 100644 index 0000000000..f982b32ec8 --- /dev/null +++ b/hw/riscv/cps.c @@ -0,0 +1,184 @@ +/* + * Coherent Processing System emulation. + * + * Copyright (c) 2016 Imagination Technologies + * + * Copyright (c) 2025 MIPS + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "qemu/module.h" +#include "hw/riscv/cps.h" +#include "hw/qdev-properties.h" +#include "system/reset.h" +#include "hw/intc/riscv_aclint.h" +#include "hw/intc/riscv_aplic.h" +#include "hw/intc/riscv_imsic.h" +#include "hw/pci/msi.h" + +static void riscv_cps_init(Object *obj) +{ + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + RISCVCPSState *s =3D RISCV_CPS(obj); + + /* + * Cover entire address space as there do not seem to be any + * constraints for the base address of CPC . + */ + memory_region_init(&s->container, obj, "mips-cps-container", UINT64_MA= X); + sysbus_init_mmio(sbd, &s->container); +} + +static void main_cpu_reset(void *opaque) +{ + RISCVCPU *cpu =3D opaque; + CPUState *cs =3D CPU(cpu); + + cpu_reset(cs); +} + +static void riscv_cps_realize(DeviceState *dev, Error **errp) +{ + RISCVCPSState *s =3D RISCV_CPS(dev); + RISCVCPU *cpu; + int i; + + /* Set up cpu_index and mhartid for avaiable CPUs. */ + int harts_in_cluster =3D s->num_hart * s->num_core; + int num_of_clusters =3D s->num_vp / harts_in_cluster; + for (i =3D 0; i < s->num_vp; i++) { + cpu =3D RISCV_CPU(object_new(s->cpu_type)); + + /* All VPs are halted on reset. Leave powering up to CPC. */ + object_property_set_bool(OBJECT(cpu), "start-powered-off", true, + &error_abort); + + if (!qdev_realize_and_unref(DEVICE(cpu), NULL, errp)) { + return; + } + + /* Set up mhartid */ + int cluster_id =3D i / harts_in_cluster; + int hart_id =3D (i % harts_in_cluster) % s->num_hart; + int core_id =3D (i % harts_in_cluster) / s->num_hart; + int mhartid =3D (cluster_id << MHARTID_CLUSTER_SHIFT) + + (core_id << MHARTID_CORE_SHIFT) + + (hart_id << MHARTID_HART_SHIFT); + cpu->env.mhartid =3D mhartid; + qemu_register_reset(main_cpu_reset, cpu); + } + + /* Cluster Power Controller */ + object_initialize_child(OBJECT(dev), "cpc", &s->cpc, TYPE_RISCV_CPC); + object_property_set_uint(OBJECT(&s->cpc), "cluster-id", 0, + &error_abort); + object_property_set_uint(OBJECT(&s->cpc), "num-vp", s->num_vp, + &error_abort); + object_property_set_uint(OBJECT(&s->cpc), "num-hart", s->num_hart, + &error_abort); + object_property_set_uint(OBJECT(&s->cpc), "num-core", s->num_core, + &error_abort); + object_property_set_int(OBJECT(&s->cpc), "vp-start-running", 1, + &error_abort); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->cpc), errp)) { + return; + } + + memory_region_add_subregion(&s->container, 0, + sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cpc)= , 0)); + + /* Global Configuration Registers */ + object_initialize_child(OBJECT(dev), "gcr", &s->gcr, TYPE_RISCV_GCR); + object_property_set_uint(OBJECT(&s->gcr), "cluster-id", 0, + &error_abort); + object_property_set_uint(OBJECT(&s->gcr), "num-vp", s->num_vp, + &error_abort); + object_property_set_int(OBJECT(&s->gcr), "gcr-rev", 0xa00, + &error_abort); + object_property_set_int(OBJECT(&s->gcr), "gcr-base", s->gcr_base, + &error_abort); + object_property_set_link(OBJECT(&s->gcr), "cpc", OBJECT(&s->cpc.mr), + &error_abort); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->gcr), errp)) { + return; + } + + memory_region_add_subregion(&s->container, s->gcr_base, + sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->gcr)= , 0)); + + for (i =3D 0; i < num_of_clusters; i ++) { + uint64_t cm_base =3D GLOBAL_CM_BASE + (CM_SIZE * i); + uint32_t hartid_base =3D i << MHARTID_CLUSTER_SHIFT; + s->aplic =3D riscv_aplic_create(cm_base + AIA_PLIC_M_OFFSET, + AIA_PLIC_M_SIZE, + hartid_base, // hartid_base + MAX_HARTS, // num_harts + APLIC_NUM_SOURCES, + APLIC_NUM_PRIO_BITS, + false, true, NULL); + riscv_aplic_create(cm_base + AIA_PLIC_S_OFFSET, + AIA_PLIC_S_SIZE, + hartid_base, // hartid_base + MAX_HARTS, // num_harts + APLIC_NUM_SOURCES, + APLIC_NUM_PRIO_BITS, + false, false, s->aplic); + /* PLIC changes msi_nonbroken to ture. We revert the change. */ + msi_nonbroken =3D false; + riscv_aclint_swi_create(cm_base + AIA_CLINT_OFFSET, + hartid_base, MAX_HARTS, false); + riscv_aclint_mtimer_create(cm_base + AIA_CLINT_OFFSET + + RISCV_ACLINT_SWI_SIZE, + RISCV_ACLINT_DEFAULT_MTIMER_SIZE, + hartid_base, + MAX_HARTS, + RISCV_ACLINT_DEFAULT_MTIMECMP, + RISCV_ACLINT_DEFAULT_MTIME, + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ, fal= se); + } +} + +static const Property riscv_cps_properties[] =3D { + DEFINE_PROP_UINT32("num-vp", RISCVCPSState, num_vp, 1), + DEFINE_PROP_UINT32("num-hart", RISCVCPSState, num_hart, 1), + DEFINE_PROP_UINT32("num-core", RISCVCPSState, num_core, 1), + DEFINE_PROP_UINT64("gcr-base", RISCVCPSState, gcr_base, GCR_BASE_ADDR), + DEFINE_PROP_STRING("cpu-type", RISCVCPSState, cpu_type), +}; + +static void riscv_cps_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D riscv_cps_realize; + device_class_set_props(dc, riscv_cps_properties); +} + +static const TypeInfo riscv_cps_info =3D { + .name =3D TYPE_RISCV_CPS, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(RISCVCPSState), + .instance_init =3D riscv_cps_init, + .class_init =3D riscv_cps_class_init, +}; + +static void riscv_cps_register_types(void) +{ + type_register_static(&riscv_cps_info); +} + +type_init(riscv_cps_register_types) diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index c22f3a7216..76a038f60e 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -13,5 +13,6 @@ riscv_ss.add(when: 'CONFIG_ACPI', if_true: files('virt-ac= pi-build.c')) riscv_ss.add(when: 'CONFIG_RISCV_IOMMU', if_true: files( 'riscv-iommu.c', 'riscv-iommu-pci.c', 'riscv-iommu-sys.c', 'riscv-iommu-h= pm.c')) riscv_ss.add(when: 'CONFIG_MICROBLAZE_V', if_true: files('microblaze-v-gen= eric.c')) +riscv_ss.add(when: 'CONFIG_MIPS_BOSTON_AIA', if_true: files('boston-aia.c'= , 'cps.c')) =20 hw_arch +=3D {'riscv': riscv_ss} diff --git a/include/hw/misc/riscv_cmgcr.h b/include/hw/misc/riscv_cmgcr.h new file mode 100644 index 0000000000..1bd2c21196 --- /dev/null +++ b/include/hw/misc/riscv_cmgcr.h @@ -0,0 +1,75 @@ +/* + * This file is subject to the terms and conditions of the GNU General Pub= lic + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2015 Imagination Technologies + * + * Copyright (C) 2025 MIPS + * + */ + +#ifndef RISCV_CMGCR_H +#define RISCV_CMGCR_H + +#include "hw/sysbus.h" +#include "qom/object.h" + +#define TYPE_RISCV_GCR "riscv-gcr" +OBJECT_DECLARE_SIMPLE_TYPE(RISCVGCRState, RISCV_GCR) + +#define GCR_BASE_ADDR 0x1fb80000ULL +#define GCR_ADDRSPACE_SZ 0x8000 + +/* Offsets to register blocks */ +#define RISCV_GCB_OFS 0x0000 /* Global Control Block */ +#define RISCV_CLCB_OFS 0x2000 /* Core Control Block */ + +/* Global Control Block Register Map */ +#define GCR_CONFIG_OFS 0x0000 +#define GCR_BASE_OFS 0x0008 +#define GCR_REV_OFS 0x0030 +#define GCR_CPC_STATUS_OFS 0x00F0 +#define GCR_L2_CONFIG_OFS 0x0130 + +/* GCR_L2_CONFIG register fields */ +#define GCR_L2_CONFIG_BYPASS_SHF 20 +#define GCR_L2_CONFIG_BYPASS_MSK ((0x1ULL) << GCR_L2_CONFIG_BYPASS_SHF) + +/* GCR_BASE register fields */ +#define GCR_BASE_GCRBASE_MSK 0xffffffff8000ULL + +/* GCR_CPC_BASE register fields */ +#define GCR_CPC_BASE_CPCEN_MSK 1 +#define GCR_CPC_BASE_CPCBASE_MSK 0xFFFFFFFF8000ULL +#define GCR_CPC_BASE_MSK (GCR_CPC_BASE_CPCEN_MSK | GCR_CPC_BASE_CPCBASE_MS= K) + +/* GCR_CL_RESETBASE_OFS register fields */ +#define GCR_CL_RESET_BASE_RESETBASE_MSK 0xFFFFFFFFFFFFF000U +#define GCR_CL_RESET_BASE_MSK GCR_CL_RESET_BASE_RESETBASE_MSK + +typedef struct RISCVGCRVPState RISCVGCRVPState; +struct RISCVGCRVPState { + uint64_t reset_base; +}; + +typedef struct RISCVGCRState RISCVGCRState; +struct RISCVGCRState { + SysBusDevice parent_obj; + + int32_t gcr_rev; + uint32_t cluster_id; + uint32_t num_vps; + uint32_t num_hart; + uint32_t num_core; + hwaddr gcr_base; + MemoryRegion iomem; + MemoryRegion *cpc_mr; + + uint64_t cpc_base; + + /* VP Local/Other Registers */ + RISCVGCRVPState *vps; +}; + +#endif /* RISCV_CMGCR_H */ diff --git a/include/hw/misc/riscv_cpc.h b/include/hw/misc/riscv_cpc.h new file mode 100644 index 0000000000..66eba0a525 --- /dev/null +++ b/include/hw/misc/riscv_cpc.h @@ -0,0 +1,66 @@ +/* + * Cluster Power Controller emulation + * + * Copyright (c) 2016 Imagination Technologies + * + * Copyright (c) 2025 MIPS + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#ifndef RISCV_CPC_H +#define RISCV_CPC_H + +#include "hw/sysbus.h" +#include "qom/object.h" + +#define CPC_ADDRSPACE_SZ 0x6000 + +/* CPC global register offsets relative to base address */ +#define CPC_MTIME_REG_OFS 0x50 + +#define CPC_CM_STAT_CONF_OFS 0x1008 + +/* CPC blocks offsets relative to base address */ +#define CPC_CL_BASE_OFS 0x2000 + +/* CPC register offsets relative to block offsets */ +#define CPC_STAT_CONF_OFS 0x08 +#define CPC_VP_STOP_OFS 0x20 +#define CPC_VP_RUN_OFS 0x28 +#define CPC_VP_RUNNING_OFS 0x30 + +#define SEQ_STATE_BIT 19 +#define SEQ_STATE_U5 0x6 +#define SEQ_STATE_U6 0x7 +#define CPC_Cx_STAT_CONF_SEQ_STATE_U5 (SEQ_STATE_U5 << SEQ_STATE_BIT) +#define CPC_Cx_STAT_CONF_SEQ_STATE_U6 (SEQ_STATE_U6 << SEQ_STATE_BIT) + +#define TYPE_RISCV_CPC "riscv-cpc" +OBJECT_DECLARE_SIMPLE_TYPE(RISCVCPCState, RISCV_CPC) + +typedef struct RISCVCPCState { + SysBusDevice parent_obj; + + uint32_t cluster_id; + uint32_t num_vp; + uint32_t num_hart; + uint32_t num_core; + uint64_t vp_start_running; /* VPs running from restart */ + + MemoryRegion mr; + uint64_t vp_running; /* Indicates which VPs are in the run state */ +} RISCVCPCState; + +#endif /* RISCV_CPC_H */ diff --git a/include/hw/riscv/cps.h b/include/hw/riscv/cps.h new file mode 100644 index 0000000000..7caa60fb18 --- /dev/null +++ b/include/hw/riscv/cps.h @@ -0,0 +1,72 @@ +/* + * Coherent Processing System emulation. + * + * Copyright (c) 2016 Imagination Technologies + * + * Copyright (c) 2025 MIPS + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#ifndef RISCV_CPS_H +#define RISCV_CPS_H + +#include "hw/sysbus.h" +#include "hw/misc/riscv_cmgcr.h" +#include "hw/misc/riscv_cpc.h" +#include "target/riscv/cpu.h" +#include "qom/object.h" + +#define TYPE_RISCV_CPS "riscv-cps" +OBJECT_DECLARE_SIMPLE_TYPE(RISCVCPSState, RISCV_CPS) + +/* The model supports up to 64 harts. */ +#define MAX_HARTS 64 + +/* The global CM base for the boston-aia model. */ +#define GLOBAL_CM_BASE 0x16100000 +/* The CM block is 512 KiB. */ +#define CM_SIZE (1 << 19) + +/* The mhartid bits has cluster at bit 16, core at bit 4, and hart at + bit 0. */ +#define MHARTID_CLUSTER_SHIFT 16 +#define MHARTID_CORE_SHIFT 4 +#define MHARTID_HART_SHIFT 0 + +#define APLIC_NUM_SOURCES 0x35 // Arbitray maximum number of interrupts +#define APLIC_NUM_PRIO_BITS 3 +#define AIA_PLIC_M_OFFSET 0x40000 +#define AIA_PLIC_M_SIZE 0x8000 +#define AIA_PLIC_S_OFFSET 0x60000 +#define AIA_PLIC_S_SIZE 0x8000 +#define AIA_CLINT_OFFSET 0x50000 + +typedef struct RISCVCPSState { + SysBusDevice parent_obj; + + uint32_t num_vp; + uint32_t num_hart; + uint32_t num_core; + uint64_t gcr_base; + char *cpu_type; + + MemoryRegion container; + RISCVGCRState gcr; + RISCVCPCState cpc; + + DeviceState *aplic; +} RISCVCPSState; + +#endif diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index f403a743b2..1e06e407ed 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -637,6 +637,7 @@ target_ulong riscv_cpu_get_fflags(CPURISCVState *env); void riscv_cpu_set_fflags(CPURISCVState *env, target_ulong); =20 void cpu_set_exception_base(int vp_index, target_ulong address); + #include "exec/cpu-all.h" =20 FIELD(TB_FLAGS, MEM_IDX, 0, 3) --=20 2.34.1 From nobody Sat Nov 15 23:41:52 2025 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=htecgroup.com); dmarc=pass(p=reject dis=none) header.from=htecgroup.com ARC-Seal: i=2; a=rsa-sha256; t=1745590064; cv=pass; d=zohomail.com; s=zohoarc; b=XMvMrA3hLwtlgSuZCnu+NyJN9ZX9moaOZ2qxS1R1wfgjt2VlKsy2C97hppeJN7kpV0P76NAY2U83ZNwDiGCn7it/knIqEC3DdAKdZZo48kz3c60EDJMAui1RmIw9ZOrI8msAtQMoeraPXfV1bJeFWsSKjt/QYdchR+zDuu4uQ0I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745590064; 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=7FbZl7E7MGpP6O9uTPS0ZduTlFeAzR4/SYRIyPDbsQ0=; b=HLeBk+chYxcrItgNp+Jnxom61Mm24o91wodMW0VtFeA4fi9XaNyptr3Bdg89Vv+csFqoThrqpM/tXQ2es6JAaMHYU/5wzo9Uam1MoVj4PdBz43otKb/AhTtuMtFkQEXtGJmhbMMZrBu5pnLzibxTc66xYkcFoqx0mcrPpSHmt4A= 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=htecgroup.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1745590064888880.6884176653334; Fri, 25 Apr 2025 07:07:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u8Jfp-0004BA-Bt; Fri, 25 Apr 2025 10:05:01 -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 ) id 1u8Hl5-0001eP-Ki for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:19 -0400 Received: from mail-vi1eur05on20702.outbound.protection.outlook.com ([2a01:111:f403:2613::702] helo=EUR05-VI1-obe.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 1u8Hl3-0001Mx-MH for qemu-devel@nongnu.org; Fri, 25 Apr 2025 08:02:19 -0400 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com (2603:10a6:20b:4fb::5) by AM0PR09MB3713.eurprd09.prod.outlook.com (2603:10a6:208:180::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Fri, 25 Apr 2025 12:01:47 +0000 Received: from AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a]) by AS4PR09MB6518.eurprd09.prod.outlook.com ([fe80::ad50:891a:847c:580a%7]) with mapi id 15.20.8678.025; Fri, 25 Apr 2025 12:01:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k28O38k9e67SvZyHkbakPUbdmssvB0jA8zgON0JDi13seYBcCfxEqV3x+ssqSen0VqnQ+GGkQq/K5gG0kWhnLWUsP92wXrcy6+6b/E582hjWCQJ92sazHyHTedJpgU8/6d/MB8aUcDKikfbMVseqQS5ssoYLipYIovLk0EAUs5IVe07im6VeDdMSgtbtsPk87qRY49wZR6PAMu/c9wKjCGeXgHwCPXc04vTXibpSY3kURxcY+CWNJrnxYlyAWYnOzNBeZrXQHeSjm8wIkitjBrqTbIkxQuj15WUHs7lilX15bDqH87u9+lVQechgtpETgF1jIXUsJ1mstjqO68DOyw== 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=7FbZl7E7MGpP6O9uTPS0ZduTlFeAzR4/SYRIyPDbsQ0=; b=CILiqpSxsvZU6e9SaOne+QdttEQmUKbpEuHPUwoP7qPfiKrF9/U9g+LfoW5FDrwcnE5ZYoOIQt8U5Ph4tqEeYwDC3fZc9aZUsKl9SgyQpaE6Bhb+PSDBrRxdKYZtld8xturhjGi8l5YpbzangzobHd/U1bwJ7sWTgz9WObxqlNJGrLYinVLUQD0P06fBEIKoIeoeu2kOvFY1XrVhCZBLYZoESYREW9k29FS/csqeF4NVVh5fQdErrK+WwsJQdUoxu1VTYBjZDN3R2UFHfmB4Uiy168qB7iCUG0RN/31+mJzYIGP7MRnIK54e7TmDZVJGkYNmXAJWKzFupa9HPHt73A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7FbZl7E7MGpP6O9uTPS0ZduTlFeAzR4/SYRIyPDbsQ0=; b=ODGeInHKhOlFEV7stwsXkJkksqxFz1n9VctwS5OBn6RvUnSsKnR1Un42Ah0vEb6aUbESKu2IuwHp1EK4l3NUtnx0nBoPclGxouOFVkBA6oyFv8YKwfRRrWpTrzaQKGmyhIFbUEKdvNXKdcjvXa/WyD7wGD57g8wOdBZ0y8MAcgWd2fnaitR6Hm/MOSfKtcSi0D3DPxCpnFmY4ISQKebL3M3P3zj9Ez2G5xR95af5NmHYh83RXOYQw1Qdo/Ql6VgxmTyJEFvgZ4SKY3Ph3bbnAxi3NdqulWlKNwpgT/I5fKHlWEXk45YsKXM30C9FvhXZ3816tBn970DGWtgGNMmzsg== From: Djordje Todorovic To: "qemu-devel@nongnu.org" CC: Chao-ying Fu , Djordje Todorovic Subject: [PATCH 9/9] hw/riscv: Add a network device e1000e to the boston-aia Thread-Topic: [PATCH 9/9] hw/riscv: Add a network device e1000e to the boston-aia Thread-Index: AQHbtdnR2nq5Co130kOgqDZdZa37gg== Date: Fri, 25 Apr 2025 12:01:47 +0000 Message-ID: <20250425115912.912889-10-djordje.todorovic@htecgroup.com> References: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> In-Reply-To: <20250425115912.912889-1-djordje.todorovic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS4PR09MB6518:EE_|AM0PR09MB3713:EE_ x-ms-office365-filtering-correlation-id: e0756760-e119-450a-b398-08dd83f0f4ba x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?d03+uGaeVlHlk0MTtaiGY1GJIDF1ayNmhDDbNSJ/kw8Kwh/NgRuGpoasq2?= =?iso-8859-1?Q?I3GYl4l6ZFjitRD4NimnOl/6QQ0nZtOl59Dk6CQprlIkeloy8jT5PTF151?= =?iso-8859-1?Q?Un+Ef8fBSkCGRusvMMcqra6lJ+k0zkNUKHivivhpMf+nF4GdVXZu+XaKd4?= =?iso-8859-1?Q?LCaFO5CduuSIdGLl9Qdmlnd6Kw3t2Jp6PtM1ON5DrElA7VQfGDZ/gNkUoa?= =?iso-8859-1?Q?6bpdQHIm160Kix/tnLG9hik3AeuCeecu+Ajm05ePM+jZYrEEyBzzQk0qdp?= =?iso-8859-1?Q?0yAq+g8Ldn3UwoAtCcpJu2E0gL6NkqFT1UqF2SrL1PiHmvStQyqH1qliXl?= =?iso-8859-1?Q?Xzg7IE1kZ5YhHxwhvs25EuqXu4lJg+P2pP/cPIvPDMnSATFPCRCYEFATYT?= =?iso-8859-1?Q?vn+lIzwfHOIyec3UJPl4nurEU/vhv2fNb6q/r4AYpLn/gM4W1tgjCwRJt4?= =?iso-8859-1?Q?m2lSR3f2h23f7s2/D58ya5PPvrdAj5HVPgmjqHmC8pOxF5Rs9hNyAzU7Zj?= =?iso-8859-1?Q?JzWILhGP3qk/LyW8hqOw1kkPlsdqR4keR6ktkwHI71/4Oc3WqbULF6ZaIy?= =?iso-8859-1?Q?t9P1DmBLBD/BWyEUq+zuNWuI8wwKmHi50lLtohly3fA8ksdTv5bKeXh6Ie?= =?iso-8859-1?Q?9sn4FLvUOOEh3sDEbazIzYnQJsF/baqpqF2lUHxOIA4mDfWfhcllZfEdoG?= =?iso-8859-1?Q?stkrjr8XId3CHwW+oHU49nMbKm5lTFHfaKTZ5SyLwBehySYpKk3eY1hyOd?= =?iso-8859-1?Q?+qP1vQky3FZ003aEgibc2WhWN1iKaV2p/5fo8rKGRvi887QJ2AlCaydgGI?= =?iso-8859-1?Q?KO/BurHuUCcYY5QRoVi2Yr1BPOAHwMh0V8MlSMJxbmNNZ+dEwhHO8w8gO2?= =?iso-8859-1?Q?XTwB0RAihKRTzR5YCsF48UsrUkcH4okkFsQrBc+EWmqwggVygKVKfN0tAW?= =?iso-8859-1?Q?uIJCJHvHvdRuvjtRGzTXqPsNJ0t7IVoOQg289CpRUXuVYw5/aB12K2+WLb?= =?iso-8859-1?Q?yyWpdF9ZGHb2M9HJqIuPQ5BmQnOvxyPy+MQLp5iReCqqa52qoQD5k1c7UH?= =?iso-8859-1?Q?SLGyexmVfxUgRpMApOG0EcEBorkx+L0ix4boFai9f/p6zHb/fLZIkFnfrq?= =?iso-8859-1?Q?H5OXCNT5bngIeDVZQs5gMGQRR7p8s0ZRuJ26UCcn9OilhZd8UsiWKbkFap?= =?iso-8859-1?Q?JWurd8yLLx+kaHscxGG2EyFHQXJFyB2EAzW4WL5OtCJ4V212qGJy6inz8i?= =?iso-8859-1?Q?hDXmVP/QzFZo7Ff4qcAC1fgZ3k8LfJG1iOpvAWM8i4jU5Yz0nRVqaLSvwL?= =?iso-8859-1?Q?oWtEYdK7RHiAGA8g4RjnBd0sUrnMfo5ovw0HFQfjmbEM0vf61L4TJ4kTjP?= =?iso-8859-1?Q?mAtvoWNbN52GtLO4gEH6cYEkeOWBoXieht97F5gfmlLLbWsiOcobzymbwO?= =?iso-8859-1?Q?vAYnH9jcuBlB3TuB4ak4hBBjPmubsdLdPiKmIrbaCB9MLxn+onoRVlXdsp?= =?iso-8859-1?Q?QbWjGgNkJvn3l5K73qDsUOnpIHRCt0xFrB5lFNpMmPFOw9Ef1wT8wJ2Xu+?= =?iso-8859-1?Q?vtMG108=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS4PR09MB6518.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?VH++/s02RGGZmbOKNlUUbimlc59XBKRAjsbndEqbDpHwarPzQjyVOItP0U?= =?iso-8859-1?Q?7wnRJBse3l/F+yEeBhzI3/CwL4/YtV4pPFYQyYdJy0o/ogB0udGkzdUTRH?= =?iso-8859-1?Q?rhxkqRbnA8Ua2DlOjSa46jlnwFb8AgIFMxjGeJNS/LZjAZQk3krsF5QOA9?= =?iso-8859-1?Q?evDawxLgoO2YcbThqtv5xoOBWa73mfMmlhNewUSUtZPflS3gdcdiZ0yfHm?= =?iso-8859-1?Q?kxLC5RHgfolICGyI7auDyNK4N/lxhT8Gikdz+Y831WdKsWmV0MEIdOjDr3?= =?iso-8859-1?Q?kJl77SJk6o3rxibLW+ZCR3k1JOiwhkBWVLjmNs+JuDZ3EJazU2MTWJam3R?= =?iso-8859-1?Q?ZJQuR2Nh7fDyEn2q6E2Y2riblZDLt6rApsFH67dj23ODqe3FIllOhUnEL1?= =?iso-8859-1?Q?yo0+ldZSaWyW8UGNC2SVgZz5i9bQ+z5OTI7hazypKAXJqtDmNRSbo7xBYx?= =?iso-8859-1?Q?F9e70JaFh+f45erth1dHHeL4kV4lKBgzGVPj8fwqoYQodZe2SCyTUcBbOa?= =?iso-8859-1?Q?YvYHxMPWm33RsBVHBvebpfihpYpE/ajQ8BUDeYJ01So7OLhMJP9AV7u4xd?= =?iso-8859-1?Q?onMVJu7aYPM305q89oBaOL96SK5RKAsNoutv3opAXYW+XtZt8vBX5XadTY?= =?iso-8859-1?Q?PVZ58bmYJKQ0gDE3XwtQhBA5rqTZHSuavz055jRG8QQeZa681ZtaWcVXmz?= =?iso-8859-1?Q?6YzEZJM1eBroZrqmsBWN9OoQcq5cLjrXRC/Qtiunoh7KatbT1TLUzL7q32?= =?iso-8859-1?Q?2T+RePsDls+JDVJyj7L3Sjj4tBpjNEzDOhU1abqG5Ev2uwPvrM6KjlpA+C?= =?iso-8859-1?Q?Bd8M8W2hAsju6sDlAr/akp/kppdCaGmwbiJRIXoP3x2njlX0R/Wd7oa6Sk?= =?iso-8859-1?Q?9ngPaiqKIytNDuJk8QnEIgRg8wbbxHU7f+B6d6epNmzNJHTCoepOGwVKaL?= =?iso-8859-1?Q?I/WvjoVstC8d84VMLvVl71sI36EYqmHBp6aEujHf7GFGMMskxlkTDHPDXD?= =?iso-8859-1?Q?d64mWQ59feR/fKAfcAmmyNTbsTRcWx/6k2+r1YST9T+TjzQE3ISMSuOydn?= =?iso-8859-1?Q?58HKh9+eHgttUVwknCLzk6A0lkLyQXFYNckWNApcDcixUtAT/Fi+C9VVLZ?= =?iso-8859-1?Q?/P/EanY4ijAm2fT24aV9F7rcUk0SxFGseVwFIKCPUV9dYyAHM4INrp6ksy?= =?iso-8859-1?Q?1oJqvEzUWjEiFxFj5sLPLO5IadZQrVnaLANWdT1nlxOH/FgQZUA2pwx0Fe?= =?iso-8859-1?Q?E4koU4vCmavvNc6Vo5tZZ3i0/At73UMhsgxMt7FZFzD49IqW0QD+JJDtPO?= =?iso-8859-1?Q?YFmJdHcJ0YMtXNO5N3aK1k2WQHBQdzxySbb7nmRUP8UgedguxRVVeBVLU1?= =?iso-8859-1?Q?oo3auaRbO05UVqOe7Ff24ot7wR+gO/4ZaFGHyvZ04uXTPu+W9mydhPLiGP?= =?iso-8859-1?Q?zpmNy2nN7WfCwL8duveMBqzBFNYFMwkpEfOmU8FAFHN9gKhk9wppSUvy99?= =?iso-8859-1?Q?nENd3Q1pxDC9TFPpHqh+yeLqKk/no/knICfaekPB+MGXNyCQsvZrqvYHkQ?= =?iso-8859-1?Q?p9FQ1Djrcvjv9lIcViS6cO6QNW74uM8DsmUoW+4y6LiXNDpgvxV6W/+SGP?= =?iso-8859-1?Q?02HMoYCFDaquj6Y40EPGsjZ9jUOa3lbcGFp2dtdwHUKUxIu27m3zLBn0T4?= =?iso-8859-1?Q?ta9lGePDIFrxnaZhM04=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR09MB6518.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e0756760-e119-450a-b398-08dd83f0f4ba X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2025 12:01:47.2062 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: gt6dgBjJ765TlW3ts8chqXfh+dXCzKoZAYl6n6ki2p+JMeZweDtSZL2TKBRHrzrDj8aSV+/yoFnJCUmei0HlyW3625T/VrPKY4/Fhkl5ZjA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3713 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2613::702; envelope-from=Djordje.Todorovic@htecgroup.com; helo=EUR05-VI1-obe.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-Mailman-Approved-At: Fri, 25 Apr 2025 10:04:56 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @htecgroup.com) X-ZM-MESSAGEID: 1745590067844019100 Content-Type: text/plain; charset="utf-8" Add a network device e1000e to the boston-aia board model. There is no pch_gbe emulation, so we add e1000e in slot 0 func 1, instead. We need to pass func to call pci_parse_devaddr to find out slot and func. Signed-off-by: Chao-ying Fu Signed-off-by: Djordje Todorovic --- hw/pci/pci.c | 23 ++++++++++++----------- hw/riscv/boston-aia.c | 5 +++++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 2844ec5556..9748acda09 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -980,16 +980,15 @@ static int pci_parse_devaddr(const char *addr, int *d= omp, int *busp, =20 slot =3D val; =20 - if (funcp !=3D NULL) { - if (*e !=3D '.') - return -1; - - p =3D e + 1; - val =3D strtoul(p, &e, 16); - if (e =3D=3D p) - return -1; + if (funcp !=3D NULL && *e !=3D 0) { + if (*e !=3D '.') + return -1; + p =3D e + 1; + val =3D strtoul(p, &e, 16); + if (e =3D=3D p) + return -1; =20 - func =3D val; + func =3D val; } =20 /* if funcp =3D=3D NULL func is 0 */ @@ -2039,13 +2038,15 @@ bool pci_init_nic_in_slot(PCIBus *rootbus, const ch= ar *model, int dom, busnr, devfn; PCIDevice *pci_dev; unsigned slot; + PCIBus *bus; =20 if (!nd) { return false; } =20 - if (!devaddr || pci_parse_devaddr(devaddr, &dom, &busnr, &slot, NULL) = < 0) { + unsigned func; + if (!devaddr || pci_parse_devaddr(devaddr, &dom, &busnr, &slot, &func)= < 0) { error_report("Invalid PCI device address %s for device %s", devaddr, model); exit(1); @@ -2056,7 +2057,7 @@ bool pci_init_nic_in_slot(PCIBus *rootbus, const char= *model, exit(1); } =20 - devfn =3D PCI_DEVFN(slot, 0); + devfn =3D PCI_DEVFN(slot, func); =20 bus =3D pci_find_bus_nr(rootbus, busnr); if (!bus) { diff --git a/hw/riscv/boston-aia.c b/hw/riscv/boston-aia.c index e075dca33a..2615b41a48 100644 --- a/hw/riscv/boston-aia.c +++ b/hw/riscv/boston-aia.c @@ -432,6 +432,11 @@ static void boston_mach_init(MachineState *machine) ide_drive_get(hd, ich9->ahci.ports); ahci_ide_create_devs(&ich9->ahci, hd); =20 + /* Create e1000e using slot 0 func 1 */ + pci_init_nic_in_slot(&PCI_BRIDGE(&pcie2->root)->sec_bus, "e1000e", NUL= L, + "00.1"); + pci_init_nic_devices(&PCI_BRIDGE(&pcie2->root)->sec_bus, "e1000e"); + if (machine->firmware) { fw_size =3D load_image_targphys(machine->firmware, 0x1fc00000, 4 * MiB); --=20 2.34.1