diff options
author | Lennert Buytenhek <buytenh@wantstofly.org> | 2006-04-01 12:33:35 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-04-01 12:33:35 -0500 |
commit | 532bda5d9cd2f94a9e374765c23858c7d8641f66 (patch) | |
tree | a87fc82de89a993867d11e328b6b82afb16fe83a /arch/arm/mach-ixp23xx/pci.c | |
parent | 50c37e216132d2185a15d5cf6b966adf6ecea535 (diff) |
[ARM] 3438/1: ixp23xx: add pci slave support
Patch from Lennert Buytenhek
On the Double Espresso board, the IXP2350s are PCI slave devices and
we skip calling pci_common_init() as that enumerates the bus. But even
though we are a PCI slave device, there is still some PCI-related setup
that has to be done.
Create ixp23xx_pci_common_init(), move the common initialisation bits
there, and have this function called from both the PCI master and the
PCI slave init path.
Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-ixp23xx/pci.c')
-rw-r--r-- | arch/arm/mach-ixp23xx/pci.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/arm/mach-ixp23xx/pci.c b/arch/arm/mach-ixp23xx/pci.c index 5330ad78c1bb..ba6b4367a1d5 100644 --- a/arch/arm/mach-ixp23xx/pci.c +++ b/arch/arm/mach-ixp23xx/pci.c | |||
@@ -201,7 +201,7 @@ int clear_master_aborts(void) | |||
201 | return 0; | 201 | return 0; |
202 | } | 202 | } |
203 | 203 | ||
204 | void __init ixp23xx_pci_preinit(void) | 204 | static void __init ixp23xx_pci_common_init(void) |
205 | { | 205 | { |
206 | #ifdef __ARMEB__ | 206 | #ifdef __ARMEB__ |
207 | *IXP23XX_PCI_CONTROL |= 0x20000; /* set I/O swapping */ | 207 | *IXP23XX_PCI_CONTROL |= 0x20000; /* set I/O swapping */ |
@@ -220,6 +220,11 @@ void __init ixp23xx_pci_preinit(void) | |||
220 | } else { | 220 | } else { |
221 | *IXP23XX_PCI_CPP_ADDR_BITS |= (1 << 1); | 221 | *IXP23XX_PCI_CPP_ADDR_BITS |= (1 << 1); |
222 | } | 222 | } |
223 | } | ||
224 | |||
225 | void __init ixp23xx_pci_preinit(void) | ||
226 | { | ||
227 | ixp23xx_pci_common_init(); | ||
223 | 228 | ||
224 | hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS, | 229 | hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS, |
225 | "PCI config cycle to non-existent device"); | 230 | "PCI config cycle to non-existent device"); |
@@ -273,3 +278,8 @@ int ixp23xx_pci_setup(int nr, struct pci_sys_data *sys) | |||
273 | 278 | ||
274 | return 1; | 279 | return 1; |
275 | } | 280 | } |
281 | |||
282 | void ixp23xx_pci_slave_init(void) | ||
283 | { | ||
284 | ixp23xx_pci_common_init(); | ||
285 | } | ||