From nobody Tue Feb 10 02:44:56 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 1531182701802948.7645648698337; Mon, 9 Jul 2018 17:31:41 -0700 (PDT) Received: from localhost ([::1]:45098 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcgZA-00076F-Pa for importer@patchew.org; Mon, 09 Jul 2018 20:31:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcgWG-0004lW-W2 for qemu-devel@nongnu.org; Mon, 09 Jul 2018 20:28:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fcgWD-0008Lq-Pd for qemu-devel@nongnu.org; Mon, 09 Jul 2018 20:28:40 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:33241) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fcgWD-0008LZ-C0 for qemu-devel@nongnu.org; Mon, 09 Jul 2018 20:28:37 -0400 Received: from mail-sn1nam04lp0086.outbound.protection.outlook.com (HELO NAM04-SN1-obe.outbound.protection.outlook.com) ([216.32.180.86]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2018 08:28:36 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by DM5PR04MB0397.namprd04.prod.outlook.com (2603:10b6:3:9d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.930.20; Tue, 10 Jul 2018 00:28:33 +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=1531182518; x=1562718518; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=jnqTPh44HGsdtK3fRol/uDfRZKjssj0DPSOffDzgxjM=; b=KvodxBEm3dm7XjRUZHEOcGPqE3T3EPHBSPq/99E+GWBccsLexOYFNBmE RpDfelvQHEPLo4gTr6mzXXxgcbM78+PHscSfjMaFPqa8e2gzdV02GWXuY J24SedV83vKJGVCP5vZklGC0togRueI2oP6A/s+9cvl2PB21l2wqGpNjJ akQJPxBo0VdAAYx5Ku78j60g3V6vy/3rz9rsm/mqxkZ5RSBJ0mE5rWMi0 ru3cDn9k8VwpQ/5htfBhQC35T83mbjyIsQYNMC2obDbDZ6oFzRfQ62BEi ZRAPQuKHQPA1rb2aZtxoo+zGvuC3suBdFcniQPhKb87fPC9s6F/buAMIo w==; X-IronPort-AV: E=Sophos;i="5.51,332,1526313600"; d="scan'208";a="84859317" 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=kLdoiga1ak+d8uATjHbVsSf132QoQMoKAowzrUYeTXQ=; b=cS0COW3RF09Fsven5sv1MKFgybdPgzx73tWXUrax6p/HfOH9Ly05jLVE3QSNdSoFfsj8J6pSASEg1plcFxN0HtRsTCKXv9JZDWoPkyrXdK+adLgKCsmT6Uq+nWq2Cr2m+7iu9j4fIXAVe64FPtamEr30sMB7eynvWkujfo7QXS4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; From: Alistair Francis To: qemu-devel@nongnu.org Date: Mon, 9 Jul 2018 17:28:24 -0700 Message-Id: <1183ecd4c583855f33f36cffbc9307a094bac68f.1531182400.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: CO1PR15CA0052.namprd15.prod.outlook.com (2603:10b6:101:1f::20) To DM5PR04MB0397.namprd04.prod.outlook.com (2603:10b6:3:9d::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 838402d5-7242-49df-e303-08d5e5fc11cb X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600053)(711020)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(48565401081)(2017052603328)(7153060)(7193020); SRVR:DM5PR04MB0397; X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 3:r1xjM1GAEagq+WSQ/PGngvXdrd8oNgXD3263JRjajbychFPqh5se1JeFgG17Cb9S2+ji33umbFXwobigLoeYBuJYwcSdB9VOM4D5Te547bOWvVlAC+LSQrVBJN8Zs/+NDOQwSamZ4R0866jvjlZzsBlzSlrriDxxcZWUIMrr5Iuoy8Pn36tuVIzpD7zPG3OQe020XhsE4KWtzS1wqszHpSTKas5u26v+ZsXfJ+hHsr3faX+IblcpN2Qq/cN+LxEG; 25:W51bA6Qs7pldlyrtFxM3BAJLcgfbLbNaHLnzfOGZSY10tl/5ROV6CUx+alTx66wkTGL89ct42bEnQ5XqXo7zh7Ho1Kl8TKUxPgf5cZaN3JdW05spgyovGfJYuZ32Rz7UD0u+wduldCXhy+Jp1aAkxrkG/hFojW1vilmAG17LKMaGpzs0IArIfzSi1Z8HwwkU7AZq7YJ9TiVNCIVRUIEJnrJibj1tddTH1cdQWdl94fTV9JkG3+K2W3hxmVo15U77u/CdR5orre+YVqrIHA8jR9FJuL1rSP9UCPqXkNuvLD5VcFmJSi/ya5IWgzWNhweZzOkyJnQIQNBKMBjHniJUqQ==; 31:iw86uS8Be82sp6xhTNiIagZgGZfbESIObaEKiOUDiXy62f8cnbnw/l6bq/H5Wa22UkAC3Ce/7/M/RVudT9VnAkXpospZ8oUVN/lFOm6uNwvlhnAl/ZoXb9+vWBRFiJ04s+vWcVMW2n9PWZ382QcGhQPxfb36tuWVgY9mzkE1ifPlrxoKi+6+1qJEJ/8RdnvZTtqpLwc77G8JTpYRpRrL3oDUHRq124+zUD7OmXWiVcI= X-MS-TrafficTypeDiagnostic: DM5PR04MB0397: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 20:28MLC+vOb9yRW94Y1Tior0c8eHzmh+hOmed3OyFLeBSh+7+BjmELEfwyFFMYxaKoODNPE/LFQfqfsFGO4z8WrjFDQO5bq8PbhrzF+KPppy17NFmF+FWy6WwPoJuXAWC8RqjLfHZXUhrxZcoI8Of8xHWswbgfMMELQYplBWA/skvFsWRAVgwfTtaZTlT+TCGNNdAZQWn1UsyC4m6fagnoWrp1aovMG66TgKQG9HnPFe4kZVcYXA3uxEQkh33HzwqCDloJgqVK+jtLP3Wbkt11B469+RaUzlGNhGUwvF9rNz7EOuvwA78RuL8WzQyATWxmN3wyFLoJpsIpZyLpYGWwHoBlNC6WKX0R8kXKuBD+upETx7eZaUGVMuTdxbhqh7M382fQtrOQaFd3cENnrZ4cAfLfWAd1AHGfbyCKXeyJRWQgw3mV98eLyRGBnAjglMrhuXb4ZU9Hf6YdnCIe3JPWXNL4bT8so6ga7zhomyntvVup0ij4dNTU00RsvYmlr6OI; 4:7FCP+5k3oXPOhXnCtiFmPTLZZ5xG04yjdcQSg6XqPZvpn+jHjE50/apS2jTP8uLKlQSv0pQmk0IUqRVbjyy+eVUuituyp17SKsqi+zbHO41zcqexCwJXJl4GuEwqI2iScjo6BA897rm6NENPnrDdJxD2Ow/SSqX3dZ7BCc2hsSP2JlKJkG8OF2uuDSk9Ul/d9W58eoxmV/aJNQPUkg5CC4fZnT7jaMVY3L0LZWIV70SwyPOSAeDSh7Wvysf+j5CashXsKpHouT8dU5p38ymTXPxLvP2718PN6Rre6Mm9k3EOBQ6v5y2mviFWiLMMRsnS 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)(93006095)(93001095)(3231311)(944501410)(52105095)(10201501046)(3002001)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:DM5PR04MB0397; BCL:0; PCL:0; RULEID:; SRVR:DM5PR04MB0397; X-Forefront-PRVS: 0729050452 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(39860400002)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(16526019)(186003)(2616005)(6512007)(81156014)(8936002)(86362001)(6666003)(44832011)(105586002)(50226002)(305945005)(14444005)(36756003)(68736007)(26005)(476003)(6486002)(81166006)(2351001)(106356001)(486006)(11346002)(956004)(8676002)(446003)(478600001)(53936002)(316002)(52116002)(47776003)(97736004)(66066001)(39060400002)(16586007)(386003)(6506007)(2906002)(2361001)(72206003)(76176011)(48376002)(50466002)(7736002)(25786009)(3846002)(6916009)(6116002)(5660300001)(4326008)(118296001)(51416003); DIR:OUT; SFP:1102; SCL:1; SRVR:DM5PR04MB0397; 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; DM5PR04MB0397; 23:hTcgiHpqQPkyUFXlrFkQJOPMrZvV6ANlbrtuma4ty?= =?us-ascii?Q?+M+mQY2dd+PBPOCXIORYK/TVzalu1yoVM096iOovWMxtNYYrPXiFpLJdr/z4?= =?us-ascii?Q?DzrWt4o69nNRfXFi+sC3U2zQYQfyAHOF7Prta1tlDkPZyerumdAFMrYQDaPw?= =?us-ascii?Q?GNc78FF+VSNvPWzR91JorAt0CJ0uUfZ5Ug/J+P8Z/YossoIOOIscuX6sTebS?= =?us-ascii?Q?EAXZg8B2UAPTsmX8NjYoTFfDVhTYCxpI8p/oGHT2l6E0sED8hI0DGgVE4+aO?= =?us-ascii?Q?tSeEJRmlyPcZEWtkhif3/KLwgAsigbYFStOCVDHDGz9CYKl2OhjnKBx0cLw6?= =?us-ascii?Q?R0k6HnSIkDEL9yp/DMnFp343OcQvH7XKR2To83GFK/IZhNsNTZX4o+8cLenx?= =?us-ascii?Q?LK1+RQwZ6l6Nu/XZ2Il/wN/GkSYAHn4W/Xl3NasJpXcv9wE1KMXe08NjGdRN?= =?us-ascii?Q?NyI9CPHdlSHD0HTLZK98+1r58A86U+Uh8HsrQ2R1vVuIa4W0SfPAxl+J/FXC?= =?us-ascii?Q?rqAF42243AgVBxOtjMbFUu7o0hsKxzWIxkr4YbYgbOId7hvd6QnC5fRKjo+M?= =?us-ascii?Q?aSNrZSL3ik1OAU8HJgRVa+sBWmtkgQZxIQsoQADcdxvCUu0F5/E7VJZlTTsV?= =?us-ascii?Q?33jsbqTMYO8KO38ai4Y8YkYH+6OfyXt9SOpl/wlCBKjS1zZf4cDHlA9rg6G/?= =?us-ascii?Q?9aVv2fpuh6TOu8l8ucnX8ufSD/A7cDYnRA4m44+Rfvop1sdpSKpuDJYfD+BP?= =?us-ascii?Q?BzfP1YTMhS2+YjMdm3EEgKiR68xseZnbyn0Hte87ewknyiAT24tb+xT2f5jn?= =?us-ascii?Q?+eiRC08ENTLpuP+HPWgihoE/aXSbLuQGiY2h4+C2EBJjleNy7NkMZVQFdHUD?= =?us-ascii?Q?Ik2tl/IjO/aHOStEJhNjdiYrYgu3CGLTfkVpuWyl8YlZwa9XYe7kjMtWp8JY?= =?us-ascii?Q?0OuMazqsho0uqyIn8Qh7KDy19312RMEB/lY2Zi7emzithL2gf9i2fRbVbCT5?= =?us-ascii?Q?YDY3+L0ck9Y3Hgi4AP1IUk26pO4CsAezw3hSlpRdFD7ugL0kqnJ92Kfah49Y?= =?us-ascii?Q?6UDfGzpKrl/iQsb450XPcAR9xffdV5lrIJD8GsHsW8dduhAAxrSOEG7aD6IJ?= =?us-ascii?Q?uwH+cMJXTgOh+lW+dDhFJuVN099YvWDmTeB8oBQNiL+OR0UosiUaph/zDipI?= =?us-ascii?Q?KFNCTTp2w3ZBIYvAlIfT4J57/rVaVio+xYIRJfWSHqDLVD4KTxQeVJaYIfHi?= =?us-ascii?Q?dzvSW/n5E5gDo5Zcr1fb1DcAjyyQJG5OntS/Ta+40OxK1GUC984lyi742s/F?= =?us-ascii?Q?S5DyDqrXap4325b4UiY9eY=3D?= X-Microsoft-Antispam-Message-Info: RMEpqOt4kISId7BcL9K2fkj4ribusJVv/zCa95jaNY4qtQYqK/DQHf+KDAG29cVGp7W0spQg2a5D/l4yG3nbtrl77xgnj4PiSH8CpoDE9xkfPQIvS964fAotEz788yq9f3QRYALFVuvAiS54OKjst1DF+dyFvuCv3589vmlD1B+ByNe/IhXVj1JXh43fGOR1Eavp8BGMeRBbTHVvqBpZm3j870fDv6ODo74mWthrrEdumhA1nLrKK5dBceT/BeCQhcJrNuehetdaWDc/TTB9uxAV6cNgKRMWJpFGc0N5o9EncPsaC5kjoB1ymXB5n5CDXGW/nALmiG/Y9E7NBfH79M2lpjjqcXO8GJi5uVfHE68= X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 6:2COeZyQIHEOwZ/BzRMwmR8C0F/0iMFaRnuiudMofkUhk108pfEq1m2XvMTyEMSPP679rnJfAOsIynYGseFfEnJZ72ZLBGbzCId+QuG7DnxAF2U10C4GneLC48VjII/TcSiC5E07DzCGTrDHO1TRkIz0y2DtmqwHa9IaXhqD/gh56Ayn1rBgAuXeXHBA0IJtQnAQxRF5fXvOg8lkUppRIqtHzwsxYnaMVYXklD1VfpLuBXLkHWJqsoba22QkYrVTpA9CAQ6XEYhWiQZrppWdh6PyvcPfQheitFQs47Rl2Yr+R8Pt0YOnkg/uoOSEboOhl35U7NQrlJeyVwB42pLwy9nUL8BKpAWlccDGyv/ny7U0okK+4J6MbiS4TXXo58ZEB+Co9M2TDiwD9WOkacPDd1Wi+6Z0B3EtQcrWkBrLFsDItdTXrVA5aobunZRkkUXesLYz8Yvj3H9BMdLPYrmGtuA==; 5:tHVmrnbCO8Ail1/tER8oYORe9U19D/7fHMVJFBB6z0fwDG0+WwFf+5BSZrGeaoJqdi+PWjPqLQbPh0yV4IXUL2L3czGt2kU461lnlzdT3+WNmgzkORo4lizB8faSrRXw/voL4vAAVyE0Pf8BVH9ZsqYZGqnJcorarSZbKX4AQeM=; 24:3csYIPcc6b+Ybu2ySCpV9BSBg8E+qP4yDq35Hj5cjiJEOM0zfc+srfpGASW0Zs0506QAqmtH/ZVPC7YSMEO02GyVlSN52wDTgK+H2RYMXLM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 7:nV9Gp2uZ1zl+Cj8BdTy5xqIAIVPcOEl4BaQPo3zeVRyPJ1C8jzNqbl27sRkj7rjb70pqjvjg4zOG8ciLxBg5VoXKFBFxRg+bmTGIJE/Ec4x87EMrG1wQENLPWlSLQlP/eyn7RdCPv3WHkg5bQ7DlcuJmstplQ2p4feRpSPvJCw1ahnBMacbbpSyyoo6Igg5Dk+/pmlJYviUtpQDAm/X2TTH5psB32jpj2LEeDhlpq7ytmbZSbtePLU/+ozpz/yKq; 20:QgqGmUXULedjjwidgd+RamVEf/al5KQ4QT9/1lLJPP3rg/SnbLeClUyLUmZL+1kc6CLRgs/NS22gXfXdqtiOHqqu9A/7otVCVPEf3Ik6EjqLCDC/s0ndvqxyvfRi5oUKSTBechzQdG0aOCqiDUSGt4IDiMywQJAVuAojYGj4gu8= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2018 00:28:33.2173 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 838402d5-7242-49df-e303-08d5e5fc11cb X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR04MB0397 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v2 3/6] hw/riscv/virt: Connect the gpex PCIe 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 gpex PCIe device based on the device tree included in the HiFive Unleashed ROM. Signed-off-by: Alistair Francis --- default-configs/riscv32-softmmu.mak | 3 ++ default-configs/riscv64-softmmu.mak | 3 ++ hw/riscv/virt.c | 58 +++++++++++++++++++++++++++++ include/hw/riscv/virt.h | 4 +- 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-= softmmu.mak index 7937c69e22..2c943e2669 100644 --- a/default-configs/riscv32-softmmu.mak +++ b/default-configs/riscv32-softmmu.mak @@ -5,3 +5,6 @@ CONFIG_VIRTIO_MMIO=3Dy include virtio.mak =20 CONFIG_CADENCE=3Dy + +CONFIG_PCI=3Dy +CONFIG_PCI_GENERIC=3Dy diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-= softmmu.mak index 7937c69e22..2c943e2669 100644 --- a/default-configs/riscv64-softmmu.mak +++ b/default-configs/riscv64-softmmu.mak @@ -5,3 +5,6 @@ CONFIG_VIRTIO_MMIO=3Dy include virtio.mak =20 CONFIG_CADENCE=3Dy + +CONFIG_PCI=3Dy +CONFIG_PCI_GENERIC=3Dy diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 5336166f6d..0c3800fd64 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -39,6 +39,8 @@ #include "sysemu/arch_init.h" #include "sysemu/device_tree.h" #include "exec/address-spaces.h" +#include "hw/pci/pci.h" +#include "hw/pci-host/gpex.h" #include "elf.h" =20 #include @@ -55,6 +57,7 @@ static const struct MemmapEntry { [VIRT_UART0] =3D { 0x10000000, 0x100 }, [VIRT_VIRTIO] =3D { 0x10001000, 0x1000 }, [VIRT_DRAM] =3D { 0x80000000, 0x0 }, + [VIRT_PCIE] =3D { 0x2000000000, 0x4000000 }, }; =20 static uint64_t load_kernel(const char *kernel_filename) @@ -233,6 +236,32 @@ static void *create_fdt(RISCVVirtState *s, const struc= t MemmapEntry *memmap, g_free(nodename); } =20 + nodename =3D g_strdup_printf("/pci@%lx", + (long) memmap[VIRT_PCIE].base); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_cells(fdt, nodename, "#address-cells", 0x3); + qemu_fdt_setprop_cells(fdt, nodename, "#interrupt-cells", 0x1); + qemu_fdt_setprop_cells(fdt, nodename, "#size-cells", 0x2); + qemu_fdt_setprop_string(fdt, nodename, "compatible", + "pci-host-ecam-generic"); + qemu_fdt_setprop_string(fdt, nodename, "device_type", "pci"); + qemu_fdt_setprop_cells(fdt, nodename, "reg", 0x20, 0x0, 0x0, + memmap[VIRT_PCIE].size); + qemu_fdt_setprop_string(fdt, nodename, "reg-names", "control"); + qemu_fdt_setprop_cells(fdt, nodename, "ranges", 0x2000000, 0x0, + 0x40000000, 0x0, 0x40000000, 0x0, 0x20000000); + qemu_fdt_setprop_cells(fdt, nodename, "interrupt-parent", plic_phandle= ); + qemu_fdt_setprop_cells(fdt, nodename, "interrupts", PCIE_IRQ); + g_free(nodename); + + nodename =3D g_strdup_printf("/pci@%lx/interrupt-controller", + (long) memmap[VIRT_PCIE].base); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_cells(fdt, nodename, "#address-cells", 0x00); + qemu_fdt_setprop_cells(fdt, nodename, "#interrupt-cells", 0x1); + qemu_fdt_setprop(fdt, nodename, "interrupt-controller", NULL, 0); + g_free(nodename); + nodename =3D g_strdup_printf("/test@%lx", (long)memmap[VIRT_TEST].base); qemu_fdt_add_subnode(fdt, nodename); @@ -260,6 +289,31 @@ static void *create_fdt(RISCVVirtState *s, const struc= t MemmapEntry *memmap, return fdt; } =20 + +static inline DeviceState * +gpex_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr, + hwaddr cfg_base, uint64_t cfg_size, + hwaddr mmio_base, uint64_t mmio_size, + qemu_irq irq, bool link_up) +{ + DeviceState *dev; + MemoryRegion *cfg, *mmio; + + dev =3D qdev_create(NULL, TYPE_GPEX_HOST); + + qdev_init_nofail(dev); + + cfg =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0); + memory_region_add_subregion_overlap(sys_mem, cfg_base, cfg, 0); + + mmio =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 1); + memory_region_add_subregion_overlap(sys_mem, 0, mmio, 0); + + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq); + + return dev; +} + static void riscv_virt_board_init(MachineState *machine) { const struct MemmapEntry *memmap =3D virt_memmap; @@ -383,6 +437,10 @@ static void riscv_virt_board_init(MachineState *machin= e) qdev_get_gpio_in(DEVICE(s->plic), VIRTIO_IRQ + i)); } =20 + gpex_pcie_init(system_memory, 0, memmap[VIRT_PCIE].base, + memmap[VIRT_PCIE].size, 0x40000000, 0x20000000, + qdev_get_gpio_in(DEVICE(s->plic), PCIE_IRQ), tr= ue); + serial_mm_init(system_memory, memmap[VIRT_UART0].base, 0, qdev_get_gpio_in(DEVICE(s->plic), UART0_IRQ), 399193, serial_hd(0), DEVICE_LITTLE_ENDIAN); diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 7cb2742070..d0129c2ca5 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -38,13 +38,15 @@ enum { VIRT_PLIC, VIRT_UART0, VIRT_VIRTIO, - VIRT_DRAM + VIRT_DRAM, + VIRT_PCIE }; =20 enum { UART0_IRQ =3D 10, VIRTIO_IRQ =3D 1, /* 1 to 8 */ VIRTIO_COUNT =3D 8, + PCIE_IRQ =3D 0x20, VIRTIO_NDEV =3D 0x35 }; =20 --=20 2.17.1