Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Sep 1997 21:15:28 +0200 (SAT)
From:      John Hay <jhay@mikom.csir.co.za>
To:        dg@root.com
Cc:        freebsd-current@FreeBSD.ORG
Subject:   Re: ed0 not found on reboots
Message-ID:  <199709281915.VAA02446@zibbi.mikom.csir.co.za>
In-Reply-To: <199709280959.CAA19719@implode.root.com> from David Greenman at "Sep 28, 97 02:59:11 am"

next in thread | previous in thread | raw e-mail | index | archive | help
> >I have updated my -current box for the first time in about 6 weeks and
> >found that with the latest  kernel my ed0 device is only found atfter
> >a power up or physical reset. After reboot or shutdown -r now it isn't
> >found. Has anyone seen something like this?
> >
> >My machine is a 90MHz Pentium and the ed0 device (when found) probes
> >like this:
> >=====
> >ed0 at 0x280-0x29f irq 5 maddr 0xd8000 msize 16384 on isa
> >ed0: address 00:00:c0:70:bf:94, type SMC8216/SMC8216C (16 bit) 
> >=====
> 
>    I had a report of an NE2000 clone not passing the station address checksum
> after a warmboot, but this is the first problem I've heard with the SMC
> Ultra. The only significant change that's been made is the 0WS flag is turned
> on, but this should only affect accesses to the shared memory. You might want
> to add some printf's to the probe code to find out which test is failing.
> 

It fails in ed_probe_WD80x3() when it reads the 8 bytes out of the PROM.
The bytes read are totally bogus. I tried to clear the ED_WD_LAAR register
just before it reads the PROM, but that didn't help. What did fix it was to
switch off ED_WD790_GCR_ZWSEN just before reading the PROM. I attach the
patch that made it work, although it is probably too invasive at such an
early stage of the probe. Maybe it would be better to switch it on just
before memory access and off after it like the 16bit memory access?

John
-- 
John Hay -- John.Hay@mikom.csir.co.za


--- if_ed.c.org	Thu Sep 25 21:35:19 1997
+++ if_ed.c	Sun Sep 28 20:42:52 1997
@@ -469,6 +469,8 @@
 	 * this, though: some clone WD boards don't pass the checksum test.
 	 * Danpex boards for one.
 	 */
+	outb(sc->asic_addr + ED_WD790_GCR, inb(sc->asic_addr +
+	    ED_WD790_GCR) & ~ED_WD790_GCR_ZWSEN);
 	for (sum = 0, i = 0; i < 8; ++i)
 		sum += inb(sc->asic_addr + ED_WD_PROM + i);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709281915.VAA02446>