diff options
Diffstat (limited to 'drivers/net/fec.c')
-rw-r--r-- | drivers/net/fec.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 16a1d58419d9..9a8743daa3e5 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c | |||
@@ -1658,6 +1658,7 @@ static int fec_enet_init(struct net_device *dev, int index) | |||
1658 | { | 1658 | { |
1659 | struct fec_enet_private *fep = netdev_priv(dev); | 1659 | struct fec_enet_private *fep = netdev_priv(dev); |
1660 | struct bufdesc *cbd_base; | 1660 | struct bufdesc *cbd_base; |
1661 | struct bufdesc *bdp; | ||
1661 | int i; | 1662 | int i; |
1662 | 1663 | ||
1663 | /* Allocate memory for buffer descriptors. */ | 1664 | /* Allocate memory for buffer descriptors. */ |
@@ -1710,6 +1711,34 @@ static int fec_enet_init(struct net_device *dev, int index) | |||
1710 | /* Set MII speed to 2.5 MHz */ | 1711 | /* Set MII speed to 2.5 MHz */ |
1711 | fep->phy_speed = ((((clk_get_rate(fep->clk) / 2 + 4999999) | 1712 | fep->phy_speed = ((((clk_get_rate(fep->clk) / 2 + 4999999) |
1712 | / 2500000) / 2) & 0x3F) << 1; | 1713 | / 2500000) / 2) & 0x3F) << 1; |
1714 | |||
1715 | /* Initialize the receive buffer descriptors. */ | ||
1716 | bdp = fep->rx_bd_base; | ||
1717 | for (i = 0; i < RX_RING_SIZE; i++) { | ||
1718 | |||
1719 | /* Initialize the BD for every fragment in the page. */ | ||
1720 | bdp->cbd_sc = 0; | ||
1721 | bdp++; | ||
1722 | } | ||
1723 | |||
1724 | /* Set the last buffer to wrap */ | ||
1725 | bdp--; | ||
1726 | bdp->cbd_sc |= BD_SC_WRAP; | ||
1727 | |||
1728 | /* ...and the same for transmit */ | ||
1729 | bdp = fep->tx_bd_base; | ||
1730 | for (i = 0; i < TX_RING_SIZE; i++) { | ||
1731 | |||
1732 | /* Initialize the BD for every fragment in the page. */ | ||
1733 | bdp->cbd_sc = 0; | ||
1734 | bdp->cbd_bufaddr = 0; | ||
1735 | bdp++; | ||
1736 | } | ||
1737 | |||
1738 | /* Set the last buffer to wrap */ | ||
1739 | bdp--; | ||
1740 | bdp->cbd_sc |= BD_SC_WRAP; | ||
1741 | |||
1713 | fec_restart(dev, 0); | 1742 | fec_restart(dev, 0); |
1714 | 1743 | ||
1715 | /* Queue up command to detect the PHY and initialize the | 1744 | /* Queue up command to detect the PHY and initialize the |
@@ -1730,7 +1759,6 @@ static void | |||
1730 | fec_restart(struct net_device *dev, int duplex) | 1759 | fec_restart(struct net_device *dev, int duplex) |
1731 | { | 1760 | { |
1732 | struct fec_enet_private *fep = netdev_priv(dev); | 1761 | struct fec_enet_private *fep = netdev_priv(dev); |
1733 | struct bufdesc *bdp; | ||
1734 | int i; | 1762 | int i; |
1735 | 1763 | ||
1736 | /* Whack a reset. We should wait for this. */ | 1764 | /* Whack a reset. We should wait for this. */ |
@@ -1768,33 +1796,6 @@ fec_restart(struct net_device *dev, int duplex) | |||
1768 | } | 1796 | } |
1769 | } | 1797 | } |
1770 | 1798 | ||
1771 | /* Initialize the receive buffer descriptors. */ | ||
1772 | bdp = fep->rx_bd_base; | ||
1773 | for (i = 0; i < RX_RING_SIZE; i++) { | ||
1774 | |||
1775 | /* Initialize the BD for every fragment in the page. */ | ||
1776 | bdp->cbd_sc = BD_ENET_RX_EMPTY; | ||
1777 | bdp++; | ||
1778 | } | ||
1779 | |||
1780 | /* Set the last buffer to wrap */ | ||
1781 | bdp--; | ||
1782 | bdp->cbd_sc |= BD_SC_WRAP; | ||
1783 | |||
1784 | /* ...and the same for transmit */ | ||
1785 | bdp = fep->tx_bd_base; | ||
1786 | for (i = 0; i < TX_RING_SIZE; i++) { | ||
1787 | |||
1788 | /* Initialize the BD for every fragment in the page. */ | ||
1789 | bdp->cbd_sc = 0; | ||
1790 | bdp->cbd_bufaddr = 0; | ||
1791 | bdp++; | ||
1792 | } | ||
1793 | |||
1794 | /* Set the last buffer to wrap */ | ||
1795 | bdp--; | ||
1796 | bdp->cbd_sc |= BD_SC_WRAP; | ||
1797 | |||
1798 | /* Enable MII mode */ | 1799 | /* Enable MII mode */ |
1799 | if (duplex) { | 1800 | if (duplex) { |
1800 | /* MII enable / FD enable */ | 1801 | /* MII enable / FD enable */ |