[U-Boot] [PATCH 0/3][Net][ARM] Davinci Ethernet driver cleanup

Hello,
This patch set is an untested attempt at cleaning up the Davinci Ethernet driver. Since I don't have any real hardware, I've tried to keep the logical flow as similar to the original as possible and haven't touched any of the hardware access code. If anybody's able to test it, please do so.
Testing consists of 'MAKEALL ARM9' using ELDK 4.1
thanks, Ben

The driver has been renamed dm644x_emac.c
Signed-off-by: Ben Warren biggerbadderben@gmail.com --- cpu/arm926ejs/davinci/Makefile | 2 +- drivers/net/Makefile | 1 + .../davinci/ether.c => drivers/net/dm644x_emac.c | 0 3 files changed, 2 insertions(+), 1 deletions(-) rename cpu/arm926ejs/davinci/ether.c => drivers/net/dm644x_emac.c (100%)
diff --git a/cpu/arm926ejs/davinci/Makefile b/cpu/arm926ejs/davinci/Makefile index ed24e65..d77aa46 100644 --- a/cpu/arm926ejs/davinci/Makefile +++ b/cpu/arm926ejs/davinci/Makefile @@ -27,7 +27,7 @@ include $(TOPDIR)/config.mk
LIB = $(obj)lib$(SOC).a
-COBJS = timer.o ether.o lxt972.o dp83848.o +COBJS = timer.o lxt972.o dp83848.o SOBJS = lowlevel_init.o reset.o
SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c) diff --git a/drivers/net/Makefile b/drivers/net/Makefile index a360a50..26f1ea6 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -64,6 +64,7 @@ COBJS-$(CONFIG_SH_ETHER) += sh_eth.o COBJS-$(CONFIG_DRIVER_SMC91111) += smc91111.o COBJS-$(CONFIG_DRIVER_SMC911X) += smc911x.o COBJS-$(CONFIG_TIGON3) += tigon3.o bcm570x_autoneg.o 5701rls.o +COBJS-$(CONFIG_DRIVER_TI_EMAC) += dm644x_emac.o COBJS-$(CONFIG_TSEC_ENET) += tsec.o COBJS-$(CONFIG_TSI108_ETH) += tsi108_eth.o COBJS-$(CONFIG_ULI526X) += uli526x.o diff --git a/cpu/arm926ejs/davinci/ether.c b/drivers/net/dm644x_emac.c similarity index 100% rename from cpu/arm926ejs/davinci/ether.c rename to drivers/net/dm644x_emac.c

