Commit 8453587e authored by Ben Warren's avatar Ben Warren

Switched davinci_emac Ethernet driver to use newer API

Added CONFIG_NET_MULTI to all Davinci boards
Removed all calls to Davinci network driver from board code
Added cpu_eth_init() to cpu/arm926ejs/cpu.c
Signed-off-by: default avatarBen Warren <biggerbadderben@gmail.com>
parent 8cc13c13
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
#ifndef __MISC_H #ifndef __MISC_H
#define __MISC_H #define __MISC_H
extern int eth_hw_init(void);
int dvevm_read_mac_address(uint8_t *buf); int dvevm_read_mac_address(uint8_t *buf);
void dv_configure_mac_address(uint8_t *rom_enetaddr); void dv_configure_mac_address(uint8_t *rom_enetaddr);
......
...@@ -73,9 +73,6 @@ int misc_init_r(void) ...@@ -73,9 +73,6 @@ int misc_init_r(void)
if (dvevm_read_mac_address(eeprom_enetaddr)) if (dvevm_read_mac_address(eeprom_enetaddr))
dv_configure_mac_address(eeprom_enetaddr); dv_configure_mac_address(eeprom_enetaddr);
if (!eth_hw_init())
printf("ethernet init failed!\n");
i2c_read(0x39, 0x00, 1, &video_mode, 1); i2c_read(0x39, 0x00, 1, &video_mode, 1);
setenv("videostd", ((video_mode & 0x80) ? "pal" : "ntsc")); setenv("videostd", ((video_mode & 0x80) ? "pal" : "ntsc"));
......
...@@ -130,8 +130,5 @@ int misc_init_r(void) ...@@ -130,8 +130,5 @@ int misc_init_r(void)
forceenv("serial#", (char *)&tmp[0]); forceenv("serial#", (char *)&tmp[0]);
} }
if (!eth_hw_init())
printf("ethernet init failed!\n");
return(0); return(0);
} }
...@@ -143,8 +143,5 @@ int misc_init_r(void) ...@@ -143,8 +143,5 @@ int misc_init_r(void)
if (sffsdr_read_mac_address(eeprom_enetaddr)) if (sffsdr_read_mac_address(eeprom_enetaddr))
dv_configure_mac_address(eeprom_enetaddr); dv_configure_mac_address(eeprom_enetaddr);
if (!eth_hw_init())
printf("Ethernet init failed\n");
return(0); return(0);
} }
...@@ -70,8 +70,5 @@ int misc_init_r(void) ...@@ -70,8 +70,5 @@ int misc_init_r(void)
if (dvevm_read_mac_address(eeprom_enetaddr)) if (dvevm_read_mac_address(eeprom_enetaddr))
dv_configure_mac_address(eeprom_enetaddr); dv_configure_mac_address(eeprom_enetaddr);
if (!eth_hw_init())
printf("ethernet init failed!\n");
return(0); return(0);
} }
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
*/ */
#include <common.h> #include <common.h>
#include <netdev.h>
#include <asm/arch/hardware.h> #include <asm/arch/hardware.h>
...@@ -129,3 +130,14 @@ int print_cpuinfo(void) ...@@ -129,3 +130,14 @@ int print_cpuinfo(void)
#endif #endif
/*
* Initializes on-chip ethernet controllers.
* to override, implement board_eth_init()
*/
int cpu_eth_init(bd_t *bis)
{
#if defined(CONFIG_DRIVER_TI_EMAC)
davinci_emac_initialize();
#endif
return 0;
}
...@@ -40,17 +40,12 @@ ...@@ -40,17 +40,12 @@
#include <command.h> #include <command.h>
#include <net.h> #include <net.h>
#include <miiphy.h> #include <miiphy.h>
#include <malloc.h>
#include <asm/arch/emac_defs.h> #include <asm/arch/emac_defs.h>
unsigned int emac_dbg = 0; unsigned int emac_dbg = 0;
#define debug_emac(fmt,args...) if (emac_dbg) printf(fmt,##args) #define debug_emac(fmt,args...) if (emac_dbg) printf(fmt,##args)
/* Internal static functions */
static int davinci_eth_hw_init (void);
static int davinci_eth_open (void);
static int davinci_eth_close (void);
static int davinci_eth_send_packet (volatile void *packet, int length);
static int davinci_eth_rcv_packet (void);
static void davinci_eth_mdio_enable(void); static void davinci_eth_mdio_enable(void);
static int gen_init_phy(int phy_addr); static int gen_init_phy(int phy_addr);
...@@ -58,38 +53,10 @@ static int gen_is_phy_connected(int phy_addr); ...@@ -58,38 +53,10 @@ static int gen_is_phy_connected(int phy_addr);
static int gen_get_link_speed(int phy_addr); static int gen_get_link_speed(int phy_addr);
static int gen_auto_negotiate(int phy_addr); static int gen_auto_negotiate(int phy_addr);
/* Wrappers exported to the U-Boot proper */
int eth_hw_init(void)
{
return(davinci_eth_hw_init());
}
int eth_init(bd_t * bd)
{
return(davinci_eth_open());
}
void eth_halt(void)
{
davinci_eth_close();
}
int eth_send(volatile void *packet, int length)
{
return(davinci_eth_send_packet(packet, length));
}
int eth_rx(void)
{
return(davinci_eth_rcv_packet());
}
void eth_mdio_enable(void) void eth_mdio_enable(void)
{ {
davinci_eth_mdio_enable(); davinci_eth_mdio_enable();
} }
/* End of wrappers */
static u_int8_t davinci_eth_mac_addr[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; static u_int8_t davinci_eth_mac_addr[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
...@@ -279,17 +246,11 @@ static int davinci_mii_phy_write(char *devname, unsigned char addr, unsigned cha ...@@ -279,17 +246,11 @@ static int davinci_mii_phy_write(char *devname, unsigned char addr, unsigned cha
return(davinci_eth_phy_write(addr, reg, value) ? 0 : 1); return(davinci_eth_phy_write(addr, reg, value) ? 0 : 1);
} }
int davinci_eth_miiphy_initialize(bd_t *bis)
{
miiphy_register(phy.name, davinci_mii_phy_read, davinci_mii_phy_write);
return(1);
}
#endif #endif
/* Eth device open */ /* Eth device open */
static int davinci_eth_open(void) static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
{ {
dv_reg_p addr; dv_reg_p addr;
u_int32_t clkdiv, cnt; u_int32_t clkdiv, cnt;
...@@ -441,7 +402,7 @@ static void davinci_eth_ch_teardown(int ch) ...@@ -441,7 +402,7 @@ static void davinci_eth_ch_teardown(int ch)
} }
/* Eth device close */ /* Eth device close */
static int davinci_eth_close(void) static void davinci_eth_close(struct eth_device *dev)
{ {
debug_emac("+ emac_close\n"); debug_emac("+ emac_close\n");
...@@ -453,7 +414,6 @@ static int davinci_eth_close(void) ...@@ -453,7 +414,6 @@ static int davinci_eth_close(void)
adap_ewrap->EWCTL = 0; adap_ewrap->EWCTL = 0;
debug_emac("- emac_close\n"); debug_emac("- emac_close\n");
return(1);
} }
static int tx_send_loop = 0; static int tx_send_loop = 0;
...@@ -462,7 +422,8 @@ static int tx_send_loop = 0; ...@@ -462,7 +422,8 @@ static int tx_send_loop = 0;
* This function sends a single packet on the network and returns * This function sends a single packet on the network and returns
* positive number (number of bytes transmitted) or negative for error * positive number (number of bytes transmitted) or negative for error
*/ */
static int davinci_eth_send_packet (volatile void *packet, int length) static int davinci_eth_send_packet (struct eth_device *dev,
volatile void *packet, int length)
{ {
int ret_status = -1; int ret_status = -1;
...@@ -509,7 +470,7 @@ static int davinci_eth_send_packet (volatile void *packet, int length) ...@@ -509,7 +470,7 @@ static int davinci_eth_send_packet (volatile void *packet, int length)
/* /*
* This function handles receipt of a packet from the network * This function handles receipt of a packet from the network
*/ */
static int davinci_eth_rcv_packet (void) static int davinci_eth_rcv_packet (struct eth_device *dev)
{ {
volatile emac_desc *rx_curr_desc; volatile emac_desc *rx_curr_desc;
volatile emac_desc *curr_desc; volatile emac_desc *curr_desc;
...@@ -580,11 +541,27 @@ static int davinci_eth_rcv_packet (void) ...@@ -580,11 +541,27 @@ static int davinci_eth_rcv_packet (void)
* EMAC modules power or pin multiplexors, that is done by board_init() * EMAC modules power or pin multiplexors, that is done by board_init()
* much earlier in bootup process. Returns 1 on success, 0 otherwise. * much earlier in bootup process. Returns 1 on success, 0 otherwise.
*/ */
static int davinci_eth_hw_init(void) int davinci_emac_initialize(void)
{ {
u_int32_t phy_id; u_int32_t phy_id;
u_int16_t tmp; u_int16_t tmp;
int i; int i;
struct eth_device *dev;
dev = malloc(sizeof *dev);
if (dev == NULL)
return -1;
memset(dev, 0, sizeof *dev);
dev->iobase = 0;
dev->init = davinci_eth_open;
dev->halt = davinci_eth_close;
dev->send = davinci_eth_send_packet;
dev->recv = davinci_eth_rcv_packet;
eth_register(dev);
davinci_eth_mdio_enable(); davinci_eth_mdio_enable();
...@@ -643,5 +620,6 @@ static int davinci_eth_hw_init(void) ...@@ -643,5 +620,6 @@ static int davinci_eth_hw_init(void)
printf("Ethernet PHY: %s\n", phy.name); printf("Ethernet PHY: %s\n", phy.name);
miiphy_register(phy.name, davinci_mii_phy_read, davinci_mii_phy_write);
return(1); return(1);
} }
...@@ -109,6 +109,7 @@ ...@@ -109,6 +109,7 @@
#define CONFIG_BOOTP_DNS2 #define CONFIG_BOOTP_DNS2
#define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_BOOTP_SEND_HOSTNAME
#define CONFIG_NET_RETRY_COUNT 10 #define CONFIG_NET_RETRY_COUNT 10
#define CONFIG_NET_MULTI
/*=====================*/ /*=====================*/
/* Flash & Environment */ /* Flash & Environment */
/*=====================*/ /*=====================*/
......
...@@ -77,6 +77,7 @@ ...@@ -77,6 +77,7 @@
#define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_BOOTP_SEND_HOSTNAME
#define CONFIG_NET_RETRY_COUNT 10 #define CONFIG_NET_RETRY_COUNT 10
#define CONFIG_OVERWRITE_ETHADDR_ONCE #define CONFIG_OVERWRITE_ETHADDR_ONCE
#define CONFIG_NET_MULTI
/*=====================*/ /*=====================*/
/* Flash & Environment */ /* Flash & Environment */
/*=====================*/ /*=====================*/
......
...@@ -74,6 +74,7 @@ ...@@ -74,6 +74,7 @@
#define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_BOOTP_SEND_HOSTNAME
#define CONFIG_NET_RETRY_COUNT 10 #define CONFIG_NET_RETRY_COUNT 10
#define CONFIG_OVERWRITE_ETHADDR_ONCE #define CONFIG_OVERWRITE_ETHADDR_ONCE
#define CONFIG_NET_MULTI
/* Flash & Environment */ /* Flash & Environment */
#undef CONFIG_ENV_IS_IN_FLASH #undef CONFIG_ENV_IS_IN_FLASH
#define CONFIG_SYS_NO_FLASH #define CONFIG_SYS_NO_FLASH
......
...@@ -109,6 +109,7 @@ ...@@ -109,6 +109,7 @@
#define CONFIG_BOOTP_DNS2 #define CONFIG_BOOTP_DNS2
#define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_BOOTP_SEND_HOSTNAME
#define CONFIG_NET_RETRY_COUNT 10 #define CONFIG_NET_RETRY_COUNT 10
#define CONFIG_NET_MULTI
/*=====================*/ /*=====================*/
/* Flash & Environment */ /* Flash & Environment */
/*=====================*/ /*=====================*/
......
...@@ -44,6 +44,7 @@ int cpu_eth_init(bd_t *bis); ...@@ -44,6 +44,7 @@ int cpu_eth_init(bd_t *bis);
int au1x00_enet_initialize(bd_t*); int au1x00_enet_initialize(bd_t*);
int bfin_EMAC_initialize(bd_t *bis); int bfin_EMAC_initialize(bd_t *bis);
int dc21x4x_initialize(bd_t *bis); int dc21x4x_initialize(bd_t *bis);
int davinci_emac_initialize(void);
int dnet_eth_initialize(int id, void *regs, unsigned int phy_addr); int dnet_eth_initialize(int id, void *regs, unsigned int phy_addr);
int e1000_initialize(bd_t *bis); int e1000_initialize(bd_t *bis);
int eepro100_initialize(bd_t *bis); int eepro100_initialize(bd_t *bis);
......
...@@ -504,7 +504,6 @@ extern int at91rm9200_miiphy_initialize(bd_t *bis); ...@@ -504,7 +504,6 @@ extern int at91rm9200_miiphy_initialize(bd_t *bis);
extern int emac4xx_miiphy_initialize(bd_t *bis); extern int emac4xx_miiphy_initialize(bd_t *bis);
extern int mcf52x2_miiphy_initialize(bd_t *bis); extern int mcf52x2_miiphy_initialize(bd_t *bis);
extern int ns7520_miiphy_initialize(bd_t *bis); extern int ns7520_miiphy_initialize(bd_t *bis);
extern int davinci_eth_miiphy_initialize(bd_t *bis);
int eth_initialize(bd_t *bis) int eth_initialize(bd_t *bis)
...@@ -524,9 +523,6 @@ int eth_initialize(bd_t *bis) ...@@ -524,9 +523,6 @@ int eth_initialize(bd_t *bis)
#endif #endif
#if defined(CONFIG_DRIVER_NS7520_ETHERNET) #if defined(CONFIG_DRIVER_NS7520_ETHERNET)
ns7520_miiphy_initialize(bis); ns7520_miiphy_initialize(bis);
#endif
#if defined(CONFIG_DRIVER_TI_EMAC)
davinci_eth_miiphy_initialize(bis);
#endif #endif
return 0; return 0;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment