From patchwork Mon Jun 11 13:30:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Khoronzhuk X-Patchwork-Id: 10457791 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 458FD6020F for ; Mon, 11 Jun 2018 13:32:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 346112847B for ; Mon, 11 Jun 2018 13:32:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CE47E28521; Mon, 11 Jun 2018 13:32:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5F7BA285D2 for ; Mon, 11 Jun 2018 13:32:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932925AbeFKNbn (ORCPT ); Mon, 11 Jun 2018 09:31:43 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:40271 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754250AbeFKNbF (ORCPT ); Mon, 11 Jun 2018 09:31:05 -0400 Received: by mail-lf0-f67.google.com with SMTP id q11-v6so30559075lfc.7 for ; Mon, 11 Jun 2018 06:31:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/4SX3+u2Y2cLjVWm/+4v5rftrI/D8hB/irhmVjaL3vQ=; b=Rr8ZJvuX9dLblZAl1GxZSNyM06LGWgpo6EgwPoIPn4W+//NijV442OnAxjN8IYfaqx zyIZ19JbLZVRISyVfHVYWFsdePY3M5wfZjPNFSCnH22AH60PGdJrnzfgi2RgsbjTdIJ4 uwF26OdZR+bqUAvR99d1jTSJ0qU6Yut+NikUc= 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=/4SX3+u2Y2cLjVWm/+4v5rftrI/D8hB/irhmVjaL3vQ=; b=Kf0jHHonwHElUoQ3Era+dN369Q1V/KfII6Il8bRvZiglMfzifINSIbeP3nbjevlXiY lYxTpKzEofwKoGpHgL7JbQS6MiG6QrSYUzXCYzRBw3Dg2MAMAt2OUmscmSKf5qB70qGc RMjKN+gGVHOroGDZinZdQLrvZsWVLQE6Hi9nb/iIUB9Xs+y+iI2rMFA7Ly9+5rMb9HQF Ch9tzFOHfjPCLeEaLAyKY931lkWN3kaXglNjm4v3pZovHj7EFEr5CsUzwLV3t8t9pEWx /gbb/CcK0ue3HEy+81KVjz4++W75WCGuKmujDm+pC9KdVEokrrZ/+35bv+uqNDlilLlv Smeg== X-Gm-Message-State: APt69E3pdGna6eP4854aNR8uNgu05M0EVRLAIPG8j/qiyhr+GVpvwife zz7nnjBG1MQS5QaXf9NIeax9iA== X-Google-Smtp-Source: ADUXVKKPmNF6f4FWxdp5sidAfYcM5AGq4O5JyuHpISSIgbaSn5PrVqiRGb3eIQDC7cwjGV+k4h9prw== X-Received: by 2002:a2e:6548:: with SMTP id z69-v6mr9352311ljb.116.1528723864156; Mon, 11 Jun 2018 06:31:04 -0700 (PDT) Received: from localhost.localdomain (59-201-94-178.pool.ukrtel.net. [178.94.201.59]) by smtp.gmail.com with ESMTPSA id u24-v6sm2617712ljj.96.2018.06.11.06.31.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Jun 2018 06:31:03 -0700 (PDT) From: Ivan Khoronzhuk To: grygorii.strashko@ti.com, davem@davemloft.net Cc: corbet@lwn.net, akpm@linux-foundation.org, netdev@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, vinicius.gomes@intel.com, henrik@austad.us, jesus.sanchez-palencia@intel.com, ilias.apalodimas@linaro.org, p-varis@ti.com, spatton@ti.com, francois.ozog@linaro.org, yogeshs@ti.com, nsekhar@ti.com, Ivan Khoronzhuk Subject: [PATCH net-next 5/6] net: ethernet: ti: cpsw: restore shaper configuration while down/up Date: Mon, 11 Jun 2018 16:30:46 +0300 Message-Id: <20180611133047.4818-6-ivan.khoronzhuk@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180611133047.4818-1-ivan.khoronzhuk@linaro.org> References: <20180611133047.4818-1-ivan.khoronzhuk@linaro.org> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Need to restore shapers configuration after interface was down/up. This is needed as appropriate configuration is still replicated in kernel settings. This only shapers context restore, so vlan configuration should be restored by user if needed, especially for devices with one port where vlan frames are sent via ALE. Signed-off-by: Ivan Khoronzhuk --- drivers/net/ethernet/ti/cpsw.c | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 87a5586c5ea5..f39d2662c5ab 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -1807,6 +1807,51 @@ static int cpsw_set_cbs(struct net_device *ndev, return ret; } +static void cpsw_cbs_resume(struct cpsw_slave *slave, struct cpsw_priv *priv) +{ + int fifo, bw; + + for (fifo = CPSW_FIFO_SHAPERS_NUM; fifo > 0; fifo--) { + bw = priv->fifo_bw[fifo]; + if (!bw) + continue; + + cpsw_set_fifo_rlimit(priv, fifo, bw); + } +} + +static void cpsw_mqprio_resume(struct cpsw_slave *slave, struct cpsw_priv *priv) +{ + struct cpsw_common *cpsw = priv->cpsw; + u32 tx_prio_map = 0; + int i, tc, fifo; + u32 tx_prio_rg; + + if (!priv->mqprio_hw) + return; + + for (i = 0; i < 8; i++) { + tc = netdev_get_prio_tc_map(priv->ndev, i); + fifo = CPSW_FIFO_SHAPERS_NUM - tc; + tx_prio_map |= fifo << (4 * i); + } + + tx_prio_rg = cpsw->version == CPSW_VERSION_1 ? + CPSW1_TX_PRI_MAP : CPSW2_TX_PRI_MAP; + + slave_write(slave, tx_prio_map, tx_prio_rg); +} + +/* restore resources after port reset */ +static void cpsw_restore(struct cpsw_priv *priv) +{ + /* restore MQPRIO offload */ + for_each_slave(priv, cpsw_mqprio_resume, priv); + + /* restore CBS offload */ + for_each_slave(priv, cpsw_cbs_resume, priv); +} + static int cpsw_ndo_open(struct net_device *ndev) { struct cpsw_priv *priv = netdev_priv(ndev); @@ -1886,6 +1931,8 @@ static int cpsw_ndo_open(struct net_device *ndev) } + cpsw_restore(priv); + /* Enable Interrupt pacing if configured */ if (cpsw->coal_intvl != 0) { struct ethtool_coalesce coal;