From nobody Wed Nov 5 16:41:38 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 1535565649262142.32936293757075; Wed, 29 Aug 2018 11:00:49 -0700 (PDT) Received: from localhost ([::1]:44349 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fv4ls-0006H3-2y for importer@patchew.org; Wed, 29 Aug 2018 14:00:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41034) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fv4ii-0003Be-AT for qemu-devel@nongnu.org; Wed, 29 Aug 2018 13:57:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fv4id-0004dS-A5 for qemu-devel@nongnu.org; Wed, 29 Aug 2018 13:57:32 -0400 Received: from esa5.hgst.iphmx.com ([216.71.153.144]:64917) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fv4ic-0004ch-89 for qemu-devel@nongnu.org; Wed, 29 Aug 2018 13:57:26 -0400 Received: from mail-bn3nam01lp0179.outbound.protection.outlook.com (HELO NAM01-BN3-obe.outbound.protection.outlook.com) ([216.32.180.179]) by ob1.hgst.iphmx.com with ESMTP; 30 Aug 2018 01:57:24 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by MWHPR04MB0401.namprd04.prod.outlook.com (2603:10b6:300:70::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1080.14; Wed, 29 Aug 2018 17:57:21 +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=1535565447; x=1567101447; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=Bqd8ygBRwL+YnoMrFVvbAgKi0xrkPVJVFrYUGN32c/4=; b=WZM2uTNLt7d0r4raLLXSXGwcFEK7mSBHd9b90niLOIA+1ZFcRg9KOVXN AimQ/l4uhUwQqMbayLeg0urXLFiYTtQbN3xp0aH7xntQAO9Ufy81zZ+cf sc1wzV4JFwOEXDp8Um7HfKvlDWiPAL5By3+o/anXj4tAaJoa3x3T8h48B wWyJxr203kpQ6lPbBN/pLQT0Fjtf8VbPHlfEbLqE038Ii2bO4BR1yTNBD ueqCv7KcwJBXgdeqEFrw4zkWeZk6p0w0A2nibhnfSekQBLJJuBx3VxA0B yVyJK5kfCKmq4cQJNnzDYu/vnzIxVXsdJ47orBKQ4/GXghmHfaTIoCwaH g==; X-IronPort-AV: E=Sophos;i="5.53,304,1531756800"; d="scan'208";a="89587403" 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=P0yLOwpuW+hh6lvT+TuAw+QMVJ48X1PSOGJ5xhOp4K69k6FBOk1713wYzaLjx8xIUwLSyjYPZ1uHRi/ruVym2dI6KrafkjATokPunQIlQQ67IAbpS6jQSNM66KS0Z1TyuIXbk7Se9CNxsflJQ0PRWLbVjT6fXuafXWQXxKNvV4Y= 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:57:13 -0700 Message-Id: <59f754de00349434c7335dc80a123f39549056ac.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.171] X-ClientProxiedBy: CO2PR06CA0054.namprd06.prod.outlook.com (2603:10b6:104:3::12) To MWHPR04MB0401.namprd04.prod.outlook.com (2603:10b6:300:70::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 58c8f35c-643d-43ab-5e2e-08d60dd8decc 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:MWHPR04MB0401; X-Microsoft-Exchange-Diagnostics: 1; MWHPR04MB0401; 3:bipwE8GhqMAvgyklCTxhVhzKhVoSdW5jU8lBB8bH6UQtSrdeKubkkW5BBXEdEDJsvAPLIUrV+vU6D7PETWe8ib6Kan6tgWUXRVhbNJCuOeYrYAH8c5Dck7z9B77M5P/55oCMMub29oMAW/+Wb2rJiyvxfXstjvPQLO53+EOJMazzxkaRr0ODcDAAi4Qo2xSmbiZWqyC18EmjcPA/M2LdQwRv4nBirpnopGofzTY6RVIt8UTVuxHZtkF3jAWEmDQi; 25:9pNnkRq1xbmtcM+S27N5Li+7UhUggfwbRMr1zU8AQTORu0CGiFhfq6aqiInOQEGWudBfOMnOKBLX9ZNvngEsPSx7Rrud1uf38DSSghgFE/DNfqprQngKZWuWQbaCvsaijEaP/BXPiQahSdpK6zAkMu+tJMzZ0X8MBOc+i9TpCZm7WcdT0716/mzYXyGWB90tJI4XTKtKGtQFvDJHswsdnzXtiSvV60PYsW3eV0tIqXeqv+D3mRYxmokQyFXbJGn53pE//UPcRVwwZXHcnkZjy0+iJiD61Y8liRwFE6ZkugsTXDsMwTXK3GKG6OMUkoRFdp1uK2l7oIEbnUntDdCOcg==; 31:Irz3Ccg57+NmOM0VCL6bvtlHqJm0O0Fu+CErkHaFBnxceHjOlZK8fT81YpBd4IYPfP8OhGKM8Fn6sfBQGXUQkShgnrB05r8VAVZBzLEIHbtfIXuKCpj1PuZ+qe34JaWG531oTDcY2OeKmfrZKtrnlCp3GE2fKQ1AOR/UuBv7PKNSD+SHtPW8hhXgrylB8vZfMW2T8Tzs27n8V1Yf4F7OOoM87v+amS/4rz7J3skLZUs= X-MS-TrafficTypeDiagnostic: MWHPR04MB0401: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; MWHPR04MB0401; 20:wZFD5XrSb3cAP5kmfMLvQItJOv0ndPy3s+7k4l2pMTVXVCD2uB7XpcAR/aO/Js7RjXkMiVg4jAPCPdMQ3h+MBUrKxbtHmpXtMDmETE6zYzYxapQzisU8am3HzjTbY5EohDR0kqnC7ig2OUdV4fLMVnZIJGbZrGFMzffKth1o4JRlkCjDGd4c9GAdGb6fiJnOWLHY3y+a+BJlG6BnYnwAx7r9v8WKADA20Wj+3fBvZYmSwzsAXOKQav+vN7ooCpuvUFRln6E6MBRVgR5+ZErxSmouLFSqtklaG4713TOkE6yB6c9mUrx1hHOYRn7KaFBJYXWC/arLUZaviKgIA1kOHGMsz7Pod5bCQb7532pnKX1899DWXROVHWSeu1nAow9T5h8wocKsogPCCK3VJC2KDWK8kNzSyRA98TbNL/F8KIEtiPheNGHboY84H+ejwRLZqPZ7culGkfjXbqlhPIrcRMiuKZy7tAkJ8LBBv18W4JMRtrKn4QDL7C55q3FJ7IjS; 4:VFFIomHdDyL1baMPnfvfjBR6Zd85P+XRAXqFsDwihIqnv3t7IkTlVTPIRtjqh4PyQD4jXo4EiQOfndzqinU+rTiuP9OlokMc+NqOqYUD3Mo4rdI3ptyWDqQ8SXRV0H4R36xMQCpJxsPPEwrtU8Xwa0QuaWd7JJJQRpvC6C92L6oanq0+XuM0s8St0xlQPUx+PnhNtrTYlYlJhAzyk/MjZukDLnEvGVYaiSbIF5RWZdV4xQc3V45YcH+0zKkuc28Oh+BQV11Hc0uglowEyYquhTVIHmjmPovuTFBK4WANwRU9WAGsU5F0BuwLFdH2U7UQ 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)(93006095)(93001095)(3002001)(10201501046)(3231311)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699016); SRVR:MWHPR04MB0401; BCL:0; PCL:0; RULEID:; SRVR:MWHPR04MB0401; X-Forefront-PRVS: 077929D941 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(136003)(39860400002)(366004)(346002)(376002)(396003)(199004)(189003)(50226002)(486006)(446003)(11346002)(5660300001)(476003)(6506007)(44832011)(2616005)(118296001)(386003)(305945005)(956004)(26005)(105586002)(16526019)(186003)(6666003)(39060400002)(106356001)(97736004)(2906002)(8936002)(6486002)(76176011)(47776003)(316002)(8676002)(478600001)(68736007)(50466002)(25786009)(81166006)(86362001)(16586007)(48376002)(6116002)(6512007)(14444005)(72206003)(7736002)(53936002)(51416003)(4326008)(52116002)(66066001)(3846002)(81156014)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:MWHPR04MB0401; 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; MWHPR04MB0401; 23:x6Tv0Mo20gU70YuYXz6g4VShay5/Jvzd5O4P4ispr?= =?us-ascii?Q?W8fEjwyeQ8tO5hBVnZ7QRnxA4AQPjhgE2pv4OrR/cf1o7LDRr4r5Jn980PY8?= =?us-ascii?Q?McEtwGObHlQXoqUxTfTMBfW//PenOvXH+AvQsb6DtvIDjmrH1KCJAwuLjZd5?= =?us-ascii?Q?VUFqZpPBZjXYbZXCxfJNEuOTvIFj2X/JttCQBQ2R2lfG0lUidmIx1V2Yx3K5?= =?us-ascii?Q?AFJMH4cn+UFFcpvkXR97tLi67fTqCFi0imH3ANT0tufcGI8gd34FkTYB5jQx?= =?us-ascii?Q?j9q9py1cklgX7v2LkfmsqeaexWr16rUmVVqNgceFccHqVJHT2HqqZBsiDum+?= =?us-ascii?Q?rxlX/ZhBWQobq7yYpwu0Ugx98ChOH1BlbC6jgzFjVEs3Q5ccxc4A8sUeihDs?= =?us-ascii?Q?4PqJ8XauRmHf96uVam3TG3SiujuGUWYr/y3m1xbSt0YZOyMiszRbGt1EjVVO?= =?us-ascii?Q?Ky2dmMcdOGkOgc1G0AttERttZyM0TCZLj4t8GMZTvZWyOuMb+uPVmgRFqIds?= =?us-ascii?Q?07EhngT4ZIqC0lUwUPCpbThzZCeP1o7srNEzV3EUSJIo1AOvWWKCp25m7WCK?= =?us-ascii?Q?alX9cBOoQ1q64UuIFI2WQKQvEtKMTgAYgOgOcdgWmN0wZP9p3OF28bRJD6Ma?= =?us-ascii?Q?ywsQBywu/Bv6U18yeArxDj7PHX2j34oZPS05grG3Ao1W25HI721QmtEwAQfl?= =?us-ascii?Q?FodplhcnMgy4SLQqZy0MP7m1nA36he0sbwVVktJsUsbng6TJ2eoNiA3BytPQ?= =?us-ascii?Q?M3KBgOTcOfzoJTM2SXzmzzBeUx41VnnYWHhkIcdu7ObflOi/nReOuxFfdP8p?= =?us-ascii?Q?i1kLgQIjGLtgNnVlUoDyKHuTFAQnFm/mswzfmflUscvi4g7F+IaHa5D7HL0v?= =?us-ascii?Q?g9JnOH29L82JwYXneFCgY6zxWFsSuYhd6jC4SGeZCr9UQOcCCTuhnmUvi525?= =?us-ascii?Q?piykr2gfZLDt6G6Hknd/Dx9kDVnmHIPj/vrZDCVA4hkh8hynMUJcqu5seSz8?= =?us-ascii?Q?0kCMsyKKnv7SihpiD9XIKQdX3d9tUwjsdWZm2++jt3qQqLjGjZqq/V9lFqCX?= =?us-ascii?Q?FxZ71rCy/mIvSlNR1t5t5FjugmTjyS4kw7L/69n/ZuuUHhqMXWFx3GBB7gWE?= =?us-ascii?Q?CK4D1Jj0qavnGylIrXXZWYjTPK6KMC0NPELqZx8ti/udAV8jK2hByD3YqOJL?= =?us-ascii?Q?4TXhEku1bVBFhSKQbFbgHHTfoV5MVV7m/+JHfKfPr9HG5l6uCkF60z72uVAY?= =?us-ascii?Q?afkb0KPbdpKUe1GKlI=3D?= X-Microsoft-Antispam-Message-Info: S/28pkDdJuOiltSt/uKhJnUzp767ueb2IIC1ZW8FUSFVP95vfYLi9CrLyPQkRpAGKvH7x2uyBnLweM6N0uyWLbT1w0j1yosFC2xOKzhEH0Dto8udpMd7uPomCZ+LqBUpmtms1y7AQVrKrRuURKfD1U04QWx7w8g3rDcZQGawDA7dYNdaPdXN/TdHU80jcs6NuasYgGpSjWlZ6mE/Bhi9687AXES2ZfQ20N7HC/RgSOsH2UuSJy68JUepMgjWN8BV5YpZcUn+cd2hPJnBPEUAyBXnqyUAQhBTgKe6+IWO/v4AwiYi8cj9YGYIhttElAR+bCoQtlYBjeNkRdRO1nk+D/gfA55AOkuMIPv8aQ+sdNw= X-Microsoft-Exchange-Diagnostics: 1; MWHPR04MB0401; 6:K8xUZtSyQ5/wFBPBQvyp4oxBL2sQ2RqaGPhstRreJ0OJtPe/jljYu6WcHLqk8ykT4Dc+DV2T6jd+FQNDY5JGqsDU8PGEhmGXZQ6g3I7ZOIhIsWhkhCj8STPSSnCCqLI7AxcF+OcbljbsQtGHv4ImJjvYKbHbMGaKnL+MXAVWMegT6SI3iAClbHKuZKBfSW6WCn/1TMuyECJV/NpFNMfZDn5IM8o0b5PcjELHAZJBG5d4e59nTEAyDr81NmmhJgShfHoYfEmRtp7uX7R5E2rGgg9allioEngWV+JYPDVS3unzDODQGTFnWZtU7/9U+uYTNAJ19Ih2wGctEPSs8SS9h1PWG8xzdXcQZIqYlpoDvUa8vKfZQOd3yaZ3x5WTq80p1AOEa4LlcL5T+AY2eXPQqmhAJYgBm7ihDLZHzX514jZoVncwLfc2hvAp8zffv1EXW12cNDgeBVTiy/YZDsO1hg==; 5:lXFathWPVCTyIDRO2tjqhH3SwP9ZStK0/FB6aqvo6eQybKdEX/Oshj3hJsPGskZ+jWLZLypkWj3qrFQFjsXM+/uhTWCaTGH+DIwHj6tXPBqT9AqWquwEvigzQoLm4rz2g4uY+YoM0BH3P4ynkucksMkuMula0W+hM09SRXjaU40=; 7:CgjRfAext2Xp10StknN1gPawLTv0apsVX7DxH26Hd71bhOOw7djVsvT58nBYaWFYHZtgtOs7rvKCQUhTNd26EGsHC6+UmNdaNnXl6zDj8I/4aKP5D6Ql3FvDms9SgYVP86xfckSzzUucHqP17Pj+TPE1ufH9uX9IduCCMHBW0XlUXa44Pw84q6e83i77DPnEUK9VN0xBA0dFd1pWaQ3Uh3OPvuhYo6RsAWdI7y/6Z1omiUp6BgBKbyyh76Pv5Ggu SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Aug 2018 17:57:21.9973 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 58c8f35c-643d-43ab-5e2e-08d60dd8decc X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR04MB0401 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.153.144 Subject: [Qemu-devel] [PATCH v4 6/7] 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+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 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=3Dy =20 CONFIG_PCI=3Dy CONFIG_PCI_GENERIC=3Dy +CONFIG_PCI_XILINX=3Dy =20 CONFIG_VGA=3Dy CONFIG_VGA_PCI=3Dy 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=3Dy =20 CONFIG_PCI=3Dy CONFIG_PCI_GENERIC=3Dy +CONFIG_PCI_XILINX=3Dy =20 CONFIG_VGA=3Dy CONFIG_VGA_PCI=3Dy 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" =20 #include @@ -61,6 +63,7 @@ static const struct MemmapEntry { [SIFIVE_U_UART1] =3D { 0x10023000, 0x1000 }, [SIFIVE_U_DRAM] =3D { 0x80000000, 0x0 }, [SIFIVE_U_GEM] =3D { 0x100900FC, 0x2000 }, + [SIFIVE_U_PCIE] =3D { 0x2000000000, 0x4000000 }, }; =20 #define GEM_REVISION 0x10070109 @@ -218,6 +221,32 @@ static void create_fdt(SiFiveUState *s, const struct M= emmapEntry *memmap, qemu_fdt_setprop_cells(fdt, nodename, "reg", 0x0); g_free(nodename); =20 + nodename =3D 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 =3D 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 =3D 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 M= emmapEntry *memmap, g_free(nodename); } =20 +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 =3D 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 =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); + + qdev_connect_gpio_out_named(dev, "interrupt_out", 0, irq); + + return dev; +} + static void riscv_sifive_u_init(MachineState *machine) { const struct MemmapEntry *memmap =3D sifive_u_memmap; @@ -373,6 +433,10 @@ static void riscv_sifive_u_soc_realize(DeviceState *de= v, 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); } =20 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 }; =20 enum { SIFIVE_U_UART0_IRQ =3D 3, SIFIVE_U_UART1_IRQ =3D 4, + SIFIVE_U_PCIE_IRQ =3D 0x20, SIFIVE_U_GEM_IRQ =3D 0x35 }; =20 --=20 2.17.1