cvs commit: src/sys/dev/bge if_bge.c if_bgereg.h

Scott Long scottl at samsco.org
Wed Dec 13 12:38:00 PST 2006


Scott Long wrote:
> 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
> 

I came up with a patch that I hoped would start solving this problem, 
but then discovered that the ASF feature needs a good deal of work at
the same time to keep from getting broken.  For now, the best solution
is probably to just remove the third register write.  I'll talk with
Doug Ambrisko about the ASF stuff and try to get this sorted out over
the next few weeks.

Scott



More information about the cvs-src mailing list