Skip to content

Commit

Permalink
[ARM] 3438/1: ixp23xx: add pci slave support
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lennert Buytenhek authored and Russell King committed Apr 1, 2006
1 parent 50c37e2 commit 532bda5
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
9 changes: 9 additions & 0 deletions arch/arm/mach-ixp23xx/espresso.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@
#include <asm/mach/irq.h>
#include <asm/mach/pci.h>

static int __init espresso_pci_init(void)
{
if (machine_is_espresso())
ixp23xx_pci_slave_init();

return 0;
};
subsys_initcall(espresso_pci_init);

static void __init espresso_init(void)
{
physmap_configure(0x90000000, 0x02000000, 2, NULL);
Expand Down
12 changes: 11 additions & 1 deletion arch/arm/mach-ixp23xx/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ int clear_master_aborts(void)
return 0;
}

void __init ixp23xx_pci_preinit(void)
static void __init ixp23xx_pci_common_init(void)
{
#ifdef __ARMEB__
*IXP23XX_PCI_CONTROL |= 0x20000; /* set I/O swapping */
Expand All @@ -220,6 +220,11 @@ void __init ixp23xx_pci_preinit(void)
} else {
*IXP23XX_PCI_CPP_ADDR_BITS |= (1 << 1);
}
}

void __init ixp23xx_pci_preinit(void)
{
ixp23xx_pci_common_init();

hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS,
"PCI config cycle to non-existent device");
Expand Down Expand Up @@ -273,3 +278,8 @@ int ixp23xx_pci_setup(int nr, struct pci_sys_data *sys)

return 1;
}

void ixp23xx_pci_slave_init(void)
{
ixp23xx_pci_common_init();
}
1 change: 1 addition & 0 deletions include/asm-arm/arch-ixp23xx/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ void ixp23xx_sys_init(void);
int ixp23xx_pci_setup(int, struct pci_sys_data *);
void ixp23xx_pci_preinit(void);
struct pci_bus *ixp23xx_pci_scan_bus(int, struct pci_sys_data*);
void ixp23xx_pci_slave_init(void);

extern struct sys_timer ixp23xx_timer;

Expand Down

0 comments on commit 532bda5

Please sign in to comment.