]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx
authorWolfgang Denk <wd@denx.de>
Wed, 27 Aug 2008 22:26:52 +0000 (00:26 +0200)
committerWolfgang Denk <wd@denx.de>
Wed, 27 Aug 2008 22:26:52 +0000 (00:26 +0200)
39 files changed:
board/bf537-stamp/bf537-stamp.c
board/freescale/mpc8610hpcd/mpc8610hpcd.c
board/sl8245/sl8245.c
common/cmd_net.c
cpu/leon2/cpu.c
cpu/leon3/cpu.c
cpu/mcf523x/cpu.c
cpu/mcf52x2/cpu.c
cpu/mcf532x/cpu.c
cpu/mcf5445x/cpu.c
cpu/mcf547x_8x/cpu.c
drivers/net/bfin_mac.c
drivers/net/dm9000x.c
drivers/net/dm9000x.h
drivers/net/fsl_mcdmafec.c
drivers/net/greth.c
drivers/net/mcffec.c
drivers/net/sk98lin/Makefile
drivers/net/sk98lin/skaddr.c
drivers/net/sk98lin/skcsum.c
drivers/net/sk98lin/skge.c
drivers/net/sk98lin/skgehwt.c
drivers/net/sk98lin/skgeinit.c
drivers/net/sk98lin/skgemib.c
drivers/net/sk98lin/skgepnmi.c
drivers/net/sk98lin/skgesirq.c
drivers/net/sk98lin/ski2c.c
drivers/net/sk98lin/sklm80.c
drivers/net/sk98lin/skproc.c
drivers/net/sk98lin/skqueue.c
drivers/net/sk98lin/skrlmt.c
drivers/net/sk98lin/sktimer.c
drivers/net/sk98lin/skvpd.c
drivers/net/sk98lin/skxmac2.c
drivers/net/sk98lin/uboot_drv.c
drivers/net/sk98lin/uboot_skb.c
net/bootp.c
net/bootp.h
net/eth.c

index cd7a04dbfa031b23880ef575a05cf465c4c60422..a9b7a68c549914c5840576ca07ffe8ecb0270932 100644 (file)
@@ -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)
index c9dde4d1a39ed4914b268f5faa9e469f62dde637..af79fc2c67a5774d986844214d7336c205ab85b6 100644 (file)
@@ -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;
+}
index 86478871bcbd52e08c89abfa0a960d2d91888205..c853755a1c6c14852952ff57a353991ba94f3da8 100644 (file)
@@ -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;
+}
+
index 79e910c764095f9ec441707940506fa3e7f72a25..af691a474f652fa862b28b08802e5f57c2bdf0a8 100644 (file)
@@ -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
 
index 1c1e24b16cd8c3ec1f92d89d8e00fdfb78d4e82d..5de1c521aae12fe2f59593383e7c3b2e8da2c1f2 100644 (file)
@@ -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
index 306a210048872f3e7923f30a1942981848a2987b..1725fdb090bf2399f5a4811e78275d840e092ae8 100644 (file)
@@ -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
index f0d954b3fbdfdd04ac7983c3bf04e0f623aa614c..8d2152d9c9305c1d485957532551c1a33c6eb49a 100644 (file)
@@ -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
index d5d3d339c51a125391ef7692449b4f68cfd9671c..2af31cbb98d079e3467a68e0472e9ce8ac4c58a8 100644 (file)
@@ -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
+
index 61541ab0f15fbbeaf2abdb22ba674c1ba6566341..20d0d5cf279eb1c96fb6c1e97db601c65dbe3e3d 100644 (file)
@@ -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
index e601b8949b61a8ef012742d51e7b51660a5f2dff..ab342ddeb0459e71cc0ad312823ade3f34295cf4 100644 (file)
@@ -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
index 528bca6bf9deb7071f8b8b661422bb99bf39c556..1ba7aa80a3efee66685f65d4b3b684cdbd02f842 100644 (file)
@@ -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
index fe56949989f2b1729d37855e26b87a602ba922e0..3ee5d9603a55cdd3256e89b631c3fc974eb9f979 100644 (file)
@@ -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,
index e7365fe062b3e14cb1001e3c4efc2f373bc2506b..3a61b802e66c47eab510f9e881068312bc0c9cb1 100644 (file)
@@ -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);
index f47ff8cb344e46cac3e16490d27962fb8281d296..0d123e2e1f1f41b47beebcd5f833f24118939b13 100644 (file)
@@ -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)
 #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
index f2bdba6184c03fd5b59a1e824f87d31dc6fac9f2..59524a5ede91d6548872f29dce2d47901488c02b 100644 (file)
@@ -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;
 }
