All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Lorenzo Bianconi <lorenzo@kernel.org>
Cc: netdev@vger.kernel.org, nbd@nbd.name, john@phrozen.org,
	sean.wang@mediatek.com, Mark-MC.Lee@mediatek.com,
	davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
	pabeni@redhat.com, matthias.bgg@gmail.com,
	linux-mediatek@lists.infradead.org, sujuan.chen@mediatek.com,
	lorenzo.bianconi@redhat.com
Subject: Re: [PATCH net-next] net: ethernet: mtk_wed: add reset to rx_ring_setup callback
Date: Mon, 5 Dec 2022 09:07:59 +0200	[thread overview]
Message-ID: <Y42Yz2hhwk1Rw1hz@unreal> (raw)
In-Reply-To: <26fa16f2f212bff5edfdbe8a4f41dba7a132b0be.1670072570.git.lorenzo@kernel.org>

On Sat, Dec 03, 2022 at 02:06:30PM +0100, Lorenzo Bianconi wrote:
> Introduce reset parameter to mtk_wed_rx_ring_setup signature.
> This is a preliminary patch to add Wireless Ethernet Dispatcher reset
> support.

So please submit it as part the relevant series.

Thanks

> 
> Co-developed-by: Sujuan Chen <sujuan.chen@mediatek.com>
> Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
>  drivers/net/ethernet/mediatek/mtk_wed.c  | 20 +++++++++++++-------
>  drivers/net/wireless/mediatek/mt76/dma.c |  2 +-
>  include/linux/soc/mediatek/mtk_wed.h     |  8 ++++----
>  3 files changed, 18 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
> index 6352abd4157e..b1ec3f353b66 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
> @@ -1216,7 +1216,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
>  }
>  
>  static int
> -mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
> +mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
> +			   bool reset)
>  {
>  	u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
>  	struct mtk_wed_ring *wdma;
> @@ -1225,8 +1226,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
>  		return -EINVAL;
>  
>  	wdma = &dev->tx_wdma[idx];
> -	if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
> -			       true))
> +	if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
> +					 desc_size, true))
>  		return -ENOMEM;
>  
>  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
> @@ -1236,6 +1237,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
>  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
>  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
>  
> +	if (reset)
> +		mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
> +
>  	if (!idx)  {
>  		wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
>  			wdma->desc_phys);
> @@ -1577,18 +1581,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
>  }
>  
>  static int
> -mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
> +mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
> +		      bool reset)
>  {
>  	struct mtk_wed_ring *ring = &dev->rx_ring[idx];
>  
>  	if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
>  		return -EINVAL;
>  
> -	if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> -			       sizeof(*ring->desc), false))
> +	if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
> +					 sizeof(*ring->desc), false))
>  		return -ENOMEM;
>  
> -	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
> +	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
> +				       reset))
>  		return -ENOMEM;
>  
>  	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
> index 3f8c0845fcca..f795548562f5 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -648,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
>  			q->wed_regs = wed->txfree_ring.reg_base;
>  		break;
>  	case MT76_WED_Q_RX:
> -		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs);
> +		ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
>  		if (!ret)
>  			q->wed_regs = wed->rx_ring[ring].reg_base;
>  		break;
> diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
> index beb190449704..a0746d4aec20 100644
> --- a/include/linux/soc/mediatek/mtk_wed.h
> +++ b/include/linux/soc/mediatek/mtk_wed.h
> @@ -160,7 +160,7 @@ struct mtk_wed_ops {
>  	int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
>  			     void __iomem *regs, bool reset);
>  	int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
> -			     void __iomem *regs);
> +			     void __iomem *regs, bool reset);
>  	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
>  				 void __iomem *regs);
>  	int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
> @@ -228,8 +228,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
>  	(_dev)->ops->irq_get(_dev, _mask)
>  #define mtk_wed_device_irq_set_mask(_dev, _mask) \
>  	(_dev)->ops->irq_set_mask(_dev, _mask)
> -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
> -	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
> +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
> +	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
>  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
>  	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
>  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
> @@ -249,7 +249,7 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
>  #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
>  #define mtk_wed_device_irq_get(_dev, _mask) 0
>  #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
> -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
> +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
>  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash)  do {} while (0)
>  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
>  #define mtk_wed_device_stop(_dev) do {} while (0)
> -- 
> 2.38.1
> 


  reply	other threads:[~2022-12-05  7:08 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-03 13:06 [PATCH net-next] net: ethernet: mtk_wed: add reset to rx_ring_setup callback Lorenzo Bianconi
2022-12-05  7:07 ` Leon Romanovsky [this message]
2022-12-05  8:53   ` Lorenzo Bianconi
2022-12-05  9:21     ` Leon Romanovsky

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=Y42Yz2hhwk1Rw1hz@unreal \
    --to=leon@kernel.org \
    --cc=Mark-MC.Lee@mediatek.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=john@phrozen.org \
    --cc=kuba@kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=lorenzo.bianconi@redhat.com \
    --cc=lorenzo@kernel.org \
    --cc=matthias.bgg@gmail.com \
    --cc=nbd@nbd.name \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sean.wang@mediatek.com \
    --cc=sujuan.chen@mediatek.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.