diff options
Diffstat (limited to 'arch/arm/mach-ixp2000')
-rw-r--r-- | arch/arm/mach-ixp2000/Kconfig | 8 | ||||
-rw-r--r-- | arch/arm/mach-ixp2000/pci.c | 13 |
2 files changed, 21 insertions, 0 deletions
diff --git a/arch/arm/mach-ixp2000/Kconfig b/arch/arm/mach-ixp2000/Kconfig index 9361e05f6fa3..ecb58d83478e 100644 --- a/arch/arm/mach-ixp2000/Kconfig +++ b/arch/arm/mach-ixp2000/Kconfig | |||
@@ -54,6 +54,14 @@ config ARCH_IXDP2X01 | |||
54 | depends on ARCH_IXDP2401 || ARCH_IXDP2801 | 54 | depends on ARCH_IXDP2401 || ARCH_IXDP2801 |
55 | default y | 55 | default y |
56 | 56 | ||
57 | config IXP2000_SUPPORT_BROKEN_PCI_IO | ||
58 | bool "Support broken PCI I/O on older IXP2000s" | ||
59 | default y | ||
60 | help | ||
61 | Say 'N' here if you only intend to run your kernel on an | ||
62 | IXP2000 B0 or later model and do not need the PCI I/O | ||
63 | byteswap workaround. Say 'Y' otherwise. | ||
64 | |||
57 | endmenu | 65 | endmenu |
58 | 66 | ||
59 | endif | 67 | endif |
diff --git a/arch/arm/mach-ixp2000/pci.c b/arch/arm/mach-ixp2000/pci.c index 5ff2f2718c58..0788fb2b5c10 100644 --- a/arch/arm/mach-ixp2000/pci.c +++ b/arch/arm/mach-ixp2000/pci.c | |||
@@ -198,6 +198,19 @@ clear_master_aborts(void) | |||
198 | void __init | 198 | void __init |
199 | ixp2000_pci_preinit(void) | 199 | ixp2000_pci_preinit(void) |
200 | { | 200 | { |
201 | #ifndef CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO | ||
202 | /* | ||
203 | * Configure the PCI unit to properly byteswap I/O transactions, | ||
204 | * and verify that it worked. | ||
205 | */ | ||
206 | ixp2000_reg_write(IXP2000_PCI_CONTROL, | ||
207 | (*IXP2000_PCI_CONTROL | PCI_CONTROL_IEE)); | ||
208 | |||
209 | if ((*IXP2000_PCI_CONTROL & PCI_CONTROL_IEE) == 0) | ||
210 | panic("IXP2000: PCI I/O is broken on this ixp model, and " | ||
211 | "the needed workaround has not been configured in"); | ||
212 | #endif | ||
213 | |||
201 | hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS, | 214 | hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS, |
202 | "PCI config cycle to non-existent device"); | 215 | "PCI config cycle to non-existent device"); |
203 | } | 216 | } |