[vortex] 3c905 oddities 2
Bogdan Costescu
Bogdan.Costescu@IWR.Uni-Heidelberg.De
Wed, 13 Dec 2000 13:48:36 +0100 (CET)
On Tue, 12 Dec 2000, Donald Becker wrote:
> > 1) will a timeout of 4000000 as suggested in previous emails cause a
> > performance hit? (ie should I try and optimize)
>
> No, it's in the initialization and error recovery path. So it's a one-time
> pause when the interface is started.
If this is needed only for the RxReset command, the above statement is
true. Don, do you have any info to support it ? (other than the
observation of the 3 CX cards that appeared on this list).
In a previous message, Andrew expressed the "fear" that other commands
might need longer cycles too.
> The change can cause major problems with other kernel systems, such as disk
> controllers and the clock. The old Xircom PCMCIA driver had code like this,
> and the clock lost three seconds each time the interface was started. You
> sometimes see the same effect with Windows device drivers.
Is this because the CPU is kept busy or because the PCI bus is kept busy
too (or both) ? Would it make sense to use another method of waiting
(instead of the tight 'in' loop) for the commands known to take long time?
> The second related problem is with detecting MII transceivers.
> There are two changes that might make a difference. The first is adding an
> extra preamble, ...
Why ?
Would you care to answer my MDIO related questions from my "MII
transceivers" message from 26th of Nov ?
> ... the second is changing the scan order to check for the usual
> address of 24 first, and never check for an external phy:
OK, I take this as a late reply to my 2 weeks old question, but...
> - for (phy = 1; phy <= 32 && phy_idx < sizeof(vp->phys); phy++) {
> - int mii_status, phyx = phy & 0x1f;
> + for (phy = 0; phy < 32 && phy_idx < 1; phy++) {
> + int mii_status, phyx = (phy == 0 ? 24 : phy == 24 );
why -^^^^
... I don't understand your code. Should it be
+ int mii_status, phyx = (phy == 0 ? 24 : phy);
Anyway, you are not getting a phyx = 0 case, while in a previous message
you said that external transceivers at PHYAD 0 should be tested last,
which was how the old code was working. Is this not true anymore ?
And the last one 8-): you are now bailing out at the first transceiver
found (phy_idx < 1); is this intentional ? If so, why ?
Hoping to get some answers this time,
Bogdan Costescu
IWR - Interdisziplinaeres Zentrum fuer Wissenschaftliches Rechnen
Universitaet Heidelberg, INF 368, D-69120 Heidelberg, GERMANY
Telephone: +49 6221 54 8869, Telefax: +49 6221 54 8868
E-mail: Bogdan.Costescu@IWR.Uni-Heidelberg.De