diff options
| -rw-r--r-- | README | 6 | ||||
| -rw-r--r-- | drivers/net/davinci_emac.c | 24 | 
2 files changed, 22 insertions, 8 deletions
| @@ -1027,6 +1027,12 @@ The following options need to be configured:  			Define this to use i/o functions instead of macros  			(some hardware wont work with macros) +		CONFIG_DRIVER_TI_EMAC +		Support for davinci emac + +			CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT +			Define this if you have more then 3 PHYs. +  		CONFIG_FTGMAC100  		Support for Faraday's FTGMAC100 Gigabit SoC Ethernet diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c index fa31159a0..36c33af66 100644 --- a/drivers/net/davinci_emac.c +++ b/drivers/net/davinci_emac.c @@ -85,15 +85,17 @@ static int			emac_rx_queue_active = 0;  /* Receive packet buffers */  static unsigned char		emac_rx_buffers[EMAC_MAX_RX_BUFFERS * (EMAC_MAX_ETHERNET_PKT_SIZE + EMAC_PKT_ALIGN)]; -#define MAX_PHY		3 +#ifndef CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT +#define CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT	3 +#endif  /* PHY address for a discovered PHY (0xff - not found) */ -static u_int8_t	active_phy_addr[MAX_PHY] = { 0xff, 0xff, 0xff }; +static u_int8_t	active_phy_addr[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];  /* number of PHY found active */  static u_int8_t	num_phy; -phy_t				phy[MAX_PHY]; +phy_t				phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];  static int davinci_eth_set_mac_addr(struct eth_device *dev)  { @@ -160,9 +162,8 @@ static int davinci_eth_phy_detect(void)  	int		j;  	unsigned int	count = 0; -	active_phy_addr[0] = 0xff; -	active_phy_addr[1] = 0xff; -	active_phy_addr[2] = 0xff; +	for (i = 0; i < CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT; i++) +		active_phy_addr[i] = 0xff;  	udelay(1000);  	phy_act_state = readl(&adap_mdio->ALIVE); @@ -175,7 +176,14 @@ static int davinci_eth_phy_detect(void)  	for (i = 0, j = 0; i < 32; i++)  		if (phy_act_state & (1 << i)) {  			count++; -			active_phy_addr[j++] = i; +			if (count < CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT) { +				active_phy_addr[j++] = i; +			} else { +				printf("%s: to many PHYs detected.\n", +					__func__); +				count = 0; +				break; +			}  		}  	num_phy = count; @@ -752,7 +760,7 @@ int davinci_emac_initialize(void)  	if (!ret)  		return(0);  	else -		printf(" %d ETH PHY detected\n", ret); +		debug_emac(" %d ETH PHY detected\n", ret);  	/* Get PHY ID and initialize phy_ops for a detected PHY */  	for (i = 0; i < num_phy; i++) { |