Date: Thu, 07 Apr 2011 09:53:10 -0400 From: John Baldwin <jhb@FreeBSD.org> To: Nate Lawson <nate@root.org> Cc: freebsd-acpi@freebsd.org Subject: Re: Atheros 9285 & Atheros AR8131 Message-ID: <4D9DC1C6.4040700@FreeBSD.org> In-Reply-To: <4D9CE06C.3070002@root.org> References: <AANLkTi=-rourdUbyH0MVceHi81vAHcNdpaxjpmxJ_BCk@mail.gmail.com> <AANLkTinPAF6dQ0Y4se2B7yqQxVBktv3X1_MUFkfb75dC@mail.gmail.com> <201103281406.27334.jhb@freebsd.org> <201104061600.53572.jhb@freebsd.org> <4D9CE06C.3070002@root.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 4/6/11 5:51 PM, Nate Lawson wrote: > On 4/6/2011 1:00 PM, John Baldwin wrote: >> On Monday, March 28, 2011 2:06:27 pm John Baldwin wrote: >>> We've never figured out what is zeroing the registers in the PCI-PCI bridges. >>> I suspect it is not something in the ASL, but is a side effect of some BIOS >>> code that runs in SMM when ACPI is turned on. >> >> Ok, so I have a patch to rework how PCI-PCI bridges manage resources for >> devices. This patch applies to HEAD, no idea if it applies to older branches >> (likely not). You will need to add the option 'NEW_PCIB' to your kernel >> config after applying this patch. >> >> http://www.FreeBSD.org/~jhb/patches/pcib_new.patch >> >> For my local testing I used a hack to wipe out the PCI-PCI bridges in my >> test machine similar to what the BIOS does on these machines. The bridges >> all grew windows to match their original BIOS-assigned windows based on the >> BIOS-assigned resources in the BARs of the child devices. >> >> These patches should also let us allocate new resources from scratch for >> devices behind PCI-PCI bridges once we have better support for determining what >> are valid PCI address ranges in the Host-PCI bridge drivers. > > Wow, awesome work. This is really useful for fixing a common problem. > > Should bus_adjust_resource() be a DEVMETHOD or is this something that > should be done automatically within rman_alloc_resource(), possibly > based on a device flag? Hmm, I had only thought of it as being a wrapper around rman_adjust_resource(). I'm not sure what you mean by adjusting it inside another method? Note that one of the reasons I have the current method is that different devices may have different restrictions on how resources can grow. For example, the PCI-PCI memory windows are aligned on 1MB boundaries and are allocated in 1MB chunks while the I/O port windows are aligned and allocated in 4K chunks. I also plan to make use of rman_adjust_resource() for PCI bus renumbering, but in that case resources would only grow at the end, etc. Given that, I want to keep the logic to determine which kind of adjustment to perform in the relevant driver rather than having rman attempt to use a generic algorithm for expanding a resource and associated rman used for suballocation (if that makes sense). -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D9DC1C6.4040700>