Program EPLD to force full duplex mode for PHY.
[platform/kernel/u-boot.git] / board / amcc / luan / luan.c
index 7b16f8a..1bd7efa 100644 (file)
@@ -39,8 +39,6 @@ extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
  ************************************************************************/
 int board_early_init_f(void)
 {
-       volatile epld_t *x = (epld_t *) CFG_EPLD_BASE;
-
        mtebc( pb0ap,  0x03800000 );    /* set chip selects */
        mtebc( pb0cr,  0xffc58000 );    /* ebc0_b0cr, 4MB at 0xffc00000 CS0 */
        mtebc( pb1ap,  0x03800000 );
@@ -66,8 +64,6 @@ int board_early_init_f(void)
        mtdcr( uic0sr, 0x00000000 );    /* clear all interrupts */
        mtdcr( uic0sr, 0xffffffff );
 
-       x->ethuart &= ~EPLD2_RESET_ETH_N; /* put Ethernet+PHY in reset */
-
        return  0;
 }
 
@@ -79,7 +75,18 @@ int board_early_init_f(void)
 int misc_init_r(void)
 {
        volatile epld_t *x = (epld_t *) CFG_EPLD_BASE;
-       x->ethuart |= EPLD2_RESET_ETH_N; /* take Ethernet+PHY out of reset */
+
+       /* set modes of operation */
+       x->ethuart |= EPLD2_ETH_MODE_10 | EPLD2_ETH_MODE_100 |
+               EPLD2_ETH_MODE_1000 | EPLD2_ETH_DUPLEX_MODE;
+       /* clear ETHERNET_AUTO_NEGO bit to turn on autonegotiation */
+       x->ethuart &= ~EPLD2_ETH_AUTO_NEGO;
+       
+       /* put Ethernet+PHY in reset */
+       x->ethuart &= ~EPLD2_RESET_ETH_N;
+       udelay(10000);
+       /* take Ethernet+PHY out of reset */
+       x->ethuart |= EPLD2_RESET_ETH_N;
 
        return  0;
 }