mirror of
				https://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 16:15:54 +00:00 
			
		
		
		
	This is an automatically generated commit. When doing `git bisect`, consider `git bisect --skip`. Signed-off-by: Kenneth Kasilag <kenneth@kasilag.me> Link: https://github.com/openwrt/openwrt/pull/19038 Signed-off-by: Robert Marko <robimarko@gmail.com>
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 03b7ca3ee5e1b700c462aed5b6cb88f616d6ba7f Mon Sep 17 00:00:00 2001
 | |
| From: Lorenzo Bianconi <lorenzo@kernel.org>
 | |
| Date: Mon, 11 Aug 2025 17:31:39 +0200
 | |
| Subject: [PATCH 3/6] net: airoha: npu: Add wlan irq management callbacks
 | |
| 
 | |
| Introduce callbacks used by the MT76 driver to configure NPU SoC
 | |
| interrupts. This is a preliminary patch to enable wlan flowtable
 | |
| offload for EN7581 SoC with MT76 driver.
 | |
| 
 | |
| Reviewed-by: Simon Horman <horms@kernel.org>
 | |
| Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
 | |
| Link: https://patch.msgid.link/20250811-airoha-en7581-wlan-offlaod-v7-4-58823603bb4e@kernel.org
 | |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 | |
| ---
 | |
|  drivers/net/ethernet/airoha/airoha_npu.c | 27 ++++++++++++++++++++++++
 | |
|  drivers/net/ethernet/airoha/airoha_npu.h |  4 ++++
 | |
|  2 files changed, 31 insertions(+)
 | |
| 
 | |
| --- a/drivers/net/ethernet/airoha/airoha_npu.c
 | |
| +++ b/drivers/net/ethernet/airoha/airoha_npu.c
 | |
| @@ -520,6 +520,29 @@ static u32 airoha_npu_wlan_queue_addr_ge
 | |
|  	return REG_RX_BASE(qid);
 | |
|  }
 | |
|  
 | |
| +static void airoha_npu_wlan_irq_status_set(struct airoha_npu *npu, u32 val)
 | |
| +{
 | |
| +	regmap_write(npu->regmap, REG_IRQ_STATUS, val);
 | |
| +}
 | |
| +
 | |
| +static u32 airoha_npu_wlan_irq_status_get(struct airoha_npu *npu, int q)
 | |
| +{
 | |
| +	u32 val;
 | |
| +
 | |
| +	regmap_read(npu->regmap, REG_IRQ_STATUS, &val);
 | |
| +	return val;
 | |
| +}
 | |
| +
 | |
| +static void airoha_npu_wlan_irq_enable(struct airoha_npu *npu, int q)
 | |
| +{
 | |
| +	regmap_set_bits(npu->regmap, REG_IRQ_RXDONE(q), NPU_IRQ_RX_MASK(q));
 | |
| +}
 | |
| +
 | |
| +static void airoha_npu_wlan_irq_disable(struct airoha_npu *npu, int q)
 | |
| +{
 | |
| +	regmap_clear_bits(npu->regmap, REG_IRQ_RXDONE(q), NPU_IRQ_RX_MASK(q));
 | |
| +}
 | |
| +
 | |
|  struct airoha_npu *airoha_npu_get(struct device *dev, dma_addr_t *stats_addr)
 | |
|  {
 | |
|  	struct platform_device *pdev;
 | |
| @@ -627,6 +650,10 @@ static int airoha_npu_probe(struct platf
 | |
|  	npu->ops.wlan_send_msg = airoha_npu_wlan_msg_send;
 | |
|  	npu->ops.wlan_get_msg = airoha_npu_wlan_msg_get;
 | |
|  	npu->ops.wlan_get_queue_addr = airoha_npu_wlan_queue_addr_get;
 | |
| +	npu->ops.wlan_set_irq_status = airoha_npu_wlan_irq_status_set;
 | |
| +	npu->ops.wlan_get_irq_status = airoha_npu_wlan_irq_status_get;
 | |
| +	npu->ops.wlan_enable_irq = airoha_npu_wlan_irq_enable;
 | |
| +	npu->ops.wlan_disable_irq = airoha_npu_wlan_irq_disable;
 | |
|  
 | |
|  	npu->regmap = devm_regmap_init_mmio(dev, base, ®map_config);
 | |
|  	if (IS_ERR(npu->regmap))
 | |
| --- a/drivers/net/ethernet/airoha/airoha_npu.h
 | |
| +++ b/drivers/net/ethernet/airoha/airoha_npu.h
 | |
| @@ -89,6 +89,10 @@ struct airoha_npu {
 | |
|  				    void *data, int data_len, gfp_t gfp);
 | |
|  		u32 (*wlan_get_queue_addr)(struct airoha_npu *npu, int qid,
 | |
|  					   bool xmit);
 | |
| +		void (*wlan_set_irq_status)(struct airoha_npu *npu, u32 val);
 | |
| +		u32 (*wlan_get_irq_status)(struct airoha_npu *npu, int q);
 | |
| +		void (*wlan_enable_irq)(struct airoha_npu *npu, int q);
 | |
| +		void (*wlan_disable_irq)(struct airoha_npu *npu, int q);
 | |
|  	} ops;
 | |
|  };
 | |
|  
 |