In trying to upgrade to 3.8, the rl driver complains
from rl_diag that loopback failed.  There is a bit of code
that doesn't make sense to me:

* Wait for it to propagate through the chip */

        DELAY(100000);
        for (i = 0; i < RL_TIMEOUT; i++) {
                status = CSR_READ_2(sc, RL_ISR);
                if ((status & (RL_ISR_TIMEOUT_EXPIRED|RL_ISR_RX_OK)) ==
                                                                     ^^
                    (RL_ISR_TIMEOUT_EXPIRED|RL_ISR_RX_OK))
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                        break;
                DELAY(10);
        }
        if (i == RL_TIMEOUT) {
                printf("%s: diagnostic failed, failed to receive packet "
                    "in loopback mode\n", sc->sc_dev.dv_xname);
                error = EIO;
                goto done;
        }

It appears that the loop will always run RL_TIMEOUT cycles
because the test is for >both< RL_ISR_TIMEOUT_EXPIRED and RL_ISR_RX_OK.

On my systems, 3.7 runs the rl8169 fine, but fails the attach
with the above message.

I believe the marked code should be removed, leaving only the
test for either of the two status bits being true.

Anyone have an opinion?
    thanks
    Geoff Steckel [EMAIL PROTECTED]

Reply via email to