Thread (79 messages) 79 messages, 4 authors, 2021-10-04

RE: [RFC/PATCH 14/18] ravb: Add rx_ring_format function for GbEthernet

From: Biju Das <biju.das.jz@bp.renesas.com>
Date: 2021-09-29 07:49:52
Also in: linux-renesas-soc

Hi Sergei,
Subject: Re: [RFC/PATCH 14/18] ravb: Add rx_ring_format function for
GbEthernet

On 9/23/21 5:08 PM, Biju Das wrote:
quoted
This patch adds rx_ring_format function for GbEthernet found on RZ/G2L
SoC.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
 drivers/net/ethernet/renesas/ravb.h      |  1 +
 drivers/net/ethernet/renesas/ravb_main.c | 27
+++++++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/renesas/ravb.h
b/drivers/net/ethernet/renesas/ravb.h
index 2505de5d4a28..b0e067a6a8ee 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -982,6 +982,7 @@ enum CSR0_BIT {
 #define RX_BUF_SZ	(2048 - ETH_FCS_LEN + sizeof(__sum16))

 #define RGETH_RX_BUFF_MAX 8192
+#define RGETH_RX_DESC_DATA_SIZE 4080

 struct ravb_tstamp_skb {
 	struct list_head list;
diff --git a/drivers/net/ethernet/renesas/ravb_main.c
b/drivers/net/ethernet/renesas/ravb_main.c
index 038af36141bb..ee1066fedc4a 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -327,7 +327,32 @@ static void ravb_ring_free(struct net_device
*ndev, int q)

 static void ravb_rx_ring_format_rgeth(struct net_device *ndev, int q)
{
-	/* Place holder */
+	struct ravb_private *priv = netdev_priv(ndev);
+	struct ravb_rx_desc *rx_desc;
+	unsigned int rx_ring_size = sizeof(*rx_desc) * priv->num_rx_ring[q];
+	dma_addr_t dma_addr;
+	unsigned int i;
+
+	memset(priv->rgeth_rx_ring[q], 0, rx_ring_size);
+	/* Build RX ring buffer */
+	for (i = 0; i < priv->num_rx_ring[q]; i++) {
+		/* RX descriptor */
+		rx_desc = &priv->rgeth_rx_ring[q][i];
   Looks like this patch shold come bafore the patch #12 as well...
Patch#12 is timestamp related and we agreed to merge timestamp related code to gPTP support.
quoted
+		rx_desc->ds_cc = cpu_to_le16(RGETH_RX_DESC_DATA_SIZE);
+		dma_addr = dma_map_single(ndev->dev.parent, priv-
rx_skb[q][i]->data,
+					  RGETH_RX_BUFF_MAX,
    Allocation buffer size more then the real data size? Does that make
sense?
Allocated buffer is 8K and mapping buffer size is 8K. So there won't be any issues
for dma/cpu operations.

You can refer to cip kernel[1] for details
[1] https://github.com/renesas-rz/rz_linux-cip/blob/rzg2l-cip41/drivers/net/ethernet/renesas/ravb_main.c#L326
quoted
+					  DMA_FROM_DEVICE);
+		/* We just set the data size to 0 for a failed mapping which
+		 * should prevent DMA from happening...
+		 */
+		if (dma_mapping_error(ndev->dev.parent, dma_addr))
+			rx_desc->ds_cc = cpu_to_le16(0);
+		rx_desc->dptr = cpu_to_le32(dma_addr);
+		rx_desc->die_dt = DT_FEMPTY;
+	}
+	rx_desc = &priv->rgeth_rx_ring[q][i];
+	rx_desc->dptr = cpu_to_le32((u32)priv->rx_desc_dma[q]);
+	rx_desc->die_dt = DT_LINKFIX; /* type */
 }

 static void ravb_rx_ring_format(struct net_device *ndev, int q)
MBR, Sergey
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help