Received: by 10.192.165.148 with SMTP id m20csp1651755imm; Thu, 3 May 2018 03:11:32 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqqu0GlT3up9uT6vmABNFwr0uci8mroQdf1cunbk5EyrT7or+IJz72Qus3wJQnwVVMAr1yk X-Received: by 2002:a65:5cc6:: with SMTP id b6-v6mr18283607pgt.84.1525342292797; Thu, 03 May 2018 03:11:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525342292; cv=none; d=google.com; s=arc-20160816; b=oVBwD3B7NLFplvNmSynmajzYtv58YKrzUWERORUNcxMxCMION6KQ7q2zKztriPcwIC wOAoRPQeYDk0M6RXxVzvr1lbM/JyIdS6VgsLdulN5mqSyt4fsKnf39Z79ONHCz1u8e0b X/Ef+Nj5IGa3ku5TL3c15KgorJH8rq9A0/Z61MkE4tlJnfrzoqMJ2h5lgsWoD0XOvKiT eI7kpxJjySKS/l3T+dJcPlJhVzB0Nvt0yf4ZpQ7vKhOKSqWapnCgJG9A4Lll84/VFoqA pMgLVF+NQnm/R1AThcnzYyH40PlTpA+QGUJwHP6fkfMHdRBn8PCYuYfdqTw9cNVOQ9Jz bztw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=VNFvDoWqPX03S8YWQxHvcyu2he+emQqC8Sj3b33091c=; b=UVVpXcpECYWDLMlGEQA4duJGZmiAtOQKtamWhf6KCwElKkOOYFkglOaj4ihWVLrp3U EkNcTV6ojO7TYTxvwe6PsiD/7ZZ1RWZg5oD05rHGzet88bSHAc/X9eRMpGeNBuiG6sFX 4Be5FMze3yxXENxH+xDaNzlkIwDBoQuaYjt1qhoy02QXZrXCQuw9WLN2yb1rMOvNwJze 2jrPUZXZuG5Jn64JkDg2i5pTPfIRJS8lKNPPDVZFIYA95oZ6+ygjHqmX24jaHz/qPB+C o7pO9nZh7JFnAbYJZ3mWnbipTJba6TLtYJ/3B3OBP2cv2E2dLBWL7vAuYjEMocslHlAZ 3QpQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d9-v6si11520222pge.290.2018.05.03.03.11.18; Thu, 03 May 2018 03:11:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751852AbeECKJw (ORCPT + 99 others); Thu, 3 May 2018 06:09:52 -0400 Received: from esa2.microchip.iphmx.com ([68.232.149.84]:51639 "EHLO esa2.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751403AbeECKJt (ORCPT ); Thu, 3 May 2018 06:09:49 -0400 X-IronPort-AV: E=Sophos;i="5.49,358,1520924400"; d="scan'208";a="13743814" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 03 May 2018 03:09:49 -0700 Received: from [10.145.6.85] (10.10.76.4) by chn-sv-exch06.mchp-main.com (10.10.76.107) with Microsoft SMTP Server id 14.3.352.0; Thu, 3 May 2018 03:09:48 -0700 Subject: Re: [RFC PATCH 4/5] net: macb: Add support for suspend/resume with full power down To: , , CC: , , , , References: <1521726700-22634-1-git-send-email-harinikatakamlinux@gmail.com> <1521726700-22634-5-git-send-email-harinikatakamlinux@gmail.com> From: Claudiu Beznea Message-ID: <35d980af-b9d5-495e-88af-c4fc911b8429@microchip.com> Date: Thu, 3 May 2018 13:09:45 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <1521726700-22634-5-git-send-email-harinikatakamlinux@gmail.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 22.03.2018 15:51, harinikatakamlinux@gmail.com wrote: > From: Harini Katakam > > When macb device is suspended and system is powered down, the clocks > are removed and hence macb should be closed gracefully and restored > upon resume. Is this a power saving mode which shut down the core? This patch does the same by switching off the net device, > suspending phy and performing necessary cleanup of interrupts and BDs. > Upon resume, all these are reinitialized again. > > Reset of macb device is done only when GEM is not a wake device. > Even when gem is a wake device, tx queues can be stopped and ptp device > can be closed (tsu clock will be disabled in pm_runtime_suspend) as > wake event detection has no dependency on this. > > Signed-off-by: Kedareswara rao Appana > Signed-off-by: Harini Katakam > --- > drivers/net/ethernet/cadence/macb_main.c | 38 ++++++++++++++++++++++++++++++-- > 1 file changed, 36 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c > index ce75088..bca91bd 100644 > --- a/drivers/net/ethernet/cadence/macb_main.c > +++ b/drivers/net/ethernet/cadence/macb_main.c > @@ -4167,16 +4167,33 @@ static int __maybe_unused macb_suspend(struct device *dev) > struct platform_device *pdev = to_platform_device(dev); > struct net_device *netdev = platform_get_drvdata(pdev); > struct macb *bp = netdev_priv(netdev); > + struct macb_queue *queue = bp->queues; > + unsigned long flags; > + unsigned int q; > + > + if (!netif_running(netdev)) > + return 0; > > - netif_carrier_off(netdev); > - netif_device_detach(netdev); > > if (bp->wol & MACB_WOL_ENABLED) { > macb_writel(bp, IER, MACB_BIT(WOL)); > macb_writel(bp, WOL, MACB_BIT(MAG)); > enable_irq_wake(bp->queues[0].irq); > + netif_device_detach(netdev); > + } else { > + netif_device_detach(netdev); > + for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) > + napi_disable(&queue->napi); > + phy_stop(netdev->phydev); > + phy_suspend(netdev->phydev); > + spin_lock_irqsave(&bp->lock, flags); > + macb_reset_hw(bp); > + spin_unlock_irqrestore(&bp->lock, flags); Wouldn't be simple to just call macb_close() here? > } > > + netif_carrier_off(netdev); > + if (bp->ptp_info) > + bp->ptp_info->ptp_remove(netdev); > pm_runtime_force_suspend(dev); > > return 0; > @@ -4187,6 +4204,11 @@ static int __maybe_unused macb_resume(struct device *dev) > struct platform_device *pdev = to_platform_device(dev); > struct net_device *netdev = platform_get_drvdata(pdev); > struct macb *bp = netdev_priv(netdev); > + struct macb_queue *queue = bp->queues; > + unsigned int q; > + > + if (!netif_running(netdev)) > + return 0; > > pm_runtime_force_resume(dev); > > @@ -4194,9 +4216,21 @@ static int __maybe_unused macb_resume(struct device *dev) > macb_writel(bp, IDR, MACB_BIT(WOL)); > macb_writel(bp, WOL, 0); > disable_irq_wake(bp->queues[0].irq); > + } else { > + macb_writel(bp, NCR, MACB_BIT(MPE)); > + for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) > + napi_enable(&queue->napi); > + netif_carrier_on(netdev); > + phy_resume(netdev->phydev); > + phy_start(netdev->phydev); > } > > + bp->macbgem_ops.mog_init_rings(bp); > + macb_init_hw(bp); > + macb_set_rx_mode(netdev); > netif_device_attach(netdev); > + if (bp->ptp_info) > + bp->ptp_info->ptp_init(netdev); Wouln't be simpler to call macb_open() here? > > return 0; > } >