From patchwork Tue Dec 18 12:41:42 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasilis Liaskovitis X-Patchwork-Id: 207103 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 1F5052C0089 for ; Wed, 19 Dec 2012 00:20:21 +1100 (EST) Received: from localhost ([::1]:57352 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkwW6-0000tz-Hi for incoming@patchwork.ozlabs.org; Tue, 18 Dec 2012 07:43:26 -0500 Received: from eggs.gnu.org ([208.118.235.92]:46175) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkwVH-00086Z-R3 for qemu-devel@nongnu.org; Tue, 18 Dec 2012 07:42:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TkwVG-0008Tv-5Z for qemu-devel@nongnu.org; Tue, 18 Dec 2012 07:42:35 -0500 Received: from mail-bk0-f52.google.com ([209.85.214.52]:64704) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkwVF-0008To-VR for qemu-devel@nongnu.org; Tue, 18 Dec 2012 07:42:34 -0500 Received: by mail-bk0-f52.google.com with SMTP id w5so289137bku.11 for ; Tue, 18 Dec 2012 04:42:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:x-gm-message-state; bh=5CHm9/jDeLd6Dsouy9TqYn4KGQr70Jc/0k2z7LPtFkg=; b=EAkU0v+cqinKBR078tkKUz3a6LhV7246ioBPeszlu3WqiYt1UKGboQziBZt0jElCfa VZ62Q/Qf9HKWzJfB3Qdze8y74/lc2n4zen+QEO/LdNnXzS0jFT1Hj1++KAEbV/anfpnH FHttmxOH7pkIAODP2BxXtWnIVM1i08RsVph96cRwkC3PQcINWxFMH5USTF0nq5jTS5vj vwwz/Bcebtid4iF2XSYEuemuSyB7bMHsnGC2xSui1XtAIkWoWs4PDELKM7NP//XJ29if Lp+MECP39ymOENw86xtORxKqw04M3QWOPUXB4b94T/2GiY3i59w4tFu34AdWkPfG6cB/ w2dw== X-Received: by 10.204.157.26 with SMTP id z26mr660092bkw.101.1355834552964; Tue, 18 Dec 2012 04:42:32 -0800 (PST) Received: from dhcp-192-168-178-175.ri.profitbricks.localdomain ([62.217.45.26]) by mx.google.com with ESMTPS id f24sm1169954bkv.7.2012.12.18.04.42.31 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 18 Dec 2012 04:42:32 -0800 (PST) From: Vasilis Liaskovitis To: qemu-devel@nongnu.org, seabios@seabios.org Date: Tue, 18 Dec 2012 13:41:42 +0100 Message-Id: <1355834518-17989-15-git-send-email-vasilis.liaskovitis@profitbricks.com> X-Mailer: git-send-email 1.7.9 In-Reply-To: <1355834518-17989-1-git-send-email-vasilis.liaskovitis@profitbricks.com> References: <1355834518-17989-1-git-send-email-vasilis.liaskovitis@profitbricks.com> X-Gm-Message-State: ALoCoQnn1kHx12+ac7nXQt+7uK0uz5G5rWjevP8An+oC+wAUsoqv8tOSotBLarQ8jTB4ZVd2OhKq X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.214.52 Cc: Vasilis Liaskovitis , pingfank@linux.vnet.ibm.com, gleb@redhat.com, stefanha@gmail.com, jbaron@redhat.com, blauwirbel@gmail.com, kevin@koconnor.net, kraxel@redhat.com, anthony@codemonkey.ws Subject: [Qemu-devel] [RFC PATCH v4 14/30] piix_pci: Add i440fx dram controller initialization 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 Also introduce function to adjust memory map for hotplug-able dimms. Signed-off-by: Vasilis Liaskovitis --- hw/pc_piix.c | 6 +++--- hw/piix_pci.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/hw/pc_piix.c b/hw/pc_piix.c index 6a9b508..fe995b9 100644 --- a/hw/pc_piix.c +++ b/hw/pc_piix.c @@ -95,9 +95,9 @@ static void pc_init1(MemoryRegion *system_memory, kvmclock_create(); } - if (ram_size >= 0xe0000000 ) { - above_4g_mem_size = ram_size - 0xe0000000; - below_4g_mem_size = 0xe0000000; + if (ram_size >= I440FX_PCI_HOLE_START) { + above_4g_mem_size = ram_size - I440FX_PCI_HOLE_START; + below_4g_mem_size = I440FX_PCI_HOLE_START; } else { above_4g_mem_size = 0; below_4g_mem_size = ram_size; diff --git a/hw/piix_pci.c b/hw/piix_pci.c index 7ca3c73..9866b1d 100644 --- a/hw/piix_pci.c +++ b/hw/piix_pci.c @@ -125,6 +125,25 @@ static const VMStateDescription vmstate_i440fx = { } }; +hwaddr i440fx_pmc_dimm_offset(DeviceState *dev, uint64_t size) +{ + PCII440FXState *d = I440FX_PCI_DEVICE(dev); + hwaddr ret; + + /* if dimm fits before pci hole, append it normally */ + if (d->below_4g_mem_size + size <= I440FX_PCI_HOLE_START) { + ret = d->below_4g_mem_size; + d->below_4g_mem_size += size; + } + /* otherwise place it above 4GB */ + else { + ret = 0x100000000LL + d->above_4g_mem_size; + d->above_4g_mem_size += size; + } + + return ret; +} + static void i440fx_pcihost_initfn(Object *obj) { I440FXState *s = I440FX_HOST_DEVICE(obj); @@ -148,8 +167,8 @@ static int i440fx_pcihost_init(SysBusDevice *dev) sysbus_add_io(dev, 0xcfc, &pci->data_mem); sysbus_init_ioports(&pci->busdev, 0xcfc, 4); - b = pci_bus_new(&s->parent_obj.busdev.qdev, NULL, s->mch.pci_address_space, - s->mch.address_space_io, 0); + b = pci_bus_new(&s->parent_obj.busdev.qdev, "pci.0", + s->mch.pci_address_space, s->mch.address_space_io, 0); s->parent_obj.bus = b; qdev_set_parent_bus(DEVICE(&s->mch), BUS(b)); qdev_init_nofail(DEVICE(&s->mch)); @@ -169,6 +188,13 @@ static int i440fx_initfn(PCIDevice *dev) pci_hole64_size = (sizeof(hwaddr) == 4 ? 0 : ((uint64_t)1 << 62)); + + /* Initialize i440fx's DRAM channel, it can hold up to 8 DRAM ranks */ + f->dram_channel0 = dimm_bus_create(OBJECT(f), "membus.0", 8, + i440fx_pmc_dimm_offset); + /* Initialize paravirtual memory bus */ + f->pv_dram_channel = dimm_bus_create(OBJECT(f), "membus.pv", 0, + i440fx_pmc_dimm_offset); memory_region_init_alias(&f->pci_hole, "pci-hole", f->pci_address_space, f->below_4g_mem_size, 0x100000000LL - f->below_4g_mem_size);