mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 07:01:57 +00:00
forcedeth: preserve registers
Various registers need to be preserved before resetting the device. Signed-off-by: Ayaz Abdulla <aabdulla@nvidia.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
eb79842838
commit
4e84f9b104
@ -1435,16 +1435,30 @@ static void nv_mac_reset(struct net_device *dev)
|
||||
{
|
||||
struct fe_priv *np = netdev_priv(dev);
|
||||
u8 __iomem *base = get_hwbase(dev);
|
||||
u32 temp1, temp2, temp3;
|
||||
|
||||
dprintk(KERN_DEBUG "%s: nv_mac_reset\n", dev->name);
|
||||
|
||||
writel(NVREG_TXRXCTL_BIT2 | NVREG_TXRXCTL_RESET | np->txrxctl_bits, base + NvRegTxRxControl);
|
||||
pci_push(base);
|
||||
|
||||
/* save registers since they will be cleared on reset */
|
||||
temp1 = readl(base + NvRegMacAddrA);
|
||||
temp2 = readl(base + NvRegMacAddrB);
|
||||
temp3 = readl(base + NvRegTransmitPoll);
|
||||
|
||||
writel(NVREG_MAC_RESET_ASSERT, base + NvRegMacReset);
|
||||
pci_push(base);
|
||||
udelay(NV_MAC_RESET_DELAY);
|
||||
writel(0, base + NvRegMacReset);
|
||||
pci_push(base);
|
||||
udelay(NV_MAC_RESET_DELAY);
|
||||
|
||||
/* restore saved registers */
|
||||
writel(temp1, base + NvRegMacAddrA);
|
||||
writel(temp2, base + NvRegMacAddrB);
|
||||
writel(temp3, base + NvRegTransmitPoll);
|
||||
|
||||
writel(NVREG_TXRXCTL_BIT2 | np->txrxctl_bits, base + NvRegTxRxControl);
|
||||
pci_push(base);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user