index 76ece59b36e0f1312895d3d5c36c83d863d13082..90c5338837d0544c67cdcea027f66e1c666b5642 100644 (file)
@@ -657,5 +657,5 @@ int greth_initialize(bd_t * bis)
        /* set and remember MAC address */
        greth_set_hwaddr(greth, addr);
 
-       return 1;
+       return 0;
 }
index 58ed5e32c6b22a49f2252b04074e93475861ac6b..50d6508fb4d0e90e71a289faa27a177e683f2b99 100644 (file)
@@ -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;
 }
index 8b83faeb15e3bb547e9a57e62a2565b296b42741..f1bc4a7d5c68cb773b75d36beac84e5333d75956 100644 (file)
@@ -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)
index ed79c049bb4abb60c8e26c125e0b4ec3201dddbd..8d34f7283440d35e85d36eea2c1757b7e1e8e196 100644 (file)
 
 #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 */
index a5dc572587eb74b56f1ac631e4f89059899aa706..162b67df0e80ed22acfc43e70680e885f6f98b4e 100644 (file)
@@ -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 */
index e1d7e8720cef553506e3314cadcdcbeb66c08501..c815480f8b99a3dbcbf386fe1da6ef8b7be0f036 100644 (file)
 
 #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 */
index f8681a8b0f10408245165363d623ad0c95dffcca..ca08eb1de117e183aac0028f29ec52f83309e473 100644 (file)
@@ -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 */
index e49685bb9c9d09305362b1801c9f172f18675608..ab740c7fcd6ed610dd6f53bb9d8de5a24177051f 100644 (file)
 
 #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 */
index 4a9e9e6af1af53e322de7dbf9a03fcf4f3740113..7f62e9cf39245fa2325bc7c3a5a1c42e47ac0bfc 100644 (file)
@@ -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 */
index 16fa3523abf8e2964650c9ad42fc7c71bbfb3900..d0e33cbd6ad48055ce40dd7472eefb52a3963a27 100644 (file)
 
 #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 */
index c9763e740182f09a54b19580e4e308a639f6d5b8..106fe48c0d2a61b386a11341a8a1f774d8359c0b 100644 (file)
 
 #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 */
index 0c5d9b407ed7354792768d16e3a5ba0aeecce97a..894cc67cbdbf38c46bef3c1e090b0c80be583b50 100644 (file)
 
 #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 */
index 0229877b5912079de40554e042453246ce656b4c..9f455f79bc47405ebd0fc396e39d8fc928d60a93 100644 (file)
 
 #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 */
index 94a6a564ac79c66785c1167a4cce28eeb3819f3a..9325ee7e5524fa304f242ba468fc5317391cfff6 100644 (file)
@@ -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 */
index c49baed4f04a1f8088ec9307766e4f8b5c54958a..de7441e3b82e97920bd5c7b609ebcb7edd5cc915 100644 (file)
@@ -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 */
index 14a6f40d8b83cfe5850a9458b6775debd0c77ce3..2e7924d011a32e1c5269b34f3cd64f33fd2e37ef 100644 (file)
 
 #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 */
index 37cd4c9fe118158e1337dd8096e2a08410f331e3..8363ce46584bebd5759aa3fd8c5f31fa1c0346f9 100644 (file)
@@ -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 */
index 429da8256ef08f7c37f98b27facf937d084e0bcb..7935195fa98bda0d5aee74815af088af60693b0b 100644 (file)
 
 #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 */
index 794600054a13d5873a3451fc492b8c31da24cb2e..e0ded42bae5d4c84cba809603d5d1adbd23cf733 100644 (file)
 
 #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 */
index d02cd1be2427adab1e229e166fbfef5697ff0bc3..205e7d2e9903de76c2e3906929fea89835fd091d 100644 (file)
@@ -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 */
index 3a487a8e3d6c0ef639458cb4fd4341245b8e50df..487f01ed37d109f1834a55bb81065c0186e81b83 100644 (file)
@@ -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 */
index 5121caa51baf13253905e90ed99e56102d7b01a0..64552ac2a64ce125a62e8d98a33c545a9ce85c76 100644 (file)
@@ -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;
index 320cc3bd3025f12897b91b3016d57321d2378998..c2f011c8c69b33900cc39fda0ca08688b4806566 100644 (file)
@@ -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
 
 
index 8e83b66c0a619bf316d6607a1f3ac833ef4e0fb2..4e508a0f91b72ffee374c4326f843a1ce993f468 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -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);