@ -30,6 +30,7 @@
# include <pci.h>
# include <mpc83xx.h>
# include <netdev.h>
# include <asm/io.h>
DECLARE_GLOBAL_DATA_PTR ;
@ -95,12 +96,45 @@ static struct pci_region pci_regions[] = {
}
} ;
static struct pci_region pcie_regions_0 [ ] = {
{
. bus_start = CONFIG_SYS_PCIE1_MEM_BASE ,
. phys_start = CONFIG_SYS_PCIE1_MEM_PHYS ,
. size = CONFIG_SYS_PCIE1_MEM_SIZE ,
. flags = PCI_REGION_MEM ,
} ,
{
. bus_start = CONFIG_SYS_PCIE1_IO_BASE ,
. phys_start = CONFIG_SYS_PCIE1_IO_PHYS ,
. size = CONFIG_SYS_PCIE1_IO_SIZE ,
. flags = PCI_REGION_IO ,
} ,
} ;
static struct pci_region pcie_regions_1 [ ] = {
{
. bus_start = CONFIG_SYS_PCIE2_MEM_BASE ,
. phys_start = CONFIG_SYS_PCIE2_MEM_PHYS ,
. size = CONFIG_SYS_PCIE2_MEM_SIZE ,
. flags = PCI_REGION_MEM ,
} ,
{
. bus_start = CONFIG_SYS_PCIE2_IO_BASE ,
. phys_start = CONFIG_SYS_PCIE2_IO_PHYS ,
. size = CONFIG_SYS_PCIE2_IO_SIZE ,
. flags = PCI_REGION_IO ,
} ,
} ;
void pci_init_board ( void )
{
volatile immap_t * immr = ( volatile immap_t * ) CONFIG_SYS_IMMR ;
volatile sysconf83xx_t * sysconf = & immr - > sysconf ;
volatile clk83xx_t * clk = ( volatile clk83xx_t * ) & immr - > clk ;
volatile law83xx_t * pci_law = immr - > sysconf . pcilaw ;
volatile law83xx_t * pcie_law = sysconf - > pcielaw ;
struct pci_region * reg [ ] = { pci_regions } ;
struct pci_region * pcie_reg [ ] = { pcie_regions_0 , pcie_regions_1 , } ;
int warmboot ;
/* Enable all 3 PCI_CLK_OUTPUTs. */
@ -119,6 +153,24 @@ void pci_init_board(void)
warmboot | = immr - > pmc . pmccr1 & PMCCR1_POWER_OFF ;
mpc83xx_pci_init ( 1 , reg , warmboot ) ;
/* Configure the clock for PCIE controller */
clrsetbits_be32 ( & clk - > sccr , SCCR_PCIEXP1CM | SCCR_PCIEXP2CM ,
SCCR_PCIEXP1CM_1 | SCCR_PCIEXP2CM_1 ) ;
/* Deassert the resets in the control register */
out_be32 ( & sysconf - > pecr1 , 0xE0008000 ) ;
out_be32 ( & sysconf - > pecr2 , 0xE0008000 ) ;
udelay ( 2000 ) ;
/* Configure PCI Express Local Access Windows */
out_be32 ( & pcie_law [ 0 ] . bar , CONFIG_SYS_PCIE1_BASE & LAWBAR_BAR ) ;
out_be32 ( & pcie_law [ 0 ] . ar , LBLAWAR_EN | LBLAWAR_512MB ) ;
out_be32 ( & pcie_law [ 1 ] . bar , CONFIG_SYS_PCIE2_BASE & LAWBAR_BAR ) ;
out_be32 ( & pcie_law [ 1 ] . ar , LBLAWAR_EN | LBLAWAR_512MB ) ;
mpc83xx_pcie_init ( 2 , pcie_reg , warmboot ) ;
}
# if defined(CONFIG_OF_BOARD_SETUP)