@ -34,8 +34,11 @@
# include <common.h>
# include <i2c.h>
# include <net.h>
# include <netdev.h>
# include <asm/arch/hardware.h>
# include <asm/arch/emif_defs.h>
# include <asm/arch/emac_defs.h>
# include <asm/io.h>
# include "../common/misc.h"
@ -69,6 +72,20 @@ static const struct pinmux_config emifa_nand_pins[] = {
{ pinmux [ 18 ] , 1 , 5 } ,
} ;
/* EMAC PHY interface pins */
static const struct pinmux_config emac_pins [ ] = {
{ pinmux [ 9 ] , 0 , 5 } ,
{ pinmux [ 10 ] , 2 , 1 } ,
{ pinmux [ 10 ] , 2 , 2 } ,
{ pinmux [ 10 ] , 2 , 3 } ,
{ pinmux [ 10 ] , 2 , 4 } ,
{ pinmux [ 10 ] , 2 , 5 } ,
{ pinmux [ 10 ] , 2 , 6 } ,
{ pinmux [ 10 ] , 2 , 7 } ,
{ pinmux [ 11 ] , 2 , 0 } ,
{ pinmux [ 11 ] , 2 , 1 } ,
} ;
/* UART pin muxer settings */
static const struct pinmux_config uart_pins [ ] = {
{ pinmux [ 8 ] , 2 , 7 } ,
@ -77,8 +94,8 @@ static const struct pinmux_config uart_pins[] = {
/* I2C pin muxer settings */
static const struct pinmux_config i2c_pins [ ] = {
{ pinmux [ 9 ] , 2 , 3 } ,
{ pinmux [ 9 ] , 2 , 4 }
{ pinmux [ 8 ] , 2 , 3 } ,
{ pinmux [ 8 ] , 2 , 4 }
} ;
/* USB0_DRVVBUS pin muxer settings */
@ -98,6 +115,9 @@ static const struct pinmux_resource pinmuxes[] = {
# ifdef CONFIG_USE_NAND
PINMUX_ITEM ( emifa_nand_pins ) ,
# endif
# if defined(CONFIG_DRIVER_TI_EMAC)
PINMUX_ITEM ( emac_pins ) ,
# endif
} ;
int board_init ( void )
@ -169,3 +189,44 @@ int board_init(void)
return ( 0 ) ;
}
# if defined(CONFIG_DRIVER_TI_EMAC)
# define PHY_SW_I2C_ADDR 0x5f /* Address of PHY on i2c bus */
/*
* Initializes on - board ethernet controllers .
*/
int board_eth_init ( bd_t * bis )
{
u_int8_t mac_addr [ 6 ] ;
u_int8_t switch_start_cmd [ 2 ] = { 0x01 , 0x23 } ;
/* Read Ethernet MAC address from EEPROM */
if ( dvevm_read_mac_address ( mac_addr ) )
/* set address env if not already set */
dv_configure_mac_address ( mac_addr ) ;
/* read the address back from env */
if ( ! eth_getenv_enetaddr ( " ethaddr " , mac_addr ) )
return - 1 ;
/* provide the resulting addr to the driver */
davinci_eth_set_mac_addr ( mac_addr ) ;
/* enable the Ethernet switch in the 3 port PHY */
if ( i2c_write ( PHY_SW_I2C_ADDR , 0 , 0 ,
switch_start_cmd , sizeof ( switch_start_cmd ) ) ) {
printf ( " Ethernet switch start failed! \n " ) ;
return - 1 ;
}
/* finally, initialise the driver */
if ( ! davinci_emac_initialize ( ) ) {
printf ( " Error: Ethernet init failed! \n " ) ;
return - 1 ;
}
return 0 ;
}
# endif /* CONFIG_DRIVER_TI_EMAC */