From owner-freebsd-arch@FreeBSD.ORG Tue Apr 26 15:46:42 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 0BA63106566C; Tue, 26 Apr 2011 15:46:42 +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 B459C8FC0A; Tue, 26 Apr 2011 15:46:41 +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 3CF7346B0D; Tue, 26 Apr 2011 11:46:41 -0400 (EDT) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id A82E28A02A; Tue, 26 Apr 2011 11:46:40 -0400 (EDT) From: John Baldwin To: Alexander Motin Date: Tue, 26 Apr 2011 11:46:39 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110325; KDE/4.5.5; amd64; ; ) References: <201104260955.29280.jhb@freebsd.org> <4DB6DA8D.1040802@FreeBSD.org> In-Reply-To: <4DB6DA8D.1040802@FreeBSD.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201104261146.39731.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.6 (bigwig.baldwin.cx); Tue, 26 Apr 2011 11:46:40 -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: Tue, 26 Apr 2011 15:46:42 -0000 On Tuesday, April 26, 2011 10:45:33 am Alexander Motin wrote: > John Baldwin wrote: > > On Tuesday, April 26, 2011 2:53:24 am Alexander Motin wrote: > >> On 26.04.2011 00:21, John Baldwin wrote: > >>> On Monday, April 25, 2011 3:09:47 pm John Baldwin wrote: > >>>> On Wednesday, April 20, 2011 4:38:30 am Alexander Motin wrote: > >>>>> 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: > >> I've tried it. With this patch host_mem_start tunable seems like makes > >> effect. Numbers look closer, but bge0 and iwn0 beyond the bridges are > >> still not working. > > > > Hmmm, I think I need to clear the completely bogus windows when we fail to > > allocate the initial window. Try this (relative to the previous patches): > > Dmesg changed a bit, but still no luck: > http://people.freebsd.org/~mav/newpcib/dmesg.next Oh, I'm dumb. 'w->base' should be set to 'max_address' and 'w->limit' should be set to 0 to turn off the bogus windows like this: --- //depot/projects/pci/sys/dev/pci/pci_pci.c 2011-04-19 17:42:14.000000000 0000 +++ /home/jhb/work/p4/pci/sys/dev/pci/pci_pci.c 2011-04-19 17:42:14.000000000 0000 @@ -60,6 +60,7 @@ static int pcib_resume(device_t dev); static int pcib_power_for_sleep(device_t pcib, device_t dev, int *pstate); +static void pcib_write_windows(struct pcib_softc *sc, int mask); static device_method_t pcib_methods[] = { /* Device interface */ @@ -181,6 +182,9 @@ device_printf(sc->dev, "failed to allocate initial %s window: %#jx-%#jx\n", w->name, (uintmax_t)w->base, (uintmax_t)w->limit); + w->base = max_address; + w->limit = 0; + pcib_write_windows(sc, w->mask); return; } -- John Baldwin