|
|
|
@ -379,13 +379,14 @@ static int fec_set_hwaddr(struct eth_device *dev) |
|
|
|
|
static int fec_open(struct eth_device *edev) |
|
|
|
|
{ |
|
|
|
|
struct fec_priv *fec = (struct fec_priv *)edev->priv; |
|
|
|
|
int speed; |
|
|
|
|
|
|
|
|
|
debug("fec_open: fec_open(dev)\n"); |
|
|
|
|
/* full-duplex, heartbeat disabled */ |
|
|
|
|
writel(1 << 2, &fec->eth->x_cntrl); |
|
|
|
|
fec->rbd_index = 0; |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_MX6Q) |
|
|
|
|
#ifdef FEC_QUIRK_ENET_MAC |
|
|
|
|
/* Enable ENET HW endian SWAP */ |
|
|
|
|
writel(readl(&fec->eth->ecntrl) | FEC_ECNTRL_DBSWAP, |
|
|
|
|
&fec->eth->ecntrl); |
|
|
|
@ -428,9 +429,25 @@ static int fec_open(struct eth_device *edev) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
miiphy_wait_aneg(edev); |
|
|
|
|
miiphy_speed(edev->name, fec->phy_id); |
|
|
|
|
speed = miiphy_speed(edev->name, fec->phy_id); |
|
|
|
|
miiphy_duplex(edev->name, fec->phy_id); |
|
|
|
|
|
|
|
|
|
#ifdef FEC_QUIRK_ENET_MAC |
|
|
|
|
{ |
|
|
|
|
u32 ecr = readl(&fec->eth->ecntrl) & ~FEC_ECNTRL_SPEED; |
|
|
|
|
u32 rcr = (readl(&fec->eth->r_cntrl) & |
|
|
|
|
~(FEC_RCNTRL_RMII | FEC_RCNTRL_RMII_10T)) | |
|
|
|
|
FEC_RCNTRL_RGMII | FEC_RCNTRL_MII_MODE; |
|
|
|
|
if (speed == _1000BASET) |
|
|
|
|
ecr |= FEC_ECNTRL_SPEED; |
|
|
|
|
else if (speed != _100BASET) |
|
|
|
|
rcr |= FEC_RCNTRL_RMII_10T; |
|
|
|
|
writel(ecr, &fec->eth->ecntrl); |
|
|
|
|
writel(rcr, &fec->eth->r_cntrl); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
debug("%s:Speed=%i\n", __func__, speed); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Enable SmartDMA receive task |
|
|
|
|
*/ |
|
|
|
|