Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Dec 2006 11:10:34 -0700
From:      Scott Long <scottl@samsco.org>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        cvs-src@FreeBSD.org, "Bjoern A. Zeeb" <bz@FreeBSD.org>, Scott Long <scottl@FreeBSD.org>, cvs-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/bge if_bge.c if_bgereg.h
Message-ID:  <4580421A.7020905@samsco.org>
In-Reply-To: <20061214025300.A1220@besplex.bde.org>
References:  <200612120511.kBC5BCvi018697@repoman.freebsd.org> <20061212231257.M91892@maildrop.int.zabbadoz.net> <20061213113025.O833@delplex.bde.org> <457F820B.6040104@samsco.org> <20061213125524.G91892@maildrop.int.zabbadoz.net> <20061214025300.A1220@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Bruce Evans wrote:
> On Wed, 13 Dec 2006, Bjoern A. Zeeb wrote:
> 
>> On Tue, 12 Dec 2006, Scott Long wrote:
>> [..]
>>> I'll try to run some tests with the third write disabled, but I don't 
>>> have much time left to devote to this particular project.  If others 
>>> would be willing to test with the third write removed, I'd appreciate 
>>> it.  It might be interesting to test with the second write removed as
>>> well (i.e. both writes in bge_reset).  I'll post patches if anyone wants
>>> to test but can't grok what I'm saying here.
>>
>> ok, I only tried with the two writes removed from bge_reset and it
>> started to work again. At least the machine no longer hangs on boot
>> and the first bge port works. Cannot easily test more atm.
> 
> I'm getting closer to testing with various numbers of writes together
> with optionally waiting for the firmware to indicate sync by complementing
> the value.  Maybe the problem is just that the firmware doesn't like
> the value being set without syncing with the previous setting.
> 
> While editing, I noticed that the first write (in bge_sig_pre_reset())
> is already avoided except in asf mode because "Some chips don't like
> it".  Someone named scottl may have already been bitten by this.  He
> added a tunable to kill the default of asf mode being enabled, since
> leaving it enabled gave a complete system freeze for the same operation
> that now freezes on the third write.
> 
> Bruce

Ah, you're right, I missed that silly little if statement in the 
bge_sig_pre_reset function.  So I think a reasonable guess here is that
the chip doesn't like back-to-back writes of the magic number, and that
it was only working for the ASF case because that case was forcing an 
intervening write.  The right solution would be to un-conditionalize
the write in bge_sig_pre_reset and remove both writes from bge_reset.
This would also match Linux.

Again, my ability to test is limited.  I also no longer posses the 
system that had the ASF problem.  Any help here is appreciated.

Scott




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