From patchwork Tue Jun 22 08:57:48 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isaku Yamahata X-Patchwork-Id: 56432 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 67A6DB6EF0 for ; Tue, 22 Jun 2010 19:06:52 +1000 (EST) Received: from localhost ([127.0.0.1]:47286 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OQzRQ-0007eX-Fq for incoming@patchwork.ozlabs.org; Tue, 22 Jun 2010 05:06:48 -0400 Received: from [140.186.70.92] (port=34879 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OQzPX-0007TV-Ae for qemu-devel@nongnu.org; Tue, 22 Jun 2010 05:04:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OQzMS-0002sw-Up for qemu-devel@nongnu.org; Tue, 22 Jun 2010 05:01:43 -0400 Received: from mail.valinux.co.jp ([210.128.90.3]:55559) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OQzMS-0002sG-MX for qemu-devel@nongnu.org; Tue, 22 Jun 2010 05:01:40 -0400 Received: from ps.local.valinux.co.jp (vagw.valinux.co.jp [210.128.90.14]) by mail.valinux.co.jp (Postfix) with SMTP id A586E107430; Tue, 22 Jun 2010 18:01:39 +0900 (JST) Received: (nullmailer pid 28816 invoked by uid 1000); Tue, 22 Jun 2010 08:57:53 -0000 From: Isaku Yamahata To: seabios@seabios.org Date: Tue, 22 Jun 2010 17:57:48 +0900 Message-Id: X-Mailer: git-send-email 1.6.6.1 In-Reply-To: References: In-Reply-To: References: X-Virus-Scanned: clamav-milter 0.95.2 at va-mail.local.valinux.co.jp X-Virus-Status: Clean X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) Cc: stefano.stabellini@eu.citrix.com, jan.kiszka@siemens.com, mst@redhat.com, allen.m.kay@intel.com, qemu-devel@nongnu.org, yamahata@valinux.co.jp, jean.guyader@gmail.com Subject: [Qemu-devel] [PATCH v2 3/8] seabios: pciinit: make pci memory space assignment 64bit aware. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org make pci memory space assignment 64bit aware. If 64bit memory space is found while assigning pci memory space, clear higher bit and skip to next bar. This patch is preparation for q35 chipset initialization which has 64bit bar. Signed-off-by: Isaku Yamahata --- src/pciinit.c | 19 +++++++++++++++++-- 1 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/pciinit.c b/src/pciinit.c index 488c77b..b635e44 100644 --- a/src/pciinit.c +++ b/src/pciinit.c @@ -37,7 +37,12 @@ static void pci_set_io_region_addr(u16 bdf, int region_num, u32 addr) dprintf(1, "region %d: 0x%08x\n", region_num, addr); } -static void pci_bios_allocate_region(u16 bdf, int region_num) +/* + * return value + * 0: 32bit BAR + * non 0: 64bit BAR + */ +static int pci_bios_allocate_region(u16 bdf, int region_num) { u32 *paddr; int ofs; @@ -71,13 +76,23 @@ static void pci_bios_allocate_region(u16 bdf, int region_num) pci_set_io_region_addr(bdf, region_num, *paddr); *paddr += size; } + + int is_64bit = !(val & PCI_BASE_ADDRESS_SPACE_IO) && + (val & PCI_BASE_ADDRESS_MEM_TYPE_MASK) == PCI_BASE_ADDRESS_MEM_TYPE_64; + if (is_64bit) { + pci_config_writel(bdf, ofs + 4, 0); + } + return is_64bit; } static void pci_bios_allocate_regions(u16 bdf) { int i; for (i = 0; i < PCI_NUM_REGIONS; i++) { - pci_bios_allocate_region(bdf, i); + int is_64bit = pci_bios_allocate_region(bdf, i); + if (is_64bit){ + i++; + } } }