Removed pointless #ifdefs Moved functions around in file in preparation for switch to newer API
Signed-off-by: Ben Warren biggerbadderben@gmail.com --- drivers/net/dm644x_emac.c | 146 +++++++++++++++++++++------------------------ 1 files changed, 69 insertions(+), 77 deletions(-)
diff --git a/drivers/net/dm644x_emac.c b/drivers/net/dm644x_emac.c index f6f81df..f5cec05 100644 --- a/drivers/net/dm644x_emac.c +++ b/drivers/net/dm644x_emac.c @@ -42,10 +42,6 @@ #include <miiphy.h> #include <asm/arch/emac_defs.h>
-#ifdef CONFIG_DRIVER_TI_EMAC - -#ifdef CONFIG_CMD_NET - unsigned int emac_dbg = 0; #define debug_emac(fmt,args...) if (emac_dbg) printf(fmt,##args)
@@ -291,77 +287,6 @@ int davinci_eth_miiphy_initialize(bd_t *bis) } #endif
-/* - * This function initializes the emac hardware. It does NOT initialize - * EMAC modules power or pin multiplexors, that is done by board_init() - * much earlier in bootup process. Returns 1 on success, 0 otherwise. - */ -static int davinci_eth_hw_init(void) -{ - u_int32_t phy_id; - u_int16_t tmp; - int i; - - davinci_eth_mdio_enable(); - - for (i = 0; i < 256; i++) { - if (adap_mdio->ALIVE) - break; - udelay(10); - } - - if (i >= 256) { - printf("No ETH PHY detected!!!\n"); - return(0); - } - - /* Find if a PHY is connected and get it's address */ - if (!davinci_eth_phy_detect()) - return(0); - - /* Get PHY ID and initialize phy_ops for a detected PHY */ - if (!davinci_eth_phy_read(active_phy_addr, PHY_PHYIDR1, &tmp)) { - active_phy_addr = 0xff; - return(0); - } - - phy_id = (tmp << 16) & 0xffff0000; - - if (!davinci_eth_phy_read(active_phy_addr, PHY_PHYIDR2, &tmp)) { - active_phy_addr = 0xff; - return(0); - } - - phy_id |= tmp & 0x0000ffff; - - switch (phy_id) { - case PHY_LXT972: - sprintf(phy.name, "LXT972 @ 0x%02x", active_phy_addr); - phy.init = lxt972_init_phy; - phy.is_phy_connected = lxt972_is_phy_connected; - phy.get_link_speed = lxt972_get_link_speed; - phy.auto_negotiate = lxt972_auto_negotiate; - break; - case PHY_DP83848: - sprintf(phy.name, "DP83848 @ 0x%02x", active_phy_addr); - phy.init = dp83848_init_phy; - phy.is_phy_connected = dp83848_is_phy_connected; - phy.get_link_speed = dp83848_get_link_speed; - phy.auto_negotiate = dp83848_auto_negotiate; - break; - default: - sprintf(phy.name, "GENERIC @ 0x%02x", active_phy_addr); - phy.init = gen_init_phy; - phy.is_phy_connected = gen_is_phy_connected; - phy.get_link_speed = gen_get_link_speed; - phy.auto_negotiate = gen_auto_negotiate; - } - - printf("Ethernet PHY: %s\n", phy.name); - - return(1); -} -
/* Eth device open */ static int davinci_eth_open(void) @@ -650,6 +575,73 @@ static int davinci_eth_rcv_packet (void) return (0); }
-#endif /* CONFIG_CMD_NET */ +/* + * This function initializes the emac hardware. It does NOT initialize + * EMAC modules power or pin multiplexors, that is done by board_init() + * much earlier in bootup process. Returns 1 on success, 0 otherwise. + */ +static int davinci_eth_hw_init(void) +{ + u_int32_t phy_id; + u_int16_t tmp; + int i; + + davinci_eth_mdio_enable(); + + for (i = 0; i < 256; i++) { + if (adap_mdio->ALIVE) + break; + udelay(10); + } + + if (i >= 256) { + printf("No ETH PHY detected!!!\n"); + return(0); + } + + /* Find if a PHY is connected and get it's address */ + if (!davinci_eth_phy_detect()) + return(0); + + /* Get PHY ID and initialize phy_ops for a detected PHY */ + if (!davinci_eth_phy_read(active_phy_addr, PHY_PHYIDR1, &tmp)) { + active_phy_addr = 0xff; + return(0); + }
-#endif /* CONFIG_DRIVER_TI_EMAC */ + phy_id = (tmp << 16) & 0xffff0000; + + if (!davinci_eth_phy_read(active_phy_addr, PHY_PHYIDR2, &tmp)) { + active_phy_addr = 0xff; + return(0); + } + + phy_id |= tmp & 0x0000ffff; + + switch (phy_id) { + case PHY_LXT972: + sprintf(phy.name, "LXT972 @ 0x%02x", active_phy_addr); + phy.init = lxt972_init_phy; + phy.is_phy_connected = lxt972_is_phy_connected; + phy.get_link_speed = lxt972_get_link_speed; + phy.auto_negotiate = lxt972_auto_negotiate; + break; + case PHY_DP83848: + sprintf(phy.name, "DP83848 @ 0x%02x", active_phy_addr); + phy.init = dp83848_init_phy; + phy.is_phy_connected = dp83848_is_phy_connected; + phy.get_link_speed = dp83848_get_link_speed; + phy.auto_negotiate = dp83848_auto_negotiate; + break; + default: + sprintf(phy.name, "GENERIC @ 0x%02x", active_phy_addr); + phy.init = gen_init_phy; + phy.is_phy_connected = gen_is_phy_connected; + phy.get_link_speed = gen_get_link_speed; + phy.auto_negotiate = gen_auto_negotiate; + } + + printf("Ethernet PHY: %s\n", phy.name); + + return(1); +}

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: Ben Warren biggerbadderben@gmail.com --- board/davinci/common/misc.h | 1 - board/davinci/dvevm/dvevm.c | 3 - board/davinci/schmoogie/schmoogie.c | 3 - board/davinci/sffsdr/sffsdr.c | 3 - board/davinci/sonata/sonata.c | 3 - cpu/arm926ejs/cpu.c | 13 ++++++ drivers/net/dm644x_emac.c | 70 ++++++++++++----------------------- include/configs/davinci_dvevm.h | 1 + include/configs/davinci_schmoogie.h | 1 + include/configs/davinci_sffsdr.h | 1 + include/configs/davinci_sonata.h | 1 + include/netdev.h | 1 + net/eth.c | 4 -- 13 files changed, 42 insertions(+), 63 deletions(-)
diff --git a/board/davinci/common/misc.h b/board/davinci/common/misc.h index 4a57dbb..25b19b8 100644 --- a/board/davinci/common/misc.h +++ b/board/davinci/common/misc.h @@ -23,7 +23,6 @@ #define __MISC_H
extern void timer_init(void); -extern int eth_hw_init(void);
void dv_display_clk_infos(void); int dvevm_read_mac_address(uint8_t *buf); diff --git a/board/davinci/dvevm/dvevm.c b/board/davinci/dvevm/dvevm.c index 22308de..9fdfa58 100644 --- a/board/davinci/dvevm/dvevm.c +++ b/board/davinci/dvevm/dvevm.c @@ -76,9 +76,6 @@ int misc_init_r(void) if (dvevm_read_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);
setenv("videostd", ((video_mode & 0x80) ? "pal" : "ntsc")); diff --git a/board/davinci/schmoogie/schmoogie.c b/board/davinci/schmoogie/schmoogie.c index 433769a..738e9dd 100644 --- a/board/davinci/schmoogie/schmoogie.c +++ b/board/davinci/schmoogie/schmoogie.c @@ -133,8 +133,5 @@ int misc_init_r(void) forceenv("serial#", (char *)&tmp[0]); }
- if (!eth_hw_init()) - printf("ethernet init failed!\n"); - return(0); } diff --git a/board/davinci/sffsdr/sffsdr.c b/board/davinci/sffsdr/sffsdr.c index e76f86d..45d0456 100644 --- a/board/davinci/sffsdr/sffsdr.c +++ b/board/davinci/sffsdr/sffsdr.c @@ -146,8 +146,5 @@ int misc_init_r(void) if (sffsdr_read_mac_address(eeprom_enetaddr)) dv_configure_mac_address(eeprom_enetaddr);
- if (!eth_hw_init()) - printf("Ethernet init failed\n"); - return(0); } diff --git a/board/davinci/sonata/sonata.c b/board/davinci/sonata/sonata.c index d56b443..73bd25f 100644 --- a/board/davinci/sonata/sonata.c +++ b/board/davinci/sonata/sonata.c @@ -73,8 +73,5 @@ int misc_init_r(void) if (dvevm_read_mac_address(eeprom_enetaddr)) dv_configure_mac_address(eeprom_enetaddr);
- if (!eth_hw_init()) - printf("ethernet init failed!\n"); - return(0); } diff --git a/cpu/arm926ejs/cpu.c b/cpu/arm926ejs/cpu.c index 6307e33..d711b24 100644 --- a/cpu/arm926ejs/cpu.c +++ b/cpu/arm926ejs/cpu.c @@ -31,6 +31,7 @@
#include <common.h> #include <command.h> +#include <netdev.h> #include <arm926ejs.h> #include <asm/system.h>
@@ -80,3 +81,15 @@ static void cache_flush (void)
asm ("mcr p15, 0, %0, c7, c7, 0": :"r" (i)); } + +/* + * * Initializes on-chip ethernet controllers. + * * to override, implement board_eth_init() + * */ +int cpu_eth_init(bd_t *bis) +{ +#if defined(CONFIG_DRIVER_TI_EMAC) + dm644x_emac_initialize(); +#endif + return 0; +} diff --git a/drivers/net/dm644x_emac.c b/drivers/net/dm644x_emac.c index f5cec05..7c5dace 100644 --- a/drivers/net/dm644x_emac.c +++ b/drivers/net/dm644x_emac.c @@ -40,17 +40,12 @@ #include <command.h> #include <net.h> #include <miiphy.h> +#include <malloc.h> #include <asm/arch/emac_defs.h>
unsigned int emac_dbg = 0; #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 int gen_init_phy(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_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) { davinci_eth_mdio_enable(); } -/* End of wrappers */ -
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 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
/* 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; u_int32_t clkdiv, cnt; @@ -441,7 +402,7 @@ static void davinci_eth_ch_teardown(int ch) }
/* Eth device close */ -static int davinci_eth_close(void) +static void davinci_eth_close(struct eth_device *dev) { debug_emac("+ emac_close\n");
@@ -453,7 +414,6 @@ static int davinci_eth_close(void) adap_ewrap->EWCTL = 0;
debug_emac("- emac_close\n"); - return(1); }
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 * 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;
@@ -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 */ -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 *curr_desc; @@ -580,11 +541,27 @@ static int davinci_eth_rcv_packet (void) * EMAC modules power or pin multiplexors, that is done by board_init() * much earlier in bootup process. Returns 1 on success, 0 otherwise. */ -static int davinci_eth_hw_init(void) +int dm644x_emac_initialize(void) { u_int32_t phy_id; u_int16_t tmp; 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();
@@ -643,5 +620,6 @@ static int davinci_eth_hw_init(void)
printf("Ethernet PHY: %s\n", phy.name);
+ miiphy_register(phy.name, davinci_mii_phy_read, davinci_mii_phy_write); return(1); } diff --git a/include/configs/davinci_dvevm.h b/include/configs/davinci_dvevm.h index fae430b..bc5ed5b 100644 --- a/include/configs/davinci_dvevm.h +++ b/include/configs/davinci_dvevm.h @@ -108,6 +108,7 @@ #define CONFIG_BOOTP_DNS2 #define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_NET_RETRY_COUNT 10 +#define CONFIG_NET_MULTI /*=====================*/ /* Flash & Environment */ /*=====================*/ diff --git a/include/configs/davinci_schmoogie.h b/include/configs/davinci_schmoogie.h index 923e477..97e3701 100644 --- a/include/configs/davinci_schmoogie.h +++ b/include/configs/davinci_schmoogie.h @@ -76,6 +76,7 @@ #define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_NET_RETRY_COUNT 10 #define CONFIG_OVERWRITE_ETHADDR_ONCE +#define CONFIG_NET_MULTI /*=====================*/ /* Flash & Environment */ /*=====================*/ diff --git a/include/configs/davinci_sffsdr.h b/include/configs/davinci_sffsdr.h index 73a59db..160a0d6 100644 --- a/include/configs/davinci_sffsdr.h +++ b/include/configs/davinci_sffsdr.h @@ -74,6 +74,7 @@ #define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_NET_RETRY_COUNT 10 #define CONFIG_OVERWRITE_ETHADDR_ONCE +#define CONFIG_NET_MULTI /* Flash & Environment */ #undef CONFIG_ENV_IS_IN_FLASH #define CONFIG_SYS_NO_FLASH diff --git a/include/configs/davinci_sonata.h b/include/configs/davinci_sonata.h index 70d2c7d..95c5eba 100644 --- a/include/configs/davinci_sonata.h +++ b/include/configs/davinci_sonata.h @@ -108,6 +108,7 @@ #define CONFIG_BOOTP_DNS2 #define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_NET_RETRY_COUNT 10 +#define CONFIG_NET_MULTI /*=====================*/ /* Flash & Environment */ /*=====================*/ diff --git a/include/netdev.h b/include/netdev.h index 63cf730..17b9679 100644 --- a/include/netdev.h +++ b/include/netdev.h @@ -44,6 +44,7 @@ int cpu_eth_init(bd_t *bis); int au1x00_enet_initialize(bd_t*); int bfin_EMAC_initialize(bd_t *bis); int dc21x4x_initialize(bd_t *bis); +int dm644x_emac_initialize(void); int dnet_eth_initialize(int id, void *regs, unsigned int phy_addr); int e1000_initialize(bd_t *bis); int eepro100_initialize(bd_t *bis); diff --git a/net/eth.c b/net/eth.c index 4bbf84b..caba80b 100644 --- a/net/eth.c +++ b/net/eth.c @@ -505,7 +505,6 @@ extern int at91rm9200_miiphy_initialize(bd_t *bis); extern int emac4xx_miiphy_initialize(bd_t *bis); extern int mcf52x2_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) @@ -526,9 +525,6 @@ int eth_initialize(bd_t *bis) #if defined(CONFIG_DRIVER_NS7520_ETHERNET) ns7520_miiphy_initialize(bis); #endif -#if defined(CONFIG_DRIVER_TI_EMAC) - davinci_eth_miiphy_initialize(bis); -#endif return 0; } #endif

On 10:12 Tue 28 Apr , Ben Warren wrote:
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: Ben Warren biggerbadderben@gmail.com
board/davinci/common/misc.h | 1 - board/davinci/dvevm/dvevm.c | 3 - board/davinci/schmoogie/schmoogie.c | 3 - board/davinci/sffsdr/sffsdr.c | 3 - board/davinci/sonata/sonata.c | 3 - cpu/arm926ejs/cpu.c | 13 ++++++ drivers/net/dm644x_emac.c | 70 ++++++++++++----------------------- include/configs/davinci_dvevm.h | 1 + include/configs/davinci_schmoogie.h | 1 + include/configs/davinci_sffsdr.h | 1 + include/configs/davinci_sonata.h | 1 + include/netdev.h | 1 + net/eth.c | 4 -- 13 files changed, 42 insertions(+), 63 deletions(-)
diff --git a/board/davinci/common/misc.h b/board/davinci/common/misc.h index 4a57dbb..25b19b8 100644 --- a/board/davinci/common/misc.h +++ b/board/davinci/common/misc.h @@ -23,7 +23,6 @@ #define __MISC_H
extern void timer_init(void); -extern int eth_hw_init(void);
void dv_display_clk_infos(void); int dvevm_read_mac_address(uint8_t *buf); diff --git a/board/davinci/dvevm/dvevm.c b/board/davinci/dvevm/dvevm.c index 22308de..9fdfa58 100644 --- a/board/davinci/dvevm/dvevm.c +++ b/board/davinci/dvevm/dvevm.c @@ -76,9 +76,6 @@ int misc_init_r(void) if (dvevm_read_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);
setenv("videostd", ((video_mode & 0x80) ? "pal" : "ntsc"));
diff --git a/board/davinci/schmoogie/schmoogie.c b/board/davinci/schmoogie/schmoogie.c index 433769a..738e9dd 100644 --- a/board/davinci/schmoogie/schmoogie.c +++ b/board/davinci/schmoogie/schmoogie.c @@ -133,8 +133,5 @@ int misc_init_r(void) forceenv("serial#", (char *)&tmp[0]); }
- if (!eth_hw_init())
printf("ethernet init failed!\n");
- return(0);
} diff --git a/board/davinci/sffsdr/sffsdr.c b/board/davinci/sffsdr/sffsdr.c index e76f86d..45d0456 100644 --- a/board/davinci/sffsdr/sffsdr.c +++ b/board/davinci/sffsdr/sffsdr.c @@ -146,8 +146,5 @@ int misc_init_r(void) if (sffsdr_read_mac_address(eeprom_enetaddr)) dv_configure_mac_address(eeprom_enetaddr);
- if (!eth_hw_init())
printf("Ethernet init failed\n");
- return(0);
} diff --git a/board/davinci/sonata/sonata.c b/board/davinci/sonata/sonata.c index d56b443..73bd25f 100644 --- a/board/davinci/sonata/sonata.c +++ b/board/davinci/sonata/sonata.c @@ -73,8 +73,5 @@ int misc_init_r(void) if (dvevm_read_mac_address(eeprom_enetaddr)) dv_configure_mac_address(eeprom_enetaddr);
- if (!eth_hw_init())
printf("ethernet init failed!\n");
- return(0);
} diff --git a/cpu/arm926ejs/cpu.c b/cpu/arm926ejs/cpu.c index 6307e33..d711b24 100644 --- a/cpu/arm926ejs/cpu.c +++ b/cpu/arm926ejs/cpu.c @@ -31,6 +31,7 @@
#include <common.h> #include <command.h> +#include <netdev.h> #include <arm926ejs.h> #include <asm/system.h>
@@ -80,3 +81,15 @@ static void cache_flush (void)
asm ("mcr p15, 0, %0, c7, c7, 0": :"r" (i)); }
+/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
+int cpu_eth_init(bd_t *bis) +{ +#if defined(CONFIG_DRIVER_TI_EMAC)
- dm644x_emac_initialize();
+#endif
- return 0;
+}
please move this to the soc arm926ejs/davinci/cpu.c
the cpu.c is destinated to be removed in most of the case or at least all the soc specific code
Best Regards, J.

