Problem with MDI/MDI-X auto-switching in E100 driver

From: Eugene Bordenkircher
Date: Thu Oct 22 2009 - 13:16:58 EST





---------- Forwarded message ----------
From: "Eugene T. Bordenkircher" <eug...@xxxxxxxxx>
Date: Oct 22, 8:39 am
Subject: Problem with MDI/MDI-X auto-switching in E100 driver
To: fa.linux.kernel


Around line 1466 of e100.c (git master) is the following code to turn
on
MDI/MDI-X auto-switching if it is not already.

         } else if ((nic->mac >= mac_82550_D102) || ((nic->flags &
ich) &&
             (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) &
0x8000) &&
                  !(nic->eeprom[eeprom_cnfg_mdix] &
eeprom_mdix_enabled))) {
                  /* enable/disable MDI/MDI-X auto-switching. */
                  mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG,
                                  nic->mii.force_media ? 0 :
NCONFIG_AUTO_SWITCH);
         }

This code is broken in the case where an 8255x is used without
magnetics.  Per
Intel Application note 435, without the magnetics, auto switching is
not
possible.  The only way to turn this off without driver modifications
is to set
the force_media flag via ethtool, which has the side effect of turning
off all
auto-negotiation. This happens to be the case on a product I am
currently
working on.

It seems a better solution to this is to trust the eeprom's
configuration
rather than override it.  Am I missing something or does this sound
reasonable?

Eugene T. Bordenkircher
--
To unsubscribe from this list: send the line "unsubscribe linux-
kernel" in
the body of a message to majord...@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/