From patchwork Wed Jul 25 18:00:10 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesse Brandeburg X-Patchwork-Id: 173272 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B80F02C0080 for ; Thu, 26 Jul 2012 06:52:48 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752491Ab2GYUwo (ORCPT ); Wed, 25 Jul 2012 16:52:44 -0400 Received: from mga02.intel.com ([134.134.136.20]:45999 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751485Ab2GYUwD (ORCPT ); Wed, 25 Jul 2012 16:52:03 -0400 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 25 Jul 2012 13:52:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.67,352,1309762800"; d="scan'208";a="171422892" Received: from jbrandeb-snb.jf.intel.com ([134.134.3.163]) by orsmga001.jf.intel.com with ESMTP; 25 Jul 2012 13:52:01 -0700 Received: from jbrandeb-snb.jf.intel.com (localhost [127.0.0.1]) by jbrandeb-snb.jf.intel.com (8.14.5/8.14.5) with ESMTP id q6PI0An9010098; Wed, 25 Jul 2012 11:00:10 -0700 From: Jesse Brandeburg Subject: [RFC NET-NEXT PATCH 2/6] e1000e: implement 82577/579 MDI setting support To: netdev@vger.kernel.org Cc: bhutchings@solarflare.com, jesse.brandeburg@intel.com Date: Wed, 25 Jul 2012 11:00:10 -0700 Message-ID: <20120725180010.9995.26853.stgit@jbrandeb-snb.jf.intel.com> In-Reply-To: <20120725175430.9995.11370.stgit@jbrandeb-snb.jf.intel.com> References: <20120725175430.9995.11370.stgit@jbrandeb-snb.jf.intel.com> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Bruce W Allan in order for e1000e to support MDI setting support via ethtool this code is needed to allow setting the MDI state via software. This is in regards to the related ethtool patch and fixes bugzilla.kernel.org bug 11998 Signed-off-by: Bruce W Allan Signed-off-by: Jesse Brandeburg --- drivers/net/ethernet/intel/e1000e/phy.c | 31 +++++++++++++++++++++++++++++-- 1 files changed, 29 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c index b860d4f..fc62a3f 100644 --- a/drivers/net/ethernet/intel/e1000e/phy.c +++ b/drivers/net/ethernet/intel/e1000e/phy.c @@ -84,8 +84,9 @@ static const u16 e1000_igp_2_cable_length_table[] = { #define I82577_PHY_STATUS2_SPEED_1000MBPS 0x0200 /* I82577 PHY Control 2 */ -#define I82577_PHY_CTRL2_AUTO_MDIX 0x0400 -#define I82577_PHY_CTRL2_FORCE_MDI_MDIX 0x0200 +#define I82577_PHY_CTRL2_MANUAL_MDIX 0x0200 +#define I82577_PHY_CTRL2_AUTO_MDI_MDIX 0x0400 +#define I82577_PHY_CTRL2_MDIX_CFG_MASK 0x0600 /* I82577 PHY Diagnostics Status */ #define I82577_DSTATUS_CABLE_LENGTH 0x03FC @@ -702,6 +703,32 @@ s32 e1000_copper_link_setup_82577(struct e1000_hw *hw) if (ret_val) return ret_val; + /* Set MDI/MDIX mode */ + ret_val = e1e_rphy(hw, I82577_PHY_CTRL_2, &phy_data); + if (ret_val) + return ret_val; + phy_data &= ~I82577_PHY_CTRL2_MDIX_CFG_MASK; + /* + * Options: + * 0 - Auto (default) + * 1 - MDI mode + * 2 - MDI-X mode + */ + switch (hw->phy.mdix) { + case 1: + break; + case 2: + phy_data |= I82577_PHY_CTRL2_MANUAL_MDIX; + break; + case 0: + default: + phy_data |= I82577_PHY_CTRL2_AUTO_MDI_MDIX; + break; + } + ret_val = e1e_wphy(hw, I82577_PHY_CTRL_2, phy_data); + if (ret_val) + return ret_val; + return e1000_set_master_slave_mode(hw); }