From patchwork Thu Aug 16 16:11:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 958501 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=fail (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="JPWSj2/O"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="KsPeLUpL"; 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 41rt2k2w3xz9s4V for ; Fri, 17 Aug 2018 03:03:40 +1000 (AEST) Received: from localhost ([::1]:57154 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqLgP-0003tP-Og for incoming@patchwork.ozlabs.org; Thu, 16 Aug 2018 13:03:37 -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 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" 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 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; 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 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?= 03AHKRaCHHPJ4hv/88On2jUVvNF64agrcde9yssRn1q6I6LUXXJ9yOwR79yeKYsdH+brembrbFoHNiUkxCAg+uBUJXywnZ0xm+uHUuQIWeftB8DkbvjajQxpn/tK9TNY/fCYWu8vLQ306QdekjgsoGlW7xjwOKn3YbO3dLjs2II4wGEpjm4NtLrv5t/G68hxbFDKhZJyUeD4YLiay4XTk5r0Ed73+Hb392dv2YcF01EHG4GxcwtdDcDQtFSFROZWxyXx6CEkqH5rctMG1v0a7hfaOij5Zyh91kknwF5n5RnhYTW8queCJ4HlTn/MY4zEj7OcZdT4qNjc2PtHp7D9h7iR/KXSnlWZtiVhrknpNPUslEmjQ1Zpy3oWOoLwm01kZKsbv0dVWs3L5ucQpZTD84As/EF0MX7BDOsxUdgmshoaBVkVXQb2+fr0VdoFkAFznT7qTRFEzfC73yX3eiE4jk2LhWqw4ra3/keS+iP1pUa24p8B2kcrMYE5c5s9bLoQ34MPtIYYuY23IMRLCAqqQU3yGw80rM4FOT/UJyngYFJ2mUUK0yyKOhGchhFAlJvCalqfx1vbA1IvLHD7IaJbkxaqGFIYJezLMDrvvzX727LbS/eKW+pjl9MY3yjIfgGSq40T5Pvr3BHuY5z1ZnNOdGXV+Oqk9YKc5XSOKkxjuLwMcbsaAEY8+RH58Ef0IgRB9f8NWrZZKjZ4Meg+kWr2O+GyFQO8JruKaATYNBjMY4speO1lDZbGumAKvfIaZN++jb0YORytTZlJybnIxnOZ0GnGKQgQrpVhfyTGaDzU+qBOOQh3aCrfhPO89NLoI+kG8G98TVQoOo3jf0GpRR3xDCsd8pKmNsxG0ZJX4SVeK4ZehciW4CFdvZ9IJr0SnjxyJ4e5UEXRIhmKbBKJ/2Emt/+eDjiPDjWuVoo/YTrk2oFD36zjjdnhsmMkTmdNopmcfmXW9E2ZsOmYPjUpwkEgaexkZKlyni3NiWCkJf5suxbB90fnIRE8XQoq4YWcxCcFchxrcLPsA8V1yaJf8AnzlLjGgcwH7sc493jXWzzFXUPo0vltN9dtR1avdcjAYzqWbcGFE/c6vv4tWLoOY1qcERiLCAo7Zxsov8T2IIisD1G9ttcgXawxTxqQ/wuds/Voteh0PrJFIeqD8h1pP83SJsz2sK0u6032GnhCOSkxkvXHcsdoHS14lVoXUy/S1NnVF0= 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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=y include virtio.mak CONFIG_CADENCE=y + +CONFIG_PCI=y +CONFIG_PCI_GENERIC=y 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=y include virtio.mak CONFIG_CADENCE=y + +CONFIG_PCI=y +CONFIG_PCI_GENERIC=y 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" #include @@ -55,6 +57,7 @@ static const struct MemmapEntry { [VIRT_UART0] = { 0x10000000, 0x100 }, [VIRT_VIRTIO] = { 0x10001000, 0x1000 }, [VIRT_DRAM] = { 0x80000000, 0x0 }, + [VIRT_PCIE] = { 0x2000000000, 0x4000000 }, }; static uint64_t load_kernel(const char *kernel_filename) @@ -233,6 +236,32 @@ static void *create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap, g_free(nodename); } + nodename = 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 = 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 = 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 struct MemmapEntry *memmap, return fdt; } + +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 = qdev_create(NULL, TYPE_GPEX_HOST); + + qdev_init_nofail(dev); + + cfg = sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0); + memory_region_add_subregion_overlap(sys_mem, cfg_base, cfg, 0); + + mmio = 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 = virt_memmap; @@ -382,6 +436,10 @@ static void riscv_virt_board_init(MachineState *machine) qdev_get_gpio_in(DEVICE(s->plic), VIRTIO_IRQ + i)); } + 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), true); + 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 }; enum { UART0_IRQ = 10, VIRTIO_IRQ = 1, /* 1 to 8 */ VIRTIO_COUNT = 8, + PCIE_IRQ = 0x20, VIRTIO_NDEV = 0x35 };