From patchwork Fri Jul 6 01:22:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 10510517 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 7D34060116 for ; Fri, 6 Jul 2018 01:28:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6173F2807B for ; Fri, 6 Jul 2018 01:28:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 543B22835B; Fri, 6 Jul 2018 01:28:39 +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 9DA622807B for ; Fri, 6 Jul 2018 01:28:38 +0000 (UTC) Received: from localhost ([::1]:55407 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fbFY5-00087I-SV for patchwork-qemu-devel@patchwork.kernel.org; Thu, 05 Jul 2018 21:28:37 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36336) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fbFSG-0003CO-CQ for qemu-devel@nongnu.org; Thu, 05 Jul 2018 21:22:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fbFSE-0007eJ-Jz for qemu-devel@nongnu.org; Thu, 05 Jul 2018 21:22:36 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:40750) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fbFSE-0007aO-Bh for qemu-devel@nongnu.org; Thu, 05 Jul 2018 21:22:34 -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=1530840155; x=1562376155; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=rxUKsg23n6/1KTWC6/h/Nl9Mr5Vw9TDJ4R5XyPMmS9Y=; b=hKwWMW5AAJQqs/6n9Hz/7zWAymYuvMwTfQq1XXJoMjBr1TYPZ/TeO1/h 1RR0FcjKseDWdXyPeL8W20Moo6lwXT8uLwkLaz+ulKezTM+3tovtyvTy9 84NkhafnXS+RwoLkXVLcijhviPVZstiF6U9eXln6rzDGMa3z+vYl3S56L F6r7h2pX3Yy9XCWl+ACwraoqt22w2w+YMNHkXHbNHe0O9d3twCgLdBBKd +18krgW98NZNgD4al5kQBauypGlMEdAvhVOgANUFJdYAl5eV5wadts3Gy Z80gtFgS3uidadQO527viIQKXFcwjcRpZPqMFq2+Y3FmZv+jaR+YCGyC1 g==; X-IronPort-AV: E=Sophos;i="5.51,314,1526313600"; d="scan'208";a="84619630" Received: from mail-dm3nam03lp0016.outbound.protection.outlook.com (HELO NAM03-DM3-obe.outbound.protection.outlook.com) ([207.46.163.16]) by ob1.hgst.iphmx.com with ESMTP; 06 Jul 2018 09:22:34 +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=SO5gRp4xMpUtPO/ctwgf9cFf8jaa8AsrHTGqbJxvLG4=; b=U8Xzi/f7FwaXIfC3tOK67IE32dvP4EUZC3QwmkAMCozUH298Ba79l5cg18SuIpG7scyyoEXTLitRiUG4X0yGZKwtRAEN3BALri+YnSRtDv5xyLWp6Dn/6+XjrbnmEPMRjCj6wk9sLtd+7PYa6EhM2dnAp3QREC4UNId6DneJalw= 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 CY4PR04MB0393.namprd04.prod.outlook.com (2603:10b6:903:b1::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.930.19; Fri, 6 Jul 2018 01:22:31 +0000 From: Alistair Francis To: qemu-devel@nongnu.org, peter.maydell@linaro.org, mjc@sifive.com Date: Thu, 5 Jul 2018 18:22:15 -0700 Message-Id: <20180706012215.21714-8-alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180706012215.21714-1-alistair.francis@wdc.com> References: <20180706012215.21714-1-alistair.francis@wdc.com> MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: CO1PR15CA0105.namprd15.prod.outlook.com (2603:10b6:101:21::25) To CY4PR04MB0393.namprd04.prod.outlook.com (2603:10b6:903:b1::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 85b2a8bb-0e22-4914-2191-08d5e2def21f 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:CY4PR04MB0393; X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 3:z15/6+vQkRKQwzcbam9KK5A14cP8wotRtFSWMj0aZvzY4mDRdrSfSGGAa5snie4nL1wqov9wUVyNuhpcrhVLLT5my4VW7a5LmA2PcC3J78AeRt6HLrvyC1I/Ss8dD73huSBclnpQiYnAI9WG0g1yIPzeDC67FdY+9c6n6t9VIG/bzdvO2eU1uMlAkFWsXXyUyDeAptJjtoAz5cATXXyn0BQHFztCa0AYFtV4jnzLYYRkMu8X30WHDoU0kFCiFdUI; 25:gaeep+JmzN2TAyEOqob7jqFFCPfkOcBFL83V7BOpmRcZD6JWlri21/l/PuHg9ieqIEIz+JyxWpWebfTJpV6O6LNGWgzDKhsONzvGEvU43fF5zSSd6nE6TXucc9yUZOGkl5vQ0UH/OnzCvo4+21vwqsAad5nTgnGTwQ7DwKKNme0D2A7xg0rEa57Xugr5XVta+j8rAb3VtTX56/xs7i6Pjo9o+vUnKv5LE3x3YAKag7LOlE1MO5NI8qgm6P3gfRxMUzxdfXD/xIa+hT6/Avvs3e2c5ZvV76q5nGVeRT72ygOuWPKmHxqWpBXL1suSw22CoaCPbjWwxiwd4UOivHPWJA==; 31:5rKFzkkKe7va3JkGNSpOSOXUkft3y5l2b1gPibVuejWpLPNdJLVq84FGXGdHzw471iH6OAE9agfKr12qb7SirMQp571DQfQipk0k2vE1mgFKvnM8LOehDun8Oy5o4yMpBdOEFk/vXWZ0OC6CDeEqRWIXfCwhmR3itltSQfMCEpfMO7Yf44yBl4IFQIMf8X0JBuHeB3/3Os/xAT1Cdp919QlIrmL9rWdEWy2xKuDylQE= X-MS-TrafficTypeDiagnostic: CY4PR04MB0393: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 20:0Q35uMfVygJco7HUWf3F2kSHmbW5NhyZ+pyp4D/IoNVofUO7WcM0fTS93vNo9/fGBHLrGI/hQklaJni8/9K5RA6gA/fJn58rVclqQPWKuRKrKzGoTB3HnnvID2HVxDJMM1P8zJ/06YFcq9bSUZNV7NuzI1zHJafU39cBv9o8d+UA8cSTaq0Q/VGlYihbB9o/KzM9U14l9r1/MgIrFYtxcOsZbXT2Xu1Irk+wvOhWLlsk4mU+Fw4ZUoA49vHJJ7r2z4OwPQ2Mxz9qoK2fEAof32ieV1x78E6Z4lr2vIDTnDnePZ4eI7YUAjhS5Ua9k8XVkBSDHnUTKQ0EdBulvIKZKxg40FDSY/8/DHp97IKUWhU3gRNGQBw5UtXmtv1A5X5E5FFsQB839xQNHxhE8UbWvqwb+1+6bI/bZD5T1+1pvN9r1iiUP4h3svnW/HvtlXyaJieQrpTzSOD34CcFFcNHiLREapv6F6IMPJ9lfnWYqCegl2Gx3p/U1m5WdVc4xtMi; 4:N9nPG2c3KBk4m5JG23G4Aec06qv5abng+PiJapePAJOpQfZIZPKT+kVM2Nb+VTeF/co0Ed6uZdP/rye1guYyRbVTgvwl+w6brwXxtMXPQAJMdmBzbnDhTOCIFtkDxLET1IXF9b/DWceka20K4FHGk5sRaXKmQjp9NpvYt7FPIucCCApBRnauoz2zifJyLBoEvFTuQ1N+tQiCbcKTKPwrTUeHkqI8OSHYne2Cwwnsmgw8TICJSOR8b7JZ0mrykuUXFjIV8jRPQZKO3m5Z4DkDsjlAPkubSx1wRmntsG7UyeLTGPHRGFbvwpm1LADSRjCS 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)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:CY4PR04MB0393; BCL:0; PCL:0; RULEID:; SRVR:CY4PR04MB0393; X-Forefront-PRVS: 0725D9E8D0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(53936002)(68736007)(50466002)(48376002)(97736004)(81156014)(81166006)(8676002)(8936002)(3846002)(6116002)(44832011)(106356001)(26005)(186003)(76176011)(386003)(16586007)(316002)(16526019)(2906002)(51416003)(2616005)(52116002)(11346002)(476003)(6506007)(956004)(446003)(7736002)(6486002)(1076002)(25786009)(72206003)(50226002)(39060400002)(105586002)(36756003)(6512007)(478600001)(6666003)(47776003)(5660300001)(4326008)(305945005)(486006)(66066001)(86362001); DIR:OUT; SFP:1102; SCL:1; SRVR:CY4PR04MB0393; 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; CY4PR04MB0393; 23:zMyzQAJeAE4O1qmh/z95wCw3cXxTTalqb9KV/Yc5v?= =?us-ascii?Q?zZCLnYN/Eb6Wwh0m51LaESBQPk27OoD/TR1gY/2EZmULHXsUpOdpPvRduNRe?= =?us-ascii?Q?eTo0Nehan0E0k5WNWJ2xQQP6tndSHggW7Raht1SAP8epPiVsuLwjp7Jhsel2?= =?us-ascii?Q?mlJ6D3gqF68KtnZ2rAWFT35gQiBOkuZ7VETseoBuqjC7CLAJGG5pf0kfnaMK?= =?us-ascii?Q?vwJOuU7eT8n+zQmz2iyUg9tsHCOjlIYQ2f+ZobvOLTgB7KJ6T07qfGHyKlN8?= =?us-ascii?Q?toA4GEryD4Ku8ZHUEq7x+alsWC40/gNxLk8ReOz2fEuXyS7UVIDT8aTEgc0l?= =?us-ascii?Q?pP/Gu4pnztsV73WTYRB0SYhUCBIrjte9EOzdnZz3R+bDbgesvm9H1W0eEkt2?= =?us-ascii?Q?E8faJLHquPIaOUFJJsAZklHY32/ssTv0oZcGu3ckFiGArgCO9YZe35FzRo2k?= =?us-ascii?Q?zIt7ZJ5gaw3VnqhU+DUdekOaM9kadK6+QONnfb0D01lKqs1a/bwY/IruMDAm?= =?us-ascii?Q?YZCS8ro++vQEgwOFi71hkmDwhp9OsbElldqKnH2qXmC9r/L6sQFwwZ95HaGi?= =?us-ascii?Q?WAFQ1rtGwLY9ZYsTSIAU46An5ywfhA7Pk70/+B3OIq+2ATifzxVj/9USaVDb?= =?us-ascii?Q?v8O73hhmsWWVS/Z2GnwS7vx2wwn3iDMMv4Bkx0utxgA5tqK5jdJRvPzlto9D?= =?us-ascii?Q?D9wxPQxUcMg0qM/3Xr9YiKbmo8HYmoXiCIwAaq93cyod/ripyVE76HkdouqA?= =?us-ascii?Q?yqUx1A3alOd4ysJkoTmCkFtZb8pcDVBrWgNXbGv60qNsaP+W7XPHqhka/Hd6?= =?us-ascii?Q?wrEyAEJPdpkgNbNJeqocEE7xbFzqyK4afYVjnK6cMBbCSSaIIYL5S5Gq9aoU?= =?us-ascii?Q?QXDFxNOxLZsuvnJIPlF3VN6tIgdiafIQDQLhG9MkckfYIZN5H2TGRyzYtdNm?= =?us-ascii?Q?lrCVpnlqn0J85fGF16hTF4qO0X73aZHiJmHAm+zPiWlmijGxp0OO5VzFGGzO?= =?us-ascii?Q?+KYuGClGXCsKloPTWRyrsqdZxsWKJh/qqhhBtV5MjI7fxyAVHa8KnlKJPojf?= =?us-ascii?Q?dQLyVbjnBACJ/AIGkMUVFC6a/aZ3aPAFjdR656/ePBmHukeV7esXek1a8Ew/?= =?us-ascii?Q?RV3wIHei6zWM8iP1Xtah2KgRxgmCTSz1DHTSWCYhfif2pJibMRJPltZn4YA7?= =?us-ascii?Q?h0HIsSnyHMs6IFAnMkN0vFhcUqOaencFv3zi5k5QJrHPsQpKeyLt/0APw=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Antispam-Message-Info: TaGXMapr/A6uMvTnmluKemJ07xCHgGbFZfu3aeMaoUfBmfppyLsaBzKD5aeq8vyEw/al0IZTF8a/lEjy85Uy8pXd1BJzhRrWjd2mnVv57gR38+rETRZxYJItB+wtd57JdE+ewjhBrr3mKtWmxNWJXrvUybITsFACm4gs7psTD0XeiwuEVa49ZbQ/kwUGGm0bkeTct8nhYRj70iGJgHM3Y2XdJKkglC1iLRJV5qAnB3UFeTs+HHeEHSh5zANbB5t3t2aUiijs2h4RudXzAj+tn07aUbMFLFcJ/A4FkHqKvgxh8Z6MwFqzKqXo7JQVM6wBsFp+unYwwRbjZMSdlH17m6usSbTh4TYqcY8t2EB+n1o= X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 6:+IDxvmewty57QHi1pF17ofk3WiRdHUSDvxvkBYN6uiri+rxleHNMRP5z5b39s5P6/aNwtQJeD6oaiaJpAUvPo/1UAQbG357fgPKrMfRMQLPTJ4/gChNdUCFO/2uUFBHJWohcDA+PKtr5LWXfrqiZazXKH3cGxVeEZ65Mxnm/UX+0W7jO5Fp1W2lKzU1HZ9IVXbUgP8IvrxzJDaL1eh8iQtFNjKuaW9WE+ukSrF5/Ii5fuiAW01rQCwJdeqBiXdLpO9P4lUJ+FlMFwG80apdtK9fR8wHg3amwXq/cy1wOoVw+p2XMTuFEVITm2wWV6CvVSZrtmu6iIgltho+ISLzO0aPzzFuDrl8fcXgDXPGCE6u19zZW/HEI0O5/nJAYrTe65shMXa/alGAWF0ZdSmje1VY4lSQzuRmqTkDYANJ7aEys/DBaM9dnVIR4NxKCfFW+wzmYUSeMBTwizpf14cgXCQ==; 5:NNDCYyeHdAQQfz+JHVRMvy+wRlyy+WFcdSwC3eDO14mCTI4dG+ll2azM2QfnSekycjpR2tNXLNrOQjUeIgFH2UjKZ76+JwMdlHpi8KLamRSD1pzOnkj+nOFCaW61skBgMuznkwhv47mOPoJbXZqHBbam+VVTTmTz2Z7upednN70=; 24:a92gkYfvtCXbJVfayux2phizVH3mkqqIhogtSOaFNe4tlPO/RWGDlq6GhbSLFoiW7ESArs5KyRCLW6GZSDBRehwVBV5O9blKzEqeHVP1pnA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 7:fv2HK8MPouV+f2kMVeDgApayz4o9ZuJ+Z2yHtfxQCrOrgWcDL1oqg4BoQkxw6LnFXhK1bqUdmB/JVTe5iTUZq8fZf5bV9MW9XqiivEv4dlQFZKQMk5x26huOjq15InUaRGmorcJnd6urhUN6A+iBnC1utiI9/peF+g0vghq84iK+ODnFLYEV0IHZtbgEPKYAG/fgOuD2/x61kM+sQ2k8cDEUUR96fSJpJlxkaV/XNCG2wNQjXSqQpteIN4foZPuU; 20:2rCVcZF8BXeu3tFUsMPvXFMJeopdtnCl81eQaauWr5QlIoov09eJi0CpYtT+Tjv03lPRSOzfR7rmi724bLa77wO5TniWOYyDdLWkeB6SME1ADnzGPgfcOrNi3HIqXWZDtilPX03W2pT/NnlXkFo1eUw7fq0uBvmx7PBlR56hwrI= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2018 01:22:31.1803 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 85b2a8bb-0e22-4914-2191-08d5e2def21f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR04MB0393 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 v4 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, 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 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 | 2 ++ default-configs/riscv64-softmmu.mak | 2 ++ hw/riscv/sifive_u.c | 50 +++++++++++++++++++++++++++++ include/hw/riscv/sifive_u.h | 9 ++++-- 4 files changed, 61 insertions(+), 2 deletions(-) diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-softmmu.mak index 20e670d99c..7937c69e22 100644 --- a/default-configs/riscv32-softmmu.mak +++ b/default-configs/riscv32-softmmu.mak @@ -3,3 +3,5 @@ CONFIG_SERIAL=y CONFIG_VIRTIO_MMIO=y include virtio.mak + +CONFIG_CADENCE=y diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-softmmu.mak index 20e670d99c..7937c69e22 100644 --- a/default-configs/riscv64-softmmu.mak +++ b/default-configs/riscv64-softmmu.mak @@ -3,3 +3,5 @@ CONFIG_SERIAL=y CONFIG_VIRTIO_MMIO=y include virtio.mak + +CONFIG_CADENCE=y diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 445fe4f7fb..3a6ffeb437 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -60,8 +60,11 @@ static const struct MemmapEntry { [SIFIVE_U_UART0] = { 0x10013000, 0x1000 }, [SIFIVE_U_UART1] = { 0x10023000, 0x1000 }, [SIFIVE_U_DRAM] = { 0x80000000, 0x0 }, + [SIFIVE_U_GEM] = { 0x100900FC, 0x2000 }, }; +#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 MemmapEntry *memmap, g_free(cells); g_free(nodename); + nodename = 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 = 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 = g_strdup_printf("/soc/uart@%lx", (long)memmap[SIFIVE_U_UART0].base); qemu_fdt_add_subnode(fdt, nodename); @@ -286,6 +310,9 @@ static void riscv_sifive_u_soc_init(Object *obj) &error_abort); object_property_set_int(OBJECT(&s->cpus), smp_cpus, "num-harts", &error_abort); + + object_initialize(&s->gem, sizeof(s->gem), TYPE_CADENCE_GEM); + qdev_set_parent_bus(DEVICE(&s->gem), sysbus_get_default()); } static void riscv_sifive_u_soc_realize(DeviceState *dev, Error **errp) @@ -294,6 +321,10 @@ static void riscv_sifive_u_soc_realize(DeviceState *dev, Error **errp) const struct MemmapEntry *memmap = sifive_u_memmap; MemoryRegion *system_memory = get_system_memory(); MemoryRegion *mask_rom = g_new(MemoryRegion, 1); + qemu_irq plic_gpios[SIFIVE_U_PLIC_NUM_SOURCES]; + int i; + Error *err = NULL; + NICInfo *nd = &nd_table[0]; object_property_set_bool(OBJECT(&s->cpus), true, "realized", &error_abort); @@ -324,6 +355,25 @@ static void riscv_sifive_u_soc_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 = 0; i < SIFIVE_U_PLIC_NUM_SOURCES; i++) { + plic_gpios[i] = 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]); } 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 49f1946539..e8b4d9ffa3 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 +#include "hw/net/cadence_gem.h" + #define TYPE_RISCV_U_SOC "riscv.sifive.u.soc" #define RISCV_U_SOC(obj) \ OBJECT_CHECK(SiFiveUSoCState, (obj), TYPE_RISCV_U_SOC) @@ -30,6 +32,7 @@ typedef struct SiFiveUSoCState { /*< public >*/ RISCVHartArrayState cpus; DeviceState *plic; + CadenceGEMState gem; } SiFiveUSoCState; 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 }; enum { SIFIVE_U_UART0_IRQ = 3, - SIFIVE_U_UART1_IRQ = 4 + SIFIVE_U_UART1_IRQ = 4, + SIFIVE_U_GEM_IRQ = 0x35 }; enum {