summaryrefslogtreecommitdiff
path: root/drivers/net/mcffec.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/mcffec.c')
-rw-r--r--drivers/net/mcffec.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/net/mcffec.c b/drivers/net/mcffec.c
index a08ff278bf..1f59794102 100644
--- a/drivers/net/mcffec.c
+++ b/drivers/net/mcffec.c
@@ -33,7 +33,11 @@
#include <miiphy.h>
#include <asm/fec.h>
+#ifdef CONFIG_COLDFIRE
#include <asm/immap.h>
+#endif
+#ifdef CONFIG_VYBRID
+#endif
#undef ET_DEBUG
#undef MII_DEBUG
@@ -116,7 +120,7 @@ void setFecDuplexSpeed(volatile fec_t * fecp, bd_t * bd, int dup_spd)
}
if ((dup_spd & 0xFFFF) == _100BASET) {
-#ifdef CONFIG_MCF5445x
+#if defined(CONFIG_MCF5445x) || defined(CONFIG_VYBRID)
fecp->rcr &= ~0x200; /* disabled 10T base */
#endif
#ifdef MII_DEBUG
@@ -124,7 +128,7 @@ void setFecDuplexSpeed(volatile fec_t * fecp, bd_t * bd, int dup_spd)
#endif
bd->bi_ethspeed = 100;
} else {
-#ifdef CONFIG_MCF5445x
+#if defined(CONFIG_MCF5445x) || defined(CONFIG_VYBRID)
fecp->rcr |= 0x200; /* enabled 10T base */
#endif
#ifdef MII_DEBUG
@@ -182,7 +186,7 @@ int fec_send(struct eth_device *dev, volatile void *packet, int length)
j = 0;
while ((info->txbd[info->txIdx].cbd_sc & BD_ENET_TX_READY) &&
(j < MCFFEC_TOUT_LOOP)) {
- udelay(1);
+ udelay(10);
j++;
}
if (j >= MCFFEC_TOUT_LOOP) {
@@ -515,7 +519,12 @@ int fec_init(struct eth_device *dev, bd_t * bd)
fecp->etdsr = (unsigned int)(&info->txbd[0]);
/* Now enable the transmit and receive processing */
+#ifdef CONFIG_VYBRID
+ /*Big Endian*/
+ fecp->ecr |= FEC_ECR_ETHER_EN | 0x100;
+#else
fecp->ecr |= FEC_ECR_ETHER_EN;
+#endif
/* And last, try to fill Rx Buffer Descriptors */
fecp->rdar = 0x01000000; /* Descriptor polling active */
@@ -621,6 +630,7 @@ int mcffec_initialize(bd_t * bis)
/* default speed */
bis->bi_ethspeed = 10;
-
+ /*Ugly workaround for FEC to work in kernel, TODO Jason*/
+ mii_init();
return 0;
}