From patchwork Thu Aug 16 16:12:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 958489 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="pdCYW48x"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="IWWYQGHX"; 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 41rsd1383Xz9sBn for ; Fri, 17 Aug 2018 02:44:53 +1000 (AEST) Received: from localhost ([::1]:56951 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqLOF-0005HC-36 for incoming@patchwork.ozlabs.org; Thu, 16 Aug 2018 12:44:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51847) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqKtB-0000qe-U8 for qemu-devel@nongnu.org; Thu, 16 Aug 2018 12:12:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fqKt8-0000yb-Pp for qemu-devel@nongnu.org; Thu, 16 Aug 2018 12:12:45 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:9041) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fqKt6-0000vw-PF for qemu-devel@nongnu.org; Thu, 16 Aug 2018 12:12:42 -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=1534435960; x=1565971960; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=Bqd8ygBRwL+YnoMrFVvbAgKi0xrkPVJVFrYUGN32c/4=; b=pdCYW48xn6ieCszUgCH33aVm3EW9yNFiidDfCgcYT0ovJOUVweNWT0Z6 EhcsOFI/ga5u1D9GTzxok1jmKEo1PN3Qw9o3CKx8hJwB2iL7oHgdP2wYC sqcKJ4Ty3vr0WQDJZWXaL04Fbjemv1LwNQIePkYitnPsoXzVTbEzVqC53 GGBpdg64VgY/ZoqQZ3qFdceu5+vDh7ui6NHHXGfPUsaBsgO7atKCe0wu/ Orak20j/7HnSOE9b0OGABDCc7FUFm4ny0LnQLfzoaSDRV/cQcilsD/fYE blql+30zSwMXQr107jhsyePYcRMTBJav5Faw01PxNFMP9TAYIrdJphmKe Q==; X-IronPort-AV: E=Sophos;i="5.53,247,1531756800"; d="scan'208";a="87742808" Received: from mail-by2nam05lp0245.outbound.protection.outlook.com (HELO NAM05-BY2-obe.outbound.protection.outlook.com) ([216.32.181.245]) by ob1.hgst.iphmx.com with ESMTP; 17 Aug 2018 00:12:39 +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=fIPv4U1e0eF0rATsHrvRJMR5MWy4v8sWWLj29J8jIsQ=; b=IWWYQGHXKbwIA20VYsoDyghY+ZtTb3QArTU755+dzyXen2Unm9OaKglGc4FERDEYtJeOKc7HpiSeMnFO2XrmdR0u+klxqoR5/szHDxeq+ARrwrWnJ06GO6/VdVrL0qeDYZ7CX0a7FF/fc+9kbDpQmih3086FrSy8KMJiW5cwYqE= Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by BN6PR04MB0386.namprd04.prod.outlook.com (2603:10b6:404:91::15) 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:37 +0000 From: Alistair Francis To: qemu-devel@nongnu.org, mjc@sifive.com Date: Thu, 16 Aug 2018 09:12:28 -0700 Message-Id: <012aa7f7f72b7e07bcbff879566950a9595a836d.1534435831.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: BYAPR07CA0002.namprd07.prod.outlook.com (2603:10b6:a02:bc::15) To BN6PR04MB0386.namprd04.prod.outlook.com (2603:10b6:404:91::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 31440d25-cf5c-4d63-f8f3-08d6039315d0 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4618075)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020); SRVR:BN6PR04MB0386; X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0386; 3:JbXEeR4YjfG5IkBWKzNhG/O4fVgb8GKWNwsbIPOVwMcD7cuTeJtKnUPiJP3mzzxEuogcb7UBY2GCmzNaIomD4oSJkYH3gkbOd/v/Gxc0qozi3NYIvcLGIcOP6apiD8H+GQayswQlJzF+u6ILG2AblukdHmsPho13Q4ZolsUmkycaAWCQHDzTRWQLoavKpQU3uTsjTyZHtBpW4S6/qlCxEXdtYUG11sEsDYbRh+CJIKSk3OisEN4K9lGbGcJRgeza; 25:N+pEG4YnlhRVdZzVj97kEhmZpu1iTYIicWGO6uSbRU9L85ZdwEdzcLPyRGNpA7FML/oTHH2Fh2hXcfbVgyF1r3u0k29owyavb3poBvMUrnZC8+Z/ikarTzCxnCaL9sHkj9A0Jm7SPV6R1Vw04SyU1kKn/x3EbATynx20LlfMfXJOgslFQu/EiKGtzdR2zuiO4bK/HBprlEcjojm6IwE1YxpR5wnZOZJc6YWoR5AExdDCKW9R77hExRviL7vosCOUBq1Ax6NiylFXeLN1IaaIFF4xwArGbpMA+Rf0FKWkjuyaQTpdCwr0Ki7f95NsdRjzSBhXZ5CAXsZrcceafOkJEQ==; 31:zJUT6DXGhfCmaxAxUS7hv5nWB76MAJX/LcX4N2PwGSnKcAdB3zotifsrVM8I5SgAtyc88nTltH8FxSPm/drhRkHsA7iVV0xOft5fLGBL8fMEAQyLOod7DABKIgbTjtRmcshzubnp3n9872u2Q+thykjrrXyOy05nNbDCBNfGTU4ibB0jOtQgCQPCiS8Gz90yVXlrFY0ruEUkRWMYe5jrQR10ea0lEDhzN7BSjZQkZmA= X-MS-TrafficTypeDiagnostic: BN6PR04MB0386: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0386; 20:3qCwOMKf8kJxt9M2FeM8koJwMy52BptMmkYai2W5Yr/cTVuLUT7MpSC9FtPNxjkVVQvRSEYg0LIUG2dgSnDHNvMqq5eamMJC91VoWeEoNkEui6V9vpwdxJEkratN8JoZuPH5gIbaUWyy/li33T/8hRIo230tAlf8TsgA2ILCSxfFsjwoJh313QrZFUSgo6uYhdkJ5nQbfmsgmrXg5usTZ2nGHhJV6xgw1kDM4yqlYkhcmQ+xRo5J6Lax+44lZsK51SOuXMRmksjE1PahgeBilyLDnsExqwAwlwkSadUyDs099G+PKLWjdIGki3jNaFg7mNg0w9459o+W9MxOY2ovnIfIl+KwleQ0gIS4hfZm2PioTUEh1XKOdffzjLhQBvek3kSpigF5PwxtH5CQFtRN4HG5JbzeENJyC6i1yCEZ4YfLNzBMHbG/AiIGhr9zDzbKkSEUlIzG3ursVlTWs/7UyGqUAKG2c4AmkebdBu9G3T6CbxAmciu8dmEegMmIp2Eg; 4:7gy6uX0RHdGO++cgOjP8Ja3zloqLdnX3EzFye3QCJMruocHU4LlrhD17VwSDbOIF5EsbIIt8pbQT05mpArMHABRRdGK2+Dix0SGvdPrt6iTny/PEpav+yH5j0buiX5hhcYQKs8iSCW/oNTmhTcgjoyCx0uMiLY+kGWG8Afw4DNyuI1GnktR+LfRoJJ7oOPVZlPXre7rzPnpp2Eq52pkXh3HwFluLW6gSn6KNwl/vkTfIPhkk4guUUDZeJfW+dsbsUevuV813VB0FK2myWjIQ0ShSXlfrHzpFNIgPVJ5lrINYBxuCtlfypgXSfo53oOMP 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)(823301048)(10201501046)(93006095)(93001095)(3002001)(3231311)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(20161123558120)(201708071742011)(7699016); SRVR:BN6PR04MB0386; BCL:0; PCL:0; RULEID:; SRVR:BN6PR04MB0386; X-Forefront-PRVS: 07665BE9D1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(136003)(39860400002)(376002)(346002)(366004)(396003)(189003)(199004)(16526019)(105586002)(106356001)(486006)(97736004)(4326008)(186003)(44832011)(6486002)(7736002)(478600001)(6116002)(3846002)(72206003)(26005)(6512007)(8936002)(2616005)(956004)(305945005)(36756003)(476003)(50226002)(47776003)(53936002)(25786009)(118296001)(446003)(6666003)(11346002)(66066001)(50466002)(386003)(6506007)(48376002)(316002)(2906002)(86362001)(81166006)(81156014)(68736007)(51416003)(5660300001)(76176011)(39060400002)(14444005)(16586007)(52116002)(8676002); DIR:OUT; SFP:1102; SCL:1; SRVR:BN6PR04MB0386; 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; BN6PR04MB0386; 23:xqc23tNpTYKWJC7lYlA1FnsvCFLXOuFZzKNYlTmja?= VarWOq6U7GTrQUPBlalMX193zWwp/7PCKAKXi5GmYZ9jntkN4XYqVoFvxfrpLq9vcMRqsIXbK1+GE/ZQn9RDVlTHZUho/mBv9wSE8nc0uHPR4S8eTqH5UphsWRhcWg/fPnEMMGJQTgQXUNesnbNTMOdB4NiCFv+rfAYbjM//ZcU/LqB0jDTNkvTemP3jiOGEjqMKliTXksfoQCumor4e4l3VMKrvjYZ5d75JCFSewMGlZ/HJorir/e+L1NKU4cr0CckqiRVbj5H+KFSWxBBmxzUHa7GIFCdzCQ+iqlX07ryotEPXpmdlCeHE3cR0kJq9tCf6DdHUQL1OHYVDzlmP1on6JlyW0YXn6tpB299pj1WE5DEj1GBON5gyeovrFJQZQFIc0JwfPsc6GjFElUrY4eW/RmEy+6BOoYsbeZX5S5rpx3gIBaTXAZpTWq+H4OE2LZ/c/a/lZvmRlYn5DWY7XiWjrr+7iAP56tPDdIpoTMHgdwH8jchCdBQyIfO47GWp3RMhQeomiLUQOkIR9Fdixyf16mSno7SKc5S0UdOjjBF4ckvb+kaMD6u71AWGMxJyNG3xeu0SBAD1GY2r3vW4fF7rLcHE9HrJy3emwzntw1ygABqT3jCPYFdb6moublm8ifJ1aR3K240gOqwk/biJT3+mRCocleYrZfeT943tVs0IxpdXj3yH09EfwG+W6y9glfLppBKGSf0PzZlotSNKh+8JHU6h4YZU9UTjMT9m7JvOipFwC+4Bgwm8dpm3auxsTQHHQQXkj4qrYrAAfOl/oEjnE75NrnmIfieXmlGITgOStwMp3xmLLSThJbEhDFSvh9mojrSeJQs9r5cf1j9jRe7TUA2rfrRekq5kiQL8eN1jI3vvlqQ6ohmFEnheDA9M7xe8BaovWHiSTUmIrk1MaybmY/rdNG5vV1/X9PMmFil/d/Mjc1b0wS2q9FDQUjn+hRL3GWpgnfljaOU9ueCOsyXD+O3accLbr9MubFz1xynCCQz+CWNB6PmGlY/5r2/+Dkfz2wfR1LUIfy6GmvyuI4pExhhB34VKpVBuq/Xs7d/PnnicIagMXKEvjK11XZK5tT3b+aVPzLEFMumukbFE/3YnYofrh4S5/39e9IEPGWTkY6XCuNdnlFaqYbHxxO501g8Ld1+5/dRkoCWu63BKebPncdXMtQ3PC7b+jMAnujQI+AB6YATks8FnFDVky/AJrQ= X-Microsoft-Antispam-Message-Info: h1vGyCIiwm9CGigin1d13xWzfV0b0JsZ9l23QqruN/vmmwFD3UFuvmoNHbe5NTaeGA+/n6HAySEpm7FJGCRwlVU21LL/uMJNPAbAZQ/FQrYo/vzfvbRgVOvIdzHYHO97lE9VP+XjoLvj+ksx7603z/qiqRGXCyqkrKjB+/b2uqRkJkX9jBniXkao4dZqsNVr1751DSSUuJDFs+Ozf8/o2VfWg9OKFt7b7s+DIVdGPk9xx0N+H9+J0TIWEFteiLPYKXJ00heVR29HRakLDKYQ02iLMFgiHeV/o0V8ddrstgaIePSeVtrLM9+MI1EGaRc0C8alR86BJwuScIbt0nbV25CD1hoKcDj4z9rCKAKFxAM= X-Microsoft-Exchange-Diagnostics: 1; BN6PR04MB0386; 6:e2/azpU0NyneYxRx0ljODITmcUvSW/FZ69JnU8zZ1/57YHrGShYdUJqgOaGl5/99YvqDlfLiVAEsy4zauOdxm2vubYTxpap9podEYJCt276km5ifG7vS9q189ytRcJ22t2s/gDwko56Ag2o15oiQeRJdJYnLqAxFsol/945sL3Txo29bR52T7eAuaAVrQtsqOqAP9JS6DMuG4goW0SkHkZdXco7Aki9dADrCfoZdJAroNugZ9QD+qNonq9m6fp4mz2rH/uU7dowMkFZTIxvlCSdHihKXqoeRh92FvYRvYR7qWCGapjJNr9z1E6C2nTqHIj5n+XjTCbHTr9MCIWA+5Kt2cb6QJvfmAFbM4MSd4G5ktrokTLqeAukpzhFfleFxrU6dp6Yy4xFD60lPYztDgEbbt0lFCpnQNwy1QH1fy4aOWxSo7BoO0PdWJtjM0BYZEX2xwP+/ce2iI6YNp7iT8A==; 5:qYr3PeicZ9jsUcFsh//bamaYwjhxRgqvMaFEH89vJSnCcDxVTnq5XCHWch1AIs5wce/D7zcqGsYALD4ZURNDyyPbTxFs2vgI98SuSY+kB1mUBngcWSHC4Z00rnBqCRX9u5nTi/sUuiEpk7m6EmMyvFUqDjhI6W+mEKaDpJwQm2k=; 7:RRk5GTQXT51SkjlqlruZMdeMZr647xhVZUH3CUXVoQ7QDvXMxFs6m7GzPw7vUsfy2YvUWBd5j6XgnscSuf11QsaIrb6eRgysHhl/0dKtpM/pukLmLUw9CS75h+19Df0ocayGt5MmFbTTf3/oVU2qOgYnQN0Nl2ITl3uZ00jZhkpu3vS3yu+5pdCgrSoN/Od4lmx2eup/rORtWXnFiEALynZwz1ioxzb1ufSKZmUE+vG7iwBRI+ALt61bxhOtNtWO SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2018 16:12:37.6793 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 31440d25-cf5c-4d63-f8f3-08d6039315d0 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR04MB0386 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 v3 5/6] hw/riscv/sifive_u: 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, 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 information in the device tree stored in the ROM of the HiFish Unleashed board. Signed-off-by: Alistair Francis --- default-configs/riscv32-softmmu.mak | 1 + default-configs/riscv64-softmmu.mak | 1 + hw/riscv/sifive_u.c | 64 +++++++++++++++++++++++++++++ include/hw/riscv/sifive_u.h | 4 +- 4 files changed, 69 insertions(+), 1 deletion(-) diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-softmmu.mak index fcefa68f1e..35e74bebe9 100644 --- a/default-configs/riscv32-softmmu.mak +++ b/default-configs/riscv32-softmmu.mak @@ -8,6 +8,7 @@ CONFIG_CADENCE=y CONFIG_PCI=y CONFIG_PCI_GENERIC=y +CONFIG_PCI_XILINX=y CONFIG_VGA=y CONFIG_VGA_PCI=y diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-softmmu.mak index fcefa68f1e..35e74bebe9 100644 --- a/default-configs/riscv64-softmmu.mak +++ b/default-configs/riscv64-softmmu.mak @@ -8,6 +8,7 @@ CONFIG_CADENCE=y CONFIG_PCI=y CONFIG_PCI_GENERIC=y +CONFIG_PCI_XILINX=y CONFIG_VGA=y CONFIG_VGA_PCI=y diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 59ae1ce24a..9a8dd8eade 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -45,6 +45,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 @@ -61,6 +63,7 @@ static const struct MemmapEntry { [SIFIVE_U_UART1] = { 0x10023000, 0x1000 }, [SIFIVE_U_DRAM] = { 0x80000000, 0x0 }, [SIFIVE_U_GEM] = { 0x100900FC, 0x2000 }, + [SIFIVE_U_PCIE] = { 0x2000000000, 0x4000000 }, }; #define GEM_REVISION 0x10070109 @@ -218,6 +221,32 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, qemu_fdt_setprop_cells(fdt, nodename, "reg", 0x0); g_free(nodename); + nodename = g_strdup_printf("/pci@%lx", + (long) memmap[SIFIVE_U_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[SIFIVE_U_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", SIFIVE_U_PCIE_IRQ); + g_free(nodename); + + nodename = g_strdup_printf("/pci@%lx/interrupt-controller", + (long) memmap[SIFIVE_U_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("/soc/uart@%lx", (long)memmap[SIFIVE_U_UART0].base); qemu_fdt_add_subnode(fdt, nodename); @@ -234,6 +263,37 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, g_free(nodename); } +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_sifive_u_init(MachineState *machine) { const struct MemmapEntry *memmap = sifive_u_memmap; @@ -373,6 +433,10 @@ static void riscv_sifive_u_soc_realize(DeviceState *dev, Error **errp) sysbus_mmio_map(SYS_BUS_DEVICE(&s->gem), 0, memmap[SIFIVE_U_GEM].base); sysbus_connect_irq(SYS_BUS_DEVICE(&s->gem), 0, plic_gpios[SIFIVE_U_GEM_IRQ]); + + xilinx_pcie_init(system_memory, 0, memmap[SIFIVE_U_PCIE].base, + memmap[SIFIVE_U_PCIE].size, 0x40000000, 0x20000000, + qdev_get_gpio_in(DEVICE(s->plic), SIFIVE_U_PCIE_IRQ), true); } static void riscv_sifive_u_machine_init(MachineClass *mc) diff --git a/include/hw/riscv/sifive_u.h b/include/hw/riscv/sifive_u.h index e8b4d9ffa3..e7292ea83b 100644 --- a/include/hw/riscv/sifive_u.h +++ b/include/hw/riscv/sifive_u.h @@ -53,12 +53,14 @@ enum { SIFIVE_U_UART0, SIFIVE_U_UART1, SIFIVE_U_DRAM, - SIFIVE_U_GEM + SIFIVE_U_GEM, + SIFIVE_U_PCIE }; enum { SIFIVE_U_UART0_IRQ = 3, SIFIVE_U_UART1_IRQ = 4, + SIFIVE_U_PCIE_IRQ = 0x20, SIFIVE_U_GEM_IRQ = 0x35 };