From nobody Thu Oct 30 15:26:08 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 1526343079076307.8783574596673; Mon, 14 May 2018 17:11:19 -0700 (PDT) Received: from localhost ([::1]:55876 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fINYk-0005r7-7N for importer@patchew.org; Mon, 14 May 2018 20:11:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45492) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fINW0-0003mo-Iu for qemu-devel@nongnu.org; Mon, 14 May 2018 20:08:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fINVx-0003EX-AM for qemu-devel@nongnu.org; Mon, 14 May 2018 20:08:28 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:57073) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fINVw-0003Am-Ry for qemu-devel@nongnu.org; Mon, 14 May 2018 20:08:25 -0400 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; 15 May 2018 08:08:23 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by BN6PR04MB0402.namprd04.prod.outlook.com (2603:10b6:404:91::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.755.16; Tue, 15 May 2018 00:08:21 +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=1526342904; x=1557878904; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=Ky2KHFGAFRS+UNuI3h6+ycdGhqiBLCCZpvqqcF83HXw=; b=phSEUFNqn77/q8+goOEUWp1pXhsAr9Z+1uccC7uCbkurN6b3YuhBilqu fxDGMp8pEy8xEIiEwU3afE4YWTVw3sehm140OypO6E8jt7PcSPEsuQsv6 bUDsyo2OPnx+0AY8tDRGUc81LJAKWwwaaUmuiT+HvWq1dsIUo6mVMZ5l5 iemqnxaVL9DVAllLnNPWMgTthLE/SJ1rjm0OSOYOp3PFa/s5XL0OaNmX/ nTWsgtjxTlSzUdFI+lG08UIPI+XX2cVb+2dqKOQDw4Kwsadn2HVGqyt3h aYs2tbc6J4vpqlttiruZo2XSoUFuyYTWAccOKEIhQd2NkA5LyLU1PsWvX A==; X-IronPort-AV: E=Sophos;i="5.49,402,1520870400"; d="scan'208";a="77864148" 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=Eb4tjnqqFQ9qwM793TXbGVlxdKM4r9olB9khQsK9T4M=; b=f1roiLlxk2uc0doGY4kRihp9jVb8hvjDWSBJysATDvAhLGpsaqrmx7+hcaQpwvTMxvbI9C/Tjvr/AHwYizQSWs9Hfc0JiqEr+5j083/6ubLIh1LqwUeCRX9nLFT2mxWSpz1YGLG4sPP3BDIPOilHTppYDg+97WnXX6cKgoQwHzo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; From: Alistair Francis To: qemu-devel@nongnu.org Date: Mon, 14 May 2018 17:08:12 -0700 Message-Id: <0792da3845343ae0bfb4c767a9c7dd87591589e7.1526342674.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: CO2PR04CA0095.namprd04.prod.outlook.com (2603:10b6:104:6::21) To BN6PR04MB0402.namprd04.prod.outlook.com (2603:10b6:404:91::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:BN6PR04MB0402; X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0402; 3:HOnaEqsmuLGZdeO/3yC/kw0aUPXE/wizXZNAyJjj++kep234CAM1SIazgdlAJLGSh499q1ta6WcKKy4zpP8pvT21mky3bvfugPGQCsYqIflRTKfEniIzn1/fKLGArTAQgVcH//fgTyGs/H7FWe7BNz00em72WyWXBpAmwcmjL/7121KKqfYvSuCtlJkLytRc27L4woB3BJSDRuR2AS694VFqBjhy3vdYSYfhBQeaWrIV79AP+qXMEDs0KrTO5T/1; 25:19xwKqxivajFQyKh1y7W/4vNL/GfUR3leIizMHuWDNLUh798wnNWSB7d/5HQ3ozgVc5AzGG201et7r7YDRTE9iXEyv6bgYHm8OfOTrNYi/Ox8+cijhqyTMZJyRWv2On5Nbrx657BGHvTpgdZUHQ+QGWtnxkNFLfjmKCHi8DcGQ8NLT4Ybghf/4zEDNQ75sw2+Ns9seNBM5J0i/DNO8ANNKMLMXEk5B0HhMNL+lxl6rZVeMQT1GqfFFA0CVurEmPOU1YjBH7wdBiuODCiN3YkhETbHLy+5HyziO/0Wu+5MoNkqrcFjEy8fzpMmD6+UtKGV85JumShDMHHA6dIx1MUlQ==; 31:E1kiJuyzokjkGfmFyYzrbIzwOK/5bqcy9faN2uqZ1DZHJvRbAtJfpwIxNILtWHz9pKhxOktpLtNQwbdompdHX+yHAzmDxiMBpzSb9EAY3etcJMoTntj17TyZaXzF70P4ewT1MjtLj/AVIBd2q4MFj4lCId6BwJtStAzse67bEDZRl7gfggvX7J3OIs5w4QRfrzOZ6SmXFFKwTjAdOtTIN9MlLS3CLTfEzj/AAAIkwl8= X-MS-TrafficTypeDiagnostic: BN6PR04MB0402: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0402; 20:2umoCbQghGFuRk37pjleGZcUxqOGvlWdtpsORp6QO/J27quEMoimMkILpvSRcKEm+nn4JG4HEVnSm4tCWjM4oTEkJX4baT5IO43gUpBmwIbGHkaaCpN7UT2Ln47OrUS3DMz4OP4e7uHZB78vLq5Ua6PIYeQL/fgs6jwtj9sicA8PA0ZoHaBgFNW3FdhV+37zPE+CGM2QfC0YGmz+Yv7UXB2HbxdBv6trMLq3e7A5XFKjZMATc19bdY6Hf6KusUYeJ/utKpXunpkJiV89cWoeWMW/LdBGQrhtfZVkxisWr1dfK8HXwDU44MeqHSMoCjZvK4Iol97rbpn2DTiipuWsbq7cYcv+mJpAhq0jyiljq7LpSECSCeTM8NzmBrF0hmcmFFTNDcc4yf/pszCh63PpdeYXx6bu5wyt+oJl5r3zaX6VcQ06d5NHUUoNUBeClbMS+GMzGIlBI4LVl9xMFrD+FKN1KBJOtHyw+v2nFd8/zlSBkye1BTNevENmhy1m/eDo; 4:da/XZEa6e9DiHyaBO7j9xc802lHJ9ur0CR00qy9RNYkkgZa9D3boyIUF6MH68b1Lrnf5HD9HBUUyjoGJYL2UQgKk6Z97EIg4/rYPc0PLTgxAg0BOmjC3qqaJj56tM4YKfoliMFCjpZRq4kTsLIPE9NsO/0ouEO30m1AHYQwbkJv30wak3GH/k0ItkpXcbDNkV5uo2XPchNIwl3X6oM7FoCN2TAtsEWpSR1eYZEWVPXUaYHhQ9p9C5uVFZyg6/Zma5V6s4PsLvcfHlPAFvUiW3NTgf991kGLOF68bAWm5Hk3lNgzR2aic3PxfpnbJndMO 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)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:BN6PR04MB0402; BCL:0; PCL:0; RULEID:; SRVR:BN6PR04MB0402; X-Forefront-PRVS: 0673F5BE31 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(39860400002)(39380400002)(396003)(346002)(376002)(366004)(189003)(199004)(4326008)(72206003)(39060400002)(51416003)(76176011)(44832011)(186003)(52116002)(47776003)(316002)(16586007)(86362001)(2616005)(6666003)(97736004)(6512007)(476003)(956004)(446003)(11346002)(6506007)(386003)(486006)(53936002)(16526019)(26005)(2906002)(6916009)(478600001)(81156014)(81166006)(5660300001)(2351001)(8676002)(68736007)(6486002)(305945005)(2361001)(7736002)(48376002)(50466002)(25786009)(105586002)(66066001)(118296001)(3846002)(6116002)(106356001)(50226002)(8936002)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:BN6PR04MB0402; 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; BN6PR04MB0402; 23:FAGXiFrI72lB/O7AJBvd9ZUn7m1IVrp/ol8/ch4sb?= =?us-ascii?Q?Z34FkXljAs1oev+grUl1mvefHsJbPMDvpfw7vTHhglgfhaxbgnqBJWyLLNJu?= =?us-ascii?Q?icQ9pabNzcZbiiLRDx0qLo1ypYT1y8vF3CI3GHH0wm6MHt1sxtfB7C8bGiLY?= =?us-ascii?Q?6la/vphXNdi58o8kPW1JR4xl0ecgtdzuM9VcqYIbqmWOrePhQBTrDuKrUAVl?= =?us-ascii?Q?DZ+wA5rENQjFDQmcgtCB5RWxgwVYGwaXMLMK41U7xN6DV69hYGuSk0GjLA9h?= =?us-ascii?Q?Ml/uS0EzXJyuk9TyRnddrIHXtiM8sg89H5xFxqTV9MiQawyh2XI9hyM31p07?= =?us-ascii?Q?nqtkUItKr/vaEo2AqHfYq/Jz4wNQa1qMsta0XcGd5APRNI+qqNC6/+NTOGjH?= =?us-ascii?Q?b1u6SXsOSy35nWIBb4h+S2tN+4YaK+J0cz61E48377Y3u06KzBEG0SlLZ0lw?= =?us-ascii?Q?kAoIjC0Q64dM3KjKE3TXE8cE1fTrNSYTQc86vE6VnDRGjpbG2+2v0hHZCgeW?= =?us-ascii?Q?AmXjxw+yjLIHb3XsUh+4bnoqOS6tp3pXwJ4lu60ol2+8t9rJk/Ebz2fON0ZY?= =?us-ascii?Q?R+yP0s6/HlYDm4pywd7yhCn4mR0mUi27CldN5rsRy9s9NyXZ5v++tvCcF+Rq?= =?us-ascii?Q?8l1PA2te3xHNOeHrzxW4DMHB6oBDK6gTxp1htIlw1GJcwPBLQakBOWMSVUHj?= =?us-ascii?Q?JdGqLxAp+ZlFHLjOLXbuQrI7k1SdTA3V4PFnpncMNUqC37kvzhMyHDJnGLoO?= =?us-ascii?Q?27hP63WkqGUmMVkPpAnZebOfXELqCfPxWPXm6dpVynn8xCDcozc0tHVZ2hzl?= =?us-ascii?Q?dATDgktmW5ugELmd9xQsnTFhMAdt/Z1/08M12g6c6PX5SDNX/EpRnETzW6pe?= =?us-ascii?Q?BTy18J28EaLxhvgp9b0QJyhMqFshwZc0ZyNTdISOXf0Dh24eFEmM7Z2uBd44?= =?us-ascii?Q?2NdT/D+4cu5AJ5Xm6sOLu57Yow/Ywo17ij6TxADEtMay+7CMXoiX/91xk14O?= =?us-ascii?Q?O9QOuHLItdBESBTInetLp+u+JE/dGthgBusnfHCbg/TJRszO31s2c2bIU52+?= =?us-ascii?Q?4481Au3W26zQ7EX6yAih5tNwjVFFpVNG9I8XEX0fR+a/+5fLS3Nkm2StDCUI?= =?us-ascii?Q?tSky1W3oImrAhyr4KG2s+7UO+S+HmhqJPSNpvsMZTW2EHUyCnrf0B7SSbbVK?= =?us-ascii?Q?2crdVtXrynHh8MYwKteIUKN9USEucoHqurd0vY8DsZaGrTx0yo+kvykFb4V5?= =?us-ascii?Q?bMxGLd41CZYX+9weHN81/Nm3t7m9sWR2DFzdwCHgQ3XzMKe3KbkqHjf17jHF?= =?us-ascii?Q?1+sbaGnI21Mbgd6cDjj3a8=3D?= X-Microsoft-Antispam-Message-Info: KyI9yiCiq7e1sJ2ou+pZs8cL7fdAMjNcQCyVNoF2GEHALje32nvsKb7P5fgqdhRkeC3yihCoLidshHifvQLLBHMTZLXDlcdB6bDZB3K9Oxg4y64mJpndkN2QZOEJV6XkD6TCDE1C9sJX4NSEj9+sK10wA27EIYkw3YMQWfVJsbtZ1xL33/hu9vLcufpN43ue X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0402; 6:+/spmwg7AoJQZ7xquGloNGVPsm9VQdanoS1ONDMtcakQ8Gdg5zEOF6EVtTAlvyTmyNsBLugIqOX/H5kles1rh8YwUWLZdMw2sWq2ZolZ/z5TdmyA7kdDAYnxu01DbKBFeAvhOZ2DttDVo0Y3YmmsJthkiFKaAhf5fKMInlZUiAlhrbWEcLAEfO48YY3oqiTZ+facDLk0A5j+FUAS0Lj+HjCq4mTMo6sOIKH9JtxfSt8mzsT9LZ4CndZVUgio5bi760vR9YJeYtncKErpYz9HbKTVkUq9eLOQ1Lbidya5V0a6Fx70J98UW1oPb3uzhnhDFpiMyqwz5tONBSXdMJRqmhIhxVjHhv8kdgVXEHwrantuTP18PVZq3U1HPV4R2pvFctPRO7eTm3kaRgfN9sg0aLvaiiMU3ZeC1V2a5/OJa+yj0E+9V0atnhxirHAWH2vgeP9S/ay++OxdYammFoCCmA==; 5:+jqZ+tkGFVbYmvT4irnOL1w9CD808u5v21Z43XoLUk1yS6PgQVMUM6MAWJgqa6y0Oabj4w3ZCRUjgd8jOi5UV/uzyBbqYfRJpUHE3uj+Y+KwDPym2YIITBFgjFaoHi6Ius7ZuvLAPTUErxkr6/bME+kwEclS2sDT95yv7FXXglI=; 24:aiwZXrOeI4uTLGGfdM3+V6nxSIm9nUKbIWrkwXr0zoQoc57NbH2eW5wJstzkIjXhMSjxct7VApYRKCihgSrwiRYtjm/fNz+MOpobIk6zbus= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0402; 7:wO/+ZVDGs/FENHoSmau2+lsk3ytfHOVQ4pP1N4ckrxRvpUUUcnLIKh2ISbJZhzrbjjG8J4KwlvK72ec1LaLjRBEzwz7OdoUVSbtQmsc2sUg+vms5JW9aO2RxGzjRUdwzp7RtDJElb4zHhux19Z+pOTFLUqs2om4pB35bfall2pDN4sqVWT2t97PNyci8GFBqDKK1Bb4uPJpwcNR5Yvf+81Jc3TMTqyuwX5wJKjz7ufQvcS+CLaGeYPH6A4lrFWtQ; 20:sIj11E/j01tiqQRw/OrHAMf1WaE/1eGxMCY4iR18ACE/Cl7TqeAuKqNcMzX7OdXCKr3V5ozLV/23uD00pdFyuM1ukbrv/M1hgRCHsOFW2cn3vbypDaME+ljkWdeMVm7I4cnX7OjiQtRNuBkaB+EMD4e2rjZZOix5LAJnJE9XrJI= X-MS-Office365-Filtering-Correlation-Id: e184836f-d2c9-45bd-34f1-08d5b9f7f8a3 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2018 00:08:21.6584 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e184836f-d2c9-45bd-34f1-08d5b9f7f8a3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR04MB0402 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 v3 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 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.0