Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Apr 2011 13:32:08 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Alexander Motin <mav@freebsd.org>
Cc:        freebsd-arch@freebsd.org
Subject:   Re: Changing how PCI-PCI bridges do resource allocation
Message-ID:  <201104271332.08621.jhb@freebsd.org>
In-Reply-To: <4DB835E4.5060300@FreeBSD.org>
References:  <mailpost.1303239057.1899175.75529.mailing.freebsd.arch@FreeBSD.cs.nctu.edu.tw> <201104271101.01259.jhb@freebsd.org> <4DB835E4.5060300@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday, April 27, 2011 11:27:32 am Alexander Motin wrote:
> On 27.04.2011 18:01, John Baldwin wrote:
> > On Tuesday, April 26, 2011 5:54:34 pm Alexander Motin wrote:
> >> John Baldwin wrote:
> >>> 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:
> >>
> >> No luck:
> >> http://people.freebsd.org/~mav/newpcib/dmesg.next2
> >
> > Ahh, I know what's wrong.  I need to force MEMEN and/or IOEN in the bridge's
> > command register when enabling a window.  Here is an updated patch relative
> > to pcib_window.patch (so it includes the previous patch to disable bogus
> > windows):
> 
> Hurray! You did it! Congratulations! :)
> 
> After changing
> 	PCI_ENABLE_IO(device_get_parent(sc->dev), dev, type);
> to
> 	PCI_ENABLE_IO(device_get_parent(sc->dev), sc->dev, type);
> to fix the build I've got working devices:
> http://people.freebsd.org/~mav/newpcib/dmesg.working
> 
> By the way, it also works without setting host_mem_start. Just uses 
> different addresses for bge, iwn and the bridges.
> 
> Thank you!

Great!  Barring any objections I'll start committing this.

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104271332.08621.jhb>