From patchwork Tue Jul 10 00:28:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 941772 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="ibGm5A/F"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="SnG21gE7"; 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 41PjpP0qd3z9s0W for ; Tue, 10 Jul 2018 10:32:44 +1000 (AEST) Received: from localhost ([::1]:45101 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcgaA-0007gA-6b for incoming@patchwork.ozlabs.org; Mon, 09 Jul 2018 20:32:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41661) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcgWc-00053T-1i for qemu-devel@nongnu.org; Mon, 09 Jul 2018 20:29:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fcgWY-0008UI-Sn for qemu-devel@nongnu.org; Mon, 09 Jul 2018 20:29:02 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:61579) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fcgWY-0008Tn-Fq for qemu-devel@nongnu.org; Mon, 09 Jul 2018 20:28:58 -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=1531182539; x=1562718539; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=pv+yBmf333TfqMyhzMZDQNXYTeet2CxSoMidrLi/OTo=; b=ibGm5A/F8TaVoOZPBvNZzqUSJAGkInVQa5RtdKWTM/zct9D7uiPldigy fWql2WvW8u1OsTJJvfBizzYff12A7PqJE9fkEi7dkAuOJU4FWsWSimelh qY7Ed0jmlP6KG6CVT4ga4zHcDzhSlL4ccbPlw8+oJLAulpjAbh+WBfJdy Vba9vtdd+zD3qq9eCFPbNfxccjSJeXmwaHcf8bv/xphPOo4vH6y11I0mh xE5NVm4YT94pBxmXlYR2ro7kfa7nZqoeGZGqWIwuq54Pdu/q6Q72wxshO 1m6ciECrlxPSsHOXQ1s/iuNJwIQlsX8B6Hdj2NrClKfQmCsdma3eJEZKd Q==; X-IronPort-AV: E=Sophos;i="5.51,332,1526313600"; d="scan'208";a="84859333" Received: from mail-sn1nam04lp0082.outbound.protection.outlook.com (HELO NAM04-SN1-obe.outbound.protection.outlook.com) ([216.32.180.82]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2018 08:28:58 +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=CCpJ1mK6jGs3/Yv1Ise25TAlb1ptx80S6XQQY3DCA1c=; b=SnG21gE7p93D1oCmqks3nqnzq746fToH/GO/iRLJYZiydz90xw051t5vMdcUjlaSVaJbJVFhGZTKHuXbgLAsk6fzEZ43RaN62d73Km1bZGtxi0Wza6xUukY7XTsLZ9JUSLl02EVpaP9vq+fSVpYm/GtVuWtcwFKUTK/PS7caObA= 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 DM5PR04MB0397.namprd04.prod.outlook.com (2603:10b6:3:9d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.930.20; Tue, 10 Jul 2018 00:28:55 +0000 From: Alistair Francis To: qemu-devel@nongnu.org Date: Mon, 9 Jul 2018 17:28:47 -0700 Message-Id: <89f23a990c112dcf46597cea815a87965ab22032.1531182400.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: BYAPR02CA0005.namprd02.prod.outlook.com (2603:10b6:a02:ee::18) To DM5PR04MB0397.namprd04.prod.outlook.com (2603:10b6:3:9d::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1bd7d41c-03cc-43e1-d957-08d5e5fc1f40 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600053)(711020)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(48565401081)(2017052603328)(7153060)(7193020); SRVR:DM5PR04MB0397; X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 3:ZO1Jqc7FuZcvMCV5pRmV9yU7vaE8ozLf38hV4JSzkOpUJkJTPOEAU9yh0k2B90n5yX2AyqcHXC5uokr+rEgIyBSvzL81liGnV1Jj5rw2pgpe1cm3tlL6Q7Ee56wgJnCunpKjfMNF3jDDtyhW13lQo8XW2EYbR9I7HK7if+5GmRYjD+vI5kqvA+dEGgQu0N1ACgMtmcGkpuJ65BlYn3NfDonXgtZOD+YyletR0ObN4QBepQNapwr1Q7DW9ShEVFCC; 25:jkAQGZ7LyZWEhjtrzXS/dvfIm5kd3JYWpBCwRGTWsC5Q69TpZaw8ry1L0DTqlHCUYNsjg2QzwVkHp7frwVetL2KSQWNf3/LOFb5qF3FLXgKppu9C2+U2CFVhoDSQP/K+L+RzWZrbpGv3CfsBEKIDWKqJj/d/4f+aQmRC8ci2x2yDaOIv/NqU5JNqRgPMdr5XMmOygTdiViXtn15QYaveDDi/DGV9B5R2+tCiy1ohbSgD8BbL65TIpC66xkKyVJVj93gOobl190id3HSPILtnlPJNW8n2Cc9Jqnb64Aa14cfjt673iz0E2CFinSQOlKzQ2eTiXOgJalRcb058/DlaLw==; 31:xfhBJWGIkZa1yGxDpAEEBCO8bBVXb1KEtbKXtv8ipol7MoB7W1yZrPeprNURsyW46znPG5MklEsQ1gTkepYrrSG357WtqpfFoD07Lp7syCSSv+xaCKuqcASloKF6KKvTW82h2UubD54Ze7ErtnfUy4LVsw+xIhIrOAJDwKsmriPEUiF43s+z1JTL8QZ5HEGv+x+YNjkB4XRbxNrWLiXOUPcG2Zp6J3wUWrkJXf7inws= X-MS-TrafficTypeDiagnostic: DM5PR04MB0397: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 20:fJcAsLTsGzS7NjgV0m2m4ZvJl9jZfLZ6dYBF+tSLefGV+4Acd4ZrPTT0Xo7YzbWX8sJTZ37OG2/zmtFm3Wi9I16JZcE8Y4ohpuZp3dmwzlnp1ty4AVuCTe4iFG5Ib0+Wp0Q4cbqxWzdTgwrfYMrLDo79gQpS0jW/HFw+uVUOoFWJSOAqORIaQSGLESYTfs4hu4jraLknNLsGQVJA2qDDqeTErLPTFYhEidLMed7jRDd/gcYsFP46uRlzyVVWd+R9wVJm9JmBmCgI+8dz5vqUDDFKzDduYFjynKbBAcTV7qVYl+eqnEODe57M4/5ZsQApQ1+DN5RhSGVDdGtD2yAqjjX/jvp7CzIyknaPI1WAF8SHvhAlZBscvWz0DCdqQWYY/BxpfmZCRpHek+/mrjvx0AEN1wiqf/2/7eco0dTg3TuWGrB9b6hbLDFgFrfLLBLKbw4eaB40KiJdd3VWjXCbkiNcB/qNJYohDTbAEJie2ufEU85dbr6KU7AIR1SPT+J6; 4:miHwQ3OeRjyJH82CfEwtaA14tgIO4H0qlwhNjLYOA5r1bMMPgA4p9LbZfk3MDYY3/Y+S5Sb3OPwBRMLB2HFX2FHbrPge+3jF2FAdf+BrXpWcOJE7SPV9Dg7nPQP8B2FC/yOOVsURYgyAIzT0C/Sf+VvU2tHRs9wE1L9+sNove/EMtzEEBcOJ+vd6XgitKSktEDKc6OsLXvqUUQ041BB4BN6zRf3PyqQ6td2QWuiA8qMcfdj5SOF1LuiroitgQnxbiFu5yMKQdMz7LKjr0rtupmIp9o3BjX9KVh8nqBUmHochXHL0NHNUZYkVWQ7H7NTR 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)(5005006)(8121501046)(93006095)(93001095)(3231311)(944501410)(52105095)(10201501046)(3002001)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:DM5PR04MB0397; BCL:0; PCL:0; RULEID:; SRVR:DM5PR04MB0397; X-Forefront-PRVS: 0729050452 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(39860400002)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(16526019)(186003)(2616005)(6512007)(81156014)(8936002)(86362001)(6666003)(44832011)(105586002)(50226002)(305945005)(14444005)(36756003)(68736007)(26005)(476003)(6486002)(81166006)(2351001)(106356001)(486006)(11346002)(956004)(8676002)(446003)(478600001)(53936002)(316002)(52116002)(47776003)(97736004)(66066001)(39060400002)(16586007)(386003)(6506007)(2906002)(2361001)(72206003)(76176011)(48376002)(50466002)(7736002)(25786009)(3846002)(6916009)(6116002)(5660300001)(4326008)(118296001)(51416003); DIR:OUT; SFP:1102; SCL:1; SRVR:DM5PR04MB0397; 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; DM5PR04MB0397; 23:LN58fCjoIaLRIZZRo1S90wgZVjehIfMP0pw8iyMyv?= SGMhaeCxmJnmUUaqRAwJk8gEAutDAyvbWmta2ZCT3Tb8caGmgyC5698Y996YPdEeXVE0r1bObiAQ9vKyMWlKA1mB0R9QpdvB0uqOZzCys0Ux3SNDOsFtkhv2QbZXiiTsU6ba40msv0yRf8wDIvy2OibNgWsAOLfZVR4UDa2CP/YL/fi9L7l38otZTPQRH13pClt5iwtH0UH6lvM2Nq/IxL4W8126jyhn6qjjyyblpKkAHr/N01yNsrVNzInO5mURjwylCKTvTgwOtHLWCt4fpLgMCFpqtxq/gTPBewFZx8djK7SanK9tXnZ1gvSK3axYgV3ZshR/r6t5CF1DRYFQVIlSqg+tGoGuKgfIIZeVhiEoFpx77NSKB3A9cGizlU6M6xBNt3SqgyrDOOX7sj41VFbpPdU06VVh5AWwBP609YAy4o6TWlet67l9zo7iSX9fqUmJ4KjKz4N4uo5Rsp4WkDrNtLpFfjqTQnmkLOltI77cVdU36M6I4AhP76nPxwvBND/ydccM86lJe3n9XRUPE0IGvgqLvMEjWfRkPhYQW2nO9cHDGTD+a+Ug8RoauIMl/LROG3dDEuASg7oo/x0SYwkwRUdo7WUNV1PmZpu6/a4sBgyLJoH+H275bdaxPp+lBAX0iFQou3HvJ950/oEhZPVY0KTVmo/df+eJS4R1mgi7dcWmFj4h7yY8AMqDRuP8n7+kjMyKWNj498VG1c3Gk+YOeLpEYl3pruUEV8W0A+leav5bn4N9fwKWPAsWh1cjNu4yfHmjL4xGKOrf9G/9YpupY55Bdkjv+qlCRMt5y7T34ESnmQ5uVgg8G6jtmszRM+sLKBKqKu8xRvDpjqopNqyxZPD2FZX4gZTjO/y6hj3w7DktsE2AX6AEX9n9fQggYQtZWdmFKcsbciTy81Kli4x107oHdpbW3i+ugfoLen95jlKYuTwCHGoNcqDUjIzvh7z6EUXyr4o1IHrkppr3MV61fDe1Sht7y3/b4p+0K+CsTp0hdPYUMQb8cXVJkqkVTxvP07ZzIFct5MxsCCqds83DhZltNPleyyY6s24ncGugVX3AcS4Gz1t1uHU1v6B+4YKhJu3diHosqBuPli/XaaaptktR9fnFgG+TIngvToaihDVr+UAHFKMeVo7SOzELELX5Im3Sz4wJnsZJ4WEeHLBi94cX3N37LDXLt0W6JEGBDrPDsT8qG9pKIqyQ/jBRDSNbV9UpTxRjnUz90TpaaDiLnr/JYgUU9JwUPJpaYehNepI8GxF/KvEEEg3+QZEvUk= X-Microsoft-Antispam-Message-Info: U8c0wPDYhmFA6T2v6xFKUo/RN5mt7dmW/Vjy2bFpAimPrYnecasDhELJCgVIGM4LsxQeAz51iNnpgRshcdplEk9DotAMrfBkmaqiTGXPFNzIxX0zfwmCldn4rtNNJr1tEBBshL/e244CYzHgL5Nn+nLD/RKq2CZqzJsUa2z/8ZIELyGPHDq0X2qVnTOM5jSgq+zhNCHhwW9G+WvQcEgvqERCthDarrAW0KLJK22wan6lBuwkqBbBWyLcK0D0hUGWu3PtfAWp6FiMMLwkLg5GinM1yllOlr+1hlSioK+aQRatiOMMxqSny+fXPCrQXc7sAE7SRmigfI66rNrC3U9uzruRw20iFx1zVyTNuRsUleY= X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 6:MtvcTx+MLnA8RYp/AKRDiAakyl5KVIVs3bbMHsNK9kWZy2syGNaVV7zJfmTUyTnrSdrME0IngSBwBJIb4/9+V6AdmpGF8tENCYgSVrksDqUX0cpr36mKt3v1QGZOm9zXjpDTcIvMuk+UEhp5yxYI0w96Vzr35kPyOKbiusf1k7zIqhD+P6ndi6HbhOE6VvC9/4uD4U0Ip2FjPmI2mJBkmPUkyC1/nojV3c8/oUXS0386vwBVBQMJOm0MiX7imS1A5ON1/0UOWSUyeu5UWsaQIkHfG5972A1Pi3QjYAT5kNc0Kw5nYV5zT+F9rdQsWd+VdJHEb1VY26SbAhzR+ypxM07zk83x8bEpnKefjQwfe2KJGVqexMQazVACalFQauZ54cUf1mqXJhE9A93780pS+MODRpLDOW9D7x82czppnduz5OG8urzFz7JHsnws06yMOdzNX9UiBp0VhiEG5v/C7w==; 5:+uW1nf5vsy/6+fFtbqZz/WgFliwaIWZlWYcwsrbv/ohkQy1G0OGoCpKxScRVyJxZ6/uXyCtJAzjhlsVK91Vn4uUjyEq50MiBSYUjR4YlcubF5K5962Ympcu/XpVV3Yvn7ht/cTEkMNok6QeETd7y0rlrW+awimCI81VIxkQXYwM=; 24:GMBr6q83A09EEtAU6vy2vdTWIuZ6kh+s9QLAC+apvTvavIGJ1qGtGqJy++6vGb8IECcME1uvTEp8L8gnYWrrOFbsIfWS1X8Lu0qp2r2GsFE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR04MB0397; 7:Z3EPc6PhSR9dBxQkdXN8O8swChthGzKRJfTrJ6pGbjcx7Ha3c4OHDkv9e7vQQIPu7fBsXZmPEjZVfYNsd/7z4ca2E69K3WhMsT/GJMekP+NDsUj4EnofdgV+V2T7D+zi8a8eCPfql/Zt9RSMsZrv1B+vHV4cFkKyMztKf6gIGnXGGHr0c9uhC5aL0O6BhZLVXwYKpLLqndMy1DcW4/mELM/B5cslwbKaU4yam8rJq7bEevJTVvncCNiuwKvu3Dsc; 20:fpW8J529qLnbghHvK4wm1Hn21yL5guPGZ/l7QUT+VwUwknth0YB+t9C/GaxRtfNYpVEF+OrvVYPmoszSNBXiDMT0KIQr2yZMCfCcEB7uR7j05N6u+FKUln4t8JKDUCYl2Tyk7AQFueaCsQAqvuGAuVaSDEQ88aSBQXoEVx0/xAw= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2018 00:28:55.9104 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1bd7d41c-03cc-43e1-d957-08d5e5fc1f40 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR04MB0397 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v2 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, mjc@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 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 3a6ffeb437..48164f852c 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; @@ -374,6 +434,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 };