@ -310,15 +310,10 @@ static int zynq_gem_setup_mac(struct eth_device *dev)
return 0 ;
}
static int zynq_gem _init ( struct eth_device * dev , bd_t * bis )
static int zynq_phy _init ( struct eth_device * dev )
{
u32 i ;
int ret ;
unsigned long clk_rate = 0 ;
struct zynq_gem_regs * regs = ( struct zynq_gem_regs * ) dev - > iobase ;
struct zynq_gem_priv * priv = dev - > priv ;
struct emac_bd * dummy_tx_bd = & priv - > tx_bd [ TX_FREE_DESC ] ;
struct emac_bd * dummy_rx_bd = & priv - > tx_bd [ TX_FREE_DESC + 2 ] ;
const u32 supported = SUPPORTED_10baseT_Half |
SUPPORTED_10baseT_Full |
SUPPORTED_100baseT_Half |
@ -326,6 +321,33 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full ;
ret = phy_detection ( dev ) ;
if ( ret ) {
printf ( " GEM PHY init failed \n " ) ;
return ret ;
}
priv - > phydev = phy_connect ( priv - > bus , priv - > phyaddr , dev ,
priv - > interface ) ;
priv - > phydev - > supported = supported | ADVERTISED_Pause |
ADVERTISED_Asym_Pause ;
priv - > phydev - > advertising = priv - > phydev - > supported ;
phy_config ( priv - > phydev ) ;
return 0 ;
}
static int zynq_gem_init ( struct eth_device * dev , bd_t * bis )
{
u32 i ;
int ret ;
unsigned long clk_rate = 0 ;
struct zynq_gem_regs * regs = ( struct zynq_gem_regs * ) dev - > iobase ;
struct zynq_gem_priv * priv = dev - > priv ;
struct emac_bd * dummy_tx_bd = & priv - > tx_bd [ TX_FREE_DESC ] ;
struct emac_bd * dummy_rx_bd = & priv - > tx_bd [ TX_FREE_DESC + 2 ] ;
if ( ! priv - > init ) {
/* Disable all interrupts */
writel ( 0xFFFFFFFF , & regs - > idr ) ;
@ -387,19 +409,10 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
priv - > init + + ;
}
ret = phy_detection ( dev ) ;
if ( ret ) {
printf ( " GEM PHY init failed \n " ) ;
ret = zynq_phy_init ( dev ) ;
if ( ret )
return ret ;
}
priv - > phydev = phy_connect ( priv - > bus , priv - > phyaddr , dev ,
priv - > interface ) ;
priv - > phydev - > supported = supported | ADVERTISED_Pause |
ADVERTISED_Asym_Pause ;
priv - > phydev - > advertising = priv - > phydev - > supported ;
phy_config ( priv - > phydev ) ;
phy_startup ( priv - > phydev ) ;
if ( ! priv - > phydev - > link ) {