[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>
This commit is contained in:
parent
50c37e2161
commit
532bda5d9c
@ -44,6 +44,15 @@
|
|||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
#include <asm/mach/pci.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)
|
static void __init espresso_init(void)
|
||||||
{
|
{
|
||||||
physmap_configure(0x90000000, 0x02000000, 2, NULL);
|
physmap_configure(0x90000000, 0x02000000, 2, NULL);
|
||||||
|
@ -201,7 +201,7 @@ int clear_master_aborts(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init ixp23xx_pci_preinit(void)
|
static void __init ixp23xx_pci_common_init(void)
|
||||||
{
|
{
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
*IXP23XX_PCI_CONTROL |= 0x20000; /* set I/O swapping */
|
*IXP23XX_PCI_CONTROL |= 0x20000; /* set I/O swapping */
|
||||||
@ -220,6 +220,11 @@ void __init ixp23xx_pci_preinit(void)
|
|||||||
} else {
|
} else {
|
||||||
*IXP23XX_PCI_CPP_ADDR_BITS |= (1 << 1);
|
*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,
|
hook_fault_code(16+6, ixp23xx_pci_abort_handler, SIGBUS,
|
||||||
"PCI config cycle to non-existent device");
|
"PCI config cycle to non-existent device");
|
||||||
@ -273,3 +278,8 @@ int ixp23xx_pci_setup(int nr, struct pci_sys_data *sys)
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ixp23xx_pci_slave_init(void)
|
||||||
|
{
|
||||||
|
ixp23xx_pci_common_init();
|
||||||
|
}
|
||||||
|
@ -22,6 +22,7 @@ void ixp23xx_sys_init(void);
|
|||||||
int ixp23xx_pci_setup(int, struct pci_sys_data *);
|
int ixp23xx_pci_setup(int, struct pci_sys_data *);
|
||||||
void ixp23xx_pci_preinit(void);
|
void ixp23xx_pci_preinit(void);
|
||||||
struct pci_bus *ixp23xx_pci_scan_bus(int, struct pci_sys_data*);
|
struct pci_bus *ixp23xx_pci_scan_bus(int, struct pci_sys_data*);
|
||||||
|
void ixp23xx_pci_slave_init(void);
|
||||||
|
|
||||||
extern struct sys_timer ixp23xx_timer;
|
extern struct sys_timer ixp23xx_timer;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user