From patchwork Wed Oct 25 22:04:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830407 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Z+rjLyrq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMkln5WhHz9t2W for ; Thu, 26 Oct 2017 09:07:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932384AbdJYWHs (ORCPT ); Wed, 25 Oct 2017 18:07:48 -0400 Received: from mail-qt0-f194.google.com ([209.85.216.194]:44253 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932211AbdJYWFH (ORCPT ); Wed, 25 Oct 2017 18:05:07 -0400 Received: by mail-qt0-f194.google.com with SMTP id 8so2016636qtv.1; Wed, 25 Oct 2017 15:05:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=fKVJwDXCXTWTp7pxCSDXEsoP5z2PLyEvsV8EL4yhTz4=; b=Z+rjLyrqSNNT+m6K1AtGwX8wZsKsnfPZP8lsC34KHDYpX+v957egbceRUktInQnE1Z HEd9BWwpHztJckZq3t1l8DvnyALYHCvhI2DUJeA4m1qlAHZfa/ZtEsfs/HhATTZERipE U+xcrALtk+kgGHfiZa4Bzf+yN1Wvrr030whaRW8+Y9gvGWx7XgsZ1k/KxGspNudam2No zEpD/nfAC7mKYqnH2kcSoU6TjOUonvz5ELG3zzqOZqwXMjMKgdW3Idz+ZdjwcPtBe6pm K8URx8lSb4ptSknROxNpAmrPej59pzr3oy90j56zy1VVNKalTLRV/nlsBIT+cH5bN4nX 8DJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fKVJwDXCXTWTp7pxCSDXEsoP5z2PLyEvsV8EL4yhTz4=; b=AMb4yR2+fa9IsK5VaC4yfM0r43lwq7kRJDrikRlAOJN+SfD1B24Ugo2fyqp43yeR4u +0Q7bAjBCK8/sR3siM41+t1sAM8rIzL81B0r6me0f2oVPqymYMQ38pwkpKW0UESJJ2NO AF0fHAF/Ytg3rxZ6krSPOh4F5JYV7PXJ0Y984zeWbPmUXszkPYx8Fzy9Et34Vctj99Wn zyFtSvc8iNugPSypzaP07PVOCr7Pycp4sdKV1FiOWVw4i/8yFTO7ZI76ZIsHEz4VD7Kg 0yQZ4yhCJQoG8gkxo8Tr08/b3tQqxCvB/y+9ObJ8uFUGAbrvGJ5aeSqEaxsDHWOYLiux zUmw== X-Gm-Message-State: AMCzsaVa/OIlGQ9D5tMo1+DkR4nA8CIUyElRy9Iyfaume3/QtOVYuZKD 45XXIYkTZJu5unKU2Fsb4Yw= X-Google-Smtp-Source: ABhQp+RlQ8rNfRvOwIuOa/Y9O/9IaLrFdyvx8DnAlT1sknPJwCQjzqyCEut6OX5j0txvL7Fl0PRsOw== X-Received: by 10.200.63.245 with SMTP id v50mr32913219qtk.323.1508969106665; Wed, 25 Oct 2017 15:05:06 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:06 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 1/9] net: bcmgenet: correct bad merge Date: Wed, 25 Oct 2017 15:04:11 -0700 Message-Id: <20171025220419.24951-2-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org As noted in the net-next submission for GENETv5 support [1], there were merge conflicts with an earlier net submission [2] that had not yet found its way to the net-next repository. Unfortunately, when the branches were merged the conflicts were not correctly resolved. This commit attempts to correct that. [1] https://lkml.org/lkml/2017/3/13/1145 [2] https://lkml.org/lkml/2017/3/9/890 Fixes: 101c431492d2 ("Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net") Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 9cebca896913..f6e8e01be1c8 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -2602,12 +2602,6 @@ static void bcmgenet_irq_task(struct work_struct *work) priv->irq0_stat = 0; spin_unlock_irqrestore(&priv->lock, flags); - if (status & UMAC_IRQ_MPD_R) { - netif_dbg(priv, wol, priv->dev, - "magic packet detected, waking up\n"); - bcmgenet_power_up(priv, GENET_POWER_WOL_MAGIC); - } - /* Link UP/DOWN event */ if (status & UMAC_IRQ_LINK_EVENT) phy_mac_interrupt(priv->phydev, @@ -2698,23 +2692,13 @@ static irqreturn_t bcmgenet_isr0(int irq, void *dev_id) } } - if (priv->irq0_stat & (UMAC_IRQ_PHY_DET_R | - UMAC_IRQ_PHY_DET_F | - UMAC_IRQ_LINK_EVENT | - UMAC_IRQ_HFB_SM | - UMAC_IRQ_HFB_MM)) { - /* all other interested interrupts handled in bottom half */ - schedule_work(&priv->bcmgenet_irq_work); - } - if ((priv->hw_params->flags & GENET_HAS_MDIO_INTR) && status & (UMAC_IRQ_MDIO_DONE | UMAC_IRQ_MDIO_ERROR)) { wake_up(&priv->wq); } /* all other interested interrupts handled in bottom half */ - status &= (UMAC_IRQ_LINK_EVENT | - UMAC_IRQ_MPD_R); + status &= UMAC_IRQ_LINK_EVENT; if (status) { /* Save irq status for bottom-half processing. */ spin_lock_irqsave(&priv->lock, flags); From patchwork Wed Oct 25 22:04:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830406 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="li1U3nTk"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMklW0FKDz9t4V for ; Thu, 26 Oct 2017 09:07:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932343AbdJYWH1 (ORCPT ); Wed, 25 Oct 2017 18:07:27 -0400 Received: from mail-qk0-f194.google.com ([209.85.220.194]:50359 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932278AbdJYWFI (ORCPT ); Wed, 25 Oct 2017 18:05:08 -0400 Received: by mail-qk0-f194.google.com with SMTP id o187so1986559qke.7; Wed, 25 Oct 2017 15:05:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ik+rHRD5WXus/hAYRtrpDHAwIUVHlQa3Y+ZPXvMQotA=; b=li1U3nTknUy/GKvS9qmWHekXr948cdVEa3Ghb2uI1880zkqk0oY1LRpLB4ueZwnYMx RHkR1shVN7Grekl9RXilFlrrzgX8I5psmdDGRxxCnfJkymOl0QgWS81RKVcGTPwe5qgb oVaFEfemcNkQ5YJ/4SRHq2TSER/YKjivtkqIPoeDtiO6OilTRXN5xJpy6NBaY05J7Ioz evqJi//ookf10eU3GgJXoz2o8jv22FFNuq8prOWvmBAcn2nE/vZ88KcEX76jPAT+hkhe WaC53Qvvo/kAkS54h9ah6/ZhxVzC2riMC73mwnBOWQtLVLR9vV7QFSj37iT7RaDPL8ng 6MXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ik+rHRD5WXus/hAYRtrpDHAwIUVHlQa3Y+ZPXvMQotA=; b=GPD2fMznoIIjgULiR6eyY3ebyIlNQf4s3CDwKMFPhFBMx3YppK2XvSYc8pyMYyqA/k BaCBT8oo0iVPAzJvJ0JvfrBGcTRz2Mz360RDXop4qrTZvn6w4STmEyQU4ogajEK/p7cq DzHO5aIEBbDBoujx4+3ewPlS8yHvokhS/SgQP1imSfKF6MjM3PY8VqfRNXdU4KTf1agz KMipLZaKTqLEsWUg2/Nr2JEdniXKERXqNjZl0Rvdg3t9wUbApaj5QKLDzeQleSaXE+XM E7QCkh32V5Y7CZYq8yulE6GhaZZPreD5oT96BU8pp1mbQ9PhIprEkiw4acwIm77EN81+ 9dCw== X-Gm-Message-State: AMCzsaUATKuaRMGmaU7AalABfr9fuSaeWG/gB8CooS6yRbaRqeuLKjHS pMoIhKFI57yIpMqn1yrRSPo= X-Google-Smtp-Source: ABhQp+QhUcEMVHS7BHjcn8t1w7kZvFy4Q7AlKgg0pEAn65gV/O/JThTorNubPHfdySv9KfBSiKGAPg== X-Received: by 10.55.26.90 with SMTP id a87mr4981199qka.132.1508969107849; Wed, 25 Oct 2017 15:05:07 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:07 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 2/9] net: bcmgenet: prevent duplicate calls of bcmgenet_dma_teardown Date: Wed, 25 Oct 2017 15:04:12 -0700 Message-Id: <20171025220419.24951-3-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When bcmgenet_dma_teardown is called from bcmgenet_fini_dma it ends up getting called twice from the bcmgenet_close and bcmgenet_suspend functions (once directly and once inside the bcmgenet_fini_dma call). This commit removes the call from bcmgenet_fini_dma and ensures that bcmgenet_dma_teardown is called before bcmgenet_fini_dma in all paths of execution. Fixes: 4a0c081eff43 ("net: bcmgenet: call bcmgenet_dma_teardown in bcmgenet_fini_dma") Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index f6e8e01be1c8..78368466eb70 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -2505,9 +2505,6 @@ static void bcmgenet_fini_dma(struct bcmgenet_priv *priv) bcmgenet_fini_rx_napi(priv); bcmgenet_fini_tx_napi(priv); - /* disable DMA */ - bcmgenet_dma_teardown(priv); - for (i = 0; i < priv->num_tx_bds; i++) { cb = priv->tx_cbs + i; skb = bcmgenet_free_tx_cb(&priv->pdev->dev, cb); @@ -2930,6 +2927,7 @@ static int bcmgenet_open(struct net_device *dev) err_irq0: free_irq(priv->irq0, priv); err_fini_dma: + bcmgenet_dma_teardown(priv); bcmgenet_fini_dma(priv); err_clk_disable: if (priv->internal_phy) From patchwork Wed Oct 25 22:04:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830404 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZAFqFfRY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMklF6CT4z9t2W for ; Thu, 26 Oct 2017 09:07:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752105AbdJYWHF (ORCPT ); Wed, 25 Oct 2017 18:07:05 -0400 Received: from mail-qk0-f195.google.com ([209.85.220.195]:45059 "EHLO mail-qk0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932309AbdJYWFK (ORCPT ); Wed, 25 Oct 2017 18:05:10 -0400 Received: by mail-qk0-f195.google.com with SMTP id f199so2010024qke.2; Wed, 25 Oct 2017 15:05:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=I2F33DbbTvl5Z5tdl798iXgdCreS/hG0/lx9PT/gQkY=; b=ZAFqFfRYEHlFt5itWufu3mP3Bd/x+Mu6iKn/uhL0bDFCoYxKFPBztaXO3Hd8oJWoPI QnT6KgggcyZRf7GswBK4lh0gaQuEtpegA+inrmI5WQ/0BK5aMx9jTD27qRl/1PBNbFvF 1WuAK9AMKiVxEsF0S2ng1NkpF5IBceqom0d03UL3VssIv8YQkKcQH4RqmuuudZfi0lea 1Tc6nPOq22qZyeyWwSYVIKMfIfc7qvXrMyDfPR1MrLDcmrxpjCo0x20dfXnYF3GvPoI2 ohYN1Dwp8e5Px/ri679Q9N+0P4DHuEK1docxIKmJfEG/+E5gPIrP+SYdzkg76O66q+ry cUEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=I2F33DbbTvl5Z5tdl798iXgdCreS/hG0/lx9PT/gQkY=; b=fo/srK2FhNRkJ607cTSay0q1RUVTuXsfSFCfL1Jt7K41XL2XoDANOWkoyBiq04Z/bQ hZsQ4Xd2ApEbVY/66cWCfqH5DmeUsWHktk4vrVa1spxeM+VHjwPoBHxQj10/wJ4upsxS qWY0DSpPlrYx/SJQOSLzVChSuQp87vHAgBfw14+qNFS/rZkpcmSQfkIgAN/Q2i+MfoS6 bZjaSOUB9jiKFWSB5j8SfUoNoACEfkERnV/or5Weloj/odzsjQ9HHdksbFi3s3CgXYJU 02fXPgsbaabvfVpIfWcZclfVN+2iOumNZ72179bO90+hTLdDHVpGk17AJttdtGd3r2iG kfXQ== X-Gm-Message-State: AMCzsaVpa4EB6F/IwZ/eIl9rY9B73VFsZ918guXTRmEi+2V2iKgR97H3 EL6eg0tib3imVi2YjxShBD1s0XoC X-Google-Smtp-Source: ABhQp+QCKbwQ7ZuKyk0tn477X68U8kRqH+rs7dOxqI8SxL40M6r1IVlKZobXrR2vrrjdt+SdAGhDdQ== X-Received: by 10.55.197.20 with SMTP id p20mr5303592qki.229.1508969109019; Wed, 25 Oct 2017 15:05:09 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:08 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 3/9] net: bcmgenet: enable loopback during UniMAC sw_reset Date: Wed, 25 Oct 2017 15:04:13 -0700 Message-Id: <20171025220419.24951-4-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org It is necessary for the UniMAC to be clocked at least 5 cycles while the sw_reset is asserted to ensure a clean reset. It was discovered that this condition was not being met when connected to an external RGMII PHY that disabled the Rx clock in the Power Save state. This commit modifies the reset_umac function to place the (RG)MII interface into a local loopback mode where the Rx clock comes from the GENET sourced Tx clk during the sw_reset to ensure the presence and stability of the clock. In addition, it turns out that the sw_reset of the UniMAC is not self clearing, but this was masked by a bug in the timeout code. The sw_reset is now explicitly cleared by zeroing the UMAC_CMD register before returning from reset_umac which makes it no longer necessary to do so in init_umac and makes the clearing of CMD_TX_EN and CMD_RX_EN by umac_enable_set redundant. The timeout code (and its associated bug) are removed so reset_umac no longer needs to return a result, and that means init_umac that calls reset_umac does not need to as well. Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file") Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 55 +++++--------------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 78368466eb70..3da177fa2659 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -1935,12 +1935,8 @@ static void umac_enable_set(struct bcmgenet_priv *priv, u32 mask, bool enable) usleep_range(1000, 2000); } -static int reset_umac(struct bcmgenet_priv *priv) +static void reset_umac(struct bcmgenet_priv *priv) { - struct device *kdev = &priv->pdev->dev; - unsigned int timeout = 0; - u32 reg; - /* 7358a0/7552a0: bad default in RBUF_FLUSH_CTRL.umac_sw_rst */ bcmgenet_rbuf_ctrl_set(priv, 0); udelay(10); @@ -1948,23 +1944,10 @@ static int reset_umac(struct bcmgenet_priv *priv) /* disable MAC while updating its registers */ bcmgenet_umac_writel(priv, 0, UMAC_CMD); - /* issue soft reset, wait for it to complete */ - bcmgenet_umac_writel(priv, CMD_SW_RESET, UMAC_CMD); - while (timeout++ < 1000) { - reg = bcmgenet_umac_readl(priv, UMAC_CMD); - if (!(reg & CMD_SW_RESET)) - return 0; - - udelay(1); - } - - if (timeout == 1000) { - dev_err(kdev, - "timeout waiting for MAC to come out of reset\n"); - return -ETIMEDOUT; - } - - return 0; + /* issue soft reset with (rg)mii loopback to ensure a stable rxclk */ + bcmgenet_umac_writel(priv, CMD_SW_RESET | CMD_LCL_LOOP_EN, UMAC_CMD); + udelay(2); + bcmgenet_umac_writel(priv, 0, UMAC_CMD); } static void bcmgenet_intr_disable(struct bcmgenet_priv *priv) @@ -1994,20 +1977,16 @@ static void bcmgenet_link_intr_enable(struct bcmgenet_priv *priv) bcmgenet_intrl2_0_writel(priv, int0_enable, INTRL2_CPU_MASK_CLEAR); } -static int init_umac(struct bcmgenet_priv *priv) +static void init_umac(struct bcmgenet_priv *priv) { struct device *kdev = &priv->pdev->dev; - int ret; u32 reg; u32 int0_enable = 0; dev_dbg(&priv->pdev->dev, "bcmgenet: init_umac\n"); - ret = reset_umac(priv); - if (ret) - return ret; + reset_umac(priv); - bcmgenet_umac_writel(priv, 0, UMAC_CMD); /* clear tx/rx counter */ bcmgenet_umac_writel(priv, MIB_RESET_RX | MIB_RESET_TX | MIB_RESET_RUNT, @@ -2046,8 +2025,6 @@ static int init_umac(struct bcmgenet_priv *priv) bcmgenet_intrl2_0_writel(priv, int0_enable, INTRL2_CPU_MASK_CLEAR); dev_dbg(kdev, "done init umac\n"); - - return 0; } /* Initialize a Tx ring along with corresponding hardware registers */ @@ -2863,12 +2840,7 @@ static int bcmgenet_open(struct net_device *dev) /* take MAC out of reset */ bcmgenet_umac_reset(priv); - ret = init_umac(priv); - if (ret) - goto err_clk_disable; - - /* disable ethernet MAC while updating its registers */ - umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, false); + init_umac(priv); /* Make sure we reflect the value of CRC_CMD_FWD */ reg = bcmgenet_umac_readl(priv, UMAC_CMD); @@ -3546,9 +3518,7 @@ static int bcmgenet_probe(struct platform_device *pdev) !strcasecmp(phy_mode_str, "internal")) bcmgenet_power_up(priv, GENET_POWER_PASSIVE); - err = reset_umac(priv); - if (err) - goto err_clk_disable; + reset_umac(priv); err = bcmgenet_mii_init(dev); if (err) @@ -3660,9 +3630,7 @@ static int bcmgenet_resume(struct device *d) bcmgenet_umac_reset(priv); - ret = init_umac(priv); - if (ret) - goto out_clk_disable; + init_umac(priv); /* From WOL-enabled suspend, switch to regular clock */ if (priv->wolopts) @@ -3672,9 +3640,6 @@ static int bcmgenet_resume(struct device *d) /* Speed settings must be restored */ bcmgenet_mii_config(priv->dev, false); - /* disable ethernet MAC while updating its registers */ - umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, false); - bcmgenet_set_hw_addr(priv, dev->dev_addr); if (priv->internal_phy) { From patchwork Wed Oct 25 22:04:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830401 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="PE/a2mww"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMkk32Z4mz9t2W for ; Thu, 26 Oct 2017 09:06:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932337AbdJYWFO (ORCPT ); Wed, 25 Oct 2017 18:05:14 -0400 Received: from mail-qt0-f195.google.com ([209.85.216.195]:45068 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751668AbdJYWFK (ORCPT ); Wed, 25 Oct 2017 18:05:10 -0400 Received: by mail-qt0-f195.google.com with SMTP id p1so2003085qtg.2; Wed, 25 Oct 2017 15:05:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=B/a6GvKrBdM0n4/4CDOjPrz6NR7Hfnjypy/WS1HxUGM=; b=PE/a2mwwt+qzpNs1tcDCGKxlGbgE0y1ElQ8XPkMXQMQRiddeY7nV8JWdoOE9XTHC+R qX76nyuyAPPUscZD37a6C245HkHuApIfHxs3zFkrzSC+/StJPaC6Bn/f9iN5j0e4XLLP tn1QGUqWH22R6oY37+llKj/iVr6UDQxbGbLHN+dyPW9xM/U/k73B+NhbTZ1cOGjr6GU/ k8FJC+52JG5sSrZdRAMqs8f+W8D335G9lf9kRMH52C89H0R29tNmc9+rJ+S71H6cI4Uq sWjnuhDfFFDMoAPoBwtkZUBW70VRU1SawP4iDMw8ZFPiRAXjrnx+X8Cf3gmaFnMao4VO /PGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=B/a6GvKrBdM0n4/4CDOjPrz6NR7Hfnjypy/WS1HxUGM=; b=oeZ0jbKvA8SYLx1hw4SfQ+ohnpUnoiNJkumLfN+34bBlD191H6/eiNb6jJ23W6XdoG 8SIMmowTt3aUQ/NaFhjp6NjbEoh7BpXo6H9PruYeaq0r1VturIy9SJMW7irLCr8Md/Vl 0vb33/oYNWjPjK6s2Qs+14CUX2XhjdBmnkKHHHNUBBc7c0/+c+9GZKWNuo1P4xV8sfs2 nnNLn+ZFQZbNx9lv/3yjCsCWhf4b+End8gjSkB/cBj3oU192SAvCYZnqSLtdm8xlANoL aoSYx68iu2K/0dcuxduHTON4c/FJCd9zyrHW/TeEHa8JYeUmGA32ygNp93d9b95pqQS0 fyzw== X-Gm-Message-State: AMCzsaUGu20ubgyTDDpePyNvZ16oKqbZwNgviKAkyRsxS2QH6ln4+r19 PI5mL97B89oF5gfNJ5AU7x8= X-Google-Smtp-Source: ABhQp+QwL+6LYmjuViuUURBl3iOCyRm2awWSEc2svm+U9kvahNJEz/3scO0D8hFWqBvxc6CO7O2KcQ== X-Received: by 10.200.46.109 with SMTP id s42mr32502904qta.94.1508969110061; Wed, 25 Oct 2017 15:05:10 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:09 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 4/9] net: bcmgenet: move NAPI initialization to ring initialization Date: Wed, 25 Oct 2017 15:04:14 -0700 Message-Id: <20171025220419.24951-5-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since each ring has its own NAPI instance it might as well be initialized along with the other ring context. Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 42 +++++--------------------- 1 file changed, 8 insertions(+), 34 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 3da177fa2659..9ce6671e8916 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -2081,6 +2081,10 @@ static void bcmgenet_init_tx_ring(struct bcmgenet_priv *priv, TDMA_WRITE_PTR); bcmgenet_tdma_ring_writel(priv, index, end_ptr * words_per_bd - 1, DMA_END_ADDR); + + /* Initialize Tx NAPI */ + netif_napi_add(priv->dev, &ring->napi, bcmgenet_tx_poll, + NAPI_POLL_WEIGHT); } /* Initialize a RDMA ring */ @@ -2112,6 +2116,10 @@ static int bcmgenet_init_rx_ring(struct bcmgenet_priv *priv, if (ret) return ret; + /* Initialize Rx NAPI */ + netif_napi_add(priv->dev, &ring->napi, bcmgenet_rx_poll, + NAPI_POLL_WEIGHT); + bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_PROD_INDEX); bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_CONS_INDEX); bcmgenet_rdma_ring_writel(priv, index, 1, DMA_MBUF_DONE_THRESH); @@ -2136,20 +2144,6 @@ static int bcmgenet_init_rx_ring(struct bcmgenet_priv *priv, return ret; } -static void bcmgenet_init_tx_napi(struct bcmgenet_priv *priv) -{ - unsigned int i; - struct bcmgenet_tx_ring *ring; - - for (i = 0; i < priv->hw_params->tx_queues; ++i) { - ring = &priv->tx_rings[i]; - netif_tx_napi_add(priv->dev, &ring->napi, bcmgenet_tx_poll, 64); - } - - ring = &priv->tx_rings[DESC_INDEX]; - netif_tx_napi_add(priv->dev, &ring->napi, bcmgenet_tx_poll, 64); -} - static void bcmgenet_enable_tx_napi(struct bcmgenet_priv *priv) { unsigned int i; @@ -2263,9 +2257,6 @@ static void bcmgenet_init_tx_queues(struct net_device *dev) bcmgenet_tdma_writel(priv, dma_priority[1], DMA_PRIORITY_1); bcmgenet_tdma_writel(priv, dma_priority[2], DMA_PRIORITY_2); - /* Initialize Tx NAPI */ - bcmgenet_init_tx_napi(priv); - /* Enable Tx queues */ bcmgenet_tdma_writel(priv, ring_cfg, DMA_RING_CFG); @@ -2275,20 +2266,6 @@ static void bcmgenet_init_tx_queues(struct net_device *dev) bcmgenet_tdma_writel(priv, dma_ctrl, DMA_CTRL); } -static void bcmgenet_init_rx_napi(struct bcmgenet_priv *priv) -{ - unsigned int i; - struct bcmgenet_rx_ring *ring; - - for (i = 0; i < priv->hw_params->rx_queues; ++i) { - ring = &priv->rx_rings[i]; - netif_napi_add(priv->dev, &ring->napi, bcmgenet_rx_poll, 64); - } - - ring = &priv->rx_rings[DESC_INDEX]; - netif_napi_add(priv->dev, &ring->napi, bcmgenet_rx_poll, 64); -} - static void bcmgenet_enable_rx_napi(struct bcmgenet_priv *priv) { unsigned int i; @@ -2391,9 +2368,6 @@ static int bcmgenet_init_rx_queues(struct net_device *dev) ring_cfg |= (1 << DESC_INDEX); dma_ctrl |= (1 << (DESC_INDEX + DMA_RING_BUF_EN_SHIFT)); - /* Initialize Rx NAPI */ - bcmgenet_init_rx_napi(priv); - /* Enable rings */ bcmgenet_rdma_writel(priv, ring_cfg, DMA_RING_CFG); From patchwork Wed Oct 25 22:04:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830403 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aE6RSxFF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMkkZ3CBGz9t2W for ; Thu, 26 Oct 2017 09:06:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752074AbdJYWGn (ORCPT ); Wed, 25 Oct 2017 18:06:43 -0400 Received: from mail-qt0-f193.google.com ([209.85.216.193]:53361 "EHLO mail-qt0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932329AbdJYWFM (ORCPT ); Wed, 25 Oct 2017 18:05:12 -0400 Received: by mail-qt0-f193.google.com with SMTP id n61so1968386qte.10; Wed, 25 Oct 2017 15:05:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=w6vc1zhXq1Fhn9flRuBel2fHNPrGidgW4h/8WPFxVBQ=; b=aE6RSxFFIJ1OYjjJYhHaVbWKPTM2+Go8Lp/SHo9o/8VpVEUcyUV6oWg+AQKGfkLVs6 Y6rYLBsH6pSGK7WOj1H5MPZ7ljUHddKnKfDv0bkygjc3TK8P+tkCFRSIIfUCvhRaBgkh i8Lh/e1QvvKsei4KDpj/Mxy65BGTMIMEuKV4zYQmAWODBJ+q3YVz2761KSxhvMW5s9/U t5GH6RR5cFyVCa33C/A/sHL9NiWuUVPUUMsT6FrV8roT4IabqLhWb8HNUlrspcRJnRzJ Vl73LMHXuHPC3znER9JXEeZU1OMIt7DboecP+U5+YUuNEh+S9GFcKhlK/NFVtgz59HlE Btdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=w6vc1zhXq1Fhn9flRuBel2fHNPrGidgW4h/8WPFxVBQ=; b=ZL5jnMzZuUHDMeNa08i5PyvV18I4Je5RfFg7SVvmZh9t/U4kxQtnhjmvo1w0qREfjU F4op0nhZKYOq73FDKzruY1UrpgmrN4pdVMd18m1+9wYHCyT1JcIW4D6KWeQr48Lft2Cw QqVaL1hqWYAMw47Q5nOWWj3UnvMzr2EpnBtk76A/keXoAvmKLwlI+IX8z7Ct7+ttVo81 78xaOLDU0cJZdzyNT8lEIXpJjdVCvmtVgBkdGuddHGwVnXUpgmCoeg0O9+N0+WbhGOzK MJtfnLKxNqZ8LD9sEzbeNqxcEn3fNCeSr47LYRg44OMG2MVHrJ/cKr7oXPtGAOvMhE5M WEmw== X-Gm-Message-State: AMCzsaWlZJyinKOI1NYCXVjYbKuO7pgI59E3PMkXXQg3/BijjQotqU3P i315YHqJkwuk0kRBbeLYpn4= X-Google-Smtp-Source: ABhQp+SJ1vHwQWwk0X/jVYd3UMO6V5SWql/2hjvGK7EzWpdwfL3DIw5favlExFldMaqdUJj+Y61SNg== X-Received: by 10.200.49.178 with SMTP id h47mr8156213qte.0.1508969111114; Wed, 25 Oct 2017 15:05:11 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:10 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 5/9] net: bcmgenet: cleanup ring interrupt masking and unmasking Date: Wed, 25 Oct 2017 15:04:15 -0700 Message-Id: <20171025220419.24951-6-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since the NAPI interrupts are basically ignored when NAPI is disabled we don't need to mask them within the functions bcmgenet_disable_tx_napi() and bcmgenet_disable_rx_napi(). So wait until all NAPI instances are disabled and mask all of the bcmgenet driver interrupts together in bcmgenet_netif_stop(). The interrupts can still be enabled in the functions bcmgenet_enable_tx_napi() and bcmgenet_enable_rx_napi(), but use the ring context int_enable() method to keep the functionality consistent and the code cleaner. Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 28 +++++--------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 9ce6671e8916..88aacf3bf44f 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -2147,33 +2147,24 @@ static int bcmgenet_init_rx_ring(struct bcmgenet_priv *priv, static void bcmgenet_enable_tx_napi(struct bcmgenet_priv *priv) { unsigned int i; - u32 int0_enable = UMAC_IRQ_TXDMA_DONE; - u32 int1_enable = 0; struct bcmgenet_tx_ring *ring; for (i = 0; i < priv->hw_params->tx_queues; ++i) { ring = &priv->tx_rings[i]; napi_enable(&ring->napi); - int1_enable |= (1 << i); + ring->int_enable(ring); } ring = &priv->tx_rings[DESC_INDEX]; napi_enable(&ring->napi); - - bcmgenet_intrl2_0_writel(priv, int0_enable, INTRL2_CPU_MASK_CLEAR); - bcmgenet_intrl2_1_writel(priv, int1_enable, INTRL2_CPU_MASK_CLEAR); + ring->int_enable(ring); } static void bcmgenet_disable_tx_napi(struct bcmgenet_priv *priv) { unsigned int i; - u32 int0_disable = UMAC_IRQ_TXDMA_DONE; - u32 int1_disable = 0xffff; struct bcmgenet_tx_ring *ring; - bcmgenet_intrl2_0_writel(priv, int0_disable, INTRL2_CPU_MASK_SET); - bcmgenet_intrl2_1_writel(priv, int1_disable, INTRL2_CPU_MASK_SET); - for (i = 0; i < priv->hw_params->tx_queues; ++i) { ring = &priv->tx_rings[i]; napi_disable(&ring->napi); @@ -2269,33 +2260,24 @@ static void bcmgenet_init_tx_queues(struct net_device *dev) static void bcmgenet_enable_rx_napi(struct bcmgenet_priv *priv) { unsigned int i; - u32 int0_enable = UMAC_IRQ_RXDMA_DONE; - u32 int1_enable = 0; struct bcmgenet_rx_ring *ring; for (i = 0; i < priv->hw_params->rx_queues; ++i) { ring = &priv->rx_rings[i]; napi_enable(&ring->napi); - int1_enable |= (1 << (UMAC_IRQ1_RX_INTR_SHIFT + i)); + ring->int_enable(ring); } ring = &priv->rx_rings[DESC_INDEX]; napi_enable(&ring->napi); - - bcmgenet_intrl2_0_writel(priv, int0_enable, INTRL2_CPU_MASK_CLEAR); - bcmgenet_intrl2_1_writel(priv, int1_enable, INTRL2_CPU_MASK_CLEAR); + ring->int_enable(ring); } static void bcmgenet_disable_rx_napi(struct bcmgenet_priv *priv) { unsigned int i; - u32 int0_disable = UMAC_IRQ_RXDMA_DONE; - u32 int1_disable = 0xffff << UMAC_IRQ1_RX_INTR_SHIFT; struct bcmgenet_rx_ring *ring; - bcmgenet_intrl2_0_writel(priv, int0_disable, INTRL2_CPU_MASK_SET); - bcmgenet_intrl2_1_writel(priv, int1_disable, INTRL2_CPU_MASK_SET); - for (i = 0; i < priv->hw_params->rx_queues; ++i) { ring = &priv->rx_rings[i]; napi_disable(&ring->napi); @@ -2888,9 +2870,9 @@ static void bcmgenet_netif_stop(struct net_device *dev) netif_tx_stop_all_queues(dev); phy_stop(priv->phydev); - bcmgenet_intr_disable(priv); bcmgenet_disable_rx_napi(priv); bcmgenet_disable_tx_napi(priv); + bcmgenet_intr_disable(priv); /* Wait for pending work items to complete. Since interrupts are * disabled no new work will be scheduled. From patchwork Wed Oct 25 22:04:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830402 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="MY5o1oqF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMkkK4zk8z9t2W for ; Thu, 26 Oct 2017 09:06:33 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752035AbdJYWGW (ORCPT ); Wed, 25 Oct 2017 18:06:22 -0400 Received: from mail-qk0-f194.google.com ([209.85.220.194]:53182 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932141AbdJYWFN (ORCPT ); Wed, 25 Oct 2017 18:05:13 -0400 Received: by mail-qk0-f194.google.com with SMTP id b15so1979945qkg.9; Wed, 25 Oct 2017 15:05:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Rw9GgEAkSO9vVAPf0RfBRN/spJWzsnk60NEHjDmwobM=; b=MY5o1oqFPkdUrRx30dYDZqf2kY42Hau87t7RKke0mnTdHCAmzk2RSPuYDKfRs38FqX LkDTABXFsVP001UYCQ4Kg+GLGf/NJ8wd+19G/zio0tAjGsYlp7Uo0bCoFNVoGhBBHGZ/ EEr7KAE2J4d1sslo+0C9UghFEA9zxauMExlL+7DWdIsA//hqYvcCNpl+ktsNTYilkI5v BrdWhxIRFq3X0V9DIsdsy7F9d/JOLC//dQCL7465BOSRIwW7CgoI/VEYFBfqtdLlbz/y B0abgU1/kv0X84EFCOZBF7raTKmzpfi+RSj1SsqQVVNobaHKFPJyuQ8drpQtyCAATSg/ wB4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Rw9GgEAkSO9vVAPf0RfBRN/spJWzsnk60NEHjDmwobM=; b=QAYdDQnS8qKXsGuDvcVQ6YCJk63sQpfVl7yadp1mikpUoE/zPXa14aGYwU/LdvuUhX jc2etY5nv3yzkHJ3ZWmfE3Jk5dPRSqJRAcCbngaUKhGcp49P2wPKLUmNjQ/Ay9U/8K3l PSDZTyCDHxEQPn0EqS75D9eaM4kijxwQwf8Z0KkuYt2m3jGLcM8NK/MnvgKOXL5d4IVC RAygGkeNTBDVZRNnLD94jrldeLL0QCPXfv6yZNxN2PasXwcvB9N8wpTdLR96pKLp6eB8 Ds9B6XLAZprwthfXAkXcPnI+c2pjD8f39o3YMhOtFtSK7ahX2Sc6XRLPUQBoa1seAm7Q CA3Q== X-Gm-Message-State: AMCzsaX9TpLM48HehfsAN0In/Fo+iC49aMgXbsl7Bbo2a89B3XHS2qa+ L0FvAvOiqxp07N5nGlMQtA3cT6Qh X-Google-Smtp-Source: ABhQp+R2y0V1sG8utqAKW0oQ9+8abCQF0vrS08NTiE7yX8SAR23INU2L43K4+oJh6+gAl5R141rN8w== X-Received: by 10.55.98.205 with SMTP id w196mr5580541qkb.322.1508969112305; Wed, 25 Oct 2017 15:05:12 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:11 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 6/9] net: bcmgenet: rework bcmgenet_netif_start and bcmgenet_netif_stop Date: Wed, 25 Oct 2017 15:04:16 -0700 Message-Id: <20171025220419.24951-7-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This commit consolidates more common functionality from bcmgenet_close and bcmgenet_suspend into bcmgenet_netif_stop and modifies the start and stop sequences to better suit the design of the GENET hardware. Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 49 +++++++++----------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 88aacf3bf44f..747224714394 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -2763,11 +2763,11 @@ static void bcmgenet_netif_start(struct net_device *dev) /* Start the network engine */ bcmgenet_enable_rx_napi(priv); - bcmgenet_enable_tx_napi(priv); umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, true); netif_tx_start_all_queues(dev); + bcmgenet_enable_tx_napi(priv); /* Monitor link interrupts now */ bcmgenet_link_intr_enable(priv); @@ -2868,10 +2868,19 @@ static void bcmgenet_netif_stop(struct net_device *dev) { struct bcmgenet_priv *priv = netdev_priv(dev); + bcmgenet_disable_tx_napi(priv); netif_tx_stop_all_queues(dev); + + /* Disable MAC receive */ + umac_enable_set(priv, CMD_RX_EN, false); + + bcmgenet_dma_teardown(priv); + + /* Disable MAC transmit. TX DMA disabled must be done before this */ + umac_enable_set(priv, CMD_TX_EN, false); + phy_stop(priv->phydev); bcmgenet_disable_rx_napi(priv); - bcmgenet_disable_tx_napi(priv); bcmgenet_intr_disable(priv); /* Wait for pending work items to complete. Since interrupts are @@ -2883,12 +2892,16 @@ static void bcmgenet_netif_stop(struct net_device *dev) priv->old_speed = -1; priv->old_duplex = -1; priv->old_pause = -1; + + /* tx reclaim */ + bcmgenet_tx_reclaim_all(dev); + bcmgenet_fini_dma(priv); } static int bcmgenet_close(struct net_device *dev) { struct bcmgenet_priv *priv = netdev_priv(dev); - int ret; + int ret = 0; netif_dbg(priv, ifdown, dev, "bcmgenet_close\n"); @@ -2897,20 +2910,6 @@ static int bcmgenet_close(struct net_device *dev) /* Really kill the PHY state machine and disconnect from it */ phy_disconnect(priv->phydev); - /* Disable MAC receive */ - umac_enable_set(priv, CMD_RX_EN, false); - - ret = bcmgenet_dma_teardown(priv); - if (ret) - return ret; - - /* Disable MAC transmit. TX DMA disabled must be done before this */ - umac_enable_set(priv, CMD_TX_EN, false); - - /* tx reclaim */ - bcmgenet_tx_reclaim_all(dev); - bcmgenet_fini_dma(priv); - free_irq(priv->irq0, priv); free_irq(priv->irq1, priv); @@ -3522,7 +3521,7 @@ static int bcmgenet_suspend(struct device *d) { struct net_device *dev = dev_get_drvdata(d); struct bcmgenet_priv *priv = netdev_priv(dev); - int ret; + int ret = 0; if (!netif_running(dev)) return 0; @@ -3534,20 +3533,6 @@ static int bcmgenet_suspend(struct device *d) netif_device_detach(dev); - /* Disable MAC receive */ - umac_enable_set(priv, CMD_RX_EN, false); - - ret = bcmgenet_dma_teardown(priv); - if (ret) - return ret; - - /* Disable MAC transmit. TX DMA disabled must be done before this */ - umac_enable_set(priv, CMD_TX_EN, false); - - /* tx reclaim */ - bcmgenet_tx_reclaim_all(dev); - bcmgenet_fini_dma(priv); - /* Prepare the device for Wake-on-LAN and switch to the slow clock */ if (device_may_wakeup(d) && priv->wolopts) { ret = bcmgenet_power_down(priv, GENET_POWER_WOL_MAGIC); From patchwork Wed Oct 25 22:04:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830399 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nhr/g4Oi"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMkjK2kfQz9t4V for ; Thu, 26 Oct 2017 09:05:41 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932400AbdJYWFV (ORCPT ); Wed, 25 Oct 2017 18:05:21 -0400 Received: from mail-qk0-f193.google.com ([209.85.220.193]:54476 "EHLO mail-qk0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932340AbdJYWFO (ORCPT ); Wed, 25 Oct 2017 18:05:14 -0400 Received: by mail-qk0-f193.google.com with SMTP id n5so1971875qke.11; Wed, 25 Oct 2017 15:05:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JApzyhj8DxeACQKcu8uB2Geh0yH2PWXE49pUbZPKfAQ=; b=nhr/g4Oi0tGdoS25F0Smd3I5MAY48wqDFnJypwH6jU3dTK0QgXoPzSQ5HNxc0NYIPS oqpTiWM65jZV85+btm1rIHRFn2Eo3dOXN4QVJTtIUf4HUxrydAatRBRJZJ91f7NyCBHD GfR+0b83aK02d5u0pzfHH1NALIzW2v1BHPqy2cDiKIumeAxSiOrvIUQhQ65faQlacT4a qXF81jeOCssZHz0mkaefQiTgUb5+DdzbP6P7/4jKbnKCtFvCK9LqvQJZTHOnaOeZeIx0 vgu0Kzmr58fQN0/HRKkNRnewRGxHI+GQOSdjzc2ieEvFlZRiXu/YHHcXAMiJJkeaY1ra i7lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=JApzyhj8DxeACQKcu8uB2Geh0yH2PWXE49pUbZPKfAQ=; b=OZTS4jl+CdRyliBsEmkKcDPehD6UBDisNKGmPgA6p0jXRkYidF4LoM/EyfXzkqhTlX 9CXNXQeu24IEBBBhPUXigIbqJePRL53W7UM2qT0sOE/KwekuLtI1ya2YsngWJLOnOdJh EhRr+92/zYzi4pPke5VtZjNKXrHAkORn2131eY1iU01xGgsURDxsP7zMP4/G1hVlMyN7 rS9wy7g9WgWo9DMz8T0yV++TR8MqutuPg+3qgZ0fzqaVJU7y6SwP3bJWRLadrSuODSWQ CkvjIkZigLmH31YLtkwVekzgbpzlk2muU5E1YY6LuypyNIPHouyIKJAWfwUdIL9zU9gT aHYA== X-Gm-Message-State: AMCzsaU5iSB5WueqPhPziaUtItxCZ1SPfm28bKigk7RIbFq4jAU8hdRw 929z1BJxeoJsDfRZ1xJCeErKgvyO X-Google-Smtp-Source: ABhQp+QdJkeXxrDmeW85SFPFcbERrEn2C0B5T4wBmtk1ocN6rUdzjKQAzIUsyJVcElX42oA0uk4X+Q== X-Received: by 10.55.180.132 with SMTP id d126mr5640928qkf.268.1508969113576; Wed, 25 Oct 2017 15:05:13 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:12 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 7/9] net: bcmgenet: relax lock constraints to reduce IRQ latency Date: Wed, 25 Oct 2017 15:04:17 -0700 Message-Id: <20171025220419.24951-8-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since the ring locks are not used in a hard IRQ context it is often not necessary to disable global IRQs while waiting on a lock. Using less restrictive lock and unlock calls improves the real-time responsiveness of the system. Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 747224714394..91f52c1b5108 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -1405,11 +1405,10 @@ static unsigned int bcmgenet_tx_reclaim(struct net_device *dev, struct bcmgenet_tx_ring *ring) { unsigned int released; - unsigned long flags; - spin_lock_irqsave(&ring->lock, flags); + spin_lock_bh(&ring->lock); released = __bcmgenet_tx_reclaim(dev, ring); - spin_unlock_irqrestore(&ring->lock, flags); + spin_unlock_bh(&ring->lock); return released; } @@ -1420,15 +1419,14 @@ static int bcmgenet_tx_poll(struct napi_struct *napi, int budget) container_of(napi, struct bcmgenet_tx_ring, napi); unsigned int work_done = 0; struct netdev_queue *txq; - unsigned long flags; - spin_lock_irqsave(&ring->lock, flags); + spin_lock(&ring->lock); work_done = __bcmgenet_tx_reclaim(ring->priv->dev, ring); if (ring->free_bds > (MAX_SKB_FRAGS + 1)) { txq = netdev_get_tx_queue(ring->priv->dev, ring->queue); netif_tx_wake_queue(txq); } - spin_unlock_irqrestore(&ring->lock, flags); + spin_unlock(&ring->lock); if (work_done == 0) { napi_complete(napi); @@ -1523,7 +1521,6 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev) struct bcmgenet_tx_ring *ring = NULL; struct enet_cb *tx_cb_ptr; struct netdev_queue *txq; - unsigned long flags = 0; int nr_frags, index; dma_addr_t mapping; unsigned int size; @@ -1550,7 +1547,7 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev) nr_frags = skb_shinfo(skb)->nr_frags; - spin_lock_irqsave(&ring->lock, flags); + spin_lock(&ring->lock); if (ring->free_bds <= (nr_frags + 1)) { if (!netif_tx_queue_stopped(txq)) { netif_tx_stop_queue(txq); @@ -1645,7 +1642,7 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev) bcmgenet_tdma_ring_writel(priv, ring->index, ring->prod_index, TDMA_PROD_INDEX); out: - spin_unlock_irqrestore(&ring->lock, flags); + spin_unlock(&ring->lock); return ret; @@ -2520,17 +2517,16 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv) /* Interrupt bottom half */ static void bcmgenet_irq_task(struct work_struct *work) { - unsigned long flags; unsigned int status; struct bcmgenet_priv *priv = container_of( work, struct bcmgenet_priv, bcmgenet_irq_work); netif_dbg(priv, intr, priv->dev, "%s\n", __func__); - spin_lock_irqsave(&priv->lock, flags); + spin_lock_irq(&priv->lock); status = priv->irq0_stat; priv->irq0_stat = 0; - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock_irq(&priv->lock); /* Link UP/DOWN event */ if (status & UMAC_IRQ_LINK_EVENT) @@ -2927,7 +2923,6 @@ static void bcmgenet_dump_tx_queue(struct bcmgenet_tx_ring *ring) u32 p_index, c_index, intsts, intmsk; struct netdev_queue *txq; unsigned int free_bds; - unsigned long flags; bool txq_stopped; if (!netif_msg_tx_err(priv)) @@ -2935,7 +2930,7 @@ static void bcmgenet_dump_tx_queue(struct bcmgenet_tx_ring *ring) txq = netdev_get_tx_queue(priv->dev, ring->queue); - spin_lock_irqsave(&ring->lock, flags); + spin_lock(&ring->lock); if (ring->index == DESC_INDEX) { intsts = ~bcmgenet_intrl2_0_readl(priv, INTRL2_CPU_MASK_STATUS); intmsk = UMAC_IRQ_TXDMA_DONE | UMAC_IRQ_TXDMA_MBDONE; @@ -2947,7 +2942,7 @@ static void bcmgenet_dump_tx_queue(struct bcmgenet_tx_ring *ring) p_index = bcmgenet_tdma_ring_readl(priv, ring->index, TDMA_PROD_INDEX); txq_stopped = netif_tx_queue_stopped(txq); free_bds = ring->free_bds; - spin_unlock_irqrestore(&ring->lock, flags); + spin_unlock(&ring->lock); netif_err(priv, tx_err, priv->dev, "Ring %d queue %d status summary\n" "TX queue status: %s, interrupts: %s\n" From patchwork Wed Oct 25 22:04:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830398 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="DTjxcF2a"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMkjC1l9mz9t2W for ; Thu, 26 Oct 2017 09:05:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932410AbdJYWFX (ORCPT ); Wed, 25 Oct 2017 18:05:23 -0400 Received: from mail-qk0-f195.google.com ([209.85.220.195]:43840 "EHLO mail-qk0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932367AbdJYWFP (ORCPT ); Wed, 25 Oct 2017 18:05:15 -0400 Received: by mail-qk0-f195.google.com with SMTP id w134so2019047qkb.0; Wed, 25 Oct 2017 15:05:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=5UEF0LTibeTlK0jOa8FarYKCAhIod0WHV5h3rdN706w=; b=DTjxcF2amx1G+2mKIYfiEuQWBTFQ6oCHhqLwB/aYKHwys7QV9ZAnP0hLfF7o/nfzqq UtC334wF1gaANx81QXuqTsPPd08mWuzNpdbZ6rjxGO0vg0NR+zf/lm35h0mHZ8fnufru dp5w1QGLWteJZ2qtF0iUt1moy0ZxYxq4fWlRQGtkhOtu/47iwJxKS6fjlMKg/R+upsbo trJa+hsjQJlbNGgVr4HeJFLCKzVKTEiKdxyte9DvLHcIUQAuUHNaGnaq1N9rOh6jcXfM joBRLScu2jnyi0LREIj4QeJrdy0m6H6b1AnHslhDLoSBF5LFHQI2P5UqYmX0ybOSNIal WzHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=5UEF0LTibeTlK0jOa8FarYKCAhIod0WHV5h3rdN706w=; b=CMpNNOQfJ0a/k1HbRmyrJ9Jk7236nqVrjpwmnGvFGkSWG2vCRXprnF4487Nf5aesPo f7ofAGMs5ELa0bEvd4EsBa/OEkdHzm9N83AdbkQXzMvqU5xeLQvRhX8uxFiemCcOfw5U 9NdUUKZHtBBK7Jp+X4rCGLmHMEq4EOne2La3mNunfcXWYxV3jAhmajMXSKDPo8L2Bp1X kiIwiQTjmVIi8CADTjG1UNfUWACVnUcmpSdpr+L1jSkc1nxX8e9QjtwcAWPqnFCGe0Jb VtK+mmgP63e1EaDCcbZrXtAZ7n8p97y/CfQ6OTq+kb1cPffqjvPVXjqgc0UOAc88ZQPO D8RA== X-Gm-Message-State: AMCzsaXCPPjrfHmowdAMxejsYilOq1ieE5GowNuNLFu4F3Uzmjpr73ds dy986RqeD7RqCVZG2mOn1AOukjbe X-Google-Smtp-Source: ABhQp+Tkaov5C3ZIxqJCqp9LUQWCFiZOWDLh2PI3RKRsO8RaBvuM1oDciy58gxk4ir8t7uW4cb6yzg== X-Received: by 10.55.186.196 with SMTP id k187mr4989763qkf.94.1508969114814; Wed, 25 Oct 2017 15:05:14 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:14 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 8/9] Revert "net: bcmgenet: Software reset EPHY after power on" Date: Wed, 25 Oct 2017 15:04:18 -0700 Message-Id: <20171025220419.24951-9-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org With commit f7d72996e222 ("net: bcmgenet: enable loopback during UniMAC sw_reset") it is no longer necessary to force the software reset of the internal EPHY before resetting the UniMAC to ensure a clean reset. Therefore this commit reverts commit 5dbebbb44a6a ("net: bcmgenet: Software reset EPHY after power on"). Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 1 - drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 - drivers/net/ethernet/broadcom/genet/bcmmii.c | 16 ---------------- 3 files changed, 18 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 91f52c1b5108..54b09a01cb2c 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -1172,7 +1172,6 @@ static void bcmgenet_power_up(struct bcmgenet_priv *priv, } bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT); bcmgenet_phy_power_set(priv->dev, true); - bcmgenet_mii_reset(priv->dev); break; case GENET_POWER_CABLE_SENSE: diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h index 4c49d0b97748..35f18a8d1ce6 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h @@ -711,7 +711,6 @@ int bcmgenet_mii_init(struct net_device *dev); int bcmgenet_mii_config(struct net_device *dev, bool init); int bcmgenet_mii_probe(struct net_device *dev); void bcmgenet_mii_exit(struct net_device *dev); -void bcmgenet_mii_reset(struct net_device *dev); void bcmgenet_phy_power_set(struct net_device *dev, bool enable); void bcmgenet_mii_setup(struct net_device *dev); diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index 18f5723be2c9..a5ae9b78389c 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -121,22 +121,6 @@ static int bcmgenet_fixed_phy_link_update(struct net_device *dev, return 0; } -/* Perform a voluntary PHY software reset, since the EPHY is very finicky about - * not doing it and will start corrupting packets - */ -void bcmgenet_mii_reset(struct net_device *dev) -{ - struct bcmgenet_priv *priv = netdev_priv(dev); - - if (GENET_IS_V4(priv)) - return; - - if (priv->phydev) { - phy_init_hw(priv->phydev); - phy_start_aneg(priv->phydev); - } -} - void bcmgenet_phy_power_set(struct net_device *dev, bool enable) { struct bcmgenet_priv *priv = netdev_priv(dev); From patchwork Wed Oct 25 22:04:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 830400 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="N+eumIG0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yMkjs5grXz9t2W for ; Thu, 26 Oct 2017 09:06:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932430AbdJYWF5 (ORCPT ); Wed, 25 Oct 2017 18:05:57 -0400 Received: from mail-qt0-f194.google.com ([209.85.216.194]:51082 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932198AbdJYWFR (ORCPT ); Wed, 25 Oct 2017 18:05:17 -0400 Received: by mail-qt0-f194.google.com with SMTP id d9so1985210qtd.7; Wed, 25 Oct 2017 15:05:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=z4ol0SJSMI+CTueEUFR5B8l1D673vh9e9lDJ10SI6+E=; b=N+eumIG0HdrPGWyk/1JW1bmQmee+AEGBh2HVlR5GQPKdO5qK9l+0TS+ekjjTtFNToY nsdLhl6nTs8UiBEcLFM0+SoVvMbZr/2gd1D4H4uRGoQzwyybqpBUzHjyuAOcG7WwpQLe UOe9LXJV3LnhpBC3iTep2/0hbIknAfinN7ayDl7wjI4VqXHIepkc9tp3MZb0SrTZL8KB EFruNvI6HPu+saCPpW5F6e7frJmt1z+twEP6wWdxZuM6Lkl2nGpydtIiMitjyhz8m4r9 hdoO3JWaTn3maWZ50e+UXGh0GClzILW7JmaoTa9RyozQ3myZURFDrSkzoCulLqRwpM23 nL8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=z4ol0SJSMI+CTueEUFR5B8l1D673vh9e9lDJ10SI6+E=; b=fGmNZpqkd/I1kC3AXFNc/c8fefe4qDjysfnmpZP+zw4nlPjtjHgJtBVpLGyP/FNHjD bCV01pIVLXCJb1/Bmct1Bd+aMyYsFDJkc09n4kIOnCPn3/xuhyRyuYIgR7fTyBhuYV6U jBtY8XJY92S4tuUdukc6BSSboX2lC7hOmVNpO/C3a4laIcV5ktUSUty5vdA8IYXq4D84 NK6Qla9tF5yDK1oV8Rz0NeZfpAWy8tyDhT7J8RigPDiHFFfhCqnl6PZnb2gRpH5Xp4fF gvDwoDeT5KANluaVbnuwyGl+12h0auKaK0G9oZRH9rNQrYWO1agPHGy1w5dP1DJtd5D0 QyPQ== X-Gm-Message-State: AMCzsaWns/Q+ie2efrWHxZiJNBC5tDhxRF2StZsFFjABDL4h59DDzMKx UU+TNgUXxWkL5PQkrea8ND7mjE0d X-Google-Smtp-Source: ABhQp+QZTBl8HIPfXGlUTn2nj3nMXo2ndoh6IBzk88HMBXYRcV3+ZtpLTtOAP9g6NfSr7Y32X6jrZQ== X-Received: by 10.237.56.226 with SMTP id k89mr30913175qte.320.1508969115806; Wed, 25 Oct 2017 15:05:15 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id f38sm2690246qtf.17.2017.10.25.15.05.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 15:05:15 -0700 (PDT) From: Doug Berger To: Florian Fainelli Cc: Doug Berger , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 9/9] net: bcmgenet: use dev->phydev instead of priv->phydev Date: Wed, 25 Oct 2017 15:04:19 -0700 Message-Id: <20171025220419.24951-10-opendmb@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171025220419.24951-1-opendmb@gmail.com> References: <20171025220419.24951-1-opendmb@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Now that the software reset of the PHY has been removed it is no longer necessary to retain a private pointer to the phydev for use when the PHY is detached (which isn't generally safe anyway). The driver now uses the phydev member attached to the net_device. For ethtool commands that have a PHY component, an explicit check is made to prevent accessing an invalid phydev pointer when one is not attached (e.g. interface is down). Signed-off-by: Doug Berger --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 47 +++++++++++++------------- drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 - drivers/net/ethernet/broadcom/genet/bcmmii.c | 17 ++++------ 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 54b09a01cb2c..9713374ebf14 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -488,15 +488,13 @@ static void bcmgenet_complete(struct net_device *dev) static int bcmgenet_get_link_ksettings(struct net_device *dev, struct ethtool_link_ksettings *cmd) { - struct bcmgenet_priv *priv = netdev_priv(dev); - if (!netif_running(dev)) return -EINVAL; - if (!priv->phydev) + if (!dev->phydev) return -ENODEV; - phy_ethtool_ksettings_get(priv->phydev, cmd); + phy_ethtool_ksettings_get(dev->phydev, cmd); return 0; } @@ -504,15 +502,13 @@ static int bcmgenet_get_link_ksettings(struct net_device *dev, static int bcmgenet_set_link_ksettings(struct net_device *dev, const struct ethtool_link_ksettings *cmd) { - struct bcmgenet_priv *priv = netdev_priv(dev); - if (!netif_running(dev)) return -EINVAL; - if (!priv->phydev) + if (!dev->phydev) return -ENODEV; - return phy_ethtool_ksettings_set(priv->phydev, cmd); + return phy_ethtool_ksettings_set(dev->phydev, cmd); } static int bcmgenet_set_rx_csum(struct net_device *dev, @@ -1042,11 +1038,14 @@ static int bcmgenet_get_eee(struct net_device *dev, struct ethtool_eee *e) if (GENET_IS_V1(priv)) return -EOPNOTSUPP; + if (!dev->phydev) + return -ENODEV; + e->eee_enabled = p->eee_enabled; e->eee_active = p->eee_active; e->tx_lpi_timer = bcmgenet_umac_readl(priv, UMAC_EEE_LPI_TIMER); - return phy_ethtool_get_eee(priv->phydev, e); + return phy_ethtool_get_eee(dev->phydev, e); } static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) @@ -1058,12 +1057,15 @@ static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) if (GENET_IS_V1(priv)) return -EOPNOTSUPP; + if (!dev->phydev) + return -ENODEV; + p->eee_enabled = e->eee_enabled; if (!p->eee_enabled) { bcmgenet_eee_enable_set(dev, false); } else { - ret = phy_init_eee(priv->phydev, 0); + ret = phy_init_eee(dev->phydev, 0); if (ret) { netif_err(priv, hw, dev, "EEE initialization failed\n"); return ret; @@ -1073,7 +1075,7 @@ static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) bcmgenet_eee_enable_set(dev, true); } - return phy_ethtool_set_eee(priv->phydev, e); + return phy_ethtool_set_eee(dev->phydev, e); } /* standard ethtool support functions. */ @@ -1107,7 +1109,7 @@ static int bcmgenet_power_down(struct bcmgenet_priv *priv, switch (mode) { case GENET_POWER_CABLE_SENSE: - phy_detach(priv->phydev); + phy_detach(priv->dev->phydev); break; case GENET_POWER_WOL_MAGIC: @@ -1192,15 +1194,13 @@ static void bcmgenet_power_up(struct bcmgenet_priv *priv, /* ioctl handle special commands that are not present in ethtool. */ static int bcmgenet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { - struct bcmgenet_priv *priv = netdev_priv(dev); - if (!netif_running(dev)) return -EINVAL; - if (!priv->phydev) + if (!dev->phydev) return -ENODEV; - return phy_mii_ioctl(priv->phydev, rq, cmd); + return phy_mii_ioctl(dev->phydev, rq, cmd); } static struct enet_cb *bcmgenet_get_txcb(struct bcmgenet_priv *priv, @@ -2529,7 +2529,7 @@ static void bcmgenet_irq_task(struct work_struct *work) /* Link UP/DOWN event */ if (status & UMAC_IRQ_LINK_EVENT) - phy_mac_interrupt(priv->phydev, + phy_mac_interrupt(priv->dev->phydev, !!(status & UMAC_IRQ_LINK_UP)); } @@ -2767,7 +2767,7 @@ static void bcmgenet_netif_start(struct net_device *dev) /* Monitor link interrupts now */ bcmgenet_link_intr_enable(priv); - phy_start(priv->phydev); + phy_start(dev->phydev); } static int bcmgenet_open(struct net_device *dev) @@ -2874,7 +2874,7 @@ static void bcmgenet_netif_stop(struct net_device *dev) /* Disable MAC transmit. TX DMA disabled must be done before this */ umac_enable_set(priv, CMD_TX_EN, false); - phy_stop(priv->phydev); + phy_stop(dev->phydev); bcmgenet_disable_rx_napi(priv); bcmgenet_intr_disable(priv); @@ -2903,7 +2903,7 @@ static int bcmgenet_close(struct net_device *dev) bcmgenet_netif_stop(dev); /* Really kill the PHY state machine and disconnect from it */ - phy_disconnect(priv->phydev); + phy_disconnect(dev->phydev); free_irq(priv->irq0, priv); free_irq(priv->irq1, priv); @@ -3523,7 +3523,7 @@ static int bcmgenet_suspend(struct device *d) bcmgenet_netif_stop(dev); if (!device_may_wakeup(d)) - phy_suspend(priv->phydev); + phy_suspend(dev->phydev); netif_device_detach(dev); @@ -3571,7 +3571,8 @@ static int bcmgenet_resume(struct device *d) if (priv->wolopts) clk_disable_unprepare(priv->clk_wol); - phy_init_hw(priv->phydev); + phy_init_hw(dev->phydev); + /* Speed settings must be restored */ bcmgenet_mii_config(priv->dev, false); @@ -3602,7 +3603,7 @@ static int bcmgenet_resume(struct device *d) netif_device_attach(dev); if (!device_may_wakeup(d)) - phy_resume(priv->phydev); + phy_resume(dev->phydev); if (priv->eee.eee_enabled) bcmgenet_eee_enable_set(dev, true); diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h index 35f18a8d1ce6..3c50431ccd2a 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h @@ -617,7 +617,6 @@ struct bcmgenet_priv { /* MDIO bus variables */ wait_queue_head_t wq; - struct phy_device *phydev; bool internal_phy; struct device_node *phy_dn; struct device_node *mdio_dn; diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index a5ae9b78389c..ba3fcfdaa0bc 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -34,7 +34,7 @@ void bcmgenet_mii_setup(struct net_device *dev) { struct bcmgenet_priv *priv = netdev_priv(dev); - struct phy_device *phydev = priv->phydev; + struct phy_device *phydev = dev->phydev; u32 reg, cmd_bits = 0; bool status_changed = false; @@ -166,14 +166,14 @@ static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv) } if (priv->hw_params->flags & GENET_HAS_MOCA_LINK_DET) - fixed_phy_set_link_update(priv->phydev, + fixed_phy_set_link_update(priv->dev->phydev, bcmgenet_fixed_phy_link_update); } int bcmgenet_mii_config(struct net_device *dev, bool init) { struct bcmgenet_priv *priv = netdev_priv(dev); - struct phy_device *phydev = priv->phydev; + struct phy_device *phydev = dev->phydev; struct device *kdev = &priv->pdev->dev; const char *phy_name = NULL; u32 id_mode_dis = 0; @@ -220,7 +220,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) * capabilities, use that knowledge to also configure the * Reverse MII interface correctly. */ - if ((priv->phydev->supported & PHY_BASIC_FEATURES) == + if ((dev->phydev->supported & PHY_BASIC_FEATURES) == PHY_BASIC_FEATURES) port_ctrl = PORT_MODE_EXT_RVMII_25; else @@ -290,7 +290,7 @@ int bcmgenet_mii_probe(struct net_device *dev) return -ENODEV; } } else { - phydev = priv->phydev; + phydev = dev->phydev; phydev->dev_flags = phy_flags; ret = phy_connect_direct(dev, phydev, bcmgenet_mii_setup, @@ -301,8 +301,6 @@ int bcmgenet_mii_probe(struct net_device *dev) } } - priv->phydev = phydev; - /* Configure port multiplexer based on what the probed PHY device since * reading the 'max-speed' property determines the maximum supported * PHY speed which is needed for bcmgenet_mii_config() to configure @@ -310,7 +308,7 @@ int bcmgenet_mii_probe(struct net_device *dev) */ ret = bcmgenet_mii_config(dev, true); if (ret) { - phy_disconnect(priv->phydev); + phy_disconnect(dev->phydev); return ret; } @@ -320,7 +318,7 @@ int bcmgenet_mii_probe(struct net_device *dev) * Ethernet MAC ISRs */ if (priv->internal_phy) - priv->phydev->irq = PHY_IGNORE_INTERRUPT; + dev->phydev->irq = PHY_IGNORE_INTERRUPT; return 0; } @@ -529,7 +527,6 @@ static int bcmgenet_mii_pd_init(struct bcmgenet_priv *priv) } - priv->phydev = phydev; priv->phy_interface = pd->phy_interface; return 0;