All of lore.kernel.org
 help / color / mirror / Atom feed
From: Florian Fainelli <f.fainelli@gmail.com>
To: Petri Gynther <pgynther@google.com>, netdev@vger.kernel.org
Cc: davem@davemloft.net
Subject: Re: [PATCH net-next] net: bcmgenet: rework Rx queue init
Date: Fri, 06 Mar 2015 17:40:33 -0800	[thread overview]
Message-ID: <54FA5711.4060806@gmail.com> (raw)
In-Reply-To: <20150306214500.B542F2214B2@puck.mtv.corp.google.com>

On 06/03/15 13:45, Petri Gynther wrote:
> In preparation for supporting multiple Rx queues:
> 1. Move the initialization of priv->num_rx_bds, priv->rx_bds, and
>    priv->rx_cbs from bcmgenet_init_rx_ring() to bcmgenet_init_dma()
>    since they are not specific to a single Rx queue. Mimics the Tx
>    init model where priv->num_tx_bds, priv->tx_bds, and priv->tx_cbs
>    are initialized in bcmgenet_init_dma().
> 2. Program DMA_MBUF_DONE_THRESH = 1 so that future Rx queues Q0-Q15
>    will get per-packet Rx interrupt.
> 3. Group DMA_START_ADDR, RDMA_READ_PTR, RDMA_WRITE_PTR, and DMA_END_ADDR
>    initialization together. Mimics the Tx init model.
> 4. There is 1-to-1 mapping between RxCBs and RxBDs.
>    Precalculate RxCB->bd_addr so that it can be used in the future.
> 
> Signed-off-by: Petri Gynther <pgynther@google.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

> ---
>  drivers/net/ethernet/broadcom/genet/bcmgenet.c | 43 ++++++++++++++++----------
>  1 file changed, 27 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> index d90785c..83c0cb3 100644
> --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> @@ -1783,37 +1783,33 @@ static int bcmgenet_init_rx_ring(struct bcmgenet_priv *priv,
>  	u32 words_per_bd = WORDS_PER_BD(priv);
>  	int ret;
>  
> -	priv->num_rx_bds = TOTAL_DESC;
> -	priv->rx_bds = priv->base + priv->hw_params->rdma_offset;
>  	priv->rx_bd_assign_ptr = priv->rx_bds;
>  	priv->rx_bd_assign_index = 0;
>  	priv->rx_c_index = 0;
>  	priv->rx_read_ptr = 0;
> -	priv->rx_cbs = kcalloc(priv->num_rx_bds, sizeof(struct enet_cb),
> -			       GFP_KERNEL);
> -	if (!priv->rx_cbs)
> -		return -ENOMEM;
>  
>  	ret = bcmgenet_alloc_rx_buffers(priv);
>  	if (ret) {
> -		kfree(priv->rx_cbs);
>  		return ret;
>  	}
>  
> -	bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_WRITE_PTR);
>  	bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_PROD_INDEX);
>  	bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_CONS_INDEX);
> +	bcmgenet_rdma_ring_writel(priv, index, 1, DMA_MBUF_DONE_THRESH);
>  	bcmgenet_rdma_ring_writel(priv, index,
>  				  ((size << DMA_RING_SIZE_SHIFT) |
>  				   RX_BUF_LENGTH), DMA_RING_BUF_SIZE);
> -	bcmgenet_rdma_ring_writel(priv, index, 0, DMA_START_ADDR);
> -	bcmgenet_rdma_ring_writel(priv, index,
> -				  words_per_bd * size - 1, DMA_END_ADDR);
>  	bcmgenet_rdma_ring_writel(priv, index,
>  				  (DMA_FC_THRESH_LO <<
>  				   DMA_XOFF_THRESHOLD_SHIFT) |
>  				   DMA_FC_THRESH_HI, RDMA_XON_XOFF_THRESH);
> +
> +	/* Set start and end address, read and write pointers */
> +	bcmgenet_rdma_ring_writel(priv, index, 0, DMA_START_ADDR);
>  	bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_READ_PTR);
> +	bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_WRITE_PTR);
> +	bcmgenet_rdma_ring_writel(priv, index, words_per_bd * size - 1,
> +				  DMA_END_ADDR);
>  
>  	return ret;
>  }
> @@ -1976,18 +1972,33 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv)
>  	unsigned int i;
>  	struct enet_cb *cb;
>  
> -	netif_dbg(priv, hw, priv->dev, "bcmgenet: init_edma\n");
> +	netif_dbg(priv, hw, priv->dev, "%s\n", __func__);
>  
> -	/* by default, enable ring 16 (descriptor based) */
> +	/* Init rDma */
> +	bcmgenet_rdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
> +
> +	/* Initialize common Rx ring structures */
> +	priv->rx_bds = priv->base + priv->hw_params->rdma_offset;
> +	priv->num_rx_bds = TOTAL_DESC;
> +	priv->rx_cbs = kcalloc(priv->num_rx_bds, sizeof(struct enet_cb),
> +			       GFP_KERNEL);
> +	if (!priv->rx_cbs)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < priv->num_rx_bds; i++) {
> +		cb = priv->rx_cbs + i;
> +		cb->bd_addr = priv->rx_bds + i * DMA_DESC_SIZE;
> +	}
> +
> +	/* Initialize Rx default queue 16 */
>  	ret = bcmgenet_init_rx_ring(priv, DESC_INDEX, TOTAL_DESC);
>  	if (ret) {
>  		netdev_err(priv->dev, "failed to initialize RX ring\n");
> +		bcmgenet_free_rx_buffers(priv);
> +		kfree(priv->rx_cbs);
>  		return ret;
>  	}
>  
> -	/* init rDma */
> -	bcmgenet_rdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
> -
>  	/* Init tDma */
>  	bcmgenet_tdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
>  
> 


-- 
Florian

  reply	other threads:[~2015-03-07  1:41 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-06 21:45 [PATCH net-next] net: bcmgenet: rework Rx queue init Petri Gynther
2015-03-07  1:40 ` Florian Fainelli [this message]
2015-03-08  3:33 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54FA5711.4060806@gmail.com \
    --to=f.fainelli@gmail.com \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    --cc=pgynther@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.