From patchwork Wed Jan 5 14:07:31 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shawn Guo X-Patchwork-Id: 77600 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 C4F96B711C for ; Thu, 6 Jan 2011 01:06:25 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751452Ab1AEOGW (ORCPT ); Wed, 5 Jan 2011 09:06:22 -0500 Received: from tx2ehsobe004.messaging.microsoft.com ([65.55.88.14]:23744 "EHLO TX2EHSOBE008.bigfish.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751026Ab1AEOGV (ORCPT ); Wed, 5 Jan 2011 09:06:21 -0500 Received: from mail105-tx2-R.bigfish.com (10.9.14.241) by TX2EHSOBE008.bigfish.com (10.9.40.28) with Microsoft SMTP Server id 14.1.225.8; Wed, 5 Jan 2011 14:06:20 +0000 Received: from mail105-tx2 (localhost.localdomain [127.0.0.1]) by mail105-tx2-R.bigfish.com (Postfix) with ESMTP id 4471EBD04C4; Wed, 5 Jan 2011 14:06:20 +0000 (UTC) X-SpamScore: -8 X-BigFish: VS-8(z6c9Mzbb2cKzz1202hzz8275bhz2dh2a8h668h61h) X-Spam-TCS-SCL: 0:0 X-Forefront-Antispam-Report: KIP:(null); UIP:(null); IPVD:NLI; H:az33egw02.freescale.net; RD:az33egw02.freescale.net; EFVD:NLI Received: from mail105-tx2 (localhost.localdomain [127.0.0.1]) by mail105-tx2 (MessageSwitch) id 1294236379817074_587; Wed, 5 Jan 2011 14:06:19 +0000 (UTC) Received: from TX2EHSMHS026.bigfish.com (unknown [10.9.14.249]) by mail105-tx2.bigfish.com (Postfix) with ESMTP id 931A5B8805A; Wed, 5 Jan 2011 14:06:19 +0000 (UTC) Received: from az33egw02.freescale.net (192.88.158.103) by TX2EHSMHS026.bigfish.com (10.9.99.126) with Microsoft SMTP Server (TLS) id 14.1.225.8; Wed, 5 Jan 2011 14:06:16 +0000 Received: from az33smr01.freescale.net (az33smr01.freescale.net [10.64.34.199]) by az33egw02.freescale.net (8.14.3/8.14.3) with ESMTP id p05E6FaH002993; Wed, 5 Jan 2011 07:06:15 -0700 (MST) Received: from ubuntu.ap.freescale.net (ubuntu-010192242196.ap.freescale.net [10.192.242.196]) by az33smr01.freescale.net (8.13.1/8.13.0) with ESMTP id p05E5olF010491; Wed, 5 Jan 2011 08:06:07 -0600 (CST) From: Shawn Guo To: , , , , , , , , , , , , CC: Shawn Guo Subject: [PATCH v3 04/10] net/fec: improve pm for better suspend/resume Date: Wed, 5 Jan 2011 22:07:31 +0800 Message-ID: <1294236457-17476-5-git-send-email-shawn.guo@freescale.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1294236457-17476-1-git-send-email-shawn.guo@freescale.com> References: <1294236457-17476-1-git-send-email-shawn.guo@freescale.com> MIME-Version: 1.0 X-OriginatorOrg: freescale.com Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The following commit made a fix to use fec_enet_open/fec_enet_close over fec_enet_init/fec_stop for suspend/resume, because fec_enet_init does not allow to have a working network interface at resume. e3fe8558c7fc182972c3d947d88744482111f304 net/fec: fix pm to survive to suspend/resume This fix works for i.mx/mxc fec controller, but fails on mx28 fec which gets a different interrupt logic design. On i.mx fec, interrupt can be triggered even bit ETHER_EN of ECR register is not set. But on mx28 fec, ETHER_EN must be set to get interrupt work. Meanwhile, MII interrupt is mandatory to resume the driver, because MDIO read/write changed to interrupt mode by commit below. 97b72e4320a9aaa4a7f1592ee7d2da7e2c9bd349 fec: use interrupt for MDIO completion indication fec_restart/fec_stop comes out as the solution working for both cases. Signed-off-by: Shawn Guo --- drivers/net/fec.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 47a3c7b..8a1c51f 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -1372,8 +1372,10 @@ fec_suspend(struct device *dev) if (ndev) { fep = netdev_priv(ndev); - if (netif_running(ndev)) - fec_enet_close(ndev); + if (netif_running(ndev)) { + fec_stop(ndev); + netif_device_detach(ndev); + } clk_disable(fep->clk); } return 0; @@ -1388,8 +1390,10 @@ fec_resume(struct device *dev) if (ndev) { fep = netdev_priv(ndev); clk_enable(fep->clk); - if (netif_running(ndev)) - fec_enet_open(ndev); + if (netif_running(ndev)) { + fec_restart(ndev, fep->full_duplex); + netif_device_attach(ndev); + } } return 0; }