mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
[PATCH] sundance: correct initial and close hardware step.
Correct initial and close hardware step. In some embedded system down and up IP100A will cause DMA crash. We add some for safe down and up IP100A. Signed-off-by: Jesse Huang <jesse@icplus.com.tw> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
6b655529c3
commit
acd70c2bfd
1 changed files with 8 additions and 0 deletions
|
@ -788,6 +788,7 @@ static int netdev_open(struct net_device *dev)
|
|||
{
|
||||
struct netdev_private *np = netdev_priv(dev);
|
||||
void __iomem *ioaddr = np->base;
|
||||
unsigned long flags;
|
||||
int i;
|
||||
|
||||
/* Do we need to reset the chip??? */
|
||||
|
@ -832,6 +833,10 @@ static int netdev_open(struct net_device *dev)
|
|||
iowrite8(0x01, ioaddr + DebugCtrl1);
|
||||
netif_start_queue(dev);
|
||||
|
||||
spin_lock_irqsave(&np->lock, flags);
|
||||
reset_tx(dev);
|
||||
spin_unlock_irqrestore(&np->lock, flags);
|
||||
|
||||
iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1);
|
||||
|
||||
if (netif_msg_ifup(np))
|
||||
|
@ -1651,6 +1656,9 @@ static int netdev_close(struct net_device *dev)
|
|||
/* Disable interrupts by clearing the interrupt mask. */
|
||||
iowrite16(0x0000, ioaddr + IntrEnable);
|
||||
|
||||
/* Disable Rx and Tx DMA for safely release resource */
|
||||
iowrite32(0x500, ioaddr + DMACtrl);
|
||||
|
||||
/* Stop the chip's Tx and Rx processes. */
|
||||
iowrite16(TxDisable | RxDisable | StatsDisable, ioaddr + MACCtrl1);
|
||||
|
||||
|
|
Loading…
Reference in a new issue