Atheros 9285 & Atheros AR8131
John Baldwin
jhb at FreeBSD.org
Thu Apr 7 16:22:54 UTC 2011
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
More information about the freebsd-acpi
mailing list