diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-04-24 10:38:23 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-04-24 10:38:23 +0200 |
commit | ba361ee78f915aa9e26acbbdf6f57712c69506d2 (patch) | |
tree | 60fb18386ba11f4b8653133abbf630e98aa2f8f6 /drivers/net | |
parent | b108afa01ac0ceb72db750fefd32a67c0247c9ca (diff) | |
parent | fd9c7d412ee7ff7b351be35afa01ccfc48404080 (diff) | |
download | barebox-ba361ee78f915aa9e26acbbdf6f57712c69506d2.tar.gz barebox-ba361ee78f915aa9e26acbbdf6f57712c69506d2.tar.xz |
Merge branch 'pu/mx6-v2' into next
Conflicts:
arch/arm/Makefile
arch/arm/mach-imx/Kconfig
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/fec_imx.c | 25 | ||||
-rw-r--r-- | drivers/net/miidev.c | 20 |
2 files changed, 42 insertions, 3 deletions
diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c index 08cd761438..599a9b4099 100644 --- a/drivers/net/fec_imx.c +++ b/drivers/net/fec_imx.c @@ -274,7 +274,7 @@ static int fec_set_hwaddr(struct eth_device *dev, unsigned char *mac) static int fec_init(struct eth_device *dev) { struct fec_priv *fec = (struct fec_priv *)dev->priv; - u32 rcntl; + u32 rcntl, xwmrk; /* * Clear FEC-Lite interrupt event register(IEVENT) @@ -317,13 +317,25 @@ static int fec_init(struct eth_device *dev) writel(FEC_MIIGSK_ENR_EN, fec->regs + FEC_MIIGSK_ENR); } } + + if (fec->xcv_type == RGMII) + rcntl |= 1 << 6; + writel(rcntl, fec->regs + FEC_R_CNTRL); /* * Set Opcode/Pause Duration Register */ writel(0x00010020, fec->regs + FEC_OP_PAUSE); - writel(0x2, fec->regs + FEC_X_WMRK); + + xwmrk = 0x2; + + /* set ENET tx at store and forward mode */ + if (cpu_is_mx6()) + xwmrk |= 1 << 8; + + writel(xwmrk, fec->regs + FEC_X_WMRK); + /* * Set multicast address filter */ @@ -349,6 +361,7 @@ static int fec_open(struct eth_device *edev) { struct fec_priv *fec = (struct fec_priv *)edev->priv; int ret; + u32 ecr; /* * Initialize RxBD/TxBD rings @@ -363,7 +376,13 @@ static int fec_open(struct eth_device *edev) /* * Enable FEC-Lite controller */ - writel(FEC_ECNTRL_ETHER_EN, fec->regs + FEC_ECNTRL); + ecr = FEC_ECNTRL_ETHER_EN; + + /* Enable Swap to support little-endian device */ + if (cpu_is_mx6()) + ecr |= 0x100; + + writel(ecr, fec->regs + FEC_ECNTRL); /* * Enable SmartDMA receive task */ diff --git a/drivers/net/miidev.c b/drivers/net/miidev.c index 0db738de5f..f47fc9e65b 100644 --- a/drivers/net/miidev.c +++ b/drivers/net/miidev.c @@ -28,6 +28,8 @@ #include <net.h> #include <malloc.h> +static LIST_HEAD(miidev_list); + int miidev_restart_aneg(struct mii_device *mdev) { int status, timeout; @@ -226,6 +228,7 @@ static int miidev_probe(struct device_d *dev) mdev->cdev.priv = mdev; mdev->cdev.dev = dev; devfs_create(&mdev->cdev); + list_add_tail(&mdev->list, &miidev_list); return 0; } @@ -233,10 +236,27 @@ static void miidev_remove(struct device_d *dev) { struct mii_device *mdev = dev->priv; + list_del(&mdev->list); + free(mdev->cdev.name); devfs_remove(&mdev->cdev); } +struct mii_device *mii_open(const char *name) +{ + struct mii_device *mdev; + + list_for_each_entry(mdev, &miidev_list, list) { + if (!strcmp(name, mdev->cdev.name)) + return mdev; + } + return NULL; +} + +void mii_close(struct mii_device *mdev) +{ +} + static struct driver_d miidev_drv = { .name = "miidev", .probe = miidev_probe, |