From nobody Wed Nov 5 16:40:50 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 1535565847841616.3423134420432; Wed, 29 Aug 2018 11:04:07 -0700 (PDT) Received: from localhost ([::1]:44364 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fv4oz-0001OU-R9 for importer@patchew.org; Wed, 29 Aug 2018 14:04:01 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40921) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fv4iK-0001w0-9w for qemu-devel@nongnu.org; Wed, 29 Aug 2018 13:57:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fv4iE-0004PX-LE for qemu-devel@nongnu.org; Wed, 29 Aug 2018 13:57:07 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:16046) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fv4iE-0004Ok-6b for qemu-devel@nongnu.org; Wed, 29 Aug 2018 13:57:02 -0400 Received: from mail-co1nam05lp0084.outbound.protection.outlook.com (HELO NAM05-CO1-obe.outbound.protection.outlook.com) ([216.32.181.84]) by ob1.hgst.iphmx.com with ESMTP; 30 Aug 2018 01:57:01 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.250) by CY4PR04MB0392.namprd04.prod.outlook.com (2603:10b6:903:b1::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1101.14; Wed, 29 Aug 2018 17:56:59 +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=1535565423; x=1567101423; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=qLBdGQ8gqHhV12nJ85RgDrE61SLwWmYdjk+4+36M1IY=; b=MXjTQOA3Wv4ptGQkQsT9scOAYjmSCv8CDVn9yHfP807DkyodGoMfGgHE 14Mae3R2N48INS4zUs+1qCAdFW9sFYWEJvk7fhN6SDPfW4cvApCDmjyo4 7xus1VuhwoQTrzvWuyVjh5HCzzntGObuHVdLaK7mu+mvJwgIi61m2vjF6 7uKk8YO12NlRmnmdda+J/P6fYeKf9vvfuLalEf5fjE64bmpUR144stn4K eoinZNxBPdTreKBLLc/7UuXpBndh/R1YiRqTrMQrPe5jV0Jiz4RYyXg0H ybpyNAAFxfwVYzztJc1442sdRWnR1LY+VjQP0KRLJplEYXvh/hb6gzdOF A==; X-IronPort-AV: E=Sophos;i="5.53,304,1531756800"; d="scan'208";a="92677808" 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=ZqVbqrr7S1OfvMuB6vHATnyLIwgGaf9CXuclthx1K9kQpuz4J3904u4c1hCjSuOWGs/N+VyQA5YGha05mAJrqIhrlw4n//xcY70corr0ROJ5srEx9oLEcQCsAEnBz8TuB2glh8f6IeXh98lCxvoiRunl/cANuMo9hzNgVDMBYN8= 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: Wed, 29 Aug 2018 10:56:50 -0700 Message-Id: <70f14a14554067f6caf1abdb27e9aa50f0165ce8.1535565338.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.250] X-ClientProxiedBy: BYAPR04CA0025.namprd04.prod.outlook.com (2603:10b6:a03:40::38) To CY4PR04MB0392.namprd04.prod.outlook.com (2603:10b6:903:b1::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b5b47ba3-29ba-4623-f034-08d60dd8d13c 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:CY4PR04MB0392; X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0392; 3:c8uWbegVXcSY5JdZ9ORfDVict0PKPB5ATV9OA5NPg5givqTeYoKi+1Fy0Cy7mN/4pQof9mLQop5sNSSgOpiz8WHcJKZBNRIOsXc6u/D1+SznlVTpHRV4+TXW8vx2TKiCVq3gUJkDwUwZB8yHjR5kJLhyxPtZUWBWenr6eIAw/6KI5XrBzoCBdfk3asDzxE5lGTB+WcfOwCOZ+E5a29wYPNMAlQRSvOwO6lpJJ2b7nFfdzOvhUXMq72F7EA2yfYD2; 25:aszWpR23hJyLPd34Dop2l8gXDjyCjuMgdKAcwgThehOhxjXrvKjzRXgGIrpyVZMO9Bpo+Qw84qLwDPiQBPxKzwoxksq9lX0yAJ9tRSMynGbmQNVgK5rHqByswZQW9bnIGeTPyguT8rU9BfGGVqye8Uv05qiETYfmfy2mAulM7N9ERKT8hTcAKfDe8aUIAqkUtjm4UU9GBLuksvvV1asYDPgjNkXdRnix4K9cQSTOnsRmEZxpYn3CwVKCiIVSAmV1RxP2xKu5wvNwZxGm3wGgYSCv9EaLt//cQOhYHIqwgpcDUEyzoNvzglwlvFtS9Ef5VDaHq4gVXfy3RqQMVURg4Q==; 31:Go1H3nWnhGY382TjcpbCdNqb3TyJ1UIWjhIvVN8/2/ShiLKiyyVJLaSUdcprh1ReA6GZrJ/FZpnlZr7PIKlE/B/+HLRyNGJivAgQe2DhrTyodl3iFOIm0RDl+Xn1qqAVMmH60t1bbeGo7/Zr9oNnl00klXG4dvPm86znWEr3ZHzYYMu8oYJgToGTy8AU2Oq/n2zdiCy4OdTEiSpRTKzOLwfpe25fDX6lf5HVPQK052s= X-MS-TrafficTypeDiagnostic: CY4PR04MB0392: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0392; 20:e0AW849pJDaQkGcBtfFYMuRzYZWp7XnE2xqtEIBnE7fVOVlhJWC1Aw6vyM0YC2ltBV6aA6mwtdKdJlepUmcTKrZqYxMk9Ak9ypTK0ikAfhri98XBS862G4Z/Mie+j7lFIUZjDuFn/t/WZibtjL4T1bqU8RkgJwVOeJoCiar8hVpeqJetlyKGLcjhurspj2SvJQewYhiObgwlVLyQAAX++SlRrbuWEqoXYGhb2f1XbMF9ODIs0LEo4c8gMMby9IMK7gwp7aFrMRUPr6F+KkSHY0FZwnoMLmU77hvFtTcP19zUntomzfba6bPvx0h3sRhPjlOghe4VodCOqpA8jdjf9VSSeBWmehVrchz2YuKXaJDZFiIqdMOO5wUqwo6MkW7suQkVUtVglqB+BeBYfO7LyZxS9hg5O4NFwvUBuluDnRsETbuoFScLYUMnNTOzeKQpkI1b9VSbOvU4vdnIPU0ICBM7fva788sFQTd2pzn7jmz3PNsf9Kd/Lq9aHQlVpLxP; 4:Lr2LrV52wRP5AeQyCfzyBlSuoesu720ltsARZo+b8il7FB57XPv1JgOSAQD3UmrmHFxHnLhspasPFOZTQcnozVlQtozQB3uu2jGLvkyHpyj1u+H/9M2At76xbfGdafF8VDrs7w2STC25lmHNVUDrfvF3gFB/nCAhcsJD72NGBIRoKKBluo/nWX+NYjHiPyFxhfSqXPTX14LSFjsTowF4nYX7D7wl6u5rK4w7pyppnvPuOaU03sBNF01O4BNcjKpmSnRKAfdDoKVA8sAfHyyFoxNPNDC5vK1NNNrprNHUEL/C+HxnEYytoxK7lsPjwmhO 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)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231311)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201708071742011)(7699016); SRVR:CY4PR04MB0392; BCL:0; PCL:0; RULEID:; SRVR:CY4PR04MB0392; X-Forefront-PRVS: 077929D941 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(376002)(136003)(39860400002)(366004)(396003)(346002)(199004)(189003)(81166006)(76176011)(66066001)(72206003)(316002)(16586007)(50226002)(86362001)(2906002)(51416003)(6486002)(5660300001)(52116002)(68736007)(478600001)(47776003)(97736004)(36756003)(25786009)(8676002)(6116002)(50466002)(105586002)(305945005)(4326008)(118296001)(3846002)(7736002)(186003)(39060400002)(48376002)(11346002)(486006)(6666003)(6512007)(6506007)(106356001)(446003)(81156014)(16526019)(53936002)(476003)(956004)(386003)(2616005)(26005)(14444005)(44832011)(8936002); DIR:OUT; SFP:1102; SCL:1; SRVR:CY4PR04MB0392; 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; CY4PR04MB0392; 23:EWXqSFWAtsYoi5OiWv4k9TvmzQTivaa/tGz97INuY?= =?us-ascii?Q?1sEp5eUFyQpVPVE4zfHQOD5/kbbeD4ocYyewvQZjuLKI8xXVG378RDdBLthP?= =?us-ascii?Q?EfkBTZ1nLs98WDISM+eSTjy0rZi+3Ue/hEku+6FE6nOck2G3/6bNRFkGzW6G?= =?us-ascii?Q?Vc/9peStV4RU4klDGDOeNbgug4trWLvcabL7W1S46Y4rQM1pzFaAzKAFZb8V?= =?us-ascii?Q?bdH6dFwJeKKVQ2FNOLWecZ5tvFZWLSCzYh3YU5L66qh5Kb9PXZBzbelLTgLZ?= =?us-ascii?Q?y3XKVHPBKNbdKdqAlFkgkQnurc1w/zGkRStJYmx4X2hWd6LYSRPtRnfpMJae?= =?us-ascii?Q?LgG8RqInupZWkpkxZ+Skcb19+vUU/2nS70/AMxp9mPjQ/um1OYvffUqzODsn?= =?us-ascii?Q?VBxtpw79D5amTGHKDPZiiYwRihC8Etjzl0XemyN97npGI8i4fgaKzriCkhcH?= =?us-ascii?Q?Fwcjr88i8s76a9uN+QMj0XOpkP0Qgwe560KbYQXnDpzN8Yiq8dOoqXGs2GZE?= =?us-ascii?Q?x2t9ainUp1AdZ9yQ3sIeS2upZSiEfp9oASySgcylxO0OueObDGh6oJaUSiPE?= =?us-ascii?Q?YAlnSW5whYoopGlaGakF17jwmtuOA7hPgRMxwkakX0QoG/8wTVADDPVlUgLq?= =?us-ascii?Q?p5y4/OybtGrcM3ASHUy/GP4N7q9zM88NZPPj49QDNlqJIUyLsxuic03UsW+n?= =?us-ascii?Q?p21MOhPFBxvreyhdJyAbKZh0FAEotm8ktm4aRW2DAVZTWF8/RwanYLZ/MPl0?= =?us-ascii?Q?BzsxQ9f/OK3DhVRkaMT889PDzmsvxcjJHaYM9o2zLanxGu9I0BhWpXSNr7Xy?= =?us-ascii?Q?syVopopMeMGYKxUOijq7RMp9Q+wLQkEowF9Kck5/nHBEU4cO6tCuQhk4GAuy?= =?us-ascii?Q?z+3HXFXj18emCo52RS7XyzZ7Ei/6m7gi+7sGN4KJYY3i/p1LqpU2WWKUlqpg?= =?us-ascii?Q?FpnJeqwOvKlyenOR68MyeVJITr0hXQvqJbsNnObo4V9LqK1AfQPMvO9NWrHj?= =?us-ascii?Q?VQSN8YqgJLMvs5RnFK1gwWIx2wY6bGzqCIJ0hJKVN20xApAQ+mj9aX0dmPxd?= =?us-ascii?Q?x605Ru3x6sgbezg9sS+G4ymqALlIFkGjTG9UMCJzmKmNp8QeMGNfjyrkVVrT?= =?us-ascii?Q?r80IJko8ZJIsBp41i+aJFG1J2RYinncL68dQi3JrGAFVuUeoz1FicAqvh1KU?= =?us-ascii?Q?MjrLdu4lUiUlro5SrnMKG8ikPVR0yqHcYDs5ytZ+D+ugn18puFJQzwoREXzq?= =?us-ascii?Q?dN+MjOs3T3K+imsLgo=3D?= X-Microsoft-Antispam-Message-Info: Hm8AtEKxNHkiM0iDEnAyrOgMoFUY2ETTqkY2MBt7vRrkhXz5xs6pJdIjxGmI06BkLZKkXZYZZX31nZSbXfqZhxtE5yO7RELrb3Bt+vV8F/qY9ugQUOymumJltRzb72yjsJQGlMAoQxsfUoTBxoLR1+7rqjJ7/ftvwG6xp49/c/fs7gp2F89k769Se/fB2e1lXTtWtGGGjbQ8Q7Mz1ALgu+IcQcyDyzdGZG90QdqyBGxWdKzIhrKiYn4Z6IGWyLvSI3xkWFvHTyuZ7jQantiDFLgEd39nLaSjkyyTzDSSSX4mOCrUo0Rj5jeDLaFki4RD/WVY/7XEaOOKo4bf9JltI9lHbi5oKJOUIRwm5fR2WZU= X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0392; 6:fXOFRJNZIvduz3oCOo4QwqGIcwxddhEg0gQ+TQQLpD5rtivkVvymAurl1iYjp617FO1KaKcprE1t2hHWs/PUo5OLFlKlbf9zN62kSKBEDnUXte04wyPIpNRIIZHiftE/lhUDi44aGXuNkpYJeIXMT4N/9xHp/MSEhldPn66wRHrejDPZarSb9yYFnsOIkXdQNv1M5kzUo/bUO2KBq51+MAVllnoc/mqbsYr8Y0Uep5vH1EPpQ5ChnZm4e8es3yx/kb4kjCycoalbdhblJVAipNp03bJcByTqlAo1nqw8LckLkmuib+aCpAu90TkYgNnPAA9Vf8fNEQQWz7RQXqArOVv7fzCNEXJubdxtIAT11Y2A+rXWit0fPRvVODyFDFNd0wTbiYRJ1fp82G+Z0DveFD+RvK5c4K95M3cdscl85ldYg5X0G5JiKSFOXrenA3wGWroazZvhwk/MiHNFcaLDqg==; 5:WzSDfqvNgTqA9F39ZTwTDLolcFnRQPGSfZq8rBD1fuGNmPT2XDryRItxf8Fm3qCg6xj+th5THsafrAttTaCpTl8xBkl/AqYpIxcXMUW3l2dGUue93cbx9aP+b1RDr8CGUuD2tPOyvuulqP/TULzmIip7qU3V0lP602rOIxJHL5A=; 7:w7uaQS8NcpUUhVEcBP6FI/n1EYndXh5CNWjGL5wywZcHEgdx0bM/5PzkkN/GPJ+Ad0ghnaBHd6jZYxLYuhHhc6ZK5Qb0e8+FzblO9CQ7wiMKcwtLg+b3ldRMxfAGkXPEgE3/eb0x+tiOB9mrWqt9oS3mBmoPThCqseY7A2++K33vSSwnsfESB8S/Exsfvamwie2YVa4Zn+JZtoeDEaZMBMz3y8/7Sua+II3WVtoBo0o0wcZ0mPYGmYuV8K+eH3zR SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Aug 2018 17:56:59.2001 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b5b47ba3-29ba-4623-f034-08d60dd8d13c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR04MB0392 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 v4 4/7] 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