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