aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/pci/direct.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-11-11 16:19:48 -0800
committerH. Peter Anvin <hpa@zytor.com>2008-11-11 16:19:48 -0800
commit14d7ca5c575853664d8fe4f225a77b8df1b7de7d (patch)
tree0d16169c5fde30712109c3a316652d0525646f4f /arch/x86/pci/direct.c
parentd3ec5cae0921611ceae06464ef6291012dd9849f (diff)
downloadkernel_samsung_crespo-14d7ca5c575853664d8fe4f225a77b8df1b7de7d.zip
kernel_samsung_crespo-14d7ca5c575853664d8fe4f225a77b8df1b7de7d.tar.gz
kernel_samsung_crespo-14d7ca5c575853664d8fe4f225a77b8df1b7de7d.tar.bz2
x86: attempt reboot via port CF9 if we have standard PCI ports
Impact: Changes reboot behavior. If port CF9 seems to be safe to touch, attempt it before trying the keyboard controller. Port CF9 is not available on all chipsets (a significant but decreasing number of modern chipsets don't implement it), but port CF9 itself should in general be safe to poke (no ill effects if unimplemented) on any system which has PCI Configuration Method #1 or #2, as it falls inside the PCI configuration port range in both cases. No chipset without PCI is known to have port CF9, either, although an explicit "pci=bios" would mean we miss this and therefore don't use port CF9. An explicit "reboot=pci" can be used to force the use of port CF9. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/pci/direct.c')
-rw-r--r--arch/x86/pci/direct.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/x86/pci/direct.c b/arch/x86/pci/direct.c
index 9915293..9a5af6c 100644
--- a/arch/x86/pci/direct.c
+++ b/arch/x86/pci/direct.c
@@ -173,7 +173,7 @@ static int pci_conf2_write(unsigned int seg, unsigned int bus,
#undef PCI_CONF2_ADDRESS
-static struct pci_raw_ops pci_direct_conf2 = {
+struct pci_raw_ops pci_direct_conf2 = {
.read = pci_conf2_read,
.write = pci_conf2_write,
};
@@ -289,6 +289,7 @@ int __init pci_direct_probe(void)
if (pci_check_type1()) {
raw_pci_ops = &pci_direct_conf1;
+ port_cf9_safe = true;
return 1;
}
release_resource(region);
@@ -305,6 +306,7 @@ int __init pci_direct_probe(void)
if (pci_check_type2()) {
raw_pci_ops = &pci_direct_conf2;
+ port_cf9_safe = true;
return 2;
}