From nobody Tue Feb 10 09:58:55 2026 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 1530293255334532.3575338564409; Fri, 29 Jun 2018 10:27:35 -0700 (PDT) Received: from localhost ([::1]:43687 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYxBG-0007lq-FG for importer@patchew.org; Fri, 29 Jun 2018 13:27:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42155) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYx6R-00044z-Ld for qemu-devel@nongnu.org; Fri, 29 Jun 2018 13:22:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fYx6O-0003Lk-2B for qemu-devel@nongnu.org; Fri, 29 Jun 2018 13:22:35 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:54503) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fYx6N-0003Hx-Pz for qemu-devel@nongnu.org; Fri, 29 Jun 2018 13:22:31 -0400 Received: from mail-co1nam04lp0055.outbound.protection.outlook.com (HELO NAM04-CO1-obe.outbound.protection.outlook.com) ([216.32.181.55]) by ob1.hgst.iphmx.com with ESMTP; 30 Jun 2018 01:22:29 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by CY4PR04MB0391.namprd04.prod.outlook.com (2603:10b6:903:b1::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.20; Fri, 29 Jun 2018 17:22:27 +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=1530292952; x=1561828952; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=/KuvZZNKysgI2G0BykqNNF2HqGNRfOu3vCQ4mktBpMk=; b=UfrCdizrIalxd7RJsoDkHsED1v9nUfvEzZX/qU01jv5v9aWwGXA6Rbot WQHI6L3j1NUsDHPqbvOE5sY0SJNiX2CuzTaWDSlwkMNmqGSCWB9OICbVK 8AKwH1xavTbtgKd5/N+3bfCizcYiz8paDhyHwSCk+dYegHZgEJ+EvKMrD 2QqCsV3d8CufteYeMwBgaAF2UyT4M28SYlEL8ZBhXIpgU7Swbwp9yJI8s mGWdVaJNqNXgSXcmlcrnjfLt9xll9FjihdxFcIJ8T1DnaSVPGUjenXFBX DU8bsc2cy96cvHA+mgEN3tZHDf2IN9lxnsibE1MgRjwgjrM+K6JhCkiOw w==; X-IronPort-AV: E=Sophos;i="5.51,286,1526313600"; d="scan'208";a="82461896" 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=iIdw4QNfTBMUsubM3rF9/MVKp37CjRtQ0BExkopyi0Wya8QtAGWQq1DgM2CSQ/NL8XTgF94xVhtf0E4WkMs+5BPx4BWVewftZK1HIuJw/wS4zZFUjbTYnPuxSavw6HVstmzfxcYtObkQJsd/kcwRyHeqRht7z4EpW83sBWAC92E= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; From: Alistair Francis To: qemu-devel@nongnu.org, peter.maydell@linaro.org, mjc@sifive.com Date: Fri, 29 Jun 2018 10:22:10 -0700 Message-Id: <20180629172215.29475-3-alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180629172215.29475-1-alistair.francis@wdc.com> References: <20180629172215.29475-1-alistair.francis@wdc.com> MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: BYAPR03CA0029.namprd03.prod.outlook.com (2603:10b6:a02:a8::42) To CY4PR04MB0391.namprd04.prod.outlook.com (2603:10b6:903:b1::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ff31c5df-bbda-45d6-48c2-08d5dde4e35f X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600026)(711020)(48565401081)(2017052603328)(7153060)(7193020); SRVR:CY4PR04MB0391; X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 3:8iBUqU+K3Z5PUG45yln1Smmt5kAqXv2rFbx+XNCv5ay++GXXDoJDzhBvpRyKmxKWyZ196gDZXoF2gNFVQ0h8GMeL3seiNxezXN5g1UBi/TSs3ydhhJ1a/mMjTnbO0fMHzsc20YC/d4HtEjtRZ+jE6yHpYETew6Q3hk4Z+OHilVjx4eCQ9wcmLrm7Z3xKisdeCbtOkSNoHbaukmh2RRu+hKZaRGIV1uG08Eno8YYhvhY7/n1UNt6EsLoj2MlD+K+M; 25:ZAKz0FXA986zRpDmk08ijG0ll6g1TUeSHH/Y5w9Sw4JiNNC9EI3iS/spAWLoWjbprgthKQoBii9P9w2wR7/vYM3qPwIXjkJb6vDkA/Nwi07nNjvLtPH2moQjG3kFyYpZ0LGkR0mBgwbqZK4yUvLV3RUSgpHpxnccyhvqEGD2T9S/rHcWQopzpTtAdHp5/lhaodlhZ10vnwDMHetCUqwt7okKbANboSzRNnIpBczg7R29hf1DVbWHiqWtZIwrTidneQGEYbqmSfN15BikTuSMwnEy/iaMcu37HX/75lK0OXncEhWBKFtjJwLf47FV5huo5wMZxo/+4+wuUeRHwbcypw==; 31:AOZW6v8MgHuyY5DN2E5frIMQhY3EVfVX512JcFtlBSdFQ7kkaTEiegU+mE2O0yU8zQ0OuymRJMJ36bM91Ppa5Zfly8czks7IVX7RJW0FJrj3+CwCRqyzxF5tVh/GyjeOoUIpXzy2VYaJHi/ai8BU9jPDDyFwxHsq3dYRWdWdBrza3S6eg7w4kQyGew9gA1oNywhdsD3h3agTzcppCfbytY2Ta/FMGSAbCqYtcrWrJ0A= X-MS-TrafficTypeDiagnostic: CY4PR04MB0391: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 20:v1zouZjseVocSLxvQZHhnAM+7Hrrp9itvYJ2tD3KUirIWC9Zq6Ii639srEVA7/ORKFbWWSYDh/DOvq1Wc4tFkNKFsfcCt4z108IThiGoRFr/csuJ1W8KdHElKJVL//f/jCTzSyKNM4DSxSufdDAcKRaUW3+JGxO+FTtlBfS2sHfUoc3hq5IysuqSxzDmhyXjpuCFAuJq0AEgUEmCWokH3bCa1/ImqWK1i6bM1aoh4h/Faes2LMBqOurhxh5abk0wTXxA3ChtP29l6PWAoZJfEr1ODv8xCMYJ9WSCMlYbksgjKyWvYrocTaTl3KhY4zk+8Qp5XMseYNnx2gW6sBQY0kQ8DurIcL6sp6A185cackRT9Uztuif80m1Sl/hjh28mBrbiIimrwJGhwZjryJ8+4CvHVwWNApA9BU7qRL5/jUej+SEx7QO75CQ1QwcCfGmiZFZffC34IAYqu3LjFHQdB4o/bQ/lcG7SDhn8M/FYcwutE7yr2Mxf0b3JIx5AqJKM; 4:+sS/L4NAQRGcF0y93SR45WZtWCWSzxW31NpqnL/xTjSsKoXy0m8QCGyti5mH7LVL/TIJ6c23YUMzBGrTtaSA3oFrUBAEkXrG2dO6i+R7qfZzZDr4b8RJOgiynzhmW5D1WpITZeWQirFucB1ViaiSgsSiMPZDIjCr64Fsts17mBf0PGi46RF8uUN+EISAuMfvTGxajZiSOP350EH+238YpGskxomVsknEN+yBZ8WVNaBQwYlLi/Ty5BOKFjIaQkTTjILtr5hC4aCDEy/U3Iu8/A== 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)(5005006)(8121501046)(3231254)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:CY4PR04MB0391; BCL:0; PCL:0; RULEID:; SRVR:CY4PR04MB0391; X-Forefront-PRVS: 0718908305 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6029001)(136003)(39860400002)(366004)(346002)(396003)(376002)(199004)(189003)(446003)(16526019)(186003)(956004)(11346002)(26005)(2616005)(36756003)(39060400002)(72206003)(50226002)(316002)(4326008)(25786009)(44832011)(486006)(476003)(8936002)(48376002)(3846002)(6116002)(50466002)(68736007)(2906002)(105586002)(106356001)(478600001)(66066001)(53936002)(51416003)(52116002)(76176011)(305945005)(97736004)(6486002)(16586007)(386003)(47776003)(6506007)(1076002)(5660300001)(6512007)(6666003)(81156014)(8676002)(81166006)(86362001)(7736002)(14444005); DIR:OUT; SFP:1102; SCL:1; SRVR:CY4PR04MB0391; 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; CY4PR04MB0391; 23:YZNqrWmevi8PdZflOv2WOztM5mYcUmIbomXwfvPxt?= =?us-ascii?Q?KggIka8vMegC4Se5NkXPAzv+4rZRTGw0XQrujlsTX/R7n6Pb/vBB1GmX+omm?= =?us-ascii?Q?kweHTwxi9XKqNN6/e+qJwUb+aXuGX0TciubkpkfLzJZi9c2oIsfz0AlEFGrp?= =?us-ascii?Q?E3SARSaW7VyV3MXFdJJtb7Q5NsTC1EHovZjZjnYuzXm6BFC30yT9ZDYyPToF?= =?us-ascii?Q?HqieaN2fQpywuNAA4PkJ+LoyJ7CYyQtMbqiY93Tc0+AF+ufQfOAqai1036Hf?= =?us-ascii?Q?UrY5q+l3tidiGSutKswxKjq9NuwSIQI6HphWHiV+BoR5gjLLatmSmmpJJBlg?= =?us-ascii?Q?9O+A3wtSfvQEQ1hNN7g75lPIvT5d7oi4erc0kXLyBssCHyt/dXbu8EuLlGom?= =?us-ascii?Q?JGUnVllj+1C+wVqYO/KEufvRCdoNHSCkjaqswB6kVg1CFL5z5YB53eO1D1Pw?= =?us-ascii?Q?FafZYji7M9Ii31jkBTdh0XjCKDyBA8sEQhpIjaUtIvSlTRqiots47Xhns5Mb?= =?us-ascii?Q?tqkNia0ko75ueBeDl5HcdaBIIaQfxphBaxQzUxnKowtafdG3LJasaLvPw1/c?= =?us-ascii?Q?jfkH+/VENDFzZpvDmP5Ri4+8mSj8GKPGWj4FO5N/RiP/2p5WSIEb1KS5i1Eq?= =?us-ascii?Q?apelC2oEtRmQxGnHhhI8Hm5WWl3amEVgylisbw3cD9I8bddUtxsblP5GLmbZ?= =?us-ascii?Q?C8ar6vJH4xYWaVudwuzi/U2xwp+bv006eyQrY7Yu2RVzwp0qMvSWdNLa9kM0?= =?us-ascii?Q?NLbDJx4J4CAaTChmY+ydleBYKWvMaLdA5ZXcdEC36y2AhnaJQbm55LLkMzNm?= =?us-ascii?Q?sS21XM+oslWdpR7hFoprgAIN4rI4li5ggNJrJwdZ6euogApOFMBGrwBPFM6Q?= =?us-ascii?Q?uNiM9SKKq1+6SGw/siEaKvF8LsluVpGvhLgbB64eg4q35ZPGCe0QbX9dgFGw?= =?us-ascii?Q?b2GohFKxEWFhhyBLjPEItq05c6EO9A8Mj6KOV2klrfxLml0Pza+Ju0x5jAGC?= =?us-ascii?Q?l2gWknq358Vuo8U7bZcbxqKq6ybpo8ieBsu4cjI99VxqmrpcIRfgmLlP7j5G?= =?us-ascii?Q?YqF3fNN9hT7GdWj4EWbuzRxkrtxDbEveYtdBK3o3nkR1I5hHoRbgvW0uxqFD?= =?us-ascii?Q?T9wsNHRjXHwyyR3czSNEySELPfwH2vTkJt5S4H9TtgQm5e1T3f9AE76JTXWN?= =?us-ascii?Q?P6vCfL65BoVa7+Zer9eMkXRjAlWjtEb4Qw2kNA6EIA6Nn86PD3Bp4xCatSPx?= =?us-ascii?Q?4J9ilQAvgHp+/ro8+aoRJICGW1n4wnIGGmvi23p?= X-Microsoft-Antispam-Message-Info: wmkAVEPc2pIGkurdVDyf7Pw7VfDFZ+RMvKqY+FvsfGPhtT96Wm7oXswxH4UcgI42OZ1TqMRyuTpJaiMvmpDKvN0JtjvqgbL8nwENn27fDrYgSoDR4D/lWWtkarSn33890/aTajR1nWF24tKiuCIVlbcgnizMb6RCnHEljSta72FlR81/CsOvZMpZt4i8t+zVIoFUgifz3RVvL+hlaKbGBFB6vnaBv2Q9J5Gzusn0VZ4qnuExIJABZG9YDomtSrbsnB6KE2zk/uSPLQUOVle2smZB5QK2lHj6bcOE8uaxcUk97VrbWiWKvi4vObp4S/URw32J8O+4lIjZVwJq7kyUwhlXY39IDLW0zGchFQaeHsQ= X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 6:Z4hGbf3FhM1Fub5xiF/tmKwynUNC0qPKlTVxSk5GDqmD05lwVz3jxBMkESPeepPIL5jMrnQ2rQYQ3LgIVd7X9u9RgWTtId90Un3PPT/U0UN5cCSsXF3SUl1B+RAXRXaFE8iZLQHzyus8iLfj6vEeOQpUjG7OqF1FicYJ8F+8mpb+Knz9X7l/d51zwAFWykggUxziCe1cvhhT+jZOxEn89LDIen03biE2flbs/6NFf2LeXqU3sWgf5EuqHyoGqUWxkI3hipmiHAnXgzGoefe8Bf9KMfrSpYYtBhuoMgxKnyJDxK/qAwh7YzmjQCoivsDyGdlJMRBaLAa6hmZDkz5kqhEGE5J39NENO6PhcBdEdautOOLtvKyNmAbpiDsdseq7LtowJt2zvbjQgH52qdOoF6OSXQ/pvqz6bwKx9CsBXx/2D7/UEz7BicP3LeHNOcAmdRwtIcyEmjWog+A2BsIEtg==; 5:KZAPY7MSbDbSG/e5K0n+k5bglo3C1qhU/IVd1RcpPjEr1WjL05zwqotNudxAAoVKpvuNXmLt7R665KvoGMa1xaqO0qVpaPJQENsFqtTot78EL6cZrPEHMOKMiQHhnLMU0lBfYdIkI8kD2a8Vc6tMIwsYajok5wu+1cx0FQ+JhGM=; 24:PSEebRdnd/GU4nFQx1TOX5r2QZj8U5XeEiUnAUAN54CMaTD7LTzn3HhCb7s69TpbNfxIaq5WJO2JeTgm2KnYb3loKkwOvkcI/slvZ88RBuo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 7:HIvQuPuijbgiJCkI8iAtwWH3qkk2YTgrg39VEbqEO80r9TbZD4BG+oXLKwlvr0UodSTTlxTG+HZCWRGdjR0RDHBVODTYveV4t4UuloqQdCr1sXeMijBowfxbsrlNoxB579NrMCo/OjQWM7EP2vDhwKdIqhTF+P0/zD0+3DWpM8j77q279if6fkR5s+iQBUyFVzu3JGW0A+qw+XnSVQFxk0Hf0zQFS04McJNAIehBb35QHNVwNYyBOUP8Vg+AW0Ns; 20:P3bBgecbhdU0gS4ab6H2tLDuMt/KlDtbTdTOj43UZ/hUbllIemoVhQOLT132U5XKPmCNEyF3VZVC8/dQoA3I860rieNF8qlIIj9W6qdVgX81lS6MZHHSaaFK0YNGiaSg7fzLUqppz1Q+5KB7X3g5rVWvtPADbIPWQITbWwV3Bc8= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jun 2018 17:22:27.4543 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ff31c5df-bbda-45d6-48c2-08d5dde4e35f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR04MB0391 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [PULL v2 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+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.1