From patchwork Sun Jul 14 15:25:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ramon Fried X-Patchwork-Id: 1131743 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="P3GlakxE"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 45mr8C6t35z9sNC for ; Mon, 15 Jul 2019 01:25:29 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 85ADFC21E3B; Sun, 14 Jul 2019 15:25:24 +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, 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 D7DBAC21C29; Sun, 14 Jul 2019 15:25:22 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 955A5C21C29; Sun, 14 Jul 2019 15:25:21 +0000 (UTC) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by lists.denx.de (Postfix) with ESMTPS id 4B71EC21BE5 for ; Sun, 14 Jul 2019 15:25:21 +0000 (UTC) Received: by mail-wm1-f66.google.com with SMTP id g67so8696237wme.1 for ; Sun, 14 Jul 2019 08:25:21 -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=D8vKNU7Uy0GzitTggquowomu++9GSSc90+beKWHpR/M=; b=P3GlakxEXyk/vXuSpqNESlKDfTFFLE8TqNg1wHYsEY7JGH3qCN5Az7eiPK3s059Rxj 4csJoXbSc91yM6DquKOXzbFutYwy2O+Ug/ltGkKqVCTSKwMp7St01zHaqu7dqe88U1wC 8Tpo3oCaJf2BkIWJtyvH98zVnqNzcXvVXY8vxkEzzCrsEN64rTJ/d6YFj3wFJ3xoWZLF BUi2Nz5T6y97GagOyb6HB9ADFY6hGAd0B26x9KdnRQQ+cZHrZJy3BIXSQphrOEPKikkW Uq6V+M3b1LcDlXpMe1iQss4VFtYTv0e7+ovJdAPl5FRCSWszoIo84XyUhRcwHlzZArNC wlxQ== 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=D8vKNU7Uy0GzitTggquowomu++9GSSc90+beKWHpR/M=; b=D9Jg4kIbrrRjdb05+dryiDNyM8mdaZzADauHErKlF9Bz7wE/MWuydlQrgVd33Uoszh fsF5ctlbvC2bMphVyEkoOF7CyFtNzIbc3tjG1QHnzHWIsWb6pEU1m3//Lu7ODiF0OJ3y QSkdm/79AgE/AJoMYjVBCRhvLfpW/g0mHURlMbKNsAhc4KvPKy+DB2w5+LPEQt1mqNoo 6glXbDK+lhlTFNnH049U8enhU+CBU20vjmYiQUaOZamYslDmARhy+ShWUK6wLMDGQSoZ fzphxIFqxRK1upoIIu4Nv+v5B1Ejuje8Rzo898/QozIkKRzk1TxaUg+QQR2XjTRtkCNE CFQA== X-Gm-Message-State: APjAAAVtiPxXYNRq0gAplXXYoL8uxwugzP+xKOR3bLN3BNGLh1/PGMX1 ddi4kIRjYUNcWomxMDiqdj8= X-Google-Smtp-Source: APXvYqwJgt5YHJkL5hdn6UWAyqqQW3zwvBMNajjNTYIB/F2HpLuId8IStRDYvCgWiSTb6fKgMTl97w== X-Received: by 2002:a7b:c776:: with SMTP id x22mr19432705wmk.55.1563117920960; Sun, 14 Jul 2019 08:25:20 -0700 (PDT) Received: from localhost.localdomain ([141.226.31.91]) by smtp.gmail.com with ESMTPSA id j10sm14780758wrw.96.2019.07.14.08.25.19 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 14 Jul 2019 08:25:20 -0700 (PDT) From: Ramon Fried To: joe.hershberger@ni.com Date: Sun, 14 Jul 2019 18:25:14 +0300 Message-Id: <20190714152514.19058-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 v2] 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 --- v2: Fix multi-line comment style drivers/net/macb.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index c072f99d8f..3c8b9722b3 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -45,10 +45,17 @@ 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 +102,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 +403,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 +710,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 +755,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 +966,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);