From patchwork Tue Jul 3 16:34:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 938828 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.b="TtEme73v"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="K6eHQqCu"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41KrDJ1jSrz9s1B for ; Wed, 4 Jul 2018 03:08:16 +1000 (AEST) Received: from localhost ([::1]:41825 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faOmj-0001dA-Ph for incoming@patchwork.ozlabs.org; Tue, 03 Jul 2018 13:08:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49810) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faOGq-0008At-4Q for qemu-devel@nongnu.org; Tue, 03 Jul 2018 12:35:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1faOGm-0005sG-70 for qemu-devel@nongnu.org; Tue, 03 Jul 2018 12:35:16 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:62998) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1faOGl-0005ir-PI for qemu-devel@nongnu.org; Tue, 03 Jul 2018 12:35:12 -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=1530635712; x=1562171712; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=tIFythTc30TA20epLQleSsAsB+4bAdI3ceDXEA5Ecyk=; b=TtEme73v/iR1TzfP5IU899NvQEJu5F1BoFhWPuKKt/L6TxHjXCGg7VVV PCfMs28ANTCprz6jKrhJguHSiooZf1JIcRjGqFtGpOrExVUYjtIzY8yby ImVZO8dFJ31egbJl/oe8uuAKA/lhlrkXh5WWSHtWJuM7zMGQAC8NydjKg 6Hv00yd1MuNbM/WljC6KkVcnDGGn3xrG6Qg+O7ntsWHamZa1CKkGxjBK0 +hw860ir2SIhvTjPdIfSODuXe4Iv2HtuL7nRFzStMPRza7t+MKffH559j qjjyLhNI/Csq0DAc3OEM4e6zSbPBek+qEOuNByADjkxcpYnBqPtudl3hn g==; X-IronPort-AV: E=Sophos;i="5.51,304,1526313600"; d="scan'208";a="84260507" Received: from mail-co1nam04lp0048.outbound.protection.outlook.com (HELO NAM04-CO1-obe.outbound.protection.outlook.com) ([216.32.181.48]) by ob1.hgst.iphmx.com with ESMTP; 04 Jul 2018 00:35:11 +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=LFWSei7swbXasP0yCnBnrJF4TUhdG7ZMOa9gpknpcnQ=; b=K6eHQqCuNJ48L2Pn2W+gtMuCjd8R3Fm/ejZUgs+Q7KgOwSj34BBkmD2E4MJM20V1w+ajo69Rqff9waNru0nMaD6iWYy8w9obMlK5cr48GyxFwfhrfBf/2x8eksVGwOl+KdZm8LM1BOfLnKrhvlCFAOah9uqlnU6DnCcl4a4DEMA= 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 BN6PR04MB0387.namprd04.prod.outlook.com (2603:10b6:404:91::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.24; Tue, 3 Jul 2018 16:35:07 +0000 From: Alistair Francis To: qemu-devel@nongnu.org, peter.maydell@linaro.org, mjc@sifive.com Date: Tue, 3 Jul 2018 09:34:46 -0700 Message-Id: <20180703163446.9943-8-alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180703163446.9943-1-alistair.francis@wdc.com> References: <20180703163446.9943-1-alistair.francis@wdc.com> MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: CO2PR04CA0095.namprd04.prod.outlook.com (2603:10b6:104:6::21) To BN6PR04MB0387.namprd04.prod.outlook.com (2603:10b6:404:91::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5c103a12-7b1b-4cff-fe6c-08d5e102f09e 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:BN6PR04MB0387; X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 3:6/hvvZ0uALhE7B12H9uB0SPdiQX6NLBWp66+MZ6vQI9dKiG+44wXB66u/rwrd25fPqG45x2QG++eQwwd+tBRePyEYtZn8RrUpMsIlJLGJDJ7eN3K89jxMTIfQR4vo/j49LLSw3mhKUhPPibnc+fyFXczuRMezo3kP9tUBJJmNlYjNo9JXgyAexV+IfOftF45ne1lZbOH5x/qaA4SXGewR1T0AxAlIzLHagmSarNTQjOBtNAdNEa4ZBvDnvbZJhMo; 25:heNie8bH6eb8jVVdCyJDa9tGBeWn59OXw9+DgkgS2zOg4waFXigJAiFteR7ytkzT7tQgAlyF/xOaKFUYNAbwbbAtefUIMt6IFA38Vk5A5KJFMTiVt+Y+s9H0sW2f7bB9N588pctBMZrlF7+OstH4TtVAYXLR5rU5aQkbFqdffQGeEN3YqzABAWwSaLHlgEbUpHxzAIrgC8C6FGylXJUarDtLj+G/5v84Ep8xOptRKmELTB28V4phIrx3hn85BnJGP7lxfCmuLspWUQLYQa7cu8L2iobhmfGrex/A7knpa/lf2xqgqVcHQJEEQJFLkPxnEC+ZT2Qt2RnF+JWHAlbjGw==; 31:CX2s6Akd3lHyNELqpqNdpVlS/pwkUufpUzDUWyvPfdfBskfhXQcz7pk0PhD9qE9FejrNDmaPHz5Xo1S2CCMikwn23c6A1+Gx1lY+WI6TzK68Qt71lkN16V93VzmP3h9Xjxwp1DU2mfr7VVX0k+rtgvMQwtgLqcs10HBb0z9VVLkQFjpT8KEgB6RfN8JXq2haZDCa9+THSdqujwNMH6/bh2n7zVWQfMRu7eCUCGLcumc= X-MS-TrafficTypeDiagnostic: BN6PR04MB0387: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 20:KrzWbXw1BeQUV8BTOBb1xdtEKdVR4rBwOZk8BooC6g0uxATaMNJ1PZuYeRlcCdXHnj5SNqIEuqh+iTOSd8BydowQhs3qsmYV4DhP8JIaJYixE+K35uNDfiJzueJNsjc+gU+ybwywJ9Aeq11T1FsdZ70qkYDpmG5pudBL5K4Yzh8BM7e8AKg22guWtgR+jd3A2ibVHe56xbvOfFgaWf5nUjnYVelGLtNtGOThO2EWhhq2cu405oZ9zNjPS0TRTjTTcdPlgV4bz/kzIMxKD1xT+8PQs0/ZULV83D0AIRufp2BR5u4fFdSLNkz6ZWLQSD690u4k02eI/yk2j/4e45r/F0tzMfDQW/H755dEieAg0iCh2wUZATA3hJf5axO9FAuvVVxZ6FJRULtvmHPt5eG6VbTzI6T6Ilfw/z7wwF7YQyN/ecHgnbPakWUcbNv7w2eWvIVWRDuTotNNfUIzC/rKJjqzsd3js3a2cr3KcVJXmRNPwrWQ26JArQHSE2WwH/Ft; 4:k/V0qAGMPSEybKV2hNjTleNKLtfHDaVV8VBeALCvvzWnzj8NkMfM+uvCELKHg+Giqz9jAlqbDD/SXUMCw6LOWcRgCvINXxLfxxGPFS5WnMdnw77wq8IFcFKF3UohxUMRkdW2uxI/MeoR4/Av7QvgehSoDb1eJ39xBCfZAo99ByrUH8tdiNw5mIaYwAzT4xWGaE8qpHkM8I6qYR7IwJFrlY4nJQ9o+0uJbxTDuBSq/brN99BqqKcKWQpXCdS9xIg8RMAYjbcrBhPi3xoOwmsPua59KtwO2sL0KQKCPZ1mtjCvQII91keVyCc+ODtSdx7n 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)(3002001)(10201501046)(93006095)(93001095)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:BN6PR04MB0387; BCL:0; PCL:0; RULEID:; SRVR:BN6PR04MB0387; X-Forefront-PRVS: 0722981D2A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(346002)(39860400002)(366004)(376002)(136003)(396003)(199004)(189003)(44832011)(50466002)(48376002)(39060400002)(446003)(956004)(476003)(36756003)(6116002)(25786009)(5660300001)(53936002)(86362001)(3846002)(7736002)(486006)(50226002)(316002)(68736007)(16586007)(2616005)(6512007)(6486002)(11346002)(305945005)(4326008)(8936002)(1076002)(16526019)(26005)(106356001)(186003)(81166006)(8676002)(47776003)(81156014)(66066001)(6666003)(97736004)(51416003)(6506007)(52116002)(2906002)(76176011)(386003)(72206003)(478600001)(105586002); DIR:OUT; SFP:1102; SCL:1; SRVR:BN6PR04MB0387; 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; BN6PR04MB0387; 23:e99yBAG0SI+iDP6OxutbFLGw+boHYC2zzkh3R/UQA?= 4iPWj0AHHnzcPSifcNvlqSFP2BWLkzKXinhy2tltOP/J77doQURIPW2AFSyjNhSRqzHbnTrj21a8bTCJm86VpoHl01pTF6XyYSWOLczuxp0ECus7yEMM3LBRbetw3UGc3QNpKr336o58OXj9aA0Nlj4bfmHANQKTHiXwumDqdZBvf3tqESeB8Yl8CjPhfDoKGJmkum7ATNZblFkVPGJ4B9510AWqgq5I/GVjpfKFU+FbN2SQ4XNEkrrVGFGAD3WlV+NtRWyqi5oL7cf6o9VRvwMAXXsc+Sfk1j7dw1P8vEa+iHIRr+mQTOrD1mIPSH0IolkZf6R6+veTtmJ1TyIf72ifgkQqu28Oy8VFQuGQBegFIQEeiyCHvGwY+PPJba9AkCtooVZk52g3x7NqjL1+jTcXF5TwodnW/2/292Bm6XO2jv55uMQ5wAZqA8oczx6jBz1h6ceEpbswAgxoIZY9jn3+M4Q7SDx1m3ALotyrVHgLjOwebohznV1QPPo66SSmsNdcXqq5s4y8vCioigcjvFAYFZU2r8CXs1VChBPO7LzyClf2hJIFnDyWQACbkS+ACaW0L7eLSuadDm/cr6uYsQxQUCUzkwWRz1Zjt25mCRDKC+IBzMZe+jsm1J27SUMX9iOAbbyQ079+e7TdOdUNU8bs26J2fFtZfiBwxVv64V9QNj2gIoNnD41EKVh91QsCM6IytaPMz1kd8J//a/wuaQw4jNq9wtekKakAieu4rx/jlaWpYPGiCAcvj3ftNEeLpP8dXXpnjPgqZDEEhG71SGzY2swJaaPUQmG/GDLvgiTro01saCGAvVZGtQV3tO9hvIJSjTUQlYV5120beOqGXAwqbZDjweXTTRdnuAwRWnI69BSpcqY1Un6/xtEdzruOyIxEzZz6qWLiQGdQ1iM6Yu0ZuDz1PcaLX7ZkI7ItmfFhdQ6RaCc2PiMbebfES7XnYf7sf9FHqE/CvrBZXhC3mZpjpwUKjlpBntEwoUJOdnAGY8vIUDKjipEHyCs+XD09KuISgckXy4WZ4IOPwnsbs3T/xFY8rPES4vYZJke2y+QieJphx1CxjLyGIX1ERHKMfrFAJAXRn66woJa5ou92QrfD2GT9xvPiuiCzEAkm7CXf2TL4Axz1g0O+KMBmN/0vFQFiXEQAaSIrYvyigRFnbSl24Tp9cf7jl34B3YjEsBW/A== X-Microsoft-Antispam-Message-Info: ajkNeOIogB4HXO5Cx0s1SV3vgZpLg7C+DpTNcZu4eoYgq2dKr1E+97d7ZTk99CxCXGUx5twz3Y09E9FdCV+bxyTWf1TKJpaKxob8KY8RJxrsuWNmTLs2qiE6hnXC8lgCZWuAE+S4gDFD9X6miNgQIgVtWi/UTLoLrIt87PIP4xQSojV5KCMOt672EsLu9/NiZqE6MX53GAIhrvsnR3NWE71K1GQchmATmhQ1w7rV6eZYJ/2oujlxYdyzCDIDmgLVZ57xZRwmWpi3qD3QB0nGg2/n4OhIlL6semfx+duP5Gy/1lWdt371k982cDog40mf86juiSV6v8pEFZpbQjq1l0XDjC4LC/3/QgD+Qr6mMDQ= X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 6:wmhHcOtIC2JAWINTMGuxl2p9JzQoGF0ULDDSr8wtaL6EJdQpjgFrkZ08kpY7ZV9e2Z5OYQKOuRmSPg6Zivb3yhLT3Fps22+wRBEmp1iXr6MwYB8uijJD+NGr9Fjv0ALagx7KSaycVmvQAdXfPU+1tkq7sWAVGpAWRT+lZzOxdrC1VFtm0qjW4gtWZbQSEMk1KV5lI4ZeSWGILbq3geFuPGuIl0ZdwjHSRAk59AYs/BhZhWcMtLrAlzRUZzgx3+adDYv2VCAqaMGTcoFxnrt2Pq0sFigk6hxM5vMXuV8digGamXroNPbuz+4qNWb8V+WXX5a6619An/N/rSpaUDgUFD+7c6vAOsxSBq9eiTYFylDhNvgh35qnLiACLxs+hpwv428tJT9TGLHh15i4Z4sUtW+tLJJO/rOcOfJH7GhtxtOsxe1plo4CLtt1gjwLvM7KHWYn7Tj+gtxfgEnEES50ug==; 5:9oUqi6pobnCLGYPzxYY5Fef5J92GUYna7Vdlj0RKnkNiZMAisz3/BztV9XauPTEZX3z/NU065ajG3iJQK2r/2N5LEQlRLhzjfAjQ/bCF07aZMxBnf8YrG3lO0q8GQ3wkVSZBQaAksT3FZbeP7xtJ/aia739r4Lwb2sh7vkqqfvQ=; 24:WIVWGc21UY8l2L4H848/RldxlYYW9SpI/dRFw5frJOXQ+D0Ze2+6M3XcAn5gr4SJOq3A+uET5MrWbMmJvO0dz9bfcFGAs67e5ZISWTjLsQs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0387; 7:mexZDo7/Tos8+0rNPXaydjc0P1qvH4SslGoH9NPOsfT1YYxAlGxqPfZlp04dzeC+GVqG9DNmhCwS2fqRmOVy0zR8rw0pj3STYc3QUaBsXEfPjiOiJT/Jkfm2CoYS71wqsmUL8L/W4iVUnTDoYurtdt5yS45t7LIHS/83hWUPjyR+l2LXkXLA/pk1VtZZVL+rpzyVPDCOKP2ZEOTEHyMpyq3asQgw6Do9fj8AD76EeJ3KR9eUJYeEfny3OGmiWnbi; 20:7uo0Hpgxjrmnm3Okfk0ez5DQPa2aJg33QT/BTgBuiM7O5vHxztooHBz4CcbSumc+bkGpEq6AiHsVaCaOncFcx4vNXB1WmUCU+CsUFo59oROjKOlQhBXw+s3UP/fiDrAgf0pevp4ZRVJI1Lqr+DmLN9HJKDLYsCPos5OlEQrsdjU= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jul 2018 16:35:07.8122 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5c103a12-7b1b-4cff-fe6c-08d5e102f09e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR04MB0387 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 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, Alistair Francis , f4bug@amsat.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 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] = { 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); @@ -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()); } static void riscv_sifive_u_soc_realize(DeviceState *dev, Error **errp) @@ -303,6 +330,10 @@ static void riscv_sifive_u_soc_realize(DeviceState *dev, Error **errp) SiFiveUSoCState *s = RISCV_U_SOC(dev); const struct MemmapEntry *memmap = sifive_u_memmap; MemoryRegion *system_memory = get_system_memory(); + 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); @@ -327,6 +358,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 {