From nobody Wed Nov 5 12:19:24 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; dmarc=fail(p=none dis=none) header.from=wdc.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 153443909989014.086190123826668; Thu, 16 Aug 2018 10:04:59 -0700 (PDT) Received: from localhost ([::1]:57161 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqLhi-0004kV-Mn for importer@patchew.org; Thu, 16 Aug 2018 13:04:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51761) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqKsq-0000Zb-Ht for qemu-devel@nongnu.org; Thu, 16 Aug 2018 12:12:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fqKsn-0000jH-D4 for qemu-devel@nongnu.org; Thu, 16 Aug 2018 12:12:24 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:29421) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fqKsm-0000in-VY for qemu-devel@nongnu.org; Thu, 16 Aug 2018 12:12:21 -0400 Received: from mail-sn1nam04lp0088.outbound.protection.outlook.com (HELO NAM04-SN1-obe.outbound.protection.outlook.com) ([216.32.180.88]) by ob1.hgst.iphmx.com with ESMTP; 17 Aug 2018 00:12:15 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by BN6PR04MB0389.namprd04.prod.outlook.com (2603:10b6:404:91::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1038.23; Thu, 16 Aug 2018 16:12:13 +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=1534435941; x=1565971941; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=qLBdGQ8gqHhV12nJ85RgDrE61SLwWmYdjk+4+36M1IY=; b=JPWSj2/OCT6YOvvIY9fusQcUQstjiyoFBjsHVJCx5hPq8vyu/FbLfHTX D/8zKASQ7UVyyb59EsTLhyC9glCv+LNGv18+fJH9FcLQ7JZ+9JN87Vxxu if7/r1q/AkUSe3dVGktV7QJdVjq315f/y+W50+raOM8U+jwUggnfsf2Ui 8QUECja8bjPy9kvIIAIizCRwHzbeIKt3zCWSlRlbjnIbAhF2P/we54g51 oHkeAw2zo34wJ55P4mb3mm8U8tJNKWGkpZm4N7zCIiqDe2CMsInkzU1Dv ykHu58I1LO6fKlHLmdPE4s93bmHHZvcAE7aGOpmN0OsunYlQiiPrRK3Im A==; X-IronPort-AV: E=Sophos;i="5.53,247,1531756800"; d="scan'208";a="91551316" 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=1KCpFDPPs+E3Q+3UnqnGkznHHrv4GxMb+3j+b5XQYsM=; b=KsPeLUpLddLp2NQMobQ9rgCuvrofCVN1jYaN8MEqRRGBP1Ib4ogLtmtdx7uIerUHZLSafi170zR27IyghuSiEdMcZmsu+OPkFrMzlO7QO8wWcMgqlhIJl/0yCGCuFpspvu4Dg6M6MbPTnxn5Gl2vAUqpygsQpsDC/OwvU8I19FM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; From: Alistair Francis To: qemu-devel@nongnu.org, mjc@sifive.com Date: Thu, 16 Aug 2018 09:11:59 -0700 Message-Id: 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: CO1PR15CA0103.namprd15.prod.outlook.com (2603:10b6:101:21::23) To BN6PR04MB0389.namprd04.prod.outlook.com (2603:10b6:404:91::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 633b5c06-31b8-48cf-5ca2-08d603930746 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:BN6PR04MB0389; X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0389; 3:wWHXoXWdzvPYxfP0wmo4CNepbYH/8Xi7Frd0NmxHLlhdbxAJttufz7rYNkZSZFXGUgDVzudELzwdWsMd5evEL0lQ+wJM9hPRn/UFw9wFfc9kCB2TmGkx8WPn0mypV3tr1s1bvN3jiP8DOxP0Jc1ml+tbXMTERj9bdPm0Gl/2g6QCiwbbntZ5LuxwFQoAiBqOkeATy3/k4f+nYkmV70yxVWfxy3w4GWAAswiZJ1NzIjUn2LGl1Q0keL2RBxrhb1Ej; 25:abyWOnAUPMJU0YmdesW6ipVihz0TOtit89b4CE7rctssAlnZVFwLdDOSSkrS9RA11IIQJJHDOWiGOUraY0om9v7lqNZ9H2Xlb4y2e1CfbXOYp5H70EvDhHGgXxYQrtvwGtALJJu/SNUBifalhiZK3N62cprgw1rmwqwuS5RK0omH+NPBHwR/jYrTUpP1jMtzrfIHav/ly38G+FQZPUThPu7hCc0FiBjU2dvbs/S/g3gFAG3DWheguBKpvtbuwB5zjD9rRoedI3AxnSS6tfq5ABSzULwVZUe4rSitwyrUdhRPD6eNGNG5u32xS/bOKxeMRhoWJdlFk2quNXpTzZmNtg==; 31:ID/jG/z0j9KW/knD5varPzZax8eaV4yRbRB7nfLbE/0rCXNZZEgo9P4ZkyhGkpxtbZVpg9O6o/ciTNX4XPpYJTxYVClI6trbZFaXeHoZZy8OqzZBYk3jgSHQv/INiD0H7m5BOPlxiDmUXA8pstciH8l5OcpuOSZBfYH+rjY/syVakpEXfwW9tQSZY8CExJffHOHyA4sZegNeDzCyHzlkJHXkRxBHjR7ITtCpGftCq+0= X-MS-TrafficTypeDiagnostic: BN6PR04MB0389: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0389; 20:91YK5x9eFe0K+k9OEg/H7nXdPUglxht2eIRCjT2ynpiNFaPVS3x7GAr63+6i46DjebOAZMIS+WqcA3AJspL40GRLNM4owmjuvrpgnEQfunqLqv81hXroIGPTR4EOkzQmdR999YzELTjtfBeCcVEma3gy1L8LJ+d/wP7wkVZW85nm+Z5kR/R2cQnc3a/DBE8E3kdjW7nn4afcqZ2nIGRFS8iwq0ihduc5MTRGPBv+zJfYkjrHdPKJBazs4DOKVA/xKgFfP3XYsYDrhr3V5DDhxAR20keqNIwgRNGrDUwra7BJAv0q7V0roIsKeBE0YXQeXyoWF6QDbreIXS7zU38/Uu1PqY+ZQdcO6xKuhSSBrpkfYlwupmMTuFrl9FxWmtBKEHvusczWbK5HiMk1PyKMPK6wFUiiX247/hhqXZ42SWg5wI2pw/r/k/kNh2brTFNTp5i2UtKw1x8FNJBTRqqExB9fMXkaWrpSbmFhrj/pCZvbEk3XB6oHabdKD9ETfp6L; 4:Ni7zrNU9Vx1HoUNvO8Bym6cnLnFMOth4T7n32nWqABp83Gm6qoLYcpeFbfi/00VnS0GH8l7OyVr5dK0VJKH/3Dr2G9AfC10wecISLfNljsx1LpPtJcvbfhU5wLOWCSL3ribcBz8C/YLD0xI/pX3mkGtUPosYrsA+jJr6019spDgxYT5BN5kfS16pdtSr0QSYwKkhrgxHfagtUqMpgX6h/2VD3Oim1eqOH3y5QALRow1m1B0H6fS3PGG8H77EUwgkH/fWqiEZwTB1qm+xaRjALPPjHnXr/0edUpMvmmzmEUURWuaQx871DE54aikhGMJp 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:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(3231311)(944501410)(52105095)(10201501046)(93006095)(93001095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(201708071742011)(7699016); SRVR:BN6PR04MB0389; BCL:0; PCL:0; RULEID:; SRVR:BN6PR04MB0389; X-Forefront-PRVS: 07665BE9D1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(136003)(39860400002)(366004)(396003)(346002)(376002)(189003)(199004)(44832011)(51416003)(14444005)(52116002)(86362001)(6486002)(316002)(118296001)(6512007)(50226002)(97736004)(2616005)(36756003)(486006)(446003)(39060400002)(11346002)(476003)(956004)(76176011)(4326008)(68736007)(72206003)(5660300001)(25786009)(66066001)(186003)(16526019)(26005)(6506007)(386003)(6666003)(2906002)(106356001)(478600001)(16586007)(47776003)(50466002)(48376002)(8676002)(81156014)(81166006)(305945005)(105586002)(8936002)(53936002)(7736002)(3846002)(6116002); DIR:OUT; SFP:1102; SCL:1; SRVR:BN6PR04MB0389; 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; BN6PR04MB0389; 23:dL1Ahuv5e9APruIB7H6UG9WG68/CKD9ntMqaZTvjE?= =?us-ascii?Q?03AHKRaCHHPJ4hv/88On2jUVvNF64agrcde9yssRn1q6I6LUXXJ9yOwR79ye?= =?us-ascii?Q?KYsdH+brembrbFoHNiUkxCAg+uBUJXywnZ0xm+uHUuQIWeftB8DkbvjajQxp?= =?us-ascii?Q?n/tK9TNY/fCYWu8vLQ306QdekjgsoGlW7xjwOKn3YbO3dLjs2II4wGEpjm4N?= =?us-ascii?Q?tLrv5t/G68hxbFDKhZJyUeD4YLiay4XTk5r0Ed73+Hb392dv2YcF01EHG4Gx?= =?us-ascii?Q?cwtdDcDQtFSFROZWxyXx6CEkqH5rctMG1v0a7hfaOij5Zyh91kknwF5n5Rnh?= =?us-ascii?Q?YTW8queCJ4HlTn/MY4zEj7OcZdT4qNjc2PtHp7D9h7iR/KXSnlWZtiVhrknp?= =?us-ascii?Q?NPUslEmjQ1Zpy3oWOoLwm01kZKsbv0dVWs3L5ucQpZTD84As/EF0MX7BDOsx?= =?us-ascii?Q?UdgmshoaBVkVXQb2+fr0VdoFkAFznT7qTRFEzfC73yX3eiE4jk2LhWqw4ra3?= =?us-ascii?Q?/keS+iP1pUa24p8B2kcrMYE5c5s9bLoQ34MPtIYYuY23IMRLCAqqQU3yGw80?= =?us-ascii?Q?rM4FOT/UJyngYFJ2mUUK0yyKOhGchhFAlJvCalqfx1vbA1IvLHD7IaJbkxaq?= =?us-ascii?Q?GFIYJezLMDrvvzX727LbS/eKW+pjl9MY3yjIfgGSq40T5Pvr3BHuY5z1ZnNO?= =?us-ascii?Q?dGXV+Oqk9YKc5XSOKkxjuLwMcbsaAEY8+RH58Ef0IgRB9f8NWrZZKjZ4Meg+?= =?us-ascii?Q?kWr2O+GyFQO8JruKaATYNBjMY4speO1lDZbGumAKvfIaZN++jb0YORytTZlJ?= =?us-ascii?Q?ybnIxnOZ0GnGKQgQrpVhfyTGaDzU+qBOOQh3aCrfhPO89NLoI+kG8G98TVQo?= =?us-ascii?Q?Oo3jf0GpRR3xDCsd8pKmNsxG0ZJX4SVeK4ZehciW4CFdvZ9IJr0SnjxyJ4e5?= =?us-ascii?Q?UEXRIhmKbBKJ/2Emt/+eDjiPDjWuVoo/YTrk2oFD36zjjdnhsmMkTmdNopmc?= =?us-ascii?Q?fmXW9E2ZsOmYPjUpwkEgaexkZKlyni3NiWCkJf5suxbB90fnIRE8XQoq4YWc?= =?us-ascii?Q?xCcFchxrcLPsA8V1yaJf8AnzlLjGgcwH7sc493jXWzzFXUPo0vltN9dtR1av?= =?us-ascii?Q?dcjAYzqWbcGFE/c6vv4tWLoOY1qcERiLCAo7Zxsov8T2IIisD1G9ttcgXawx?= =?us-ascii?Q?TxqQ/wuds/Voteh0PrJFIeqD8h1pP83SJsz2sK0u6032GnhCOSkxkvXHcsdo?= =?us-ascii?Q?HS14lVoXUy/S1NnVF0=3D?= X-Microsoft-Antispam-Message-Info: exYRWoEtBy1dQ+fN8GDG8728R6OUtElvdVZiq5rg1zM4Bti31QGU4jvqZ3Voc6qw+S+Cv90cPr0nH2cXcJjbwBQmzeMeAL4yAzad0i7as69nMYXwxGgNsY0Fq2lTGucVaaVl3krd5dpR+tnkObAIY5ovEyjDN8TWwO2VsC5dUdELHuvEpzZq2Fb7qFDF1/voj/4phQ+SUVX4N4TmKpCPQaJa0vA4EWNj1ocU0fv0KrCzA+9WLco1rfNQLfhsrEcd42WHCK3X3+khYxOgUvEBdDafBBZE6SiYVI8nSgWHWE7T0btDXAowrcr7q5eBY0+xpoK/BtOzWvHFXke+hwPmFn2MdUnssXnXlnDLKp2Jx5U= X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0389; 6:X6YiJv7OFHBOvz0yvt8iyFbCKO4wnB30jYW9UKAOKyOyf/VOLTELa/AOpx4gCGK8SF4Jv6H/2x1ByUjgH0goCgda4uYSv2Sn4AYYRythnZyIS/OZoWESFWcW1C6dm6JG7RydYVvjsuKP4oPrSb8Y9jClp296E9vQFAX6V1B95rv/eB9Rf5YPTHZCQekpwgiBkF7du6T861kifxNs8D5+CgNgpGZ9KaJs5gB1+H+J70fM7v9v2dFSEx2UWNESpimCdbbw8S6nThy3RxksIr+ZvMSLMOdnplQ0WVwMJ57JwA/8+q5i5Ml2vehP95XUq/nwY7jWY9jrpgZY8ezlPkm5/T9xr5IoepdvK7kk064U8MwGEBiSaQ/rBTFQNgwrD0yPOgcp75RlwxFLIiLOyHnIh8PNOWyieih0E3tewfrGoqAD0TgPBlk0ff+dgSTNg74EJ/MaoT3Mdg+erq7GnmfAXw==; 5:fn8DKzZyOOD+1avKTspH8umjlB60835DbAGzUd+D3zYO284NAr0u0Spp+1VS6x030EL++TV2xvG7glj4Im2P6Z7kbfAQY4zXv/Cb8h8bxP670z+bxtL1jKvXW9fmCsyaujnwT4IOrlE8Jkc6bBXvbAV4u4Prqwiy/z82m68505I=; 7:vvUW1igSSmmGCjlArG9eYi93KNLJbyS0p/qr28F+BDWmZ8vhFjMpWUXSWStEo44UOOsEdbjWJAfUuZdfzQoCGytr7pbGk6bR6U5qhvPavtEDBSrPO+fGTgTlRja8A70qTu/Uf0cP8V/e0O0Oz7ub9TDgQhLBG01vMBbApRu6xnPF8UStF7uxl25LJYX6o1w3dUCEw674K90UZKo0dAOdqpus0anOa4s87AaWEU74FqjltwRF5Ju9g/hTFJJ701dl SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2018 16:12:13.0796 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 633b5c06-31b8-48cf-5ca2-08d603930746 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR04MB0389 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.153.141 Subject: [Qemu-devel] [PATCH v3 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, 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: RDMRC_1 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 e8ba4d192d..9bdeea38f2 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; @@ -382,6 +436,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