From nobody Tue Nov 4 15:29:02 2025 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 1530121830020591.3094331953936; Wed, 27 Jun 2018 10:50:30 -0700 (PDT) Received: from localhost ([::1]:60700 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYEaL-0007KV-90 for importer@patchew.org; Wed, 27 Jun 2018 13:50:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49566) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYEVe-0004Ek-OD for qemu-devel@nongnu.org; Wed, 27 Jun 2018 13:45:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fYEVb-0001fk-HF for qemu-devel@nongnu.org; Wed, 27 Jun 2018 13:45:38 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:50922) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fYEVb-0001RN-0E for qemu-devel@nongnu.org; Wed, 27 Jun 2018 13:45:35 -0400 Received: from mail-bn3nam01lp0184.outbound.protection.outlook.com (HELO NAM01-BN3-obe.outbound.protection.outlook.com) ([216.32.180.184]) by ob1.hgst.iphmx.com with ESMTP; 28 Jun 2018 01:45:34 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by DM5PR04MB0396.namprd04.prod.outlook.com (2603:10b6:3:9d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.884.23; Wed, 27 Jun 2018 17:45:29 +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=1530121535; x=1561657535; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=lBtqtuvHxR00y9VDlJYzfREEs9eRWg4efnYfHbdTk1s=; b=GNBqzAQ+Gq+4cJjBZ5kFCvN/8E0Q/OYVOGg6lSAjci3UcvD5doMF3tDf 7SMGQsspSvbTXOl8xiqgpViCvh+X+OIiHc1AIansQoANtECC5Zl3qDXPD XP4JCI1iL7rynS3LbGgt3TYMTpT3JiizxqgyaUs1XLbSj7ZOmvslhCBpn lvz+mg4miarh0/Gcr53g67gSbqPiDwKvvnoIGHQ/ED9UApez2scgvgiMu PZEIeqxHi3ZZ9797L1A8Eryj1qyakMCRminFrh2Wv1ldTWlqOYtZxxBqW i7aLeQ0XZi8G6ywFxARHMsS0pZaBQ+u4XLqxNddZWa5uC++Dn01+riZEY w==; X-IronPort-AV: E=Sophos;i="5.51,279,1526313600"; d="scan'208";a="82725977" 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=oh4ttcw/WjOgdEKVnSS9tEsIQZvRxIVdzwCt2ntE2grsXJuVmDlHf4PptTeGNoTfGtIyn6ssx7H0UVTW28bDfHLoeKJ25YrQ9+2ofVofxo6r1Tqpzg0N2UA2CEIBKRpJU8atb+Ur2HvQxBJJbWtWx3JF+oKscmlVzwHQ3BOSk5Q= 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: Wed, 27 Jun 2018 10:44:35 -0700 Message-Id: <20180627174435.31800-8-alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180627174435.31800-1-alistair.francis@wdc.com> References: <20180627174435.31800-1-alistair.francis@wdc.com> MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: SG2PR06CA0125.apcprd06.prod.outlook.com (2603:1096:1:1d::27) To DM5PR04MB0396.namprd04.prod.outlook.com (2603:10b6:3:9d::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0776cef8-f51a-4c49-f96d-08d5dc55c7aa X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(8989117)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600026)(711020)(48565401081)(2017052603328)(7153060)(7193020); SRVR:DM5PR04MB0396; X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0396; 3:RMrpOsBGBSfuQNguwAD0Mw+SG3Nr6Khak2tAljAHB0cLVlJcsNV3njG0e/mKOfYkn0n6nY7KfTGnao2XG5tZhLlIK+rFu55E5dmt/DqOu1qxBuVFaVBWTgHgCBd4pXbk7rZnqor9mCz48DxDiziuNSQMwWW/ieVZmi+q3CKwz23tXghILUxZ9lt94urKDagH2/ebQaez+XrlBB3QjJ8cYMYDQ0pYVE0qIbpKPxiGonmbjs3cGyjysXPuqjTz3jxi; 25:vmxyg5zkauBcLswN02AjTakjKO/j5NaH223I0UhaaSAtwPfa0+J0LLU3pSgSJvrf+3G9Zi4mpdo2gP6zjpKt3ZtqUYdou7fkC6X1BbBKEHJR6wuFiZDcT1Wn/Kkvhvcz8RYeM7BSm/9p6rCeCv0/Oud8LxXNSEKbBJNtdqOVD90ZujLUVTcRzQ6lj7FtAiFAYDun5WXpulXZbvnvZQxQ375YjL2Hxfom/6JqiNV4/GI0YvEJEZZES7uac2YEnuSjqubikWbxk9T3ptkbpG5ryzqDUX/fxHPuStI87H8IsSI8PeZ/gsiu7XpDrvqF0MmD1e+9nxzURjafl/0dGoUEFw==; 31:hRpcyE1bVoS6uTVQ7yhjVbuev4xC9bHOqYHgVHq9YNtAzrPpiCe2g7Zo5vlNJAL9Gfl/t42QK3xiT2tbei+o02tSH686SUsRQhaqHkWXO+RQNKbA4mdP4nVJAFErTo+9FkHBG4r/nNBtU30aS9TV8VP+DJLoIlUcS0KubJ7LiCzAywtGVtNfmet9XedgCryFn9hm2FHoPiom4dBQkJJKK2J/dkhPER8Lr3b3kuQkCSo= X-MS-TrafficTypeDiagnostic: DM5PR04MB0396: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0396; 20:YSp+FcAo5KVHzCU1N0d3g6QRIuN4Wqazuh+QhIEfV0UJPrDR6zif++aWbXimFLtwqeczWsopcAp4BE5H/9XaYd5cQbz4GzlgIVB6vz0nMqQz74nzirBU3F5T4OT+wtJ4Roa0/dhJu8/gNFz7+pQBUF5T+y57BEIERxBbhX7v3Hiazv4FlSpBwPCm/LjHTS/aUYSEcwKYH4B2zchV0s+fQy5zO1/3xqm/TWPan33ETvZ4BEpVQP45ChfXr4G2Go0vkgagb+2smKqDqZiIHdypbQmQ1gnIpS2h0Oir+TDTfSrABcWTgB2Jf6Yd8/6Ye+LADtYTeE71E2nmBWnNefHZG0h/+KXaj8ILLYdDprnkhUNd5idcRbRpEm0Z+V9/L3p0xiW6+YDdZojmWtw38j2lqMSb2zZY3ADk4e3Mcw650R7NruS0PHe4BA7w2dL5bEW3onaFKAGx3pi6L1yiCsBHq4iOBN62Gx617vnF2fdHnxaMCbabHDKmGJqtDstyGIfI; 4:h2MMTQ9ey7rl0AK1n05Pna324O5WL98hverWPuUgwShMq00YVqMo5N0M6YRxIOYWsMVRZMJukxZqEbN4iVHg7EMtFRvl82H/a29JRbz2mP3wZVqj52lc0BtsMK5oOKg5YTlDPJaG1PHo2PLpNrRxUZ3rGbL0h8hMNizcXLJ/vmO4NFwsCYmyNhAeKwnQqrXmqCPQReqG+hbaedjbZ/0yRFIAOeCDDxt1NtjWRa6FO4n9hqXUG9kKtzLO6NkoUoB3GhGqDLVrX8Im4e3xsuYetKOzMdamXB0utjvDWqDDdu5tSiBy/dSrVYCBXmRRluPU 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)(8121501046)(5005006)(10201501046)(3002001)(3231254)(944501410)(52105095)(93006095)(93001095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:DM5PR04MB0396; BCL:0; PCL:0; RULEID:; SRVR:DM5PR04MB0396; X-Forefront-PRVS: 0716E70AB6 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(39860400002)(136003)(366004)(346002)(376002)(396003)(199004)(189003)(6116002)(5660300001)(105586002)(44832011)(316002)(86362001)(50466002)(446003)(476003)(11346002)(16586007)(2616005)(486006)(956004)(1076002)(478600001)(6666003)(53936002)(305945005)(7736002)(106356001)(48376002)(2906002)(8676002)(76176011)(36756003)(8936002)(51416003)(52116002)(6506007)(386003)(6512007)(3846002)(72206003)(68736007)(66066001)(97736004)(26005)(81166006)(25786009)(81156014)(186003)(4326008)(50226002)(39060400002)(16526019)(47776003)(6486002); DIR:OUT; SFP:1102; SCL:1; SRVR:DM5PR04MB0396; 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; DM5PR04MB0396; 23:07Y6kwkAZPTngWbyqEaGoxFpAG2iOIaWx/OccLBIj?= =?us-ascii?Q?I6X9sd7mroB1jUnvvAjcKzj8BqNu+4T9sXuzKnN8HDqMNCxtqyh6c6BXRJXb?= =?us-ascii?Q?RTZyo4oL3Vra4X479PzscD+8oNTT8zL/0q5caNqE5At8pbV6vbNrViRnU09w?= =?us-ascii?Q?e9lMIxiueU88DGa8X+cASKepTSS8t4yuVyqcC7w1oz6ZKzo1flAGt9GL/ISq?= =?us-ascii?Q?bAE+520Gl4MIoSRhiojxDyHzsakCAyJSQnsaMHX1Xg7Orfp8YvErxXvGfRo0?= =?us-ascii?Q?qPlfbTtB4nfOIXSC5WBXvEeXTeIXHWcIxzpmOxFttnZVo/07/0XXA0EBU+m6?= =?us-ascii?Q?ANQTnXAUY5DxN7QMwUIXJpIOADpkkytcJcuM9BVDrO+qEM4kJ8febON5gvbc?= =?us-ascii?Q?J7/+fiCsuE9xDOwOXvl1ZJ4IxzlHtb4Sd9QbfQiPhQtbWRsiDLmSeOMyGuDe?= =?us-ascii?Q?1LZfvq+nZHWVRprl1nSVH9gOpg0gKQRrqHXKZS+26dTSN82CKoqGyXs46M9b?= =?us-ascii?Q?j3Fr9TcODKNizoe0SUQe45jiqr+MlQTJuTRXIMAMvrmrWXFsmsLcAUST1Tue?= =?us-ascii?Q?MEoDqcDxRaJ5mQSfKpEoEYDbq0L9/3LnTQnAmUmEKUFsnvrCbRIgKzRYS0Ik?= =?us-ascii?Q?+MmYrUZKpgpFkNcIj/WFjmxEpYNariQw768ZY+jrjLMTRDnoZy5SXkbQDnuR?= =?us-ascii?Q?u6z/fJOtQflioAIYaJYl63gQoySEBhiZ5ZE+Ep+ZDnmvMNh7gHQ7Jm9/iM0L?= =?us-ascii?Q?3f9okt3q2Xm8LWDMevAqKtnSSHcfdqC9Hv/C4UjzxfwsEybqpi3dT271mKXe?= =?us-ascii?Q?8Y6HCKWH6ZpF1xRsaq2pIJaZV/fsWucYGgI1uDY1EH87DB2fRRoDl4AXROfT?= =?us-ascii?Q?oLGODtv+icOCtE5LfeLrDFdi2fFYHueVfLveE3Sozkm5frDzbsAiGKCcwpQN?= =?us-ascii?Q?Ec7BlItLG6rq1WW9PH5Yhqam7OQTnPrsaTC/GrTAqsE7Boyq9WZFyylZckDc?= =?us-ascii?Q?Xa3DCmr+ITICMMHPVB5ZueOWoPAz/uRXfqrtVagpymuBvWvSZm8c6e40bpg5?= =?us-ascii?Q?vEZy9j6Avb3TIUOxKgTzOR84UmF0+7nGG9sdaTNzAu6BFe2U5UY/ymBASqAp?= =?us-ascii?Q?5RN6e1vOAbZT63PuBvXuC4ASkp66MxcQWlFkz3ObVCUA0hiu+YJDE0MRmLg4?= =?us-ascii?Q?g7ING9c4fgCoZBlVrn3XrfCM68ihf5gKIOMNh1Cpr0coXRWrRXhYB8IiQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Antispam-Message-Info: /vwwKuK5kqysRjCWpBdTZWI9CPBoM7+LaKtZwLGT9KMA+5SZpGFmcVH8VfLYaPrjocCtUEkQ98+HIXJl6OwmvX6v5XJrbRRykBkI8z7xtGgPvzM4/lbwwDI4+e5UxnRp7J6zRNq4kwU+FG33f5SxrwS9u8clS4uapxxWXDbegUJltF/WN2Vi8DgGHfs7+T/Maoau+DsYyP6abMwT0J7lyo+YBdp8m60noIvuSX7GoxdGRvjhVN9jiIN+2g6wWOGN8jitAc8PHTGRM22iKieCzbOaZT8eE5JpfqRKAeSVKCwV0eLqKvGmDOR8TggrOYw2a+nkbYavqb3nrMImQdX55R/lg7KxlHfr0edIYATHayw= X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0396; 6:AaBDbleapdxEvxGLtdfhnTLRX8b86d+2Vi7cDIRbcJrqm76WvuKcmeVus0yKRpiNzkOepBN9tc/3C5xGBERvYZui6j/ijBG0B34NM2BPs3LrB9BUx89q0AM8FQ/UWwTBnNsRBHZA+qvR+uq/t8kkiyTKhn8nARtjxQ8WqK+htsjk4Bgb3wlAXiM42hH6TyXKSsZnfjduKxN3N4cpaMk4LlhW51/KWwiYgY6stSRbHu61i9I3qIv/KfsD4dHmdGFi8/Mi314DWjLh1hnfqpWgVgcU7LF+H+BcA6ExzNIzLSFQT6/Ok/kb1Em5io9gvVlpyS7HL+v1gci2+b3Zq7EFY5rMoaX+rhz4Ez4+uwet5Z0hHkqdcT4XmPkMEIffGfnRuOricv60phv646UirPTqPZDxToDDXvkheydEWSUJEZMQZSK6Z3wdbf35Ne4A3HlgqccHrpc6uIdsKxacTBmfYw==; 5:li/kqnKxDQU9vwX+3DYclFUbpa2qCOLytsaiJpuIEdAFtIR6fsc/rlATiYft4w6IuY1qUGGZIuGbHnthhTuSevBVZ7SwfC3fwdFL64ozrTyL+hLM8qbW+bITpdN74ED/0k9CqhltrjUlp/XEfSC268K1EdJoCLJM8M779tmZJZY=; 24:aA2lIpG+t5T8O5hITbDd1pNyOEKiE/0CJxlM4sw4ADvFz/mG4420zrt6STiBq9Cyrytuk9+dLexKim9IoAhO5HOcGcBfG8mCfx7tye8zEEA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0396; 7:eS4gjEsLmKpLgdzPY9rwRQXxRmYshWn7OupzwnN+S9spRGuTQJXjRetMNPJ2t4eNJhuxlBRxyXPIsIPOMW5vQ4/z09zc0yQNiBvh9c2bSl8H2pgXaKHHAR3KPspv8tu9OXEGeaOq4bcoUvihfNomvNrjGmejBpp6c1ntWYZPTdP6xpCb6ba7zBKfUpXEcDGr18v5VgM2kyBtb2uYYNEJhuzPYae0YwRnmimhJfRG84MJ9PslEapadB5s2+icv1sz; 20:DFuJ4ZIkLo0k2IEJHS3tR4Mjs7dKdX3bjOoMZCsBbJFFhVJg3/0DiHlLVJ1dOsjvGMBVwjpMZc5Gh1BJXhRBggRY80Vhvs4Eg8ZjJw0xgNLMQXx66VzPaRpAxk5nS1lhvW6U2iFAmmoSWwtQYOcxK6Kv3tX9sfo9mT+q9BFEvhY= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2018 17:45:29.1276 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0776cef8-f51a-4c49-f96d-08d5dc55c7aa X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR04MB0396 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PULL 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