2.4.0-test11 - MPC860T FEC question.

Wolfgang Denk wd at denx.de
Mon Dec 4 19:58:45 EST 2000


I wrote:

> I just found another problem with the FEC / MII code. It happens when
> I try to use BOOTP in the Linux kernel (I haven't been doing this for
> a long time, since _if_ we use BOOTP, we do so in PPCBoot,  and  pass
> all information to the kernel instead of running BOOTP twice).
>
> Here is what I see:
...

I fixed one of the problems, which was my own fault when patching the
code.

But the other one remains:

...
CPM UART driver version 0.03
ttyS00 at 0x0280 is a SMC
pty: 256 Unix98 ptys configured
Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
hda: IBM-DCXA-210000, ATA DISK drive
ide0 at 0xc2000000-0xc2000007,0xc2000106 on irq 10
hda: 19640880 sectors (10056 MB) w/420KiB Cache, CHS=19485/16/63
Partition check:
 hda: [mac] hda1 hda2 hda3 hda4 hda5 hda6
eth0: FEC ENET Version 0.2, FEC irq 9, MII irq 12, addr 00:d0:93:00:01:cb
eth0: Phy @ 0x0, type LXT971 (0x001378e1)
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 1024 bind 1024)
eth0: config: auto-negotiation on, 100HDX, 10HDX.
Sending BOOTP requests............. timed out!
IP-Config: Auto-configuration of network failed.
eth0: status: link up, 100 Mbps Half Duplex, auto-negotiation complete.
...

Then I wrote:

> It seems the "link up" interrupt comes much too late for the
> "IP-Config" part; shouldn't we wait in fec_enet_open() for
> "fep->link" to come up?

I was wrong here. The _interrupt_ comes  just  when  it  should.  The
problem is that the function which actually sets the "fep->link" flag
(mii_relink)  is  not  run  immediately,  but  from a queue_task(...,
&tq_scheduler) call - and it's scheduled much too late for  BOOTP  to
work.

I have hacked the code so that it sets the "fep->link" flag in
mii_parse_sr() which actually detects the status change. Now I get:

...
eth0: FEC ENET Version 0.2, FEC irq 9, MII irq 12, addr 00:d0:93:00:01:cb
eth0: Phy @ 0x0, type LXT971 (0x001378e1)
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 1024 bind 1024)
eth0: config: auto-negotiation on, 100HDX, 10HDX.
Sending BOOTP requests.... OK
IP-Config: Got BOOTP answer from 10.0.0.2, my address is 10.0.0.99
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
kmem_create: Forcing size word alignment - nfs_fh
Looking up port of RPC 100003/2 on 10.0.0.2
eth0: status: link up, 100 Mbps Half Duplex, auto-negotiation complete.
Looking up port of RPC 100005/2 on 10.0.0.2
VFS: Mounted root (nfs filesystem).
Freeing unused kernel memory: 44k init
Stand-alone shell (version 2.1)
>

This works for me, but it's still conceptually  broken.  mii_relink()
is still running much too late (it doesn't do any harm though).

How should we handle this? I've tried to  compare  against  the  82xx
code  in "fcc_enet.c", but this seems to be kind of incomplete; there
is no mii_link code at all, and the mii_relink()  function  is  never
used.

Am I missing something? Isn't bk://hq.fsmlabs.com:5005  the  location
for most current sources?

Wolfgang Denk

--
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
"It's when they say 2 + 2 = 5 that I begin to argue."    - Eric Pepke

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list