From nobody Tue Feb 10 02:45:09 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 1526081748296456.7500495751548; Fri, 11 May 2018 16:35:48 -0700 (PDT) Received: from localhost ([::1]:54712 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fHHZb-0003v0-Vr for importer@patchew.org; Fri, 11 May 2018 19:35:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51337) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fHHT5-0008Df-RO for qemu-devel@nongnu.org; Fri, 11 May 2018 19:29:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fHHT0-00015l-Sl for qemu-devel@nongnu.org; Fri, 11 May 2018 19:28:55 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:49258) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fHHT0-000152-EG for qemu-devel@nongnu.org; Fri, 11 May 2018 19:28:50 -0400 Received: from mail-bn3nam01lp0175.outbound.protection.outlook.com (HELO NAM01-BN3-obe.outbound.protection.outlook.com) ([216.32.180.175]) by ob1.hgst.iphmx.com with ESMTP; 12 May 2018 07:28:49 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by MWHPR04MB0416.namprd04.prod.outlook.com (2603:10b6:300:70::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:28:47 +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=1526081330; x=1557617330; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=9PISG7CApQwOEO3Mr5Ld3begmXaoPVKPseUoCmyiSj0=; b=L6Y+c6nu5Sx0jRRUZPNoU1CE3IIaQiYcaOwqxLsX6O4tStzzAXoUbTsg /0JKIxkUI16hOJ/VKlb3BSgpDwj/30ecHqo7B12x/SW/BDGSrn0r7g6+i ODEAGhB5IMOB+6V3azHgUseFFDUBpt3e+tJ2N7fGoTGTTA05W9xdPFwT8 X/oRgn6vikBYHjc6A3XolBFz/EsnHY2xSFRgDBFWjRDi1B04BvmDuFfqK I8tkXEgV89e+/Kjd2TVtJdFWSi7pSG8HQO+GB4hkKcMcfsZDZarGsFkad c/PVLBMdD72l3ryzXcFRSnxA1wBZq5juwcKltL6Xky2J/xAolc3oiaosV Q==; X-IronPort-AV: E=Sophos;i="5.49,390,1520870400"; d="scan'208";a="77724182" 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=O0o+D37utMI+MpF/BaOkDdsj3AIAF6JWYqf7FShAvpQ=; b=LsNVBCcrZ1emjuiYRlsBV2jn0vBnfplUhd5DnoGo1vQKzlBmpwppxJEiVWj/l17pnAC2visBVu1q3JTN4D+6wEPWH4C1csbzH5JxkXxIXs4FK65uvIuDoipzzxc9B+ajfR+Rts4n+rxOLwqRi/Jv3RUodpVoWPGSVAQQx3LmEZc= From: Alistair Francis To: qemu-devel@nongnu.org Date: Fri, 11 May 2018 16:28:39 -0700 Message-Id: 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: CO1PR15CA0081.namprd15.prod.outlook.com (2603:10b6:101:20::25) To MWHPR04MB0416.namprd04.prod.outlook.com (2603:10b6:300:70::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:MWHPR04MB0416; X-Microsoft-Exchange-Diagnostics: 1; MWHPR04MB0416; 3:EjAdmU8GtOFKe+dHxZAQE+IyR1ZirGYFAIVxI3J8P0ygps9mkBbXZuoBrlP9I6qf0uaOlNUlPxAF+MJlUY1IW69OLedDAf2iAzs1gnz72KxF/Cp4ZTdl0EzirBciVeU7SrscI3aM4wXzTSS2B1lItrbs+Zoo2Obodqu6LuX5JDMLup9fg5JmvaRZ34K9SIgT5ebvX8k5gnrj7C9Nzc+ojZXPinbsq9d986IsKb2IOZq50Txoeaoi6eZkjQk6GNBL; 25:/dquaEDk9y6AczNL0hOj3793+JUuyh0M24fmFkKGwG8CEuyLRgNHvI9CLTcfowD3vLwRxkAnjDqXv5Cco8XB9CujfjqsNik1Fl9FpgRnOiNWPo/P7CECv5FJ2OOfLRzWKAHuMUaZBFABGNfXE+83QY68BzgLBeq273VrhECaE/CFdh+cYz+dohaT5goLGGe+gSeUeoaqEsjua7EHP/DfIeqzSZdLXFGUPGGBAHUBhv19WxdwS+X7ACrJx6FFZ0UM9VBeepOUtGCAhuVQTV/FiasmZdFryCPCi+U3dSjgcxoAgku6uhxmjqlMh9sd+KyZ47tlE0OrLNuOO0jjXujRRw==; 31:yjHZ8Yf51MUYLPqN+fwyauspK/b0Wlgu3nkjP0Pv5HxcRGeSfkB8PYUs8mMVUsw8TM7R4g94pmObcQS0C6V6zX38TJH/Fk9wjH/c9VRmVMb9dJbFNzo5f0AZ7yKdInGv67dEYUHcS6/TiM4M2azZP2ZwOYAtVR85h1zcyWbrkAlkvjlEXg2TnBjcnhOLxvpTARLIbqtMaQikf/xNVNARLpqGnMu7gvG0OAPMa9VFFe0= X-MS-TrafficTypeDiagnostic: MWHPR04MB0416: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; MWHPR04MB0416; 20:qKgmwTqSrogbz00e9YLF/NekSYLk7/jJizUw1lzcxYdN0Rvx0ID8Ey9rI53yP3g99jAWkVf28xeGJqMfZqKSXnDjcIQ+v3RitrHCK7oCzjKsxjd+kT6Rwn8OBkoWeifJcP3YHbc6Fqonx5SH2Vx8xy9gwT7Lhbcam5bE8dh/njYt8ZsGj3yU8taZXuYxE5dCHpk+5Pgq6z2wagqk0Arr4+zawG74bLa4EEN2KxvNtfJZb2u4D+7qXfkm5Go2MSJswZ10cIpp0Nkpjtv+7zgtLrTTevEwTWuuI4gbuR66v8iefmB3yfB+CGHx+Qp2ZdQ/vHnuDiATN+ur+pJu+CpGVw14KYh+D5JJFIoMeKWYQrR+9UeMPKs8AYQj3NEwH7xzjDpRxGZTF5mNSV1vb0Qx/DfQv9nHdMpSx9fPELYIQftNGAiJb3azTStsVCpsRKS0gRjpNYutg5y/pPF0iwjeGx2QWcUK+psYi2uMMtqbHy4wb9/2MwtJCsCFpmxcrRyu; 4:OPQsWq7q8K6R2HOg2RagUQ7e32J1341wRH9xKXWkJRCCstHZ3YUMWvyNmDgqONSD7v6XZocMYdRNIHpdUZyrpUp3yYmnPHXmu4RdJQAitC1mv2QLAWiyydbFsEgj66Kj+jLzp89/BYiKAFaELGqu0HszzfOqI8Gc0BV/8IKl7wCA0d84TKYqPaBDXoWPhTUzaUcT/K8vqYN31uZwbg0lM3R9K/lguhndt5apI0xEBmDGkZWSHT7BO8uVsXk197JIyAMPv+fgUGF5nMlCtFvZ/mabGaSzLknUucgO+JwGIlGjHBo4WjdcpvQo4Tt165ps X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(21532816269658); 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)(3002001)(10201501046)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(6072148)(201708071742011); SRVR:MWHPR04MB0416; BCL:0; PCL:0; RULEID:; SRVR:MWHPR04MB0416; X-Forefront-PRVS: 06691A4183 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(39380400002)(346002)(366004)(39860400002)(376002)(396003)(189003)(199004)(6512007)(53936002)(186003)(386003)(4326008)(446003)(26005)(3846002)(6506007)(6116002)(25786009)(97736004)(316002)(48376002)(50466002)(16526019)(52116002)(47776003)(105586002)(51416003)(16586007)(76176011)(8936002)(66066001)(7736002)(36756003)(6916009)(6666003)(118296001)(2906002)(2616005)(956004)(44832011)(68736007)(305945005)(81166006)(2361001)(2351001)(106356001)(81156014)(8676002)(478600001)(486006)(39060400002)(11346002)(476003)(86362001)(50226002)(6486002)(72206003)(5660300001); DIR:OUT; SFP:1102; SCL:1; SRVR:MWHPR04MB0416; 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; MWHPR04MB0416; 23:aEBni8RtYx/pvLyQUIlV1aZJg5beogfFLjeAziMk+?= =?us-ascii?Q?DJ8gmG8bRfHYfL9i0ei/XE000RenDr2WU+7YVxRk7NG8mhIewJFPZVYNj6oF?= =?us-ascii?Q?1gwQz+dsSuUthW8EoQuW/iACHc5nQXdVEsWCTV9URoJuArzwoBSMbsumhXZy?= =?us-ascii?Q?jJRA7Oi1+vhbJtf160Oiajb3bVfD+Um3ZGFTYIBL+Ua/ctMUhgHfwqRBndVX?= =?us-ascii?Q?Nd9TNGaHt/6rLYisfLNVp1oFiMJ17nh+FyaSgAq+MBZP2uhNZP3iWPtTHnD3?= =?us-ascii?Q?nFSbCCt17Fw1R8zxbe5Ag6wSY7h7Ett10DZA+XGCTN28X9MFUIN5VnJEHSK4?= =?us-ascii?Q?qLybc+AjjlD/67ju8nKk8mbLfJLEUN7r+aNGz1tCYvddI4C/NVRYvO0X+Pgj?= =?us-ascii?Q?WtL8KMYRU949zEpf/07G5TM/ob5QxIFpQSMXkI1wgZgPX26vp+Ys1ZkzHg1g?= =?us-ascii?Q?WtOcQQkPCciL5svSNtf/mt5t9RLO3ShSi4C5Kfv6J7A2wSHyHcNkZWnYWYXj?= =?us-ascii?Q?x+z2XepygIFYtczvtd5H/I487u1yl3KMHOWdDoUsgoPeGVfV7AOIJUdy/BjG?= =?us-ascii?Q?uZw6rRmDC9t1P7ogWMUpBLhFVtkcictzjyNTu8Cq+6FrmydGGG7Kb1oIFJfe?= =?us-ascii?Q?1752mwPtdIsKpHmhlO0t2aKJtrS+EDPf5PgZWgilU6UICg11AeWE/jMN/4q4?= =?us-ascii?Q?BXSqyIRJglGy6lXNZvPoZ18mdZrx9Wf3c8IY5LSnpskmA7V2EJfPPgug7L+K?= =?us-ascii?Q?WGwmxTu7eaQrvC0MAIyNWZ0YBmRfUl01+n1X84mzeNhT96q7ZPhicbBZhj4s?= =?us-ascii?Q?9+9ToojzjaVYEwNU6JYFNx7WKukgmrqB4oYdb9fJe1psnOGKui+AR7P4ozQf?= =?us-ascii?Q?wak+P1YFr4KvU4QwghiXseJ+f2cFy7Fo/5yjVJkVYutNTeOT7Vu5WtKkpjlm?= =?us-ascii?Q?ORX5gvZCwEFA+G+lINVDJ29Y6So6dRvXJ+1DMku0lJ4rhhVqUMXIbyuuU1fx?= =?us-ascii?Q?mzkBca+0Cf1a10nkqAYjxf+q7XR19FvCMRBr0J7J3TogA2FHb71I6tFjzUIt?= =?us-ascii?Q?KRqV6tl5TF4A02xff53Nqk7bW061b2i3Pzge0YvQylNiOl4tNMKvc6xG9Oki?= =?us-ascii?Q?Kso9AmauEXBZ/6agDddOgb1XyNr1c4ta8R3z5XCWZJrCEg8Oyy82zRJFxZJ4?= =?us-ascii?Q?kyBHaOsyBlS/LCsvqtewm8FWwGWQ+4vOtTll1motVeD6v9DMqGgTbQgR2qTE?= =?us-ascii?Q?J8OXnu1DtE6e+j9YsH+9AaOocXKIK0G92bk+63aq3Rc3t0KXP8oi6MvTn4pu?= =?us-ascii?Q?FU8RJlymsAibnsCo6Kv/Kc=3D?= X-Microsoft-Antispam-Message-Info: tV+2DzKDsUALqLzRPW+2sxDettagnJzOPQhdrISpixXdjXPLggV2mrQ7C7A/Gn1sNulUqFpWv8mMM1k84BKSKUy7nrwEE1mMG76F/pZDq4o4kULBo//RkTSEUo2jJ0avzOcEABMozeNxJgT2G41r9jPaHXnlw2/zhO5QmbR7sp5tsDW7mDmSQHSXTPuOPyfp X-Microsoft-Exchange-Diagnostics: 1; MWHPR04MB0416; 6:Pu5A0ohZqgsmwT6psUEXPcOcD+pCQJULhpsXF9OMy0NEXhQXxVGSoSutscXFp8pFe/6xs1cuOKuo7AdcWfE43nibIB/ZKaDD/q6K6RFV9ysUAAbTCfJY/eMCgAmgWdAW0195Id+KwNUDoqIgAzlgLvyjfeqPK9qozx+FXqd60Fz/FveGCPUVt0uuwCc8ElyGh6XcDhOdPLrnPUjQBqVMky9Zdv0ztgZBmhDSOw1IwRo2JXxSms/lAzm+258OlQB39kdQWo4LMHahfLrrG5r2gkahPAB7GoAI/1tGcy6fwNlYGSNE31TbBW9faA+t/oOGLVm3Zl7IyfWdRkWhZsWtPScfm3WT9x5BYCJp0QGsNI92sSP4z660B8XWrIPjbA3xhlKzkJfeZ71cqFZGBrjHfrA5GUHfFEuhZFhCQ4FEwAJOv3K9VFjarTQSYSW75TccDi3rXUOhNw3yQ2kVV+sUUg==; 5:HNnDJ4JI8mPzn5yhkFSmCT9hKOpCTnG66b2zLl6Choh8d356ET2s1iPjduK+N47v4uHpL9T8hK00f2NVKAlWde7YuM4EMzo/EaNvwR2Our5sg0M9wZy5quuSpij/B9tw7BVdM5/L7JIpUed4FmclCM36foeC2yikv48BQ+LmVbU=; 24:Gsm7846HqZxsvLFtr4YYWPvucfsgicj71J44SfZGhX1VuQPI+SOVT4LQ3SLLa8iTGmTPj20TRa7DvdaiGhT58jljqy2iHN8A7Q2ml+JWqlg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR04MB0416; 7:qEaNmjkDkOxiHixdIf5ZsmvtNy0UVt6kClvaXfqcOGqXsKNct8eheLDYO7E/MyPZp9F+Mh37nSJ7NYRZXMkhLoD7ayJPY6vxUBJU0rzSmqGJiU5amfdHxWboyQ8LgugRmXiAa/pfwXbH5qPlhrEZvvuW3yJGuov9GiBw9mcpku82hmgLPa6l9zE7TEl8+ufDhYZbtze3WWC+kzSwUz6Z8N/1ZLpguV7k9ER9KBcYcbNfYaGy8Q8ciVuFSeE5rr6Y; 20:m/AARPbZ194qlDpCqnQlgknUivy47a0n8SvfPMtn4XuZcxUBaPYilTFMgeKxRl10hv9RW7Y7StKEB3uzf7C4pM6aj/NK6/yi70KvpwgSm/BzNQ3Wq6YU5La2xxa2tgCulvT8RYiJKmiln69aoGle0KGBVAzR9EFjDtir0eY5U6U= X-MS-Office365-Filtering-Correlation-Id: 3613e844-fcf4-4a4c-21d5-08d5b796f1db X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2018 23:28:47.1878 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3613e844-fcf4-4a4c-21d5-08d5b796f1db X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR04MB0416 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 v2 7/7] hw/riscv/sifive_u: Connect the Cadence GEM Ethernet device 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" Connect the Cadence GEM ethernet device. This also requires us to expose the plic interrupt lines. Signed-off-by: Alistair Francis Reviewed-by: Michael Clark --- default-configs/riscv32-softmmu.mak | 1 + default-configs/riscv64-softmmu.mak | 1 + hw/riscv/sifive_u.c | 50 +++++++++++++++++++++++++++++ include/hw/riscv/sifive_u.h | 9 ++++-- 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-= softmmu.mak index f9e742120c..9a1c42e8b2 100644 --- a/default-configs/riscv32-softmmu.mak +++ b/default-configs/riscv32-softmmu.mak @@ -2,3 +2,4 @@ =20 CONFIG_SERIAL=3Dy CONFIG_VIRTIO=3Dy +CONFIG_CADENCE=3Dy diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-= softmmu.mak index f9e742120c..9a1c42e8b2 100644 --- a/default-configs/riscv64-softmmu.mak +++ b/default-configs/riscv64-softmmu.mak @@ -2,3 +2,4 @@ =20 CONFIG_SERIAL=3Dy CONFIG_VIRTIO=3Dy +CONFIG_CADENCE=3Dy diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 540d53bf2f..fff36bd04d 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -60,8 +60,11 @@ static const struct MemmapEntry { [SIFIVE_U_UART0] =3D { 0x10013000, 0x1000 }, [SIFIVE_U_UART1] =3D { 0x10023000, 0x1000 }, [SIFIVE_U_DRAM] =3D { 0x80000000, 0x0 }, + [SIFIVE_U_GEM] =3D { 0x100900FC, 0x2000 }, }; =20 +#define GEM_REVISION 0x10070109 + static uint64_t load_kernel(const char *kernel_filename) { uint64_t kernel_entry, kernel_high; @@ -194,6 +197,27 @@ static void create_fdt(SiFiveUState *s, const struct M= emmapEntry *memmap, g_free(cells); g_free(nodename); =20 + nodename =3D g_strdup_printf("/soc/ethernet@%lx", + (long)memmap[SIFIVE_U_GEM].base); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_string(fdt, nodename, "compatible", "cdns,macb"); + qemu_fdt_setprop_cells(fdt, nodename, "reg", + 0x0, memmap[SIFIVE_U_GEM].base, + 0x0, memmap[SIFIVE_U_GEM].size); + qemu_fdt_setprop_string(fdt, nodename, "reg-names", "control"); + qemu_fdt_setprop_string(fdt, nodename, "phy-mode", "gmii"); + qemu_fdt_setprop_cells(fdt, nodename, "interrupt-parent", plic_phandle= ); + qemu_fdt_setprop_cells(fdt, nodename, "interrupts", SIFIVE_U_GEM_IRQ); + qemu_fdt_setprop_cells(fdt, nodename, "#address-cells", 1); + qemu_fdt_setprop_cells(fdt, nodename, "#size-cells", 0); + g_free(nodename); + + nodename =3D g_strdup_printf("/soc/ethernet@%lx/ethernet-phy@0", + (long)memmap[SIFIVE_U_GEM].base); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_cells(fdt, nodename, "reg", 0x0); + g_free(nodename); + nodename =3D g_strdup_printf("/soc/uart@%lx", (long)memmap[SIFIVE_U_UART0].base); qemu_fdt_add_subnode(fdt, nodename); @@ -296,6 +320,9 @@ static void riscv_sifive_u54_init(Object *obj) memmap[SIFIVE_U_MROM].size, &error_fatal); memory_region_add_subregion(system_memory, memmap[SIFIVE_U_MROM].base, mask_rom); + + object_initialize(&s->gem, sizeof(s->gem), TYPE_CADENCE_GEM); + qdev_set_parent_bus(DEVICE(&s->gem), sysbus_get_default()); } =20 static void riscv_sifive_u54_realize(DeviceState *dev, Error **errp) @@ -303,6 +330,10 @@ 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(); + qemu_irq plic_gpios[SIFIVE_U_PLIC_NUM_SOURCES]; + int i; + Error *err =3D NULL; + NICInfo *nd =3D &nd_table[0]; =20 object_property_set_bool(OBJECT(&s->cpus), true, "realized", &error_abort); @@ -327,6 +358,25 @@ static void riscv_sifive_u54_realize(DeviceState *dev,= Error **errp) sifive_clint_create(memmap[SIFIVE_U_CLINT].base, memmap[SIFIVE_U_CLINT].size, smp_cpus, SIFIVE_SIP_BASE, SIFIVE_TIMECMP_BASE, SIFIVE_TIME_BASE); + + for (i =3D 0; i < SIFIVE_U_PLIC_NUM_SOURCES; i++) { + plic_gpios[i] =3D qdev_get_gpio_in(DEVICE(s->plic), i); + } + + if (nd->used) { + qemu_check_nic_model(nd, TYPE_CADENCE_GEM); + qdev_set_nic_properties(DEVICE(&s->gem), nd); + } + object_property_set_int(OBJECT(&s->gem), GEM_REVISION, "revision", + &error_abort); + object_property_set_bool(OBJECT(&s->gem), true, "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gem), 0, memmap[SIFIVE_U_GEM].base); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->gem), 0, + plic_gpios[SIFIVE_U_GEM_IRQ]); } =20 static void riscv_sifive_u_machine_init(MachineClass *mc) diff --git a/include/hw/riscv/sifive_u.h b/include/hw/riscv/sifive_u.h index 0f8bdd8fab..ee1a9e291f 100644 --- a/include/hw/riscv/sifive_u.h +++ b/include/hw/riscv/sifive_u.h @@ -19,6 +19,8 @@ #ifndef HW_SIFIVE_U_H #define HW_SIFIVE_U_H =20 +#include "hw/net/cadence_gem.h" + #define TYPE_RISCV_U54_SOC "riscv.sifive.u54" #define RISCV_U54_SOC(obj) \ OBJECT_CHECK(SiFiveU54State, (obj), TYPE_RISCV_U54_SOC) @@ -30,6 +32,7 @@ typedef struct SiFiveU54State { /*< public >*/ RISCVHartArrayState cpus; DeviceState *plic; + CadenceGEMState gem; } SiFiveU54State; =20 typedef struct SiFiveUState { @@ -49,12 +52,14 @@ enum { SIFIVE_U_PLIC, SIFIVE_U_UART0, SIFIVE_U_UART1, - SIFIVE_U_DRAM + SIFIVE_U_DRAM, + SIFIVE_U_GEM }; =20 enum { SIFIVE_U_UART0_IRQ =3D 3, - SIFIVE_U_UART1_IRQ =3D 4 + SIFIVE_U_UART1_IRQ =3D 4, + SIFIVE_U_GEM_IRQ =3D 0x35 }; =20 enum { --=20 2.17.0