From patchwork Sat Jul 14 08:34:05 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kirsher, Jeffrey T" X-Patchwork-Id: 170992 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 0D83F2C00E6 for ; Sat, 14 Jul 2012 18:34:21 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758048Ab2GNIeR (ORCPT ); Sat, 14 Jul 2012 04:34:17 -0400 Received: from mga03.intel.com ([143.182.124.21]:40510 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757866Ab2GNIeJ (ORCPT ); Sat, 14 Jul 2012 04:34:09 -0400 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 14 Jul 2012 01:34:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.71,315,1320652800"; d="scan'208";a="168016598" Received: from unknown (HELO jtkirshe-mobl.amr.corp.intel.com) ([10.255.12.208]) by azsmga001.ch.intel.com with ESMTP; 14 Jul 2012 01:34:07 -0700 From: Jeff Kirsher To: davem@davemloft.net Cc: Tushar Dave , netdev@vger.kernel.org, gospo@redhat.com, sassmann@redhat.com, stable@vger.kernel.org, dnelson@redhat.com, bruce.w.allan@intel.com, Jeff Kirsher Subject: [net 1/2] e1000e: Correct link check logic for 82571 serdes Date: Sat, 14 Jul 2012 01:34:05 -0700 Message-Id: <1342254845-28991-1-git-send-email-jeffrey.t.kirsher@intel.com> X-Mailer: git-send-email 1.7.10.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Tushar Dave SYNCH bit and IV bit of RXCW register are sticky. Before examining these bits, RXCW should be read twice to filter out one-time false events and have correct values for these bits. Incorrect values of these bits in link check logic can cause weird link stability issues if auto-negotiation fails. CC: stable [2.6.38+] Reported-by: Dean Nelson Signed-off-by: Tushar Dave Reviewed-by: Bruce Allan Tested-by: Jeff Pieper Signed-off-by: Jeff Kirsher --- drivers/net/ethernet/intel/e1000e/82571.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c index 36db4df..1f063dc 100644 --- a/drivers/net/ethernet/intel/e1000e/82571.c +++ b/drivers/net/ethernet/intel/e1000e/82571.c @@ -1572,6 +1572,9 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw) ctrl = er32(CTRL); status = er32(STATUS); rxcw = er32(RXCW); + /* SYNCH bit and IV bit are sticky */ + udelay(10); + rxcw = er32(RXCW); if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {