From patchwork Thu Oct 4 20:06: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: 979147 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="gx01slea"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="X3T61GuM"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42R3rY1VzRz9sBk for ; Fri, 5 Oct 2018 06:09:33 +1000 (AEST) Received: from localhost ([::1]:58806 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g89wA-0001Iw-GE for incoming@patchwork.ozlabs.org; Thu, 04 Oct 2018 16:09:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38856) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g89tN-0008Eh-8q for qemu-devel@nongnu.org; Thu, 04 Oct 2018 16:06:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g89tI-0007hl-Tj for qemu-devel@nongnu.org; Thu, 04 Oct 2018 16:06:37 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:31189) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1g89tI-0007bx-HP for qemu-devel@nongnu.org; Thu, 04 Oct 2018 16:06:32 -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=1538683592; x=1570219592; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=rmyP7lC/3WWN17yldvR9N3TXffRoD+BWhqhhJHHx924=; b=gx01slea0lhcDFH1wXqYdl7J399xIiIJ4gMpZrnjPJjAPuunn5QErDzN 2RK7cMDe2IC+63VIakjlxV0LuSE2k8EQA5jupp0ZKh5aR83esRToaUqGB ZgVwzHMJGRz7ACfYSRZ8HXlYfiwHx/nPL20NtjKhdt9xaTWOqkqcht4CM 2y3inYB4RhKqrugJj87ZcOb6ke2riM+Cx5XrMqPhlUUWik0KbKihmdp3/ BUhwDytuvrwbysIWyTIrtnJQJVwEeRMHTOcC2CSfINT61njPvlXpkwpeC EZg7M8rlD3RR5GE360mf3cWcpgkeC5sl6fmDEfHvUazGc7BX7+L883ukK w==; X-IronPort-AV: E=Sophos;i="5.54,341,1534780800"; d="scan'208";a="195573110" Received: from mail-bl2nam02lp0086.outbound.protection.outlook.com (HELO NAM02-BL2-obe.outbound.protection.outlook.com) ([207.46.163.86]) by ob1.hgst.iphmx.com with ESMTP; 05 Oct 2018 04:06:30 +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=Rwxme/cgtNzRgFkqS6szo2qPGZz1Khr09O0xEjf27Tk=; b=X3T61GuMty6T190iLMK2PvpViQNwE1XJh5ygWCfo+mRtuS/AOtMMiKHlrY1D+8cFIGPjFgaf8OmbDje3B6nMGXzMeB3Qp9HXT/T258WR/U+AWg15LAR9gq0cDgS8W7TtQQuAwhpNH1s1AoNii4WfUIwXowZ+gCTN1FMt1VOwLTE= Received: from MWHPR04MB0401.namprd04.prod.outlook.com (10.173.48.18) by MWHPR04MB0623.namprd04.prod.outlook.com (10.172.166.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1185.25; Thu, 4 Oct 2018 20:06:28 +0000 Received: from MWHPR04MB0401.namprd04.prod.outlook.com ([fe80::f94c:102e:8dce:7c02]) by MWHPR04MB0401.namprd04.prod.outlook.com ([fe80::f94c:102e:8dce:7c02%6]) with mapi id 15.20.1185.026; Thu, 4 Oct 2018 20:06:28 +0000 From: Alistair Francis To: "qemu-devel@nongnu.org" , "mjc@sifive.com" Thread-Topic: [PATCH v5 2/5] hw/riscv/virt: Connect the gpex PCIe Thread-Index: AQHUXB28PLPyYHsWDkKwrNi7L5u4Qg== Date: Thu, 4 Oct 2018 20:06:28 +0000 Message-ID: <727db304cd3676f89da0f2f9c5ba12e65795683c.1538683492.git.alistair.francis@wdc.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: BYAPR11CA0058.namprd11.prod.outlook.com (2603:10b6:a03:80::35) To MWHPR04MB0401.namprd04.prod.outlook.com (2603:10b6:300:70::18) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [199.255.44.250] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; MWHPR04MB0623; 6:mK40H/h/JQLJR2WfsvJx0KlGoMB7lWKoQQMVvHxg0vUppfuWktH7zeQ3mkec1o9vpZkfIm6Drvkk+fFHbPH0/rv9+uARYh3x4uZXs1T/5rS8LUZ9fwgBHSYkeyw8kHr5Vw9ztperikmZrQvIoTvt1IJJ9dCXjmIDXTqM1m/NgIrCfcFwOe/OMhsSHfU09b4lt8pf3vcD2p+Jema9Zx8kueU2lWso1JbIcspnry5ZTq7vvCbvSMgmXKinfOLxkkDKL90WIRKqfeb4snUtvZg8SrVw9i2jpVqxF01n4AgvkzckzadnD2WZNwlfbKbhiOuBVzle1V9isVV5VYz4d71PemY8bo/N+jOBGVvZ1fs8WE2qhTyeuOmjl3YCkCmrT2Glaz9GoGhcY9cA8OswQ+qSpm1duRkZrA/LS0AkbIXWBI/GF0vnG6T24+QmL9PqyD/xtNUKYrEWfxbU0PmXIFsFxw==; 5:D1BwaL4P4pyrJ6rPsvlbMIJ+os75hTt+6Pl7I31c8WFuPH+HXUes0DzC18xQKRbljMJ0tMCREwyC8otF4Fk/4Ar1ZzMzsdvevITPGExcvofC1TsI1NHHsDlI+X4wCCUxCcEcdoB6Gx8wLek+xguGs9wrCvFl2kMOm2gteaXFj6E=; 7:sb7osppy8hqy/PugV07txwBcgHRt+Rs9dq+jgPAne1zsRseFVpyF7QtDbUkA8MKJHudH+oTOm2HrfK/iHock+Lmb23YbZuDEPGxOpC62y5WGthjETY3MpeBHPyaOBxAgYRJi+G6UGaRC+TIc9SFgVx3MMWZfKeER/Ym3l64M+70DcWbkNWdCz2A/3WYcgar9Q+jCZYT08KUojOuxuQrR9cId+hYTWRovS+JSh5/2lDI+X3cQjgbW8kO/Am/as6xX x-ms-office365-filtering-correlation-id: 92c6c8ab-d7d8-47da-153f-08d62a34deb6 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:MWHPR04MB0623; x-ms-traffictypediagnostic: MWHPR04MB0623: wdcipoutbound: EOP-TRUE 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)(10201501046)(3002001)(3231355)(944501410)(52105095)(6055026)(149066)(150057)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123560045)(201708071742011)(7699051); SRVR:MWHPR04MB0623; BCL:0; PCL:0; RULEID:; SRVR:MWHPR04MB0623; x-forefront-prvs: 0815F8251E x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(366004)(136003)(39860400002)(396003)(376002)(346002)(199004)(189003)(50226002)(81156014)(14454004)(6436002)(86362001)(105586002)(8936002)(6512007)(99286004)(106356001)(81166006)(6116002)(110136005)(8676002)(36756003)(54906003)(3846002)(102836004)(44832011)(2501003)(256004)(6486002)(5250100002)(53936002)(66066001)(39060400002)(7736002)(6506007)(2900100001)(118296001)(71200400001)(76176011)(26005)(305945005)(11346002)(2906002)(52116002)(446003)(2616005)(486006)(71190400001)(386003)(186003)(5660300001)(4326008)(25786009)(478600001)(97736004)(316002)(68736007)(72206003)(476003); DIR:OUT; SFP:1102; SCL:1; SRVR:MWHPR04MB0623; H:MWHPR04MB0401.namprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; x-microsoft-antispam-message-info: feeifjf7hHJKPYDA8cGbG+iP2WKVa2kAJUTHIUUPyWRCPYRKzK6HyIHLYNdxkpq4eLo8f5JFzoguJZuTuRlACemAxO+fQtxoGWT8/KatAtnkMTrCxfphNVL9iRh2Tm4XH0U0xmMieKSGI3HVTRJzRYF4YAOnIu//qndCA7y/mfuX8Ucq6pjTJrqTnoEjBVgSdsRO48Yt1oX3pPukL2irLAGcIptztlxQzM6bsRaMcXlH92nxFzABDqvWrHIeh0uAFFaIO/H8sviFTn2fNEvmzRkUVpzv0wJLuFCKKRNOLcG3FZNnJwddWJInzvQ4PF3uqnDYPvQYXrPswgzKv4aFW33YU6jKolFIrn29xkJ8Opk= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92c6c8ab-d7d8-47da-153f-08d62a34deb6 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Oct 2018 20:06:28.7368 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR04MB0623 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 68.232.141.245 Subject: [Qemu-devel] [PATCH v5 2/5] 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" , "palmer@sifive.com" , Alistair Francis , "stephen@eideticom.com" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 | 6 ++- default-configs/riscv64-softmmu.mak | 6 ++- hw/riscv/virt.c | 58 +++++++++++++++++++++++++++++ include/hw/riscv/virt.h | 4 +- 4 files changed, 71 insertions(+), 3 deletions(-) diff --git a/default-configs/riscv32-softmmu.mak b/default-configs/riscv32-softmmu.mak index 7937c69e22..3e3d195f37 100644 --- a/default-configs/riscv32-softmmu.mak +++ b/default-configs/riscv32-softmmu.mak @@ -1,7 +1,11 @@ # Default configuration for riscv-softmmu +include pci.mak + CONFIG_SERIAL=y CONFIG_VIRTIO_MMIO=y -include virtio.mak CONFIG_CADENCE=y + +CONFIG_PCI_GENERIC=y +CONFIG_PCI_XILINX=y diff --git a/default-configs/riscv64-softmmu.mak b/default-configs/riscv64-softmmu.mak index 7937c69e22..3e3d195f37 100644 --- a/default-configs/riscv64-softmmu.mak +++ b/default-configs/riscv64-softmmu.mak @@ -1,7 +1,11 @@ # Default configuration for riscv-softmmu +include pci.mak + CONFIG_SERIAL=y CONFIG_VIRTIO_MMIO=y -include virtio.mak CONFIG_CADENCE=y + +CONFIG_PCI_GENERIC=y +CONFIG_PCI_XILINX=y diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 005169eabc..9bd2c10581 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" #include @@ -55,6 +57,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) @@ -233,6 +236,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", + "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 = 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); @@ -260,6 +289,31 @@ static void *create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap, return fdt; } + +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 = qdev_create(NULL, TYPE_GPEX_HOST); + + 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); + + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq); + + return dev; +} + static void riscv_virt_board_init(MachineState *machine) { const struct MemmapEntry *memmap = virt_memmap; @@ -382,6 +436,10 @@ static void riscv_virt_board_init(MachineState *machine) qdev_get_gpio_in(DEVICE(s->plic), VIRTIO_IRQ + i)); } + 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), 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 };