From patchwork Sun Apr 18 23:13:21 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Fleming X-Patchwork-Id: 50423 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 114A5B7CF8 for ; Mon, 19 Apr 2010 09:13:47 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752966Ab0DRXNl (ORCPT ); Sun, 18 Apr 2010 19:13:41 -0400 Received: from az33egw02.freescale.net ([192.88.158.103]:54853 "EHLO az33egw02.freescale.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752858Ab0DRXNl (ORCPT ); Sun, 18 Apr 2010 19:13:41 -0400 Received: from az33smr01.freescale.net (az33smr01.freescale.net [10.64.34.199]) by az33egw02.freescale.net (8.14.3/az33egw02) with ESMTP id o3INDMkU022390; Sun, 18 Apr 2010 16:13:33 -0700 (MST) Received: from localhost (firefly.am.freescale.net [10.82.123.6]) by az33smr01.freescale.net (8.13.1/8.13.0) with ESMTP id o3INLRDD024796; Sun, 18 Apr 2010 18:21:27 -0500 (CDT) From: Andy Fleming To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH] gianfar: Wait for both RX and TX to stop Date: Sun, 18 Apr 2010 18:13:21 -0500 Message-Id: <1271632401-2472-1-git-send-email-afleming@freescale.com> X-Mailer: git-send-email 1.6.5.2.g6ff9a Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When gracefully stopping the controller, the driver was continuing if *either* RX or TX had stopped. We need to wait for both, or the controller could get into an invalid state. Signed-off-by: Andy Fleming Acked-by: Kumar Gala --- drivers/net/gianfar.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 032073d..6038397 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c @@ -1571,8 +1571,9 @@ static void gfar_halt_nodisable(struct net_device *dev) tempval |= (DMACTRL_GRS | DMACTRL_GTS); gfar_write(®s->dmactrl, tempval); - while (!(gfar_read(®s->ievent) & - (IEVENT_GRSC | IEVENT_GTSC))) + while ((gfar_read(®s->ievent) & + (IEVENT_GRSC | IEVENT_GTSC)) != + (IEVENT_GRSC | IEVENT_GTSC)) cpu_relax(); } }