From patchwork Fri Mar 10 16:34:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 737470 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vftGp0lRVz9s80 for ; Sat, 11 Mar 2017 03:37:54 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aATauwCU"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933963AbdCJQhp (ORCPT ); Fri, 10 Mar 2017 11:37:45 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:32881 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933146AbdCJQfQ (ORCPT ); Fri, 10 Mar 2017 11:35:16 -0500 Received: by mail-wr0-f196.google.com with SMTP id g10so12234465wrg.0; Fri, 10 Mar 2017 08:35:14 -0800 (PST) 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=6ebuqZv3uaChbym9xyutY5ZPVzkR11nvkqBd7/u269w=; b=aATauwCU2xfrhLVakIdAMxSfWefRwDQjS1k3qFpdKR/dbt4+jb4Bm0zI05St7BNucs R2TTdQikLKlEQoEIj8ydZ+M3HxOak5NcWuu0CwlLHXMgfr9/AJJpyic54mxM4Syk88w3 vlgRNXjPa4jkqqALHRsbwGtSc5EJBXJ9D8zxxzCQhOeuqgwN36oqTxDZW9hwz7xXWdpW H5VxbTrkdFTWY6033by2lj6hVCpDjaLV9Nufic10R6xZrO9vMxQxeMC9gLodEgyYEBU1 LfuQmFEVgiPg01CJk4JnK5bqIOW1XP+8P/Bf/w5+i5jdlO8+TeBlJsDSXczBQELCbCHp zPmQ== 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=6ebuqZv3uaChbym9xyutY5ZPVzkR11nvkqBd7/u269w=; b=DWsjNRJhEUD9td7swmMcunOyImLuntWdtYoKPVi9u3flC/k4z+IDw3G74gQ7PmtkCP wnbXhhnEGgAn+mzFC7LFpZdyATfufvqqKZ8HMiVEUiNWaV5b+gvLHbk3mtoPvkGYWgwT FqFRZhAnII0wInDoP5o7ljNrpqfeDogFoBnCRHVgh6OmHepAEWMEmc4Jv+kttHZtTCkH Fr+yVAOmSezknIic8j1Gr9cQ/QxiCz1bTy2rheyj4bj1phBhUf6N8JJMsAljTu9ZTW4b ZTqCgrdmwwphuWe9uVs5O9wlmboU9SIzl8RVPcDdOrA2a5BD5HqM1SRArFap1IWz4FXr XtdQ== X-Gm-Message-State: AMke39lY9NABPW3PdZVQ6YdQbOBAdsLrfJEg2tI7A6FS3Fp+5X95KjWeYlVBqUGyzFFtlA== X-Received: by 10.223.160.101 with SMTP id l34mr15787672wrl.73.1489163713907; Fri, 10 Mar 2017 08:35:13 -0800 (PST) Received: from localhost (port-55061.pppoe.wtnet.de. [46.59.215.197]) by smtp.gmail.com with ESMTPSA id k128sm4014739wmf.16.2017.03.10.08.35.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 10 Mar 2017 08:35:12 -0800 (PST) From: Thierry Reding To: "David S . Miller" Cc: Giuseppe Cavallaro , Alexandre Torgue , Joao Pinto , Jon Hunter , Mikko Perttunen , netdev@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 6/9] net: stmmac: Parse FIFO sizes from feature registers Date: Fri, 10 Mar 2017 17:34:58 +0100 Message-Id: <20170310163501.31811-7-thierry.reding@gmail.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170310163501.31811-1-thierry.reding@gmail.com> References: <20170310163501.31811-1-thierry.reding@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Thierry Reding New version of this core encode the FIFO sizes in one of the feature registers. Use these sizes as default, but still allow device tree to override them for backwards compatibility. Reviewed-by: Mikko Perttunen Signed-off-by: Thierry Reding --- Changes in v2: - provide macros for the FIFO size fields in the feature register - add comment about FIFO size encoding to clarify the computation drivers/net/ethernet/stmicro/stmmac/common.h | 3 +++ drivers/net/ethernet/stmicro/stmmac/dwmac4.h | 2 ++ drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 5 +++++ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +++ 4 files changed, 13 insertions(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h index 04d9245b7149..3ca36744007b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/common.h +++ b/drivers/net/ethernet/stmicro/stmmac/common.h @@ -324,6 +324,9 @@ struct dma_features { unsigned int number_tx_queues; /* Alternate (enhanced) DESC mode */ unsigned int enh_desc; + /* TX and RX FIFO sizes */ + unsigned int tx_fifo_size; + unsigned int rx_fifo_size; }; /* GMAC TX FIFO is 8K, Rx FIFO is 16K */ diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h index db45134fddf0..83f5e953e291 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h @@ -148,6 +148,8 @@ enum power_event { /* MAC HW features1 bitmap */ #define GMAC_HW_FEAT_AVSEL BIT(20) #define GMAC_HW_TSOEN BIT(18) +#define GMAC_HW_TXFIFOSIZE GENMASK(10, 6) +#define GMAC_HW_RXFIFOSIZE GENMASK(4, 0) /* MAC HW features2 bitmap */ #define GMAC_HW_FEAT_TXCHCNT GENMASK(21, 18) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c index f97b0d5d9987..55270933bae1 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c @@ -294,6 +294,11 @@ static void dwmac4_get_hw_feature(void __iomem *ioaddr, hw_cap = readl(ioaddr + GMAC_HW_FEATURE1); dma_cap->av = (hw_cap & GMAC_HW_FEAT_AVSEL) >> 20; dma_cap->tsoen = (hw_cap & GMAC_HW_TSOEN) >> 18; + /* RX and TX FIFO sizes are encoded as log2(n / 128). Undo that by + * shifting and store the sizes in bytes. + */ + dma_cap->tx_fifo_size = 128 << ((hw_cap & GMAC_HW_TXFIFOSIZE) >> 6); + dma_cap->rx_fifo_size = 128 << ((hw_cap & GMAC_HW_RXFIFOSIZE) >> 0); /* MAC HW feature2 */ hw_cap = readl(ioaddr + GMAC_HW_FEATURE2); /* TX and RX number of channels */ diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index eba9088e1f61..78f6ec2d165b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1281,6 +1281,9 @@ static void stmmac_dma_operation_mode(struct stmmac_priv *priv) { int rxfifosz = priv->plat->rx_fifo_size; + if (rxfifosz == 0) + rxfifosz = priv->dma_cap.rx_fifo_size; + if (priv->plat->force_thresh_dma_mode) priv->hw->dma->dma_mode(priv->ioaddr, tc, tc, rxfifosz); else if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) {