From patchwork Sun Sep 26 03:21:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 12517897 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3EDFAC433EF for ; Sun, 26 Sep 2021 03:21:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 213776103B for ; Sun, 26 Sep 2021 03:21:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230406AbhIZDXG (ORCPT ); Sat, 25 Sep 2021 23:23:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230387AbhIZDXE (ORCPT ); Sat, 25 Sep 2021 23:23:04 -0400 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 363FAC061570; Sat, 25 Sep 2021 20:21:29 -0700 (PDT) Received: by mail-pj1-x102a.google.com with SMTP id rm6-20020a17090b3ec600b0019ece2bdd20so905292pjb.1; Sat, 25 Sep 2021 20:21:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dpRrnSPbQlkQDUq6GjhJCeuuF152rh7juMuC8piy7Ow=; b=Cqh5Te9/5LaqOM4esVQbaf+f20PGsrirj6vVaxAlR9fA+RZU6i04s/SmyyclLVFT0Y L3cb2e2Ws5VCPaN0+c6hBZKoe03Sv3Kf10909zj06GA2nmVKriPhIfGtV/K16J9K3Jfs YFxdpgujWd7s1YD8jTJGptYt4W89MgKFFHPJT5FdEuDbaMjhs2qGSH4KdSngqsRmK52g 3mGKHl0c/YsE+EfkaZQRATrp7PDYRD/m38SL6tfn3ovMJLU7fRssBRhSPT7drXmdYLKY WVI8G1oPdkeo8wHrxE2HxTbYcmHEvwTu9Q0jpfLns2asiCzVPk6aDZsODeW8hcmKE8nx v2Sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dpRrnSPbQlkQDUq6GjhJCeuuF152rh7juMuC8piy7Ow=; b=kc5b0X3L05FtU4LYeDomjsMJXy0zgtyXUpiSOeuG5WDI3uGIS7MK8H2XaNTmFa3qeW iYX4CUGEEHSFys9WeKq8svYEVRXZGtmQA5tdloD7/reCQw8fxRepEs/7W9rz9ZaI/kqZ LQoQ/Gnh+JJ4r0pLTtxevOZpXOO+cbeMSLUlGD6ArKtAYlTW2cntrZ95vl0Jto5ZeqiV mtUF63gJOkjAI7EXk1VOuO5u//euJL0gyBi/FOf03erLQcRysZM2pmwTC8x7eA3ip364 /uj04QdgNJ7jmdYCnfyvqGNzdKsFse2TEcIF6RsnpC14wBj4v8Qo1aqitaKBotUgiO1+ eRvw== X-Gm-Message-State: AOAM530lByIHikiZXwGxoJVVe0uuzSY6DX7O1umrIa8v8jH7w/Ww+lB7 rG5Z9mHVx88EILVonSqQZCSjS9v0+oo= X-Google-Smtp-Source: ABdhPJzbWfx6yybUgoubx+Fdu/ccdf6oo2jqKOyYxZunZjWZHfU3ZN7DN7qc0BejxAHnysfU0Kljbg== X-Received: by 2002:a17:902:9882:b0:13e:1749:daae with SMTP id s2-20020a170902988200b0013e1749daaemr2240334plp.60.1632626488408; Sat, 25 Sep 2021 20:21:28 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r13sm14205312pgl.90.2021.09.25.20.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Sep 2021 20:21:27 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Doug Berger , Florian Fainelli , "David S. Miller" , Jakub Kicinski , bcm-kernel-feedback-list@broadcom.com (open list:BROADCOM GENET ETHERNET DRIVER), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 1/4] net: bcmgenet: remove netif_carrier_off from adjust_link Date: Sat, 25 Sep 2021 20:21:11 -0700 Message-Id: <20210926032114.1785872-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210926032114.1785872-1-f.fainelli@gmail.com> References: <20210926032114.1785872-1-f.fainelli@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Doug Berger The bcmgenet_mii_setup() function is registered as the adjust_link callback from the phylib for the GENET driver. The phylib always sets the netif_carrier according to phydev->link prior to invoking the adjust_link callback, so there is no need to repeat that in the link down case within the network driver. Signed-off-by: Doug Berger Signed-off-by: Florian Fainelli Reviewed-by: Andrew Lunn --- drivers/net/ethernet/broadcom/genet/bcmmii.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index ff1efd52ce16..8a9d8ceaa5bf 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -106,9 +106,6 @@ void bcmgenet_mii_setup(struct net_device *dev) /* done if nothing has changed */ if (!status_changed) return; - - /* needed for MoCA fixed PHY to reflect correct link status */ - netif_carrier_off(dev); } phy_print_status(phydev); From patchwork Sun Sep 26 03:21:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 12517899 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04326C433FE for ; Sun, 26 Sep 2021 03:21:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E06AA60F13 for ; Sun, 26 Sep 2021 03:21:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230451AbhIZDXL (ORCPT ); Sat, 25 Sep 2021 23:23:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230425AbhIZDXI (ORCPT ); Sat, 25 Sep 2021 23:23:08 -0400 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 409D9C061570; Sat, 25 Sep 2021 20:21:33 -0700 (PDT) Received: by mail-pj1-x1035.google.com with SMTP id g13-20020a17090a3c8d00b00196286963b9so12626680pjc.3; Sat, 25 Sep 2021 20:21:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cWqCmkgYZbhNc72xE0V2U1y0S+admUaRv//gvOMoO70=; b=nuZkSSjtLUTUBtgsEdvK0ekAKgptGy67bzOyptrzG530dvAHeW7aK1Q2sWz69Sgtm8 8Rn4vW+P5pkUkPDA6C2kXk8oTyO9UQ9Qbn97Neqp4LExl6NfTxZ6Q269gUiT/SShPkjR 0BFvvO+FRxOsb4f1s+LzD5scJKF0V9bAcOn5rSiqrqHp2P8sBYgW7FIsIbH6XLlKzziE pb9jhUsVS2ywOr1slJG/6Vl6UB8I6P+ApvpGKVPgAOeeCXix4S0+gN9akyPH3TTQdWhw U+c+GTlVwy4dE/D37bg8uKZvCt6pm7dN+OFTpD8iHv7yNKXqtTza5C3PPN8iVTnjCOsw WaFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cWqCmkgYZbhNc72xE0V2U1y0S+admUaRv//gvOMoO70=; b=yxEXT2QFcFfrTbmsROz+jAgdPtCyeZgXy27N2Lnz1tCJ03TM97oeuadhfLFldxqLMD fWaXpueiFMi+fLvfsV/YYqHvQdFMDZVsMt3OBcy0KfL6AeD/z6nFRstsqPmC2ceiU22j Zgt8Fv6VqxqxBnRlnOd+mYxreDd1ZzUP7LyiVmRNm73lb+X7lenUhZA4lOp4H5jBTOPu 4OAXpywz08WBUofizspvuQqlPWtv2J2iiKhRxvg/dWJu/d3rPbw9YqR2lYAhlpmCnTd5 9ognbLqn7xQ+vvwXFemPFLJALK3FQ0qRtAWlP2ejTx97QFMTy7oWLRJg9NpeSAJ13eJD OEnA== X-Gm-Message-State: AOAM532VU4Ww67mjWAEjtKkY/4+ZIwYle8HP67EeFkzljUmwIM7IM96S PV4Eq7DpI7E8pfnvRwRSpcbGh0tBlNI= X-Google-Smtp-Source: ABdhPJyA9ed34tmJ/3Wv9ZcR286RLiHIveHFeKw+4mZKcQ4gHCTM5MrWgZzn5wi/k9wxNfwWdPPNBQ== X-Received: by 2002:a17:90a:88c:: with SMTP id v12mr9510860pjc.232.1632626492444; Sat, 25 Sep 2021 20:21:32 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r13sm14205312pgl.90.2021.09.25.20.21.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Sep 2021 20:21:32 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Doug Berger , Florian Fainelli , "David S. Miller" , Jakub Kicinski , bcm-kernel-feedback-list@broadcom.com (open list:BROADCOM GENET ETHERNET DRIVER), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 2/4] net: bcmgenet: remove old link state values Date: Sat, 25 Sep 2021 20:21:12 -0700 Message-Id: <20210926032114.1785872-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210926032114.1785872-1-f.fainelli@gmail.com> References: <20210926032114.1785872-1-f.fainelli@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Doug Berger The PHY state machine has been fixed to only call the adjust_link callback when the link state has changed. Therefore the old link state variables are no longer needed to detect a change in link state. This commit effectively reverts commit 5ad6e6c50899 ("net: bcmgenet: improve bcmgenet_mii_setup()") Signed-off-by: Doug Berger Signed-off-by: Florian Fainelli Reviewed-by: Andrew Lunn --- .../net/ethernet/broadcom/genet/bcmgenet.c | 5 --- .../net/ethernet/broadcom/genet/bcmgenet.h | 4 --- drivers/net/ethernet/broadcom/genet/bcmmii.c | 36 ------------------- 3 files changed, 45 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 23c7595d2a1d..3427f9ed7eb9 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -3408,11 +3408,6 @@ static void bcmgenet_netif_stop(struct net_device *dev) */ cancel_work_sync(&priv->bcmgenet_irq_work); - priv->old_link = -1; - priv->old_speed = -1; - priv->old_duplex = -1; - priv->old_pause = -1; - /* tx reclaim */ bcmgenet_tx_reclaim_all(dev); bcmgenet_fini_dma(priv); diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h index 0a6d91b0f0aa..406249bc9fe5 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h @@ -606,10 +606,6 @@ struct bcmgenet_priv { bool clk_eee_enabled; /* PHY device variables */ - int old_link; - int old_speed; - int old_duplex; - int old_pause; phy_interface_t phy_interface; int phy_addr; int ext_phy; diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index 8a9d8ceaa5bf..8fce5878a7d9 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -33,34 +33,8 @@ void bcmgenet_mii_setup(struct net_device *dev) struct bcmgenet_priv *priv = netdev_priv(dev); struct phy_device *phydev = dev->phydev; u32 reg, cmd_bits = 0; - bool status_changed = false; - - if (priv->old_link != phydev->link) { - status_changed = true; - priv->old_link = phydev->link; - } if (phydev->link) { - /* check speed/duplex/pause changes */ - if (priv->old_speed != phydev->speed) { - status_changed = true; - priv->old_speed = phydev->speed; - } - - if (priv->old_duplex != phydev->duplex) { - status_changed = true; - priv->old_duplex = phydev->duplex; - } - - if (priv->old_pause != phydev->pause) { - status_changed = true; - priv->old_pause = phydev->pause; - } - - /* done if nothing has changed */ - if (!status_changed) - return; - /* speed */ if (phydev->speed == SPEED_1000) cmd_bits = CMD_SPEED_1000; @@ -102,10 +76,6 @@ void bcmgenet_mii_setup(struct net_device *dev) reg |= CMD_TX_EN | CMD_RX_EN; } bcmgenet_umac_writel(priv, reg, UMAC_CMD); - } else { - /* done if nothing has changed */ - if (!status_changed) - return; } phy_print_status(phydev); @@ -294,12 +264,6 @@ int bcmgenet_mii_probe(struct net_device *dev) if (priv->internal_phy) phy_flags = priv->gphy_rev; - /* Initialize link state variables that bcmgenet_mii_setup() uses */ - priv->old_link = -1; - priv->old_speed = -1; - priv->old_duplex = -1; - priv->old_pause = -1; - /* This is an ugly quirk but we have not been correctly interpreting * the phy_interface values and we have done that across different * drivers, so at least we are consistent in our mistakes. From patchwork Sun Sep 26 03:21:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 12517901 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F964C433EF for ; Sun, 26 Sep 2021 03:21:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 80B1F61050 for ; Sun, 26 Sep 2021 03:21:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230484AbhIZDXR (ORCPT ); Sat, 25 Sep 2021 23:23:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230425AbhIZDXM (ORCPT ); Sat, 25 Sep 2021 23:23:12 -0400 Received: from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com [IPv6:2607:f8b0:4864:20::1029]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 527B9C061570; Sat, 25 Sep 2021 20:21:37 -0700 (PDT) Received: by mail-pj1-x1029.google.com with SMTP id k23so9841378pji.0; Sat, 25 Sep 2021 20:21:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XqjYGyqWuP2MM36ccVq5VIFVuxmx+6QGWJMXwqZHo/o=; b=c+A+0TU/ktP6gJOiXqNszuxW5QbNTIqMPhqdsHusiFhf+fkuCvTCe8zLcDrI1F9efS dVXklevgjASX8UAtkanHr6ZBi11DJLp39OcFyigcSs2R5BfT9kq8lbgyOpU5uKYeBK/N jq6D5Sh0QK+FOtcg8rvYjIMnj4PlSSv7hC4t0FPKYwZUSci7Ko5Rn5AImer7kkkHFAsr /Lww1xIgRz6p6wtzOQ9thKNqS2RSh64OJW3N3JZbzCsB3gJ/vuK8jXFX9x3ZPi1nRLVd tTALbr3t5kLZvOeSPY9a71t508rxED3oi/Z7OQrFfmxYwaG0i5avZdzrivU60NiXHC57 KBDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XqjYGyqWuP2MM36ccVq5VIFVuxmx+6QGWJMXwqZHo/o=; b=3hma83W7GRv64mzRHhMgdxXIQaXXL1UltYHGBxi8G1aM/DCaiqkHrWYDyD71oeNof6 Y7TgnnPVXbhsh9htg6VsUuibHfWdz2haSc0JS0NW1EtrZi2wAn+XpQbFczHbFBQGn61L bIYcHI4TCCG1mzZy51ffrU/YGdAYXdCULE6LR20LVXi1lt8/Xwn2RAJkXl7o2NipbEMe zLtQmKAmYoWzkRyCWIQ/Xt6hhcfwnzWIpIv6Q3yrnNfce9Oag+se1EntLhZQ9FSoMwTL 3gth9RucEIeGlLgSXYid0AxjPbVqry1A1p24ZDtP1KLbfqKI2qrYU+ziJ9gB3hxlMguO 4nyg== X-Gm-Message-State: AOAM531Ki7vQsfCDDqhTkm3tNGL8op+a9e+kNd/OaK+q+gvlamIrVUyw yCaknDtvPk1R9aTJGDoyRiwR3I5vewM= X-Google-Smtp-Source: ABdhPJw8rfdviCau2dt+oiqUm6UixbJS5rBrZ/9PvDDP+oLFiJCiscbAtxgxp5eb64pGQLQJfPQzpQ== X-Received: by 2002:a17:90a:514e:: with SMTP id k14mr11693258pjm.154.1632626496552; Sat, 25 Sep 2021 20:21:36 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r13sm14205312pgl.90.2021.09.25.20.21.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Sep 2021 20:21:36 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Doug Berger , Florian Fainelli , "David S. Miller" , Jakub Kicinski , bcm-kernel-feedback-list@broadcom.com (open list:BROADCOM GENET ETHERNET DRIVER), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 3/4] net: bcmgenet: pull mac_config from adjust_link Date: Sat, 25 Sep 2021 20:21:13 -0700 Message-Id: <20210926032114.1785872-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210926032114.1785872-1-f.fainelli@gmail.com> References: <20210926032114.1785872-1-f.fainelli@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Doug Berger This commit separates out the MAC configuration that occurs on a PHY state change into a function named bcmgenet_mac_config(). This allows the function to be called directly elsewhere. Signed-off-by: Doug Berger Signed-off-by: Florian Fainelli Reviewed-by: Andrew Lunn --- drivers/net/ethernet/broadcom/genet/bcmmii.c | 94 ++++++++++---------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index 8fce5878a7d9..789ca6212817 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -25,59 +25,63 @@ #include "bcmgenet.h" -/* setup netdev link state when PHY link status change and - * update UMAC and RGMII block when link up - */ -void bcmgenet_mii_setup(struct net_device *dev) +static void bcmgenet_mac_config(struct net_device *dev) { struct bcmgenet_priv *priv = netdev_priv(dev); struct phy_device *phydev = dev->phydev; u32 reg, cmd_bits = 0; - if (phydev->link) { - /* speed */ - if (phydev->speed == SPEED_1000) - cmd_bits = CMD_SPEED_1000; - else if (phydev->speed == SPEED_100) - cmd_bits = CMD_SPEED_100; - else - cmd_bits = CMD_SPEED_10; - cmd_bits <<= CMD_SPEED_SHIFT; - - /* duplex */ - if (phydev->duplex != DUPLEX_FULL) - cmd_bits |= CMD_HD_EN; - - /* pause capability */ - if (!phydev->pause) - cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE; - - /* - * Program UMAC and RGMII block based on established - * link speed, duplex, and pause. The speed set in - * umac->cmd tell RGMII block which clock to use for - * transmit -- 25MHz(100Mbps) or 125MHz(1Gbps). - * Receive clock is provided by the PHY. - */ - reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL); - reg &= ~OOB_DISABLE; - reg |= RGMII_LINK; - bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); - - reg = bcmgenet_umac_readl(priv, UMAC_CMD); - reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) | - CMD_HD_EN | - CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE); - reg |= cmd_bits; - if (reg & CMD_SW_RESET) { - reg &= ~CMD_SW_RESET; - bcmgenet_umac_writel(priv, reg, UMAC_CMD); - udelay(2); - reg |= CMD_TX_EN | CMD_RX_EN; - } + /* speed */ + if (phydev->speed == SPEED_1000) + cmd_bits = CMD_SPEED_1000; + else if (phydev->speed == SPEED_100) + cmd_bits = CMD_SPEED_100; + else + cmd_bits = CMD_SPEED_10; + cmd_bits <<= CMD_SPEED_SHIFT; + + /* duplex */ + if (phydev->duplex != DUPLEX_FULL) + cmd_bits |= CMD_HD_EN; + + /* pause capability */ + if (!phydev->pause) + cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE; + + /* Program UMAC and RGMII block based on established + * link speed, duplex, and pause. The speed set in + * umac->cmd tell RGMII block which clock to use for + * transmit -- 25MHz(100Mbps) or 125MHz(1Gbps). + * Receive clock is provided by the PHY. + */ + reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL); + reg &= ~OOB_DISABLE; + reg |= RGMII_LINK; + bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); + + reg = bcmgenet_umac_readl(priv, UMAC_CMD); + reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) | + CMD_HD_EN | + CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE); + reg |= cmd_bits; + if (reg & CMD_SW_RESET) { + reg &= ~CMD_SW_RESET; bcmgenet_umac_writel(priv, reg, UMAC_CMD); + udelay(2); + reg |= CMD_TX_EN | CMD_RX_EN; } + bcmgenet_umac_writel(priv, reg, UMAC_CMD); +} + +/* setup netdev link state when PHY link status change and + * update UMAC and RGMII block when link up + */ +void bcmgenet_mii_setup(struct net_device *dev) +{ + struct phy_device *phydev = dev->phydev; + if (phydev->link) + bcmgenet_mac_config(dev); phy_print_status(phydev); } From patchwork Sun Sep 26 03:21:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 12517903 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D48FC433EF for ; Sun, 26 Sep 2021 03:21:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 639AB61050 for ; Sun, 26 Sep 2021 03:21:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230512AbhIZDXV (ORCPT ); Sat, 25 Sep 2021 23:23:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230412AbhIZDXQ (ORCPT ); Sat, 25 Sep 2021 23:23:16 -0400 Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 723FDC061714; Sat, 25 Sep 2021 20:21:41 -0700 (PDT) Received: by mail-pg1-x536.google.com with SMTP id h3so14193584pgb.7; Sat, 25 Sep 2021 20:21:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W+gjZ7DIM9qIoqsNh7P6QbYmL99Dx4SZ04LaWgjboGM=; b=ogfKjn6oaRBFj59/jYlvOHn/F3mFr9jPVAPp8OmbEKEucunSZX4D2h7xxJrvNXiYzr 64kvDzJ8dU0gNDU1AYD6esFgDh+rigJ2gnsYpllkFUk5CGGhhAywzwJVxnwxxA+rAJyW FhCkM4skIyMKMzSU2fPEnMvHTj1UIE77iOxSZ+kcVxS/iskkJm3326K3eWKE0dMSvt8E 9gWGMC2oB8zza2PXUDUJqLhy7xbFKIcXE7Pp4e2mnVGRlzSr1IM7UXqKsKWimDYhJQ7p UU8Bei4mhyYPfZEjjwzvf2ZVLX5FR6fdzDIxz6IniQoIXVZ/A3Skpom8tSfS1fMKILdS P7jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W+gjZ7DIM9qIoqsNh7P6QbYmL99Dx4SZ04LaWgjboGM=; b=qTwPdSzcRFDHUGCm6ziBfwCadjnwj82umuW/0psUEpJnytR5yLTW2W9TMeis0pD9CV RkrxQMwZJnEGutTuxTaAQqJUlCMgNvKNG2YL8wF6R+TEArMXYthdcQPQbEVgQbWy4y8o x0olyYzp+Mp7gDMaSC9NocSc1ZePl99aJxfTS8809KLRZcDO2OkkgODxgTB4UZMEit6L JMFXs+2ekSVdzjF2PwktQnzR3FqfHzRSh5dSwBHcMuQbSFXqoIBNQ6eQBmlygA0L8q73 hfsh9uK/JDGJTlWDeTYVQKdnSuVTl+d5xFmwVUZxz8pj3ZCQHZPa0MgEiKepRXwq/ks+ nE2Q== X-Gm-Message-State: AOAM530cM4Quq7DGuK6k4QyON3cXS/xg9iUxdHOgzg1KZFGcLSpr/cI8 MUgMrwvv3/9uN4bfYZW4UU+Ba0S96a8= X-Google-Smtp-Source: ABdhPJyD3KYoaJxSPBtZRTNViWtBg0A4DxjbZBFZD0ACaJAG7OLsmyheYe5gtRQrscnLPzjuXJ2bXw== X-Received: by 2002:aa7:9e49:0:b0:44b:2a06:715e with SMTP id z9-20020aa79e49000000b0044b2a06715emr17070447pfq.78.1632626500615; Sat, 25 Sep 2021 20:21:40 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id r13sm14205312pgl.90.2021.09.25.20.21.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Sep 2021 20:21:40 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Doug Berger , Florian Fainelli , "David S. Miller" , Jakub Kicinski , bcm-kernel-feedback-list@broadcom.com (open list:BROADCOM GENET ETHERNET DRIVER), linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 4/4] net: bcmgenet: add support for ethtool flow control Date: Sat, 25 Sep 2021 20:21:14 -0700 Message-Id: <20210926032114.1785872-5-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210926032114.1785872-1-f.fainelli@gmail.com> References: <20210926032114.1785872-1-f.fainelli@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Doug Berger This commit extends the supported ethtool operations to allow MAC level flow control to be configured for the bcmgenet driver. The ethtool utility can be used to change the configuration of auto-negotiated symmetric and asymmetric modes as well as manually configuring support for RX and TX Pause frames individually. Signed-off-by: Doug Berger Signed-off-by: Florian Fainelli --- .../net/ethernet/broadcom/genet/bcmgenet.c | 51 +++++++++++++++++++ .../net/ethernet/broadcom/genet/bcmgenet.h | 4 ++ drivers/net/ethernet/broadcom/genet/bcmmii.c | 44 +++++++++++++--- 3 files changed, 92 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 3427f9ed7eb9..6a8234bc9428 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -935,6 +935,48 @@ static int bcmgenet_set_coalesce(struct net_device *dev, return 0; } +static void bcmgenet_get_pauseparam(struct net_device *dev, + struct ethtool_pauseparam *epause) +{ + struct bcmgenet_priv *priv; + u32 umac_cmd; + + priv = netdev_priv(dev); + + epause->autoneg = priv->autoneg_pause; + + if (netif_carrier_ok(dev)) { + /* report active state when link is up */ + umac_cmd = bcmgenet_umac_readl(priv, UMAC_CMD); + epause->tx_pause = !(umac_cmd & CMD_TX_PAUSE_IGNORE); + epause->rx_pause = !(umac_cmd & CMD_RX_PAUSE_IGNORE); + } else { + /* otherwise report stored settings */ + epause->tx_pause = priv->tx_pause; + epause->rx_pause = priv->rx_pause; + } +} + +static int bcmgenet_set_pauseparam(struct net_device *dev, + struct ethtool_pauseparam *epause) +{ + struct bcmgenet_priv *priv = netdev_priv(dev); + + if (!dev->phydev) + return -ENODEV; + + if (!phy_validate_pause(dev->phydev, epause)) + return -EINVAL; + + priv->autoneg_pause = !!epause->autoneg; + priv->tx_pause = !!epause->tx_pause; + priv->rx_pause = !!epause->rx_pause; + + bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause); + + return 0; +} + /* standard ethtool support functions. */ enum bcmgenet_stat_type { BCMGENET_STAT_NETDEV = -1, @@ -1587,6 +1629,8 @@ static const struct ethtool_ops bcmgenet_ethtool_ops = { .get_ts_info = ethtool_op_get_ts_info, .get_rxnfc = bcmgenet_get_rxnfc, .set_rxnfc = bcmgenet_set_rxnfc, + .get_pauseparam = bcmgenet_get_pauseparam, + .set_pauseparam = bcmgenet_set_pauseparam, }; /* Power down the unimac, based on mode. */ @@ -3364,6 +3408,8 @@ static int bcmgenet_open(struct net_device *dev) goto err_irq1; } + bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause); + bcmgenet_netif_start(dev); netif_tx_start_all_queues(dev); @@ -3945,6 +3991,11 @@ static int bcmgenet_probe(struct platform_device *pdev) spin_lock_init(&priv->lock); + /* Set default pause parameters */ + priv->autoneg_pause = 1; + priv->tx_pause = 1; + priv->rx_pause = 1; + SET_NETDEV_DEV(dev, &pdev->dev); dev_set_drvdata(&pdev->dev, dev); dev->watchdog_timeo = 2 * HZ; diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h index 406249bc9fe5..1cc2838e52c6 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h @@ -594,6 +594,9 @@ struct bcmgenet_priv { /* other misc variables */ struct bcmgenet_hw_params *hw_params; + unsigned autoneg_pause:1; + unsigned tx_pause:1; + unsigned rx_pause:1; /* MDIO bus variables */ wait_queue_head_t wq; @@ -686,6 +689,7 @@ 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_phy_pause_set(struct net_device *dev, bool rx, bool tx); 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 789ca6212817..ad56f54eda0a 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -41,12 +41,29 @@ static void bcmgenet_mac_config(struct net_device *dev) cmd_bits <<= CMD_SPEED_SHIFT; /* duplex */ - if (phydev->duplex != DUPLEX_FULL) - cmd_bits |= CMD_HD_EN; + if (phydev->duplex != DUPLEX_FULL) { + cmd_bits |= CMD_HD_EN | + CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE; + } else { + /* pause capability defaults to Symmetric */ + if (priv->autoneg_pause) { + bool tx_pause = 0, rx_pause = 0; + + if (phydev->autoneg) + phy_get_pause(phydev, &tx_pause, &rx_pause); - /* pause capability */ - if (!phydev->pause) - cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE; + if (!tx_pause) + cmd_bits |= CMD_TX_PAUSE_IGNORE; + if (!rx_pause) + cmd_bits |= CMD_RX_PAUSE_IGNORE; + } + + /* Manual override */ + if (!priv->rx_pause) + cmd_bits |= CMD_RX_PAUSE_IGNORE; + if (!priv->tx_pause) + cmd_bits |= CMD_TX_PAUSE_IGNORE; + } /* Program UMAC and RGMII block based on established * link speed, duplex, and pause. The speed set in @@ -101,6 +118,21 @@ static int bcmgenet_fixed_phy_link_update(struct net_device *dev, return 0; } +void bcmgenet_phy_pause_set(struct net_device *dev, bool rx, bool tx) +{ + struct phy_device *phydev = dev->phydev; + + linkmode_mod_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->advertising, rx); + linkmode_mod_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->advertising, + rx | tx); + phy_start_aneg(phydev); + + mutex_lock(&phydev->lock); + if (phydev->link) + bcmgenet_mac_config(dev); + mutex_unlock(&phydev->lock); +} + void bcmgenet_phy_power_set(struct net_device *dev, bool enable) { struct bcmgenet_priv *priv = netdev_priv(dev); @@ -351,8 +383,6 @@ int bcmgenet_mii_probe(struct net_device *dev) return ret; } - linkmode_copy(phydev->advertising, phydev->supported); - /* The internal PHY has its link interrupts routed to the * Ethernet MAC ISRs. On GENETv5 there is a hardware issue * that prevents the signaling of link UP interrupts when