From patchwork Tue Jul 3 16:34: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: 10504783 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 450DF6035E for ; Tue, 3 Jul 2018 17:06:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2A84828D15 for ; Tue, 3 Jul 2018 17:06:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 195F528CD1; Tue, 3 Jul 2018 17:06:53 +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 6219928CCA for ; Tue, 3 Jul 2018 17:06:52 +0000 (UTC) Received: from localhost ([::1]:41822 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faOlP-000127-KU for patchwork-qemu-devel@patchwork.kernel.org; Tue, 03 Jul 2018 13:06:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49756) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faOGl-00084b-91 for qemu-devel@nongnu.org; Tue, 03 Jul 2018 12:35:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1faOGh-0005kc-NP for qemu-devel@nongnu.org; Tue, 03 Jul 2018 12:35:11 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:50428) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1faOGh-0005jL-Dk for qemu-devel@nongnu.org; Tue, 03 Jul 2018 12:35:07 -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=1530635708; x=1562171708; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=/KuvZZNKysgI2G0BykqNNF2HqGNRfOu3vCQ4mktBpMk=; b=VqY9oolnffwQK9uR63CFkaTiXw9XC57WRIof7I2H/ZNrm5WygO9ZZ8Do VBZ/9gThxqZjFCMaZyXxDYksbww6vngrkBaoUqDaH84JF9dE4rUG3zafz XPD4YfUzMeGI7716yU9FEOu44udU8T2Ch3VHTKDe0Gguk+6XpovhQe/xk 8c7JWASEjZ/ZYJTDmEvaU9iJBN9EsHBCeDvKuWmtoGjLu64CULnBhIaww dVBsjfxE1hBQZlK0g6swvPmmkboO3axjUrkjHBU3VmoS41cW/opUU2Y7w 4ILjlhzMJOuobaahYWzlSHlFArtKkh8CK2brPe4Iv3zjBUqOX4JP/ba6i A==; X-IronPort-AV: E=Sophos;i="5.51,304,1526313600"; d="scan'208";a="84260496" Received: from mail-co1nam04lp0047.outbound.protection.outlook.com (HELO NAM04-CO1-obe.outbound.protection.outlook.com) ([216.32.181.47]) by ob1.hgst.iphmx.com with ESMTP; 04 Jul 2018 00:35:06 +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:X-MS-Exchange-SenderADCheck; bh=P5Fw967ZvfmeSlYWKt4fON/PFEIAr/G0m/eKNUF8F/8=; b=F6SvTA6FS1u6Gz4fLCBbDgyTU9P0DsVTkngeSNjT0uxof0AyNAEp0v2tIEcjxK07EO7VP3UOi5Bh570XHyolvqsjpgN4g19IZezuv/serpmOK4RYutHGYKScJUHTSJDH7HpkuyoErKUul3mtOZFzeNLp5PWZhZRbxCaRU51wZk4= 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 BN6PR04MB0387.namprd04.prod.outlook.com (2603:10b6:404:91::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.24; Tue, 3 Jul 2018 16:35:01 +0000 From: Alistair Francis To: qemu-devel@nongnu.org, peter.maydell@linaro.org, mjc@sifive.com Date: Tue, 3 Jul 2018 09:34:41 -0700 Message-Id: <20180703163446.9943-3-alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180703163446.9943-1-alistair.francis@wdc.com> References: <20180703163446.9943-1-alistair.francis@wdc.com> MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: CO2PR04CA0095.namprd04.prod.outlook.com (2603:10b6:104:6::21) To BN6PR04MB0387.namprd04.prod.outlook.com (2603:10b6:404:91::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f389b8e6-6667-46b6-b49b-08d5e102ecae X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600053)(711020)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020); SRVR:BN6PR04MB0387; X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 3:H0vFmAlFkZY1n1hheOu1cZs2q0IJJAbn5/C+hoYWAT+PR5OPf4+50R1CaTSOTrTu8I+1Q9XNCK3vREe6KxUaygcEouAJebfRAIW1bl7Dphvj09WroDgQCbqQUGZ7zBsiemwX/XEWe+Dplpd9Z6NbDmzDAWWPo5uZI6TsAWiYcsemZqnGiL90FwQyXw+e8I2FT/sJjDme6iVS6EOHvrAMNNUzXSJxlWjaY1NOsXGSSJ2cyGJsCqLVUYdDl8o448yz; 25:XlZAHfOunj/SD7W+lEhuUuQndrYYUcWTR412faHmW4TRYzw1nw/WYVJH3grseGbxciWvJiMrppPsY/s4FWJSKTVvnOh+QANOPXa+xANHjo2cFVm4EQIW8TCILHGjfbivfrO60iGB3ZL9GCTCcxjt51Xi8PoCP9HozbvADQadu9Tbl65svlbMRZgBav1rDtgnkltUlYH7sRYYMGWi0LNfLNDDyAw29697aiaHPOmbupFDoeRTy7hWPcE7qNVEOZIXAjPS3T+Sgn/3XE915Fwm3kCyTCscOZA434Wr/pcQH3+9OgwHk4kXJC7upvlxeZgoYIc5hOuAptFT0GhJ9wr3pw==; 31:GMvKErocPtsOCBmvTSNGuzfS+tGODXUs0h8W5dINlMd2hXlP/O2OziS9bu/VdWED36JjW9W/Hu9Fm2gVNGhtXnDTFf+QXOSwkFRqauPaPdMjxDECqcJ63+euPYjl0hgRBSQqnahvOgTzUhItdZBerCOjYXCdyjJgNMI320v49ft0Ykq2ee7roZS1wSiLCF/XM2mzZxOSRAZ6RCRgZooEmQ/tr9hXTyqJ4dgNQMNUmxo= X-MS-TrafficTypeDiagnostic: BN6PR04MB0387: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 20:AYTT9gpuw565E2OI5t41ZNGP9s3DmRBMpgzjgzlNpnElT3Y2GDYEdJvI3B3kZJIlQvUVJlznSBlIIXnsbTCvo4hQKTEFnlG35IFHLm7DmK8ldMSrhG1xLopcg0RYswaBIklSQp0/CZd6AOrzqmuNdBLYa9bi0xCIRbDx7xouJRC0U8bj6FTZeo0z9KGMaz3lkA5+qDpZxFfxDvMjqfGmBv4M0ylCB7krX0pjBtRdMfHM0lxviEn4kxOtg6SlqBVccWUWmLyxiM7otq4rTIa2SBydnNbjakaFWCrEZNCF7jc7B3R4e4hNk+VdVdM/Uvm28x+kqKanZWUcVm/jt/CDP/tWnU41cxtx7CyJJJCAfHCxiIi+KEArKBR1OubmjG5ju0juCubgfpXHN6Bz3e20J4vcV0fa2ddtzN7gC4VH85aKDm+3VYSMKBkmPT1MFzz3PdiZDXit/OiPx/wI9+z61cgyiDzpSAyz96zjJ/+jp7m54AuO0hNY9gWIlI6mt5X3; 4:1RsWzKygCUHBpoLs8yBSbbnTbOqfPLDGlyHnA7CAbcu/w2hmIUyxHUNDCVguWoNkNqNrnHEUH7am7Nxu9fQWMoNLebZaDrcbHY8bY1DKj/3qaghST+0Z2oJ6WmIT+kPivfhUBfluEAil/4K1Tf5W5c/YboZmd7CtkhYpPrzv2hE0Af8cjnkIX0HoA3vym2Y2o+9i+RR6e9tzz8lCyUY3kMPfiFrfF/GsB7GAb7vHfSk4Z7oMSdKyekY8zcPpKyH5DtZlcmIIhQz5taOWbiCJGQ== 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)(3002001)(10201501046)(93006095)(93001095)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:BN6PR04MB0387; BCL:0; PCL:0; RULEID:; SRVR:BN6PR04MB0387; X-Forefront-PRVS: 0722981D2A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6029001)(346002)(39860400002)(366004)(376002)(136003)(396003)(199004)(189003)(44832011)(50466002)(48376002)(39060400002)(446003)(956004)(476003)(36756003)(6116002)(25786009)(5660300001)(53936002)(86362001)(3846002)(7736002)(486006)(50226002)(316002)(68736007)(16586007)(14444005)(2616005)(6512007)(6486002)(11346002)(305945005)(4326008)(8936002)(1076002)(16526019)(26005)(106356001)(186003)(81166006)(8676002)(47776003)(81156014)(66066001)(6666003)(97736004)(51416003)(6506007)(52116002)(2906002)(76176011)(386003)(72206003)(478600001)(105586002); DIR:OUT; SFP:1102; SCL:1; SRVR:BN6PR04MB0387; H:risc6-mainframe.int.fusionio.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN6PR04MB0387; 23:UWMa5/U4/0joJZelMHlpO2G2TEc5iXVCr2rFQNy0P?= =?us-ascii?Q?bnNX5ytl8ueczcm3UKWJtMxnbY6TNkSwManJl9LGuAqYl57QFs6MXefHTRCj?= =?us-ascii?Q?ulsgyT/6mLf5kD9Jzq3sjNPiC2HN/6YHMyiQOYqHJiqu5zJaZ4gJLRZqyZL7?= =?us-ascii?Q?woMEXknPyMHS9ww6eEor2tVipX0LCr15iCQJtW0LOYs/viPy1Ka67Djsg/F4?= =?us-ascii?Q?wnZn/7SD+z9anKhEDouqmxmCJtphCrLg+QGj6/44gnipFXnA+dnk7Py/qzWc?= =?us-ascii?Q?D3fFy8qNUZ2cvIpWsku/GoBnLfnE88zq39fS798Cu+PRFCaoZvzUexAoRPyQ?= =?us-ascii?Q?9CSo9Ij6V51zfW1R31RP30pPpPQLkXXjb3mF8beyXclJH9lL7cNweKIwGFIy?= =?us-ascii?Q?Rjx+qUoxr6Tqulfl9qw/8NxSl5GiAXIpkJZgeLxuFve80exQZqVBPXky87zz?= =?us-ascii?Q?0b7OoIWkeHc8EKqX+N89L5FonHW8DIP4EByXUOVuHUxH8P57xPfbOh6N0zzi?= =?us-ascii?Q?RsH0R5BKeiCdHt5wfS84RbGS+iRCxwXyI4fUksv8VoC+Li2Icw+gq/EqKNSb?= =?us-ascii?Q?o2LLAzS4Vfi90aMNeg4yG/zutbXlt+e7eGTs2721f4s9wkl6JVYx0iTO0gkK?= =?us-ascii?Q?ZHdXc4mQr6JiWKIawFbH3lrOhu1+YHnTp49v0g/fy6oCnI7XNxVC3dxxrAAj?= =?us-ascii?Q?Oda9f5OnvZgQ4uVjR+y8QZ4s4G+Fe+frZ6SWXavSjpOgqb2zWoyv6h6zoWaH?= =?us-ascii?Q?wF/ffZrrqlo2neUIoEEsOKsx8NDCYlge34vcQzFA1NVD4TQKEKttyu2HwMiy?= =?us-ascii?Q?ezTu1imbqOIBZJOKxScFWznQsfS6w0kb8GQYQnn/IcPhPj1L0BXvGyt53WmY?= =?us-ascii?Q?mYqR92uwxE7rMPkGVisBOtYZreloygwZ2Ni7FJBBo4L58HWoLf8yb0/8AkFo?= =?us-ascii?Q?NVdCgozuUk4JYaWEWDV9kAiAitevB0QYoNXjXmEuo5STp7uvcPJVW7XfPURP?= =?us-ascii?Q?0hZKqkEpuQyHsjl505C3gPxBNxnUg9GJ6Zcls4rgpXLLbGcI9Y99fUKny+Hp?= =?us-ascii?Q?spB8iALfO92DzJNhmM3G3ndBa2UOGw2mNKK7AoVneSEQezFY+2wEpzU5Bjgg?= =?us-ascii?Q?8YJDEzyfNLmYZh76JtXEywZe1VpkIL1OmX/JltAEryQGMVlKbBDlR9lPEUmg?= =?us-ascii?Q?5du1VKHHKqzGKtWGzif3tB1sfIIe4W3VR9YT/tb/OioBs+iwmB71X7S5u5s6?= =?us-ascii?Q?6pIEUnbn5dJuX+6QZaarEFt0Wesown5q4QAAS5e?= X-Microsoft-Antispam-Message-Info: 0yUoEo3VNSqWzqq+Z14r2ptS0duo3qvZj0G6/pnL3zsMUxLAd77zn8JYomppw28PAgxboFe4ZX2cnp6eMos0Pn7h1TS5VdefnA8QAiQ6mBfM3O6VgvE9rAfLW3DIzycwD5vcoaZboxJk6AOCFPJO/hz1PPuIYZy+Nia2oYZvoyUPvzqG4qINDnRVlljr3TqJcx+DkX5sm29c1w2FGRFPFVOAEb0jnHgpGQ9W0cyMrEVkRF1ZkaEyg1q9U8rVIAhONLx77Nf4CFJK1dMhB12Vmzm21eUbbhCHZ700LMzmK6Pp/GNXe3Ho8+rSxxRm4MN3nPaJPmP//uXS4aAj6btKStuSfucuahEj0+JDIlLVRuI= X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 6:Yau809vvKsIJZ+4c2SD4Aq3gDIh8SESXKw5f6OT3vwK0YYU6UtE35wVA5T65GQ1ZZCPjnNQ1t2+fF8jpszjYGKZtn6l1S/oZtjIE3CdLPmggFZw/bF/bUdkl5akX2Pljysoxt+HX+NlWrKGH7nq8prL5hn4FepHuqebsuwGih2NvAiSdj+3bMpgV+LPxo2k1K7iglvrlMOyW6WFmJBTcbTEJgyHvC2XhETrMonurMy41JbQNYTRhUICeNxqnG28Mrz+GHBw4lqgWZ2RwYwZt0FADPQuhnnY8hKUlB/pppFhlWTxzUo7e1JsMeuNeTX6aYIzXFFPPO2wdZGdG5MSeu+XfHNAMaUU/1jHjJpTPLG1XBXGR6xsk3UVK9jsivEqdeWcYGAfFbv4fxhDKf1pv79jTJ+kgRwPFhtDtXH5JDRkCndWMkZLnuk4r3BZPt6lY8VhTLXURxjrb69hwh64h4w==; 5:EQ/eVCeYv5fTJkM/LlxvrQEUy0RMlAZrFlp+XLHcZgrge1oPIxdKewspi7auxrfKsYEUiF7FNGMFWsKKuRiflXIChF38lAJ4S2WasVVWR+nNBwmpjKUaqRU+D+vkk+MjVMhQZF/l5AGm5cKGYRlSHmaq1fNUq5pcmVatm3S6XhI=; 24:VGDuoPGjm/l8YeZ6Kh/OVEFMmJ6AnUMgDDfTuYpz+IbD+ijR6mPrvz9Jrs6i4U8XoUw6YXJDP7pkW7SXY7gOX3wvJflxm/EMx9rqhPUyZS8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 7:OGbwMsfjeZhcVFKAX5YPc+3w7078N2lXWQQsydmPaKSDBslxDrw3bJyggq0yN/+Mfp3LtEyLZsdpyALR+9pgbZRl/TvZSt5ItY7CK8SV+75GlvL7ZL9RWZAvzAlrckcmm5U9fg0hCb3j6Vhrbkyd5pYjBKM/3cz8cBVhW0kWwSZHzy9chApDhHoNJXWNr/OaBYK7RHRWFx/WHxirag6EIhojxXWrKWzhQ2GmFUz7cAVBafYfiARKBPspKl9dxmps; 20:Nf82ZbzyN8pR1+Z91XHFId/s5vuO7jnW60aGev2yYmlwgM/jKSiMelhRh68nnu9zaDumF9sTK0diZ8qMECIRD0hRdX6KHOmXXnpje+RqHzstydPwaynKhVrYcO0dQ5pbg5C30aPxPJPKYJur1y84t0zyKjOZi9AvbJlyz4m0C4k= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jul 2018 16:35:01.2042 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f389b8e6-6667-46b6-b49b-08d5e102ecae X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR04MB0387 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PULL v3 2/7] hw/riscv/sifive_e: Create a SiFive E 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, Alistair Francis , f4bug@amsat.org 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 Reviewed-by: Michael Clark --- 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..384b456540 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_E_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_e_soc_init(Object *obj) +{ + const struct MemmapEntry *memmap = sifive_e_memmap; + + SiFiveESoCState *s = RISCV_E_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_e_soc_realize(DeviceState *dev, Error **errp) +{ + const struct MemmapEntry *memmap = sifive_e_memmap; + + SiFiveESoCState *s = RISCV_E_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_e_soc_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(oc); + + dc->realize = riscv_sifive_e_soc_realize; + /* Reason: Uses serial_hds in realize function, thus can't be used twice */ + dc->user_creatable = false; +} + +static const TypeInfo riscv_sifive_e_soc_type_info = { + .name = TYPE_RISCV_E_SOC, + .parent = TYPE_DEVICE, + .instance_size = sizeof(SiFiveESoCState), + .instance_init = riscv_sifive_e_soc_init, + .class_init = riscv_sifive_e_soc_class_init, +}; + +static void riscv_sifive_e_soc_register_types(void) +{ + type_register_static(&riscv_sifive_e_soc_type_info); +} + +type_init(riscv_sifive_e_soc_register_types) diff --git a/include/hw/riscv/sifive_e.h b/include/hw/riscv/sifive_e.h index 12ad6d2ebb..7b6d8aed96 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_E_SOC "riscv.sifive.e.soc" +#define RISCV_E_SOC(obj) \ + OBJECT_CHECK(SiFiveESoCState, (obj), TYPE_RISCV_E_SOC) + +typedef struct SiFiveESoCState { /*< private >*/ SysBusDevice parent_obj; /*< public >*/ - RISCVHartArrayState soc; + RISCVHartArrayState cpus; DeviceState *plic; +} SiFiveESoCState; + +typedef struct SiFiveEState { + /*< private >*/ + SysBusDevice parent_obj; + + /*< public >*/ + SiFiveESoCState soc; } SiFiveEState; enum {