From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx.denx.de (mx.denx.de [89.58.32.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB6271FF603; Sun, 27 Jul 2025 10:02:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=89.58.32.78 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753610529; cv=none; b=cvtB1mIn6AhAsC/dRcEmtv0AH+KxKfO1ITD+HwZpegKDyNfkRadQ7rJ7xqEx5fiDe4zSRsrB9vbzGI9p5Mh7R8ZjlvNUEN/7dY+ae0CHCqHLRiMjFMpP+oEEz2RRegKP0rIooT5z5IgZcaC4CQQQyvjqxNYXt0iIdGqt1+qhNJI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753610529; c=relaxed/simple; bh=g9isBX59nve2ZM4sSj3+JUMQN1Cp8DX4CjL2ETH3LZ0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QZV7y2MelhScLTB7W6UjFaa+Q4DWXZzMhoWCPySym0gZYzjsEc7/bWKvKl3LAirD8keYshqkFQ0WQQ9oYLJPDPYlKJXL9tzWtXFgF7j/CqaovF2oks+EkJR7I6io7qwai7UT8nkoOzCsx67CWRQFygtcq+Wdb8k0QGWmhIK8tss= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=denx.de; spf=pass smtp.mailfrom=denx.de; dkim=pass (2048-bit key) header.d=denx.de header.i=@denx.de header.b=e37Dyzhh; arc=none smtp.client-ip=89.58.32.78 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=denx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=denx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=denx.de header.i=@denx.de header.b="e37Dyzhh" Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 704161038C129; Sun, 27 Jul 2025 12:02:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=mx-20241105; t=1753610524; h=from:subject:date:message-id:to:cc:mime-version: content-transfer-encoding:in-reply-to:references; bh=HJBVh0vOteOqWGCF4ipOcr1xhcAFdVEheCfZwWgRS98=; b=e37DyzhhPfQbIbZ27fqwdh/b+SFAwkJTD3uQweF5GE1QmX65TNOKIQZT+OLGqaM7kmATT7 5tIvtTOus2ftqdBVSvOPqJlmdVV4xhjuOGcnxU7NXlTFJKGRT88VoxDf97P2Unun6ncb8Y ippH8q8Yz0UvxqmwvSEenluB3rniCRYRsoiANCqyvRd5Xy4W+HKmot737ZDygIEb2jgl4P 7cBHGyWDTRbJnduw2/y68i30zKKhH0OKnli+a+3y16zvAATqVXAvJ7DDYWcyrVoecRkTA+ yn2SOpjGYE2GN/BkMYLDNPU5pSvKedJEZ3JYKDnfUvd2HoOsjDlvJKvqcwDZVg== From: Lukasz Majewski To: Andrew Lunn , davem@davemloft.net, Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo Cc: Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Richard Cochran , netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Stefan Wahren , Simon Horman , Lukasz Majewski Subject: [net-next v17 05/12] net: mtip: Add buffers management functions to the L2 switch driver Date: Sun, 27 Jul 2025 12:01:21 +0200 Message-Id: <20250727100128.1411514-6-lukma@denx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250727100128.1411514-1-lukma@denx.de> References: <20250727100128.1411514-1-lukma@denx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Last-TLS-Session-Version: TLSv1.3 This patch provides buffers management funcions' content for MTIP L2 switch. Signed-off-by: Lukasz Majewski --- Changes for v14: - New patch - created by excluding some code from large (i.e. v13 and earlier) MTIP driver Changes for v15 - v17: - None --- .../net/ethernet/freescale/mtipsw/mtipl2sw.c | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/drivers/net/ethernet/freescale/mtipsw/mtipl2sw.c b/drivers/net/ethernet/freescale/mtipsw/mtipl2sw.c index 157df1efbf99..c80857310a17 100644 --- a/drivers/net/ethernet/freescale/mtipsw/mtipl2sw.c +++ b/drivers/net/ethernet/freescale/mtipsw/mtipl2sw.c @@ -870,11 +870,96 @@ static void mtip_get_drvinfo(struct net_device *dev, static void mtip_free_buffers(struct net_device *dev) { + struct mtip_ndev_priv *priv = netdev_priv(dev); + struct switch_enet_private *fep = priv->fep; + int i; + + for (i = 0; i < RX_RING_SIZE; i++) { + page_pool_put_full_page(fep->page_pool, + fep->page[i], false); + fep->page[i] = NULL; + } + + page_pool_destroy(fep->page_pool); + fep->page_pool = NULL; + + for (i = 0; i < TX_RING_SIZE; i++) + kfree(fep->tx_bounce[i]); +} + +static int mtip_create_page_pool(struct switch_enet_private *fep, int size) +{ + struct page_pool_params pp_params = { + .order = 0, + .flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV, + .pool_size = size, + .nid = dev_to_node(&fep->pdev->dev), + .dev = &fep->pdev->dev, + .dma_dir = DMA_FROM_DEVICE, + .offset = 0, + .max_len = MTIP_SWITCH_RX_FRSIZE, + }; + int ret = 0; + + fep->page_pool = page_pool_create(&pp_params); + if (IS_ERR(fep->page_pool)) { + ret = PTR_ERR(fep->page_pool); + fep->page_pool = NULL; + } + + return ret; } static int mtip_alloc_buffers(struct net_device *dev) { + struct mtip_ndev_priv *priv = netdev_priv(dev); + struct switch_enet_private *fep = priv->fep; + struct cbd_t *bdp; + struct page *page; + int i, ret; + + ret = mtip_create_page_pool(fep, RX_RING_SIZE); + if (ret < 0) { + dev_err(&fep->pdev->dev, "Failed to create page pool\n"); + return ret; + } + + bdp = fep->rx_bd_base; + for (i = 0; i < RX_RING_SIZE; i++) { + page = page_pool_dev_alloc_pages(fep->page_pool); + if (!page) { + dev_err(&fep->pdev->dev, + "Failed to allocate page for rx buffer\n"); + goto err; + } + + bdp->cbd_bufaddr = page_pool_get_dma_addr(page); + fep->page[i] = page; + + bdp->cbd_sc = BD_ENET_RX_EMPTY; + bdp++; + } + + mtip_set_last_buf_to_wrap(bdp); + + bdp = fep->tx_bd_base; + for (i = 0; i < TX_RING_SIZE; i++) { + fep->tx_bounce[i] = kmalloc(MTIP_SWITCH_TX_FRSIZE, GFP_KERNEL); + if (!fep->tx_bounce[i]) + goto err; + + bdp->cbd_sc = 0; + bdp->cbd_bufaddr = 0; + bdp++; + } + + mtip_set_last_buf_to_wrap(bdp); + return 0; + + err: + mtip_free_buffers(dev); + return -ENOMEM; } static int mtip_rx_napi(struct napi_struct *napi, int budget) -- 2.39.5