From patchwork Fri Jun 22 19:30:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 933572 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="Zaxs5Byx"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="hV6eG4/e"; 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 41C7z01BzRz9s1B for ; Sat, 23 Jun 2018 05:33:32 +1000 (AEST) Received: from localhost ([::1]:35811 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fWRoH-0002YO-O0 for incoming@patchwork.ozlabs.org; Fri, 22 Jun 2018 15:33:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fWRlF-0000tm-6F for qemu-devel@nongnu.org; Fri, 22 Jun 2018 15:30:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fWRlB-0004sr-VJ for qemu-devel@nongnu.org; Fri, 22 Jun 2018 15:30:21 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:52658) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fWRlB-0004rN-HX for qemu-devel@nongnu.org; Fri, 22 Jun 2018 15:30:17 -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=1529695817; x=1561231817; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=+Nu1uLfc+5DISCrbrvH63KC7mhqLcJ5B4rusXsXBAxM=; b=Zaxs5Byxi1BTKt8aNTjfywFeAa/jtwlVuyeobY3HO4i8S00o42pq9iqD vMBgSXmTE0gaL55TIhdpuijvMGI9exgBl5QVML/nLOM1Kjdmgt9DAda5s r28km+5wNpgeNDPNeUuadzKGEPOpP+jA1202pXiAUfrIEGdyNrtlOE2VP DTFPAkTVGiSmpC5BL6F6ldB0KIOKUuZzSBLbri4kIwbgY3zwerA6PzFm3 RK1k7BkuXEH1Tel3ZtfPhosftjDw7oae63o9tOaoAHe8rzioU1jPsnCNI 3mm8PseMZD44ZGwbOBLxKVujgxvcLENaZTS9qHwwEYw/Vgvn0BHrsvI0l A==; X-IronPort-AV: E=Sophos;i="5.51,258,1526313600"; d="scan'208";a="81339041" Received: from mail-co1nam05lp0079.outbound.protection.outlook.com (HELO NAM05-CO1-obe.outbound.protection.outlook.com) ([216.32.181.79]) by ob1.hgst.iphmx.com with ESMTP; 23 Jun 2018 03:30:16 +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=bQI++/P1rXu4g1qkiI9XaAsgHUo5LVd2fTMMuNgGWKY=; b=hV6eG4/eooAPIzxs+pWcu7Jfe8fvxmguxNnVltsJfp/WCezX6SaTjpr5A2h2h8cxoWI1FQSjfEHjhBsqu+Yn/GjGaFChuWrT9wyiCNAXBBStUSjvSRsvFI316bbbH/5erZ6Uvw5U6eHIGMxU5Rja3gvvIzYetH94B731/awfqvg= 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 CY4PR04MB0391.namprd04.prod.outlook.com (2603:10b6:903:b1::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.884.19; Fri, 22 Jun 2018 19:30:14 +0000 From: Alistair Francis To: qemu-devel@nongnu.org Date: Fri, 22 Jun 2018 12:30:06 -0700 Message-Id: <8eaf7bd5e178b897765f99abac553a664663193c.1529695276.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: CO1PR15CA0113.namprd15.prod.outlook.com (2603:10b6:101:21::33) To CY4PR04MB0391.namprd04.prod.outlook.com (2603:10b6:903:b1::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5c578eeb-791e-4510-681a-08d5d8769444 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(8989117)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600026)(711020)(48565401081)(2017052603328)(7153060)(7193020); SRVR:CY4PR04MB0391; X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 3:B8j4l9AidNmdoHxRN3QUnzHP6mRpyBcIAvHRUDUvLYVaYchsEwi5dApd3HLOn4bnp6XLWmLaKUVhZBIWh8eedRR0aX5jYXhAtwIm+nLO3NmGGqMDpNTIRi5o0z1x3lz7prhJyiWbYnmcQAESGqKrDLVZaQawAH1go0jhHUJu7D/KkRyJNpjx9d60CfRldMb0PbAgANtPSSVAn7/4geu/X6zGOD9WmMEr7R8RrRDZKqPIY+fI32Od2DzrS16WVrhZ; 25:4vEcGgp7QEFbxqZyFUUEROKQkvM2p0bXwd4frA3xjNXThbZ3yaIllZzo0Aqs0TIBh3p/KdADy4msc7LMCnURRm8MVhroMPFy+uZYxurbr501Z8oFijSwwrRUIIid2C5dDjG7BKAMGDiz3MzjyXDuYz8/9N8igs5GmTgL0nd3jJBWxQNlL9KqChjd1f85DSp2HYnAM5tOO43/r4o2gfjBg9cRTyHAbrP5X2rhsU9ho+kUYt0+gTexs0VbHhcIM1uv6Zm2H2gIZaFOfrPTejfKlYgfghOLEUJi4TVeXcR0QGH5L12n1RuN1bw0WrJDQ/oWt0AZLXz1dKytHn/Y6jngvw==; 31:zIbv6uqikAEhy46L8EZ8LIG1IP2X6dMDeNH5Rlwc7P+66FErAqXvCk82UTF4rIX9Ab75bIUzCYHPy/hJezFS9BDZTdwqC6l1caZZOQ9d7ldMnR04FEh3e6/WKoMMGnwjQAt5mc06Qfjpll9JLsiX12A2OVGY1IjddPBsNs5UHn6G/mGiJvBoSJspmnagOKm+3hCV1TlGzr4LyWr9Z3G4yGdaQaey95ICIdT+9yGvu5k= X-MS-TrafficTypeDiagnostic: CY4PR04MB0391: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 20:CFXkT2ImZ1o53QYDZY8/vsy8Ooc69+1Jqn18nJkXj/3XY7wYd3d24dFc+etcY4foDCnTcxvGElFZgW1YKO77Ei7M4899BgdiSbpu4z0I+E9OOeFwHbOnaxCouhLQ9eFArs2YBQA1DQaG53rr3bFQ35BUSFmOemsh8xw4sIHvYuSr5eVWYg7jhkVZoC4LrzaMGIlmRPIeAQtAZ2mreuL2igt5V2PckGEnuw6MBp0EckAA/gLfiAWkG2aI676RhrSMpdGwmTE8zDbVfQTEZ/ltTnhKGt9nMuZzvp35c/MplSqYz+fPiAmPICk4QmANg377rjMiYu91xXBvMEaQ0rrN4YtJoU++CvfqGMXnTRlwUTUVp6ss5SXDIE0pJRugSMsV3hyIbj5m294YzbPG+CutoQXckVgHx7Bckk9iApOWmZx3ra0kKOmnBYrgmUsqUwjq3xFEIca04Hdp/swd2DWFnbtDcbyW5Mpy/7zwlHgpYpD+uy0d82xwb4GUpYodJ7nY; 4:AyN+FMtjGp4RLXyWkybGh/KQJqtjqIYC0SSafCaafm9VaMcKNn26IfQVLP2JGvN17R7O/tjmdbN3HVrcTAgoMEOTwz4T+sL3XYzqzr0s+f141qLj7/NErCtMz8z87lq8Wf98lLJTTqMXD3QQ4LSc5FKvZ/Tyr3M0WGGyT0XTVYW1TA0ECek4jAS3XkwRd6Nv3N9aEAnykyLoYLfB4tO9VWT50//XaWUp+4rKFZJoLbiiS8Chz4sBLcphHXF+vpKMeXufgLWO2+gbblCtn5nUtYPnyfU6hS2x2elhxaEnTCHo2IX0v51EzeI8+PQB0Xwe 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)(93006095)(93001095)(10201501046)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123562045)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:CY4PR04MB0391; BCL:0; PCL:0; RULEID:; SRVR:CY4PR04MB0391; X-Forefront-PRVS: 071156160B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(376002)(39380400002)(396003)(39860400002)(346002)(189003)(199004)(72206003)(446003)(6116002)(6666003)(48376002)(5660300001)(956004)(97736004)(118296001)(2616005)(476003)(50466002)(11346002)(2351001)(6506007)(51416003)(386003)(76176011)(105586002)(106356001)(3846002)(47776003)(186003)(86362001)(486006)(44832011)(26005)(6916009)(16526019)(59450400001)(52116002)(316002)(305945005)(2361001)(39060400002)(7736002)(16586007)(36756003)(4326008)(50226002)(478600001)(25786009)(68736007)(6512007)(6486002)(81166006)(8676002)(81156014)(66066001)(53936002)(8936002)(2906002); DIR:OUT; SFP:1102; SCL:1; SRVR:CY4PR04MB0391; 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; CY4PR04MB0391; 23:rIyxZymhrHdjVN1zlPsKmVFeY6NQkogjthcpkm+jU?= S1BrfMApYrcT7hcaAKeZHrcEbnowsQ2Z2n7yJp5wzP0aTklV1yH0JO53GRi3dNT+XgXvyCt6b58ft1RSRrVSPRaVshqBiHD41CCSPuCywZde8K2JfWZVIo+8QHIh1VL5CrtO7/2RMKxsDVncV0/KybQLgDr+4e7VRFyglIM0C8i0CHT2F7hhfiOpwIS8uuh6Z933G8TyBwdhSHxY1HeTF3DnchWVmyhTSk5cE99/yTITlE2AKMUxdbYm2XRmqOYkHAGZsSq+Sj6ktgnsZ4ibSciQ8p35zW1WZMdSeCOPCCj8RykdglkbTH4JBzo4MMTrlO50+pLhjF96ZF4zvblrGnXo6/THmglWHhv+xJzMMdX4jDFU2QnVuX0wugQMXC5+M7/wpjFZSd6Dpi5Mqx2W1/Kca7osXhOR4qa24P3QzD9oF/fGTyQrzitnp4e1Uw6HuTJ9Fj5c4DNI7T5Mk1lE1pugJMbS2DSmoyLb6qXxEOcWojXKzXNNMa4/zQuck8+btqCiktuDw8QM+SZo6p25NvCE0Be7N7n0xjrK56dGvHcDdlTYJUcTfZzn3PUwOJWUpeeDLABvVZVi8q18OH49IWlmDHMN0HyxzfuMYlJR4S/P0qukcOdkob27JyWFIYUTFUCSFwQG3KsOIWfuei7kDI2diQxGzBkKUtbLXzb3M/2i0xva+Z2a1q63DPACa3XKuuzJyBr7gNUvdvl9ayj6d5V6CPE348CPBo4UfDIOYLtRfqguj4aue608lCMYYxDIE5M1sipewQyiD2gdC+fxfiwb+AcOtmkPZE4E7rXLHdMZb9hxtpb7TQtF0ReVtOegTiIb6YyuPjhfM9DgXdBie6iC0z0FUxWmUCJuXLn25eeBu7VSFS/UMPgghDnFV9Mw0TEQAUjWkec+FfSd/vmQK3ZAlKN4oDgL9mbEu41n+eXpLKoWII3aKFhUuhqGyLwIrrdhS5ndVUOvipF/CNkVbVIS5qLRGxmAy2ymxa/K1OPwq/EJ+Uki5UI1V5ANXDC+0MW1TwqWO0BGodosJv+aQFx2Ji9sZK1kQyrt1HL9HIzKbjgpqI3DJBKC9nPKUuC7if/oVarNw/qrIcbFMiujxPDygDXNzUhlUX0yfRBbh77h+mEwEM1Pw3wkVSuFHHSUBgyIzhDiV9/96L2aUUcpcfCGZZM5nkYiRwHCZPqMkdXRoGJ6H/6vEX8HgdldGMApZEC+1UrXmYYxxYrN74JO8OlriJOB9wbdnpPDiOeyXswgGxj/OLK7mpkmCFVX7osusSwUEoD7v/cT3LNCBbcLysR X-Microsoft-Antispam-Message-Info: JHoXdSlYTDBiOGfUftyzFM0JS0BxDW4UQG1+49tIQhLCl3gFqcB1/AS20iWK3SYQrS7ZvHdgUwx1VhUbZHInMdVT4FN3eK3syeUe/3gprNIDjjyqEzrHHZSvWjz92qoVFNX3u2KYLyxaapRaD8YUMNRcw60aY3giHqzwbziu2fsoKRtklRqu+flp63hG67/efcg9fsKzMr1wb+zgTWOm0moPqInDU7JzrljbEULjqorfIIzJsMkU6Rf1w3RfBjOM6fq9uF0JjYg4MP70aXkvItekfVYDWNQqPi6n+pJbQCZsywbWulTj/WmLPDLaqlGMi4kjL0d5qrY7V0UBVBzEhQ== X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 6:eBem/qAtpLPLmnElycSn4z1Dkd2rN37EhM6N3DyvFZUCfI8FVEj5fWyjoobXySOh3agwFdRbzwqzlVruaPYDWwQgjbujfkvgR25nts1RNlFqSBwIaZcOyGeiVDAPMy3nn6/iNWKt0iBV1BqV/MfqQT1l9DzSwtWL3W4k6sk+YWhKSp9YwYttSD9SprfW7q2omSTHNtN3arYmxQs62WmRkJEU0LSbmqg+pLQhhcbqk+iN9jCFAyTGwDJpEpedDNsHiWTaOn0OY5rapMnL2x15WeE+BL2aQr7j4s0XODxiZGucMXKBGombV7emIwJt5k3RFgOMuH/cf7gfj7QPOMflvW6US/rbE2qrOXY9UZ+Qqbro/BN15+GapV+jaZz2Kc2fDoXbglFopJtvYcGA/lzTBtO3ORilxLsd3k/5TC8hAR6ynWxK9ZQ7lSHyVhh8I9ldgPdQfthpM5Y30dN69vILzg==; 5:9gctlr2aPiiBVhv5tqy3KoeMA1dQTvwNTzQlyS5wSJoY1V3bdQODRR4K/4buJVqmef6YXq75fu86u7n90HYZyhs3zpyjT+VuUdcCpsVZwkmG6DoYyW+qMdrxhEwElAPI5XFal/9OvTvOKHAMuFSYBgdNLfB3b9GSb/nAHeZEktw=; 24:+kbCb66kcPOBpJ5V5KHnXQl7wCLeIhefJ62AsWMz5D8T+fZPd1RlMW/3abszIOmf/cwI35fPXPTpKaIZQoLxkquCPSqxY1vxB+dXm0CduaI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0391; 7:u8ZfTi5Y7oe89JT48Uaq86oVQEEm+F61y+yPdt+ZadVAyf1NJBnHmiMFXSc6iT88AqQjURM4ch2IzL2JBxXc0KZMPVB6fFU8QtGRvCV8ZF7+OFp1SZoxydKZR4nuwx2hR/gmosNBqLFGKNiTVNMIBC5e60IOYKPnJMANeNK5wIMfKBy0FRZgDk69nSADUD3Tdw/OHunf3fz1LRKOxggznewNOQ/ab12uO9l+4LxuUHoBmWMoUGdq3Tb0SkkYCo2K; 20:HgO91k+V3MKNeuQNNhyjzrZdCElw3xBIaJ8TXiPqJLRLFyVLtkVfQGrx56uw/O6MmqUYaJpJxQVX5WHCISw/gakbWO8ctIb2MnsJJT/aixepCmkbg5TW4idznVKxCv8gOa9eVSM0w+EcrJFSje5mn5vreJBSzZBZhV1qaeXHpmc= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2018 19:30:14.4607 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5c578eeb-791e-4510-681a-08d5d8769444 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR04MB0391 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [PATCH v1 3/5] hw/riscv/virt: Connect the Xilinx 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, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Connect the Xilinx 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 | 65 +++++++++++++++++++++++++++++ include/hw/riscv/virt.h | 4 +- 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-softmmu.mak index 7a003eb5e2..b8cac7a49f 100644 --- a/default-configs/riscv32-softmmu.mak +++ b/default-configs/riscv32-softmmu.mak @@ -4,3 +4,6 @@ CONFIG_SERIAL=y CONFIG_VIRTIO_MMIO=y CONFIG_VIRTIO=y CONFIG_CADENCE=y + +CONFIG_PCI=y +CONFIG_PCI_XILINX=y diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-softmmu.mak index 7a003eb5e2..b8cac7a49f 100644 --- a/default-configs/riscv64-softmmu.mak +++ b/default-configs/riscv64-softmmu.mak @@ -4,3 +4,6 @@ CONFIG_SERIAL=y CONFIG_VIRTIO_MMIO=y CONFIG_VIRTIO=y CONFIG_CADENCE=y + +CONFIG_PCI=y +CONFIG_PCI_XILINX=y diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index a95ccb2825..7c1ed3aee5 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -38,6 +38,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/xilinx-pcie.h" #include "elf.h" #include @@ -54,6 +56,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) @@ -232,6 +235,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", + "xlnx,axi-pcie-host-1.00.a"); + 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); @@ -259,6 +288,38 @@ static void *create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap, return fdt; } + +static inline DeviceState * +xilinx_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_XILINX_PCIE_HOST); + + qdev_prop_set_uint32(dev, "bus_nr", bus_nr); + qdev_prop_set_uint64(dev, "cfg_base", cfg_base); + qdev_prop_set_uint64(dev, "cfg_size", cfg_size); + qdev_prop_set_uint64(dev, "mmio_base", mmio_base); + qdev_prop_set_uint64(dev, "mmio_size", mmio_size); + qdev_prop_set_bit(dev, "link_up", link_up); + + 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); + + qdev_connect_gpio_out_named(dev, "interrupt_out", 0, irq); + + return dev; +} + static void riscv_virt_board_init(MachineState *machine) { const struct MemmapEntry *memmap = virt_memmap; @@ -382,6 +443,10 @@ static void riscv_virt_board_init(MachineState *machine) qdev_get_gpio_in(DEVICE(s->plic), VIRTIO_IRQ + i)); } + xilinx_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 };