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
_______________________________________________
freebsd-acpi@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
To unsubscribe, send any mail to "freebsd-acpi-unsubscr...@freebsd.org"

Reply via email to