From nobody Thu Oct 30 15:35:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1526343064079771.1716673134916; Mon, 14 May 2018 17:11:04 -0700 (PDT) Received: from localhost ([::1]:55872 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fINYV-0005fL-5l for importer@patchew.org; Mon, 14 May 2018 20:11:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45273) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fINUy-00032x-QS for qemu-devel@nongnu.org; Mon, 14 May 2018 20:07:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fINUv-0008Kh-IE for qemu-devel@nongnu.org; Mon, 14 May 2018 20:07:24 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:26511) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fINUv-0008G6-3J for qemu-devel@nongnu.org; Mon, 14 May 2018 20:07:21 -0400 Received: from mail-co1nam03lp0024.outbound.protection.outlook.com (HELO NAM03-CO1-obe.outbound.protection.outlook.com) ([216.32.181.24]) by ob1.hgst.iphmx.com with ESMTP; 15 May 2018 08:07:20 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by DM5PR04MB0412.namprd04.prod.outlook.com (2603:10b6:3:9d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16; Tue, 15 May 2018 00:07:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1526342842; x=1557878842; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=BJ1IRDnBKBaFs3zHx3byVHTv8rtqzwWsxsUxxcnLgVk=; b=Dz8//t08o1SCzXRCZDVcedvvsatVppqkEnYgF5l1nft2d2tAXI7ZpIWA Df3ZyllCDdMq2JvDk/de+QRHMySp7OO8WuRoRRJXBsbIiZ+QxIaZCy8cX rh1ReCM0C2S+GyCzh+8eSoKuFNTSdXt0Q2vtb5wEFmSFL4z+V1UGIwP3c 1r+MgjBwcmMcuz8p9Zzm/ZD/gAqkCTNwcOyhGNrqnmwYBtcU8FIVFRSFE 3+4LMKNjKWbCr+jgTB1LPyhoQFsiv0lzEa+Q5v2+mYeft5S8PBFfFIZtj jyGmaWeVXaiDXPn5yJ30jnTGrxcKceMpH1gGobFrmHG4S+NmxYG5bqJ3x w==; X-IronPort-AV: E=Sophos;i="5.49,402,1520870400"; d="scan'208";a="77864113" 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=MLnnlUf455sR9DCHmruV5H0+nyc1yKJUWU0FCRuDu1I=; b=FvY+4ecTRuSVnNlAc7TF+/BNzctPnMi2iS7tQNV8k55Qn75XVbF0aaOqvF/pUU7DqEG0CB+ypkHiIxt6UG4ip4NrjQoaMwPQOrPgyC7gS6bo7uz9PAgjke10oZwPil2wj9hT9d3/BqNr9fjO4Xe45/YcsJjLN0LDqK8Gz0eF9Fw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; From: Alistair Francis To: qemu-devel@nongnu.org Date: Mon, 14 May 2018 17:07:07 -0700 Message-Id: <52767d6fcda555df477512b350f168d0de557b7a.1526342674.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: BYAPR02CA0032.namprd02.prod.outlook.com (2603:10b6:a02:ee::45) To DM5PR04MB0412.namprd04.prod.outlook.com (2603:10b6:3:9d::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(2017052603328)(7153060)(7193020); SRVR:DM5PR04MB0412; X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 3:e0flKUrHy5edLrj5dvqHKGJim45dJY7W2G/sLRhPWq4PqCxs3mLFcrACKEaYU4S+8Z900+yVGZ1Qj6RKMsfKYzf5Raqubga5X6pifam+P3v6OloojiZooX+rutcjqwj/fbh8hte6l/CBZOvU/vQjEjXidD7HRKRDIIRnlv//q8wGUKqsxo4H9faN3PGiHmTA9SNZKmvINZN4wcXkC3uL3iRkWk6UNySODvCqUwdmIDJZeIEyKGr6wHlR6b3/4QX5; 25:s93siVuwPZPbEpmd7IUalZI8yyA/76hO2zbSJz3pe62u59dMwkAacQfy4achcWGZdxfjSOHChQWLwQYH6BtrlAHFRGGqiYGiEmF9eqGwt1vE4VVcwFj2ou3AI85kbvWtDDGpXSmI3Bl+k1uBlT+teUscgMBBxrLnttpPi8gmeQscWlsMYS3C3t6CXAmv8ONp4CUAaNTxxNGqGjJbquILBe44LR4bSeZ3SAW6EwcZ13hNihCpPhYz9zu+tO9SEe2fCivifXO2+SUwxhFfH4irYXekwxOXnSVC74mdQKRxgng7YapSbp83ItOsQzmL6QEH5UOStdnXXLootMBTISundw==; 31:JifUEpydRkQ0GZrJIa530ldmLw4IeZe3zonsE75IIyMNg2ahGt98Qhm6vqOcylwDcTiOmbuN0PbjO8WDKBUq18XJaA64LsnTcExihP1lJjYWn7AtlDgEEVYOlf6Q3of5fXyiqWIr6XTigEJE4BqGIvkOgvUQrKWkJT/YHlgIoHbnJXrhTk4CBCy9CKfXOskU4s4Scrms3CDQ94JDt+MC1pwP6yzDngCJuW8YV4KGMwc= X-MS-TrafficTypeDiagnostic: DM5PR04MB0412: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 20:By9HNMM1KuEshv6G+29G9bC7oEyNHf/eoDZMg147jLLeRGH90OZIu4p9W+iybOjQgGZZMtWyUsVXhi49tTtukSMEuOeOoaFivMoyarz80+NwxuU5H3M6l6gAPNGVhuk0hHHZuXHYxKWEoJ6/o1Fhuf5XBJ8X9kDzkYp3f2ycUk7dzJSAiDd7IAMBjxzL41TnqJKOzbzJZlnFx6Vd+mACdMdL2kSvdLcC5AJUp7XSJHXnNlgqRGjwYPdV/ouOjdAwldqtq+0s3DRMejzlLZkwEzG5nlmrfqfrdEnPRJ3250Bj8X8X1s5JfIXjYZorsx6CCbSqd1TnGO0YWIt5W6P9mWbfJSdJnLRYPdpXjK4lE+mlQnjzEXIuj9HbcgXTAsDKuWTDim8TmjsMS6Gl5k1f2HM8CPT48aZZhUvxV/n1R3932PN4oTSUgNh73f20IOJ1ZLn4GnEhCcl1hxEMNMr6jrF8GhavcrpbsMF+Dw5gPQ27C/dBWUmQgaFneeNlYz78; 4:tR1s09/QWdz7gobwoYr9hzmNsz/BxFAAvTKQDoVMD4bcnFH7iTa1dnUT7JpDIGsXb+PH2GC+VyAkaIqQM+DgNfAs37W4All//r+BNdxIdxxrplnSOvt7CePmCXQ32D0AGA6KPPjE/qZviET5TTdgrlDq+5BTRCf8MIoXo7az2q/hCOFlprY8rQ/2eI6KHOYk7QCgIIJzAoeZEulN9UkHHLHGA6USuR83mF+lFswln+1B+EX3IVgdVbKFe5MOM4TA/uENpKAdhlqxHLuAKHpazg== 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)(20161123562045)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DM5PR04MB0412; BCL:0; PCL:0; RULEID:; SRVR:DM5PR04MB0412; X-Forefront-PRVS: 0673F5BE31 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6029001)(346002)(366004)(396003)(39860400002)(376002)(39380400002)(189003)(199004)(8676002)(53936002)(118296001)(956004)(476003)(11346002)(446003)(6506007)(8936002)(6666003)(48376002)(5660300001)(7736002)(50226002)(50466002)(25786009)(68736007)(316002)(39060400002)(6916009)(81166006)(81156014)(52116002)(51416003)(486006)(386003)(86362001)(186003)(16526019)(76176011)(44832011)(2616005)(26005)(59450400001)(2351001)(478600001)(4326008)(2906002)(6486002)(97736004)(305945005)(2361001)(66066001)(16586007)(3846002)(6116002)(6512007)(36756003)(106356001)(47776003)(72206003)(105586002); DIR:OUT; SFP:1102; SCL:1; SRVR:DM5PR04MB0412; 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; DM5PR04MB0412; 23:sViBlPHPeLlodcMnvoYzeaKgyHaG+NpqUo+FPU0/9?= =?us-ascii?Q?joum/SN4+udTKYnGJIjAZnZ3N2XDQ5EPOzZKWzWFXIg2oSlUiw8mkA9p9C2k?= =?us-ascii?Q?6RqQ1RRJPljMMRrrfSgr54zdz0O9WfNPBDi+PBwHF2ZX4reBCQROpm0qY8no?= =?us-ascii?Q?vjfiZx9lBiHHr88COeTYDWfYcLhEr4WsbzQS/MMMNTdGFqUzutiLEHH+nUrE?= =?us-ascii?Q?r7ulpfaW8cj7EO4XOkbGb0Z2kUHB2u3GmM6T5N/9RygsK68jUFTAPBsO+x3D?= =?us-ascii?Q?PWm9mKMPBKZdIr8GZ1jlNirHwCqFk+FG1DTkxh8rHPzMNMcXI7B3UgSx7E85?= =?us-ascii?Q?I/VtSbz/NhL4z5ijAkuU4LWZAt7HY8T7AO8vnlhW+S8PxnontEB3ps1QBm9S?= =?us-ascii?Q?O1Qg1T/9cT1hfT8Cbd7k6VS6QjTW2H5AK4esKpG+wb2+fdjga1g8RQvMiSJ8?= =?us-ascii?Q?7PF7FGzfxcdd+BwXLY/b/Vjn8+2GVgisJwDz51MfAnD3P7WPsN09tKAbnxjt?= =?us-ascii?Q?D88GYFCImUJLTaV121QFrZKT+V90brgVbBD0AxCUOGq7Z0X+oIPqdP6jg3wZ?= =?us-ascii?Q?b7CNqCHw5CKMwHqQ71I+Dl3QhpaTrxtkDSZ/2tt6DUo/sUKM8ZC5mxYtU4xh?= =?us-ascii?Q?w32rwEO+G2sQkmZkr28MG1vAlEOcuhiWT5DZA2z1UQBTH2UiE+4E6gqHIndn?= =?us-ascii?Q?5+O3fahOnywwfkBkgwQGsLpMR/CNHgYzCPTDJueHWoRbYGjmamenK9UYL2MX?= =?us-ascii?Q?6On0F0M/uaiSrAGojv3NmgD2O3FPzytxDJU4T0sAA8beh98xZsV1bdgZCR4A?= =?us-ascii?Q?x+XO71zgLdBG6NzxoAw3ErvTrVCwgjX+Z/RaVOKECiW4gi8Qdo78uqXKnd8K?= =?us-ascii?Q?GH5/UU1mmG6ZgAABgxvNativmIHTqvKrL9GmqC8+ToVkwSbzTwfWvi0DR9Co?= =?us-ascii?Q?ep0awWFuiZDH61pWh4TmUh+p2B4DDzHL3dhYh7MpkPiovwmwuB58xltpxzgr?= =?us-ascii?Q?/NtgLdZwoGkK11CqUAjK55yp74JsbUfcPVYN+URUMRXz7qh0kT3S55JBZaSU?= =?us-ascii?Q?SuTWwb77P23wZTf9YPfh7d2h7TfdI5NUSjZk4+jD/JUNP+5lLxlCT0hpb1H/?= =?us-ascii?Q?o+2t476lBIJnYIXXvUQ2FJn9dFx14D14Bt9blyCACMm+ovmdi84nEq1KvZtI?= =?us-ascii?Q?YrKFJm1a/AKvc9PC+5bxUBm4Lmao0dPOYyBLEy2uQuvpPYASUWLCpdydSGPc?= =?us-ascii?Q?0fDTJeN+kMjYiO2U3BYkl+Jso8bf83ZYIeJXb4S8ZDh0/LvvLOnPNVM3E8VA?= =?us-ascii?Q?c2TYhtJC6TpcjYVyjl9mKBXduTL4xcs9TNpduv77RjfZUVFMx0fJk99NOw6v?= =?us-ascii?Q?10iuA=3D=3D?= X-Microsoft-Antispam-Message-Info: 5UFF4JMaE3tQwuTDFgtMu3yTXAp9U9ra7FcaVGt6e+zZorn3yB/fsBkHp0ay+ZHWK4dxlpZUqXnFAbalSxrDTdslVA07/awZGPQ+ljfwZcyfvIeJr6QpaykzwpTjTOWeyYvMa2ODlkL3zv4S/roXVW0o6OLj835F3N1FY9MiHC7jOJy5tCvEVT+U6SXTERey X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 6:93IkcIlGOnQZ/PJAQhMz4X+YR3i5fZ2Ua+mw+XsUAAvOG8dBll1MjBxlu4/NMX2FhHAHoNi4XtqiUwokExoTnKcYxqiNlnSTl5I3KKc8SjAKNfXYO3+yGmpbPhXypC+FbEfc8KXcIRTIqXXY4/8lsrcad8UX+haRWGxeRXOTFZgVfyhuUtM8mmBBzQg61GgJNAJ1kViNiCpz4/RMFo/Xgd2z22pmZT9b8IbbHHLMbZXZ3AtCo+UeWRmef+4m2znkVe7hVcq+l0uiPm9Tdx6gvHDQqfJFK9ERvNI0mwBYP9CeAAfOi9OjMEczyWl7xScmdmko6PugzOm49CRVwpe8kXJdiPB60k5BfqHiKK+RtpGlH9sq/ll+T3iEjIxagZPAO99UoE12oK8pMoP1/vWnm3EjnnTm/+IZbdrlcqmFnbWIDYWV+yYRy20ZsqMaMqdnA6F4pRabHdfy1NpwXVtmDw==; 5:T51xznvUGap3PHFzpDCCehvsX2wm69cRHIM2rlBy7B3fPLCdhPBaEc21qXIacfbUBuuadWVADFyjALMBvDxLl9mzpYnQlYrE/+fvJXR8XUVtZRmm03kSzWdEzizy0FU5TS1JXmxlZcoP0zZ3HGuDjOFwGpGkJTfBVJl34OobEto=; 24:Joa28aAO31vvvxJUDQItCUQcvpXuaWw3cCn321xac1+VnEOxS/X/twPsRt6/34xKwS40/nc/VGdSuudsAeKl+uhCv8rtmL0Rv50IjrLPbsE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 7:OnKkt2pfNjFIyWltu75hoRc8kW5It218nwncautWZbT1ennCS3LRvpmpfzM2n1JNywji3XcUrcwwscRcyDxpvun3xC6CFcDgAbkp/J0X2vpRggcjIGI4sYlrEeBluqzX2aKKwoAabc9NLQGHJs8Cl6YC9ZY5YspM+XuigfwrR2/EG/uMGs8ojKdck7mh0jNy0yXY5Wk/Q3VwhTad8F6qoiaDk3AXeZv+fNfUOxYx+Dl40C9HbG7sv06iSlNlWv/F; 20:W38Gl49aduOrbI7Rj4ax5b/7rApZ2vRfUnAHsPS3/bhlt2oqg6wBy7G8TXjzR76JZ/NLvOJzZeWuomfq8ekuqTj8pjOgurQiKp22wPKkS4bUthriIw3VKpuwvF6pu7l94MIa1vy5QT1JqiqCMHZ9UydNURb0q61h/DV9DVjZu5k= X-MS-Office365-Filtering-Correlation-Id: 5873ea54-dc1f-42dc-1a42-08d5b9f7d206 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2018 00:07:17.1877 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5873ea54-dc1f-42dc-1a42-08d5b9f7d206 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR04MB0412 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [PATCH 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, mjc@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (found 2 invalid signatures) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 =3D g_new0(SiFiveEState, 1); MemoryRegion *sys_mem =3D get_system_memory(); MemoryRegion *main_mem =3D g_new(MemoryRegion, 1); - MemoryRegion *mask_rom =3D g_new(MemoryRegion, 1); - MemoryRegion *xip_mem =3D g_new(MemoryRegion, 1); int i; =20 - /* 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); =20 @@ -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); =20 + /* Mask ROM reset vector */ + uint32_t reset_vec[2] =3D { + 0x204002b7, /* 0x1000: lui t0,0x20400 */ + 0x00028067, /* 0x1004: jr t0 */ + }; + + /* copy in the reset vector in little_endian byte order */ + for (i =3D 0; i < sizeof(reset_vec) >> 2; i++) { + reset_vec[i] =3D 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_memor= y); + + if (machine->kernel_filename) { + load_kernel(machine->kernel_filename); + } +} + +static void riscv_sifive_e_soc_init(Object *obj) +{ + const struct MemmapEntry *memmap =3D sifive_e_memmap; + + SiFiveESoCState *s =3D RISCV_E_SOC(obj); + MemoryRegion *sys_mem =3D get_system_memory(); + MemoryRegion *mask_rom =3D 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 =3D sifive_e_memmap; + + SiFiveESoCState *s =3D RISCV_E_SOC(dev); + MemoryRegion *sys_mem =3D get_system_memory(); + MemoryRegion *xip_mem =3D g_new(MemoryRegion, 1); + + object_property_set_bool(OBJECT(&s->cpus), true, "realized", + &error_abort); =20 /* MMIO */ s->plic =3D 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_me= m); - - /* Mask ROM reset vector */ - uint32_t reset_vec[2] =3D { - 0x204002b7, /* 0x1000: lui t0,0x20400 */ - 0x00028067, /* 0x1004: jr t0 */ - }; - - /* copy in the reset vector in little_endian byte order */ - for (i =3D 0; i < sizeof(reset_vec) >> 2; i++) { - reset_vec[i] =3D 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_memor= y); - - if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); - } } =20 static void riscv_sifive_e_machine_init(MachineClass *mc) @@ -198,3 +221,27 @@ static void riscv_sifive_e_machine_init(MachineClass *= mc) } =20 DEFINE_MACHINE("sifive_e", riscv_sifive_e_machine_init) + +static void riscv_sifive_e_soc_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + dc->realize =3D riscv_sifive_e_soc_realize; + /* Reason: Uses serial_hds in realize function, thus can't be used twi= ce */ + dc->user_creatable =3D false; +} + +static const TypeInfo riscv_sifive_e_soc_type_info =3D { + .name =3D TYPE_RISCV_E_SOC, + .parent =3D TYPE_DEVICE, + .instance_size =3D sizeof(SiFiveESoCState), + .instance_init =3D riscv_sifive_e_soc_init, + .class_init =3D 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 =20 -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; =20 /*< public >*/ - RISCVHartArrayState soc; + RISCVHartArrayState cpus; DeviceState *plic; +} SiFiveESoCState; + +typedef struct SiFiveEState { + /*< private >*/ + SysBusDevice parent_obj; + + /*< public >*/ + SiFiveESoCState soc; } SiFiveEState; =20 enum { --=20 2.17.0