Modify

Opened 12 years ago

Closed 12 years ago

Last modified 10 years ago

#205 closed defect (fixed)

b44 driver workaround for WAP54G version 1.0

Reported by: anonymous Owned by: nbd
Priority: normal Milestone:
Component: base system Version: 2.0
Keywords: Cc: vanekt@…

Description

Hw problem: missing weak pulldown on pin 5 ISO/RXER of AC101L PHY chip.
See /ticket/146.html for detailed description.

kamikaze r2929, kernel brcm 2.6

--- linux-2.6.15/drivers/net/b44.c.orig 2006-01-12 08:49:09.000000000 +0100
+++ linux-2.6.15/drivers/net/b44.c      2006-01-12 10:39:14.000000000 +0100
@@ -478,8 +478,31 @@ static int b44_setup_phy(struct b44 *bp)
        u32 val;
        int err;
 
+#ifdef CONFIG_BCM947XX
+       if (bp->pdev->device == PCI_DEVICE_ID_BCM4713) {
+       /*
+        * workaround for bad hardware design in Linksys WAP54G v1.0
+        * see https://dev.openwrt.org/ticket/146
+        * check and reset bit "isolate"
+        */
+               if (!strcmp(nvram_get("boardnum"), "2\r")) {
+                       u32 val;
+                       if (__b44_readphy(bp, 0, MII_BMCR, &val) != 0) {
+                               printk(KERN_WARNING PFX "%s: PHY WAP54G: cannot access PHY.\n",
+                                       bp->dev->name);
+                       } else if (val & BMCR_ISOLATE) {
+                               printk(KERN_INFO PFX "%s: PHY WAP54G: resetting isolate bit.\n",
+                                       bp->dev->name);
+                               if (__b44_writephy(bp, 0, MII_BMCR, val & ~BMCR_ISOLATE) != 0)
+                                       printk(KERN_WARNING PFX "PHY WAP54G: cannot reset isolate bit.\n");
+                       }
+               }
+       }
+#endif
+
        if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
                return 0;
+
        if ((err = b44_readphy(bp, B44_MII_ALEDCTRL, &val)) != 0)
                goto out;
        if ((err = b44_writephy(bp, B44_MII_ALEDCTRL,

It should be also backported to kernel 2.4. As there is no nvram_get(),
we could try to reset isolate bit without checking boardnum. It makes no harm
to any existing PHY and it should hopefully timeout if there is no PHY (not tested).

Attachments (0)

Change History (4)

comment:1 Changed 12 years ago by florian

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

Fixed in r2932, thanks for reporting and posting the code.

Kernel 2.4 fix may require nvram functions to be implemented or use the workaround in the kernel-source-et-0.13 and directly set the bit

comment:2 Changed 12 years ago by nbd

  • Resolution fixed deleted
  • Status changed from closed to reopened

comment:3 Changed 12 years ago by nbd

  • Owner changed from developers to nbd
  • Status changed from reopened to new

I need to integrate that into my latest patch and also backport it to 2.4 on whiterussian and trunk

comment:4 Changed 12 years ago by nbd

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

fixed in whiterussian and trunk

Add Comment

Modify Ticket

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


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

 
Note: See TracTickets for help on using tickets.