Hi J-C,
Jean-Christophe PLAGNIOL-VILLARD wrote: <snip>
+/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
+int cpu_eth_init(bd_t *bis) +{ +#if defined(CONFIG_DRIVER_TI_EMAC)
- dm644x_emac_initialize();
+#endif
- return 0;
+}
please move this to the soc arm926ejs/davinci/cpu.c
the cpu.c is destinated to be removed in most of the case or at least all the soc specific code
Best Regards, J.
There is currently no such file (not even in arm/next), or that's where this would have gone. This function needs to be in a source file that already has strongly-linked symbols or it won't override the weak version in net/eth.c. I'm certainly open to suggestions.
regards, Ben

On 13:29 Wed 29 Apr , Ben Warren wrote:
Hi J-C,
Jean-Christophe PLAGNIOL-VILLARD wrote:
<snip> >> +/* >> + * * Initializes on-chip ethernet controllers. >> + * * to override, implement board_eth_init() >> + * */ >> +int cpu_eth_init(bd_t *bis) >> +{ >> +#if defined(CONFIG_DRIVER_TI_EMAC) >> + dm644x_emac_initialize(); >> +#endif >> + return 0; >> +} >> > please move this to the soc > arm926ejs/davinci/cpu.c > > the cpu.c is destinated to be removed in most of the case > or at least all the soc specific code > > Best Regards, > J. > There is currently no such file (not even in arm/next), or that's where this would have gone. This function needs to be in a source file that already has strongly-linked symbols or it won't override the weak version in net/eth.c. I'm certainly open to suggestions.
or simply add an entry in the lds this will force the file to be evaluated first
Best Regards, J.

Jean-Christophe PLAGNIOL-VILLARD wrote:
On 13:29 Wed 29 Apr , Ben Warren wrote:
Hi J-C,
Jean-Christophe PLAGNIOL-VILLARD wrote:
<snip>
+/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
+int cpu_eth_init(bd_t *bis) +{ +#if defined(CONFIG_DRIVER_TI_EMAC)
- dm644x_emac_initialize();
+#endif
- return 0;
+}
please move this to the soc arm926ejs/davinci/cpu.c
the cpu.c is destinated to be removed in most of the case or at least all the soc specific code
Best Regards, J.
There is currently no such file (not even in arm/next), or that's where this would have gone. This function needs to be in a source file that already has strongly-linked symbols or it won't override the weak version in net/eth.c. I'm certainly open to suggestions.
or simply add an entry in the lds this will force the file to be evaluated first
That's not a scalable solution and isn't how we did it with other controllers. If there's no file that's guaranteed to be included in all Davinci boards that will have this MAC, an alternative is to implement board_eth_init() on each board, but IMHO that's worse architecturally.
Best Regards, J.
regards, Ben

On 15:11 Wed 29 Apr , Ben Warren wrote:
Jean-Christophe PLAGNIOL-VILLARD wrote:
On 13:29 Wed 29 Apr , Ben Warren wrote:
Hi J-C,
Jean-Christophe PLAGNIOL-VILLARD wrote:
<snip>
+/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
+int cpu_eth_init(bd_t *bis) +{ +#if defined(CONFIG_DRIVER_TI_EMAC)
- dm644x_emac_initialize();
+#endif
- return 0;
+}
please move this to the soc arm926ejs/davinci/cpu.c
the cpu.c is destinated to be removed in most of the case or at least all the soc specific code
Best Regards, J.
There is currently no such file (not even in arm/next), or that's where this would have gone. This function needs to be in a source file that already has strongly-linked symbols or it won't override the weak version in net/eth.c. I'm certainly open to suggestions.
or simply add an entry in the lds this will force the file to be evaluated first
That's not a scalable solution and isn't how we did it with other controllers. If there's no file that's guaranteed to be included in all Davinci boards that will have this MAC, an alternative is to implement board_eth_init() on each board, but IMHO that's worse architecturally.
maybe sync with David
as the clock function could be move to cpu.c it will have the stringly-link function
Best Regards, J.

On Wednesday 29 April 2009, Jean-Christophe PLAGNIOL-VILLARD wrote:
as the clock function could be move to cpu.c it will have the stringly-link function
I'll stuff that in a new cpu.c file, but those clock status display routines aren't mandatory.

On Tuesday 28 April 2009, Ben Warren wrote:
The driver has been renamed dm644x_emac.c
Let me suggest "davinci_emac.c" ... the same controller is in some non-dm644x DaVinci silicon (like dm365), and a gigabit flavor is in the dm6467 chip.
-COBJS = timer.o ether.o lxt972.o dp83848.o +COBJS = timer.o lxt972.o dp83848.o SOBJS = lowlevel_init.o reset.o
Given the recent cleanups in cpu/arm926ejs/davinci/Makefile, that won't quite apply. I suggest you pull some of the changes from arm-next.
Procedure note: this is exactly why Linux now has a shared "-next" tree ... to make sure interdependencies between development branches can be sorted out before the next merge window, so the merge window can be spent addressing more substantive issues (if any).

David Brownell wrote:
On Tuesday 28 April 2009, Ben Warren wrote:
The driver has been renamed dm644x_emac.c
Let me suggest "davinci_emac.c" ... the same controller is in some non-dm644x DaVinci silicon (like dm365), and a gigabit flavor is in the dm6467 chip.
OK. I named it this because the top of the file mentioned it was ripped off from 'dm644x_emac.c' (not Linux)
-COBJS = timer.o ether.o lxt972.o dp83848.o +COBJS = timer.o lxt972.o dp83848.o SOBJS = lowlevel_init.o reset.o
Given the recent cleanups in cpu/arm926ejs/davinci/Makefile, that won't quite apply. I suggest you pull some of the changes from arm-next.
OK, I'll look into that.
Procedure note: this is exactly why Linux now has a shared "-next" tree ... to make sure interdependencies between development branches can be sorted out before the next merge window, so the merge window can be spent addressing more substantive issues (if any).
Sounds good. I believe there is a 'next' branch on the U-boot mainline, and quite often we do use it, but probably should do so earlier in the process.
Thanks for the help and advice! Ben

On Tuesday 28 April 2009, Ben Warren wrote:
This patch set is an untested attempt at cleaning up the Davinci Ethernet driver. Since I don't have any real hardware, I've tried to keep the logical flow as similar to the original as possible and haven't touched any of the hardware access code. If anybody's able to test it, please do so.
FYI it passed sanity testing on a dm6446 evm, after updating the first patch to apply against more current cpu/.../davinci code.
- Dave

David Brownell wrote:
On Tuesday 28 April 2009, Ben Warren wrote:
This patch set is an untested attempt at cleaning up the Davinci Ethernet driver. Since I don't have any real hardware, I've tried to keep the logical flow as similar to the original as possible and haven't touched any of the hardware access code. If anybody's able to test it, please do so.
FYI it passed sanity testing on a dm6446 evm, after updating the first patch to apply against more current cpu/.../davinci code.
- Dave
Huh, how 'bout that. What a pleasant surprise! Thanks a lot Dave.
regards, Ben

On 10:12 Tue 28 Apr , Ben Warren wrote:
Hello,
This patch set is an untested attempt at cleaning up the Davinci Ethernet driver. Since I don't have any real hardware, I've tried to keep the logical flow as similar to the original as possible and haven't touched any of the hardware access code. If anybody's able to test it, please do so.
Testing consists of 'MAKEALL ARM9' using ELDK 4.1
as this patch will impact a lot of new boards I've in mind to apply it first and the new boards will use the NET_MULTI API
Best Regards, J.
participants (3)
-
Ben Warren
-
David Brownell
-
Jean-Christophe PLAGNIOL-VILLARD