From patchwork Fri May 11 23:27:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 10395515 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 4332360170 for ; Fri, 11 May 2018 23:30:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 43BC128F4A for ; Fri, 11 May 2018 23:30:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 377A528FE9; Fri, 11 May 2018 23:30:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7D3F728F4A for ; Fri, 11 May 2018 23:30:08 +0000 (UTC) Received: from localhost ([::1]:54285 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fHHUF-0006xc-K2 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 11 May 2018 19:30:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51072) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fHHSB-000272-69 for qemu-devel@nongnu.org; Fri, 11 May 2018 19:28:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fHHS6-0000VX-6t for qemu-devel@nongnu.org; Fri, 11 May 2018 19:27:59 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:52174) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fHHS5-0000Uq-O4 for qemu-devel@nongnu.org; Fri, 11 May 2018 19:27:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1526081273; x=1557617273; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=yMP0cCAgZBTOefYacU4L4ZsDAvw/GJts1vM8zeeN49Y=; b=N+yK2zWii3jVYLAIZtcvrCaxR9Ehb1Bqf3VDBNvHifZuMhCxetkF7uZ1 L2LRBuqlwIYOYDxrBhd/LGoFdURNjcHGTEpCgEaM9WoTeBOAeCQXlyAed rce/5aaeeFS5rM9lkO7wbe/UAPaAUlp1pQ2DEp/6AkylFl1WdkoSFSoXv QvKt3zT3mvu9TyH63W/dxQoBTOrfpEoynhHJf9A7hIP3aWVAlzKOAAw8I 7uoE7/HqlDJ8HDZAkkPSXn0PHWjJnZFUHbbWmJV9Sls8UyMXjTwP1DLIf ARY2ggT+j2u8C9pRX948LfMInMEc+kebIANR2VxofNWztTIVFWgC/vnBg g==; X-IronPort-AV: E=Sophos;i="5.49,390,1520870400"; d="scan'208";a="181003591" Received: from mail-dm3nam03lp0020.outbound.protection.outlook.com (HELO NAM03-DM3-obe.outbound.protection.outlook.com) ([207.46.163.20]) by ob1.hgst.iphmx.com with ESMTP; 12 May 2018 07:27:52 +0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector1-wdc-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=af6DIvZP9uwEYOqJ7rzQ8/GGbA8dtXJF1aeQjsTXHbI=; b=eYZ+o82n3dJnqPf0xcDUeC0KpO6KYtrC0Fi+K/yanNHHFACzrBW/KOdLewOe3KtLxMrq66DeJM5/zY8fe0vU4cQLozNPKg2fIiAzX9bKuZ1Qo6vuar5KRfW+9gGwE/x3ELHWbucyFrJp8NPeN989q9DF7SeN9ji0i8pvOcNr0B4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by CY4PR04MB0406.namprd04.prod.outlook.com (2603:10b6:903:b1::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16; Fri, 11 May 2018 23:27:50 +0000 From: Alistair Francis To: qemu-devel@nongnu.org Date: Fri, 11 May 2018 16:27:41 -0700 Message-Id: <997d160549829f96ba47a9acffc90d235b20fad2.1526081108.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: CO1PR15CA0099.namprd15.prod.outlook.com (2603:10b6:101:21::19) To CY4PR04MB0406.namprd04.prod.outlook.com (2603:10b6:903:b1::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(48565401081)(2017052603328)(7153060)(7193020); SRVR:CY4PR04MB0406; X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0406; 3:N4blQZOl+N1/3/Rct9ACMIhd0Pm7jf1llKU1O/uMb/UGNlQnT7X9PD2Lnf0mfqB1ab7Xu5qgMdJlvF2nTDog0qzxrfrU0Z34RLTK2SWKh0UGxlK5Wrs7Ery1s/7LkvfsUqPecJSGK53rXj7im5HcCaWhK4RhsphfTrD/zUrqTchsh8y38oT2N1KL0bMRV/iWH+nZevoJ3xQM8HC7EtykNi1kMQI+G8Y3lhTryxCm5Bjfl6WBJngEj+9T0oPugW7x; 25:Y1iPsX+RqLB/79tv2KnvU9fZovB8jDbxHIHgMmLBaSdd3uzcNvx0C49iRa6eUUaubLaecdNxMvl043HFl6Ms0igGIYt69tYJIIsMhHLTmgdXBU6edzWa4EjZgq3+6jm24WvMd1qW2uf1IuhZ9p9F2w0VoUY15QlFdQsDOctSf9EFwg4RkHwfnidMlsjDHIp8dmQrh3FMtqfTYUfbiYajnymH3RuQDjpWRpN/FtCq8bprmTgWi8cIiNWQYmkc8s5Rhu0Y/41HNKfYc5CUfGU5fxgTSQ1rMgaXngWgVLIG6FtP3R950UJTba328zLSnoH90fLH1u5p4dQJ8QKNKIbpRw==; 31:plxrjC3+sXKoUDgJxbZHhNdvQorG053lc+Zo5hZFjPjLZ1lQE0PEj72mBe+Ojv0lQ8U354/gMzpfotPm9MKHxjckoKxQAB6YMO1xrx5L+7xQ+uTrsF/8wOXwimxyvpAa1ZFrlP+RHIiABdyh24bQjy9PEYHVrC7uVA3uuQhP7DiEiN4mN5xLER2HpEPkkx9YlBKCNIzkJMWtbvI7a0fJ2vty8RGp24L24cvtlYkbUHo= X-MS-TrafficTypeDiagnostic: CY4PR04MB0406: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0406; 20:XmsZoVmiWnjOnExvMATAI1MBrpVVGdYvK//INR2FB3KEvHVTflA4d57Lln2z3LICIVRSUmeLy5W3f/7uPDTUr3c/guWQIUtOl5rph4bTDk82PbzxGZB0vkhTsWqmGM04Fug5zACmW2DStnawEZSZhBQCJXruvjsJFusaJFlN0jfKg9iDUJsA2pPH/iZmEB3HTKrMlwbkTGbbrOg00qPluwyUMoyOH5bkYB7bNIwQ7ak9cnK8Xc6haiu5XQLRjcRzh0EfFa9Qb46wMzKuYOX0gCXDeiZIQlrdbisnF/B6CcpKrOgKOevOjTsOZ8bcQ/jDxTPGAPO1f6Ez10MHWuu/N1NGP9jW68lGYFASoOxuDbJarzkzcUIUyqSC7byJbX7Rq5AL1BIIXB+dItWudUhRPM/2lP0Ktgjnq6xGlF1AnImdQl1oDsp9zZ9CxZaq41BK2lGQUmWydbyRzdu2cmuP1XR457Xgk2stdeZfik5s50OsSmT3/BVwDUxXLHM/jYGY; 4:+B2DN9+p2oLR3G5cje8TO9JnTEm3Wsj8AGAXB/FZpY1wdIQAJJ3HTbW3SoEQuutogTh2ovFzarBG8xySygSsY4d3RTOrBdYPXY6JdW5z6ctmUhG1Xe1FLM8183K1/bXfS+F/7uthLr+LtTd5sk0eH1KPnsmWuMIEooBY+Pd75X2XJnpz6/el/NAK0Gt5WsgGw1m1QnJCPZ2fF+sSxmxpoFtR1p4oLaUyN4+bWVjMCwM4JU89Gla7tczTCOLNdyuv/eZQDKyHOfZ5jxvoDmUzbA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:CY4PR04MB0406; BCL:0; PCL:0; RULEID:; SRVR:CY4PR04MB0406; X-Forefront-PRVS: 06691A4183 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(39860400002)(366004)(346002)(39380400002)(376002)(396003)(189003)(199004)(446003)(476003)(8676002)(2616005)(2906002)(44832011)(956004)(11346002)(105586002)(3846002)(6116002)(2361001)(106356001)(81156014)(6512007)(81166006)(4326008)(47776003)(50466002)(68736007)(86362001)(53936002)(39060400002)(97736004)(8936002)(50226002)(48376002)(486006)(66066001)(305945005)(7736002)(36756003)(6916009)(51416003)(386003)(6506007)(52116002)(76176011)(59450400001)(5660300001)(186003)(26005)(16526019)(2351001)(6486002)(478600001)(16586007)(316002)(6666003)(72206003)(118296001)(25786009); DIR:OUT; SFP:1102; SCL:1; SRVR:CY4PR04MB0406; H:risc6-mainframe.int.fusionio.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR04MB0406; 23:2xmUply+CIX9orqkZf0kfi7zv+KBz03Ur72qiXHRB?= =?us-ascii?Q?RN5VM5Kjy1r0BZJ4WYKXfg3pHbqCLOd4348HHz8k9IF1hiRQ2Lpsq8RvkS13?= =?us-ascii?Q?rMQPRFEHaOMn56eG4En8vYKxE0NvP9qpdi5QD9fWukk4/CQQ+f3wqEYtWFpC?= =?us-ascii?Q?aJwhxc3AX8VZSJeWSWdZhbIiLLakB24eXzAoE30uPC29poYHNE/cWB6mqoS2?= =?us-ascii?Q?tp/Kz9tdxN+DwE+1n3534V0KULxKc9Dn4w//0IcaAYUaCW1soGzALVXxSRPL?= =?us-ascii?Q?86jxuY9luWsWL3njku7XyTJag/qxEIzn+Yx8JTIjRLz7B3EQA79r58/lbmPM?= =?us-ascii?Q?QOpzgGA48q7+SO/gj6US+4fpvJqEMDmY9jQNe1u476lNEGumfeiob2gVt4Is?= =?us-ascii?Q?Q2ZbjMKeJsO2fhd2bR/AxJ5ezwz2MNMcE6MbnRCn34gbpuG1ldUeHGXZcd1a?= =?us-ascii?Q?xwq0+6J0RbYvWLGePUuPv6Evqd0++PnJS5VMfLbdo6Tolq7PQk5cc23j+ldW?= =?us-ascii?Q?sXLgmvrleEAznS+53h/F/ni6VGZXuTczSO1DJ5VuBtrGP5bPw1mi1tfvwm7y?= =?us-ascii?Q?P5HSsPgYdLY/LnMyx/BAHhOB4yRWAtfGRpx1rj6zhr9WEp5Tvs3xoqq8lc65?= =?us-ascii?Q?RDPxSZQrrB9xfGgtEXkHcVZECEuSPL61RsQV5wG7kZspVUM1VrlbpLfnTiEV?= =?us-ascii?Q?sb95TOT1b0YRi06JeX6snEWdqxtOb/2wYr2mDbF+UHn1bdEmu+c15PYEm8lP?= =?us-ascii?Q?VyMcr+8Lt2Qyv9iHUGxCiMfAzLyFqv983bMpYUxzvOfX0XyGY2LSrV9a+07s?= =?us-ascii?Q?jj3dRgAVVpJFnU23cJeXlqS9VFMX8UCEmkxIlNpuBx3uupAPiDMm8EMc2v8L?= =?us-ascii?Q?DqPi2xBzsHB9Q2UN8jfDItzLt4MEODH9vG+6uuwYFb2ouU4ZusyYlLCcwaso?= =?us-ascii?Q?Cr+wlJigSpAqHZ/l42uqEIVgOXkdgqo50bmR3vCPP/LoyX6UG1kYl31xZ5vz?= =?us-ascii?Q?URbHci5GOScisn467KKEHTuSU+f2yFAfQigQWulDwnYGhvoI3zO+oz9XCr9D?= =?us-ascii?Q?T9lElgV2wAvG0H5x1PiZNedBt68++L/b9V1Wj4sEWdXtRJwvtuNzLHtCIKN7?= =?us-ascii?Q?/BBmmkpMJp3avmZ9iVl9pKE+PX1WPVNi7YwzsTqx/Xtlt6m9Nbd+55syKX66?= =?us-ascii?Q?VJrMngwSxbkitLEDbxM7Ms6AbGaD0qvkbUsd8rdqxb+I0S/1nN3wLIQ7DNbR?= =?us-ascii?Q?BhLjYPx1GTeHLmHIKBSUZ8JZMuJD86abcNhz4jVddRjOR1oxtM043wOyDtxH?= =?us-ascii?Q?CyjynJ/aLlWYDQt7YqcPXvLRXaSUjfNdlFRF9rirAjU?= X-Microsoft-Antispam-Message-Info: YxCBYpEGyTN/fXyKkPHrYUSo+KhZG4tJUge3XCEv6ewy04/34F5/nJxzJwugvTqhuxUm30AtGGDTcNi/mmreMpLY+AOBPT3sDYPcjlHknBCuz3Y7UVDU4hJ4t8LWWWzRJz4K4n5mZcnbUttQqcZeQgSI0Mvsd87QfyVQAq+PqRUe5cnRH9oCCtcbgzQ5vhzn X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0406; 6:nxPhrkYMJ4sjbPYoF96LGlCAdHqC+jylJcM8mCJgmtV72w84bUtrlcfRjhanplLCTh1XZtZUkPzzUMGGAY/IiJVkP3VjjnBKEJr/Gjx/2V01INnh7VaYbVvm7PKkSAOswkO8d+fpnt3oQdvrv6tjpSIcNZfj3Cbjxf6QQ3Ogj76lxquyLRP44aSsELBnG1MHXPWYYnH7uD2MJiLSNs4OagYA0XEuuYNja3RWzQWrPDSqIgChw6NRg85oA0fnW1M0ykOo88+n7yyElXiELY3FD1/9C7q1+M2fo6IwjNMY4dNRAixYjW/HCGaDWDxmL3/weMIJvq9xMmJDwah0LhXwQojVMc71KZThFfZsfHb3jSIIaJ4IZc4B1BGb6LRWEIWdcSdo9aXB67iSGRxvNPhypBxS0h5CNhj2hkwcpoiMkW2wDjCV7O7jjKn7ANNTZpWR9BGbEpDQV39ZOPy0J5IGFg==; 5:F52y6M+10DL2oDey5C5E7csaiOo3/5blPdgLoXiwngEVbt2IcWoCCJ78cDFRR/Jt31CFRVHsRyerC57o9TDChPpZ1VUfjiNLsxynGo/ahAP44QLgVdTBz13HxJodO079mOYDoGKAsJhn07mtC3M7J7ZYx8/Bq0nuOSwRUh5VpCc=; 24:z9offDSCaiF9o4lu0HGRCpikQCGWJQ+b1wjMyA5+dt9MIGHKSRXdIsrzuJM3urOzDc2cZdOLyFHmc/yJoZlllrJoHwFktJ5in4Adq6n9FkE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0406; 7:mIvkMP4pwO3LRGOhgc2eYlwXUqoXeYoJ9vAoJSbQZEIb8rfwKh03THUflaiYk23NM/ybQq/osvwqU9GGzv6b0I8hmzOB0fOWsWlYi/1RoF8YZDNppgEZZOCvDzF1CXGJNI4ce0vehao21VC7H+JBVb4WNRTnW6+zuPK6Dp8dmyrhMNW6qjwMnkVZeLTyGB96+PdaXc8BXkbgwdrBAQff2sRFSE+XdlW9DXDX79qJaguAD3Gz3DWa511BpV1i6U7m; 20:qADI+gAFd1tERJBJiljKHJRJBmGZcRS3HgJzqVjJkfoNmgEYk72Xye2BTHjDfxQgS6pnhQofqQ9DD/dZ+WFoqCSSlhVIh4wdhTjtcisrfd/Ym5ypHBKnMmUA7n4GE8ChQOA01gNkgzA3g7LqJGzC/l44J3F5wt5qotPXP7NwRf8= X-MS-Office365-Filtering-Correlation-Id: daec4ed7-ad68-4074-6c45-08d5b796cfe7 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2018 23:27:50.1008 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: daec4ed7-ad68-4074-6c45-08d5b796cfe7 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR04MB0406 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 68.232.141.245 Subject: [Qemu-devel] [PATCH v2 2/7] hw/riscv/sifive_e: Create a E31 SoC object X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, mjc@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Alistair Francis --- hw/riscv/sifive_e.c | 97 +++++++++++++++++++++++++++---------- include/hw/riscv/sifive_e.h | 16 +++++- 2 files changed, 86 insertions(+), 27 deletions(-) diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index e4ecb7aa4b..0ab5e3ca45 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -102,18 +102,12 @@ static void riscv_sifive_e_init(MachineState *machine) SiFiveEState *s = g_new0(SiFiveEState, 1); MemoryRegion *sys_mem = get_system_memory(); MemoryRegion *main_mem = g_new(MemoryRegion, 1); - MemoryRegion *mask_rom = g_new(MemoryRegion, 1); - MemoryRegion *xip_mem = g_new(MemoryRegion, 1); int i; - /* Initialize SOC */ - object_initialize(&s->soc, sizeof(s->soc), TYPE_RISCV_HART_ARRAY); + /* Initialize SoC */ + object_initialize(&s->soc, sizeof(s->soc), TYPE_RISCV_E31_SOC); object_property_add_child(OBJECT(machine), "soc", OBJECT(&s->soc), &error_abort); - object_property_set_str(OBJECT(&s->soc), SIFIVE_E_CPU, "cpu-type", - &error_abort); - object_property_set_int(OBJECT(&s->soc), smp_cpus, "num-harts", - &error_abort); object_property_set_bool(OBJECT(&s->soc), true, "realized", &error_abort); @@ -123,11 +117,57 @@ static void riscv_sifive_e_init(MachineState *machine) memory_region_add_subregion(sys_mem, memmap[SIFIVE_E_DTIM].base, main_mem); + /* Mask ROM reset vector */ + uint32_t reset_vec[2] = { + 0x204002b7, /* 0x1000: lui t0,0x20400 */ + 0x00028067, /* 0x1004: jr t0 */ + }; + + /* copy in the reset vector in little_endian byte order */ + for (i = 0; i < sizeof(reset_vec) >> 2; i++) { + reset_vec[i] = cpu_to_le32(reset_vec[i]); + } + rom_add_blob_fixed_as("mrom.reset", reset_vec, sizeof(reset_vec), + memmap[SIFIVE_E_MROM].base, &address_space_memory); + + if (machine->kernel_filename) { + load_kernel(machine->kernel_filename); + } +} + +static void riscv_sifive_e31_init(Object *obj) +{ + const struct MemmapEntry *memmap = sifive_e_memmap; + + SiFiveE31State *s = RISCV_E31_SOC(obj); + MemoryRegion *sys_mem = get_system_memory(); + MemoryRegion *mask_rom = g_new(MemoryRegion, 1); + + object_initialize(&s->cpus, sizeof(s->cpus), TYPE_RISCV_HART_ARRAY); + object_property_add_child(obj, "cpus", OBJECT(&s->cpus), + &error_abort); + object_property_set_str(OBJECT(&s->cpus), SIFIVE_E_CPU, "cpu-type", + &error_abort); + object_property_set_int(OBJECT(&s->cpus), smp_cpus, "num-harts", + &error_abort); + /* Mask ROM */ memory_region_init_rom(mask_rom, NULL, "riscv.sifive.e.mrom", memmap[SIFIVE_E_MROM].size, &error_fatal); memory_region_add_subregion(sys_mem, memmap[SIFIVE_E_MROM].base, mask_rom); +} + +static void riscv_sifive_e31_realize(DeviceState *dev, Error **errp) +{ + const struct MemmapEntry *memmap = sifive_e_memmap; + + SiFiveE31State *s = RISCV_E31_SOC(dev); + MemoryRegion *sys_mem = get_system_memory(); + MemoryRegion *xip_mem = g_new(MemoryRegion, 1); + + object_property_set_bool(OBJECT(&s->cpus), true, "realized", + &error_abort); /* MMIO */ s->plic = sifive_plic_create(memmap[SIFIVE_E_PLIC].base, @@ -171,23 +211,6 @@ static void riscv_sifive_e_init(MachineState *machine) memmap[SIFIVE_E_XIP].size, &error_fatal); memory_region_set_readonly(xip_mem, true); memory_region_add_subregion(sys_mem, memmap[SIFIVE_E_XIP].base, xip_mem); - - /* Mask ROM reset vector */ - uint32_t reset_vec[2] = { - 0x204002b7, /* 0x1000: lui t0,0x20400 */ - 0x00028067, /* 0x1004: jr t0 */ - }; - - /* copy in the reset vector in little_endian byte order */ - for (i = 0; i < sizeof(reset_vec) >> 2; i++) { - reset_vec[i] = cpu_to_le32(reset_vec[i]); - } - rom_add_blob_fixed_as("mrom.reset", reset_vec, sizeof(reset_vec), - memmap[SIFIVE_E_MROM].base, &address_space_memory); - - if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); - } } static void riscv_sifive_e_machine_init(MachineClass *mc) @@ -198,3 +221,27 @@ static void riscv_sifive_e_machine_init(MachineClass *mc) } DEFINE_MACHINE("sifive_e", riscv_sifive_e_machine_init) + +static void riscv_sifive_e31_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(oc); + + dc->realize = riscv_sifive_e31_realize; + /* Reason: Uses serial_hds in realize function, thus can't be used twice */ + dc->user_creatable = false; +} + +static const TypeInfo riscv_sifive_e31_type_info = { + .name = TYPE_RISCV_E31_SOC, + .parent = TYPE_DEVICE, + .instance_size = sizeof(SiFiveE31State), + .instance_init = riscv_sifive_e31_init, + .class_init = riscv_sifive_e31_class_init, +}; + +static void riscv_sifive_e31_register_types(void) +{ + type_register_static(&riscv_sifive_e31_type_info); +} + +type_init(riscv_sifive_e31_register_types) diff --git a/include/hw/riscv/sifive_e.h b/include/hw/riscv/sifive_e.h index 12ad6d2ebb..5cb19cd564 100644 --- a/include/hw/riscv/sifive_e.h +++ b/include/hw/riscv/sifive_e.h @@ -19,13 +19,25 @@ #ifndef HW_SIFIVE_E_H #define HW_SIFIVE_E_H -typedef struct SiFiveEState { +#define TYPE_RISCV_E31_SOC "riscv.sifive.e31" +#define RISCV_E31_SOC(obj) \ + OBJECT_CHECK(SiFiveE31State, (obj), TYPE_RISCV_E31_SOC) + +typedef struct SiFiveE31State { /*< private >*/ SysBusDevice parent_obj; /*< public >*/ - RISCVHartArrayState soc; + RISCVHartArrayState cpus; DeviceState *plic; +} SiFiveE31State; + +typedef struct SiFiveEState { + /*< private >*/ + SysBusDevice parent_obj; + + /*< public >*/ + SiFiveE31State soc; } SiFiveEState; enum {