From patchwork Tue Dec 18 12:41:43 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasilis Liaskovitis X-Patchwork-Id: 207105 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 D39792C0398 for ; Wed, 19 Dec 2012 00:21:49 +1100 (EST) Received: from localhost ([::1]:57824 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkwWP-00019A-Sn for incoming@patchwork.ozlabs.org; Tue, 18 Dec 2012 07:43:45 -0500 Received: from eggs.gnu.org ([208.118.235.92]:46192) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkwVJ-0008CY-V4 for qemu-devel@nongnu.org; Tue, 18 Dec 2012 07:42:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TkwVI-0008UF-2p for qemu-devel@nongnu.org; Tue, 18 Dec 2012 07:42:37 -0500 Received: from mail-bk0-f51.google.com ([209.85.214.51]:42956) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkwVH-0008U3-Ks for qemu-devel@nongnu.org; Tue, 18 Dec 2012 07:42:35 -0500 Received: by mail-bk0-f51.google.com with SMTP id ik5so287158bkc.24 for ; Tue, 18 Dec 2012 04:42:34 -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=BSvO/7A1hMZn3BWRO21ohRYFImAogm3V1/gwV0LkN+A=; b=Ch/3zd9t1BrKRF2+JL1Sto8gSa0jDXKDRJcSJ0G0E/RN6uQ+0/uCgZaPoeOfhfS20Q T/00zVia3l1NcRxF2kaJSq6+CVNTmg+Qr8SR9ydc73kvULCNT+pa9XC1ygwyQOZgJioa KCHd7HI+KxB/vIniHZMsgzuIcDluLHK/WUKu/k8wNJKPA/a3JQ38+DzGx3LxHNHj5+Qf 0Ah0ca2idIqdh6Bq1+uedj7FNpJYl56iosupDFb0igUWZt7MNyRww1sGHppFa2DWeSBr NJxOKLdOqVj0OGe6u1wtPJu2QECZ8+pVdm+QmF5lYc05Ie+8J6d5APA3qvOznHBi7PAg T/Og== X-Received: by 10.204.149.204 with SMTP id u12mr654713bkv.108.1355834554611; Tue, 18 Dec 2012 04:42:34 -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.33 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 18 Dec 2012 04:42:33 -0800 (PST) From: Vasilis Liaskovitis To: qemu-devel@nongnu.org, seabios@seabios.org Date: Tue, 18 Dec 2012 13:41:43 +0100 Message-Id: <1355834518-17989-16-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: ALoCoQloz5uX03JDoVFaraBIoEec0TyHtLXPCAu6h7lqmqlbp24fzYEVvU0wDYQHHFEHJJm8a7Pt X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.214.51 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 15/30] q35: 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 Create memory buses and introduce function to adjust memory map for hotplug-able dimms. Signed-off-by: Vasilis Liaskovitis --- hw/pc_q35.c | 1 + hw/q35.c | 27 +++++++++++++++++++++++++++ hw/q35.h | 5 +++++ 3 files changed, 33 insertions(+), 0 deletions(-) diff --git a/hw/pc_q35.c b/hw/pc_q35.c index 3429a9a..e6375bf 100644 --- a/hw/pc_q35.c +++ b/hw/pc_q35.c @@ -41,6 +41,7 @@ #include "hw/ide/pci.h" #include "hw/ide/ahci.h" #include "hw/usb.h" +#include "fw_cfg.h" /* ICH9 AHCI has 6 ports */ #define MAX_SATA_PORTS 6 diff --git a/hw/q35.c b/hw/q35.c index efebc27..cc27d72 100644 --- a/hw/q35.c +++ b/hw/q35.c @@ -236,12 +236,39 @@ static void mch_reset(DeviceState *qdev) mch_update(mch); } +static hwaddr mch_dimm_offset(DeviceState *dev, uint64_t size) +{ + MCHPCIState *d = MCH_PCI_DEVICE(dev); + hwaddr ret; + + /* if dimm fits before pci hole, append it normally */ + if (d->below_4g_mem_size + size <= MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT) { + 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 int mch_init(PCIDevice *d) { int i; hwaddr pci_hole64_size; MCHPCIState *mch = MCH_PCI_DEVICE(d); + /* Initialize 2 GMC DRAM channels x 4 DRAM ranks each */ + mch->dram_channel[0] = dimm_bus_create(OBJECT(d), "membus.0", 4, + mch_dimm_offset); + mch->dram_channel[1] = dimm_bus_create(OBJECT(d), "membus.1", 4, + mch_dimm_offset); + /* Initialize paravirtual memory bus */ + mch->pv_dram_channel = dimm_bus_create(OBJECT(d), "membus.pv", 0, + mch_dimm_offset); /* setup pci memory regions */ memory_region_init_alias(&mch->pci_hole, "pci-hole", mch->pci_address_space, diff --git a/hw/q35.h b/hw/q35.h index e34f7c1..bf76dc8 100644 --- a/hw/q35.h +++ b/hw/q35.h @@ -34,6 +34,7 @@ #include "acpi.h" #include "acpi_ich9.h" #include "pam.h" +#include "dimm.h" #define TYPE_Q35_HOST_DEVICE "q35-pcihost" #define Q35_HOST_DEVICE(obj) \ @@ -56,6 +57,10 @@ typedef struct MCHPCIState { uint8_t smm_enabled; ram_addr_t below_4g_mem_size; ram_addr_t above_4g_mem_size; + /* GMCH allows for 2 DRAM channels x 4 DRAM ranks each */ + DimmBus * dram_channel[2]; + /* paravirtual memory bus */ + DimmBus *pv_dram_channel; } MCHPCIState; typedef struct Q35PCIHost {