From patchwork Mon Jun 24 19:01:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ramon Fried X-Patchwork-Id: 1121491 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TPW2Nj33"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 45XdvK0Zjjz9s3C for ; Tue, 25 Jun 2019 05:02:04 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 25ACAC21DF8; Mon, 24 Jun 2019 19:02:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 860DFC21C2C; Mon, 24 Jun 2019 19:01:58 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 8F2BCC21C2C; Mon, 24 Jun 2019 19:01:56 +0000 (UTC) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by lists.denx.de (Postfix) with ESMTPS id 49C89C21BE5 for ; Mon, 24 Jun 2019 19:01:56 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id n4so13861469wrs.3 for ; Mon, 24 Jun 2019 12:01:56 -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:mime-version :content-transfer-encoding; bh=X11zL2qKhT5rHW2hbsZ2G9BqzAq6DVYRHetirvXqLic=; b=TPW2Nj33g2BhVAh0sFnkZ5XmMtGdZv/Zq0ns3XvuCax2LN2HxSgiaNgZ7xnPWffQvA WV6/ujq66mJ1El8sI5Qw8mggeF4Bg6MfvEGJuXfBntVRsrCd3s82VtPu1+XSCYA0D/K1 96lKxiemJ+YGfo22n3UUmMcJQH2TrHC+NoXuW/VesD9ViIetDSOXPweUvQfZ9CaNGXbh gkwN7GPzgRgRPKzi6iCWS5OEMzzEZpA7DsmQyeAhS1jkx74ezE2oMH/TiFpyQBOQOUuf CC+mw+XhbhM82IBXAJGgXM7Y6foOPkB5293Sn1N6wn00XLn87uOWa5DP/N1XQP9TkVkt zDnw== 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:mime-version :content-transfer-encoding; bh=X11zL2qKhT5rHW2hbsZ2G9BqzAq6DVYRHetirvXqLic=; b=IK8Z5joG2tahh7w+oB84pANFBO3BYpooOY2KjWSUwZ7r+m3qyJgdjQuBlfxxo04kFK tbWWYlr83wN5Xq4z19ExD0A6XreIRSgTR31+mGwtWNO0miZDivSyX7BZTPSd+GZoudfE 0JomEPoXwLTh/D1Au+dhBNX0pg1OnYOY8xbYBUqe84VaT3dV9a5CtshipmhS2vSd+bkJ Ikoj6G+xzr7ETHX0Q6LxwkROpPARvJqQfLijGsoEFPB1+NjrHRq0rhaad/ccMl5A3biI VVwcR2DsBgXJ3BQk88iA3k9fRbUqK+CqRt69hSnXFioEUgvHT+RAJgCE6Ij5rY26BNHi hF7g== X-Gm-Message-State: APjAAAWnvyrVxj6l14sBX+GUNr4fyXn/blH6bUNHvpdDoyOAK/kBFBNc EqC0FKFBVRdsAoy2Pf8F6nw= X-Google-Smtp-Source: APXvYqyEhOapG1D36izO3900QxvI8RMg7SSUARB1WQgJNcq3kodXXCB9Gn5XAN5S4IjHzW7lIgbUJQ== X-Received: by 2002:adf:b64e:: with SMTP id i14mr59957866wre.248.1561402915860; Mon, 24 Jun 2019 12:01:55 -0700 (PDT) Received: from localhost.localdomain ([141.226.31.91]) by smtp.gmail.com with ESMTPSA id f12sm25878604wrg.5.2019.06.24.12.01.54 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 24 Jun 2019 12:01:55 -0700 (PDT) From: Ramon Fried To: joe.hershberger@ni.com Date: Mon, 24 Jun 2019 22:01:41 +0300 Message-Id: <20190624190141.24700-1-rfried.dev@gmail.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH] net/macb: increase RX buffer size for GEM X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Macb Ethernet controller requires a RX buffer of 128 bytes. It is highly sub-optimal for Gigabit-capable GEM that is able to use a bigger DMA buffer. Change this constant and associated macros with data stored in the private structure. RX DMA buffer size has to be multiple of 64 bytes as indicated in DMA Configuration Register specification. Signed-off-by: Ramon Fried Acked-by: Joe Hershberger --- drivers/net/macb.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index c072f99d8f..8eb6977fa9 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -45,10 +45,16 @@ DECLARE_GLOBAL_DATA_PTR; -#define MACB_RX_BUFFER_SIZE 4096 -#define MACB_RX_RING_SIZE (MACB_RX_BUFFER_SIZE / 128) +/* These buffer sizes must be power of 2 and divisible + * by RX_BUFFER_MULTIPLE + */ +#define MACB_RX_BUFFER_SIZE 128 +#define GEM_RX_BUFFER_SIZE 2048 #define RX_BUFFER_MULTIPLE 64 + +#define MACB_RX_RING_SIZE 32 #define MACB_TX_RING_SIZE 16 + #define MACB_TX_TIMEOUT 1000 #define MACB_AUTONEG_TIMEOUT 5000000 @@ -95,6 +101,7 @@ struct macb_device { void *tx_buffer; struct macb_dma_desc *rx_ring; struct macb_dma_desc *tx_ring; + size_t rx_buffer_size; unsigned long rx_buffer_dma; unsigned long rx_ring_dma; @@ -395,15 +402,16 @@ static int _macb_recv(struct macb_device *macb, uchar **packetp) } if (status & MACB_BIT(RX_EOF)) { - buffer = macb->rx_buffer + 128 * macb->rx_tail; + buffer = macb->rx_buffer + + macb->rx_buffer_size * macb->rx_tail; length = status & RXBUF_FRMLEN_MASK; macb_invalidate_rx_buffer(macb); if (macb->wrapped) { unsigned int headlen, taillen; - headlen = 128 * (MACB_RX_RING_SIZE - - macb->rx_tail); + headlen = macb->rx_buffer_size * + (MACB_RX_RING_SIZE - macb->rx_tail); taillen = length - headlen; memcpy((void *)net_rx_packets[0], buffer, headlen); @@ -701,7 +709,7 @@ static void gmac_configure_dma(struct macb_device *macb) u32 buffer_size; u32 dmacfg; - buffer_size = 128 / RX_BUFFER_MULTIPLE; + buffer_size = macb->rx_buffer_size / RX_BUFFER_MULTIPLE; dmacfg = gem_readl(macb, DMACFG) & ~GEM_BF(RXBS, -1L); dmacfg |= GEM_BF(RXBS, buffer_size); @@ -746,7 +754,7 @@ static int _macb_init(struct macb_device *macb, const char *name) paddr |= MACB_BIT(RX_WRAP); macb->rx_ring[i].addr = paddr; macb->rx_ring[i].ctrl = 0; - paddr += 128; + paddr += macb->rx_buffer_size; } macb_flush_ring_desc(macb, RX); macb_flush_rx_buffer(macb); @@ -957,8 +965,13 @@ static void _macb_eth_initialize(struct macb_device *macb) int id = 0; /* This is not used by functions we call */ u32 ncfgr; + if (macb_is_gem(macb)) + macb->rx_buffer_size = GEM_RX_BUFFER_SIZE; + else + macb->rx_buffer_size = MACB_RX_BUFFER_SIZE; + /* TODO: we need check the rx/tx_ring_dma is dcache line aligned */ - macb->rx_buffer = dma_alloc_coherent(MACB_RX_BUFFER_SIZE, + macb->rx_buffer = dma_alloc_coherent(macb->rx_buffer_size * MACB_RX_RING_SIZE, &macb->rx_buffer_dma); macb->rx_ring = dma_alloc_coherent(MACB_RX_DMA_DESC_SIZE, &macb->rx_ring_dma);