From patchwork Tue Jan 4 09:24:10 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shawn Guo X-Patchwork-Id: 77437 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 09E2AB70D4 for ; Tue, 4 Jan 2011 20:24:03 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752181Ab1ADJX2 (ORCPT ); Tue, 4 Jan 2011 04:23:28 -0500 Received: from am1ehsobe006.messaging.microsoft.com ([213.199.154.209]:25667 "EHLO AM1EHSOBE006.bigfish.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751908Ab1ADJXI (ORCPT ); Tue, 4 Jan 2011 04:23:08 -0500 Received: from mail4-am1-R.bigfish.com (10.3.201.243) by AM1EHSOBE006.bigfish.com (10.3.204.26) with Microsoft SMTP Server id 14.1.225.8; Tue, 4 Jan 2011 09:23:06 +0000 Received: from mail4-am1 (localhost.localdomain [127.0.0.1]) by mail4-am1-R.bigfish.com (Postfix) with ESMTP id 6BE7C112018B; Tue, 4 Jan 2011 09:23:06 +0000 (UTC) X-SpamScore: -8 X-BigFish: VS-8(z6c9Mzbb2cKzz1202hzz8275bhz2dh2a8h668h62h) X-Spam-TCS-SCL: 1:0 X-Forefront-Antispam-Report: KIP:(null); UIP:(null); IPVD:NLI; H:az33egw02.freescale.net; RD:az33egw02.freescale.net; EFVD:NLI Received: from mail4-am1 (localhost.localdomain [127.0.0.1]) by mail4-am1 (MessageSwitch) id 1294132986193399_14566; Tue, 4 Jan 2011 09:23:06 +0000 (UTC) Received: from AM1EHSMHS004.bigfish.com (unknown [10.3.201.246]) by mail4-am1.bigfish.com (Postfix) with ESMTP id 24E9F80050; Tue, 4 Jan 2011 09:23:06 +0000 (UTC) Received: from az33egw02.freescale.net (192.88.158.103) by AM1EHSMHS004.bigfish.com (10.3.207.104) with Microsoft SMTP Server (TLS) id 14.1.225.8; Tue, 4 Jan 2011 09:23:04 +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 p049N2aq024095; Tue, 4 Jan 2011 02:23:02 -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 p049Md8m004104; Tue, 4 Jan 2011 03:22:57 -0600 (CST) From: Shawn Guo To: , , , , , , , , , , , , , Subject: [PATCH v2 04/10] net/fec: improve pm for better suspend/resume Date: Tue, 4 Jan 2011 17:24:10 +0800 Message-ID: <1294133056-21195-5-git-send-email-shawn.guo@freescale.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1294133056-21195-1-git-send-email-shawn.guo@freescale.com> References: <1294133056-21195-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 cd59814..f147508 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -1387,8 +1387,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; @@ -1403,8 +1405,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; }