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.hb/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.cb/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