Re: why this 1ms delay in mdio_read? (cont'd from "are ioctl calls supposed to take this long?")

From: Richard B. Johnson (root@chaos.analogic.com)
Date: Fri Jul 06 2001 - 13:48:46 EST


On Fri, 6 Jul 2001, Chris Friesen wrote:

> The beginning of mdio_read() in tulip.c goes like this:
>
> static int mdio_read(struct device *dev, int phy_id, int location)
> {
> struct tulip_private *tp = (struct tulip_private *)dev->priv;
> int i;
> int read_cmd = (0xf6 << 10) | (phy_id << 5) | location;
> int retval = 0;
> long ioaddr = dev->base_addr;
> long mdio_addr = ioaddr + CSR9;
>
> if (tp->chip_id == LC82C168) {
> int i = 1000;
> outl(0x60020000 + (phy_id<<23) + (location<<18), ioaddr + 0xA0);
> inl(ioaddr + 0xA0);
> inl(ioaddr + 0xA0);
> while (--i > 0)
> if ( ! ((retval = inl(ioaddr + 0xA0)) & 0x80000000))
> return retval & 0xffff;
> return 0xffff;
> }
>
> if (tp->chip_id == COMET) {
> if (phy_id == 1) {
> if (location < 7)
> return inl(ioaddr + 0xB4 + (location<<2));
> else if (location == 17)
> return inl(ioaddr + 0xD0);
> else if (location >= 29 && location <= 31)
> return inl(ioaddr + 0xD4 + ((location-29)<<2));
> }
> return 0xffff;
> }
>
> mdelay(1); /* One ms delay... */
>
> ...rest of code...
>

What? What kernel version?
The code here says:
     /* Establish sync by sending at least 32 logic ones */
     for (i = 32; i >=0; i--) {..........}

There is a mdio_delay() between each of the bit operations. This
is required to give time for the chip's internals to set up.

There is no mdelay in any of the code in .../linux/drivers/net/tulip/.

Cheers,
Dick Johnson

Penguin : Linux version 2.4.1 on an i686 machine (799.53 BogoMips).

    I was going to compile a list of innovations that could be
    attributed to Microsoft. Once I realized that Ctrl-Alt-Del
    was handled in the BIOS, I found that there aren't any.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Jul 07 2001 - 21:00:19 EST