diff options
| author | Wolfgang Denk <wd@denx.de> | 2008-09-03 22:43:57 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2008-09-03 22:43:57 +0200 | 
| commit | 16116ddd0d0158f4e91c91dc979b845b6e98a99d (patch) | |
| tree | e2062a888c76462b6335da29092c5fe4134c0859 | |
| parent | 628ffd73bcff0c9f3bc5a8eeb2c7455fe9d28a51 (diff) | |
| parent | be1b0d2777e179191a57b138b660547a17e55aad (diff) | |
| download | olio-uboot-2014.01-16116ddd0d0158f4e91c91dc979b845b6e98a99d.tar.xz olio-uboot-2014.01-16116ddd0d0158f4e91c91dc979b845b6e98a99d.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-net
123 files changed, 1018 insertions, 301 deletions
| diff --git a/board/MAI/AmigaOneG3SE/AmigaOneG3SE.c b/board/MAI/AmigaOneG3SE/AmigaOneG3SE.c index e118563fc..4d44001ff 100644 --- a/board/MAI/AmigaOneG3SE/AmigaOneG3SE.c +++ b/board/MAI/AmigaOneG3SE/AmigaOneG3SE.c @@ -26,6 +26,7 @@  #include <common.h>  #include <command.h>  #include <pci.h> +#include <netdev.h>  #include "articiaS.h"  #include "memio.h"  #include "via686.h" @@ -111,3 +112,11 @@ void pci_init_board (void)  	articiaS_pci_init ();  #endif  } + +int board_eth_init(bd_t *bis) +{ +#if defined(CONFIG_3COM) +	eth_3com_initialize(bis); +#endif +	return 0; +} diff --git a/board/MAI/AmigaOneG3SE/enet.c b/board/MAI/AmigaOneG3SE/enet.c index 5a90cc57d..0b4dfe6aa 100644 --- a/board/MAI/AmigaOneG3SE/enet.c +++ b/board/MAI/AmigaOneG3SE/enet.c @@ -28,6 +28,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h> diff --git a/board/Marvell/db64360/db64360.c b/board/Marvell/db64360/db64360.c index 2a810a618..c03d03d38 100644 --- a/board/Marvell/db64360/db64360.c +++ b/board/Marvell/db64360/db64360.c @@ -33,6 +33,7 @@  #include "../include/pci.h"  #include "../include/mv_gen_reg.h"  #include <net.h> +#include <netdev.h>  #include "eth.h"  #include "mpsc.h" @@ -929,3 +930,8 @@ void board_prebootm_init ()  	icache_disable ();  	dcache_disable ();  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/Marvell/db64460/db64460.c b/board/Marvell/db64460/db64460.c index 1ae898d1e..8a05cd209 100644 --- a/board/Marvell/db64460/db64460.c +++ b/board/Marvell/db64460/db64460.c @@ -33,6 +33,7 @@  #include "../include/pci.h"  #include "../include/mv_gen_reg.h"  #include <net.h> +#include <netdev.h>  #include "eth.h"  #include "mpsc.h" @@ -929,3 +930,8 @@ void board_prebootm_init ()  	icache_disable ();  	dcache_disable ();  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/a3000/a3000.c b/board/a3000/a3000.c index c1eceaa2f..040ba8976 100644 --- a/board/a3000/a3000.c +++ b/board/a3000/a3000.c @@ -27,6 +27,7 @@  #include <common.h>  #include <mpc824x.h>  #include <pci.h> +#include <netdev.h>  int checkboard (void)  { @@ -109,3 +110,9 @@ void pci_init_board(void)  {  	pci_mpc824x_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} + diff --git a/board/amcc/katmai/katmai.c b/board/amcc/katmai/katmai.c index 08d89d779..172b5811e 100644 --- a/board/amcc/katmai/katmai.c +++ b/board/amcc/katmai/katmai.c @@ -27,6 +27,7 @@  #include <i2c.h>  #include <libfdt.h>  #include <fdt_support.h> +#include <netdev.h>  #include <asm/processor.h>  #include <asm/io.h>  #include <asm/gpio.h> @@ -447,3 +448,8 @@ int post_hotkeys_pressed(void)  	return (ctrlc());  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/amcc/taihu/taihu.c b/board/amcc/taihu/taihu.c index 254e3eb83..266f2601c 100644 --- a/board/amcc/taihu/taihu.c +++ b/board/amcc/taihu/taihu.c @@ -28,6 +28,7 @@  #include <asm/processor.h>  #include <asm/io.h>  #include <spi.h> +#include <netdev.h>  #include <asm/gpio.h>  extern int lcd_init(void); @@ -200,3 +201,8 @@ int pci_pre_init(struct pci_controller *hose)  	return 1;  }  #endif /* CONFIG_PCI */ + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/amcc/taishan/taishan.c b/board/amcc/taishan/taishan.c index fdd82e7cc..cd432cb98 100644 --- a/board/amcc/taishan/taishan.c +++ b/board/amcc/taishan/taishan.c @@ -27,6 +27,7 @@  #include <asm/processor.h>  #include <spd_sdram.h>  #include <ppc4xx_enet.h> +#include <netdev.h>  #ifdef CFG_INIT_SHOW_RESET_REG  void show_reset_reg(void); @@ -311,3 +312,8 @@ int post_hotkeys_pressed(void)  	return (ctrlc());  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/amcc/yucca/yucca.c b/board/amcc/yucca/yucca.c index 84c3938d7..e0c12687d 100644 --- a/board/amcc/yucca/yucca.c +++ b/board/amcc/yucca/yucca.c @@ -28,6 +28,7 @@  #include <common.h>  #include <ppc4xx.h>  #include <i2c.h> +#include <netdev.h>  #include <asm/processor.h>  #include <asm/io.h>  #include <asm/4xx_pcie.h> @@ -952,3 +953,8 @@ int onboard_pci_arbiter_selected(int core_pci)  #endif  	return (BOARD_OPTION_NOT_SELECTED);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/amirix/ap1000/ap1000.c b/board/amirix/ap1000/ap1000.c index 55277e72d..8f30ed966 100644 --- a/board/amirix/ap1000/ap1000.c +++ b/board/amirix/ap1000/ap1000.c @@ -23,6 +23,7 @@  #include <common.h>  #include <command.h> +#include <netdev.h>  #include <asm/processor.h>  #include "powerspan.h" @@ -697,3 +698,9 @@ U_BOOT_CMD (swrecon, 1, 0, do_swreconfig,  	    "swrecon - trigger a board reconfigure to the software selected configuration\n",  	    "\n"  	    "    - trigger a board reconfigure to the software selected configuration\n"); + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} + diff --git a/board/atmel/at91cap9adk/at91cap9adk.c b/board/atmel/at91cap9adk/at91cap9adk.c index c5082a092..787d64d80 100644 --- a/board/atmel/at91cap9adk/at91cap9adk.c +++ b/board/atmel/at91cap9adk/at91cap9adk.c @@ -30,11 +30,13 @@  #include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <asm/arch/io.h> +#include <asm/arch/hardware.h>  #include <lcd.h>  #include <atmel_lcdc.h>  #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)  #include <net.h>  #endif +#include <netdev.h>  #define MP_BLOCK_3_BASE	0xFDF00000 @@ -376,3 +378,12 @@ void reset_phy(void)  #endif  }  #endif + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; +#ifdef CONFIG_MACB +	rc = macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x00); +#endif +	return rc; +} diff --git a/board/atmel/at91sam9260ek/at91sam9260ek.c b/board/atmel/at91sam9260ek/at91sam9260ek.c index 06d8512cc..913e3fb34 100644 --- a/board/atmel/at91sam9260ek/at91sam9260ek.c +++ b/board/atmel/at91sam9260ek/at91sam9260ek.c @@ -30,9 +30,11 @@  #include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <asm/arch/io.h> +#include <asm/arch/hardware.h>  #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)  #include <net.h>  #endif +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -248,3 +250,12 @@ void reset_phy(void)  #endif  }  #endif + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; +#ifdef CONFIG_MACB +	rc = macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x00); +#endif +	return rc; +} diff --git a/board/atmel/at91sam9263ek/at91sam9263ek.c b/board/atmel/at91sam9263ek/at91sam9263ek.c index 927fc912c..c70507455 100644 --- a/board/atmel/at91sam9263ek/at91sam9263ek.c +++ b/board/atmel/at91sam9263ek/at91sam9263ek.c @@ -31,11 +31,13 @@  #include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <asm/arch/io.h> +#include <asm/arch/hardware.h>  #include <lcd.h>  #include <atmel_lcdc.h>  #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)  #include <net.h>  #endif +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -308,3 +310,12 @@ void reset_phy(void)  #endif  }  #endif + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; +#ifdef CONFIG_MACB +	rc = macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x00); +#endif +	return rc; +} diff --git a/board/atmel/atngw100/atngw100.c b/board/atmel/atngw100/atngw100.c index 7f3e48541..fa1a2aa7c 100644 --- a/board/atmel/atngw100/atngw100.c +++ b/board/atmel/atngw100/atngw100.c @@ -26,6 +26,7 @@  #include <asm/arch/clk.h>  #include <asm/arch/gpio.h>  #include <asm/arch/hmatrix.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -93,8 +94,6 @@ void board_init_info(void)  	gd->bd->bi_phy_id[1] = 0x03;  } -extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); -  #ifdef CONFIG_CMD_NET  int board_eth_init(bd_t *bi)  { diff --git a/board/atmel/atstk1000/atstk1000.c b/board/atmel/atstk1000/atstk1000.c index 915b1c353..94523b5a3 100644 --- a/board/atmel/atstk1000/atstk1000.c +++ b/board/atmel/atstk1000/atstk1000.c @@ -26,6 +26,7 @@  #include <asm/arch/clk.h>  #include <asm/arch/gpio.h>  #include <asm/arch/hmatrix.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -116,8 +117,6 @@ void board_init_info(void)  	gd->bd->bi_phy_id[1] = 0x11;  } -extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); -  #ifdef CONFIG_CMD_NET  int board_eth_init(bd_t *bi)  { diff --git a/board/bc3450/bc3450.c b/board/bc3450/bc3450.c index a728dc64d..7ddf74c1c 100644 --- a/board/bc3450/bc3450.c +++ b/board/bc3450/bc3450.c @@ -33,6 +33,7 @@  #include <common.h>  #include <mpc5xxx.h>  #include <pci.h> +#include <netdev.h>  #ifdef CONFIG_VIDEO_SM501  #include <sm501.h> @@ -669,3 +670,9 @@ int board_get_height (void)  }  #endif /* CONFIG_VIDEO_SM501 */ + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis); /* Built in FEC comes first */ +	return pci_eth_init(bis); +} diff --git a/board/bf537-stamp/bf537-stamp.c b/board/bf537-stamp/bf537-stamp.c index a9b7a68c5..456721311 100644 --- a/board/bf537-stamp/bf537-stamp.c +++ b/board/bf537-stamp/bf537-stamp.c @@ -32,6 +32,7 @@  #include <asm/io.h>  #include <net.h>  #include <asm/mach-common/bits/bootrom.h> +#include <netdev.h>  /**   * is_valid_ether_addr - Determine if the given Ethernet address is valid @@ -156,8 +157,6 @@ int misc_init_r(void)  #if defined(CONFIG_BFIN_MAC) -extern int bfin_EMAC_initialize(bd_t *bis); -  int board_eth_init(bd_t *bis)  {  	return bfin_EMAC_initialize(bis); diff --git a/board/cpc45/cpc45.c b/board/cpc45/cpc45.c index f4e867ce7..16ead75de 100644 --- a/board/cpc45/cpc45.c +++ b/board/cpc45/cpc45.c @@ -27,6 +27,7 @@  #include <asm/io.h>  #include <pci.h>  #include <i2c.h> +#include <netdev.h>  int sysControlDisplay(int digit, uchar ascii_code);  extern void Plx9030Init(void); @@ -273,3 +274,8 @@ void ide_led (uchar led, uchar status)  	writeb(val, BCSR_BASE + 0x04);  }  # endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/cpu87/cpu87.c b/board/cpu87/cpu87.c index f5a5de5d8..454987cff 100644 --- a/board/cpu87/cpu87.c +++ b/board/cpu87/cpu87.c @@ -26,6 +26,7 @@  #include <mpc8260.h>  #include "cpu87.h"  #include <pci.h> +#include <netdev.h>  /*   * I/O Port configuration table @@ -339,3 +340,8 @@ void pci_init_board(void)  	pci_mpc8250_init(&hose);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/cu824/cu824.c b/board/cu824/cu824.c index ecf632894..0fd4223e9 100644 --- a/board/cu824/cu824.c +++ b/board/cu824/cu824.c @@ -28,6 +28,7 @@  #include <mpc824x.h>  #include <asm/processor.h>  #include <pci.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -91,3 +92,8 @@ void pci_init_board(void)  {  	pci_mpc824x_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/eXalion/eXalion.c b/board/eXalion/eXalion.c index 385b498d0..c5dff24f0 100644 --- a/board/eXalion/eXalion.c +++ b/board/eXalion/eXalion.c @@ -30,6 +30,7 @@  #include <asm/io.h>  #include <pci.h>  #include <ide.h> +#include <netdev.h>  #include "piix_pci.h"  #include "eXalion.h" @@ -290,3 +291,8 @@ void pci_init_board (void)  {  	pci_mpc824x_init (&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/earthlcd/favr-32-ezkit/favr-32-ezkit.c b/board/earthlcd/favr-32-ezkit/favr-32-ezkit.c index da69e754f..da055899f 100644 --- a/board/earthlcd/favr-32-ezkit/favr-32-ezkit.c +++ b/board/earthlcd/favr-32-ezkit/favr-32-ezkit.c @@ -18,6 +18,7 @@   * Place, Suite 330, Boston, MA 02111-1307 USA   */  #include <common.h> +#include <netdev.h>  #include <asm/io.h>  #include <asm/sdram.h> @@ -87,8 +88,6 @@ void board_init_info(void)  }  #if defined(CONFIG_MACB) && defined(CONFIG_CMD_NET) -extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); -  int board_eth_init(bd_t *bi)  {  	return macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]); diff --git a/board/eltec/bab7xx/bab7xx.c b/board/eltec/bab7xx/bab7xx.c index af5235237..8c561161c 100644 --- a/board/eltec/bab7xx/bab7xx.c +++ b/board/eltec/bab7xx/bab7xx.c @@ -30,6 +30,7 @@  #include <74xx_7xx.h>  #include <ns87308.h>  #include <video_fb.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -244,3 +245,8 @@ void video_get_info_str (int line_number, char *info)  #endif  /*---------------------------------------------------------------------------*/ + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/eltec/elppc/elppc.c b/board/eltec/elppc/elppc.c index 1b70605e2..d3ac2784a 100644 --- a/board/eltec/elppc/elppc.c +++ b/board/eltec/elppc/elppc.c @@ -25,6 +25,7 @@  #include <command.h>  #include <mpc106.h>  #include <video_fb.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -172,3 +173,8 @@ void video_get_info_str (int line_number, char *info)  	return;  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/esd/adciop/adciop.c b/board/esd/adciop/adciop.c index 0f655b78a..63aaf2c7a 100644 --- a/board/esd/adciop/adciop.c +++ b/board/esd/adciop/adciop.c @@ -22,6 +22,7 @@   */  #include <common.h> +#include <netdev.h>  #include "adciop.h"  /* ------------------------------------------------------------------------- */ @@ -95,3 +96,8 @@ int testdram (void)  }  /* ------------------------------------------------------------------------- */ + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/esd/cpci5200/cpci5200.c b/board/esd/cpci5200/cpci5200.c index 20130acfe..2a42e65de 100644 --- a/board/esd/cpci5200/cpci5200.c +++ b/board/esd/cpci5200/cpci5200.c @@ -32,6 +32,7 @@  #include <mpc5xxx.h>  #include <pci.h>  #include <command.h> +#include <netdev.h>  #include "mt46v16m16-75.h" @@ -259,6 +260,11 @@ void init_ata_reset(void)  	}  } +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} +  int do_writepci(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  {  	unsigned int addr; diff --git a/board/esd/dasa_sim/dasa_sim.c b/board/esd/dasa_sim/dasa_sim.c index fb0c77e56..e061878b6 100644 --- a/board/esd/dasa_sim/dasa_sim.c +++ b/board/esd/dasa_sim/dasa_sim.c @@ -22,6 +22,7 @@   */  #include <common.h> +#include <netdev.h>  #include "dasa_sim.h"  /* ------------------------------------------------------------------------- */ @@ -222,3 +223,8 @@ int testdram (void)  }  /* ------------------------------------------------------------------------- */ + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/esd/mecp5200/mecp5200.c b/board/esd/mecp5200/mecp5200.c index 6d776b7a6..ff44abdac 100644 --- a/board/esd/mecp5200/mecp5200.c +++ b/board/esd/mecp5200/mecp5200.c @@ -32,6 +32,7 @@  #include <mpc5xxx.h>  #include <pci.h>  #include <command.h> +#include <netdev.h>  #include "mt46v16m16-75.h" @@ -259,3 +260,8 @@ void init_power_switch(void)  		__asm__ volatile ("sync");  	}  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/esd/pf5200/pf5200.c b/board/esd/pf5200/pf5200.c index 7970f8988..c4c0221d0 100644 --- a/board/esd/pf5200/pf5200.c +++ b/board/esd/pf5200/pf5200.c @@ -32,6 +32,7 @@  #include <mpc5xxx.h>  #include <pci.h>  #include <command.h> +#include <netdev.h>  #include "mt46v16m16-75.h" @@ -264,6 +265,11 @@ void init_power_switch(void)  	__asm__ volatile ("sync");  } +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} +  void power_set_reset(int power)  {  	debug("ide_set_reset(%d)\n", power); diff --git a/board/etin/debris/debris.c b/board/etin/debris/debris.c index 763760fd2..3fcf78ecf 100644 --- a/board/etin/debris/debris.c +++ b/board/etin/debris/debris.c @@ -25,6 +25,7 @@  #include <mpc824x.h>  #include <pci.h>  #include <i2c.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -177,3 +178,8 @@ int misc_init_r(void)  			(char*)&gd->bd->bi_enetaddr[0], 6);  	return 0;  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/etin/kvme080/kvme080.c b/board/etin/kvme080/kvme080.c index bfd6854c5..be6924d15 100644 --- a/board/etin/kvme080/kvme080.c +++ b/board/etin/kvme080/kvme080.c @@ -25,6 +25,7 @@  #include <mpc824x.h>  #include <pci.h>  #include <i2c.h> +#include <netdev.h>  #include <asm/processor.h>  int checkboard(void) @@ -191,3 +192,8 @@ void nvram_write(long dest, const void *src, size_t count)  		asm volatile("sync");  	}  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/evb64260/eth.c b/board/evb64260/eth.c index fa5b6d4a9..ca8bab52d 100644 --- a/board/evb64260/eth.c +++ b/board/evb64260/eth.c @@ -27,6 +27,7 @@ Skeleton NIC driver for Etherboot  #include <asm/cache.h>  #include <miiphy.h>  #include <net.h> +#include <netdev.h>  #include "eth.h"  #include "eth_addrtbl.h" diff --git a/board/evb64260/evb64260.c b/board/evb64260/evb64260.c index ab599410b..bc108d059 100644 --- a/board/evb64260/evb64260.c +++ b/board/evb64260/evb64260.c @@ -31,6 +31,7 @@  #include <galileo/pci.h>  #include <galileo/gt64260R.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include "eth.h" @@ -248,7 +249,6 @@ int board_early_init_f (void)  		sram_boot = 1;  #endif -	if (!sram_boot)  		memoryMapDeviceSpace(DEVICE0, CFG_DEV0_SPACE, CFG_DEV0_SIZE);  	memoryMapDeviceSpace(DEVICE1, CFG_DEV1_SPACE, CFG_DEV1_SIZE); @@ -443,3 +443,9 @@ display_mem_map(void)      printf(" BOOT:  base - 0x%08x\tsize - %dM bytes\twidth - %d bits\n",  	   base, size>>20, width);  } + +int board_eth_init(bd_t *bis) +{ +	gt6426x_eth_initialize(bis); +	return 0; +} diff --git a/board/freescale/common/Makefile b/board/freescale/common/Makefile index 508e3b569..8584374f3 100644 --- a/board/freescale/common/Makefile +++ b/board/freescale/common/Makefile @@ -36,6 +36,7 @@ COBJS-${CONFIG_FSL_DIU_FB}	+= fsl_diu_fb.o fsl_logo_bmp.o  COBJS-${CONFIG_FSL_PIXIS}	+= pixis.o  COBJS-${CONFIG_PQ_MDS_PIB}	+= pq-mds-pib.o  COBJS-${CONFIG_ID_EEPROM}	+= sys_eeprom.o +COBJS-${CONFIG_FSL_SGMII_RISER}	+= sgmii_riser.o  COBJS-${CONFIG_MPC8541CDS}	+= cds_pci_ft.o  COBJS-${CONFIG_MPC8548CDS}	+= cds_pci_ft.o diff --git a/board/freescale/common/pixis.c b/board/freescale/common/pixis.c index 64e2e08c5..b5a0e847a 100644 --- a/board/freescale/common/pixis.c +++ b/board/freescale/common/pixis.c @@ -26,6 +26,7 @@  #include <command.h>  #include <watchdog.h>  #include <asm/cache.h> +#include <asm/io.h>  #include "pixis.h" @@ -282,6 +283,60 @@ U_BOOT_CMD(  	   "diswd	- Disable watchdog timer \n",  	   NULL); +#ifdef CONFIG_FSL_SGMII_RISER +int pixis_set_sgmii(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	int which_tsec = -1; +	uchar mask; +	uchar switch_mask; + +	if (argc > 2) +		if (strcmp(argv[1], "all") != 0) +			which_tsec = simple_strtoul(argv[1], NULL, 0); + +	switch (which_tsec) { +	case 1: +		mask = PIXIS_VSPEED2_TSEC1SER; +		switch_mask = PIXIS_VCFGEN1_TSEC1SER; +		break; +	case 3: +		mask = PIXIS_VSPEED2_TSEC3SER; +		switch_mask = PIXIS_VCFGEN1_TSEC3SER; +		break; +	default: +		mask = PIXIS_VSPEED2_TSEC1SER | PIXIS_VSPEED2_TSEC3SER; +		switch_mask = PIXIS_VCFGEN1_TSEC1SER | PIXIS_VCFGEN1_TSEC3SER; +		break; +	} + +	/* Toggle whether the switches or FPGA control the settings */ +	if (!strcmp(argv[argc - 1], "switch")) +		clrbits_8((unsigned char *)PIXIS_BASE + PIXIS_VCFGEN1, +			switch_mask); +	else +		setbits_8((unsigned char *)PIXIS_BASE + PIXIS_VCFGEN1, +			switch_mask); + +	/* If it's not the switches, enable or disable SGMII, as specified */ +	if (!strcmp(argv[argc - 1], "on")) +		clrbits_8((unsigned char *)PIXIS_BASE + PIXIS_VSPEED2, mask); +	else if (!strcmp(argv[argc - 1], "off")) +		setbits_8((unsigned char *)PIXIS_BASE + PIXIS_VSPEED2, mask); + +	return 0; +} + +U_BOOT_CMD( +		pixis_set_sgmii, CFG_MAXARGS, 1, pixis_set_sgmii, +		"pixis_set_sgmii" +		" - Enable or disable SGMII mode for a given TSEC \n", +		"\npixis_set_sgmii [TSEC num] <on|off|switch>\n" +		"    TSEC num: 1,2,3,4 or 'all'.  'all' is default.\n" +		"    on - enables SGMII\n" +		"    off - disables SGMII\n" +		"    switch - use switch settings\n"); +#endif +  /*   * This function takes the non-integral cpu:mpx pll ratio   * and converts it to an integer that can be used to assign diff --git a/board/freescale/common/sgmii_riser.c b/board/freescale/common/sgmii_riser.c new file mode 100644 index 000000000..5ccd6bcad --- /dev/null +++ b/board/freescale/common/sgmii_riser.c @@ -0,0 +1,26 @@ +/* + * Freescale SGMII Riser Card + * + * This driver supports the SGMII Riser card found on the + * "DS" style of development board from Freescale. + * + * This software may be used and distributed according to the + * terms of the GNU Public License, Version 2, incorporated + * herein by reference. + * + * Copyright 2008 Freescale Semiconductor, Inc. + * + */ + +#include <config.h> +#include <common.h> +#include <tsec.h> + +void fsl_sgmii_riser_init(struct tsec_info_struct *tsec_info, int num) +{ +	int i; + +	for (i = 0; i < num; i++) +		if (tsec_info[i].flags & TSEC_SGMII) +			tsec_info[i].phyaddr += SGMII_RISER_PHY_OFFSET; +} diff --git a/board/freescale/common/sgmii_riser.h b/board/freescale/common/sgmii_riser.h new file mode 100644 index 000000000..8d56a1f59 --- /dev/null +++ b/board/freescale/common/sgmii_riser.h @@ -0,0 +1,15 @@ +/* + * Freescale SGMII Riser Card + * + * This driver supports the SGMII Riser card found on the + * "DS" style of development board from Freescale. + * + * This software may be used and distributed according to the + * terms of the GNU Public License, Version 2, incorporated + * herein by reference. + * + * Copyright 2008 Freescale Semiconductor, Inc. + * + */ + +void fsl_sgmii_riser_init(struct tsec_info_struct *tsec_info, int num); diff --git a/board/freescale/mpc7448hpc2/mpc7448hpc2.c b/board/freescale/mpc7448hpc2/mpc7448hpc2.c index 6f74c314e..cfdbed539 100644 --- a/board/freescale/mpc7448hpc2/mpc7448hpc2.c +++ b/board/freescale/mpc7448hpc2/mpc7448hpc2.c @@ -32,6 +32,7 @@  #include <common.h>  #include <74xx_7xx.h>  #include <fdt_support.h> +#include <netdev.h>  #undef	DEBUG @@ -92,3 +93,12 @@ ft_board_setup(void *blob, bd_t *bd)  	fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; +#if defined(CONFIG_TSI108_ETH) +	rc = tsi108_eth_initialize(bis); +#endif +	return rc; +} diff --git a/board/freescale/mpc8315erdb/mpc8315erdb.c b/board/freescale/mpc8315erdb/mpc8315erdb.c index 3eecee251..033021876 100644 --- a/board/freescale/mpc8315erdb/mpc8315erdb.c +++ b/board/freescale/mpc8315erdb/mpc8315erdb.c @@ -29,6 +29,7 @@  #include <fdt_support.h>  #include <pci.h>  #include <mpc83xx.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -165,3 +166,9 @@ void ft_board_setup(void *blob, bd_t *bd)  	fdt_tsec1_fixup(blob, bd);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis);	/* Initialize TSECs first */ +	return pci_eth_init(bis); +} diff --git a/board/freescale/mpc8544ds/mpc8544ds.c b/board/freescale/mpc8544ds/mpc8544ds.c index 4e976b78f..eaf6fa320 100644 --- a/board/freescale/mpc8544ds/mpc8544ds.c +++ b/board/freescale/mpc8544ds/mpc8544ds.c @@ -32,8 +32,11 @@  #include <miiphy.h>  #include <libfdt.h>  #include <fdt_support.h> +#include <tsec.h> +#include <netdev.h>  #include "../common/pixis.h" +#include "../common/sgmii_riser.h"  #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  extern void ddr_enable_ecc(unsigned int dram_size); @@ -463,6 +466,42 @@ get_board_sys_clk(ulong dummy)  	return val;  } +int board_eth_init(bd_t *bis) +{ +#ifdef CONFIG_TSEC_ENET +	struct tsec_info_struct tsec_info[2]; +	volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR); +	uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19; +	int num = 0; + +#ifdef CONFIG_TSEC1 +	SET_STD_TSEC_INFO(tsec_info[num], 1); +	if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII1_DIS)) +		tsec_info[num].flags |= TSEC_SGMII; +	num++; +#endif +#ifdef CONFIG_TSEC3 +	SET_STD_TSEC_INFO(tsec_info[num], 3); +	if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII3_DIS)) +		tsec_info[num].flags |= TSEC_SGMII; +	num++; +#endif + +	if (!num) { +		printf("No TSECs initialized\n"); + +		return 0; +	} + +	if (io_sel & 1) +		fsl_sgmii_riser_init(tsec_info, num); + + +	tsec_eth_init(bis, tsec_info, num); +#endif +	return pci_eth_init(bis); +} +  #if defined(CONFIG_OF_BOARD_SETUP)  void diff --git a/board/freescale/mpc8610hpcd/mpc8610hpcd.c b/board/freescale/mpc8610hpcd/mpc8610hpcd.c index af79fc2c6..130f7aa8c 100644 --- a/board/freescale/mpc8610hpcd/mpc8610hpcd.c +++ b/board/freescale/mpc8610hpcd/mpc8610hpcd.c @@ -32,6 +32,7 @@  #include <libfdt.h>  #include <fdt_support.h>  #include <spd_sdram.h> +#include <netdev.h>  #include "../common/pixis.h" @@ -520,12 +521,7 @@ get_board_sys_clk(ulong dummy)  	return val;  } -extern int uli526x_initialize(bd_t *); -  int board_eth_init(bd_t *bis)  { -#if defined(CONFIG_ULI526) -	uli526x_initialize(bis); -#endif -	return 0; +	return pci_eth_init(bis);  } diff --git a/board/freescale/mpc8641hpcn/mpc8641hpcn.c b/board/freescale/mpc8641hpcn/mpc8641hpcn.c index 1bb563e41..97f7f49e4 100644 --- a/board/freescale/mpc8641hpcn/mpc8641hpcn.c +++ b/board/freescale/mpc8641hpcn/mpc8641hpcn.c @@ -29,6 +29,7 @@  #include <asm/io.h>  #include <libfdt.h>  #include <fdt_support.h> +#include <netdev.h>  #include "../common/pixis.h" @@ -379,3 +380,10 @@ get_board_sys_clk(ulong dummy)  	return val;  } + +int board_eth_init(bd_t *bis) +{ +	/* Initialize TSECs */ +	cpu_eth_init(bis); +	return pci_eth_init(bis); +} diff --git a/board/hidden_dragon/hidden_dragon.c b/board/hidden_dragon/hidden_dragon.c index 5713a3384..2d7a7870e 100644 --- a/board/hidden_dragon/hidden_dragon.c +++ b/board/hidden_dragon/hidden_dragon.c @@ -27,6 +27,7 @@  #include <common.h>  #include <mpc824x.h>  #include <pci.h> +#include <netdev.h>  int checkboard (void)  { @@ -93,3 +94,8 @@ void pci_init_board(void)  {  	pci_mpc824x_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/icecube/icecube.c b/board/icecube/icecube.c index 760db7368..d84ab3adc 100644 --- a/board/icecube/icecube.c +++ b/board/icecube/icecube.c @@ -29,6 +29,7 @@  #include <pci.h>  #include <asm/processor.h>  #include <libfdt.h> +#include <netdev.h>  #if defined(CONFIG_LITE5200B)  #include "mt46v32m16.h" @@ -390,3 +391,9 @@ ft_board_setup(void *blob, bd_t *bd)  	ft_cpu_setup(blob, bd);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis); /* Built in FEC comes first */ +	return pci_eth_init(bis); +} diff --git a/board/incaip/incaip.c b/board/incaip/incaip.c index ac7ad8f29..6fe852cf9 100644 --- a/board/incaip/incaip.c +++ b/board/incaip/incaip.c @@ -23,6 +23,7 @@  #include <common.h>  #include <command.h> +#include <netdev.h>  #include <asm/addrspace.h>  #include <asm/inca-ip.h>  #include <asm/io.h> @@ -116,3 +117,10 @@ int checkboard (void)  	return 0;  } + +#if defined(CONFIG_INCA_IP_SWITCH) +int board_eth_init(bd_t *bis) +{ +	return inca_switch_initialize(bis); +} +#endif diff --git a/board/integratorap/integratorap.c b/board/integratorap/integratorap.c index e65990756..687c486c8 100644 --- a/board/integratorap/integratorap.c +++ b/board/integratorap/integratorap.c @@ -39,6 +39,8 @@  #include <pci.h>  #endif +#include <netdev.h> +  DECLARE_GLOBAL_DATA_PTR;  void flash__init (void); @@ -647,3 +649,8 @@ ulong get_tbclk (void)  {  	return CFG_HZ_CLOCK/div_clock;  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/ixdp425/ixdp425.c b/board/ixdp425/ixdp425.c index e0d763780..b379c7535 100644 --- a/board/ixdp425/ixdp425.c +++ b/board/ixdp425/ixdp425.c @@ -31,6 +31,7 @@  #include <common.h>  #include <command.h>  #include <malloc.h> +#include <netdev.h>  #include <asm/arch/ixp425.h>  DECLARE_GLOBAL_DATA_PTR; @@ -118,3 +119,8 @@ void pci_init_board(void)  	pci_ixp_init(&hose);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/linkstation/linkstation.c b/board/linkstation/linkstation.c index 241cf032d..afb96ae6c 100644 --- a/board/linkstation/linkstation.c +++ b/board/linkstation/linkstation.c @@ -26,6 +26,7 @@  #include <mpc824x.h>  #include <asm/io.h>  #include <ns16550.h> +#include <netdev.h>  #ifdef CONFIG_PCI  #include <pci.h> @@ -128,3 +129,8 @@ int board_early_init_f (void)  	out_8((volatile u8*)UART_DCR, 1);  	return 0;  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/matrix_vision/mvbc_p/mvbc_p.c b/board/matrix_vision/mvbc_p/mvbc_p.c index 3332f5aca..c88c4a604 100644 --- a/board/matrix_vision/mvbc_p/mvbc_p.c +++ b/board/matrix_vision/mvbc_p/mvbc_p.c @@ -35,6 +35,7 @@  #include <fpga.h>  #include <environment.h>  #include <fdt_support.h> +#include <netdev.h>  #include <asm/io.h>  #include "fpga.h"  #include "mvbc_p.h" @@ -324,3 +325,9 @@ void ft_board_setup(void *blob, bd_t *bd)  	ft_cpu_setup(blob, bd);  	fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);  } + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis); /* Built in FEC comes first */ +	return pci_eth_init(bis); +} diff --git a/board/mimc/mimc200/mimc200.c b/board/mimc/mimc200/mimc200.c index 4ece11ac8..8516dcb82 100644 --- a/board/mimc/mimc200/mimc200.c +++ b/board/mimc/mimc200/mimc200.c @@ -20,6 +20,7 @@   * MA 02111-1307 USA   */  #include <common.h> +#include <netdev.h>  #include <asm/io.h>  #include <asm/sdram.h> @@ -195,8 +196,6 @@ void spi_cs_deactivate(struct spi_slave *slave)  #endif /* CONFIG_ATMEL_SPI */  #ifdef CONFIG_CMD_NET -extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); -  int board_eth_init(bd_t *bi)  {  	macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]); diff --git a/board/miromico/hammerhead/hammerhead.c b/board/miromico/hammerhead/hammerhead.c index 738ece2fe..d3875f449 100644 --- a/board/miromico/hammerhead/hammerhead.c +++ b/board/miromico/hammerhead/hammerhead.c @@ -25,6 +25,7 @@  #include "../cpu/at32ap/at32ap700x/sm.h"  #include <common.h> +#include <netdev.h>  #include <asm/io.h>  #include <asm/sdram.h> @@ -51,8 +52,6 @@ static const struct sdram_config sdram_config = {  	.refresh_period	= (781 * (SDRAMC_BUS_HZ / 1000)) / 100000,  }; -extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); -  #ifdef CONFIG_CMD_NET  int board_eth_init(bd_t *bis)  { diff --git a/board/mousse/mousse.c b/board/mousse/mousse.c index f8f152976..7b6126648 100644 --- a/board/mousse/mousse.c +++ b/board/mousse/mousse.c @@ -28,6 +28,7 @@  #include <common.h>  #include <mpc824x.h> +#include <netdev.h>  #include <asm/processor.h>  #include "mousse.h" @@ -84,3 +85,8 @@ int misc_init_f (void)  	get_tod ();  	return 0;  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/mpc8540eval/mpc8540eval.c b/board/mpc8540eval/mpc8540eval.c index 7c54458a5..028a70fad 100644 --- a/board/mpc8540eval/mpc8540eval.c +++ b/board/mpc8540eval/mpc8540eval.c @@ -24,6 +24,7 @@   */  #include <common.h> +#include <netdev.h>  #include <asm/processor.h>  #include <asm/mmu.h>  #include <asm/immap_85xx.h> @@ -247,3 +248,14 @@ long int fixed_sdram (void)  	return (CFG_SDRAM_SIZE * 1024 * 1024);  }  #endif	/* !defined(CONFIG_SPD_EEPROM) */ + +int board_eth_init(bd_t *bis) +{ +	/* +	 * This board either has PCI NICs or uses the CPU's TSECs +	 * pci_eth_init() will return 0 if no NICs found, so in that case +	 * returning -1 will force cpu_eth_init() to be called. +	 */ +	int num = pci_eth_init(bis); +	return (num <= 0 ? -1 : num); +} diff --git a/board/musenki/musenki.c b/board/musenki/musenki.c index b2b70e756..6f9eeb22f 100644 --- a/board/musenki/musenki.c +++ b/board/musenki/musenki.c @@ -24,6 +24,7 @@  #include <common.h>  #include <mpc824x.h>  #include <pci.h> +#include <netdev.h>  int checkboard (void)  { @@ -102,3 +103,8 @@ void pci_init_board(void)  {  	pci_mpc824x_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/mvblue/mvblue.c b/board/mvblue/mvblue.c index a979102ab..056fee784 100644 --- a/board/mvblue/mvblue.c +++ b/board/mvblue/mvblue.c @@ -9,6 +9,7 @@  #include <mpc824x.h>  #include <asm/io.h>  #include <ns16550.h> +#include <netdev.h>  #ifdef CONFIG_PCI  #include <pci.h> @@ -245,4 +246,9 @@ void pci_init_board (void)  {  	pci_mpc824x_init (&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +}  #endif diff --git a/board/o2dnt/o2dnt.c b/board/o2dnt/o2dnt.c index a4eed3a43..19faf52af 100644 --- a/board/o2dnt/o2dnt.c +++ b/board/o2dnt/o2dnt.c @@ -27,6 +27,7 @@  #include <common.h>  #include <mpc5xxx.h>  #include <pci.h> +#include <netdev.h>  #define SDRAM_MODE      0x00CD0000  #define SDRAM_CONTROL   0x504F0000 @@ -180,3 +181,9 @@ void pci_init_board(void)  	pci_mpc5xxx_init(&hose);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis); /* Built in FEC comes first */ +	return pci_eth_init(bis); +} diff --git a/board/oxc/oxc.c b/board/oxc/oxc.c index b61d39951..eb7eeb8c2 100644 --- a/board/oxc/oxc.c +++ b/board/oxc/oxc.c @@ -25,6 +25,7 @@  #include <mpc824x.h>  #include <pci.h>  #include <i2c.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -215,3 +216,8 @@ int misc_init_r (void)  #endif  	return (0);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/pcippc2/pcippc2.c b/board/pcippc2/pcippc2.c index c1917c11b..a3dbdc846 100644 --- a/board/pcippc2/pcippc2.c +++ b/board/pcippc2/pcippc2.c @@ -28,6 +28,7 @@  #include <linux/mtd/doc2000.h>  #include <watchdog.h>  #include <pci.h> +#include <netdev.h>  #include "hardware.h"  #include "pcippc2.h" @@ -243,3 +244,8 @@ U_BOOT_CMD(  #endif  #endif	/* CONFIG_WATCHDOG */ + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/pm520/pm520.c b/board/pm520/pm520.c index 83d9bcd02..a9d63cc35 100644 --- a/board/pm520/pm520.c +++ b/board/pm520/pm520.c @@ -27,6 +27,7 @@  #include <common.h>  #include <mpc5xxx.h>  #include <pci.h> +#include <netdev.h>  #if defined(CONFIG_MPC5200_DDR)  #include "mt46v16m16-75.h" @@ -321,3 +322,9 @@ void doc_init (void)  	doc_probe (CFG_DOC_BASE);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis); /* Built in FEC comes first */ +	return pci_eth_init(bis); +} diff --git a/board/pm826/pm826.c b/board/pm826/pm826.c index 7ee3ab65c..d8b0929cf 100644 --- a/board/pm826/pm826.c +++ b/board/pm826/pm826.c @@ -25,6 +25,7 @@  #include <ioports.h>  #include <mpc8260.h>  #include <pci.h> +#include <netdev.h>  /*   * I/O Port configuration table @@ -328,3 +329,8 @@ void pci_init_board(void)  	pci_mpc8250_init(&hose);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/pm828/pm828.c b/board/pm828/pm828.c index 6038e9758..b163d5b35 100644 --- a/board/pm828/pm828.c +++ b/board/pm828/pm828.c @@ -25,6 +25,7 @@  #include <ioports.h>  #include <mpc8260.h>  #include <pci.h> +#include <netdev.h>  /*   * I/O Port configuration table @@ -361,3 +362,8 @@ void pci_init_board(void)  	pci_mpc8250_init(&hose);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/pm854/pm854.c b/board/pm854/pm854.c index 7dbafb9a8..90523bda5 100644 --- a/board/pm854/pm854.c +++ b/board/pm854/pm854.c @@ -27,6 +27,7 @@  #include <common.h>  #include <pci.h> +#include <netdev.h>  #include <asm/processor.h>  #include <asm/mmu.h>  #include <asm/immap_85xx.h> @@ -289,3 +290,9 @@ pci_init_board(void)  	pci_mpc85xx_init(&hose);  #endif /* CONFIG_PCI */  } + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis);	/* Intialize TSECs first */ +	return pci_eth_init(bis); +} diff --git a/board/pm856/pm856.c b/board/pm856/pm856.c index bd4c0651a..ee33286ac 100644 --- a/board/pm856/pm856.c +++ b/board/pm856/pm856.c @@ -34,6 +34,7 @@  #include <ioports.h>  #include <spd_sdram.h>  #include <miiphy.h> +#include <netdev.h>  #if defined(CONFIG_DDR_ECC)  extern void ddr_enable_ecc(unsigned int dram_size); @@ -444,3 +445,9 @@ pci_init_board(void)  	pci_mpc85xx_init(&hose);  #endif /* CONFIG_PCI */  } + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis);	/* Intialize TSECs first */ +	return pci_eth_init(bis); +} diff --git a/board/pn62/pn62.c b/board/pn62/pn62.c index d905b2965..60fc431db 100644 --- a/board/pn62/pn62.c +++ b/board/pn62/pn62.c @@ -23,6 +23,7 @@  #include <common.h>  #include <mpc824x.h>  #include <pci.h> +#include <netdev.h>  #include "pn62.h" @@ -186,3 +187,8 @@ static int get_mac_address (int id, u8 * mac, char *string, int size)  				mac[0], mac[1], mac[2],  				mac[3], mac[4], mac[5]);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/ppmc7xx/ppmc7xx.c b/board/ppmc7xx/ppmc7xx.c index 061e01ec4..9c87c1078 100644 --- a/board/ppmc7xx/ppmc7xx.c +++ b/board/ppmc7xx/ppmc7xx.c @@ -10,6 +10,7 @@  #include <common.h>  #include <command.h> +#include <netdev.h>  /* Define some MPC107 (memory controller) registers */ @@ -102,3 +103,8 @@ void do_reset( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] )  	/* Should never get here */  	while(1);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/purple/purple.c b/board/purple/purple.c index 977559112..c129d7a10 100644 --- a/board/purple/purple.c +++ b/board/purple/purple.c @@ -23,6 +23,7 @@  #include <common.h>  #include <command.h> +#include <netdev.h>  #include <asm/inca-ip.h>  #include <asm/regdef.h>  #include <asm/mipsregs.h> @@ -274,3 +275,11 @@ void copy_code (ulong dest_addr)  		start += CFG_CACHELINE_SIZE;  	}  } + +#ifdef CONFIG_PLB2800_ETHER +int board_eth_init(bd_t *bis) +{ +	return plb2800_eth_initialize(bis); +} +#endif + diff --git a/board/r2dplus/r2dplus.c b/board/r2dplus/r2dplus.c index 8fb8ff667..b962dd1fe 100644 --- a/board/r2dplus/r2dplus.c +++ b/board/r2dplus/r2dplus.c @@ -76,3 +76,8 @@ void pci_init_board(void)  {  	pci_sh7751_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/r7780mp/r7780mp.c b/board/r7780mp/r7780mp.c index 19c35d349..efbeec97c 100644 --- a/board/r7780mp/r7780mp.c +++ b/board/r7780mp/r7780mp.c @@ -23,6 +23,7 @@  #include <asm/processor.h>  #include <asm/io.h>  #include <asm/pci.h> +#include <netdev.h>  #include "r7780mp.h"  int checkboard(void) @@ -77,3 +78,8 @@ void pci_init_board(void)  {  	pci_sh7780_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/sandpoint/sandpoint.c b/board/sandpoint/sandpoint.c index 7429647b8..832baa263 100644 --- a/board/sandpoint/sandpoint.c +++ b/board/sandpoint/sandpoint.c @@ -24,6 +24,7 @@  #include <common.h>  #include <mpc824x.h>  #include <pci.h> +#include <netdev.h>  int checkboard (void)  { @@ -99,3 +100,8 @@ void pci_init_board(void)  {  	pci_mpc824x_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/sbc8240/sbc8240.c b/board/sbc8240/sbc8240.c index 175720d90..075e3777f 100644 --- a/board/sbc8240/sbc8240.c +++ b/board/sbc8240/sbc8240.c @@ -28,6 +28,7 @@  #include <mpc824x.h>  #include <asm/processor.h>  #include <pci.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -103,3 +104,8 @@ int misc_init_r (void)  	return (0);  }  #endif /* CONFIG_MISC_INIT_R */ + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/sc3/sc3.c b/board/sc3/sc3.c index 3d1a6542d..6c82fe7e9 100644 --- a/board/sc3/sc3.c +++ b/board/sc3/sc3.c @@ -37,6 +37,7 @@  #include <pci.h>  #include <i2c.h>  #include <malloc.h> +#include <netdev.h>  #undef writel  #undef writeb @@ -779,3 +780,8 @@ void pci_init_board(void)  	hose.config_table = pci_solidcard3_config_table;  	pci_405gp_init(&hose);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/sc520_cdp/sc520_cdp.c b/board/sc520_cdp/sc520_cdp.c index 8050aa6fe..f21c73002 100644 --- a/board/sc520_cdp/sc520_cdp.c +++ b/board/sc520_cdp/sc520_cdp.c @@ -29,6 +29,7 @@  #include <asm/ic/sc520.h>  #include <asm/ic/ali512x.h>  #include <spi.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -629,3 +630,8 @@ ssize_t spi_write(uchar *addr, int alen, uchar *buffer, int len)  #endif  	return res;  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/sc520_spunk/sc520_spunk.c b/board/sc520_spunk/sc520_spunk.c index 038d47995..0b11caaae 100644 --- a/board/sc520_spunk/sc520_spunk.c +++ b/board/sc520_spunk/sc520_spunk.c @@ -25,6 +25,7 @@  #include <common.h>  #include <pci.h>  #include <ssi.h> +#include <netdev.h>  #include <asm/io.h>  #include <asm/pci.h>  #include <asm/ic/sc520.h> @@ -676,3 +677,8 @@ ssize_t spi_write(uchar *addr, int alen, uchar *buffer, int len)  		spi_eeprom_write(1, offset, buffer, len) :  	mw_eeprom_write(1, offset, buffer, len);  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/sl8245/sl8245.c b/board/sl8245/sl8245.c index c853755a1..e66272ecb 100644 --- a/board/sl8245/sl8245.c +++ b/board/sl8245/sl8245.c @@ -24,6 +24,7 @@  #include <common.h>  #include <mpc824x.h>  #include <pci.h> +#include <netdev.h>  int checkboard (void)  { @@ -67,8 +68,6 @@ void pci_init_board(void)  	pci_mpc824x_init(&hose);  } -extern int skge_initialize(bd_t *bis); -  int board_eth_init(bd_t *bis)  {  	int rc = 0; diff --git a/board/sorcery/sorcery.c b/board/sorcery/sorcery.c index 2b789d474..e4fb1465f 100644 --- a/board/sorcery/sorcery.c +++ b/board/sorcery/sorcery.c @@ -26,6 +26,7 @@  #include <asm/processor.h>  #include <asm/mmu.h>  #include <pci.h> +#include <netdev.h>  phys_size_t initdram (int board_type)  { @@ -58,3 +59,8 @@ void pci_init_board (void)  	pci_mpc8220_init (&hose);  #endif /* CONFIG_PCI */  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/stxssa/stxssa.c b/board/stxssa/stxssa.c index 124e1233b..71e9b088a 100644 --- a/board/stxssa/stxssa.c +++ b/board/stxssa/stxssa.c @@ -39,6 +39,7 @@  #include <asm/io.h>  #include <spd_sdram.h>  #include <miiphy.h> +#include <netdev.h>  long int fixed_sdram (void); @@ -400,3 +401,10 @@ pci_init_board(void)  	pci_mpc85xx_init(hose);  #endif /* CONFIG_PCI */  } + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis);	/* Initialize TSECs first */ +	return pci_eth_init(bis); +} + diff --git a/board/tb0229/tb0229.c b/board/tb0229/tb0229.c index 921bd3adc..2abb4a7e2 100644 --- a/board/tb0229/tb0229.c +++ b/board/tb0229/tb0229.c @@ -46,3 +46,8 @@ int checkboard (void)  	return 0;  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/total5200/total5200.c b/board/total5200/total5200.c index 1ae24c4f3..ec00a67df 100644 --- a/board/total5200/total5200.c +++ b/board/total5200/total5200.c @@ -27,6 +27,7 @@  #include <common.h>  #include <mpc5xxx.h>  #include <pci.h> +#include <netdev.h>  #include "sdram.h" @@ -308,3 +309,9 @@ int board_get_height (void)  }  #endif /* CONFIG_VIDEO_SED13806 */ + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis); /* Built in FEC comes first */ +	return pci_eth_init(bis); +} diff --git a/board/tqc/tqm5200/tqm5200.c b/board/tqc/tqm5200/tqm5200.c index 8b8e46137..5152331ab 100644 --- a/board/tqc/tqm5200/tqm5200.c +++ b/board/tqc/tqm5200/tqm5200.c @@ -32,6 +32,7 @@  #include <pci.h>  #include <asm/processor.h>  #include <libfdt.h> +#include <netdev.h>  #ifdef CONFIG_VIDEO_SM501  #include <sm501.h> @@ -749,3 +750,9 @@ void ft_board_setup(void *blob, bd_t *bd)  	fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);  }  #endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */ + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis); /* Built in FEC comes first */ +	return pci_eth_init(bis); +} diff --git a/board/tqc/tqm8272/tqm8272.c b/board/tqc/tqm8272/tqm8272.c index a0ec254ce..3a2376c3f 100644 --- a/board/tqc/tqm8272/tqm8272.c +++ b/board/tqc/tqm8272/tqm8272.c @@ -26,6 +26,7 @@  #include <mpc8260.h>  #include <command.h> +#include <netdev.h>  #ifdef CONFIG_PCI  #include <pci.h>  #include <asm/m8260_pci.h> @@ -1226,3 +1227,8 @@ void pci_init_board(void)  	pci_mpc8250_init(&hose);  }  #endif + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/board/tqc/tqm85xx/tqm85xx.c b/board/tqc/tqm85xx/tqm85xx.c index ae3c2456f..0e5bc2f73 100644 --- a/board/tqc/tqm85xx/tqm85xx.c +++ b/board/tqc/tqm85xx/tqm85xx.c @@ -42,6 +42,7 @@  #include <flash.h>  #include <libfdt.h>  #include <fdt_support.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -743,3 +744,9 @@ int board_early_init_r (void)  	return (0);  }  #endif /* CONFIG_BOARD_EARLY_INIT_R */ + +int board_eth_init(bd_t *bis) +{ +	cpu_eth_init(bis);	/* Intialize TSECs first */ +	return pci_eth_init(bis); +} diff --git a/board/utx8245/utx8245.c b/board/utx8245/utx8245.c index e2a961a3a..e7ca669c1 100644 --- a/board/utx8245/utx8245.c +++ b/board/utx8245/utx8245.c @@ -32,6 +32,7 @@  #include <asm/io.h>  #include <asm/mmu.h>  #include <pci.h> +#include <netdev.h>  #define	SAVE_SZ	32 @@ -127,3 +128,8 @@ void pci_init_board (void)  	icache_enable();  } + +int board_eth_init(bd_t *bis) +{ +	return pci_eth_init(bis); +} diff --git a/cpu/arm926ejs/at91/Makefile b/cpu/arm926ejs/at91/Makefile index 44cde1a9c..2d2a888e9 100644 --- a/cpu/arm926ejs/at91/Makefile +++ b/cpu/arm926ejs/at91/Makefile @@ -25,7 +25,6 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(SOC).a -COBJS-y	+= ether.o  COBJS-y	+= timer.o  COBJS-$(CONFIG_HAS_DATAFLASH) +=spi.o  COBJS-y	+= usb.o diff --git a/cpu/arm926ejs/at91/ether.c b/cpu/arm926ejs/at91/ether.c deleted file mode 100644 index 7e11fe4d8..000000000 --- a/cpu/arm926ejs/at91/ether.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * (C) Copyright 2007-2008 - * Stelian Pop <stelian.pop@leadtechdesign.com> - * Lead Tech Design <www.leadtechdesign.com> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include <common.h> -#include <asm/arch/hardware.h> - -extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); - -#if defined(CONFIG_MACB) && defined(CONFIG_CMD_NET) -void at91sam9_eth_initialize(bd_t *bi) -{ -	macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x00); -} -#endif diff --git a/cpu/leon2/cpu.c b/cpu/leon2/cpu.c index 5de1c521a..d6e23b129 100644 --- a/cpu/leon2/cpu.c +++ b/cpu/leon2/cpu.c @@ -25,6 +25,7 @@  #include <common.h>  #include <watchdog.h>  #include <command.h> +#include <netdev.h>  DECLARE_GLOBAL_DATA_PTR; @@ -57,8 +58,6 @@ int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  /* ------------------------------------------------------------------------- */ -extern int greth_initialize(bd_t *bis); -  #ifdef CONFIG_GRETH  int cpu_eth_init(bd_t *bis)  { diff --git a/cpu/leon3/cpu.c b/cpu/leon3/cpu.c index 1725fdb09..976f31134 100644 --- a/cpu/leon3/cpu.c +++ b/cpu/leon3/cpu.c @@ -25,6 +25,7 @@  #include <common.h>  #include <watchdog.h>  #include <command.h> +#include <netdev.h>  #include <asm/io.h>  #include <asm/processor.h> @@ -65,7 +66,6 @@ u64 flash_read64(void *addr)  }  /* ------------------------------------------------------------------------- */ -extern int greth_initialize(bd_t *bis);  #ifdef CONFIG_GRETH  int cpu_eth_init(bd_t *bis) diff --git a/cpu/mcf523x/cpu.c b/cpu/mcf523x/cpu.c index 8d2152d9c..bdc152f07 100644 --- a/cpu/mcf523x/cpu.c +++ b/cpu/mcf523x/cpu.c @@ -28,6 +28,7 @@  #include <common.h>  #include <watchdog.h>  #include <command.h> +#include <netdev.h>  #include <asm/immap.h> @@ -114,8 +115,6 @@ int watchdog_init(void)   * 	int board_eth_init(bd_t *bis)   */ -extern int mcffec_initialize(bd_t*); -  int cpu_eth_init(bd_t *bis)  {  	return mcffec_initialize(bis); diff --git a/cpu/mcf52x2/cpu.c b/cpu/mcf52x2/cpu.c index 2af31cbb9..167097a79 100644 --- a/cpu/mcf52x2/cpu.c +++ b/cpu/mcf52x2/cpu.c @@ -32,6 +32,7 @@  #include <watchdog.h>  #include <command.h>  #include <asm/immap.h> +#include <netdev.h>  #ifdef  CONFIG_M5271  /* @@ -328,8 +329,6 @@ int do_reset(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char *argv[])   * 	int board_eth_init(bd_t *bis)   */ -extern int mcffec_initialize(bd_t*); -  int cpu_eth_init(bd_t *bis)  {  	return mcffec_initialize(bis); diff --git a/cpu/mcf532x/cpu.c b/cpu/mcf532x/cpu.c index 20d0d5cf2..260d6e675 100644 --- a/cpu/mcf532x/cpu.c +++ b/cpu/mcf532x/cpu.c @@ -28,6 +28,7 @@  #include <common.h>  #include <watchdog.h>  #include <command.h> +#include <netdev.h>  #include <asm/immap.h> @@ -136,8 +137,6 @@ int watchdog_init(void)   * 	int board_eth_init(bd_t *bis)   */ -extern int mcffec_initialize(bd_t*); -  int cpu_eth_init(bd_t *bis)  {  	return mcffec_initialize(bis); diff --git a/cpu/mcf5445x/cpu.c b/cpu/mcf5445x/cpu.c index ab342ddeb..a30c327dd 100644 --- a/cpu/mcf5445x/cpu.c +++ b/cpu/mcf5445x/cpu.c @@ -28,6 +28,7 @@  #include <common.h>  #include <watchdog.h>  #include <command.h> +#include <netdev.h>  #include <asm/immap.h> @@ -102,8 +103,6 @@ int checkcpu(void)   * 	int board_eth_init(bd_t *bis)   */ -extern int mcffec_initialize(bd_t*); -  int cpu_eth_init(bd_t *bis)  {  	return mcffec_initialize(bis); diff --git a/cpu/mcf547x_8x/cpu.c b/cpu/mcf547x_8x/cpu.c index 1ba7aa80a..ab4ad2889 100644 --- a/cpu/mcf547x_8x/cpu.c +++ b/cpu/mcf547x_8x/cpu.c @@ -28,6 +28,7 @@  #include <common.h>  #include <watchdog.h>  #include <command.h> +#include <netdev.h>  #include <asm/immap.h> @@ -148,9 +149,6 @@ int watchdog_init(void)   * 	int board_eth_init(bd_t *bis)   */ -extern int mcdmafec_initialize(bd_t *bis); -extern int mcffec_initialize(bd_t*); -  int cpu_eth_init(bd_t *bis)  {  #if defined(CONFIG_FSLDMAFEC) diff --git a/cpu/mpc512x/cpu.c b/cpu/mpc512x/cpu.c index 1f39ac4c1..d432d995a 100644 --- a/cpu/mpc512x/cpu.c +++ b/cpu/mpc512x/cpu.c @@ -30,6 +30,7 @@  #include <common.h>  #include <command.h>  #include <mpc512x.h> +#include <netdev.h>  #include <asm/processor.h>  #if defined(CONFIG_OF_LIBFDT) @@ -195,3 +196,15 @@ void ft_cpu_setup(void *blob, bd_t *bd)  #endif  }  #endif + +#ifdef CONFIG_MPC512x_FEC +/* Default initializations for FEC controllers.  To override, + * create a board-specific function called: + * 	int board_eth_init(bd_t *bis) + */ + +int cpu_eth_init(bd_t *bis) +{ +	return mpc512x_fec_initialize(bis); +} +#endif diff --git a/cpu/mpc5xxx/cpu.c b/cpu/mpc5xxx/cpu.c index 0ed289963..1326c3cc9 100644 --- a/cpu/mpc5xxx/cpu.c +++ b/cpu/mpc5xxx/cpu.c @@ -29,6 +29,7 @@  #include <watchdog.h>  #include <command.h>  #include <mpc5xxx.h> +#include <netdev.h>  #include <asm/io.h>  #include <asm/processor.h> @@ -155,3 +156,15 @@ ulong bootcount_load (void)  		return (*save_addr & 0x0000ffff);  }  #endif /* CONFIG_BOOTCOUNT_LIMIT */ + +#ifdef CONFIG_MPC5xxx_FEC +/* Default initializations for FEC controllers.  To override, + * create a board-specific function called: + * 	int board_eth_init(bd_t *bis) + */ + +int cpu_eth_init(bd_t *bis) +{ +	return mpc5xxx_fec_initialize(bis); +} +#endif diff --git a/cpu/mpc83xx/cpu.c b/cpu/mpc83xx/cpu.c index 52e4476d8..5862acdc4 100644 --- a/cpu/mpc83xx/cpu.c +++ b/cpu/mpc83xx/cpu.c @@ -32,6 +32,7 @@  #include <mpc83xx.h>  #include <asm/processor.h>  #include <libfdt.h> +#include <tsec.h>  DECLARE_GLOBAL_DATA_PTR; @@ -358,22 +359,15 @@ int dma_xfer(void *dest, u32 count, void *src)  }  #endif /*CONFIG_DDR_ECC*/ -#ifdef CONFIG_TSEC_ENET -/* Default initializations for TSEC controllers.  To override, - * create a board-specific function called: - * 	int board_eth_init(bd_t *bis) +/* + * Initializes on-chip ethernet controllers. + * to override, implement board_eth_init()   */ - -extern int tsec_initialize(bd_t * bis, int index, char *devname); -  int cpu_eth_init(bd_t *bis)  { -#if defined(CONFIG_TSEC1) -	tsec_initialize(bis, 0, CONFIG_TSEC1_NAME); -#endif -#if defined(CONFIG_TSEC2) -	tsec_initialize(bis, 1, CONFIG_TSEC2_NAME); +#if defined(CONFIG_TSEC_ENET) +	tsec_standard_init(bis);  #endif +  	return 0;  } -#endif diff --git a/cpu/mpc85xx/cpu.c b/cpu/mpc85xx/cpu.c index 2fe3cea3f..7976caca6 100644 --- a/cpu/mpc85xx/cpu.c +++ b/cpu/mpc85xx/cpu.c @@ -25,9 +25,11 @@   * MA 02111-1307 USA   */ +#include <config.h>  #include <common.h>  #include <watchdog.h>  #include <command.h> +#include <tsec.h>  #include <asm/cache.h>  #include <asm/io.h> @@ -294,6 +296,7 @@ int dma_xfer(void *dest, uint count, void *src) {  	return dma_check();  }  #endif +  /*   * Configures a UPM. Currently, the loop fields in MxMR (RLF, WLF and TLF)   * are hardcoded as "1"."size" is the number or entries, not a sizeof. @@ -360,32 +363,16 @@ void upmconfig (uint upm, uint * table, uint size)  	out_be32(mxmr, loopval); /* OP_NORMAL */  } -#if defined(CONFIG_TSEC_ENET) || defined(CONFIGMPC85XX_FEC) -/* Default initializations for TSEC controllers.  To override, - * create a board-specific function called: - * 	int board_eth_init(bd_t *bis) - */ - -extern int tsec_initialize(bd_t * bis, int index, char *devname); +/* + * Initializes on-chip ethernet controllers. + * to override, implement board_eth_init() + */  int cpu_eth_init(bd_t *bis)  { -#if defined(CONFIG_TSEC1) -	tsec_initialize(bis, 0, CONFIG_TSEC1_NAME); -#endif -#if defined(CONFIG_TSEC2) -	tsec_initialize(bis, 1, CONFIG_TSEC2_NAME); -#endif -#if defined(CONFIG_MPC85XX_FEC) -	tsec_initialize(bis, 2, CONFIG_MPC85XX_FEC_NAME); -#else -#if defined(CONFIG_TSEC3) -	tsec_initialize(bis, 2, CONFIG_TSEC3_NAME); -#endif -#if defined(CONFIG_TSEC4) -	tsec_initialize(bis, 3, CONFIG_TSEC4_NAME); -#endif +#if defined(CONFIG_TSEC_ENET) || defined(CONFIG_MPC85xx_FEC) +	tsec_standard_init(bis);  #endif +  	return 0;  } -#endif diff --git a/cpu/mpc86xx/cpu.c b/cpu/mpc86xx/cpu.c index ecea5b064..3a75af77c 100644 --- a/cpu/mpc86xx/cpu.c +++ b/cpu/mpc86xx/cpu.c @@ -28,6 +28,7 @@  #include <asm/cache.h>  #include <asm/mmu.h>  #include <mpc86xx.h> +#include <tsec.h>  #include <asm/fsl_law.h> @@ -305,28 +306,15 @@ void mpc86xx_reginfo(void)  } -#ifdef CONFIG_TSEC_ENET -/* Default initializations for TSEC controllers.  To override, - * create a board-specific function called: - * 	int board_eth_init(bd_t *bis) +/* + * Initializes on-chip ethernet controllers. + * to override, implement board_eth_init()   */ - -extern int tsec_initialize(bd_t * bis, int index, char *devname); -  int cpu_eth_init(bd_t *bis)  { -#if defined(CONFIG_TSEC1) -	tsec_initialize(bis, 0, CONFIG_TSEC1_NAME); -#endif -#if defined(CONFIG_TSEC2) -	tsec_initialize(bis, 1, CONFIG_TSEC2_NAME); -#endif -#if defined(CONFIG_TSEC3) -	tsec_initialize(bis, 2, CONFIG_TSEC3_NAME); -#endif -#if defined(CONFIG_TSEC4) -	tsec_initialize(bis, 3, CONFIG_TSEC4_NAME); +#if defined(CONFIG_TSEC_ENET) +	tsec_standard_init(bis);  #endif +  	return 0;  } -#endif /* CONFIG_TSEC_ENET */ diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c index 3ee5d9603..c5e74b8b5 100644 --- a/drivers/net/bfin_mac.c +++ b/drivers/net/bfin_mac.c @@ -9,6 +9,7 @@  #include <common.h>  #include <config.h>  #include <net.h> +#include <netdev.h>  #include <command.h>  #include <malloc.h> diff --git a/drivers/net/dc2114x.c b/drivers/net/dc2114x.c index 811723904..c0137a7f2 100644 --- a/drivers/net/dc2114x.c +++ b/drivers/net/dc2114x.c @@ -21,6 +21,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <pci.h>  #undef DEBUG_SROM diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c index c8b4e98c6..2dcaa2c91 100644 --- a/drivers/net/e1000.c +++ b/drivers/net/e1000.c @@ -3059,5 +3059,5 @@ e1000_initialize(bd_t * bis)  		card_number++;  	} -	return 1; +	return card_number;  } diff --git a/drivers/net/e1000.h b/drivers/net/e1000.h index c258bc238..08042a8cc 100644 --- a/drivers/net/e1000.h +++ b/drivers/net/e1000.h @@ -36,6 +36,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h> diff --git a/drivers/net/eepro100.c b/drivers/net/eepro100.c index 9de0fb5e4..d6539c01a 100644 --- a/drivers/net/eepro100.c +++ b/drivers/net/eepro100.c @@ -24,6 +24,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h>  #include <miiphy.h> diff --git a/drivers/net/greth.c b/drivers/net/greth.c index 90c533883..79bc4d9d2 100644 --- a/drivers/net/greth.c +++ b/drivers/net/greth.c @@ -27,6 +27,7 @@  #include <common.h>  #include <command.h>  #include <net.h> +#include <netdev.h>  #include <malloc.h>  #include <asm/processor.h>  #include <ambapp.h> diff --git a/drivers/net/inca-ip_sw.c b/drivers/net/inca-ip_sw.c index d852a150f..492f5ce8f 100644 --- a/drivers/net/inca-ip_sw.c +++ b/drivers/net/inca-ip_sw.c @@ -28,6 +28,7 @@  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/inca-ip.h>  #include <asm/addrspace.h> @@ -199,7 +200,7 @@ int inca_switch_initialize(bd_t * bis)  	printf("Leaving inca_switch_initialize()\n");  #endif -	return 1; +	return 0;  } diff --git a/drivers/net/macb.c b/drivers/net/macb.c index aa39284d1..08bebf74a 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -40,6 +40,7 @@   */  #include <net.h> +#include <netdev.h>  #include <malloc.h>  #include <linux/mii.h> diff --git a/drivers/net/mcffec.c b/drivers/net/mcffec.c index 50d6508fb..f93cf598e 100644 --- a/drivers/net/mcffec.c +++ b/drivers/net/mcffec.c @@ -32,6 +32,7 @@  #include <command.h>  #include <net.h> +#include <netdev.h>  #include <miiphy.h>  #undef	ET_DEBUG diff --git a/drivers/net/mpc512x_fec.c b/drivers/net/mpc512x_fec.c index 7caeeda65..54283fb9d 100644 --- a/drivers/net/mpc512x_fec.c +++ b/drivers/net/mpc512x_fec.c @@ -10,6 +10,7 @@  #include <mpc512x.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <miiphy.h>  #include "mpc512x_fec.h" diff --git a/drivers/net/mpc5xxx_fec.c b/drivers/net/mpc5xxx_fec.c index 3d3eb8bae..f8618b172 100644 --- a/drivers/net/mpc5xxx_fec.c +++ b/drivers/net/mpc5xxx_fec.c @@ -11,6 +11,7 @@  #include <mpc5xxx_sdma.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <miiphy.h>  #include "mpc5xxx_fec.h" diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c index 4aee0481d..ff8d2d7c0 100644 --- a/drivers/net/natsemi.c +++ b/drivers/net/natsemi.c @@ -53,6 +53,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h> diff --git a/drivers/net/ns8382x.c b/drivers/net/ns8382x.c index bb5843815..a2d61afec 100644 --- a/drivers/net/ns8382x.c +++ b/drivers/net/ns8382x.c @@ -53,6 +53,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h> diff --git a/drivers/net/pcnet.c b/drivers/net/pcnet.c index a4f021410..99b69429e 100644 --- a/drivers/net/pcnet.c +++ b/drivers/net/pcnet.c @@ -26,6 +26,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h> diff --git a/drivers/net/plb2800_eth.c b/drivers/net/plb2800_eth.c index dad842c72..d799c7382 100644 --- a/drivers/net/plb2800_eth.c +++ b/drivers/net/plb2800_eth.c @@ -26,6 +26,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/addrspace.h> @@ -105,7 +106,7 @@ int plb2800_eth_initialize(bd_t * bis)  	if (!(dev = (struct eth_device *) malloc (sizeof *dev)))  	{  		printf("Failed to allocate memory\n"); -		return 0; +		return -1;  	}  	memset(dev, 0, sizeof(*dev)); @@ -140,7 +141,7 @@ int plb2800_eth_initialize(bd_t * bis)  	printf("Leaving plb2800_eth_initialize()\n");  #endif -	return 1; +	return 0;  }  static int plb2800_eth_init(struct eth_device *dev, bd_t * bis) diff --git a/drivers/net/rtl8139.c b/drivers/net/rtl8139.c index 4fd20ac4f..d378ce39b 100644 --- a/drivers/net/rtl8139.c +++ b/drivers/net/rtl8139.c @@ -74,6 +74,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h> diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c index 7c00926a6..e9f6391b3 100644 --- a/drivers/net/rtl8169.c +++ b/drivers/net/rtl8169.c @@ -55,6 +55,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h> diff --git a/drivers/net/sk98lin/uboot_drv.c b/drivers/net/sk98lin/uboot_drv.c index 205e7d2e9..0199b33fe 100644 --- a/drivers/net/sk98lin/uboot_drv.c +++ b/drivers/net/sk98lin/uboot_drv.c @@ -24,6 +24,7 @@   */  #include <common.h> +#include <netdev.h>  #include "h/skdrv1st.h"  #include "h/skdrv2nd.h" diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index 0fff82080..648c94cbb 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c @@ -57,6 +57,11 @@ static inline void reg_write(u32 addr, u32 val)  #error "SMC911X: undefined bus width"  #endif /* CONFIG_DRIVER_SMC911X_16_BIT */ +u32 pkt_data_pull(u32 addr) \ +	__attribute__ ((weak, alias ("reg_read"))); +void pkt_data_push(u32 addr, u32 val) \ +	__attribute__ ((weak, alias ("reg_write"))); +  #define mdelay(n)       udelay((n)*1000)  /* Below are the register offsets and bit definitions @@ -641,7 +646,7 @@ int eth_send(volatile void *packet, int length)  	tmplen = (length + 3) / 4;  	while (tmplen--) -		reg_write(TX_DATA_FIFO, *data++); +		pkt_data_push(TX_DATA_FIFO, *data++);  	/* wait for transmission */  	while (!((reg_read(TX_FIFO_INF) & TX_FIFO_INF_TSUSED) >> 16)); @@ -684,7 +689,7 @@ int eth_rx(void)  		tmplen = (pktlen + 2+ 3) / 4;  		while (tmplen--) -			*data++ = reg_read(RX_DATA_FIFO); +			*data++ = pkt_data_pull(RX_DATA_FIFO);  		if (status & RX_STS_ES)  			printf(DRIVERNAME diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c index 6e0f2c6fd..f81211adb 100644 --- a/drivers/net/tsec.c +++ b/drivers/net/tsec.c @@ -16,8 +16,8 @@  #include <malloc.h>  #include <net.h>  #include <command.h> +#include <tsec.h> -#include "tsec.h"  #include "miiphy.h"  DECLARE_GLOBAL_DATA_PTR; @@ -32,69 +32,12 @@ typedef volatile struct rtxbd {  	rxbd8_t rxbd[PKTBUFSRX];  } RTXBD; -struct tsec_info_struct { -	unsigned int phyaddr; -	u32 flags; -	unsigned int phyregidx; -}; - -/* The tsec_info structure contains 3 values which the - * driver uses to determine how to operate a given ethernet - * device. The information needed is: - *  phyaddr - The address of the PHY which is attached to - *	the given device. - * - *  flags - This variable indicates whether the device - *	supports gigabit speed ethernet, and whether it should be - *	in reduced mode. - * - *  phyregidx - This variable specifies which ethernet device - *	controls the MII Management registers which are connected - *	to the PHY.  For now, only TSEC1 (index 0) has - *	access to the PHYs, so all of the entries have "0". - * - * The values specified in the table are taken from the board's - * config file in include/configs/.  When implementing a new - * board with ethernet capability, it is necessary to define: - *   TSECn_PHY_ADDR - *   TSECn_PHYIDX - * - * for n = 1,2,3, etc.  And for FEC: - *   FEC_PHY_ADDR - *   FEC_PHYIDX - */ -static struct tsec_info_struct tsec_info[] = { -#ifdef CONFIG_TSEC1 -	{TSEC1_PHY_ADDR, TSEC1_FLAGS, TSEC1_PHYIDX}, -#else -	{0, 0, 0}, -#endif -#ifdef CONFIG_TSEC2 -	{TSEC2_PHY_ADDR, TSEC2_FLAGS, TSEC2_PHYIDX}, -#else -	{0, 0, 0}, -#endif -#ifdef CONFIG_MPC85XX_FEC -	{FEC_PHY_ADDR, FEC_FLAGS, FEC_PHYIDX}, -#else -#ifdef CONFIG_TSEC3 -	{TSEC3_PHY_ADDR, TSEC3_FLAGS, TSEC3_PHYIDX}, -#else -	{0, 0, 0}, -#endif -#ifdef CONFIG_TSEC4 -	{TSEC4_PHY_ADDR, TSEC4_FLAGS, TSEC4_PHYIDX}, -#else -	{0, 0, 0}, -#endif	/* CONFIG_TSEC4 */ -#endif	/* CONFIG_MPC85XX_FEC */ -}; - -#define MAXCONTROLLERS	(4) +#define MAXCONTROLLERS	(8)  static int relocated = 0;  static struct tsec_private *privlist[MAXCONTROLLERS]; +static int num_tsecs = 0;  #ifdef __GNUC__  static RTXBD rtx __attribute__ ((aligned(8))); @@ -127,10 +70,51 @@ static int tsec_miiphy_read(char *devname, unsigned char addr,  static int tsec_mcast_addr (struct eth_device *dev, u8 mcast_mac, u8 set);  #endif +/* Default initializations for TSEC controllers. */ + +static struct tsec_info_struct tsec_info[] = { +#ifdef CONFIG_TSEC1 +	STD_TSEC_INFO(1),	/* TSEC1 */ +#endif +#ifdef CONFIG_TSEC2 +	STD_TSEC_INFO(2),	/* TSEC2 */ +#endif +#ifdef CONFIG_MPC85XX_FEC +	{ +		.regs = (tsec_t *)(TSEC_BASE_ADDR + 0x2000), +		.miiregs = (tsec_t *)(TSEC_BASE_ADDR), +		.devname = CONFIG_MPC85XX_FEC_NAME, +		.phyaddr = FEC_PHY_ADDR, +		.flags = FEC_FLAGS +	},			/* FEC */ +#endif +#ifdef CONFIG_TSEC3 +	STD_TSEC_INFO(3),	/* TSEC3 */ +#endif +#ifdef CONFIG_TSEC4 +	STD_TSEC_INFO(4),	/* TSEC4 */ +#endif +}; + +int tsec_eth_init(bd_t *bis, struct tsec_info_struct *tsecs, int num) +{ +	int i; + +	for (i = 0; i < num; i++) +		tsec_initialize(bis, &tsecs[i]); + +	return 0; +} + +int tsec_standard_init(bd_t *bis) +{ +	return tsec_eth_init(bis, tsec_info, ARRAY_SIZE(tsec_info)); +} +  /* Initialize device structure. Returns success if PHY   * initialization succeeded (i.e. if it recognizes the PHY)   */ -int tsec_initialize(bd_t * bis, int index, char *devname) +int tsec_initialize(bd_t * bis, struct tsec_info_struct *tsec_info)  {  	struct eth_device *dev;  	int i; @@ -148,16 +132,14 @@ int tsec_initialize(bd_t * bis, int index, char *devname)  	if (NULL == priv)  		return 0; -	privlist[index] = priv; -	priv->regs = (volatile tsec_t *)(TSEC_BASE_ADDR + index * TSEC_SIZE); -	priv->phyregs = (volatile tsec_t *)(TSEC_BASE_ADDR + -					    tsec_info[index].phyregidx * -					    TSEC_SIZE); +	privlist[num_tsecs++] = priv; +	priv->regs = tsec_info->regs; +	priv->phyregs = tsec_info->miiregs; -	priv->phyaddr = tsec_info[index].phyaddr; -	priv->flags = tsec_info[index].flags; +	priv->phyaddr = tsec_info->phyaddr; +	priv->flags = tsec_info->flags; -	sprintf(dev->name, devname); +	sprintf(dev->name, tsec_info->devname);  	dev->iobase = 0;  	dev->priv = priv;  	dev->init = tsec_init; @@ -232,64 +214,82 @@ int tsec_init(struct eth_device *dev, bd_t * bd)  	/* If there's no link, fail */  	return (priv->link ? 0 : -1); -  } -/* Write value to the device's PHY through the registers - * specified in priv, modifying the register specified in regnum. - * It will wait for the write to be done (or for a timeout to - * expire) before exiting - */ -void write_any_phy_reg(struct tsec_private *priv, uint phyid, uint regnum, uint value) +/* Writes the given phy's reg with value, using the specified MDIO regs */ +static void tsec_local_mdio_write(volatile tsec_t *phyregs, uint addr, +		uint reg, uint value)  { -	volatile tsec_t *regbase = priv->phyregs;  	int timeout = 1000000; -	regbase->miimadd = (phyid << 8) | regnum; -	regbase->miimcon = value; +	phyregs->miimadd = (addr << 8) | reg; +	phyregs->miimcon = value;  	asm("sync");  	timeout = 1000000; -	while ((regbase->miimind & MIIMIND_BUSY) && timeout--) ; +	while ((phyregs->miimind & MIIMIND_BUSY) && timeout--) ;  } -/* #define to provide old write_phy_reg functionality without duplicating code */ -#define write_phy_reg(priv, regnum, value) write_any_phy_reg(priv,priv->phyaddr,regnum,value) + +/* Provide the default behavior of writing the PHY of this ethernet device */ +#define write_phy_reg(priv, regnum, value) tsec_local_mdio_write(priv->phyregs,priv->phyaddr,regnum,value)  /* Reads register regnum on the device's PHY through the - * registers specified in priv.	 It lowers and raises the read + * specified registers.	 It lowers and raises the read   * command, and waits for the data to become valid (miimind   * notvalid bit cleared), and the bus to cease activity (miimind   * busy bit cleared), and then returns the value   */ -uint read_any_phy_reg(struct tsec_private *priv, uint phyid, uint regnum) +uint tsec_local_mdio_read(volatile tsec_t *phyregs, uint phyid, uint regnum)  {  	uint value; -	volatile tsec_t *regbase = priv->phyregs;  	/* Put the address of the phy, and the register  	 * number into MIIMADD */ -	regbase->miimadd = (phyid << 8) | regnum; +	phyregs->miimadd = (phyid << 8) | regnum;  	/* Clear the command register, and wait */ -	regbase->miimcom = 0; +	phyregs->miimcom = 0;  	asm("sync");  	/* Initiate a read command, and wait */ -	regbase->miimcom = MIIM_READ_COMMAND; +	phyregs->miimcom = MIIM_READ_COMMAND;  	asm("sync");  	/* Wait for the the indication that the read is done */ -	while ((regbase->miimind & (MIIMIND_NOTVALID | MIIMIND_BUSY))) ; +	while ((phyregs->miimind & (MIIMIND_NOTVALID | MIIMIND_BUSY))) ;  	/* Grab the value read from the PHY */ -	value = regbase->miimstat; +	value = phyregs->miimstat;  	return value;  }  /* #define to provide old read_phy_reg functionality without duplicating code */ -#define read_phy_reg(priv,regnum) read_any_phy_reg(priv,priv->phyaddr,regnum) +#define read_phy_reg(priv,regnum) tsec_local_mdio_read(priv->phyregs,priv->phyaddr,regnum) + +#define TBIANA_SETTINGS ( \ +		TBIANA_ASYMMETRIC_PAUSE \ +		| TBIANA_SYMMETRIC_PAUSE \ +		| TBIANA_FULL_DUPLEX \ +		) + +#define TBICR_SETTINGS ( \ +		TBICR_PHY_RESET \ +		| TBICR_ANEG_ENABLE \ +		| TBICR_FULL_DUPLEX \ +		| TBICR_SPEED1_SET \ +		) +/* Configure the TBI for SGMII operation */ +static void tsec_configure_serdes(struct tsec_private *priv) +{ +	tsec_local_mdio_write(priv->phyregs, CFG_TBIPA_VALUE, TBI_ANA, +			TBIANA_SETTINGS); +	tsec_local_mdio_write(priv->phyregs, CFG_TBIPA_VALUE, TBI_TBICON, +			TBICON_CLK_SELECT); +	tsec_local_mdio_write(priv->phyregs, CFG_TBIPA_VALUE, TBI_CR, +			TBICR_SETTINGS); +}  /* Discover which PHY is attached to the device, and configure it   * properly.  If the PHY is not recognized, then return 0 @@ -299,12 +299,12 @@ static int init_phy(struct eth_device *dev)  {  	struct tsec_private *priv = (struct tsec_private *)dev->priv;  	struct phy_info *curphy; -	volatile tsec_t *regs = (volatile tsec_t *)(TSEC_BASE_ADDR); +	volatile tsec_t *phyregs = priv->phyregs; +	volatile tsec_t *regs = priv->regs;  	/* Assign a Physical address to the TBI */  	regs->tbipa = CFG_TBIPA_VALUE; -	regs = (volatile tsec_t *)(TSEC_BASE_ADDR + TSEC_SIZE); -	regs->tbipa = CFG_TBIPA_VALUE; +	phyregs->tbipa = CFG_TBIPA_VALUE;  	asm("sync");  	/* Reset MII (due to new addresses) */ @@ -328,6 +328,9 @@ static int init_phy(struct eth_device *dev)  		return 0;  	} +	if (regs->ecntrl & ECNTRL_SGMII_MODE) +		tsec_configure_serdes(priv); +  	priv->phyinfo = curphy;  	phy_run_commands(priv, priv->phyinfo->config); @@ -1157,6 +1160,54 @@ struct phy_info phy_info_M88E1118 = {  		},  }; +/* + *  Since to access LED register we need do switch the page, we + * do LED configuring in the miim_read-like function as follows + */ +uint mii_88E1121_set_led (uint mii_reg, struct tsec_private *priv) +{ +	uint pg; + +	/* Switch the page to access the led register */ +	pg = read_phy_reg(priv, MIIM_88E1121_PHY_PAGE); +	write_phy_reg(priv, MIIM_88E1121_PHY_PAGE, MIIM_88E1121_PHY_LED_PAGE); + +	/* Configure leds */ +	write_phy_reg(priv, MIIM_88E1121_PHY_LED_CTRL, +		      MIIM_88E1121_PHY_LED_DEF); + +	/* Restore the page pointer */ +	write_phy_reg(priv, MIIM_88E1121_PHY_PAGE, pg); +	return 0; +} + +struct phy_info phy_info_M88E1121R = { +	0x01410cb, +	"Marvell 88E1121R", +	4, +	(struct phy_cmd[]){	/* config */ +			   /* Reset and configure the PHY */ +			   {MIIM_CONTROL, MIIM_CONTROL_RESET, NULL}, +			   {MIIM_GBIT_CONTROL, MIIM_GBIT_CONTROL_INIT, NULL}, +			   {MIIM_ANAR, MIIM_ANAR_INIT, NULL}, +			   /* Configure leds */ +			   {MIIM_88E1121_PHY_LED_CTRL, miim_read, +			    &mii_88E1121_set_led}, +			   {MIIM_CONTROL, MIIM_CONTROL_INIT, &mii_cr_init}, +			   {miim_end,} +			   }, +	(struct phy_cmd[]){	/* startup */ +			   /* Status is read once to clear old link state */ +			   {MIIM_STATUS, miim_read, NULL}, +			   {MIIM_STATUS, miim_read, &mii_parse_sr}, +			   {MIIM_STATUS, miim_read, &mii_parse_link}, +			   {miim_end,} +			   }, +	(struct phy_cmd[]){	/* shutdown */ +			   {miim_end,} +			   }, +}; +  static unsigned int m88e1145_setmode(uint mii_reg, struct tsec_private *priv)  {  	uint mii_data = read_phy_reg(priv, mii_reg); @@ -1522,6 +1573,7 @@ struct phy_info *phy_info[] = {  	&phy_info_M88E1011S,  	&phy_info_M88E1111S,  	&phy_info_M88E1118, +	&phy_info_M88E1121R,  	&phy_info_M88E1145,  	&phy_info_M88E1149S,  	&phy_info_dm9161, @@ -1670,7 +1722,7 @@ static int tsec_miiphy_read(char *devname, unsigned char addr,  		return -1;  	} -	ret = (unsigned short)read_any_phy_reg(priv, addr, reg); +	ret = (unsigned short)tsec_local_mdio_read(priv->phyregs, addr, reg);  	*value = ret;  	return 0; @@ -1692,7 +1744,7 @@ static int tsec_miiphy_write(char *devname, unsigned char addr,  		return -1;  	} -	write_any_phy_reg(priv, addr, reg, value); +	tsec_local_mdio_write(priv->phyregs, addr, reg, value);  	return 0;  } diff --git a/drivers/net/tsi108_eth.c b/drivers/net/tsi108_eth.c index 2534097df..50fa765f7 100644 --- a/drivers/net/tsi108_eth.c +++ b/drivers/net/tsi108_eth.c @@ -34,6 +34,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/cache.h>  #ifdef DEBUG diff --git a/drivers/net/uli526x.c b/drivers/net/uli526x.c index d87638c13..9ea5ac201 100644 --- a/drivers/net/uli526x.c +++ b/drivers/net/uli526x.c @@ -16,6 +16,7 @@  #include <common.h>  #include <malloc.h>  #include <net.h> +#include <netdev.h>  #include <asm/io.h>  #include <pci.h>  #include <miiphy.h> diff --git a/include/configs/MPC8544DS.h b/include/configs/MPC8544DS.h index 573819203..612e8f2a7 100644 --- a/include/configs/MPC8544DS.h +++ b/include/configs/MPC8544DS.h @@ -196,7 +196,12 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);  #define PIXIS_VSPEED1		0x18	/* VELA VSpeed 1 */  #define PIXIS_VCLKH		0x19	/* VELA VCLKH register */  #define PIXIS_VCLKL		0x1A	/* VELA VCLKL register */ +#define PIXIS_VSPEED2		0x1d	/* VELA VSpeed 2 */  #define CFG_PIXIS_VBOOT_MASK	0x40    /* Reset altbank mask*/ +#define PIXIS_VSPEED2_TSEC1SER	0x2 +#define PIXIS_VSPEED2_TSEC3SER	0x1 +#define PIXIS_VCFGEN1_TSEC1SER	0x20 +#define PIXIS_VCFGEN1_TSEC3SER	0x40  /* define to use L1 as initial stack */ @@ -369,6 +374,9 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);  #define CONFIG_TSEC3	1  #define CONFIG_TSEC3_NAME	"eTSEC3" +#define CONFIG_FSL_SGMII_RISER	1 +#define SGMII_RISER_PHY_OFFSET	0x1c +  #define TSEC1_PHY_ADDR		0  #define TSEC3_PHY_ADDR		1 diff --git a/include/netdev.h b/include/netdev.h new file mode 100644 index 000000000..8b181f77e --- /dev/null +++ b/include/netdev.h @@ -0,0 +1,110 @@ +/* + * (C) Copyright 2008 + * Benjamin Warren, biggerbadderben@gmail.com + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * netdev.h - definitions an prototypes for network devices + */ + +#ifndef _NETDEV_H_ +#define _NETDEV_H_ + +/* + * Board and CPU-specific initialization functions + * board_eth_init() has highest priority.  cpu_eth_init() only + * gets called if board_eth_init() isn't instantiated or fails. + * Return values: + *      0: success + *     -1: failure + */ + +int board_eth_init(bd_t *bis); +int cpu_eth_init(bd_t *bis); + +/* Driver initialization prototypes */ +int bfin_EMAC_initialize(bd_t *bis); +int dc21x4x_initialize(bd_t *bis); +int e1000_initialize(bd_t *bis); +int eepro100_initialize(bd_t *bis); +int eth_3com_initialize (bd_t * bis); +int greth_initialize(bd_t *bis); +void gt6426x_eth_initialize(bd_t *bis); +int inca_switch_initialize(bd_t *bis); +int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); +int mcdmafec_initialize(bd_t *bis); +int mcffec_initialize(bd_t *bis); +int mpc512x_fec_initialize(bd_t *bis); +int mpc5xxx_fec_initialize(bd_t *bis); +int natsemi_initialize(bd_t *bis); +int ns8382x_initialize(bd_t *bis); +int pcnet_initialize(bd_t *bis); +int plb2800_eth_initialize(bd_t *bis); +int rtl8139_initialize(bd_t *bis); +int rtl8169_initialize(bd_t *bis); +int skge_initialize(bd_t *bis); +int tsi108_eth_initialize(bd_t *bis); +int uli526x_initialize(bd_t *bis); + +/* Boards with PCI network controllers can call this from their board_eth_init() + * function to initialize whatever's on board. + * Return value is total # of devices found */ + +static inline int pci_eth_init(bd_t *bis) +{ +	int num = 0; + +#ifdef CONFIG_PCI + +#ifdef CONFIG_EEPRO100 +	num += eepro100_initialize(bis); +#endif +#ifdef CONFIG_TULIP +	num += dc21x4x_initialize(bis); +#endif +#ifdef CONFIG_E1000 +	num += e1000_initialize(bis); +#endif +#ifdef CONFIG_PCNET +	num += pcnet_initialize(bis); +#endif +#ifdef CONFIG_NATSEMI +	num += natsemi_initialize(bis); +#endif +#ifdef CONFIG_NS8382X +	num += ns8382x_initialize(bis); +#endif +#if defined(CONFIG_RTL8139) +	num += rtl8139_initialize(bis); +#endif +#if defined(CONFIG_RTL8169) +	num += rtl8169_initialize(bis); +#endif +#if defined(CONFIG_ULI526) +	num += uli526x_initialize(bis); +#endif + +#endif  /* CONFIG_PCI */ +	return num; +} + +#endif /* _NETDEV_H_ */ + diff --git a/drivers/net/tsec.h b/include/tsec.h index 6a2338b46..2db4debfb 100644 --- a/drivers/net/tsec.h +++ b/include/tsec.h @@ -27,12 +27,30 @@  #define TSEC_SIZE	0x01000  /* FIXME:  Should these be pushed back to 83xx and 85xx config files? */ -#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) -    #define TSEC_BASE_ADDR	(CFG_IMMR + CFG_TSEC1_OFFSET) -#elif defined(CONFIG_MPC83XX) +#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) \ +	|| defined(CONFIG_MPC83XX)      #define TSEC_BASE_ADDR	(CFG_IMMR + CFG_TSEC1_OFFSET)  #endif +#define STD_TSEC_INFO(num) \ +{			\ +	.regs = (tsec_t *)(TSEC_BASE_ADDR + ((num - 1) * TSEC_SIZE)), \ +	.miiregs = (tsec_t *)TSEC_BASE_ADDR, \ +	.devname = CONFIG_TSEC##num##_NAME, \ +	.phyaddr = TSEC##num##_PHY_ADDR, \ +	.flags = TSEC##num##_FLAGS \ +} + +#define SET_STD_TSEC_INFO(x, num) \ +{			\ +	x.regs = (tsec_t *)(TSEC_BASE_ADDR + ((num - 1) * TSEC_SIZE)); \ +	x.miiregs = (tsec_t *)TSEC_BASE_ADDR; \ +	x.devname = CONFIG_TSEC##num##_NAME; \ +	x.phyaddr = TSEC##num##_PHY_ADDR; \ +	x.flags = TSEC##num##_FLAGS;\ +} + +  #define MAC_ADDR_LEN 6 @@ -42,6 +60,27 @@  #define PHY_AUTONEGOTIATE_TIMEOUT	5000 /* in ms */ +/* TBI register addresses */ +#define TBI_CR			0x00 +#define TBI_SR			0x01 +#define TBI_ANA			0x04 +#define TBI_ANLPBPA		0x05 +#define TBI_ANEX		0x06 +#define TBI_TBICON		0x11 + +/* TBI MDIO register bit fields*/ +#define TBICON_CLK_SELECT	0x0020 +#define TBIANA_ASYMMETRIC_PAUSE 0x0100 +#define TBIANA_SYMMETRIC_PAUSE  0x0080 +#define TBIANA_HALF_DUPLEX	0x0040 +#define TBIANA_FULL_DUPLEX	0x0020 +#define TBICR_PHY_RESET		0x8000 +#define TBICR_ANEG_ENABLE	0x1000 +#define TBICR_RESTART_ANEG	0x0200 +#define TBICR_FULL_DUPLEX	0x0100 +#define TBICR_SPEED1_SET	0x0040 + +  /* MAC register bits */  #define MACCFG1_SOFT_RESET	0x80000000  #define MACCFG1_RESET_RX_MC	0x00080000 @@ -184,6 +223,13 @@  #define MIIM_88E1111_PHY_LED_DIRECT	0x4100  #define MIIM_88E1111_PHY_LED_COMBINE	0x411C +/* 88E1121 PHY LED Control Register */ +#define MIIM_88E1121_PHY_LED_CTRL	16 +#define MIIM_88E1121_PHY_LED_PAGE	3 +#define MIIM_88E1121_PHY_LED_DEF	0x0030 + +#define MIIM_88E1121_PHY_PAGE		22 +  /* 88E1145 Extended PHY Specific Control Register */  #define MIIM_88E1145_PHY_EXT_CR 20  #define MIIM_M88E1145_RGMII_RX_DELAY	0x0080 @@ -515,7 +561,9 @@ typedef struct tsec  /* This flag currently only has   * meaning if we're using the eTSEC */ -#define TSEC_REDUCED (1 << 1) +#define TSEC_REDUCED	(1 << 1) + +#define TSEC_SGMII	(1 << 2)  struct tsec_private {  	volatile tsec_t *regs; @@ -576,4 +624,16 @@ struct phy_info {  	struct phy_cmd *shutdown;  }; +struct tsec_info_struct { +	tsec_t *regs; +	tsec_t *miiregs; +	char *devname; +	unsigned int phyaddr; +	u32 flags; +}; + +int tsec_initialize(bd_t * bis, struct tsec_info_struct *tsec_info); +int tsec_standard_init(bd_t *bis); +int tsec_eth_init(bd_t *bis, struct tsec_info_struct *tsec_info, int num); +  #endif /* __TSEC_H */ @@ -39,34 +39,15 @@ static int __def_eth_init(bd_t *bis)  int cpu_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init")));  int board_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init"))); -#ifdef CFG_GT_6426x -extern int gt6426x_eth_initialize(bd_t *bis); -#endif -  extern int au1x00_enet_initialize(bd_t*); -extern int dc21x4x_initialize(bd_t*); -extern int e1000_initialize(bd_t*); -extern int eepro100_initialize(bd_t*); -extern int eth_3com_initialize(bd_t*);  extern int fec_initialize(bd_t*); -extern int inca_switch_initialize(bd_t*); -extern int mpc5xxx_fec_initialize(bd_t*); -extern int mpc512x_fec_initialize(bd_t*);  extern int mpc8220_fec_initialize(bd_t*);  extern int mv6436x_eth_initialize(bd_t *);  extern int mv6446x_eth_initialize(bd_t *); -extern int natsemi_initialize(bd_t*); -extern int ns8382x_initialize(bd_t*); -extern int pcnet_initialize(bd_t*); -extern int plb2800_eth_initialize(bd_t*);  extern int ppc_4xx_eth_initialize(bd_t *); -extern int rtl8139_initialize(bd_t*); -extern int rtl8169_initialize(bd_t*);  extern int scc_initialize(bd_t*); -extern int tsi108_eth_initialize(bd_t*);  extern int npe_initialize(bd_t *);  extern int uec_initialize(int); -extern int at91sam9_eth_initialize(bd_t *);  #ifdef CONFIG_API  extern void (*push_packet)(volatile void *, int); @@ -181,21 +162,9 @@ int eth_initialize(bd_t *bis)  #if defined(CONFIG_4xx) && !defined(CONFIG_IOP480) && !defined(CONFIG_AP1000)  	ppc_4xx_eth_initialize(bis);  #endif -#ifdef CONFIG_INCA_IP_SWITCH -	inca_switch_initialize(bis); -#endif -#ifdef CONFIG_PLB2800_ETHER -	plb2800_eth_initialize(bis); -#endif  #ifdef SCC_ENET  	scc_initialize(bis);  #endif -#if defined(CONFIG_MPC5xxx_FEC) -	mpc5xxx_fec_initialize(bis); -#endif -#if defined(CONFIG_MPC512x_FEC) -	mpc512x_fec_initialize (bis); -#endif  #if defined(CONFIG_MPC8220_FEC)  	mpc8220_fec_initialize(bis);  #endif @@ -221,44 +190,6 @@ int eth_initialize(bd_t *bis)  #if defined(CONFIG_IXP4XX_NPE)  	npe_initialize(bis);  #endif -#ifdef CONFIG_E1000 -	e1000_initialize(bis); -#endif -#ifdef CONFIG_EEPRO100 -	eepro100_initialize(bis); -#endif -#ifdef CONFIG_TULIP -	dc21x4x_initialize(bis); -#endif -#ifdef CONFIG_3COM -	eth_3com_initialize(bis); -#endif -#ifdef CONFIG_PCNET -	pcnet_initialize(bis); -#endif -#ifdef CFG_GT_6426x -	gt6426x_eth_initialize(bis); -#endif -#ifdef CONFIG_NATSEMI -	natsemi_initialize(bis); -#endif -#ifdef CONFIG_NS8382X -	ns8382x_initialize(bis); -#endif -#if defined(CONFIG_TSI108_ETH) -	tsi108_eth_initialize(bis); -#endif -#if defined(CONFIG_RTL8139) -	rtl8139_initialize(bis); -#endif -#if defined(CONFIG_RTL8169) -	rtl8169_initialize(bis); -#endif -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ -    defined(CONFIG_AT91SAM9263) -	at91sam9_eth_initialize(bis); -#endif -  	if (!eth_devices) {  		puts ("No ethernet found.\n");  		show_boot_progress (-64); diff --git a/net/tftp.c b/net/tftp.c index 84d83ca97..9aeecb8d3 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -111,6 +111,8 @@ store_block (unsigned block, uchar * src, unsigned len)  	for (i=0; i<CFG_MAX_FLASH_BANKS; i++) {  		/* start address in flash? */ +		if (flash_info[i].flash_id == FLASH_UNKNOWN) +			continue;  		if (load_addr + offset >= flash_info[i].start[0]) {  			rc = 1;  			break; |