| From 9e555930bd873d238f5f7b9d76d3bf31e6e3ce93 Mon Sep 17 00:00:00 2001 |
| From: Ayaz Abdulla <aabdulla@nvidia.com> |
| Date: Wed, 21 Nov 2007 15:02:58 -0800 |
| Subject: forcedeth boot delay fix |
| |
| From: Ayaz Abdulla <aabdulla@nvidia.com> |
| |
| patch 9e555930bd873d238f5f7b9d76d3bf31e6e3ce93 in mainline. |
| |
| Fix a long boot delay in the forcedeth driver. During initialization, the |
| timeout for the handshake between mgmt unit and driver can be very long. |
| The patch reduces the timeout by eliminating a extra loop around the |
| timeout logic. |
| |
| Addresses http://bugzilla.kernel.org/show_bug.cgi?id=9308 |
| |
| Signed-off-by: Ayaz Abdulla <aabdulla@nvidia.com> |
| Cc: Alex Howells <astinus@gentoo.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Jeff Garzik <jeff@garzik.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/forcedeth.c | 22 +++++++++------------- |
| 1 file changed, 9 insertions(+), 13 deletions(-) |
| |
| --- a/drivers/net/forcedeth.c |
| +++ b/drivers/net/forcedeth.c |
| @@ -5280,19 +5280,15 @@ static int __devinit nv_probe(struct pci |
| if (readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_SYNC_PHY_INIT) { |
| np->mac_in_use = readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_MGMT_ST; |
| dprintk(KERN_INFO "%s: mgmt unit is running. mac in use %x.\n", pci_name(pci_dev), np->mac_in_use); |
| - for (i = 0; i < 5000; i++) { |
| - msleep(1); |
| - if (nv_mgmt_acquire_sema(dev)) { |
| - /* management unit setup the phy already? */ |
| - if ((readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_SYNC_MASK) == |
| - NVREG_XMITCTL_SYNC_PHY_INIT) { |
| - /* phy is inited by mgmt unit */ |
| - phyinitialized = 1; |
| - dprintk(KERN_INFO "%s: Phy already initialized by mgmt unit.\n", pci_name(pci_dev)); |
| - } else { |
| - /* we need to init the phy */ |
| - } |
| - break; |
| + if (nv_mgmt_acquire_sema(dev)) { |
| + /* management unit setup the phy already? */ |
| + if ((readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_SYNC_MASK) == |
| + NVREG_XMITCTL_SYNC_PHY_INIT) { |
| + /* phy is inited by mgmt unit */ |
| + phyinitialized = 1; |
| + dprintk(KERN_INFO "%s: Phy already initialized by mgmt unit.\n", pci_name(pci_dev)); |
| + } else { |
| + /* we need to init the phy */ |
| } |
| } |
| } |