Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
PATCH v3 1/1 Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
All in-tree boards that use this controller have CONFIG_NET_MULTI added Also:
- changed CONFIG_DRIVER_CS8900 to CONFIG_CS8900
- changed CS8900_BASE to CONFIG_CS8900_BASE
- changed CS8900_BUS?? to CONFIG_CS8900_BUS??
- cleaned up line lengths
- modified VCMA9 command function that accesses the device
- removed MAC address initialization from lib_arm/board.c
---
v3: Added accessor macros to ensure proper bus access
v2: Fixed typo: CS8900_BUS32 -> CONFIG_CS8900_BUS32
Added more descriptive printf in cs8900_init as suggested by Wolfgang Initialize 'priv' data structure in cs8900_initialize()
board/altera/dk1c20/dk1c20.c | 12 ++ board/altera/dk1s10/dk1s10.c | 12 ++ board/armadillo/armadillo.c | 12 ++ board/csb226/csb226.c | 12 ++ board/ep7312/ep7312.c | 12 ++ board/freescale/mx31ads/mx31ads.c | 12 ++ board/impa7/impa7.c | 12 ++ board/lart/lart.c | 12 ++ board/mpl/vcma9/cmd_vcma9.c | 28 +++-- board/mpl/vcma9/vcma9.c | 12 ++ board/mx1ads/mx1ads.c | 12 ++ board/samsung/smdk2400/smdk2400.c | 12 ++ board/samsung/smdk2410/smdk2410.c | 12 ++ board/samsung/smdk6400/smdk6400.c | 12 ++ board/sbc2410x/sbc2410x.c | 12 ++ board/ssv/adnpesc1/adnpesc1.c | 12 ++ board/trab/trab.c | 12 ++ drivers/net/Makefile | 2 +- drivers/net/cs8900.c | 271 ++++++++++++++++++++++--------------- drivers/net/cs8900.h | 41 ++++--- include/configs/ADNPESC1.h | 14 +- include/configs/DK1C20.h | 14 +- include/configs/DK1S10.h | 14 +- include/configs/VCMA9.h | 7 +- include/configs/armadillo.h | 9 +- include/configs/csb226.h | 7 +- include/configs/ep7312.h | 9 +- include/configs/impa7.h | 7 +- include/configs/lart.h | 7 +- include/configs/mx1ads.h | 7 +- include/configs/mx31ads.h | 7 +- include/configs/sbc2410x.h | 7 +- include/configs/smdk2400.h | 7 +- include/configs/smdk2410.h | 7 +- include/configs/smdk6400.h | 7 +- include/configs/trab.h | 7 +- include/netdev.h | 1 + lib_arm/board.c | 9 -- 38 files changed, 473 insertions(+), 208 deletions(-)
board/altera/dk1c20/dk1c20.c +12 -0
@@ -25,6 +25,7 @@*/ #include <common.h> +#include <netdev.h> #include <nios-io.h> #if defined(CONFIG_SEVENSEG )#include "../common/sevenseg.h"
@@ -79,3 +80,14 @@ int ide_preinit (void) return 0; }#endif + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/altera/dk1s10/dk1s10.c +12 -0
@@ -22,6 +22,7 @@*/ #include <common.h> +#include <netdev.h> #if defined(CONFIG_SEVENSEG )#include "../common/sevenseg.h" #endif
@@ -58,3 +59,14 @@ phys_size_t initdram (int board_type) {return (0 ); } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/armadillo/armadillo.c +12 -0
@@ -26,6 +26,7 @@*/ #include <common.h> +#include <netdev.h> #include <clps7111.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -58,3 +59,14 @@ int dram_init (void)return (0 ); } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/csb226/csb226.c +12 -0
@@ -24,6 +24,7 @@*/ #include <common.h> +#include <netdev.h> #include <asm/arch/pxa-regs.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -151,3 +152,14 @@ void show_boot_progress (int status)return ; } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/ep7312/ep7312.c +12 -0
@@ -23,6 +23,7 @@*/ #include <common.h> +#include <netdev.h> #include <clps7111.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -52,3 +53,14 @@ int dram_init (void)return (0 ); } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/freescale/mx31ads/mx31ads.c +12 -0
@@ -21,6 +21,7 @@*/ #include <common.h> +#include <netdev.h> #include <asm/io.h> #include <asm/arch/mx31.h> #include <asm/arch/mx31-regs.h>
@@ -104,3 +105,14 @@ int checkboard (void)printf ("Board: MX31ADS\n" );return 0 ; } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/impa7/impa7.c +12 -0
@@ -23,6 +23,7 @@*/ #include <common.h> +#include <netdev.h> #include <clps7111.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -57,3 +58,14 @@ int dram_init (void)return (0 ); } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/lart/lart.c +12 -0
@@ -23,6 +23,7 @@*/ #include <common.h> +#include <netdev.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -62,3 +63,14 @@ int dram_init (void)return (0 ); } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/mpl/vcma9/cmd_vcma9.c +18 -10
@@ -31,7 +31,7 @@#include "vcma9.h" #include "../common/common_util.h" -#if defined(CONFIG_DRIVER_CS8900 ) +#if defined(CONFIG_CS8900 )#include <../drivers/net/cs8900.h> static uchar cs8900_chksum (ushort data)
@@ -56,25 +56,33 @@ extern int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);int do_vcma9 (cmd_tbl_t *cmdtp,int flag,int argc,char *argv[]) { +struct eth_device *dev; +char cs8900_name[10 ];if (strcmp (argv[1 ],"info" ) ==0 ) {print_vcma9_info ();return 0 ; } -#if defined(CONFIG_DRIVER_CS8900 ) +#if defined(CONFIG_CS8900 )if (strcmp (argv[1 ],"cs8900" ) ==0 ) { +sprintf (cs8900_name,"%s-0" ,CS8900_DRIVERNAME ); + dev =eth_get_dev_by_name (cs8900_name); +if (!dev) { +printf ("Couldn't find CS8900 driver" ); +return 0 ; + }if (strcmp (argv[2 ],"read" ) ==0 ) {uchar addr;ushort data; addr =simple_strtoul (argv[3 ],NULL ,16 ); -cs8900_e2prom_read (addr, &data); +cs8900_e2prom_read (dev, addr, &data);printf ("0x%2.2X: 0x%4.4X\n" , addr, data); }else if (strcmp (argv[2 ],"write" ) ==0 ) {uchar addr;ushort data; addr =simple_strtoul (argv[3 ],NULL ,16 ); data =simple_strtoul (argv[4 ],NULL ,16 ); -cs8900_e2prom_write (addr, data); +cs8900_e2prom_write (dev, addr, data); }else if (strcmp (argv[2 ],"setaddr" ) ==0 ) {uchar addr, i, csum;ushort data;uchar ethaddr[6 ];
@@ -83,22 +91,22 @@ int do_vcma9(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])if (eth_getenv_enetaddr ("ethaddr" , ethaddr)) { addr =1 ; data =0x2158 ; -cs8900_e2prom_write (addr, data); +cs8900_e2prom_write (dev, addr, data); csum =cs8900_chksum (data); addr++;for (i =0 ; i <6 ; i+=2 ) { data = ethaddr[i+1 ] <<8 | ethaddr[i]; -cs8900_e2prom_write (addr, data); +cs8900_e2prom_write (dev, addr, data); csum +=cs8900_chksum (data); addr++; }/* calculate header link byte */ data =0xA100 | (addr *2 ); -cs8900_e2prom_write (0 , data); +cs8900_e2prom_write (dev,0 , data); csum +=cs8900_chksum (data);/* write checksum word */ -cs8900_e2prom_write (addr, (0 - csum) <<8 ); +cs8900_e2prom_write (dev, addr, (0 - csum) <<8 ); }else {puts ("\nplease defined 'ethaddr'\n" ); }
@@ -106,12 +114,12 @@ int do_vcma9(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])uchar addr =0 , endaddr, csum;ushort data;puts ("Dump of CS8900 config device: " ); -cs8900_e2prom_read (addr, &data); +cs8900_e2prom_read (dev, addr, &data);if ((data &0xE000 ) ==0xA000 ) { endaddr = (data &0x00FF ) /2 ; csum =cs8900_chksum (data);for (addr =1 ; addr <= endaddr; addr++) { -cs8900_e2prom_read (addr, &data); +cs8900_e2prom_read (dev, addr, &data);printf ("\n0x%2.2X: 0x%4.4X" , addr, data); csum +=cs8900_chksum (data); }
board/mpl/vcma9/vcma9.c +12 -0
@@ -26,6 +26,7 @@*/ #include <common.h> +#include <netdev.h> #include <s3c2410.h> #include <stdio_dev.h> #include <i2c.h>
@@ -349,3 +350,14 @@ void print_vcma9_info(void)Show_VCMA9_Info (s, &s[6 ]); } } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/mx1ads/mx1ads.c +12 -0
@@ -24,6 +24,7 @@*/ #include <common.h> +#include <netdev.h> /*#include <mc9328.h>*/ #include <asm/arch/imx-regs.h>
@@ -167,3 +168,14 @@ int dram_init (void)return 0 ; } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/samsung/smdk2400/smdk2400.c +12 -0
@@ -26,6 +26,7 @@*/ #include <common.h> +#include <netdev.h> #include <s3c2400.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -110,3 +111,14 @@ static int key_pressed(void) return rc; }#endif /* CONFIG_MODEM_SUPPORT */ + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/samsung/smdk2410/smdk2410.c +12 -0
@@ -26,6 +26,7 @@*/ #include <common.h> +#include <netdev.h> #include <s3c2410.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -121,3 +122,14 @@ int dram_init (void)return 0 ; } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/samsung/smdk6400/smdk6400.c +12 -0
@@ -29,6 +29,7 @@*/ #include <common.h> +#include <netdev.h> #include <s3c6400.h> /* ------------------------------------------------------------------------- */
@@ -117,3 +118,14 @@ ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t *info) }else return 0 ; } + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/sbc2410x/sbc2410x.c +12 -0
@@ -29,6 +29,7 @@*/ #include <common.h> +#include <netdev.h> #include <s3c2410.h> #if defined(CONFIG_CMD_NAND )
@@ -178,3 +179,14 @@ void nand_init(void) printf ("%4lu MB\n", nand_probe((ulong)nand) >> 20); }#endif + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/ssv/adnpesc1/adnpesc1.c +12 -0
@@ -22,6 +22,7 @@*/ #include <common.h> +#include <netdev.h> #include <nios-io.h> #include <spi.h>
@@ -100,3 +101,14 @@ int post_hotkeys_pressed(void) return 0; /* No hotkeys supported */ }#endif /* CONFIG_POST */ + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
board/trab/trab.c +12 -0
@@ -24,6 +24,7 @@/* #define DEBUG */ #include <common.h> +#include <netdev.h> #include <malloc.h> #include <s3c2400.h> #include <command.h>
@@ -420,3 +421,14 @@ static void tsc2000_set_brightness(void) tsc2000_write(0, 0xb, br & 0xff); }#endif + +#ifdef CONFIG_CMD_NET +int board_eth_init (bd_t *bis) +{ +int rc =0 ; +#ifdef CONFIG_CS8900 + rc =cs8900_initialize (0 ,CONFIG_CS8900_BASE ); +#endif +return rc; +} +#endif
drivers/net/Makefile +1 -1
@@ -30,7 +30,7 @@ COBJS-$(CONFIG_PPC4xx_EMAC) += 4xx_enet.o COBJS-$(CONFIG_DRIVER_AX88180) += ax88180.o COBJS-$(CONFIG_BCM570x) += bcm570x.o bcm570x_autoneg.o 5701rls.o COBJS-$(CONFIG_BFIN_MAC) += bfin_mac.o -COBJS-$(CONFIG_DRIVER_CS8900) += cs8900.o +COBJS-$(CONFIG_CS8900) += cs8900.o COBJS-$(CONFIG_TULIP) += dc2114x.o COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o COBJS-$(CONFIG_DNET) += dnet.o
drivers/net/cs8900.c +159 -112
413 lines not on this page · raw message
drivers/net/cs8900.h +24 -17
70 lines not on this page · raw message
include/configs/ADNPESC1.h +8 -6
@@ -426,15 +426,17 @@/********************************************/ /* !!! CS8900 is __not__ tested on NIOS !!! */ /********************************************/ -#define CONFIG_DRIVER_CS8900 /* Using CS8900 */ -#define CS8900_BASE (CONFIG_SYS_NIOS_CPU_LAN0_BASE + CONFIG_SYS_NIOS_CPU_LAN0_OFFS) +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* Using CS8900 */ +#define CONFIG_CS8900_BASE (CONFIG_SYS_NIOS_CPU_LAN0_BASE + \ + CONFIG_SYS_NIOS_CPU_LAN0_OFFS)#if (CONFIG_SYS_NIOS_CPU_LAN0_BUSW ==32 ) -#undef CS8900_BUS16 -#define CS8900_BUS32 1 +#undef CONFIG_CS8900_BUS16 +#define CONFIG_CS8900_BUS32 #else /* no */ -#define CS8900_BUS16 1 -#undef CS8900_BUS32 +#define CONFIG_CS8900_BUS16 +#undef CONFIG_CS8900_BUS32#endif #else
include/configs/DK1C20.h +8 -6
@@ -232,15 +232,17 @@/********************************************/ /* !!! CS8900 is __not__ tested on NIOS !!! */ /********************************************/ -#define CONFIG_DRIVER_CS8900 /* Using CS8900 */ -#define CS8900_BASE (CONFIG_SYS_NIOS_CPU_LAN0_BASE + CONFIG_SYS_NIOS_CPU_LAN0_OFFS) +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* Using CS8900 */ +#define CONFIG_CS8900_BASE (CONFIG_SYS_NIOS_CPU_LAN0_BASE + \ + CONFIG_SYS_NIOS_CPU_LAN0_OFFS)#if (CONFIG_SYS_NIOS_CPU_LAN0_BUSW ==32 ) -#undef CS8900_BUS16 -#define CS8900_BUS32 1 +#undef CONFIG_CS8900_BUS16 +#define CONFIG_CS8900_BUS32 #else /* no */ -#define CS8900_BUS16 1 -#undef CS8900_BUS32 +#define CONFIG_CS8900_BUS16 +#undef CONFIG_CS8900_BUS32#endif #else
include/configs/DK1S10.h +8 -6
@@ -249,15 +249,17 @@/********************************************/ /* !!! CS8900 is __not__ tested on NIOS !!! */ /********************************************/ -#define CONFIG_DRIVER_CS8900 /* Using CS8900 */ -#define CS8900_BASE (CONFIG_SYS_NIOS_CPU_LAN0_BASE + CONFIG_SYS_NIOS_CPU_LAN0_OFFS) +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* Using CS8900 */ +#define CONFIG_CS8900_BASE (CONFIG_SYS_NIOS_CPU_LAN0_BASE + \ + CONFIG_SYS_NIOS_CPU_LAN0_OFFS)#if (CONFIG_SYS_NIOS_CPU_LAN0_BUSW ==32 ) -#undef CS8900_BUS16 -#define CS8900_BUS32 1 +#undef CONFIG_CS8900_BUS16 +#define CONFIG_CS8900_BUS32 #else /* no */ -#define CS8900_BUS16 1 -#undef CS8900_BUS32 +#define CONFIG_CS8900_BUS16 +#undef CONFIG_CS8900_BUS32#endif #else
include/configs/VCMA9.h +4 -3
@@ -108,9 +108,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x20000300 -#define CS8900_BUS16 1/* the Linux driver does accesses as shorts */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x20000300 +#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ #define CONFIG_DRIVER_S3C24X0_I2C 1/* we use the buildin I2C controller */
include/configs/armadillo.h +5 -4
@@ -56,10 +56,11 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x20000300/* armadillo board */ -#define CS8900_BUS16 1 -#undef CS8900_BUS32 +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x20000300/* armadillo board */ +#define CONFIG_CS8900_BUS16 +#undef CONFIG_CS8900_BUS32/* * select serial console configuration
include/configs/csb226.h +4 -3
@@ -150,9 +150,10 @@/* * Network chip */ -#define CONFIG_DRIVER_CS8900 1 -#define CS8900_BUS32 1 -#define CS8900_BASE 0x08000000 +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 +#define CONFIG_CS8900_BUS32 +#define CONFIG_CS8900_BASE 0x08000000/* * Stack sizes
include/configs/ep7312.h +5 -4
@@ -47,10 +47,11 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x20000000 -#define CS8900_BUS16 1 -#undef CS8900_BUS32 +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x20000000 +#define CONFIG_CS8900_BUS16 +#undef CONFIG_CS8900_BUS32/* * select serial console configuration
include/configs/impa7.h +4 -3
@@ -47,9 +47,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x20000000 -#define CS8900_BUS32 1 +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x20000000 +#define CONFIG_CS8900_BUS32 /* * select serial console configuration
include/configs/lart.h +4 -3
@@ -47,9 +47,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x20008300 -#define CS8900_BUS16 1 +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x20008300 +#define CONFIG_CS8900_BUS16 /* * select serial console configuration
include/configs/mx1ads.h +4 -3
@@ -66,9 +66,10 @@/* * CS8900 Ethernet drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x15000300 -#define CS8900_BUS16 1/* the Linux driver does accesses as shorts */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x15000300 +#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ /* * select serial console configuration
include/configs/mx31ads.h +4 -3
@@ -109,9 +109,10 @@"cp.b ${loadaddr} ${uboot_addr} ${filesize}; " \ "setenv filesize; saveenv\0" -#define CONFIG_DRIVER_CS8900 1 -#define CS8900_BASE 0xb4020300 -#define CS8900_BUS16 1/* follow the Linux driver */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 +#define CONFIG_CS8900_BASE 0xb4020300 +#define CONFIG_CS8900_BUS16 1/* follow the Linux driver */ /* * The MX31ADS board seems to have a hardware "peculiarity" confirmed under
include/configs/sbc2410x.h +4 -3
@@ -63,9 +63,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x19000300 -#define CS8900_BUS16 1/* the Linux driver does accesses as shorts */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x19000300 +#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ /* * select serial console configuration
include/configs/smdk2400.h +4 -3
@@ -56,9 +56,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x07000300/* agrees with WIN CE PA */ -#define CS8900_BUS16 1/* the Linux driver does accesses as shorts */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x07000300/* agrees with WIN CE PA */ +#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ /* * select serial console configuration
include/configs/smdk2410.h +4 -3
@@ -53,9 +53,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x19000300 -#define CS8900_BUS16 1/* the Linux driver does accesses as shorts */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x19000300 +#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ /* * select serial console configuration
include/configs/smdk6400.h +4 -3
@@ -74,9 +74,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x18800300 -#define CS8900_BUS16 1/* follow the Linux driver */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x18800300 +#define CONFIG_CS8900_BUS16 /* follow the Linux driver */ /* * select serial console configuration
include/configs/trab.h +4 -3
@@ -99,9 +99,10 @@/* * Hardware drivers */ -#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */ -#define CS8900_BASE 0x07000300/* agrees with WIN CE PA */ -#define CS8900_BUS16 1/* the Linux driver does accesses as shorts */ +#define CONFIG_NET_MULTI +#define CONFIG_CS8900 /* we have a CS8900 on-board */ +#define CONFIG_CS8900_BASE 0x07000300/* agrees with WIN CE PA */ +#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ #define CONFIG_DRIVER_S3C24X0_I2C 1/* we use the buildin I2C controller */
include/netdev.h +1 -0
@@ -43,6 +43,7 @@ int cpu_eth_init(bd_t *bis);/* Driver initialization prototypes */ int au1x00_enet_initialize (bd_t *);int bfin_EMAC_initialize (bd_t *bis); +int cs8900_initialize (u8 dev_num,int base_addr);int dc21x4x_initialize (bd_t *bis);int davinci_emac_initialize (void );int dnet_eth_initialize (int id,void *regs,unsigned int phy_addr);
lib_arm/board.c +0 -9
@@ -73,10 +73,6 @@ extern void dataflash_print_info(void);const char version_string[] =U_BOOT_VERSION " (" U_BOOT_DATE " - " U_BOOT_TIME ")" CONFIG_IDENT_STRING ; -#ifdef CONFIG_DRIVER_CS8900 -extern void cs8900_get_enetaddr (void ); -#endif -#ifdef CONFIG_DRIVER_RTL8019 extern void rtl8019_get_enetaddr (uchar * addr);#endif
@@ -423,11 +419,6 @@ extern void davinci_eth_set_mac_addr (const u_int8_t *addr); }#endif -#ifdef CONFIG_DRIVER_CS8900 -/* XXX: this needs to be moved to board init */ -cs8900_get_enetaddr (); -#endif -#if defined(CONFIG_DRIVER_SMC91111 ) || defined (CONFIG_DRIVER_LAN91C96 )/* XXX: this needs to be moved to board init */ if (getenv ("ethaddr" )) {
Signature · 1 line
1.5.6.3
PATCH v3 1/1 Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
Dear Ben Warren,
Quoted 9 lines · In message <[email protected]> you…
All in-tree boards that use this controller have
CONFIG_NET_MULTIadded Also:
- changedCONFIG_DRIVER_CS8900toCONFIG_CS8900
- changedCS8900_BASEtoCONFIG_CS8900_BASE
- changedCS8900_BUS?? toCONFIG_CS8900_BUS??
- cleaned up line lengths
- modified VCMA9 command function that accesses the device
- removed MAC address initialization fromlib_arm/board.c
Quoted 7 lines
Signed-off-by Ben Warren <[email protected]>---
v3: Added accessor macros to ensure proper bus access
v2: Fixed typo:CS8900_BUS32->CONFIG_CS8900_BUS32
Added more descriptive printf incs8900_initas suggested by Wolfgang Initialize 'priv' data structure incs8900_initialize()
Tested on "trab" with DEBUG enabled - hard hangs the board even before
printing the "Net: CS8900-0" message.
OK, gotta fetch a BDI from the office to recover the board...
Best regards,
Wolfgang Denk
Signature · 6 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Program maintenance is an entropy-increasing process, and even its most skilfull execution only delays the subsidence of the system into unfixable obsolescence. - Fred Brooks, "The Mythical Man Month"
PATCH v3 1/1 Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
In reply to Ben WarrenDear Ben Warren,
Quoted 9 lines · In message <[email protected]> you…
All in-tree boards that use this controller have
CONFIG_NET_MULTIadded Also:
- changedCONFIG_DRIVER_CS8900toCONFIG_CS8900
- changedCS8900_BASEtoCONFIG_CS8900_BASE
- changedCS8900_BUS?? toCONFIG_CS8900_BUS??
- cleaned up line lengths
- modified VCMA9 command function that accesses the device
- removed MAC address initialization fromlib_arm/board.c
Quoted 7 lines
Signed-off-by Ben Warren <[email protected]>---
v3: Added accessor macros to ensure proper bus access
v2: Fixed typo:CS8900_BUS32->CONFIG_CS8900_BUS32
Added more descriptive printf incs8900_initas suggested by Wolfgang Initialize 'priv' data structure incs8900_initialize()
Tested on mx31ads: works like a charm.
Will try to debug the trab issues later tonight (if I manage to find a matching JTAG connector for this board ).
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Artificial Intelligence is the study of how to make real computers act like the ones in movies.
PATCH v3 1/1 Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
Quoted 16 lines · Wolfgang Denk
Dear Ben Warren,
Quoted 12 lines · In message <[email protected]> you…
All in-tree boards that use this controller have
CONFIG_NET_MULTIadded Also:
- changedCONFIG_DRIVER_CS8900toCONFIG_CS8900
- changedCS8900_BASEtoCONFIG_CS8900_BASE
- changedCS8900_BUS?? toCONFIG_CS8900_BUS??
- cleaned up line lengths
- modified VCMA9 command function that accesses the device
- removed MAC address initialization fromlib_arm/board.cSigned-off-by Ben Warren <[email protected]>---
Quoted 9 lines
Quoted 5 lines
v3: Added accessor macros to ensure proper bus access
v2: Fixed typo:CS8900_BUS32->CONFIG_CS8900_BUS32
Added more descriptive printf incs8900_initas suggested by Wolfgang Initialize 'priv' data structure incs8900_initialize()Tested on mx31ads: works like a charm.
Great news! Thanks!
Quoted 9 lines
Will try to debug the trab issues later tonight (if I manage to find a matching JTAG connector for this board ).
Best regards,
Wolfgang Denk
Thanks again for your help.
Ben
PATCH v3 1/1 Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
Dear Ben,
Quoted 4 lines · in message <[email protected]> you wrote:
Quoted 3 lines
Tested on mx31ads: works like a charm.
Great news! Thanks!
Wait... we've not reached the goal yet, I'm afraid...
Quoted 2 lines
Quoted 2 lines
Will try to debug the trab issues later tonight (if I manage to find a matching JTAG connector for this board ).
This turns out to be a nasty one.
The good news is: the hang on trab is not caused by your patch.
Fact is that it is instead caused by using a somewhat recent (gcc-4.2.2 based) tool chain. This compiler does some ugly things when attempting to access 32 bit wide registers which cause one of the trab-specific drivers to hang in the initialization. If I use an older tool chain (say, gcc-4.0.0 based), your patch works like a charm, too.
The bad news ist: I don't know how to fix this.
In the first attempt I noticed that the (old) trab code does not use any I/O accessors at all. My guesses that a "volatile" might be missing didn't help.
So I changed the code in question to use readl() / writel() - and this did not help either.
Then I noticed that readl() / writel() on ARM are mapped to __arch_getl() / __arch_putl() which in turn are just plain stupid volatile pointer accesses.
So I replaced these #defines by the following code:
static inline uint32_t __arch_getl (uint32_t V_ATTRIB * const addr)
{
uint32_t val;
val = *addr;
return val;
}static inline void __arch_putl (uint32_t val, uint32_t V_ATTRIB * const addr)
{
*addr = val;
}With this code, I see the following behaviour:
1) If I use "#define V_ATTRIB volatile" which I think is needed and technically correct, the trab-specific driver code starts working again; however, the CS8900 Ethernet driver does not work. It gives:
TRAB # run load Using CS8900-0 device TFTP from server 192.168.1.1; our IP address is 192.168.20.2 Filename '/tftpboot/trab/u-boot.bin'. Load address: 0xc100000 Loading: T T T T T T T T T T Retry count exceeded; starting again Using CS8900-0 device TFTP from server 192.168.1.1; our IP address is 192.168.20.2 Filename '/tftpboot/trab/u-boot.bin'. Load address: 0xc100000 Loading: T T T T T T T T T T Retry count exceeded; starting again Using CS8900-0 device TFTP from server 192.168.1.1; our IP address is 192.168.20.2 Filename '/tftpboot/trab/u-boot.bin'. Load address: 0xc100000 Loading: T T T T T T T T T T Retry count exceeded; starting again ...
All this in quick sequence, without the usual longish delays / timeouts.
2) If I use "#define V_ATTRIB" instead (i. e. if I do _not_ use "volatile"), then the trab driver code hangs again, but the CS8900 Ethernet driver works fine.
It seems the "volatile" causes the compiler to generate different code - with the volatile it seems that 4 x 8 bit reads are performed instead of 1 x 32 bit read. Unfortunaltely I wasn't able to reduce this to a trival test case yet.
Is there anybody out there with good C compiler / assembler knowhow on ARM - and with an idea how to fix this issue?
Best regards,
Wolfgang Denk
Signature · 6 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The thing is, as you progress in the Craft, you'll learn there is
another rule... When you break rules, break 'em good and hard.
- Terry Pratchett, _Wyrd Sisters_PATCH v3 1/1 Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
In reply to Ben WarrenDear Ben Warren,
Quoted 6 lines · In message <[email protected]> you wrote:
Quoted 3 lines
Tested on mx31ads: works like a charm.
Great news! Thanks!
Quoted 2 lines
Will try to debug the trab issues later tonight (if I manage to find a matching JTAG connector for this board ).
OK, tested on trab (= SMDK2400), too. [The observed problems were caused by other, unrelated issues.]
You might want to consider adding this patch, though:
PATCH v3 1/1 Convert CS8900 Ethernet driver to CONFIG_NET_MULTI API
Wolfgang,
Quoted 7 lines · Wolfgang Denk
Dear Ben Warren,
Quoted 3 lines · In message <[email protected]> you wrote:
Quoted 3 lines
Tested on mx31ads: works like a charm.
Quoted 10 lines
Quoted 5 lines
Great news! Thanks!
Quoted 3 lines
Will try to debug the trab issues later tonight (if I manage to find a matching JTAG connector for this board ).
OK, tested on trab (= SMDK2400), too. [The observed problems were caused by other, unrelated issues.]
Great!
Quoted 25 lines
You might want to consider adding this patch, though:
From
e1236c57d747c4b686f9918dba2333d4df539a54Mon Sep 17 00:00:00 2001
From: Wolfgang Denk <[email protected]>
Date: Tue, 25 Aug 2009 11:55:16 +0200
Subject: [PATCH]cs8900.c: Fix implicit integer to pointer conversion--- drivers/net/cs8900.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-)drivers/net/cs8900.c +1
-3@@ -68,12 +68,13 @@ static u16 get_reg_init_bus(struct eth_device *dev, int regno)/* force 16 bit busmode */ volatile u8 c;struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); +uint8_t volatile *const iob = (uint8_t volatile *const )dev->iobase; - c =readb (dev->iobase); - c =readb (dev->iobase +1 ); - c =readb (dev->iobase);
drivers/net/cs8900.c static u16 get_reg_init_bus(struct eth_device *dev, int regno) · line 80
Quoted 10 lines
drivers/net/cs8900.c +5
-2- c =readb (dev->iobase +1 ); - c =readb (dev->iobase); + c =readb (iob); + c =readb (iob +1 ); + c =readb (iob); + c =readb (iob +1 ); + c =readb (iob);REG_WRITE (regno, &priv->regs->pptr);return REG_READ (&priv->regs->pdata);
I'll add this and put this in the net/next branch. Thanks for the help!
regards,
Ben