Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#146 closed defect (worksforme)

et driver patch for WAP54G version 1.0

Reported by: anonymous Owned by: developers
Priority: normal Milestone:
Component: kernel Version:
Keywords: et Cc: vanekt@…


OpenWrt never worked on hw version 1.0 of WAP54G. Using serial console I found that AP can see network traffic on both ethernet and wifi, but no packet gets out. Oscilloscope showed a signal on transmit lines of MII interface, so I suspect PHY chip.
mii_diag found the problem:

# mii-diag eth1 -v
mii-diag.c:v2.09 9/06/2003 Donald Becker (
  Using the new SIOCGMIIPHY value on PHY 0 (BMCR 0x3400).
 The autonegotiated capability is 0100.
The autonegotiated media type is 100baseTx-FD.
 Basic mode control register 0x3400: Auto-negotiation enabled.
  Transceiver isolated from the MII!
 You have link beat, and everything is working OK.
   This transceiver is capable of  100baseTx-FD 100baseTx 10baseT-FD 10baseT.
   Able to perform Auto-negotiation, negotiation complete.
 Your link partner advertised 4101: 100baseTx-FD.
   End of basic transceiver information.

 MII PHY #0 transceiver registers:
   3400 786d 0022 5521 01e1 4101 0005 2801
   2801 2801 2801 2801 2801 2801 2801 2801
   1800 006d 0f90 0000 c010 0001 0fdf 8001
   1fca 00ff 0000 0000 0044 1000 3a60 0100

and after

# mii-diag -r

ethernet interface starts sending packets.

It seem as a strange hardware design issue:

1) The same chip in WL500g router (at least of same ID register value) does not isolate itself after reset

2) As far as I know from the data sheet an isolated chip should not receive either

3) After applying following patch, wifi works too

Proposed patch, tested on fresh svn whiterussian.
It resets ISOLATE bin in phyciever. It should not make any harm on other hardware, where this bit is not set anyway.

diff -u linux.old/drivers/net/et/etc47xx.c linux/drivers/net/et/etc47xx.c
--- linux.old/drivers/net/et/etc47xx.c  2005-06-16 20:26:36.000000000 +0200
+++ linux/drivers/net/et/etc47xx.c      2005-12-18 11:19:14.000000000 +0100
@@ -1082,6 +1082,9 @@ chipphyinit(struct bcm4xxx *ch, uint phy
        phyid |=  chipphyrd( ch, phyaddr, 0x3) << 16;

        if( phyid == 0x55210022) {
+        /* ALTIMA AC101L phyciever */
+        chipphyand(ch, phyaddr, 0, ~(1 << 10)); /* clear 0.10 isolate */
+        /* this bit gets set after phy reset on WAP54G v1.0 !! */
                chipphywr( ch, phyaddr, 28, (uint16) (chipphyrd( ch, phyaddr, 28 ) & 0x0fff));
                chipphywr( ch, phyaddr, 30, (uint16) (chipphyrd( ch, phyaddr, 30 ) | 0x3000));
                chipphywr( ch, phyaddr, 22, (uint16) (chipphyrd( ch, phyaddr, 22 ) & 0xffdf));

Attachments (0)

Change History (2)

comment:1 Changed 12 years ago by florian

  • Resolution set to worksforme
  • Status changed from new to closed

Thanks for your detailed and efficient bug report.

I corrected the source in the following archive :

as soon as I can put it on it will be corrected in trunk !

comment:2 Changed 12 years ago by florian

Corrected in r2828, thank you very much again !

Add Comment

Modify Ticket

as closed .
The resolution will be deleted. Next status will be 'reopened'.

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.