@ -29,12 +29,34 @@ void sysLedSet(u32 value);
extern flash_info_t flash_info [ CFG_MAX_FLASH_BANKS ] ;
# define mtcpr0(reg, data) do { mtdcr(CPR0_CFGADDR,reg); \
mtdcr ( CPR0_CFGDATA , data ) ; } while ( 0 )
# define mfcpr0(reg, data) do { mtdcr(CPR0_CFGADDR,reg); \
data = mfdcr ( CPR0_CFGDATA ) ; } while ( 0 )
# undef BOOTSTRAP_OPTION_A_ACTIVE
# define SDR0_CP440 0x0180
# define SYSTEM_RESET 0x30000000
# define CHIP_RESET 0x20000000
# define SDR0_ECID0 0x0080
# define SDR0_ECID1 0x0081
# define SDR0_ECID2 0x0082
# define SDR0_ECID3 0x0083
# define SYS_IO_ADDRESS 0xcce00000
# define DEFAULT_ETH_ADDR "ethaddr"
/* ethaddr for first or etha1ddr for second ethernet */
enum {
/* HW_GENERATION_HCU1 is no longer supported */
HW_GENERATION_HCU2 = 0x10 ,
HW_GENERATION_HCU3 = 0x10 ,
HW_GENERATION_HCU4 = 0x20 ,
HW_GENERATION_HCU5 = 0x30 ,
HW_GENERATION_MCU = 0x08 ,
HW_GENERATION_MCU20 = 0x0a ,
HW_GENERATION_MCU25 = 0x09 ,
} ;
# define SDR0_CP440 0x0180
/*
* This function is run very early , out of flash , and before devices are
@ -50,7 +72,6 @@ int board_early_init_f(void)
{
u32 reg ;
# undef BOOTSTRAP_OPTION_A_ACTIVE
# ifdef BOOTSTRAP_OPTION_A_ACTIVE
/* Booting with Bootstrap Option A
* First boot , with CPR0_ICFG_RLI_MASK = = 0
@ -64,27 +85,26 @@ int board_early_init_f(void)
u32 cpr0icfg ;
u32 dbcr ;
mfcpr0 ( CPR0_ICFG , cpr0icfg ) ;
if ( ! ( cpr0icfg & CPR0_ICFG_RLI_MASK ) ) {
mtcpr0 ( CPR0_MALD , 0x02000000 ) ;
mtcpr0 ( CPR0_OPBD , 0x02000000 ) ;
mtcpr0 ( CPR0_PERD , 0x05000000 ) ; /* 1:5 */
mtcpr0 ( CPR0_PLLC , 0x40000238 ) ;
mtcpr0 ( CPR0_PLLD , 0x01010414 ) ;
mtcpr0 ( CPR0_PRIMAD , 0x01000000 ) ;
mtcpr0 ( CPR0_PRIMBD , 0x01000000 ) ;
mtcpr0 ( CPR0_SPCID , 0x03000000 ) ;
mtsdr ( SDR0_PFC0 , 0x00003E00 ) ; /* [CTE] = 0 */
mtsdr ( SDR0_CP440 , 0x0EAAEA02 ) ; /* [Nto1] = 1*/
mtcpr0 ( CPR0_ICFG , cpr0icfg | CPR0_ICFG_RLI_MASK ) ;
mfcpr ( CPR0_ICFG , cpr0icfg ) ;
if ( ! ( cpr0icfg & CPR0_ICFG_RLI_MASK ) ) {
mtcpr ( CPR0_MALD , 0x02000000 ) ;
mtcpr ( CPR0_OPBD , 0x02000000 ) ;
mtcpr ( CPR0_PERD , 0x05000000 ) ; /* 1:5 */
mtcpr ( CPR0_PLLC , 0x40000238 ) ;
mtcpr ( CPR0_PLLD , 0x01010414 ) ;
mtcpr ( CPR0_PRIMAD , 0x01000000 ) ;
mtcpr ( CPR0_PRIMBD , 0x01000000 ) ;
mtcpr ( CPR0_SPCID , 0x03000000 ) ;
mtsdr ( SDR0_PFC0 , 0x00003E00 ) ; /* [CTE] = 0 */
mtsdr ( SDR0_CP440 , 0x0EAAEA02 ) ; /* [Nto1] = 1*/
mtcpr ( CPR0_ICFG , cpr0icfg | CPR0_ICFG_RLI_MASK ) ;
/*
* Initiate system reset in debug control register DBCR
*/
dbcr = mfspr ( dbcr0 ) ;
# define SYSTEM_RESET 0x30000000
# define CHIP_RESET 0x20000000
mtspr ( dbcr0 , dbcr | CHIP_RESET ) ;
mtspr ( dbcr0 , dbcr | CHIP_RESET ) ;
}
mtsdr ( SDR0_CP440 , 0x0EAAEA02 ) ; /* [Nto1] = 1*/
# endif
@ -162,60 +182,42 @@ int board_early_init_f(void)
return 0 ;
}
# ifdef CONFIG_BOARD_PRE_INIT
int board_pre_init ( void )
int board_pre_init ( void )
{
return board_early_init_f ( ) ;
return board_early_init_f ( ) ;
}
# endif
enum {
/* HW_GENERATION_HCU1 is no longer supported */
HW_GENERATION_HCU2 = 0x10 ,
HW_GENERATION_HCU3 = 0x10 ,
HW_GENERATION_HCU4 = 0x20 ,
HW_GENERATION_HCU5 = 0x30 ,
HW_GENERATION_MCU = 0x08 ,
HW_GENERATION_MCU20 = 0x0a ,
HW_GENERATION_MCU25 = 0x09 ,
} ;
int checkboard ( void )
int checkboard ( void )
{
# define SDR0_ECID0 0x0080
# define SDR0_ECID1 0x0081
# define SDR0_ECID2 0x0082
# define SDR0_ECID3 0x0083
unsigned j ;
uint16_t * hwVersReg = ( uint16_t * ) HCU_HW_VERSION_REGISTER ;
uint16_t * boardVersReg = ( uint16_t * ) HCU_CPLD_VERSION_REGISTER ;
uint16_t generation = * boardVersReg & 0xf0 ;
uint16_t index = * boardVersReg & 0x0f ;
ulong ecid0 , ecid1 , ecid2 , ecid3 ;
printf ( " Netstal Maschinen AG: " ) ;
unsigned int j ;
u16 * hwVersReg = ( u16 * ) HCU_HW_VERSION_REGISTER ;
u16 * boardVersReg = ( u16 * ) HCU_CPLD_VERSION_REGISTER ;
u16 generation = * boardVersReg & 0xf0 ;
u16 index = * boardVersReg & 0x0f ;
u32 ecid0 , ecid1 , ecid2 , ecid3 ;
printf ( " Netstal Maschinen AG: " ) ;
if ( generation = = HW_GENERATION_HCU3 )
printf ( " HCU3: index %d " , index ) ;
printf ( " HCU3: index %d " , index ) ;
else if ( generation = = HW_GENERATION_HCU4 )
printf ( " HCU4: index %d " , index ) ;
printf ( " HCU4: index %d " , index ) ;
else if ( generation = = HW_GENERATION_HCU5 )
printf ( " HCU5: index %d " , index ) ;
printf ( " HW 0x%02x \n " , * hwVersReg & 0xff ) ;
printf ( " HCU5: index %d " , index ) ;
printf ( " HW 0x%02x \n " , * hwVersReg & 0xff ) ;
mfsdr ( SDR0_ECID0 , ecid0 ) ;
mfsdr ( SDR0_ECID1 , ecid1 ) ;
mfsdr ( SDR0_ECID2 , ecid2 ) ;
mfsdr ( SDR0_ECID3 , ecid3 ) ;
printf ( " Chip ID 0x%x 0x%x 0x%x 0x%x \n " , ecid0 , ecid1 , ecid2 , ecid3 ) ;
for ( j = 0 ; j < 6 ; j + + ) {
printf ( " Chip ID 0x%x 0x%x 0x%x 0x%x \n " , ecid0 , ecid1 , ecid2 , ecid3 ) ;
for ( j = 0 ; j < 6 ; j + + ) {
sysLedSet ( 1 < < j ) ;
udelay ( 200 * 1000 ) ;
udelay ( 200 * 1000 ) ;
}
return 0 ;
}
# define SYS_IO_ADDRESS 0xcce00000
u32 sysLedGet ( void )
{
return in16 ( SYS_IO_ADDRESS ) & 0x3f ;
@ -232,9 +234,10 @@ void sysLedSet(u32 value /* value to place in LEDs */)
static u32 getSerialNr ( void )
{
u32 * serial = ( u32 * ) CFG_FLASH_BASE ;
if ( * serial = = 0xffffffff ) {
if ( * serial = = 0xffffffff )
return get_ticks ( ) ;
}
return * serial ;
}
@ -242,45 +245,44 @@ static u32 getSerialNr(void)
/*---------------------------------------------------------------------------+
* misc_init_r .
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
# define DEFAULT_ETH_ADDR "ethaddr"
/* ethaddr for first or etha1ddr for second ethernet */
int misc_init_r ( void )
{
char * s = getenv ( DEFAULT_ETH_ADDR ) ;
char * e ;
int i ;
u32 serial = getSerialNr ( ) ;
u32 serial = getSerialNr ( ) ;
unsigned long usb2d0cr = 0 ;
unsigned long usb2phy0cr , usb2h0cr = 0 ;
unsigned long sdr0_pfc1 ;
for ( i = 0 ; i < 6 ; + + i ) {
gd - > bd - > bi_enetaddr [ i ] = s ? simple_strtoul ( s , & e , 16 ) : 0 ;
gd - > bd - > bi_enetaddr [ i ] = s ? simple_strtoul ( s , & e , 16 ) : 0 ;
if ( s )
s = ( * e ) ? e + 1 : e ;
}
if ( gd - > bd - > bi_enetaddr [ 3 ] = = 0 & &
gd - > bd - > bi_enetaddr [ 4 ] = = 0 & &
gd - > bd - > bi_enetaddr [ 5 ] = = 0 ) {
char ethaddr [ 22 ] ;
/* Must be in sync with CONFIG_ETHADDR */
gd - > bd - > bi_enetaddr [ 0 ] = 0x00 ;
gd - > bd - > bi_enetaddr [ 1 ] = 0x60 ;
gd - > bd - > bi_enetaddr [ 2 ] = 0x13 ;
gd - > bd - > bi_enetaddr [ 3 ] = ( serial > > 16 ) & 0xff ;
gd - > bd - > bi_enetaddr [ 4 ] = ( serial > > 8 ) & 0xff ;
gd - > bd - > bi_enetaddr [ 3 ] = ( serial > > 16 ) & 0xff ;
gd - > bd - > bi_enetaddr [ 4 ] = ( serial > > 8 ) & 0xff ;
/* byte[5].bit 0 must be zero */
gd - > bd - > bi_enetaddr [ 5 ] = ( serial > > 0 ) & 0xfe ;
sprintf ( ethaddr , " %02X:%02X:%02X:%02X:%02X:%02X \0 " ,
gd - > bd - > bi_enetaddr [ 0 ] , gd - > bd - > bi_enetaddr [ 1 ] ,
gd - > bd - > bi_enetaddr [ 2 ] , gd - > bd - > bi_enetaddr [ 3 ] ,
gd - > bd - > bi_enetaddr [ 4 ] , gd - > bd - > bi_enetaddr [ 5 ] ) ;
gd - > bd - > bi_enetaddr [ 5 ] = ( serial > > 0 ) & 0xfe ;
sprintf ( ethaddr , " %02X:%02X:%02X:%02X:%02X:%02X \0 " ,
gd - > bd - > bi_enetaddr [ 0 ] , gd - > bd - > bi_enetaddr [ 1 ] ,
gd - > bd - > bi_enetaddr [ 2 ] , gd - > bd - > bi_enetaddr [ 3 ] ,
gd - > bd - > bi_enetaddr [ 4 ] , gd - > bd - > bi_enetaddr [ 5 ] ) ;
printf ( " %s: Setting eth %s serial 0x%x \n " , __FUNCTION__ ,
ethaddr , serial ) ;
setenv ( DEFAULT_ETH_ADDR , ethaddr ) ;
setenv ( DEFAULT_ETH_ADDR , ethaddr ) ;
}
# ifdef CFG_ENV_IS_IN_FLASH
/* Monitor protection ON by default */
( void ) flash_protect ( FLAG_PROTECT_SET ,
@ -334,9 +336,9 @@ int misc_init_r(void)
mtsdr ( SDR0_USB2H0CR , usb2h0cr ) ;
/*clear resets*/
udelay ( 1000 ) ;
udelay ( 1000 ) ;
mtsdr ( SDR0_SRST1 , 0x00000000 ) ;
udelay ( 1000 ) ;
udelay ( 1000 ) ;
mtsdr ( SDR0_SRST0 , 0x00000000 ) ;
printf ( " USB: Host(int phy) Device(ext phy) \n " ) ;
@ -356,7 +358,7 @@ int misc_init_r(void)
* certain pre - initialization actions .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# if defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT)
# if defined(CONFIG_PCI)
int pci_pre_init ( struct pci_controller * hose )
{
unsigned long addr ;
@ -374,7 +376,7 @@ int pci_pre_init(struct pci_controller *hose)
mfsdr ( sdr_amp1 , addr ) ;
mtsdr ( sdr_amp1 , ( addr & 0x000000FF ) | 0x0000FF00 ) ;
addr = mfdcr ( plb3_acr ) ;
// mtdcr(plb3_acr, addr & ~plb1_acr_wrp_mask); /* ngngng */
/* mtdcr(plb3_acr, addr & ~plb1_acr_wrp_mask); */ /* ngngng */
mtdcr ( plb3_acr , addr | 0x80000000 ) ; /* Sequoia */
/*-------------------------------------------------------------------+
@ -383,7 +385,7 @@ int pci_pre_init(struct pci_controller *hose)
mfsdr ( sdr_amp0 , addr ) ;
mtsdr ( sdr_amp0 , ( addr & 0x000000FF ) | 0x0000FF00 ) ;
addr = mfdcr ( plb4_acr ) | 0xa0000000 ; /* Was 0x8---- */
// mtdcr(plb4_acr, addr & ~plb1_acr_wrp_mask); /* ngngng */
/* mtdcr(plb4_acr, addr & ~plb1_acr_wrp_mask); */ /* ngngng */
mtdcr ( plb4_acr , addr ) ; /* Sequoia */
/*-------------------------------------------------------------------+
@ -393,24 +395,23 @@ int pci_pre_init(struct pci_controller *hose)
addr = ( mfdcr ( plb0_acr ) & ~ plb0_acr_ppm_mask ) | plb0_acr_ppm_fair ;
addr = ( addr & ~ plb0_acr_hbu_mask ) | plb0_acr_hbu_enabled ;
addr = ( addr & ~ plb0_acr_rdp_mask ) | plb0_acr_rdp_4deep ;
// addr = (addr & ~plb0_acr_wrp_mask) ; /* ngngng */
/* addr = (addr & ~plb0_acr_wrp_mask); */ /* ngngng */
addr = ( addr & ~ plb0_acr_wrp_mask ) | plb0_acr_wrp_2deep ; /* Sequoia */
// mtdcr(plb0_acr, addr); /* Sequoia */
mtdcr ( plb0_acr , 0 ) ; // PATCH HAB: WRITE PIPELINING OFF
/* mtdcr(plb0_acr, addr); */ /* Sequoia */
mtdcr ( plb0_acr , 0 ) ; /* PATCH HAB: WRITE PIPELINING OFF */
/* Segment1 */
addr = ( mfdcr ( plb1_acr ) & ~ plb1_acr_ppm_mask ) | plb1_acr_ppm_fair ;
addr = ( addr & ~ plb1_acr_hbu_mask ) | plb1_acr_hbu_enabled ;
addr = ( addr & ~ plb1_acr_rdp_mask ) | plb1_acr_rdp_4deep ;
addr = ( addr & ~ plb1_acr_wrp_mask ) ;
// mtdcr(plb1_acr, addr); /* Sequoia */
mtdcr ( plb1_acr , 0 ) ; // PATCH HAB: WRITE PIPELINING OFF
/* mtdcr(plb1_acr, addr); */ /* Sequoia */
mtdcr ( plb1_acr , 0 ) ; /* PATCH HAB: WRITE PIPELINING OFF */
return 1 ;
}
# endif /* defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT) */
# endif /* defined(CONFIG_PCI) */
/*************************************************************************
* pci_target_init
@ -476,7 +477,6 @@ void pci_target_init(struct pci_controller *hose)
pci_write_config_word ( 0 , PCI_ERREN , 0 ) ;
pci_write_config_dword ( 0 , PCI_BRDGOPT2 , 0x00000101 ) ;
}
# endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
@ -523,4 +523,3 @@ int is_pci_host(struct pci_controller *hose)
return 1 ;
}
# endif /* defined(CONFIG_PCI) */