From owner-freebsd-arch@FreeBSD.ORG Mon Apr 25 21:27:57 2011 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 061681065784; Mon, 25 Apr 2011 21:27:57 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42]) by mx1.freebsd.org (Postfix) with ESMTP id CB9598FC1A; Mon, 25 Apr 2011 21:27:56 +0000 (UTC) Received: from bigwig.baldwin.cx (66.111.2.69.static.nyinternet.net [66.111.2.69]) by cyrus.watson.org (Postfix) with ESMTPSA id 7DA2746BA1; Mon, 25 Apr 2011 17:27:56 -0400 (EDT) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 0AB5A8A02A; Mon, 25 Apr 2011 17:27:56 -0400 (EDT) From: John Baldwin To: Alexander Motin Date: Mon, 25 Apr 2011 17:21:52 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110325; KDE/4.5.5; amd64; ; ) References: <4DAE9B86.8040106@FreeBSD.org> <201104251509.47482.jhb@freebsd.org> In-Reply-To: <201104251509.47482.jhb@freebsd.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201104251721.53027.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.6 (bigwig.baldwin.cx); Mon, 25 Apr 2011 17:27:56 -0400 (EDT) Cc: freebsd-arch@freebsd.org Subject: Re: Changing how PCI-PCI bridges do resource allocation X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Apr 2011 21:27:57 -0000 On Monday, April 25, 2011 3:09:47 pm John Baldwin wrote: > On Wednesday, April 20, 2011 4:38:30 am Alexander Motin wrote: > > Hi. > > > > On 19.04.2011 21:50, John Baldwin wrote: > > > I've already had at least one testing report that this fixes the issues with > > > some machines' BIOS clearing the I/O windows on some PCI-PCI bridges when ACPI > > > is enabled as this code re-discovers the original windows and programs them > > > correctly. More testing would be good however. > > > > I would like this helped my Acer TM6292 which also has alike problems > > with missing PCIe bridge resources, but unluckily it doesn't. > > > > Here is verbose dmesg when my system uses this dirty hack: > > http://people.freebsd.org/~mav/tm6292_pcie.patch > > to restore bridges resources to the pre-ACPI state: > > http://people.freebsd.org/~mav/dmesg.boot.hacks > > > > Here is respective `pciconf -lvcb` output: > > http://people.freebsd.org/~mav/pciconf.hacks > > > > Here is dmesg with patches, but without NEW_PCIB: > > http://people.freebsd.org/~mav/dmesg.boot.olbpcib > > > > Here is dmesg with patches with NEW_PCIB: > > http://people.freebsd.org/~mav/dmesg.boot.newpcib > > Ah, your problem is we pick bad ranges when we alloc fresh resources for your > bridges. I am working on making that better for ACPI, but for now you can try > setting hw.acpi.host_mem_start to a value like '0xf0000000' in loader.conf. > > Although, it looks like it is not being honored currently. Try adding a printf > in acpi_pcib_alloc_resource() in sys/dev/acpica/acpi_pcib_acpi.c to log the > type, start, and end of each resource range. Actually, try this patch. Then I think you can use the host_mem_start tunable: --- //depot/projects/pci/sys/dev/acpica/acpi_pcib_acpi.c 2011-04-16 21:33:25.000000000 0000 +++ /home/jhb/work/p4/pci/sys/dev/acpica/acpi_pcib_acpi.c 2011-04-16 21:33:25.000000000 0000 @@ -551,10 +551,16 @@ * found to do it. This is typically only used on older laptops * that don't have pci busses behind pci bridge, so assuming > 32MB * is likely OK. + * + * PCI-PCI bridges may not allocate smaller ranges for their windows, + * but the heuristics here should apply to those, so we allow several + * different end addresses. */ - if (type == SYS_RES_MEMORY && start == 0UL && end == ~0UL) + if (type == SYS_RES_MEMORY && start == 0UL && (end == ~0UL || + end == 0xffffffff)) start = acpi_host_mem_start; - if (type == SYS_RES_IOPORT && start == 0UL && end == ~0UL) + if (type == SYS_RES_IOPORT && start == 0UL && (end == ~0UL || + end == 0xffff || end == 0xffffffff)) start = 0x1000; return (bus_generic_alloc_resource(dev, child, type, rid, start, end, count, flags)); -- John Baldwin