summaryrefslogtreecommitdiff
path: root/drivers/net/b44.c
diff options
context:
space:
mode:
authorMichael Buesch <mb@bu3sch.de>2008-03-25 20:04:46 +0300
committerJeff Garzik <jeff@garzik.org>2008-03-26 06:42:07 +0300
commit5ea79631c0c47d28831a0635e8af9da539d449cd (patch)
tree3d653580fd3a52c600c0f7b02c45236b76a5ce24 /drivers/net/b44.c
parent6ef2977d414cc196baba0fb53509c5f8cd9154b4 (diff)
downloadlinux-5ea79631c0c47d28831a0635e8af9da539d449cd.tar.xz
b44: Truncate PHY address
Some ROMs on embedded devices store incorrect values for the PHY address of the ethernet device. It looks like the number is sign-extended. Truncate the value by applying the PHY-address mask to it. The patch was tested on a bcm47xx embedded system (where the bug triggers) and a bcm4400 PCI card. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/b44.c')
-rw-r--r--drivers/net/b44.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c
index ea2a2b548e3c..25f1337cd02c 100644
--- a/drivers/net/b44.c
+++ b/drivers/net/b44.c
@@ -2082,6 +2082,11 @@ static int __devinit b44_get_invariants(struct b44 *bp)
addr = sdev->bus->sprom.et0mac;
bp->phy_addr = sdev->bus->sprom.et0phyaddr;
}
+ /* Some ROMs have buggy PHY addresses with the high
+ * bits set (sign extension?). Truncate them to a
+ * valid PHY address. */
+ bp->phy_addr &= 0x1F;
+
memcpy(bp->dev->dev_addr, addr, 6);
if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){