From nobody Tue Feb 10 08:31:32 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 1530293265379575.7845504627553; Fri, 29 Jun 2018 10:27:45 -0700 (PDT) Received: from localhost ([::1]:43688 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYxBQ-0007t6-L8 for importer@patchew.org; Fri, 29 Jun 2018 13:27:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42257) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYx6Z-00047g-34 for qemu-devel@nongnu.org; Fri, 29 Jun 2018 13:22:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fYx6V-0003X7-5V for qemu-devel@nongnu.org; Fri, 29 Jun 2018 13:22:43 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:49096) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fYx6U-0003Uq-Sk for qemu-devel@nongnu.org; Fri, 29 Jun 2018 13:22:39 -0400 Received: from mail-by2nam01lp0182.outbound.protection.outlook.com (HELO NAM01-BY2-obe.outbound.protection.outlook.com) ([216.32.181.182]) by ob1.hgst.iphmx.com with ESMTP; 30 Jun 2018 01:22:38 +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:36 +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=1530292958; x=1561828958; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=lBtqtuvHxR00y9VDlJYzfREEs9eRWg4efnYfHbdTk1s=; b=q2DHLYkAKUjEzJZopcpkq3gmULhhH903DimSGN8p4Q3VvW4m23L2AoLa qAgexDWVe/1XoFihK6oQkkwOROtrsMNQCtodM987pUgmtOsJjlwrheRO/ 9jEQK4JOZN+EPYafkGfoamm0BVmrL9jtP/YNaVnbhrGAbzP/yXR5F9FEl 59Ehd2atVqnqIa6IoIE7pusw57zHsTcQx/AtK86sZGtMnnfRQW1hKrO47 9ccggjlt9KwC0BA15x2AAo4sPYHBRsr7pXEqGYViLIFK+p1uQjg0s35/V Z/k1KGF77LhzsPpmri5u603Inv/HQWBVQyJAzIjiG83FpRJjfigMrJPxp A==; X-IronPort-AV: E=Sophos;i="5.51,286,1526313600"; d="scan'208";a="185964619" 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=PDpSgl/XxbyvqSN+Ctxe0+2mTTBc/fbxDzWD3LU7H80=; b=HtgN6z4gtFQNJVWLXNyHFK5YUiinwOZLY+oBE48zvH6BotJmHH1hNk5sOlpj6aiq0l3q8zwzctcQow6rIAAgLUrn64EDyDl7mHPJZP2NyHHaBMo8Bi6PoOAuJdmUWYG8OHwCmDTRu2Sv2wjT4QkkO5a5xf5Z5lDFiHW3qKqDyW4= 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:15 -0700 Message-Id: <20180629172215.29475-8-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: 3ac6ad16-3253-42a2-e79b-08d5dde4e900 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:FWAOByY4/MQxsnVuVSE7jW4r/XeGLHW4OplkAfb21J1Z2zxvm8AL4wxWwQMj/wlTKXdmetK013/z7clf+gPDZeFPWEq8JlAuPbKmKD7vVmxyBGaPO1YMzh/Ful0oXV06ciRhPIFRG6lSEkzruwhexQA+EkrFfR8TTdCED2VsPkMQ856pw9WGSFy3e0Ipjl6iRNYguXWELrQfUw63h6FVdtVg6ywv40V9NwIuq/M1GQKenJ+1hLH0R3LO+jJNA5KQ; 25:FPmNqCFVTC/Y6XFSZVM8YgRpixm4A11oWyJ+Ye4lagyJGkUbBOHh1QCza/XHywkNi4kP3IuEKrY3lDQUn+UjmeXvuYVsrn879vr9tCkTJjdbKAwQ/dSjtTBvlgZ2PCHAcmHtls8QdWDP2bZ8TpeMbbF0hnW5CvwcdmbPWV2p+Zc2NluXdwbcq4guTlRufd7ZTFKeQLlZH6xpKRkucP3ruiOjkD0pStRwzidNulBRoUrd9yeUuVjKzwy7hr0Z1EriJ/YVqnYkOhS7SWN2FNwoZVNQ+IKEl7QJ+L/VzfauHgbJheUz90/4HKaBIu9OE3Moe4elqRhj0AWaRc048IpBTw==; 31:f2BOJGPQUJ1zJT6fYPD62nIbwE6Z5bQAPZKAmIhMADiJPAVIgyd4bRnDIFoWWkfDQsi1c/ZWgyMcNunOCAbH+7ImKEZcWFFmCG+D191AH12XQvjLnH5Jft9pKiEfMqEfb3HrQz/ofeYQnPKIRkyv2YdcJXpCNX5wIEb2l+tme01uiXN4Rrptm2nPWMme1ggzZOf9cktVhjLIAZXurd/RHmYF1jBgpE3OmVitetNB9lI= X-MS-TrafficTypeDiagnostic: CY4PR04MB0391: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 20:hds2TjhExE3gtOlFIUKj5BFLullbSFsov4N7VOg7bPTgAPyy9JtVUOiYzAfG7zkURpBZrzjEp4FqbV6DcJYxNUevLC2ZrkNeHFW+tMyfOfcMhAnLCdkjaXJzG9PFofhYSil3WOvlk0/2nY/4/R5ykBFKsTxI3zHO8yrdPV1Vh/sBUhQLxjtiI54HYiPICV814gHCG0QhEBGA597YWzQHYs6mO57ZnnFCVfwA1qC8vYtvAhxSWe9LDat246auaW4VcY1VqAKbYcaoO/dic8Ctz4azZIN4guEq3UVZFogZjPIRdmm936dyAbRlcGSdULzjngFm8Kmay6eSMX8g/FadfQKPgBUT3plIf1O3vev4YVAFgJW7/69ZoA5s1Hkde19rxFa6y/1Ke6Xr9FEYET0B0hKrRLThIT7Q5Hg0zNYZZ9mn9LqTxPjs4zrUWU37fqnoQQZhv8e5ouj6stnCMXDIHgMKOpPi7AnAdXj5waS59FZs3UaJMJPR+3MMbnmYEs+b; 4:Oxo+C+O/Vn4UhYAPdOC0PqAZ7jeR9Ho2xKdPXGD1gwtQZpX9uaBMwOWokZDNOEMxO8JLyzgFewHPZj5e+HqMJiAYdNvAeNVE9Teybh+nW7TjT5fZeHoEF+E6PgfCpjcZ7dWFBpidEEBbvKwcOlgND3Sl/d8FpVAPNdJCv4dVrdy4l1K+nnb4tAX9CMopa1qFZh2j30g/KCcEDXUtABjjv9UyQWVHiKFSoSzMboTIUvAWtA3H/C9onLDEhSbuJWEry+c1sZFe43YmCSaWcvjrnF92xdpQ/eiaL9N8AMTHlwF3zP9tBudZN5RET1l3i0le 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)(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)(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); 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:pIvFR9Vyxf6EDNkC7dfK3K+b+o7Ra2L6MQ0kpfq+j?= =?us-ascii?Q?MdH/NUn+kZZFFcMiV+kKb3MFzwttWTRy75cT2lVBbIcphxZ0PjUjZaqpU5aq?= =?us-ascii?Q?iKJ+QFiPd244pMZA0I1sXzEBCMYeZuB/8Zvjp2TjCobqvLrdrkBmC38jmQ9Z?= =?us-ascii?Q?ScMM1WcwD5stFeKOE4kMVht49d/+pq+mo0E2ecA9Nosy5k8wH2he1+o3q20t?= =?us-ascii?Q?jIx12nH7d+4rSPyNU2RA43/6elEZp27T8KrKB7eauvOFH60tKwAogOucFNVx?= =?us-ascii?Q?e+4ApH6QbJuKqlys8XUuiOYXj8SGCgocYiGoqOqRX1u4FhDCnvxEISvq9Dbq?= =?us-ascii?Q?pBq30XcbiEpn5pbDLtLpjG59E8Izi1+dlD/q7bCUOj4K6/juvBdxxaLMhiLd?= =?us-ascii?Q?WN67hmJO/2AoEcPXt1BZgvC/EoCwMARu3P7PvcYOH10SWLjZH0Er7j1UXudP?= =?us-ascii?Q?64kT46q0L8hXtT7BIlY9I9/VRuNg33zKA0f/ZlJqPcHS+OLBE6LXMh7M8L/B?= =?us-ascii?Q?3S+DjL5SshwinYzn+b66ehcF1hajhQQuLz/paKam/2mVfRx4qodYvImmQ5Fy?= =?us-ascii?Q?dMb79/Cpjb/WosALRFn6ixs4yE9NYeBUYuCP3yg7uk5LNxXt4p30ut5+jz7G?= =?us-ascii?Q?zdbbxoKNv+PfHA1Qga15hbpkvo/+qx4Oieqj86VEFJKvzQy47Zfu6sm+Whfp?= =?us-ascii?Q?iHza/FtblXNUtef/HRTpu4aN1MCLjBSRsIOAOlWDWsIh0gg8g6SGvuru79pe?= =?us-ascii?Q?N4UQXUfJWrM88p3e10CnwJ4kInNovsZol9Cxppg0NWaZWnhJmAnbyzAgqwKI?= =?us-ascii?Q?ushSpKGT/QwYfGyf/uUdoq09FwtEd4+ElD01klIP7HFlVaSfEMgDrwzHf4aC?= =?us-ascii?Q?ge1o0M/Vc6YQ1+kqEkmtdj/aKKlWPAQqfNanpHX8nHGZLbOzBTqEwRj1EpTp?= =?us-ascii?Q?txUdF0H3aEkMvCMX4Fp3SUIrP+g0UpJau8S19U5FN/2Ng+bPGoKAZZ/rDFnC?= =?us-ascii?Q?Luu3dOtQs1VHCZMTBiO7aDVB2XaRd+4TFrRVw+/GlN014r8L5fxhysNkppJk?= =?us-ascii?Q?cFRY/n6CCLq8JblEKKuoGEj0MoR+ymHoP+anP8zNhWXBRnmCUwSHmI3qrNdo?= =?us-ascii?Q?D0ElfG1hqtq99iI0XS42BiMTXLlaAMzd8/CLMeod5cys3IVK4OfZs2uGzHDI?= =?us-ascii?Q?KRB7n18ZmioNsDI10bpYo542lKLmmkAYLBxinOL8+4emZNmYKEXCNuMhQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Antispam-Message-Info: 2sFcAT+wPfb0QUx4kcMRJAUxz0WPbk8eqqrsCU7WD/mK9QOXdmdDQrjGPJCqq0arAriKWIp2LghkdngEaJR8vjQWaxQd1npxU7kI1AZQFMJ3slNtJ6dbL5EK1+mIhb/uFLljGxWsQo1pO2hnBn+r9II7QUI/Xfenfnkmrdy55NJLjSsE7i6LYJc4eKQX4lAQrXUN/vmFbN5iuTLGW9Faoktf9uoI0fkrd+cvWeAJduzNGESFqBjIYnIHBnFQXIPUXtU3yRCylAnPtO659TPS6jvM+nJjnokeJfKdIJthjXcMrzwVghz9WwvHX2T3+b9X2eFUBqsW1cedqBBy53vJT1RP1L/NILBATr1KZFiWyJw= X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 6:AjBbxTDkASY6agIYTcYkyEVJFYLe4gfbDsOb/l5Gw2AWHtPC4D1j9R4rrkGD9m7PZ71n/DNExhrQz3atRqjinRpbUmBaAJqhfGpIQZKF7k/SfkySS0JBtgFnTccIui5ranqtajMBsULE98n3nSl9ZxwHP482uFzbwwekv4kFEgtxgyNR9PgfQYsnswoJAVH/6jQt4o4AFDxg0o7BngRfHxGDHrPWjiCxDB5Mn01FNoyEc8jFv0E41QxNFhkfFEkuBEWl/yF/oidniDCVZkCYzMwaKyq1xoVIXGnHr72H/jW6K14xtUIcgpQPVlkg5G2EImB9LXSVRGkhuhT7lEdDnHJyuO6Eb2h1vIby6KF8JVOjNuw9H+bi+y928lnkwM0HtwwA1u3W+ZUHmwjarmjycZQQP3kxmAunQncz3rT/wbb+zMotpn9zQB3AOpbqW1K+kwfsdXG3tz1Vhq+IhljlQw==; 5:RwaXI/v9tWzLIxKN+eKPYehMDmPO1gu1ECj3J9TlFRwQmbeD7tiSXsA7uyMi486Gb438b/PPodpSIaFeW9D6g5SmOrdQcnjKTGZYvuI0w+xPqIlpY6HalJP8/jVmLjujDhxGz6oKyyziPXDetulf8CRdm4FYoXg1+6Q3lSXjwg8=; 24:zTMAqP/7ADvAt9dCCRkPIH1XYqgGwJ1EDhFH6jCFWapUlxNPd57KYkckIaNrUAd0zEzYiuNmFubfl5gOWY+ZujkKGBAtAYO9uI13hSUkDWQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 7:MVLGzUa2zGVOhoALKBtwEed6tZ5qFMpQZMgrT3cKqg50ys+2Ty39iSrWfikezxKTB5rZLE2SLJv9DgON9WXpIlcF66t+/Grarp7pnF3+q/yLHZTMXJjWKYfFd2+8Ar/ZdVAD/E/Zv81j3LZGBNxHSjdtOOJ/whBlsMeb3PWT/Lhi/CKDPk6twWRP9zooUaCotb0T9b1OUk9poT8NDFUmVxEtTxcb9dGVrNCwCbTDBpLn+D3CPn/LNmDvldmYujBC; 20:C5GeezZ7gcCfQHJQlQ3hR6Qx9LkTjZXhGMlSqwYGYcSvoZ57sPh5mGPEIRcda8NyKZvSnNwI1ha5SixPeBiE7EN7jEeKoMjQIBQelmqGVG+uaCXrteIEfh+T2lxUEBgzGFYNlsz9Oo05dGxGQiNcW2GC8OjOvPhtbb1u5ILoEfs= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jun 2018 17:22:36.5348 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3ac6ad16-3253-42a2-e79b-08d5dde4e900 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: 68.232.141.245 Subject: [Qemu-devel] [PULL 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, 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" 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 | 3 +- default-configs/riscv64-softmmu.mak | 3 +- hw/riscv/sifive_u.c | 50 +++++++++++++++++++++++++++++ include/hw/riscv/sifive_u.h | 9 ++++-- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-= softmmu.mak index 20e670d99c..7a003eb5e2 100644 --- a/default-configs/riscv32-softmmu.mak +++ b/default-configs/riscv32-softmmu.mak @@ -2,4 +2,5 @@ =20 CONFIG_SERIAL=3Dy CONFIG_VIRTIO_MMIO=3Dy -include virtio.mak +CONFIG_VIRTIO=3Dy +CONFIG_CADENCE=3Dy diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-= softmmu.mak index 20e670d99c..7a003eb5e2 100644 --- a/default-configs/riscv64-softmmu.mak +++ b/default-configs/riscv64-softmmu.mak @@ -2,4 +2,5 @@ =20 CONFIG_SERIAL=3Dy CONFIG_VIRTIO_MMIO=3Dy -include virtio.mak +CONFIG_VIRTIO=3Dy +CONFIG_CADENCE=3Dy diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 46459cd368..1a06384367 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_u_soc_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_u_soc_realize(DeviceState *dev, Error **errp) @@ -303,6 +330,10 @@ static void riscv_sifive_u_soc_realize(DeviceState *de= v, Error **errp) SiFiveUSoCState *s =3D RISCV_U_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_u_soc_realize(DeviceState *de= v, 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 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 =20 +#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; =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.1