Commit 2964bbd7 authored by Don Fry's avatar Don Fry Committed by Jeff Garzik

[PATCH] pcnet32: AT2700/2701 and Bugzilla 2699 & 4551

This patch is a better fix for Allied Telesyn 2700/2701 FX boards than
the change made in early January this year.  It allows the user to
select the speed/duplex via module_param, but if no selection is made,
forces the speed to 100 FD.  It fixes both Bugzilla bugs 2669 and 4551.
Tested ia32 and ppc64 by myself, and by the originator of bug 2669.
Signed-off-by: default avatarDon Fry <brazilnut@us.ibm.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent a88c844c
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
*************************************************************************/ *************************************************************************/
#define DRV_NAME "pcnet32" #define DRV_NAME "pcnet32"
#define DRV_VERSION "1.31b" #define DRV_VERSION "1.31c"
#define DRV_RELDATE "06.Oct.2005" #define DRV_RELDATE "01.Nov.2005"
#define PFX DRV_NAME ": " #define PFX DRV_NAME ": "
static const char *version = static const char *version =
...@@ -262,6 +262,9 @@ static int homepna[MAX_UNITS]; ...@@ -262,6 +262,9 @@ static int homepna[MAX_UNITS];
* to allow loopback test to work unchanged. * to allow loopback test to work unchanged.
* v1.31b 06 Oct 2005 Don Fry changed alloc_ring to show name of device * v1.31b 06 Oct 2005 Don Fry changed alloc_ring to show name of device
* if allocation fails * if allocation fails
* v1.31c 01 Nov 2005 Don Fry Allied Telesyn 2700/2701 FX are 100Mbit only.
* Force 100Mbit FD if Auto (ASEL) is selected.
* See Bugzilla 2669 and 4551.
*/ */
...@@ -1612,12 +1615,18 @@ pcnet32_open(struct net_device *dev) ...@@ -1612,12 +1615,18 @@ pcnet32_open(struct net_device *dev)
val |= 0x10; val |= 0x10;
lp->a.write_csr (ioaddr, 124, val); lp->a.write_csr (ioaddr, 124, val);
/* Allied Telesyn AT 2700/2701 FX looses the link, so skip that */ /* Allied Telesyn AT 2700/2701 FX are 100Mbit only and do not negotiate */
if (lp->pci_dev->subsystem_vendor == PCI_VENDOR_ID_AT && if (lp->pci_dev->subsystem_vendor == PCI_VENDOR_ID_AT &&
(lp->pci_dev->subsystem_device == PCI_SUBDEVICE_ID_AT_2700FX || (lp->pci_dev->subsystem_device == PCI_SUBDEVICE_ID_AT_2700FX ||
lp->pci_dev->subsystem_device == PCI_SUBDEVICE_ID_AT_2701FX)) { lp->pci_dev->subsystem_device == PCI_SUBDEVICE_ID_AT_2701FX)) {
printk(KERN_DEBUG "%s: Skipping PHY selection.\n", dev->name); if (lp->options & PCNET32_PORT_ASEL) {
} else { lp->options = PCNET32_PORT_FD | PCNET32_PORT_100;
if (netif_msg_link(lp))
printk(KERN_DEBUG "%s: Setting 100Mb-Full Duplex.\n",
dev->name);
}
}
{
/* /*
* 24 Jun 2004 according AMD, in order to change the PHY, * 24 Jun 2004 according AMD, in order to change the PHY,
* DANAS (or DISPM for 79C976) must be set; then select the speed, * DANAS (or DISPM for 79C976) must be set; then select the speed,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment