@ -255,49 +255,60 @@ static int ax88180_phy_initial (struct eth_device *dev)
{
struct ax88180_private * priv = ( struct ax88180_private * ) dev - > priv ;
unsigned long tmp_regval ;
unsigned short phyaddr ;
/* Check avaliable PHY chipset */
priv - > PhyAddr = MARVELL_88E1111_PHYADDR ;
priv - > PhyID0 = ax88180_mdio_read ( dev , PHYIDR0 ) ;
if ( priv - > PhyID0 = = MARVELL_88E1111_PHYIDR0 ) {
debug ( " ax88180: Found Marvell 88E1111 PHY. "
" (PHY Addr=0x%x) \n " , priv - > PhyAddr ) ;
tmp_regval = ax88180_mdio_read ( dev , M88_EXT_SSR ) ;
if ( ( tmp_regval & HWCFG_MODE_MASK ) = = RGMII_COPPER_MODE ) {
ax88180_mdio_write ( dev , M88_EXT_SCR , DEFAULT_EXT_SCR ) ;
if ( ax88180_phy_reset ( dev ) < 0 )
return 0 ;
ax88180_mdio_write ( dev , M88_IER , LINK_CHANGE_INT ) ;
}
} else {
/* Search for first avaliable PHY chipset */
# ifdef CONFIG_PHY_ADDR
phyaddr = CONFIG_PHY_ADDR ;
# else
for ( phyaddr = 0 ; phyaddr < 32 ; + + phyaddr )
# endif
{
priv - > PhyAddr = phyaddr ;
priv - > PhyID0 = ax88180_mdio_read ( dev , PHYIDR0 ) ;
switch ( priv - > PhyID0 ) {
case MARVELL_88E1111_PHYIDR0 :
debug ( " ax88180: Found Marvell 88E1111 PHY. "
" (PHY Addr=0x%x) \n " , priv - > PhyAddr ) ;
tmp_regval = ax88180_mdio_read ( dev , M88_EXT_SSR ) ;
if ( ( tmp_regval & HWCFG_MODE_MASK ) ! = RGMII_COPPER_MODE ) {
ax88180_mdio_write ( dev , M88_EXT_SCR , DEFAULT_EXT_SCR ) ;
if ( ax88180_phy_reset ( dev ) < 0 )
return 0 ;
ax88180_mdio_write ( dev , M88_IER , LINK_CHANGE_INT ) ;
}
priv - > PhyAddr = CICADA_CIS8201_PHYADDR ;
priv - > PhyID0 = ax88180_mdio_read ( dev , PHYIDR0 ) ;
return 1 ;
if ( priv - > PhyID0 = = CICADA_CIS8201_PHYIDR0 ) {
case CICADA_CIS8201_PHYIDR0 :
debug ( " ax88180: Found CICADA CIS8201 PHY "
" chipset. (PHY Addr=0x%x) \n " , priv - > PhyAddr ) ;
debug ( " ax88180: Found CICADA CIS8201 PHY "
" chipset. (PHY Addr=0x%x) \n " , priv - > PhyAddr ) ;
ax88180_mdio_write ( dev , CIS_IMR ,
ax88180_mdio_write ( dev , CIS_IMR ,
( CIS_INT_ENABLE | LINK_CHANGE_INT ) ) ;
/* Set CIS_SMI_PRIORITY bit before force the media mode */
tmp_regval =
ax88180_mdio_read ( dev , CIS_AUX_CTRL_STATUS ) ;
tmp_regval = ax88180_mdio_read ( dev , CIS_AUX_CTRL_STATUS ) ;
tmp_regval & = ~ CIS_SMI_PRIORITY ;
ax88180_mdio_write ( dev , CIS_AUX_CTRL_STATUS ,
tmp_regval ) ;
} else {
printf ( " ax88180: Unknown PHY chipset!! \n " ) ;
return 0 ;
ax88180_mdio_write ( dev , CIS_AUX_CTRL_STATUS , tmp_regval ) ;
return 1 ;
case 0xffff :
/* No PHY at this addr */
break ;
default :
printf ( " ax88180: Unknown PHY chipset %#x at addr %#x \n " ,
priv - > PhyID0 , priv - > PhyAddr ) ;
break ;
}
}
return 1 ;
printf ( " ax88180: Unknown PHY chipset!! \n " ) ;
return 0 ;
}
static void ax88180_media_config ( struct eth_device * dev )
@ -345,12 +356,16 @@ static void ax88180_media_config (struct eth_device *dev)
( unsigned int ) bmcr_val , ( unsigned int ) bmsr_val ) ;
/* Get real media mode here */
if ( priv - > PhyID0 = = MARVELL_88E1111_PHYIDR0 ) {
RealMediaMode = get_MarvellPHY_media_mode ( dev ) ;
} else if ( priv - > PhyID0 = = CICADA_CIS8201_PHYIDR0 ) {
RealMediaMode = get_CicadaPHY_media_mode ( dev ) ;
} else {
switch ( priv - > PhyID0 ) {
case MARVELL_88E1111_PHYIDR0 :
RealMediaMode = get_MarvellPHY_media_mode ( dev ) ;
break ;
case CICADA_CIS8201_PHYIDR0 :
RealMediaMode = get_CicadaPHY_media_mode ( dev ) ;
break ;
default :
RealMediaMode = MEDIA_1000FULL ;
break ;
}
priv - > LinkState = INS_LINK_UP ;