diff options
39 files changed, 227 insertions, 281 deletions
diff --git a/board/bf537-stamp/bf537-stamp.c b/board/bf537-stamp/bf537-stamp.c index cd7a04d..a9b7a68 100644 --- a/board/bf537-stamp/bf537-stamp.c +++ b/board/bf537-stamp/bf537-stamp.c @@ -154,6 +154,16 @@ int misc_init_r(void) } #endif /* CONFIG_MISC_INIT_R */ +#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); +} +#endif + #ifdef CONFIG_POST /* Using sw10-PF5 as the hotkey */ int post_hotkeys_pressed(void) diff --git a/board/freescale/mpc8610hpcd/mpc8610hpcd.c b/board/freescale/mpc8610hpcd/mpc8610hpcd.c index c9dde4d..af79fc2 100644 --- a/board/freescale/mpc8610hpcd/mpc8610hpcd.c +++ b/board/freescale/mpc8610hpcd/mpc8610hpcd.c @@ -519,3 +519,13 @@ 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; +} diff --git a/board/sl8245/sl8245.c b/board/sl8245/sl8245.c index 8647887..c853755 100644 --- a/board/sl8245/sl8245.c +++ b/board/sl8245/sl8245.c @@ -66,3 +66,16 @@ 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; + +#if defined(CONFIG_SK98) + rc = skge_initialize(bis); +#endif + return rc; +} + diff --git a/common/cmd_net.c b/common/cmd_net.c index 79e910c..af691a4 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -39,8 +39,8 @@ int do_bootp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) U_BOOT_CMD( bootp, 3, 1, do_bootp, - "bootp\t- boot image via network using BootP/TFTP protocol\n", - "[loadAddress] [bootfilename]\n" + "bootp\t- boot image via network using BOOTP/TFTP protocol\n", + "[loadAddress] [[hostIPaddr:]bootfilename]\n" ); int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -62,7 +62,7 @@ int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) U_BOOT_CMD( rarpboot, 3, 1, do_rarpb, "rarpboot- boot image via network using RARP/TFTP protocol\n", - "[loadAddress] [bootfilename]\n" + "[loadAddress] [[hostIPaddr:]bootfilename]\n" ); #if defined(CONFIG_CMD_DHCP) @@ -73,8 +73,8 @@ int do_dhcp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) U_BOOT_CMD( dhcp, 3, 1, do_dhcp, - "dhcp\t- invoke DHCP client to obtain IP/boot params\n", - "\n" + "dhcp\t- boot image via network using DHCP/TFTP protocol\n", + "[loadAddress] [[hostIPaddr:]bootfilename]\n" ); #endif diff --git a/cpu/leon2/cpu.c b/cpu/leon2/cpu.c index 1c1e24b..5de1c52 100644 --- a/cpu/leon2/cpu.c +++ b/cpu/leon2/cpu.c @@ -56,3 +56,12 @@ 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) +{ + return greth_initialize(bis); +} +#endif diff --git a/cpu/leon3/cpu.c b/cpu/leon3/cpu.c index 306a210..1725fdb 100644 --- a/cpu/leon3/cpu.c +++ b/cpu/leon3/cpu.c @@ -65,3 +65,11 @@ u64 flash_read64(void *addr) } /* ------------------------------------------------------------------------- */ +extern int greth_initialize(bd_t *bis); + +#ifdef CONFIG_GRETH +int cpu_eth_init(bd_t *bis) +{ + return greth_initialize(bis); +} +#endif diff --git a/cpu/mcf523x/cpu.c b/cpu/mcf523x/cpu.c index f0d954b..8d2152d 100644 --- a/cpu/mcf523x/cpu.c +++ b/cpu/mcf523x/cpu.c @@ -107,3 +107,17 @@ int watchdog_init(void) return (0); } #endif /* CONFIG_WATCHDOG */ + +#if defined(CONFIG_MCFFEC) +/* Default initializations for MCFFEC controllers. To override, + * create a board-specific function called: + * int board_eth_init(bd_t *bis) + */ + +extern int mcffec_initialize(bd_t*); + +int cpu_eth_init(bd_t *bis) +{ + return mcffec_initialize(bis); +} +#endif diff --git a/cpu/mcf52x2/cpu.c b/cpu/mcf52x2/cpu.c index d5d3d33..2af31cb 100644 --- a/cpu/mcf52x2/cpu.c +++ b/cpu/mcf52x2/cpu.c @@ -321,3 +321,18 @@ int do_reset(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char *argv[]) return 0; }; #endif + +#if defined(CONFIG_MCFFEC) +/* Default initializations for MCFFEC controllers. To override, + * create a board-specific function called: + * int board_eth_init(bd_t *bis) + */ + +extern int mcffec_initialize(bd_t*); + +int cpu_eth_init(bd_t *bis) +{ + return mcffec_initialize(bis); +} +#endif + diff --git a/cpu/mcf532x/cpu.c b/cpu/mcf532x/cpu.c index 61541ab..20d0d5c 100644 --- a/cpu/mcf532x/cpu.c +++ b/cpu/mcf532x/cpu.c @@ -129,3 +129,17 @@ int watchdog_init(void) return (0); } #endif /* CONFIG_WATCHDOG */ + +#if defined(CONFIG_MCFFEC) +/* Default initializations for MCFFEC controllers. To override, + * create a board-specific function called: + * int board_eth_init(bd_t *bis) + */ + +extern int mcffec_initialize(bd_t*); + +int cpu_eth_init(bd_t *bis) +{ + return mcffec_initialize(bis); +} +#endif diff --git a/cpu/mcf5445x/cpu.c b/cpu/mcf5445x/cpu.c index e601b89..ab342dd 100644 --- a/cpu/mcf5445x/cpu.c +++ b/cpu/mcf5445x/cpu.c @@ -95,3 +95,17 @@ int checkcpu(void) return 0; } + +#if defined(CONFIG_MCFFEC) +/* Default initializations for MCFFEC controllers. To override, + * create a board-specific function called: + * int board_eth_init(bd_t *bis) + */ + +extern int mcffec_initialize(bd_t*); + +int cpu_eth_init(bd_t *bis) +{ + return mcffec_initialize(bis); +} +#endif diff --git a/cpu/mcf547x_8x/cpu.c b/cpu/mcf547x_8x/cpu.c index 528bca6..1ba7aa8 100644 --- a/cpu/mcf547x_8x/cpu.c +++ b/cpu/mcf547x_8x/cpu.c @@ -141,3 +141,24 @@ int watchdog_init(void) return (0); } #endif /* CONFIG_HW_WATCHDOG */ + +#if defined(CONFIG_FSLDMAFEC) || defined(CONFIG_MCFFEC) +/* Default initializations for MCFFEC controllers. To override, + * create a board-specific function called: + * 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) + mcdmafec_initialize(bis); +#endif +#if defined(CONFIG_MCFFEC) + mcffec_initialize(bis); +#endif + return 0; +} +#endif diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c index fe56949..3ee5d96 100644 --- a/drivers/net/bfin_mac.c +++ b/drivers/net/bfin_mac.c @@ -88,7 +88,7 @@ int bfin_EMAC_initialize(bd_t *bis) eth_register(dev); - return 1; + return 0; } static int bfin_EMAC_send(struct eth_device *dev, volatile void *packet, diff --git a/drivers/net/dm9000x.c b/drivers/net/dm9000x.c index e7365fe..3a61b80 100644 --- a/drivers/net/dm9000x.c +++ b/drivers/net/dm9000x.c @@ -55,8 +55,7 @@ v1.2 03/18/2003 Weilun Huang <weilun_huang@davicom.com.tw>: These changes are tested with DM9000{A,EP,E} together with a 200MHz Atmel AT91SAM92161 core -TODO: Homerun NIC and longrun NIC are not functional, only internal at the - moment. +TODO: external MII is not functional, only internal at the moment. */ #include <common.h> @@ -68,9 +67,6 @@ TODO: Homerun NIC and longrun NIC are not functional, only internal at the /* Board/System/Debug information/definition ---------------- */ -#define DM9801_NOISE_FLOOR 0x08 -#define DM9802_NOISE_FLOOR 0x05 - /* #define CONFIG_DM9000_DEBUG */ #ifdef CONFIG_DM9000_DEBUG @@ -90,13 +86,6 @@ TODO: Homerun NIC and longrun NIC are not functional, only internal at the #define DM9000_DMP_PACKET(func,packet,length) #endif -enum DM9000_PHY_mode { DM9000_10MHD = 0, DM9000_100MHD = - 1, DM9000_10MFD = 4, DM9000_100MFD = 5, DM9000_AUTO = - 8, DM9000_1M_HPNA = 0x10 -}; -enum DM9000_NIC_TYPE { FASTETHER_NIC = 0, HOMERUN_NIC = 1, LONGRUN_NIC = 2 -}; - /* Structure/enum declaration ------------------------------- */ typedef struct board_info { u32 runt_length_counter; /* counter: RX length < 64byte */ @@ -109,7 +98,6 @@ typedef struct board_info { u16 dbug_cnt; u8 phy_addr; u8 device_wait_reset; /* device state */ - u8 nic_type; /* NIC type */ unsigned char srom[128]; void (*outblk)(volatile void *data_ptr, int count); void (*inblk)(void *data_ptr, int count); @@ -117,10 +105,6 @@ typedef struct board_info { } board_info_t; static board_info_t dm9000_info; -/* For module input parameter */ -static int media_mode = DM9000_AUTO; -static u8 nfloor = 0; - /* function declaration ------------------------------------- */ int eth_init(bd_t * bd); int eth_send(volatile void *, int); @@ -260,114 +244,6 @@ dm9000_probe(void) } } -/* Set PHY operationg mode -*/ -static void -set_PHY_mode(void) -{ - u16 phy_reg4 = 0x01e1, phy_reg0 = 0x1000; - if (!(media_mode & DM9000_AUTO)) { - switch (media_mode) { - case DM9000_10MHD: - phy_reg4 = 0x21; - phy_reg0 = 0x0000; - break; - case DM9000_10MFD: - phy_reg4 = 0x41; - phy_reg0 = 0x1100; - break; - case DM9000_100MHD: - phy_reg4 = 0x81; - phy_reg0 = 0x2000; - break; - case DM9000_100MFD: - phy_reg4 = 0x101; - phy_reg0 = 0x3100; - break; - } - phy_write(4, phy_reg4); /* Set PHY media mode */ - phy_write(0, phy_reg0); /* Tmp */ - } - DM9000_iow(DM9000_GPCR, 0x01); /* Let GPIO0 output */ - DM9000_iow(DM9000_GPR, 0x00); /* Enable PHY */ -} - -/* - Init HomeRun DM9801 -*/ -static void -program_dm9801(u16 HPNA_rev) -{ - __u16 reg16, reg17, reg24, reg25; - if (!nfloor) - nfloor = DM9801_NOISE_FLOOR; - reg16 = phy_read(16); - reg17 = phy_read(17); - reg24 = phy_read(24); - reg25 = phy_read(25); - switch (HPNA_rev) { - case 0xb900: /* DM9801 E3 */ - reg16 |= 0x1000; - reg25 = ((reg24 + nfloor) & 0x00ff) | 0xf000; - break; - case 0xb901: /* DM9801 E4 */ - reg25 = ((reg24 + nfloor) & 0x00ff) | 0xc200; - reg17 = (reg17 & 0xfff0) + nfloor + 3; - break; - case 0xb902: /* DM9801 E5 */ - case 0xb903: /* DM9801 E6 */ - default: - reg16 |= 0x1000; - reg25 = ((reg24 + nfloor - 3) & 0x00ff) | 0xc200; - reg17 = (reg17 & 0xfff0) + nfloor; - } - phy_write(16, reg16); - phy_write(17, reg17); - phy_write(25, reg25); -} - -/* - Init LongRun DM9802 -*/ -static void -program_dm9802(void) -{ - __u16 reg25; - if (!nfloor) - nfloor = DM9802_NOISE_FLOOR; - reg25 = phy_read(25); - reg25 = (reg25 & 0xff00) + nfloor; - phy_write(25, reg25); -} - -/* Identify NIC type -*/ -static void -identify_nic(void) -{ - struct board_info *db = &dm9000_info; - u16 phy_reg3; - DM9000_iow(DM9000_NCR, NCR_EXT_PHY); - phy_reg3 = phy_read(3); - switch (phy_reg3 & 0xfff0) { - case 0xb900: - if (phy_read(31) == 0x4404) { - db->nic_type = HOMERUN_NIC; - program_dm9801(phy_reg3); - DM9000_DBG("found homerun NIC\n"); - } else { - db->nic_type = LONGRUN_NIC; - DM9000_DBG("found longrun NIC\n"); - program_dm9802(); - } - break; - default: - db->nic_type = FASTETHER_NIC; - break; - } - DM9000_iow(DM9000_NCR, 0); -} - /* General Purpose dm9000 reset routine */ static void dm9000_reset(void) @@ -377,12 +253,12 @@ dm9000_reset(void) /* Reset DM9000, see DM9000 Application Notes V1.22 Jun 11, 2004 page 29 */ - /* DEBUG: Make all GPIO pins outputs */ - DM9000_iow(DM9000_GPCR, 0x0F); + /* DEBUG: Make all GPIO0 outputs, all others inputs */ + DM9000_iow(DM9000_GPCR, GPCR_GPIO0_OUT); /* Step 1: Power internal PHY by writing 0 to GPIO0 pin */ DM9000_iow(DM9000_GPR, 0); /* Step 2: Software reset */ - DM9000_iow(DM9000_NCR, 3); + DM9000_iow(DM9000_NCR, (NCR_LBK_INT_MAC | NCR_RST)); do { DM9000_DBG("resetting the DM9000, 1st reset\n"); @@ -390,7 +266,7 @@ dm9000_reset(void) } while (DM9000_ior(DM9000_NCR) & 1); DM9000_iow(DM9000_NCR, 0); - DM9000_iow(DM9000_NCR, 3); /* Issue a second reset */ + DM9000_iow(DM9000_NCR, (NCR_LBK_INT_MAC | NCR_RST)); /* Issue a second reset */ do { DM9000_DBG("resetting the DM9000, 2nd reset\n"); @@ -416,7 +292,9 @@ eth_init(bd_t * bd) /* RESET device */ dm9000_reset(); - dm9000_probe(); + + if (dm9000_probe() < 0) + return -1; /* Auto-detect 8/16/32 bit mode, ISR Bit 6+7 indicate bus width */ io_mode = DM9000_ior(DM9000_ISR) >> 6; @@ -449,21 +327,12 @@ eth_init(bd_t * bd) break; } - /* NIC Type: FASTETHER, HOMERUN, LONGRUN */ - identify_nic(); - - /* GPIO0 on pre-activate PHY */ - DM9000_iow(DM9000_GPR, 0x00); /*REG_1F bit0 activate phyxcer */ - - /* Set PHY */ - set_PHY_mode(); - - /* Program operating register, only intern phy supported by now */ + /* Program operating register, only internal phy supported */ DM9000_iow(DM9000_NCR, 0x0); /* TX Polling clear */ DM9000_iow(DM9000_TCR, 0); /* Less 3Kb, 200us */ - DM9000_iow(DM9000_BPTR, 0x3f); + DM9000_iow(DM9000_BPTR, BPTR_BPHW(3) | BPTR_JPT_600US); /* Flow Control : High/Low Water */ DM9000_iow(DM9000_FCTR, FCTR_HWOT(3) | FCTR_LWOT(8)); /* SH FIXME: This looks strange! Flow Control */ @@ -473,10 +342,10 @@ eth_init(bd_t * bd) /* clear TX status */ DM9000_iow(DM9000_NSR, NSR_WAKEST | NSR_TX2END | NSR_TX1END); /* Clear interrupt status */ - DM9000_iow(DM9000_ISR, 0x0f); + DM9000_iow(DM9000_ISR, ISR_ROOS | ISR_ROS | ISR_PTS | ISR_PRS); /* Set Node address */ -#ifndef CONFIG_AT91SAM9261EK +#if !defined(CONFIG_AT91SAM9261EK) for (i = 0; i < 6; i++) ((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i); #endif @@ -498,7 +367,9 @@ eth_init(bd_t * bd) printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", bd->bi_enetaddr[0], bd->bi_enetaddr[1], bd->bi_enetaddr[2], bd->bi_enetaddr[3], bd->bi_enetaddr[4], bd->bi_enetaddr[5]); - for (i = 0, oft = 0x10; i < 6; i++, oft++) + + /* fill device MAC address registers */ + for (i = 0, oft = DM9000_PAR; i < 6; i++, oft++) DM9000_iow(oft, bd->bi_enetaddr[i]); for (i = 0, oft = 0x16; i < 8; i++, oft++) DM9000_iow(oft, 0xff); diff --git a/drivers/net/dm9000x.h b/drivers/net/dm9000x.h index f47ff8c..0d123e2 100644 --- a/drivers/net/dm9000x.h +++ b/drivers/net/dm9000x.h @@ -66,6 +66,8 @@ #define NCR_FCOL (1<<4) #define NCR_FDX (1<<3) #define NCR_LBK (3<<1) +#define NCR_LBK_INT_MAC (1<<1) +#define NCR_LBK_INT_PHY (2<<1) #define NCR_RST (1<<0) #define NSR_SPEED (1<<7) @@ -107,13 +109,32 @@ #define RSR_CE (1<<1) #define RSR_FOE (1<<0) +#define EPCR_EPOS_PHY (1<<3) +#define EPCR_EPOS_EE (0<<3) +#define EPCR_ERPRR (1<<2) +#define EPCR_ERPRW (1<<1) +#define EPCR_ERRE (1<<0) + #define FCTR_HWOT(ot) (( ot & 0xf ) << 4 ) #define FCTR_LWOT(ot) ( ot & 0xf ) +#define BPTR_BPHW(x) ((x) << 4) +#define BPTR_JPT_200US (0x07) +#define BPTR_JPT_600US (0x0f) + #define IMR_PAR (1<<7) #define IMR_ROOM (1<<3) #define IMR_ROM (1<<2) #define IMR_PTM (1<<1) #define IMR_PRM (1<<0) +#define ISR_ROOS (1<<3) +#define ISR_ROS (1<<2) +#define ISR_PTS (1<<1) +#define ISR_PRS (1<<0) + +#define GPCR_GPIO0_OUT (1<<0) + +#define GPR_PHY_PWROFF (1<<0) + #endif diff --git a/drivers/net/fsl_mcdmafec.c b/drivers/net/fsl_mcdmafec.c index f2bdba6..59524a5 100644 --- a/drivers/net/fsl_mcdmafec.c +++ b/drivers/net/fsl_mcdmafec.c @@ -94,7 +94,7 @@ struct fec_info_dma fec_info[] = { 0, /* phy name */ 0, /* phy name init */ #ifdef CFG_DMA_USE_INTSRAM - DBUF_LENGTH, /* RX BD */ + (cbd_t *)DBUF_LENGTH, /* RX BD */ #else 0, /* RX BD */ #endif @@ -540,15 +540,16 @@ int mcdmafec_initialize(bd_t * bis) /* setup Receive and Transmit buffer descriptor */ #ifdef CFG_DMA_USE_INTSRAM - fec_info[i].rxbd = (int)fec_info[i].rxbd + tmp; - tmp = fec_info[i].rxbd; + fec_info[i].rxbd = (cbd_t *)((u32)fec_info[i].rxbd + tmp); + tmp = (u32)fec_info[i].rxbd; fec_info[i].txbd = - (int)fec_info[i].txbd + tmp + (PKTBUFSRX * sizeof(cbd_t)); - tmp = fec_info[i].txbd; + (cbd_t *)((u32)fec_info[i].txbd + tmp + + (PKTBUFSRX * sizeof(cbd_t))); + tmp = (u32)fec_info[i].txbd; fec_info[i].txbuf = - (int)fec_info[i].txbuf + tmp + - (CFG_TX_ETH_BUFFER * sizeof(cbd_t)); - tmp = fec_info[i].txbuf; + (char *)((u32)fec_info[i].txbuf + tmp + + (CFG_TX_ETH_BUFFER * sizeof(cbd_t))); + tmp = (u32)fec_info[i].txbuf; #else fec_info[i].rxbd = (cbd_t *) memalign(CFG_CACHELINE_SIZE, @@ -582,5 +583,5 @@ int mcdmafec_initialize(bd_t * bis) /* default speed */ bis->bi_ethspeed = 10; - return 1; + return 0; } diff --git a/drivers/net/greth.c b/drivers/net/greth.c index 76ece59..90c5338 100644 --- a/drivers/net/greth.c +++ b/drivers/net/greth.c @@ -657,5 +657,5 @@ int greth_initialize(bd_t * bis) /* set and remember MAC address */ greth_set_hwaddr(greth, addr); - return 1; + return 0; } diff --git a/drivers/net/mcffec.c b/drivers/net/mcffec.c index 58ed5e3..50d6508 100644 --- a/drivers/net/mcffec.c +++ b/drivers/net/mcffec.c @@ -66,6 +66,7 @@ struct fec_info_s fec_info[] = { 0, /* tx Index */ 0, /* tx buffer */ 0, /* initialized flag */ + (struct fec_info_s *)-1, }, #endif #ifdef CFG_FEC1_IOBASE @@ -78,12 +79,17 @@ struct fec_info_s fec_info[] = { 0, /* duplex and speed */ 0, /* phy name */ 0, /* phy name init */ +#ifdef CFG_FEC_BUF_USE_SRAM + (cbd_t *)DBUF_LENGTH, /* RX BD */ +#else 0, /* RX BD */ +#endif 0, /* TX BD */ 0, /* rx Index */ 0, /* tx Index */ 0, /* tx buffer */ 0, /* initialized flag */ + (struct fec_info_s *)-1, } #endif }; @@ -168,16 +174,22 @@ int fec_send(struct eth_device *dev, volatile void *packet, int length) /* Activate transmit Buffer Descriptor polling */ fecp->tdar = 0x01000000; /* Descriptor polling active */ - /* FEC fix for MCF5275, FEC unable to initial transmit data packet. +#ifndef CFG_FEC_BUF_USE_SRAM + /* + * FEC unable to initial transmit data packet. * A nop will ensure the descriptor polling active completed. + * CF Internal RAM has shorter cycle access than DRAM. If use + * DRAM as Buffer descriptor and data, a nop is a must. + * Affect only V2 and V3. */ -#ifdef CONFIG_M5275 __asm__ ("nop"); + #endif #ifdef CFG_UNIFY_CACHE icache_invalid(); #endif + j = 0; while ((info->txbd[info->txIdx].cbd_sc & BD_ENET_TX_READY) && (j < MCFFEC_TOUT_LOOP)) { @@ -209,6 +221,8 @@ int fec_recv(struct eth_device *dev) int length; for (;;) { +#ifndef CFG_FEC_BUF_USE_SRAM +#endif #ifdef CFG_UNIFY_CACHE icache_invalid(); #endif @@ -553,6 +567,9 @@ int mcffec_initialize(bd_t * bis) { struct eth_device *dev; int i; +#ifdef CFG_FEC_BUF_USE_SRAM + u32 tmp = CFG_INIT_RAM_ADDR + 0x1000; +#endif for (i = 0; i < sizeof(fec_info) / sizeof(fec_info[0]); i++) { @@ -573,6 +590,18 @@ int mcffec_initialize(bd_t * bis) dev->recv = fec_recv; /* setup Receive and Transmit buffer descriptor */ +#ifdef CFG_FEC_BUF_USE_SRAM + fec_info[i].rxbd = (cbd_t *)((u32)fec_info[i].rxbd + tmp); + tmp = (u32)fec_info[i].rxbd; + fec_info[i].txbd = + (cbd_t *)((u32)fec_info[i].txbd + tmp + + (PKTBUFSRX * sizeof(cbd_t))); + tmp = (u32)fec_info[i].txbd; + fec_info[i].txbuf = + (char *)((u32)fec_info[i].txbuf + tmp + + (CFG_TX_ETH_BUFFER * sizeof(cbd_t))); + tmp = (u32)fec_info[i].txbuf; +#else fec_info[i].rxbd = (cbd_t *) memalign(CFG_CACHELINE_SIZE, (PKTBUFSRX * sizeof(cbd_t))); @@ -581,6 +610,8 @@ int mcffec_initialize(bd_t * bis) (TX_BUF_CNT * sizeof(cbd_t))); fec_info[i].txbuf = (char *)memalign(CFG_CACHELINE_SIZE, DBUF_LENGTH); +#endif + #ifdef ET_DEBUG printf("rxbd %x txbd %x\n", (int)fec_info[i].rxbd, (int)fec_info[i].txbd); @@ -594,10 +625,13 @@ int mcffec_initialize(bd_t * bis) miiphy_register(dev->name, mcffec_miiphy_read, mcffec_miiphy_write); #endif + if (i > 0) + fec_info[i - 1].next = &fec_info[i]; } + fec_info[i - 1].next = &fec_info[0]; /* default speed */ bis->bi_ethspeed = 10; - return 1; + return 0; } diff --git a/drivers/net/sk98lin/Makefile b/drivers/net/sk98lin/Makefile index 8b83fae..f1bc4a7 100644 --- a/drivers/net/sk98lin/Makefile +++ b/drivers/net/sk98lin/Makefile @@ -29,24 +29,12 @@ include $(TOPDIR)/config.mk LIB := $(obj)libsk98lin.a -COBJS-y += skge.o -COBJS-y += skaddr.o -COBJS-y += skgehwt.o -COBJS-y += skgeinit.o -COBJS-y += skgepnmi.o -COBJS-y += skgesirq.o -COBJS-y += ski2c.o -COBJS-y += sklm80.o -COBJS-y += skqueue.o -COBJS-y += skrlmt.o -COBJS-y += sktimer.o -COBJS-y += skvpd.o -COBJS-y += skxmac2.o -COBJS-y += skcsum.o +COBJS-$(CONFIG_SK98) += skge.o skaddr.o skgehwt.o skgeinit.o skgepnmi.o \ + skgesirq.o ski2c.o sklm80.o skqueue.o skrlmt.o sktimer.o \ + skvpd.o skxmac2.o skcsum.o #COBJS-y += skproc.o -COBJS-y += uboot_skb.o -COBJS-y += uboot_drv.o +COBJS-$(CONFIG_SK98) += uboot_skb.o uboot_drv.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c) diff --git a/drivers/net/sk98lin/skaddr.c b/drivers/net/sk98lin/skaddr.c index ed79c04..8d34f72 100644 --- a/drivers/net/sk98lin/skaddr.c +++ b/drivers/net/sk98lin/skaddr.c @@ -220,8 +220,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - #ifndef lint static const char SysKonnectFileId[] = "@(#) $Id: skaddr.c,v 1.48 2003/02/12 17:09:37 tschilli Exp $ (C) SysKonnect."; @@ -1875,5 +1873,3 @@ SK_U32 ToPortNumber) /* Port2 Index */ #ifdef __cplusplus } #endif /* __cplusplus */ - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skcsum.c b/drivers/net/sk98lin/skcsum.c index a5dc572..162b67d 100644 --- a/drivers/net/sk98lin/skcsum.c +++ b/drivers/net/sk98lin/skcsum.c @@ -72,8 +72,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - #ifdef SK_USE_CSUM /* Check if CSUM is to be used. */ #ifndef lint @@ -925,5 +923,3 @@ SK_EVPARA Param) /* Event dependent parameter. */ } /* SkCsEvent */ #endif /* SK_USE_CSUM */ - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c index e1d7e87..c815480 100644 --- a/drivers/net/sk98lin/skge.c +++ b/drivers/net/sk98lin/skge.c @@ -342,8 +342,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - #include "h/skversion.h" #if 0 #include <linux/module.h> @@ -4860,5 +4858,3 @@ int l; } /* DumpLong */ #endif - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skgehwt.c b/drivers/net/sk98lin/skgehwt.c index f8681a8..ca08eb1 100644 --- a/drivers/net/sk98lin/skgehwt.c +++ b/drivers/net/sk98lin/skgehwt.c @@ -75,8 +75,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* Event queue and dispatcher */ @@ -214,7 +212,4 @@ SK_IOC Ioc) /* IoContext */ pAC->Hwt.TStop = pAC->Hwt.TStart; SkTimerDone(pAC,Ioc) ; } - -#endif /* CONFIG_SK98 */ - /* End of file */ diff --git a/drivers/net/sk98lin/skgeinit.c b/drivers/net/sk98lin/skgeinit.c index e49685b..ab740c7 100644 --- a/drivers/net/sk98lin/skgeinit.c +++ b/drivers/net/sk98lin/skgeinit.c @@ -395,8 +395,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - #include "h/skdrv1st.h" #include "h/skdrv2nd.h" @@ -2367,5 +2365,3 @@ int Port) /* Port to configure */ return(0); } /* SkGeInitPort */ - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skgemib.c b/drivers/net/sk98lin/skgemib.c index 4a9e9e6..7f62e9c 100644 --- a/drivers/net/sk98lin/skgemib.c +++ b/drivers/net/sk98lin/skgemib.c @@ -52,8 +52,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* * PRIVATE OID handler function prototypes */ @@ -1056,5 +1054,3 @@ PNMI_STATIC const SK_PNMI_TAB_ENTRY IdTable[] = { 0, SK_PNMI_RO, Vct, 0}, }; - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skgepnmi.c b/drivers/net/sk98lin/skgepnmi.c index 16fa352..d0e33cb 100644 --- a/drivers/net/sk98lin/skgepnmi.c +++ b/drivers/net/sk98lin/skgepnmi.c @@ -434,8 +434,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - static const char SysKonnectFileId[] = "@(#) $Id: skgepnmi.c,v 1.102 2002/12/16 14:03:24 tschilli Exp $" " (C) SysKonnect."; @@ -8306,5 +8304,3 @@ SK_U32 PhysPortIndex) } } /* CheckVctStatus */ - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skgesirq.c b/drivers/net/sk98lin/skgesirq.c index c9763e7..106fe48 100644 --- a/drivers/net/sk98lin/skgesirq.c +++ b/drivers/net/sk98lin/skgesirq.c @@ -339,8 +339,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* * Special Interrupt handler * @@ -2412,6 +2410,4 @@ SK_U16 IStatus) /* Interrupt Status */ } /* SkPhyIsrLone */ #endif /* OTHER_PHY */ -#endif /* CONFIG_SK98 */ - /* End of File */ diff --git a/drivers/net/sk98lin/ski2c.c b/drivers/net/sk98lin/ski2c.c index 0c5d9b4..894cc67 100644 --- a/drivers/net/sk98lin/ski2c.c +++ b/drivers/net/sk98lin/ski2c.c @@ -230,8 +230,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* * I2C Protocol */ @@ -1501,5 +1499,3 @@ SK_EVPARA Para) /* Event specific Parameter */ } /* SkI2cEvent*/ #endif /* !SK_DIAG */ - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/sklm80.c b/drivers/net/sk98lin/sklm80.c index 0229877..9f455f7 100644 --- a/drivers/net/sk98lin/sklm80.c +++ b/drivers/net/sk98lin/sklm80.c @@ -100,8 +100,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* LM80 functions */ @@ -288,5 +286,3 @@ SK_SENSOR *pSen) /* Sensor to be read */ /* Not completed */ return(0); } - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skproc.c b/drivers/net/sk98lin/skproc.c index 94a6a56..9325ee7 100644 --- a/drivers/net/sk98lin/skproc.c +++ b/drivers/net/sk98lin/skproc.c @@ -72,8 +72,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - #include <linux/proc_fs.h> #include "h/skdrv1st.h" @@ -510,5 +508,3 @@ char * SkNumber(char * str, long long num, int base, int size, int precision return strorg; } - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skqueue.c b/drivers/net/sk98lin/skqueue.c index c49baed..de7441e 100644 --- a/drivers/net/sk98lin/skqueue.c +++ b/drivers/net/sk98lin/skqueue.c @@ -89,8 +89,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* Event queue and dispatcher */ @@ -237,6 +235,4 @@ SK_IOC Ioc) /* Io context */ return(0) ; } -#endif /* CONFIG_SK98 */ - /* End of file */ diff --git a/drivers/net/sk98lin/skrlmt.c b/drivers/net/sk98lin/skrlmt.c index 14a6f40..2e7924d 100644 --- a/drivers/net/sk98lin/skrlmt.c +++ b/drivers/net/sk98lin/skrlmt.c @@ -282,8 +282,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - #ifndef lint static const char SysKonnectFileId[] = "@(#) $Id: skrlmt.c,v 1.68 2003/01/31 15:26:56 rschmidt Exp $ (C) SysKonnect."; @@ -3504,5 +3502,3 @@ SK_EVPARA Para) /* Event-specific parameter */ #ifdef __cplusplus } #endif /* __cplusplus */ - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/sktimer.c b/drivers/net/sk98lin/sktimer.c index 37cd4c9..8363ce4 100644 --- a/drivers/net/sk98lin/sktimer.c +++ b/drivers/net/sk98lin/sktimer.c @@ -74,8 +74,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* Event queue and dispatcher */ @@ -292,6 +290,4 @@ int Restart) /* Do we need to restart the Hardware timer ? */ } } -#endif /* CONFIG_SK98 */ - /* End of file */ diff --git a/drivers/net/sk98lin/skvpd.c b/drivers/net/sk98lin/skvpd.c index 429da82..7935195 100644 --- a/drivers/net/sk98lin/skvpd.c +++ b/drivers/net/sk98lin/skvpd.c @@ -162,8 +162,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - /* Please refer skvpd.txt for infomation how to include this module */ @@ -1325,5 +1323,3 @@ char *msg) /* error log message */ (void)VpdUpdate(pAC, IoC); } - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/skxmac2.c b/drivers/net/sk98lin/skxmac2.c index 7946000..e0ded42 100644 --- a/drivers/net/sk98lin/skxmac2.c +++ b/drivers/net/sk98lin/skxmac2.c @@ -412,8 +412,6 @@ #include <config.h> -#ifdef CONFIG_SK98 - #include "h/skdrv1st.h" #include "h/skdrv2nd.h" @@ -4391,6 +4389,4 @@ SK_BOOL StartTest) /* flag for start / get result */ return(0); } /* SkGmCableDiagStatus */ -#endif /* CONFIG_SK98 */ - /* End of file */ diff --git a/drivers/net/sk98lin/uboot_drv.c b/drivers/net/sk98lin/uboot_drv.c index d02cd1b..205e7d2 100644 --- a/drivers/net/sk98lin/uboot_drv.c +++ b/drivers/net/sk98lin/uboot_drv.c @@ -25,9 +25,6 @@ #include <common.h> -#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI) && \ - defined(CONFIG_SK98) - #include "h/skdrv1st.h" #include "h/skdrv2nd.h" #include "u-boot_compat.h" @@ -73,7 +70,7 @@ int skge_initialize(bd_t * bis) eth_register(dev[i]); } - return numdev; + return ((numdev > 0) && (numdev <= SKGE_MAX_CARDS) ? 0 : -1); } @@ -138,6 +135,3 @@ static int skge_recv(struct eth_device *dev) return 0; } - - -#endif /* CONFIG_SK98 */ diff --git a/drivers/net/sk98lin/uboot_skb.c b/drivers/net/sk98lin/uboot_skb.c index 3a487a8..487f01e 100644 --- a/drivers/net/sk98lin/uboot_skb.c +++ b/drivers/net/sk98lin/uboot_skb.c @@ -24,9 +24,6 @@ */ #include <config.h> - -#ifdef CONFIG_SK98 - #include <common.h> #include "u-boot_compat.h" @@ -118,5 +115,3 @@ void skb_put(struct sk_buff *skb, unsigned int len) { skb->len+=len; } - -#endif /* CONFIG_SK98 */ diff --git a/net/bootp.c b/net/bootp.c index 5121caa..64552ac 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -969,6 +969,9 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) return; } break; + case BOUND: + /* DHCP client bound to address */ + break; default: puts ("DHCP: INVALID STATE\n"); break; diff --git a/net/bootp.h b/net/bootp.h index 320cc3b..c2f011c 100644 --- a/net/bootp.h +++ b/net/bootp.h @@ -60,7 +60,7 @@ extern ulong BootpID; /* ID of cur BOOTP request */ extern char BootFile[128]; /* Boot file name */ extern int BootpTry; #ifdef CONFIG_BOOTP_RANDOM_DELAY -ulong seed1, seed2; /* seed for random BOOTP delay */ +extern ulong seed1, seed2; /* seed for random BOOTP delay */ #endif @@ -63,15 +63,9 @@ 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 skge_initialize(bd_t*); extern int tsi108_eth_initialize(bd_t*); -extern int uli526x_initialize(bd_t *); extern int npe_initialize(bd_t *); extern int uec_initialize(int); -extern int bfin_EMAC_initialize(bd_t *); -extern int greth_initialize(bd_t *); -extern int mcffec_initialize(bd_t*); -extern int mcdmafec_initialize(bd_t*); extern int at91sam9_eth_initialize(bd_t *); #ifdef CONFIG_API @@ -205,9 +199,6 @@ int eth_initialize(bd_t *bis) #if defined(CONFIG_MPC8220_FEC) mpc8220_fec_initialize(bis); #endif -#if defined(CONFIG_SK98) - skge_initialize(bis); -#endif #if defined(CONFIG_UEC_ETH1) uec_initialize(0); #endif @@ -257,27 +248,12 @@ int eth_initialize(bd_t *bis) #if defined(CONFIG_TSI108_ETH) tsi108_eth_initialize(bis); #endif -#if defined(CONFIG_ULI526X) - uli526x_initialize(bis); -#endif #if defined(CONFIG_RTL8139) rtl8139_initialize(bis); #endif #if defined(CONFIG_RTL8169) rtl8169_initialize(bis); #endif -#if defined(CONFIG_BF537) - bfin_EMAC_initialize(bis); -#endif -#if defined(CONFIG_GRETH) - greth_initialize(bis); -#endif -#if defined(CONFIG_MCFFEC) - mcffec_initialize(bis); -#endif -#if defined(CONFIG_FSLDMAFEC) - mcdmafec_initialize(bis); -#endif #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ defined(CONFIG_AT91SAM9263) at91sam9_eth_initialize(bis); |