@ -61,6 +61,7 @@ static void board_init_enetaddr(uchar *mac_addr)
# define KSZ_WRITE 0x02
# define KSZ_READ 0x03
# define KSZ_REG_CHID 0x00 /* Register 0: Chip ID0 */
# define KSZ_REG_STPID 0x01 /* Register 1: Chip ID1 / Start Switch */
# define KSZ_REG_GC9 0x0b /* Register 11: Global Control 9 */
# define KSZ_REG_P3C0 0x30 /* Register 48: Port 3 Control 0 */
@ -78,15 +79,17 @@ static int ksz8893m_reg_set(struct spi_slave *slave, uchar reg, uchar data)
return ksz8893m_transfer ( slave , KSZ_WRITE , reg , data , din ) ;
}
static int ksz8893m_reg_clear ( struct spi_slave * slave , uchar reg , uchar mask )
static int ksz8893m_reg_read ( struct spi_slave * slave , uchar reg )
{
int ret = 0 ;
int ret ;
unsigned char din [ 3 ] ;
ret = ksz8893m_transfer ( slave , KSZ_READ , reg , 0 , din ) ;
return ret ? ret : din [ 2 ] ;
}
ret | = ksz8893m_transfer ( slave , KSZ_READ , reg , 0 , din ) ;
ret | = ksz8893m_reg_set ( slave , reg , din [ 2 ] & mask ) ;
return ret ;
static int ksz8893m_reg_clear ( struct spi_slave * slave , uchar reg , uchar mask )
{
return ksz8893m_reg_set ( slave , reg , ksz8893m_reg_read ( slave , reg ) & mask ) ;
}
static int ksz8893m_reset ( struct spi_slave * slave )
@ -107,16 +110,16 @@ static int ksz8893m_reset(struct spi_slave *slave)
int board_eth_init ( bd_t * bis )
{
static bool switch_is_alive = false ;
static bool switch_is_alive = false , phy_is_ksz = true ;
int ret ;
if ( ! switch_is_alive ) {
struct spi_slave * slave = spi_setup_slave ( 0 , 1 , KSZ_MAX_HZ , SPI_MODE_3 ) ;
if ( slave ) {
if ( ! spi_claim_bus ( slave ) ) {
ret = ksz8893m_reset ( slave ) ;
if ( ! ret )
switch_is_alive = true ;
phy_is_ksz = ( ksz8893m_reg_read ( slave , KSZ_REG_CHID ) = = 0x88 ) ;
ret = phy_is_ksz ? ksz8893m_reset ( slave ) : 0 ;
switch_is_alive = ( ret = = 0 ) ;
spi_release_bus ( slave ) ;
}
spi_free_slave ( slave ) ;