Skip to content

Commit 7996844

Browse files
LorenzoBianconidavem330
authored andcommitted
net: ethernet: mtk_wed: introduce wed wo support
Introduce WO chip support to mtk wed driver. MTK WED WO is used to implement RX Wireless Ethernet Dispatch and offload traffic received by wlan nic to the wired interface. Tested-by: Daniel Golle <[email protected]> Co-developed-by: Sujuan Chen <[email protected]> Signed-off-by: Sujuan Chen <[email protected]> Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent cc51410 commit 7996844

File tree

6 files changed

+622
-4
lines changed

6 files changed

+622
-4
lines changed

drivers/net/ethernet/mediatek/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
obj-$(CONFIG_NET_MEDIATEK_SOC) += mtk_eth.o
77
mtk_eth-y := mtk_eth_soc.o mtk_sgmii.o mtk_eth_path.o mtk_ppe.o mtk_ppe_debugfs.o mtk_ppe_offload.o
8-
mtk_eth-$(CONFIG_NET_MEDIATEK_SOC_WED) += mtk_wed.o mtk_wed_mcu.o
8+
mtk_eth-$(CONFIG_NET_MEDIATEK_SOC_WED) += mtk_wed.o mtk_wed_mcu.o mtk_wed_wo.o
99
ifdef CONFIG_DEBUG_FS
1010
mtk_eth-$(CONFIG_NET_MEDIATEK_SOC_WED) += mtk_wed_debugfs.o
1111
endif

drivers/net/ethernet/mediatek/mtk_wed.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "mtk_wed_regs.h"
1717
#include "mtk_wed.h"
1818
#include "mtk_ppe.h"
19+
#include "mtk_wed_wo.h"
1920

2021
#define MTK_PCIE_BASE(n) (0x1a143000 + (n) * 0x2000)
2122

@@ -355,6 +356,8 @@ mtk_wed_detach(struct mtk_wed_device *dev)
355356

356357
mtk_wed_free_buffer(dev);
357358
mtk_wed_free_tx_rings(dev);
359+
if (hw->version != 1)
360+
mtk_wed_wo_deinit(hw);
358361

359362
if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
360363
struct device_node *wlan_node;
@@ -878,9 +881,11 @@ mtk_wed_attach(struct mtk_wed_device *dev)
878881
}
879882

880883
mtk_wed_hw_init_early(dev);
881-
if (hw->hifsys)
884+
if (hw->version == 1)
882885
regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
883886
BIT(hw->index), 0);
887+
else
888+
ret = mtk_wed_wo_init(hw);
884889

885890
out:
886891
mutex_unlock(&hw_lock);

drivers/net/ethernet/mediatek/mtk_wed.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <linux/netdevice.h>
1111

1212
struct mtk_eth;
13+
struct mtk_wed_wo;
1314

1415
struct mtk_wed_hw {
1516
struct device_node *node;
@@ -22,6 +23,7 @@ struct mtk_wed_hw {
2223
struct regmap *mirror;
2324
struct dentry *debugfs_dir;
2425
struct mtk_wed_device *wed_dev;
26+
struct mtk_wed_wo *wed_wo;
2527
u32 debugfs_reg;
2628
u32 num_flows;
2729
u8 version;

drivers/net/ethernet/mediatek/mtk_wed_mcu.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,7 @@ mtk_wed_mcu_skb_send_msg(struct mtk_wed_wo *wo, struct sk_buff *skb,
122122
if (id == MTK_WED_MODULE_ID_WO)
123123
hdr->flag |= cpu_to_le16(MTK_WED_WARP_CMD_FLAG_FROM_TO_WO);
124124

125-
dev_kfree_skb(skb);
126-
return 0;
125+
return mtk_wed_wo_queue_tx_skb(wo, &wo->q_tx, skb);
127126
}
128127

129128
static int

0 commit comments

Comments
 (0)