From patchwork Fri Jul 11 07:21:04 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alvise Rigo X-Patchwork-Id: 369015 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 394631400E6 for ; Fri, 11 Jul 2014 17:22:20 +1000 (EST) Received: from localhost ([::1]:42653 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X5V9t-0008VU-VV for incoming@patchwork.ozlabs.org; Fri, 11 Jul 2014 03:22:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40390) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X5V9C-0007IY-3t for qemu-devel@nongnu.org; Fri, 11 Jul 2014 03:21:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X5V95-00065t-7s for qemu-devel@nongnu.org; Fri, 11 Jul 2014 03:21:33 -0400 Received: from mail-we0-f177.google.com ([74.125.82.177]:57601) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X5V94-00065A-UP for qemu-devel@nongnu.org; Fri, 11 Jul 2014 03:21:27 -0400 Received: by mail-we0-f177.google.com with SMTP id u56so595068wes.8 for ; Fri, 11 Jul 2014 00:21:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Wf40ukAgljyJhpqqUQT7giPelUOwjtKSZOHZAyvpiKE=; b=JU+QfjcZb/N3rJtq/ygd2aKmTB1cR8nRBETDAhFlGgq2eu779vI1JVeg2Y/uT4TG2O rJhZ+a88WV/5s42CguyCsSnfnUMrkpoZPtQTUzFbcnbgYzK4yglLXeUfa3aGClZ30ifq 1hJp3UEfMxCN40mxlxeEZiObOpRaKLe3qSKPg0YJ4n6g+eXuHAV3Q3Bcbvag14k/iRsj q7ZCY7P3LdGlX7yaBnEJJ3zFOcxcmYvCy3HTlO1jrZID40+OxEpT+Sz5QEUN8r/Txge7 LgsBxI29jczflImBjPF9bMHYWTyMF1SgYah8FJF0VZSf9B0A6wHYZKlXjIFCdsV6sbOu tXlQ== X-Gm-Message-State: ALoCoQnaUub0Mzp35YDU5h0/wOU3yXB9uAQ5PdCr7WUfEpB22M7DnAokQOB/MiJWYWQhQQgxJ5YJ X-Received: by 10.180.91.225 with SMTP id ch1mr2841423wib.34.1405063283009; Fri, 11 Jul 2014 00:21:23 -0700 (PDT) Received: from localhost.localdomain (AGrenoble-651-1-561-138.w90-52.abo.wanadoo.fr. [90.52.105.138]) by mx.google.com with ESMTPSA id fc7sm3310882wjc.37.2014.07.11.00.21.21 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 11 Jul 2014 00:21:21 -0700 (PDT) From: Alvise Rigo To: qemu-devel@nongnu.org, rob.herring@linaro.org Date: Fri, 11 Jul 2014 09:21:04 +0200 Message-Id: <1405063270-18902-3-git-send-email-a.rigo@virtualopensystems.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1405063270-18902-1-git-send-email-a.rigo@virtualopensystems.com> References: <1405063270-18902-1-git-send-email-a.rigo@virtualopensystems.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 74.125.82.177 Cc: Peter Maydell , tech@virtualopensystems.com, Alvise Rigo Subject: [Qemu-devel] [RFC PATCH 2/8] mach-virt: improve PCI memory topology definition X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Some of the unnecessary redundancy here will be decreased later in this series. Signed-off-by: Alvise Rigo --- hw/arm/virt.c | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ed9fc7a..c93152f 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -42,7 +42,6 @@ #include "qemu/bitops.h" #include "qemu/error-report.h" -#define NUM_VIRTIO_TRANSPORTS 32 /* Number of external interrupt lines to configure the GIC with */ #define NUM_IRQS 128 @@ -65,8 +64,14 @@ enum { VIRT_GIC_DIST, VIRT_GIC_CPU, VIRT_UART, +#define VIRT_UART_IRQS 16 VIRT_MMIO, +#define NUM_VIRTIO_TRANSPORTS 32 +#define VIRTIO_BASE_IRQ VIRT_UART_IRQS VIRT_PCI_CFG, + VIRT_PCI_IO, + VIRT_PCI_MEM, +#define PCI_BASE_IRQ (VIRTIO_BASE_IRQ + NUM_VIRTIO_TRANSPORTS - 1) }; typedef struct MemMapEntry { @@ -108,12 +113,15 @@ static const MemMapEntry a15memmap[] = { /* ...repeating for a total of NUM_VIRTIO_TRANSPORTS, each of that size */ /* 0x10000000 .. 0x40000000 reserved for PCI */ [VIRT_PCI_CFG] = { 0x10000000, 0x01000000 }, + [VIRT_PCI_IO] = { 0x11000000, 0x00010000 }, + [VIRT_PCI_MEM] = { 0x12000000, 0x2e000000 }, [VIRT_MEM] = { 0x40000000, 30ULL * 1024 * 1024 * 1024 }, }; static const int a15irqmap[] = { [VIRT_UART] = 1, - [VIRT_MMIO] = 16, /* ...to 16 + NUM_VIRTIO_TRANSPORTS - 1 */ + [VIRT_MMIO] = VIRTIO_BASE_IRQ, /* ...to 16 + NUM_VIRTIO_TRANSPORTS - 1 */ + [VIRT_PCI_CFG] = PCI_BASE_IRQ, }; static VirtBoardInfo machines[] = { @@ -351,10 +359,14 @@ static void create_pci_host(const VirtBoardInfo *vbi, qemu_irq *pic) SysBusDevice *busdev; uint32_t gic_phandle; char *nodename; - hwaddr base = vbi->memmap[VIRT_PCI_CFG].base; - hwaddr size = vbi->memmap[VIRT_PCI_CFG].size; - - nodename = g_strdup_printf("/pci@%" PRIx64, base); + hwaddr cfg_base = vbi->memmap[VIRT_PCI_CFG].base; + hwaddr cfg_size = vbi->memmap[VIRT_PCI_CFG].size; + hwaddr io_base = vbi->memmap[VIRT_PCI_IO].base; + hwaddr io_size = vbi->memmap[VIRT_PCI_IO].size; + hwaddr mem_base = vbi->memmap[VIRT_PCI_MEM].base; + hwaddr mem_size = vbi->memmap[VIRT_PCI_MEM].size; + + nodename = g_strdup_printf("/pci@%" PRIx64, cfg_base); qemu_fdt_add_subnode(vbi->fdt, nodename); qemu_fdt_setprop_string(vbi->fdt, nodename, "compatible", "pci-host-cam-generic"); @@ -363,11 +375,12 @@ static void create_pci_host(const VirtBoardInfo *vbi, qemu_irq *pic) qemu_fdt_setprop_cell(vbi->fdt, nodename, "#size-cells", 0x2); qemu_fdt_setprop_cell(vbi->fdt, nodename, "#interrupt-cells", 0x1); - qemu_fdt_setprop_sized_cells(vbi->fdt, nodename, "reg", 2, base, 2, size); + qemu_fdt_setprop_sized_cells(vbi->fdt, nodename, "reg", 2, cfg_base, + 2, cfg_size); qemu_fdt_setprop_sized_cells(vbi->fdt, nodename, "ranges", - 1, 0x01000000, 2, 0x00000000, 2, 0x11000000, 2, 0x00010000, - 1, 0x02000000, 2, 0x12000000, 2, 0x12000000, 2, 0x2e000000); + 1, 0x01000000, 2, 0x00000000, 2, io_base, 2, io_size, + 1, 0x02000000, 2, 0x12000000, 2, mem_size, 2, mem_size); gic_phandle = qemu_fdt_get_phandle(vbi->fdt, "/intc"); qemu_fdt_setprop_sized_cells(vbi->fdt, nodename, "interrupt-map-mask", @@ -381,9 +394,9 @@ static void create_pci_host(const VirtBoardInfo *vbi, qemu_irq *pic) dev = qdev_create(NULL, "generic_pci"); busdev = SYS_BUS_DEVICE(dev); qdev_init_nofail(dev); - sysbus_mmio_map(busdev, 0, base); /* PCI config */ - sysbus_mmio_map(busdev, 1, 0x11000000); /* PCI I/O */ - sysbus_mmio_map(busdev, 2, 0x12000000); /* PCI memory window */ + sysbus_mmio_map(busdev, 0, cfg_base); /* PCI config */ + sysbus_mmio_map(busdev, 1, io_base); /* PCI I/O */ + sysbus_mmio_map(busdev, 2, mem_base); /* PCI memory window */ sysbus_connect_irq(busdev, 0, pic[4]); sysbus_connect_irq(busdev, 1, pic[5]); sysbus_connect_irq(busdev, 2, pic[6]);