Re: 5.2-RC oerrs and collisions on dc0

From: Dejan Lesjak <dejan.lesjak_at_ijs.si>
Date: Mon, 5 Jan 2004 00:02:18 +0100
On Sunday 04 of January 2004 22:51, Don Lewis wrote:
> I just took a closer look at the busdma diff, and this change to
> dc_txeof() looks very suspicious:
>
> _at__at_ -2663,7 +2809,7 _at__at_
>                 if (txstat & DC_TXSTAT_OWN)
>                         break;
>
> -               if (!(cur_tx->dc_ctl & DC_TXCTL_LASTFRAG) ||
> +               if (!(cur_tx->dc_ctl & DC_TXCTL_FIRSTFRAG) ||
>                     cur_tx->dc_ctl & DC_TXCTL_SETUP) {
>                         if (cur_tx->dc_ctl & DC_TXCTL_SETUP) {
>                                 /*
>
> The code in the "if" block ends with a "continue" which will cause the
> error handling code to be skipped if the "if" condition is true.  I'm
> pretty sure that the error status bits are only set in the last
> descriptor for the frame, so we want to execute the "continue" unless
> the DC_TXCTL_LASTFRAG bit is set.
>
> Try reverting this part of the busdma change.

I tried this; although I'm now getting watchdog timeouts, I don't see any 
collisions and the few output errors probably come from timeouts. So I guess 
this is in the right direction. Could it be that we still need to do these 
lines:
sc->dc_cdata.dc_tx_cnt--;
DC_INC(idx, DC_TX_LIST_CNT);
unless DC_TXCTL_FIRSTFRAG is set? I'll try playing with this now and see how 
it goes...

Dejan
Received on Sun Jan 04 2004 - 14:02:25 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:36 UTC