linux/drivers/acpi
Bjorn Helgaas fbe2b31b4b ACPI: pci_root: check _CRS, then _BBN for downstream bus number
To find a host bridge's downstream bus number, we currently look at _BBN
first.  If _BBN returns a bus number we've already seen, we conclude that
_BBN was wrong and look for a bus number in _CRS.

However, the spec[1] (figure 5-5 and the example in sec 9.12.1) and an ACPI
FAQ[2] suggest that the OS should use _CRS to discover the bus number
range, and that _BBN is really intended to bootstrap _CRS methods that
reference PCI opregions.

This patch makes us always look at _CRS first.  If _CRS doesn't supply a
bus number, we look at _BBN.  If _BBN doesn't exist, we default to zero.
This makes the behavior consistent regardless of device discovery order.
Previously, if A and B had duplicate _BBNs and we found A first, we'd only
look at B's _CRS, whereas if we found B first, we'd only look at A's _CRS.

I'm told that Windows discovers host bridge bus numbers using _CRS, so
it should be fairly safe to rely on this BIOS functionality.

This patch also removes two misleading messages: we printed the "Wrong _BBN
value, reboot and use option 'pci=noacpi'" message before looking at _CRS,
so we would likely find the bus number in _CRS, the system would work fine,
and the user would be confused.  The "PCI _CRS %d overrides _BBN 0" message
incorrectly assumes _BBN was zero, and it's useless anyway because we
print the segment/bus number a few lines later.

References:
    [1] http://www.acpi.info/DOWNLOADS/ACPIspec30b.pdf
    [2] http://www.acpi.info/acpi_faq.htm _BBN/_CRS discussion
    http://download.microsoft.com/download/9/8/f/98f3fe47-dfc3-4e74-92a3-088782200fe7/TWAR05005_WinHEC05.ppt (slide 17)
    http://bugzilla.kernel.org/show_bug.cgi?id=1662 ASUS PR-DLS
    http://bugzilla.kernel.org/show_bug.cgi?id=1127 ASUS PR-DLSW
    http://bugzilla.kernel.org/show_bug.cgi?id=1741 ASUS PR-DLS533

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Reviewed-by: Alex Chiang <achiang@hp.com>
CC: Shaohua Li <shaohua.li@intel.com>
CC: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Len Brown <len.brown@intel.com>
2009-06-20 00:01:50 -04:00
..
acpica Merge branches 'release', 'bugzilla-13032', 'bugzilla-13041+', 'bugzilla-13121', 'bugzilla-13165', 'bugzilla-13243', 'bugzilla-13259', 'resume-sci-en-regression', 'thermal-regression', 'tsc-regression' and 'asus-2.6.30' into release 2009-05-16 01:55:59 -04:00
ac.c proc 2/2: remove struct proc_dir_entry::owner 2009-03-31 01:14:44 +04:00
acpi_memhotplug.c trivial: Fix misspelling of "firmware" in acpi_memhotplug.c 2009-01-06 11:28:08 +01:00
battery.c Revert "ACPI battery: fix async boot oops" 2009-04-11 12:45:20 -07:00
blacklist.c ACPI: delete OSI(Linux) DMI dmesg spam 2008-11-27 01:55:21 -05:00
bus.c ACPI: power: update error message 2009-05-08 00:07:30 -04:00
button.c ACPI: button: remove control method/fixed hardware distinctions 2009-04-11 00:36:41 -04:00
cm_sbs.c ACPI: remove private acpica headers from driver files 2008-12-31 01:15:22 -05:00
container.c ACPI: add missing KERN_* constants to printks 2009-02-07 00:29:32 -05:00
debug.c Merge branch 'acpi-modparam' into release 2009-04-05 01:45:50 -04:00
dock.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
ec.c ACPI: EC: Fix ACPI EC resume non-query interrupt message 2009-04-23 23:56:57 -04:00
event.c netlink: change return-value logic of netlink_broadcast() 2009-02-05 23:56:36 -08:00
fan.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
glue.c ACPI: call init_acpi_device_notify() explicitly rather than as initcall 2009-03-27 12:51:16 -04:00
internal.h ACPI: call acpi_wakeup_device_init() explicitly rather than as initcall 2009-03-27 12:51:31 -04:00
Kconfig ACPI: update Kconfig help texts (no functional changes) 2009-03-17 02:06:04 -04:00
Makefile Merge branch 'async-battery' into release 2009-04-05 01:48:46 -04:00
numa.c x86, ACPI: add support for x2apic ACPI extensions 2009-04-03 20:08:12 -04:00
osl.c ACPI: add /sys/firmware/acpi/interrupts/sci_not counter 2009-04-21 00:35:47 -04:00
pci_bind.c PCI/ACPI: fix wrong ref count handling in acpi_pci_bind() 2009-05-27 17:53:07 -04:00
pci_irq.c Merge branch 'misc' into release 2009-04-05 01:52:07 -04:00
pci_link.c ACPI: pci_link: simplify list of link devices 2009-03-17 01:53:29 -04:00
pci_root.c ACPI: pci_root: check _CRS, then _BBN for downstream bus number 2009-06-20 00:01:50 -04:00
pci_slot.c PCI: pci_slot: grab refcount on slot's bus 2009-04-06 11:31:14 -07:00
power.c Merge branch 'acpi-modparam' into release 2009-04-05 01:45:50 -04:00
proc.c ACPI: convert acpi_device_lock spinlock to mutex 2009-04-07 00:02:40 -04:00
processor_core.c cpumask: alloc zeroed cpumask for static cpumask_var_ts 2009-06-09 22:30:27 +09:30
processor_idle.c cpuidle: fix AMD C1E suspend hang 2009-05-26 23:45:33 -04:00
processor_perflib.c ACPI: sanity check _PSS frequency to prevent cpufreq crash 2009-05-29 20:45:58 -04:00
processor_thermal.c Merge branch 'constify' into release 2009-04-05 01:51:16 -04:00
processor_throttling.c ACPI processor: remove spurious newline from warning message 2009-05-29 21:26:26 -04:00
reboot.c ACPI: reboot.c: use new acpi_reset interface 2008-12-31 01:15:00 -05:00
sbs.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
sbshc.c ACPI: remove private acpica headers from driver files 2008-12-31 01:15:22 -05:00
sbshc.h ACPI: SBS: Ignore alarms coming from unknown devices 2007-12-14 15:14:06 -05:00
scan.c ACPI: delete acpi_device.g_list 2009-04-07 02:02:15 -04:00
sleep.c Merge branch 'bugzilla-13041' into release 2009-04-24 01:35:24 -04:00
sleep.h ACPI: convert acpi_device_lock spinlock to mutex 2009-04-07 00:02:40 -04:00
system.c ACPI: add /sys/firmware/acpi/interrupts/sci_not counter 2009-04-21 00:35:47 -04:00
tables.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
thermal.c thermal: Fix polling frequency for systems without passive cooling 2009-04-18 01:05:23 -04:00
utils.c ACPI: scheduling in atomic via acpi_evaluate_integer () 2008-11-26 17:39:06 -05:00
video_detect.c ACPI video: add a warning message if _BQC is not found 2009-03-27 22:37:22 -04:00
video.c Merge branches 'bugzilla-13121+', 'bugzilla-13233', 'redhat-bugzilla-500311', 'pci-bind-oops', 'misc-2.6.30' and 'i7300_idle' into release 2009-05-29 21:30:01 -04:00
wakeup.c ACPI: convert acpi_device_lock spinlock to mutex 2009-04-07 00:02:40 -04:00