From nobody Tue Feb 10 04:57:33 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 1526081393371518.4997035261858; Fri, 11 May 2018 16:29:53 -0700 (PDT) Received: from localhost ([::1]:54281 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fHHU0-0001Tf-DE for importer@patchew.org; Fri, 11 May 2018 19:29:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51044) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fHHRz-0000Kn-EY for qemu-devel@nongnu.org; Fri, 11 May 2018 19:27:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fHHRu-0000Os-EB for qemu-devel@nongnu.org; Fri, 11 May 2018 19:27:47 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:20861) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fHHRt-0000OG-Vg for qemu-devel@nongnu.org; Fri, 11 May 2018 19:27:42 -0400 Received: from mail-cys01nam02lp0050.outbound.protection.outlook.com (HELO NAM02-CY1-obe.outbound.protection.outlook.com) ([207.46.163.50]) by ob1.hgst.iphmx.com with ESMTP; 12 May 2018 07:27:41 +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; Fri, 11 May 2018 23:27:38 +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=1526081263; x=1557617263; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=jUdKbC7w2zMpNVXwfasusCpUoC05m4dcuA+nzDJ6j4o=; b=Xm9LsFRa6wn2wdG6AyFieBtTIaysGJ22GgsqhK3RGELoWXQrSJpCxfER fHXkKYiHvI3P0QzKr/xK4L979jN19zoqZZrjOImIltF9hOLI7Dlu2fFEs tCBu376jQkRmyS0Rxloqs7rf42MnglQi5zDuqntiWsXJeY3S+HwJxm7He u92x54RD202hI9ogEvaEBidJsBiyrlOSQxtwsz+zUKWMp5r/w+O4N9U8o 8eNWkrMcrCGg46HZoZMB7GuyHfAZm9svcqncNWoekwlU3TJjw7Gjvk9TT LMoZD8JfSLvNA50uYWMVYqUhzdOjA/XKP4j8EZFy6u44JWSR0qPkUIUSY Q==; X-IronPort-AV: E=Sophos;i="5.49,390,1520870400"; d="scan'208";a="78667094" 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=ZFayafptN4sRURm3NqFl1PMwGWhg0U2fHgQQLGNSkfM=; b=lWop5JcY+XmvsO7390UZjbHip38V3RRZahSvG0+YneVYU7qxWLcWZBlPtl5VX0u3+HhsSvV8cDvDZoD3Ky4VaF93deDh7Yu2v/yWpsyUGImehdUHd458diSEfgFkkQ8b/0yoHrwR7DWF5L3yjDqyAjRGQ6VpW+Jhfeko8LaA87s= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; From: Alistair Francis To: qemu-devel@nongnu.org Date: Fri, 11 May 2018 16:27:29 -0700 Message-Id: <32268d8bff9666031e0c418b12e95de1106cf050.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: CO1PR15CA0091.namprd15.prod.outlook.com (2603:10b6:101:21::11) 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)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(48565401081)(2017052603328)(7153060)(7193020); SRVR:DM5PR04MB0412; X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 3:k7wHC1WP7DzxbDVrh/26QIq/erPf6FQ5zIIqusEVgxmbFWjCxNe9NNCPMtPqULMOFbEsFbWVkvDSK6WBq37ylK3bwMot88Iui6Djuw359ejHQ9nRXa/noUrfH6H/w44l2n8F5d9/GlQRKRm0yeMj1Lw5kFn6ehh9gBWWJ9fP9nCk/dINkabPg3mBFQvdVvH8o5yRQNk/UeMiLBpfNMkcHDG4YylycdHhTvOiN0/ZOP1LddDV8UHb7JLPSnXlzvbg; 25:a+ZdX0qFISYUH2be3TkjL9QDr5COszhDhN+lOpFSjBznTGxkNiSH+CAsnHSLo10Lz0gnXCXHvMXhhwFEoZEyTAaMznFCcT4yLKrX1sY0EJJJBeUZ0JqTUb2O40d8M04LcnXdADMppwqGlDhqo06HWdKJ6BXDTOUVB+M6Kwv8V9Ax3Ez4p4+cpHhmfIdXKo/x1lTVhdezY4EcsvaUg7A8L3f6JPJgHkaw67it+MzkU/N7xtN9twzbf5l4oPlVkvdfcsJkWvQvo9I8Fja6mdCUWdCwKfG4yLLK1yAlo6QmSPNySgJCnyUBWx29bVpQOKYyQza29X9kx9me/Websc2l8w==; 31:k9NaZ9QjT518fjq1/OPvl1qzmlLJsb3yjFA8hFBQlb8K48IP1F+UV8NjVZzFlI1Is+hvqvqjgFPFoO1ZC8wF8IOK3jkc5PNjLhq4BY8Q4PxsgbBcKIuRqpV4UygqyPv+pONXPF6Q8HNGBPJIJ1/KMBdFcpStxsxzALZcgT8v4bEmgcNP5lo2WjIeJWCUhw+4xcdnFkhl/3Tfe8ek7GCXzk4OkuH9vdi7ctsOG2zIBWQ= X-MS-TrafficTypeDiagnostic: DM5PR04MB0412: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 20:2gdwlvt1thpXPmgVv4VzBaZx+MtgQ9wJBnjDJqpjzNnu0BoGKr3AennWFUtop3jUk9t5YBVmSDEt9JVsILbwKsXX6faohn9IqYaX0xjsPPZ48UfWnJHX92xtcPO9Mcnzuwcq4SujKBCpJTrCa22BTO6qRMXDjx+TgDLT1Vvo3wTzyHoL63wcGv8uNIzFaX1v2o4T46s0hTI8Ok/NjFw9+au+r0im59+YTEvkq8UK+1HzqVwIuxF6fnsN0twer7JV4U04KO+LYJEAMF3SrwUswSmP1cPh3NLZVrMngQx7Z+PRaC/FwN8sSKxFCyrOZ7P9IsjIMBCYmzQDyh6PN/YxvoVdrLBvv+5B67Cm6AiNLHH93HHnmAOSc2A2X252D0tr8o4gIayFR0XzwW23pealY8dYylMBVMgRoTu+CafAK6pXJKZYYIOdpN83RlbpgyZ7lF715H4Uyf0RgXYFCzabuRKA3A1E4BQU8OBF75FV3PvV94sfimtNvFjKHxSsXJ+k; 4:bLCkFqBMOo+4COM+CQrlTiNL/7olJKUOzyme6AONHb2YUcSDvmtVHRFe6sBBEQm4POt89I30EURFc4WedtSEkUXdTqdUrdZO9KXOheDddXFG9mHq6qMj0IZigqqRSk+PTL07fs0DRxPQp0lN2V497B0/PFJ0CLtHJF3dcYzTLQDjcQS2GIgX32ieYu2bACiy/h/In6AoLmN5fut1IvD746B9uobch/9mnI4Ib3XeAoIdMnUIergfYlOUTSCKHlAwxkTLbEAEi5YT6LwlHQX3GQ== 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)(20161123564045)(20161123562045)(20161123560045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DM5PR04MB0412; BCL:0; PCL:0; RULEID:; SRVR:DM5PR04MB0412; X-Forefront-PRVS: 06691A4183 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(346002)(39860400002)(366004)(39380400002)(376002)(189003)(199004)(44832011)(50466002)(2361001)(48376002)(50226002)(11346002)(36756003)(66066001)(486006)(476003)(47776003)(118296001)(2351001)(2616005)(25786009)(956004)(5660300001)(8676002)(446003)(3846002)(6116002)(2906002)(81156014)(51416003)(76176011)(72206003)(305945005)(16586007)(316002)(86362001)(8936002)(52116002)(105586002)(6486002)(4326008)(81166006)(7736002)(478600001)(39060400002)(186003)(106356001)(6512007)(68736007)(6506007)(6916009)(26005)(386003)(53936002)(16526019)(6666003)(97736004); 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:6wfJmOpqNqWxDeXsycwKwXFdI7UG+mXEY9RgZj0GC?= =?us-ascii?Q?Uw8nDa2tDmBxWJszInBc2+2+YA0vIzcNtlZkX1cyt9qoFLfGDkaI2gXPNKz6?= =?us-ascii?Q?CUCMcxSaKN39tVH3FJYF5zF9vOjPID75bOVikHmg+/XV0N776rnvnp35JnI4?= =?us-ascii?Q?O6DdINeYZahQTnvIrJnCa6nQ1JkROlcVIc9HWIuqQTcmR5GR0xyeVeY3iM6V?= =?us-ascii?Q?rkkX6GAET31MC6v5AQ+oqOCSuR7QC19c1XPStk8ovhDDs/UhpaK/WhMMQRJu?= =?us-ascii?Q?9y8rjzgZfj+uos+rY8UK4ygl1u0gbYG23DEogfqRBoNAnBf2cEsKwKJRXGU9?= =?us-ascii?Q?doHMZlxblQAwE+M+d+lvycmqafdixkukRrZuYgw+z3aYBNxPmB8b1fpYHZxK?= =?us-ascii?Q?YSFhjSWkcdNn2RvypZP78bvLc3qpVaSXSejBgZDl6fxG4zGfMTwY+b1qcVv9?= =?us-ascii?Q?lqhlcSwJ6SY3eoHyC9PlLcBU9Zp/B/0nODfUeDbtDcbnMuhY0Pt2VkJUQ+v5?= =?us-ascii?Q?+aGHTnIc4u3QdWnOzJReijgzrOXSV6qa3nt7XKT5+uLIlYV4w93jnyOySOAB?= =?us-ascii?Q?xqr9Eoli5N6knXrFYiUhTsyoaVErgCGj0yGniS5P3ac4ozQIkZokWhhSehlw?= =?us-ascii?Q?aACsnxtqXW2IOQkBDgrtIQSHip90ky0QZVXpLpiM+wMdcjAonu5Es5PVuY4w?= =?us-ascii?Q?JEVZswbq09oTtlKtvjBq5TXuLHHuv5bIyXqBXSkCWnBweDzsHTX9fx5mRH/b?= =?us-ascii?Q?DLGcNsUNMay3PZxwpZNdjLSVaYD3+KT7UIytQU2W36ACsdDx69n9VtmCiLfH?= =?us-ascii?Q?3Bm17GRcHerXrYVWp5J6xKUG4Z0KEWWcrjUaHZsogFck/bhsDZ0KCLFEsDtp?= =?us-ascii?Q?jab6rbZAgo+yqjWUSpEhDhplsdM2DBJeku3qLXW8tspL2eDN2ZknD67+8qoL?= =?us-ascii?Q?j3VspniD5gfKXdlcEfKNW+o8uq9+Q3yMh2w+aPneY5v4XFY6TO/MeMO/w/La?= =?us-ascii?Q?m3xiXmjh8Y0PZmKv0FNz08n3n4D0edq77akoELFjSegCh4pnn6TKHpGZXNiS?= =?us-ascii?Q?Q7vCbdVpxzd1THLzGRR90kx1kjCvXQGtj+BjtvkOycVlEMw8lqV+afpF532Y?= =?us-ascii?Q?rFn9X3vQogcjQ+xwl6zQSM5l7Wr++rY3dZz2kLza8zOstpldRhEQt2v+okC8?= =?us-ascii?Q?R/P/L9qQUx3uqsrADj0ya7cSKxsFEncQlm5+8fwPdR5tGEeQatS54NqijvMv?= =?us-ascii?Q?3W0zGKJ//aTY46mdME7aGEF3gkSOUpYVMHzuern802oGYOSPBm5a6+tpIYzr?= =?us-ascii?Q?ySHTsF4A95/RNvv4L56/3I=3D?= X-Microsoft-Antispam-Message-Info: DmmKBwZvt9DPOsUQTZo7OGGLDCV7ZBsdSIWdq+Ju1BCs+F7njDqhJHKfDsP4InY1TJtGBS1s4EKqUIv9D6E+nwMpo025Pr53v1YeoZ/7Jj48IX1aEd5E3KpDPEi+tCTTjtoGHNw9kWbPJD5goTONIlZZk1XA5rYtrl+SIjOOZQ0O/bfZYdSpdLi/hmo+rZmQ X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 6:16wintW7ovWsqngZC5Xr2CpV7djTWrD0opOPY2ukh9mdXGQSJQlM1umV5jpdTOVoDVxLCvlLGBYXi21e0U75OQZrKVUYmD8KrDwxUhH2uNmyh1ol4/6Wcfy/rY4Q0u90xijO951Rr6NW6l9XrZ0Zn81X8mysKr1GKlFnLF+iP+grNvER8tSO63q6LnH5zFA1pyiiYjt5M8g5Rr442CjMfWWrOIbHGOBApW5sZZTLhA/grxoafAWABfCMKdTeSzJRFJdLXd2KAK4SfokK3WFpxzDxWTZRc+QdPJUeAokbJU37TanLcK3q3atBitklxOW+457zGqd1uc6Cv83qpN0gRC26IsiztRbnyhjyVnJ+bjka7ZlXGgwgHCPIyF3JzvzTbS3tXkGBXU+uOLbz2hUeSfgqDzNWwB6nhUIF9wEC/SAYIBtWc2Zx8H1D3LAccCtgpqAYRpoN0qxquJG6fn8TKA==; 5:IyCCI7utU74RSymd6GT7qE0zPVODlyxBu0D+MVTfkEDkpoNfRTHtqrIcz32ZJb+wokdVE/ZT/h6vLZswc6ORUOsPAMJsURLzSAd3nQtHWQLZaENCO+t3UDoicWDLFPr1vzlexCPczfQ9xzPZ65qSfxg1yPOv9j/2oJkeNxiTUOI=; 24:bcp8e8ZH5Nm8LeIysC8+vtpVyuwZUdRu857NGaacP/j1KatOAdWq3/cUfQuinZamJmStrqvE9P1v6kycu8zlgrIdKNGdYPxdLDBvef1nE6k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0412; 7:WyTZtH5u4GetfILdAzP+J4l1Ko/fHYeaRjsw0A8Kru2Hj/h5BxERQRRhU9wBMjuiJUnORRFHJOrDTNjmLZJ6BXqm/jxg+x1qzQ2ZsGV1YUPQHjp9VvLiMQdyQxMb4fkkuuB+wytd/yq1VUVQQuyh3rKEMnrLCdupvKXs6XhuSmMsMVGATJz+foZ+bXS4LbPAvQkArXkLYmFAcLtiGtjMONvl7h8gzIrQxv7qM98r8f3fihUJ56JiMXPv3J/1haVp; 20:F+uDLQIGv8taIGj8g6YC2h9+4SL7GUcO+9o8UKqyFU3G1jcPHnh3+ngZYqhxKd7xQ1H4GhmATaZ52Rj5Wgp78C9KaiEWFK5nZMU39TBVEdeNrBqKUOOkBP2uwwu8B4quKpYNbnpqaHWlEhIKcNOKTjeqYl+3GA12rTlW+RF6WOs= X-MS-Office365-Filtering-Correlation-Id: e2c5fbd8-bc3a-4cf9-ca67-08d5b796c94f X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2018 23:27:38.9313 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e2c5fbd8-bc3a-4cf9-ca67-08d5b796c94f 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.45 Subject: [Qemu-devel] [PATCH v2 1/7] hw/riscv/sifive_u: Create a U54 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" Create a SiFive Unleashed U54 SoC and use that in the sifive_u machine. We leave the SoC, RAM, device tree and reset/fdt loading as part of the machine. All the other device creation has been moved to the SoC. Signed-off-by: Alistair Francis Reviewed-by: Michael Clark --- hw/riscv/sifive_u.c | 90 ++++++++++++++++++++++++++++--------- include/hw/riscv/sifive_u.h | 16 ++++++- 2 files changed, 82 insertions(+), 24 deletions(-) diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index c05dcbba95..26155e932d 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -116,10 +116,10 @@ static void create_fdt(SiFiveUState *s, const struct = MemmapEntry *memmap, qemu_fdt_setprop_cell(fdt, "/cpus", "#size-cells", 0x0); qemu_fdt_setprop_cell(fdt, "/cpus", "#address-cells", 0x1); =20 - for (cpu =3D s->soc.num_harts - 1; cpu >=3D 0; cpu--) { + for (cpu =3D s->soc.cpus.num_harts - 1; cpu >=3D 0; cpu--) { nodename =3D g_strdup_printf("/cpus/cpu@%d", cpu); char *intc =3D g_strdup_printf("/cpus/cpu@%d/interrupt-controller"= , cpu); - char *isa =3D riscv_isa_string(&s->soc.harts[cpu]); + char *isa =3D riscv_isa_string(&s->soc.cpus.harts[cpu]); qemu_fdt_add_subnode(fdt, nodename); qemu_fdt_setprop_cell(fdt, nodename, "clock-frequency", SIFIVE_U_CLOCK_FREQ); @@ -140,8 +140,8 @@ static void create_fdt(SiFiveUState *s, const struct Me= mmapEntry *memmap, g_free(nodename); } =20 - cells =3D g_new0(uint32_t, s->soc.num_harts * 4); - for (cpu =3D 0; cpu < s->soc.num_harts; cpu++) { + cells =3D g_new0(uint32_t, s->soc.cpus.num_harts * 4); + for (cpu =3D 0; cpu < s->soc.cpus.num_harts; cpu++) { nodename =3D g_strdup_printf("/cpus/cpu@%d/interrupt-controller", cpu); uint32_t intc_phandle =3D qemu_fdt_get_phandle(fdt, nodename); @@ -159,12 +159,12 @@ static void create_fdt(SiFiveUState *s, const struct = MemmapEntry *memmap, 0x0, memmap[SIFIVE_U_CLINT].base, 0x0, memmap[SIFIVE_U_CLINT].size); qemu_fdt_setprop(fdt, nodename, "interrupts-extended", - cells, s->soc.num_harts * sizeof(uint32_t) * 4); + cells, s->soc.cpus.num_harts * sizeof(uint32_t) * 4); g_free(cells); g_free(nodename); =20 - cells =3D g_new0(uint32_t, s->soc.num_harts * 4); - for (cpu =3D 0; cpu < s->soc.num_harts; cpu++) { + cells =3D g_new0(uint32_t, s->soc.cpus.num_harts * 4); + for (cpu =3D 0; cpu < s->soc.cpus.num_harts; cpu++) { nodename =3D g_strdup_printf("/cpus/cpu@%d/interrupt-controller", cpu); uint32_t intc_phandle =3D qemu_fdt_get_phandle(fdt, nodename); @@ -181,7 +181,7 @@ static void create_fdt(SiFiveUState *s, const struct Me= mmapEntry *memmap, qemu_fdt_setprop_string(fdt, nodename, "compatible", "riscv,plic0"); qemu_fdt_setprop(fdt, nodename, "interrupt-controller", NULL, 0); qemu_fdt_setprop(fdt, nodename, "interrupts-extended", - cells, s->soc.num_harts * sizeof(uint32_t) * 4); + cells, s->soc.cpus.num_harts * sizeof(uint32_t) * 4); qemu_fdt_setprop_cells(fdt, nodename, "reg", 0x0, memmap[SIFIVE_U_PLIC].base, 0x0, memmap[SIFIVE_U_PLIC].size); @@ -217,17 +217,12 @@ static void riscv_sifive_u_init(MachineState *machine) SiFiveUState *s =3D g_new0(SiFiveUState, 1); MemoryRegion *system_memory =3D get_system_memory(); MemoryRegion *main_mem =3D g_new(MemoryRegion, 1); - MemoryRegion *mask_rom =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_U54_SOC); object_property_add_child(OBJECT(machine), "soc", OBJECT(&s->soc), &error_abort); - object_property_set_str(OBJECT(&s->soc), SIFIVE_U_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 @@ -235,17 +230,11 @@ static void riscv_sifive_u_init(MachineState *machine) memory_region_init_ram(main_mem, NULL, "riscv.sifive.u.ram", machine->ram_size, &error_fatal); memory_region_add_subregion(system_memory, memmap[SIFIVE_U_DRAM].base, - main_mem); + main_mem); =20 /* create device tree */ create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline); =20 - /* boot rom */ - memory_region_init_rom(mask_rom, NULL, "riscv.sifive.u.mrom", - memmap[SIFIVE_U_MROM].size, &error_fatal); - memory_region_add_subregion(system_memory, memmap[SIFIVE_U_MROM].base, - mask_rom); - if (machine->kernel_filename) { load_kernel(machine->kernel_filename); } @@ -284,6 +273,39 @@ static void riscv_sifive_u_init(MachineState *machine) rom_add_blob_fixed_as("mrom.fdt", s->fdt, fdt_totalsize(s->fdt), memmap[SIFIVE_U_MROM].base + sizeof(reset_vec), &address_space_memory); +} + +static void riscv_sifive_u54_init(Object *obj) +{ + const struct MemmapEntry *memmap =3D sifive_u_memmap; + + SiFiveU54State *s =3D RISCV_U54_SOC(obj); + MemoryRegion *system_memory =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_U_CPU, "cpu-type", + &error_abort); + object_property_set_int(OBJECT(&s->cpus), smp_cpus, "num-harts", + &error_abort); + + /* boot rom */ + memory_region_init_rom(mask_rom, NULL, "riscv.sifive.u.mrom", + memmap[SIFIVE_U_MROM].size, &error_fatal); + memory_region_add_subregion(system_memory, memmap[SIFIVE_U_MROM].base, + mask_rom); +} + +static void riscv_sifive_u54_realize(DeviceState *dev, Error **errp) +{ + SiFiveU54State *s =3D RISCV_U54_SOC(dev); + const struct MemmapEntry *memmap =3D sifive_u_memmap; + MemoryRegion *system_memory =3D get_system_memory(); + + object_property_set_bool(OBJECT(&s->cpus), true, "realized", + &error_abort); =20 /* MMIO */ s->plic =3D sifive_plic_create(memmap[SIFIVE_U_PLIC].base, @@ -314,3 +336,27 @@ static void riscv_sifive_u_machine_init(MachineClass *= mc) } =20 DEFINE_MACHINE("sifive_u", riscv_sifive_u_machine_init) + +static void riscv_sifive_u54_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + dc->realize =3D riscv_sifive_u54_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_u54_type_info =3D { + .name =3D TYPE_RISCV_U54_SOC, + .parent =3D TYPE_DEVICE, + .instance_size =3D sizeof(SiFiveU54State), + .instance_init =3D riscv_sifive_u54_init, + .class_init =3D riscv_sifive_u54_class_init, +}; + +static void riscv_sifive_u54_register_types(void) +{ + type_register_static(&riscv_sifive_u54_type_info); +} + +type_init(riscv_sifive_u54_register_types) diff --git a/include/hw/riscv/sifive_u.h b/include/hw/riscv/sifive_u.h index 94a390566e..0f8bdd8fab 100644 --- a/include/hw/riscv/sifive_u.h +++ b/include/hw/riscv/sifive_u.h @@ -19,13 +19,25 @@ #ifndef HW_SIFIVE_U_H #define HW_SIFIVE_U_H =20 -typedef struct SiFiveUState { +#define TYPE_RISCV_U54_SOC "riscv.sifive.u54" +#define RISCV_U54_SOC(obj) \ + OBJECT_CHECK(SiFiveU54State, (obj), TYPE_RISCV_U54_SOC) + +typedef struct SiFiveU54State { /*< private >*/ SysBusDevice parent_obj; =20 /*< public >*/ - RISCVHartArrayState soc; + RISCVHartArrayState cpus; DeviceState *plic; +} SiFiveU54State; + +typedef struct SiFiveUState { + /*< private >*/ + SysBusDevice parent_obj; + + /*< public >*/ + SiFiveU54State soc; void *fdt; int fdt_size; } SiFiveUState; --=20 2.17.0