davinci_emac: add support for version 1
This commit is contained in:
parent
1b9e345d6e
commit
e90c4f9435
|
@ -60,7 +60,7 @@ config DRIVER_NET_CPSW
|
|||
|
||||
config DRIVER_NET_DAVINCI_EMAC
|
||||
bool "TI Davinci/OMAP EMAC ethernet driver"
|
||||
depends on ARCH_OMAP3
|
||||
depends on ARCH_OMAP3 || ARCH_DAVINCI
|
||||
select PHYLIB
|
||||
|
||||
config DRIVER_NET_DESIGNWARE
|
||||
|
|
|
@ -39,6 +39,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
//#define DEBUG
|
||||
|
||||
#include <common.h>
|
||||
#include <dma.h>
|
||||
#include <io.h>
|
||||
|
@ -48,7 +50,8 @@
|
|||
#include <init.h>
|
||||
#include <asm/system.h>
|
||||
#include <linux/phy.h>
|
||||
#include <mach/emac_defs.h>
|
||||
#include <linux/clk.h>
|
||||
//#include <mach/emac_defs.h>
|
||||
#include <net/davinci_emac.h>
|
||||
#include "davinci_emac.h"
|
||||
|
||||
|
@ -74,6 +77,7 @@ struct davinci_emac_priv {
|
|||
unsigned char *emac_rx_buffers; /* [EMAC_MAX_RX_BUFFERS * (EMAC_MAX_ETHERNET_PKT_SIZE + EMAC_PKT_ALIGN)] */
|
||||
|
||||
/* PHY-specific information */
|
||||
uint32_t mdio_clkdiv;
|
||||
phy_interface_t interface;
|
||||
uint8_t phy_addr;
|
||||
uint32_t phy_flags;
|
||||
|
@ -105,13 +109,9 @@ static inline void __iomem *HW_TO_BD(uint32_t x)
|
|||
|
||||
static void davinci_eth_mdio_enable(struct davinci_emac_priv *priv)
|
||||
{
|
||||
uint32_t clkdiv;
|
||||
|
||||
clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
|
||||
|
||||
dev_dbg(priv->dev, "mdio_enable + 0x%08x\n",
|
||||
readl(priv->adap_mdio + EMAC_MDIO_CONTROL));
|
||||
writel((clkdiv & 0xff) |
|
||||
writel((priv->mdio_clkdiv & 0xff) |
|
||||
MDIO_CONTROL_ENABLE |
|
||||
MDIO_CONTROL_FAULT |
|
||||
MDIO_CONTROL_FAULT_ENABLE,
|
||||
|
@ -197,9 +197,10 @@ static int davinci_emac_init(struct eth_device *edev)
|
|||
static int davinci_emac_open(struct eth_device *edev)
|
||||
{
|
||||
struct davinci_emac_priv *priv = edev->priv;
|
||||
uint32_t clkdiv, cnt;
|
||||
uint32_t cnt;
|
||||
void __iomem *rx_desc;
|
||||
unsigned long mac_hi, mac_lo;
|
||||
struct clk *clk;
|
||||
int ret;
|
||||
|
||||
dev_dbg(priv->dev, "+ emac_open\n");
|
||||
|
@ -212,8 +213,12 @@ static int davinci_emac_open(struct eth_device *edev)
|
|||
/* Reset EMAC module and disable interrupts in wrapper */
|
||||
writel(1, priv->adap_emac + EMAC_SOFTRESET);
|
||||
while (readl(priv->adap_emac + EMAC_SOFTRESET) != 0);
|
||||
dev_dbg(priv->dev, "emac reset done\n");
|
||||
|
||||
#if 0
|
||||
writel(1, priv->adap_ewrap + EMAC_EWRAP_SOFTRESET);
|
||||
while (readl(priv->adap_ewrap + EMAC_EWRAP_SOFTRESET) != 0);
|
||||
dev_dbg(priv->dev, "emac wrap reset done\n");
|
||||
|
||||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C0RXEN);
|
||||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C1RXEN);
|
||||
|
@ -224,6 +229,7 @@ static int davinci_emac_open(struct eth_device *edev)
|
|||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C0MISCEN);
|
||||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C1MISCEN);
|
||||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C2MISCEN);
|
||||
#endif
|
||||
|
||||
rx_desc = priv->emac_rx_desc;
|
||||
|
||||
|
@ -300,8 +306,10 @@ static int davinci_emac_open(struct eth_device *edev)
|
|||
priv->adap_emac + EMAC_MACCONTROL);
|
||||
|
||||
/* Init MDIO & get link state */
|
||||
clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
|
||||
writel((clkdiv & 0xff) | MDIO_CONTROL_ENABLE | MDIO_CONTROL_FAULT,
|
||||
clk = clk_get(priv->dev, 0);
|
||||
clk_enable(clk);
|
||||
priv->mdio_clkdiv = (1000000 / clk_get_rate(clk)) - 1;
|
||||
writel((priv->mdio_clkdiv & 0xff) | MDIO_CONTROL_ENABLE | MDIO_CONTROL_FAULT,
|
||||
priv->adap_mdio + EMAC_MDIO_CONTROL);
|
||||
|
||||
/* Start receive process */
|
||||
|
@ -371,6 +379,7 @@ static void davinci_emac_halt(struct eth_device *edev)
|
|||
|
||||
/* Reset EMAC module and disable interrupts in wrapper */
|
||||
writel(1, priv->adap_emac + EMAC_SOFTRESET);
|
||||
#if 0
|
||||
writel(1, priv->adap_ewrap + EMAC_EWRAP_SOFTRESET);
|
||||
|
||||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C0RXEN);
|
||||
|
@ -382,7 +391,7 @@ static void davinci_emac_halt(struct eth_device *edev)
|
|||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C0MISCEN);
|
||||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C1MISCEN);
|
||||
writel(0, priv->adap_ewrap + EMAC_EWRAP_C2MISCEN);
|
||||
|
||||
#endif
|
||||
dev_dbg(priv->dev, "- emac_halt\n");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue