@ -130,6 +130,7 @@ static inline void emac_report_timeout_error(struct emac_instance *dev,
const char * error )
{
if ( emac_has_feature ( dev , EMAC_FTR_440GX_PHY_CLK_FIX |
EMAC_FTR_460EX_PHY_CLK_FIX |
EMAC_FTR_440EP_PHY_CLK_FIX ) )
DBG ( dev , " %s " NL , error ) ;
else if ( net_ratelimit ( ) )
@ -351,10 +352,24 @@ static int emac_reset(struct emac_instance *dev)
emac_tx_disable ( dev ) ;
}
# ifdef CONFIG_PPC_DCR_NATIVE
/* Enable internal clock source */
if ( emac_has_feature ( dev , EMAC_FTR_460EX_PHY_CLK_FIX ) )
dcri_clrset ( SDR0 , SDR0_ETH_CFG ,
0 , SDR0_ETH_CFG_ECS < < dev - > cell_index ) ;
# endif
out_be32 ( & p - > mr0 , EMAC_MR0_SRST ) ;
while ( ( in_be32 ( & p - > mr0 ) & EMAC_MR0_SRST ) & & n )
- - n ;
# ifdef CONFIG_PPC_DCR_NATIVE
/* Enable external clock source */
if ( emac_has_feature ( dev , EMAC_FTR_460EX_PHY_CLK_FIX ) )
dcri_clrset ( SDR0 , SDR0_ETH_CFG ,
SDR0_ETH_CFG_ECS < < dev - > cell_index , 0 ) ;
# endif
if ( n ) {
dev - > reset_failed = 0 ;
return 0 ;
@ -2559,6 +2574,9 @@ static int __devinit emac_init_config(struct emac_instance *dev)
/* Check EMAC version */
if ( of_device_is_compatible ( np , " ibm,emac4sync " ) ) {
dev - > features | = ( EMAC_FTR_EMAC4 | EMAC_FTR_EMAC4SYNC ) ;
if ( of_device_is_compatible ( np , " ibm,emac-460ex " ) | |
of_device_is_compatible ( np , " ibm,emac-460gt " ) )
dev - > features | = EMAC_FTR_460EX_PHY_CLK_FIX ;
} else if ( of_device_is_compatible ( np , " ibm,emac4 " ) ) {
dev - > features | = EMAC_FTR_EMAC4 ;
if ( of_device_is_compatible ( np , " ibm,emac-440gx " ) )