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 | |
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>
-rw-r--r-- | arch/arm/mach-ixp23xx/espresso.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-ixp23xx/pci.c | 12 | ||||
-rw-r--r-- | include/asm-arm/arch-ixp23xx/platform.h | 1 |
3 files changed, 21 insertions, 1 deletions
diff --git a/arch/arm/mach-ixp23xx/espresso.c b/arch/arm/mach-ixp23xx/espresso.c index 2327c9790416..bf688c128630 100644 --- a/arch/arm/mach-ixp23xx/espresso.c +++ b/arch/arm/mach-ixp23xx/espresso.c | |||
@@ -44,6 +44,15 @@ | |||
44 | #include <asm/mach/irq.h> | 44 | #include <asm/mach/irq.h> |
45 | #include <asm/mach/pci.h> | 45 | #include <asm/mach/pci.h> |
46 | 46 | ||
47 | static int __init espresso_pci_init(void) | ||
48 | { | ||
49 | if (machine_is_espresso()) | ||
50 | ixp23xx_pci_slave_init(); | ||
51 | |||
52 | return 0; | ||
53 | }; | ||
54 | subsys_initcall(espresso_pci_init); | ||
55 | |||
47 | static void __init espresso_init(void) | 56 | static void __init espresso_init(void) |
48 | { | 57 | { |
49 | physmap_configure(0x90000000, 0x02000000, 2, NULL); | 58 | physmap_configure(0x90000000, 0x02000000, 2, NULL); |
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 | } | ||
diff --git a/include/asm-arm/arch-ixp23xx/platform.h b/include/asm-arm/arch-ixp23xx/platform.h index f85b4685a491..e4d99060a049 100644 --- a/include/asm-arm/arch-ixp23xx/platform.h +++ b/include/asm-arm/arch-ixp23xx/platform.h | |||
@@ -22,6 +22,7 @@ void ixp23xx_sys_init(void); | |||
22 | int ixp23xx_pci_setup(int, struct pci_sys_data *); | 22 | int ixp23xx_pci_setup(int, struct pci_sys_data *); |
23 | void ixp23xx_pci_preinit(void); | 23 | void ixp23xx_pci_preinit(void); |
24 | struct pci_bus *ixp23xx_pci_scan_bus(int, struct pci_sys_data*); | 24 | struct pci_bus *ixp23xx_pci_scan_bus(int, struct pci_sys_data*); |
25 | void ixp23xx_pci_slave_init(void); | ||
25 | 26 | ||
26 | extern struct sys_timer ixp23xx_timer; | 27 | extern struct sys_timer ixp23xx_timer; |
27 | 28 | ||