ni52: clean up check586()

take iscp-based testing into helper, kill the loop, stop
wanking with reassignments of priv->iscp

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
diff --git a/drivers/net/ni52.c b/drivers/net/ni52.c
index 3b1c4af..fa611f6 100644
--- a/drivers/net/ni52.c
+++ b/drivers/net/ni52.c
@@ -294,21 +294,38 @@
 	return 0; /* most done by init */
 }
 
+static int check_iscp(struct net_device *dev, void __iomem *addr)
+{
+	struct iscp_struct __iomem *iscp = addr;
+	struct priv *p = dev->priv;
+	memset_io(iscp, 0, sizeof(struct iscp_struct));
+
+	writel(make24(iscp), &p->scp->iscp);
+	writeb(1, &iscp->busy);
+
+	ni_reset586();
+	ni_attn586();
+	mdelay(32);	/* wait a while... */
+	/* i82586 clears 'busy' after successful init */
+	if (readb(&iscp->busy))
+		return 0;
+	return 1;
+}
+
 /**********************************************
  * Check to see if there's an 82586 out there.
  */
 static int check586(struct net_device *dev, unsigned size)
 {
-	unsigned long where = dev->mem_start;
 	struct priv *p = dev->priv;
-	char __iomem *iscp_addrs[2];
 	int i;
 
-	p->mapped = (char __iomem *)isa_bus_to_virt(where);
+	p->mapped = (char __iomem *)isa_bus_to_virt(dev->mem_start);
 	p->base = p->mapped + size - 0x01000000;
 	p->memtop = p->mapped + size;
 	p->scp = (struct scp_struct __iomem *)(p->base + SCP_DEFAULT_ADDRESS);
 	p->scb	= (struct scb_struct __iomem *)	p->mapped;
+	p->iscp = (struct iscp_struct __iomem *)p->scp - 1;
 	memset_io(p->scp, 0, sizeof(struct scp_struct));
 	for (i = 0; i < sizeof(struct scp_struct); i++)
 		/* memory was writeable? */
@@ -318,26 +335,10 @@
 	if (readb(&p->scp->sysbus) != SYSBUSVAL)
 		return 0;
 
-	iscp_addrs[0] = p->mapped;
-	iscp_addrs[1] = (char __iomem *)p->scp - sizeof(struct iscp_struct);
-
-	for (i = 0; i < 2; i++) {
-		p->iscp = (struct iscp_struct __iomem *) iscp_addrs[i];
-		memset_io(p->iscp, 0, sizeof(struct iscp_struct));
-
-		writel(make24(p->iscp), &p->scp->iscp);
-		writeb(1, &p->iscp->busy);
-
-		ni_reset586();
-		ni_attn586();
-		mdelay(32);	/* wait a while... */
-		/* i82586 clears 'busy' after successful init */
-		if (readb(&p->iscp->busy))
-			return 0;
-	}
-
-	p->iscp = (struct iscp_struct __iomem *)
-			((char __iomem *)p->scp - sizeof(struct iscp_struct));
+	if (!check_iscp(dev, p->mapped))
+		return 0;
+	if (!check_iscp(dev, p->iscp))
+		return 0;
 	return 1;
 }