mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 14:23:38 +00:00
kernel: bump 6.6 to 6.6.28 (#12106)
This commit is contained in:
parent
b760a6f166
commit
fcd30851f7
@ -1,2 +1,2 @@
|
|||||||
LINUX_VERSION-6.6 = .28
|
LINUX_VERSION-6.6 = .29
|
||||||
LINUX_KERNEL_HASH-6.6.28 = 818716ed13e7dba6aaeae24e3073993e260812ed128d10272e94b922ee6d3394
|
LINUX_KERNEL_HASH-6.6.29 = 7f26f74c08082c86b1daf866e4d49c5d8276cc1906a89d0e367e457ec167cbd0
|
||||||
|
@ -1,87 +0,0 @@
|
|||||||
From: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
||||||
Date: Thu, 11 Apr 2024 13:28:59 +0200
|
|
||||||
Subject: [PATCH] netfilter: flowtable: validate pppoe header
|
|
||||||
|
|
||||||
Ensure there is sufficient room to access the protocol field of the
|
|
||||||
PPPoe header. Validate it once before the flowtable lookup, then use a
|
|
||||||
helper function to access protocol field.
|
|
||||||
|
|
||||||
Reported-by: syzbot+b6f07e1c07ef40199081@syzkaller.appspotmail.com
|
|
||||||
Fixes: 72efd585f714 ("netfilter: flowtable: add pppoe support")
|
|
||||||
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/include/net/netfilter/nf_flow_table.h
|
|
||||||
+++ b/include/net/netfilter/nf_flow_table.h
|
|
||||||
@@ -335,7 +335,7 @@ int nf_flow_rule_route_ipv6(struct net *
|
|
||||||
int nf_flow_table_offload_init(void);
|
|
||||||
void nf_flow_table_offload_exit(void);
|
|
||||||
|
|
||||||
-static inline __be16 nf_flow_pppoe_proto(const struct sk_buff *skb)
|
|
||||||
+static inline __be16 __nf_flow_pppoe_proto(const struct sk_buff *skb)
|
|
||||||
{
|
|
||||||
__be16 proto;
|
|
||||||
|
|
||||||
@@ -351,6 +351,16 @@ static inline __be16 nf_flow_pppoe_proto
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static inline bool nf_flow_pppoe_proto(struct sk_buff *skb, __be16 *inner_proto)
|
|
||||||
+{
|
|
||||||
+ if (!pskb_may_pull(skb, PPPOE_SES_HLEN))
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ *inner_proto = __nf_flow_pppoe_proto(skb);
|
|
||||||
+
|
|
||||||
+ return true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#define NF_FLOW_TABLE_STAT_INC(net, count) __this_cpu_inc((net)->ft.stat->count)
|
|
||||||
#define NF_FLOW_TABLE_STAT_DEC(net, count) __this_cpu_dec((net)->ft.stat->count)
|
|
||||||
#define NF_FLOW_TABLE_STAT_INC_ATOMIC(net, count) \
|
|
||||||
--- a/net/netfilter/nf_flow_table_inet.c
|
|
||||||
+++ b/net/netfilter/nf_flow_table_inet.c
|
|
||||||
@@ -21,7 +21,8 @@ nf_flow_offload_inet_hook(void *priv, st
|
|
||||||
proto = veth->h_vlan_encapsulated_proto;
|
|
||||||
break;
|
|
||||||
case htons(ETH_P_PPP_SES):
|
|
||||||
- proto = nf_flow_pppoe_proto(skb);
|
|
||||||
+ if (!nf_flow_pppoe_proto(skb, &proto))
|
|
||||||
+ return NF_ACCEPT;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
proto = skb->protocol;
|
|
||||||
--- a/net/netfilter/nf_flow_table_ip.c
|
|
||||||
+++ b/net/netfilter/nf_flow_table_ip.c
|
|
||||||
@@ -273,10 +273,11 @@ static unsigned int nf_flow_xmit_xfrm(st
|
|
||||||
return NF_STOLEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static bool nf_flow_skb_encap_protocol(const struct sk_buff *skb, __be16 proto,
|
|
||||||
+static bool nf_flow_skb_encap_protocol(struct sk_buff *skb, __be16 proto,
|
|
||||||
u32 *offset)
|
|
||||||
{
|
|
||||||
struct vlan_ethhdr *veth;
|
|
||||||
+ __be16 inner_proto;
|
|
||||||
|
|
||||||
switch (skb->protocol) {
|
|
||||||
case htons(ETH_P_8021Q):
|
|
||||||
@@ -287,7 +288,8 @@ static bool nf_flow_skb_encap_protocol(c
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case htons(ETH_P_PPP_SES):
|
|
||||||
- if (nf_flow_pppoe_proto(skb) == proto) {
|
|
||||||
+ if (nf_flow_pppoe_proto(skb, &inner_proto) &&
|
|
||||||
+ inner_proto == proto) {
|
|
||||||
*offset += PPPOE_SES_HLEN;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
@@ -316,7 +318,7 @@ static void nf_flow_encap_pop(struct sk_
|
|
||||||
skb_reset_network_header(skb);
|
|
||||||
break;
|
|
||||||
case htons(ETH_P_PPP_SES):
|
|
||||||
- skb->protocol = nf_flow_pppoe_proto(skb);
|
|
||||||
+ skb->protocol = __nf_flow_pppoe_proto(skb);
|
|
||||||
skb_pull(skb, PPPOE_SES_HLEN);
|
|
||||||
skb_reset_network_header(skb);
|
|
||||||
break;
|
|
@ -1,24 +0,0 @@
|
|||||||
From: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
||||||
Date: Thu, 11 Apr 2024 13:29:00 +0200
|
|
||||||
Subject: [PATCH] netfilter: flowtable: incorrect pppoe tuple
|
|
||||||
|
|
||||||
pppoe traffic reaching ingress path does not match the flowtable entry
|
|
||||||
because the pppoe header is expected to be at the network header offset.
|
|
||||||
This bug causes a mismatch in the flow table lookup, so pppoe packets
|
|
||||||
enter the classical forwarding path.
|
|
||||||
|
|
||||||
Fixes: 72efd585f714 ("netfilter: flowtable: add pppoe support")
|
|
||||||
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/net/netfilter/nf_flow_table_ip.c
|
|
||||||
+++ b/net/netfilter/nf_flow_table_ip.c
|
|
||||||
@@ -157,7 +157,7 @@ static void nf_flow_tuple_encap(struct s
|
|
||||||
tuple->encap[i].proto = skb->protocol;
|
|
||||||
break;
|
|
||||||
case htons(ETH_P_PPP_SES):
|
|
||||||
- phdr = (struct pppoe_hdr *)skb_mac_header(skb);
|
|
||||||
+ phdr = (struct pppoe_hdr *)skb_network_header(skb);
|
|
||||||
tuple->encap[i].id = ntohs(phdr->sid);
|
|
||||||
tuple->encap[i].proto = skb->protocol;
|
|
||||||
break;
|
|
@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||||
@@ -1713,19 +1713,20 @@ mtk_wed_irq_set_mask(struct mtk_wed_devi
|
@@ -1709,19 +1709,20 @@ mtk_wed_irq_set_mask(struct mtk_wed_devi
|
||||||
int mtk_wed_flow_add(int index)
|
int mtk_wed_flow_add(int index)
|
||||||
{
|
{
|
||||||
struct mtk_wed_hw *hw = hw_list[index];
|
struct mtk_wed_hw *hw = hw_list[index];
|
||||||
@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1744,14 +1745,15 @@ void mtk_wed_flow_remove(int index)
|
@@ -1740,14 +1741,15 @@ void mtk_wed_flow_remove(int index)
|
||||||
{
|
{
|
||||||
struct mtk_wed_hw *hw = hw_list[index];
|
struct mtk_wed_hw *hw = hw_list[index];
|
||||||
|
|
||||||
|
@ -52,15 +52,15 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wdma_clr(dev, MTK_WDMA_GLO_CFG,
|
wdma_clr(dev, MTK_WDMA_GLO_CFG,
|
||||||
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
||||||
@@ -606,7 +606,7 @@ mtk_wed_stop(struct mtk_wed_device *dev)
|
@@ -606,7 +606,7 @@ mtk_wed_stop(struct mtk_wed_device *dev)
|
||||||
|
wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
|
||||||
wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
|
wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
|
||||||
wed_w32(dev, MTK_WED_WPDMA_INT_MASK, 0);
|
|
||||||
|
|
||||||
- if (dev->hw->version == 1)
|
- if (dev->hw->version == 1)
|
||||||
+ if (mtk_wed_is_v1(dev->hw))
|
+ if (mtk_wed_is_v1(dev->hw))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
|
wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
|
||||||
@@ -625,7 +625,7 @@ mtk_wed_deinit(struct mtk_wed_device *de
|
@@ -624,7 +624,7 @@ mtk_wed_deinit(struct mtk_wed_device *de
|
||||||
MTK_WED_CTRL_WED_TX_BM_EN |
|
MTK_WED_CTRL_WED_TX_BM_EN |
|
||||||
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
wed_clr(dev, MTK_WED_CTRL,
|
wed_clr(dev, MTK_WED_CTRL,
|
||||||
@@ -731,7 +731,7 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
@@ -730,7 +730,7 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
||||||
static void
|
static void
|
||||||
mtk_wed_set_wpdma(struct mtk_wed_device *dev)
|
mtk_wed_set_wpdma(struct mtk_wed_device *dev)
|
||||||
{
|
{
|
||||||
@ -78,7 +78,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
|
wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
|
||||||
} else {
|
} else {
|
||||||
mtk_wed_bus_init(dev);
|
mtk_wed_bus_init(dev);
|
||||||
@@ -762,7 +762,7 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
|
@@ -761,7 +761,7 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
|
||||||
MTK_WED_WDMA_GLO_CFG_IDLE_DMAD_SUPPLY;
|
MTK_WED_WDMA_GLO_CFG_IDLE_DMAD_SUPPLY;
|
||||||
wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set);
|
wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set);
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
u32 offset = dev->hw->index ? 0x04000400 : 0;
|
u32 offset = dev->hw->index ? 0x04000400 : 0;
|
||||||
|
|
||||||
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
||||||
@@ -935,7 +935,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -934,7 +934,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
|
|
||||||
wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);
|
wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_TX_BM_TKID,
|
wed_w32(dev, MTK_WED_TX_BM_TKID,
|
||||||
FIELD_PREP(MTK_WED_TX_BM_TKID_START,
|
FIELD_PREP(MTK_WED_TX_BM_TKID_START,
|
||||||
dev->wlan.token_start) |
|
dev->wlan.token_start) |
|
||||||
@@ -968,7 +968,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -967,7 +967,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
|
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_set(dev, MTK_WED_CTRL,
|
wed_set(dev, MTK_WED_CTRL,
|
||||||
MTK_WED_CTRL_WED_TX_BM_EN |
|
MTK_WED_CTRL_WED_TX_BM_EN |
|
||||||
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||||||
@@ -1218,7 +1218,7 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
@@ -1217,7 +1217,7 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->init_done = false;
|
dev->init_done = false;
|
||||||
@ -114,7 +114,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (!busy) {
|
if (!busy) {
|
||||||
@@ -1344,7 +1344,7 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
@@ -1343,7 +1343,7 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
||||||
MTK_WED_CTRL_WED_TX_BM_EN |
|
MTK_WED_CTRL_WED_TX_BM_EN |
|
||||||
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER,
|
wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER,
|
||||||
MTK_WED_PCIE_INT_TRIGGER_STATUS);
|
MTK_WED_PCIE_INT_TRIGGER_STATUS);
|
||||||
|
|
||||||
@@ -1417,7 +1417,7 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
@@ -1416,7 +1416,7 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||||||
MTK_WDMA_GLO_CFG_RX_INFO1_PRERES |
|
MTK_WDMA_GLO_CFG_RX_INFO1_PRERES |
|
||||||
MTK_WDMA_GLO_CFG_RX_INFO2_PRERES);
|
MTK_WDMA_GLO_CFG_RX_INFO2_PRERES);
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
||||||
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
||||||
} else {
|
} else {
|
||||||
@@ -1466,7 +1466,7 @@ mtk_wed_start(struct mtk_wed_device *dev
|
@@ -1465,7 +1465,7 @@ mtk_wed_start(struct mtk_wed_device *dev
|
||||||
|
|
||||||
mtk_wed_set_ext_int(dev, true);
|
mtk_wed_set_ext_int(dev, true);
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
u32 val = dev->wlan.wpdma_phys | MTK_PCIE_MIRROR_MAP_EN |
|
u32 val = dev->wlan.wpdma_phys | MTK_PCIE_MIRROR_MAP_EN |
|
||||||
FIELD_PREP(MTK_PCIE_MIRROR_MAP_WED_ID,
|
FIELD_PREP(MTK_PCIE_MIRROR_MAP_WED_ID,
|
||||||
dev->hw->index);
|
dev->hw->index);
|
||||||
@@ -1551,7 +1551,7 @@ mtk_wed_attach(struct mtk_wed_device *de
|
@@ -1550,7 +1550,7 @@ mtk_wed_attach(struct mtk_wed_device *de
|
||||||
}
|
}
|
||||||
|
|
||||||
mtk_wed_hw_init_early(dev);
|
mtk_wed_hw_init_early(dev);
|
||||||
@ -150,7 +150,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
|
regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
|
||||||
BIT(hw->index), 0);
|
BIT(hw->index), 0);
|
||||||
} else {
|
} else {
|
||||||
@@ -1619,7 +1619,7 @@ static int
|
@@ -1618,7 +1618,7 @@ static int
|
||||||
mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
|
mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
|
||||||
{
|
{
|
||||||
struct mtk_wed_ring *ring = &dev->txfree_ring;
|
struct mtk_wed_ring *ring = &dev->txfree_ring;
|
||||||
@ -159,7 +159,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* For txfree event handling, the same DMA ring is shared between WED
|
* For txfree event handling, the same DMA ring is shared between WED
|
||||||
@@ -1677,7 +1677,7 @@ mtk_wed_irq_get(struct mtk_wed_device *d
|
@@ -1676,7 +1676,7 @@ mtk_wed_irq_get(struct mtk_wed_device *d
|
||||||
{
|
{
|
||||||
u32 val, ext_mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
|
u32 val, ext_mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
ext_mask |= MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR;
|
ext_mask |= MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR;
|
||||||
else
|
else
|
||||||
ext_mask |= MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH |
|
ext_mask |= MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH |
|
||||||
@@ -1844,7 +1844,7 @@ mtk_wed_setup_tc(struct mtk_wed_device *
|
@@ -1840,7 +1840,7 @@ mtk_wed_setup_tc(struct mtk_wed_device *
|
||||||
{
|
{
|
||||||
struct mtk_wed_hw *hw = wed->hw;
|
struct mtk_wed_hw *hw = wed->hw;
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@@ -1918,9 +1918,9 @@ void mtk_wed_add_hw(struct device_node *
|
@@ -1914,9 +1914,9 @@ void mtk_wed_add_hw(struct device_node *
|
||||||
hw->wdma = wdma;
|
hw->wdma = wdma;
|
||||||
hw->index = index;
|
hw->index = index;
|
||||||
hw->irq = irq;
|
hw->irq = irq;
|
||||||
|
@ -16,15 +16,15 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||||
@@ -606,7 +606,7 @@ mtk_wed_stop(struct mtk_wed_device *dev)
|
@@ -606,7 +606,7 @@ mtk_wed_stop(struct mtk_wed_device *dev)
|
||||||
|
wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
|
||||||
wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
|
wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
|
||||||
wed_w32(dev, MTK_WED_WPDMA_INT_MASK, 0);
|
|
||||||
|
|
||||||
- if (mtk_wed_is_v1(dev->hw))
|
- if (mtk_wed_is_v1(dev->hw))
|
||||||
+ if (!mtk_wed_get_rx_capa(dev))
|
+ if (!mtk_wed_get_rx_capa(dev))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
|
wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
|
||||||
@@ -733,16 +733,21 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
@@ -732,16 +732,21 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
||||||
{
|
{
|
||||||
if (mtk_wed_is_v1(dev->hw)) {
|
if (mtk_wed_is_v1(dev->hw)) {
|
||||||
wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
|
wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
|
||||||
@ -55,7 +55,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -974,15 +979,17 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -973,15 +978,17 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||||||
} else {
|
} else {
|
||||||
wed_clr(dev, MTK_WED_TX_TKID_CTRL, MTK_WED_TX_TKID_CTRL_PAUSE);
|
wed_clr(dev, MTK_WED_TX_TKID_CTRL, MTK_WED_TX_TKID_CTRL_PAUSE);
|
||||||
@ -82,7 +82,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
wed_clr(dev, MTK_WED_TX_BM_CTRL, MTK_WED_TX_BM_CTRL_PAUSE);
|
wed_clr(dev, MTK_WED_TX_BM_CTRL, MTK_WED_TX_BM_CTRL_PAUSE);
|
||||||
@@ -1354,8 +1361,6 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
@@ -1353,8 +1360,6 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
||||||
|
|
||||||
wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask);
|
wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask);
|
||||||
} else {
|
} else {
|
||||||
@ -91,7 +91,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
/* initail tx interrupt trigger */
|
/* initail tx interrupt trigger */
|
||||||
wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,
|
wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,
|
||||||
MTK_WED_WPDMA_INT_CTRL_TX0_DONE_EN |
|
MTK_WED_WPDMA_INT_CTRL_TX0_DONE_EN |
|
||||||
@@ -1374,15 +1379,20 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
@@ -1373,15 +1378,20 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
||||||
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_TRIG,
|
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_TRIG,
|
||||||
dev->wlan.txfree_tbit));
|
dev->wlan.txfree_tbit));
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
wed_w32(dev, MTK_WED_WDMA_INT_CLR, wdma_mask);
|
wed_w32(dev, MTK_WED_WDMA_INT_CLR, wdma_mask);
|
||||||
wed_set(dev, MTK_WED_WDMA_INT_CTRL,
|
wed_set(dev, MTK_WED_WDMA_INT_CTRL,
|
||||||
@@ -1401,6 +1411,8 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
@@ -1400,6 +1410,8 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
||||||
static void
|
static void
|
||||||
mtk_wed_dma_enable(struct mtk_wed_device *dev)
|
mtk_wed_dma_enable(struct mtk_wed_device *dev)
|
||||||
{
|
{
|
||||||
@ -130,7 +130,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_set(dev, MTK_WED_WPDMA_INT_CTRL, MTK_WED_WPDMA_INT_CTRL_SUBRT_ADV);
|
wed_set(dev, MTK_WED_WPDMA_INT_CTRL, MTK_WED_WPDMA_INT_CTRL_SUBRT_ADV);
|
||||||
|
|
||||||
wed_set(dev, MTK_WED_GLO_CFG,
|
wed_set(dev, MTK_WED_GLO_CFG,
|
||||||
@@ -1420,33 +1432,33 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
@@ -1419,33 +1431,33 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||||||
if (mtk_wed_is_v1(dev->hw)) {
|
if (mtk_wed_is_v1(dev->hw)) {
|
||||||
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
||||||
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
||||||
@ -186,7 +186,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1473,7 +1485,7 @@ mtk_wed_start(struct mtk_wed_device *dev
|
@@ -1472,7 +1484,7 @@ mtk_wed_start(struct mtk_wed_device *dev
|
||||||
|
|
||||||
val |= BIT(0) | (BIT(1) * !!dev->hw->index);
|
val |= BIT(0) | (BIT(1) * !!dev->hw->index);
|
||||||
regmap_write(dev->hw->mirror, dev->hw->index * 4, val);
|
regmap_write(dev->hw->mirror, dev->hw->index * 4, val);
|
||||||
@ -195,7 +195,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
/* driver set mid ready and only once */
|
/* driver set mid ready and only once */
|
||||||
wed_w32(dev, MTK_WED_EXT_INT_MASK1,
|
wed_w32(dev, MTK_WED_EXT_INT_MASK1,
|
||||||
MTK_WED_EXT_INT_STATUS_WPDMA_MID_RDY);
|
MTK_WED_EXT_INT_STATUS_WPDMA_MID_RDY);
|
||||||
@@ -1485,7 +1497,6 @@ mtk_wed_start(struct mtk_wed_device *dev
|
@@ -1484,7 +1496,6 @@ mtk_wed_start(struct mtk_wed_device *dev
|
||||||
|
|
||||||
if (mtk_wed_rro_cfg(dev))
|
if (mtk_wed_rro_cfg(dev))
|
||||||
return;
|
return;
|
||||||
@ -203,7 +203,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
|
mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
|
||||||
@@ -1551,13 +1562,14 @@ mtk_wed_attach(struct mtk_wed_device *de
|
@@ -1550,13 +1561,14 @@ mtk_wed_attach(struct mtk_wed_device *de
|
||||||
}
|
}
|
||||||
|
|
||||||
mtk_wed_hw_init_early(dev);
|
mtk_wed_hw_init_early(dev);
|
||||||
|
@ -38,7 +38,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
static void
|
static void
|
||||||
wed_m32(struct mtk_wed_device *dev, u32 reg, u32 mask, u32 val)
|
wed_m32(struct mtk_wed_device *dev, u32 reg, u32 mask, u32 val)
|
||||||
{
|
{
|
||||||
@@ -747,7 +767,7 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
@@ -746,7 +766,7 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wed_w32(dev, MTK_WED_WPDMA_RX_GLO_CFG, dev->wlan.wpdma_rx_glo);
|
wed_w32(dev, MTK_WED_WPDMA_RX_GLO_CFG, dev->wlan.wpdma_rx_glo);
|
||||||
@ -47,7 +47,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -941,22 +961,10 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -940,22 +960,10 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);
|
wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);
|
||||||
|
|
||||||
if (mtk_wed_is_v1(dev->hw)) {
|
if (mtk_wed_is_v1(dev->hw)) {
|
||||||
@ -70,7 +70,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_TX_BM_DYN_THR,
|
wed_w32(dev, MTK_WED_TX_BM_DYN_THR,
|
||||||
FIELD_PREP(MTK_WED_TX_BM_DYN_THR_LO_V2, 0) |
|
FIELD_PREP(MTK_WED_TX_BM_DYN_THR_LO_V2, 0) |
|
||||||
MTK_WED_TX_BM_DYN_THR_HI_V2);
|
MTK_WED_TX_BM_DYN_THR_HI_V2);
|
||||||
@@ -971,6 +979,11 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -970,6 +978,11 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
MTK_WED_TX_TKID_DYN_THR_HI);
|
MTK_WED_TX_TKID_DYN_THR_HI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
||||||
|
|
||||||
if (mtk_wed_is_v1(dev->hw)) {
|
if (mtk_wed_is_v1(dev->hw)) {
|
||||||
@@ -1105,13 +1118,8 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
@@ -1104,13 +1117,8 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_WED_RX_DMA);
|
mtk_wed_reset(dev, MTK_WED_RESET_WED_RX_DMA);
|
||||||
} else {
|
} else {
|
||||||
@ -98,7 +98,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_RESET_IDX, 0);
|
wed_w32(dev, MTK_WED_RESET_IDX, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1164,7 +1172,8 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
@@ -1163,7 +1171,8 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
||||||
if (busy) {
|
if (busy) {
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_WED_TX_DMA);
|
mtk_wed_reset(dev, MTK_WED_RESET_WED_TX_DMA);
|
||||||
} else {
|
} else {
|
||||||
@ -108,7 +108,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_RESET_IDX, 0);
|
wed_w32(dev, MTK_WED_RESET_IDX, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1256,7 +1265,6 @@ static int
|
@@ -1255,7 +1264,6 @@ static int
|
||||||
mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
|
mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
|
||||||
bool reset)
|
bool reset)
|
||||||
{
|
{
|
||||||
@ -116,7 +116,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
struct mtk_wed_ring *wdma;
|
struct mtk_wed_ring *wdma;
|
||||||
|
|
||||||
if (idx >= ARRAY_SIZE(dev->rx_wdma))
|
if (idx >= ARRAY_SIZE(dev->rx_wdma))
|
||||||
@@ -1264,7 +1272,7 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_we
|
@@ -1263,7 +1271,7 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_we
|
||||||
|
|
||||||
wdma = &dev->rx_wdma[idx];
|
wdma = &dev->rx_wdma[idx];
|
||||||
if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
|
if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
|
||||||
@ -125,7 +125,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_BASE,
|
wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_BASE,
|
||||||
@@ -1285,7 +1293,6 @@ static int
|
@@ -1284,7 +1292,6 @@ 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)
|
bool reset)
|
||||||
{
|
{
|
||||||
@ -133,7 +133,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
struct mtk_wed_ring *wdma;
|
struct mtk_wed_ring *wdma;
|
||||||
|
|
||||||
if (idx >= ARRAY_SIZE(dev->tx_wdma))
|
if (idx >= ARRAY_SIZE(dev->tx_wdma))
|
||||||
@@ -1293,7 +1300,7 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
|
@@ -1292,7 +1299,7 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
|
||||||
|
|
||||||
wdma = &dev->tx_wdma[idx];
|
wdma = &dev->tx_wdma[idx];
|
||||||
if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
|
if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
|
||||||
@ -142,7 +142,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
|
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
|
||||||
@@ -1932,7 +1939,12 @@ void mtk_wed_add_hw(struct device_node *
|
@@ -1928,7 +1935,12 @@ void mtk_wed_add_hw(struct device_node *
|
||||||
hw->irq = irq;
|
hw->irq = irq;
|
||||||
hw->version = eth->soc->version;
|
hw->version = eth->soc->version;
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
|
hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
|
||||||
"mediatek,pcie-mirror");
|
"mediatek,pcie-mirror");
|
||||||
hw->hifsys = syscon_regmap_lookup_by_phandle(eth_np,
|
hw->hifsys = syscon_regmap_lookup_by_phandle(eth_np,
|
||||||
@@ -1946,6 +1958,8 @@ void mtk_wed_add_hw(struct device_node *
|
@@ -1942,6 +1954,8 @@ void mtk_wed_add_hw(struct device_node *
|
||||||
regmap_write(hw->mirror, 0, 0);
|
regmap_write(hw->mirror, 0, 0);
|
||||||
regmap_write(hw->mirror, 4, 0);
|
regmap_write(hw->mirror, 4, 0);
|
||||||
}
|
}
|
||||||
|
@ -302,7 +302,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
mtk_wed_set_512_support(dev, false);
|
mtk_wed_set_512_support(dev, false);
|
||||||
@@ -652,6 +699,14 @@ mtk_wed_deinit(struct mtk_wed_device *de
|
@@ -651,6 +698,14 @@ mtk_wed_deinit(struct mtk_wed_device *de
|
||||||
MTK_WED_CTRL_RX_ROUTE_QM_EN |
|
MTK_WED_CTRL_RX_ROUTE_QM_EN |
|
||||||
MTK_WED_CTRL_WED_RX_BM_EN |
|
MTK_WED_CTRL_WED_RX_BM_EN |
|
||||||
MTK_WED_CTRL_RX_RRO_QM_EN);
|
MTK_WED_CTRL_RX_RRO_QM_EN);
|
||||||
@ -317,7 +317,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -701,21 +756,37 @@ mtk_wed_detach(struct mtk_wed_device *de
|
@@ -700,21 +755,37 @@ mtk_wed_detach(struct mtk_wed_device *de
|
||||||
mutex_unlock(&hw_lock);
|
mutex_unlock(&hw_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,7 +362,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
wed_w32(dev, MTK_WED_PCIE_INT_CTRL,
|
wed_w32(dev, MTK_WED_PCIE_INT_CTRL,
|
||||||
FIELD_PREP(MTK_WED_PCIE_INT_CTRL_POLL_EN, 2));
|
FIELD_PREP(MTK_WED_PCIE_INT_CTRL_POLL_EN, 2));
|
||||||
@@ -723,19 +794,9 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
@@ -722,19 +793,9 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
||||||
/* pcie interrupt control: pola/source selection */
|
/* pcie interrupt control: pola/source selection */
|
||||||
wed_set(dev, MTK_WED_PCIE_INT_CTRL,
|
wed_set(dev, MTK_WED_PCIE_INT_CTRL,
|
||||||
MTK_WED_PCIE_INT_CTRL_MSK_EN_POLA |
|
MTK_WED_PCIE_INT_CTRL_MSK_EN_POLA |
|
||||||
@ -385,7 +385,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MTK_WED_BUS_AXI:
|
case MTK_WED_BUS_AXI:
|
||||||
@@ -773,18 +834,19 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
@@ -772,18 +833,19 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
||||||
static void
|
static void
|
||||||
mtk_wed_hw_init_early(struct mtk_wed_device *dev)
|
mtk_wed_hw_init_early(struct mtk_wed_device *dev)
|
||||||
{
|
{
|
||||||
@ -412,7 +412,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set);
|
wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set);
|
||||||
|
|
||||||
if (mtk_wed_is_v1(dev->hw)) {
|
if (mtk_wed_is_v1(dev->hw)) {
|
||||||
@@ -932,11 +994,18 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_
|
@@ -931,11 +993,18 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_
|
||||||
}
|
}
|
||||||
|
|
||||||
/* configure RX_ROUTE_QM */
|
/* configure RX_ROUTE_QM */
|
||||||
@ -436,7 +436,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
/* enable RX_ROUTE_QM */
|
/* enable RX_ROUTE_QM */
|
||||||
wed_set(dev, MTK_WED_CTRL, MTK_WED_CTRL_RX_ROUTE_QM_EN);
|
wed_set(dev, MTK_WED_CTRL, MTK_WED_CTRL_RX_ROUTE_QM_EN);
|
||||||
}
|
}
|
||||||
@@ -949,22 +1018,30 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -948,22 +1017,30 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
|
|
||||||
dev->init_done = true;
|
dev->init_done = true;
|
||||||
mtk_wed_set_ext_int(dev, false);
|
mtk_wed_set_ext_int(dev, false);
|
||||||
@ -475,7 +475,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_TX_BM_DYN_THR,
|
wed_w32(dev, MTK_WED_TX_BM_DYN_THR,
|
||||||
FIELD_PREP(MTK_WED_TX_BM_DYN_THR_LO_V2, 0) |
|
FIELD_PREP(MTK_WED_TX_BM_DYN_THR_LO_V2, 0) |
|
||||||
MTK_WED_TX_BM_DYN_THR_HI_V2);
|
MTK_WED_TX_BM_DYN_THR_HI_V2);
|
||||||
@@ -974,9 +1051,6 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -973,9 +1050,6 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
dev->tx_buf_ring.size / 128) |
|
dev->tx_buf_ring.size / 128) |
|
||||||
FIELD_PREP(MTK_WED_TX_TKID_CTRL_RSV_GRP_NUM,
|
FIELD_PREP(MTK_WED_TX_TKID_CTRL_RSV_GRP_NUM,
|
||||||
dev->tx_buf_ring.size / 128));
|
dev->tx_buf_ring.size / 128));
|
||||||
@ -485,7 +485,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
wed_w32(dev, dev->hw->soc->regmap.tx_bm_tkid,
|
wed_w32(dev, dev->hw->soc->regmap.tx_bm_tkid,
|
||||||
@@ -986,26 +1060,62 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
@@ -985,26 +1059,62 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||||||
|
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
||||||
|
|
||||||
@ -561,7 +561,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1303,6 +1413,24 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
|
@@ -1302,6 +1412,24 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
|
||||||
dev->hw->soc->wdma_desc_size, true))
|
dev->hw->soc->wdma_desc_size, true))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@ -586,7 +586,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
|
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
|
||||||
wdma->desc_phys);
|
wdma->desc_phys);
|
||||||
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_COUNT,
|
wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_COUNT,
|
||||||
@@ -1368,6 +1496,9 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
@@ -1367,6 +1495,9 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
||||||
|
|
||||||
wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask);
|
wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask);
|
||||||
} else {
|
} else {
|
||||||
@ -596,7 +596,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
/* initail tx interrupt trigger */
|
/* initail tx interrupt trigger */
|
||||||
wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,
|
wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,
|
||||||
MTK_WED_WPDMA_INT_CTRL_TX0_DONE_EN |
|
MTK_WED_WPDMA_INT_CTRL_TX0_DONE_EN |
|
||||||
@@ -1420,33 +1551,60 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
@@ -1419,33 +1550,60 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -668,7 +668,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
|
wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
|
||||||
MTK_WED_WPDMA_GLO_CFG_TX_TKID_KEEP |
|
MTK_WED_WPDMA_GLO_CFG_TX_TKID_KEEP |
|
||||||
MTK_WED_WPDMA_GLO_CFG_TX_DMAD_DW3_PREV);
|
MTK_WED_WPDMA_GLO_CFG_TX_DMAD_DW3_PREV);
|
||||||
@@ -1458,11 +1616,22 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
@@ -1457,11 +1615,22 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||||||
MTK_WED_WDMA_GLO_CFG_TX_DRV_EN |
|
MTK_WED_WDMA_GLO_CFG_TX_DRV_EN |
|
||||||
MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK);
|
MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK);
|
||||||
|
|
||||||
@ -693,7 +693,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
for (i = 0; i < MTK_WED_RX_QUEUES; i++)
|
for (i = 0; i < MTK_WED_RX_QUEUES; i++)
|
||||||
mtk_wed_check_wfdma_rx_fill(dev, i);
|
mtk_wed_check_wfdma_rx_fill(dev, i);
|
||||||
@@ -1502,6 +1671,12 @@ mtk_wed_start(struct mtk_wed_device *dev
|
@@ -1501,6 +1670,12 @@ mtk_wed_start(struct mtk_wed_device *dev
|
||||||
wed_r32(dev, MTK_WED_EXT_INT_MASK1);
|
wed_r32(dev, MTK_WED_EXT_INT_MASK1);
|
||||||
wed_r32(dev, MTK_WED_EXT_INT_MASK2);
|
wed_r32(dev, MTK_WED_EXT_INT_MASK2);
|
||||||
|
|
||||||
@ -706,7 +706,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
if (mtk_wed_rro_cfg(dev))
|
if (mtk_wed_rro_cfg(dev))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1553,6 +1728,7 @@ mtk_wed_attach(struct mtk_wed_device *de
|
@@ -1552,6 +1727,7 @@ mtk_wed_attach(struct mtk_wed_device *de
|
||||||
dev->irq = hw->irq;
|
dev->irq = hw->irq;
|
||||||
dev->wdma_idx = hw->index;
|
dev->wdma_idx = hw->index;
|
||||||
dev->version = hw->version;
|
dev->version = hw->version;
|
||||||
@ -714,7 +714,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
if (hw->eth->dma_dev == hw->eth->dev &&
|
if (hw->eth->dma_dev == hw->eth->dev &&
|
||||||
of_dma_is_coherent(hw->eth->dev->of_node))
|
of_dma_is_coherent(hw->eth->dev->of_node))
|
||||||
@@ -1620,6 +1796,23 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
|
@@ -1619,6 +1795,23 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
|
||||||
ring->reg_base = MTK_WED_RING_TX(idx);
|
ring->reg_base = MTK_WED_RING_TX(idx);
|
||||||
ring->wpdma = regs;
|
ring->wpdma = regs;
|
||||||
|
|
||||||
@ -738,7 +738,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
/* WED -> WPDMA */
|
/* WED -> WPDMA */
|
||||||
wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_BASE, ring->desc_phys);
|
wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_BASE, ring->desc_phys);
|
||||||
wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_COUNT, MTK_WED_TX_RING_SIZE);
|
wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_COUNT, MTK_WED_TX_RING_SIZE);
|
||||||
@@ -1694,15 +1887,13 @@ mtk_wed_rx_ring_setup(struct mtk_wed_dev
|
@@ -1693,15 +1886,13 @@ mtk_wed_rx_ring_setup(struct mtk_wed_dev
|
||||||
static u32
|
static u32
|
||||||
mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
|
mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
|
||||||
{
|
{
|
||||||
@ -759,7 +759,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
val = wed_r32(dev, MTK_WED_EXT_INT_STATUS);
|
val = wed_r32(dev, MTK_WED_EXT_INT_STATUS);
|
||||||
wed_w32(dev, MTK_WED_EXT_INT_STATUS, val);
|
wed_w32(dev, MTK_WED_EXT_INT_STATUS, val);
|
||||||
@@ -1943,6 +2134,9 @@ void mtk_wed_add_hw(struct device_node *
|
@@ -1939,6 +2130,9 @@ void mtk_wed_add_hw(struct device_node *
|
||||||
case 2:
|
case 2:
|
||||||
hw->soc = &mt7986_data;
|
hw->soc = &mt7986_data;
|
||||||
break;
|
break;
|
||||||
|
@ -56,7 +56,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1546,6 +1537,7 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
@@ -1545,6 +1536,7 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
||||||
wed_w32(dev, MTK_WED_INT_MASK, irq_mask);
|
wed_w32(dev, MTK_WED_INT_MASK, irq_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
static void
|
static void
|
||||||
mtk_wed_dma_enable(struct mtk_wed_device *dev)
|
mtk_wed_dma_enable(struct mtk_wed_device *dev)
|
||||||
{
|
{
|
||||||
@@ -1633,8 +1625,26 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
@@ -1632,8 +1624,26 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||||||
wdma_set(dev, MTK_WDMA_WRBK_TX_CFG, MTK_WDMA_WRBK_TX_CFG_WRBK_EN);
|
wdma_set(dev, MTK_WDMA_WRBK_TX_CFG, MTK_WDMA_WRBK_TX_CFG_WRBK_EN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
mtk_wed_tx_buffer_alloc(struct mtk_wed_device *dev)
|
mtk_wed_tx_buffer_alloc(struct mtk_wed_device *dev)
|
||||||
{
|
{
|
||||||
u32 desc_size = dev->hw->soc->tx_ring_desc_size;
|
u32 desc_size = dev->hw->soc->tx_ring_desc_size;
|
||||||
@@ -709,6 +840,7 @@ __mtk_wed_detach(struct mtk_wed_device *
|
@@ -708,6 +839,7 @@ __mtk_wed_detach(struct mtk_wed_device *
|
||||||
|
|
||||||
mtk_wdma_rx_reset(dev);
|
mtk_wdma_rx_reset(dev);
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_WED);
|
mtk_wed_reset(dev, MTK_WED_RESET_WED);
|
||||||
@ -256,7 +256,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
mtk_wed_free_tx_buffer(dev);
|
mtk_wed_free_tx_buffer(dev);
|
||||||
mtk_wed_free_tx_rings(dev);
|
mtk_wed_free_tx_rings(dev);
|
||||||
|
|
||||||
@@ -1129,23 +1261,6 @@ mtk_wed_ring_reset(struct mtk_wed_ring *
|
@@ -1128,23 +1260,6 @@ mtk_wed_ring_reset(struct mtk_wed_ring *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,7 +280,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
static int
|
static int
|
||||||
mtk_wed_rx_reset(struct mtk_wed_device *dev)
|
mtk_wed_rx_reset(struct mtk_wed_device *dev)
|
||||||
{
|
{
|
||||||
@@ -1692,6 +1807,7 @@ mtk_wed_start(struct mtk_wed_device *dev
|
@@ -1691,6 +1806,7 @@ mtk_wed_start(struct mtk_wed_device *dev
|
||||||
}
|
}
|
||||||
|
|
||||||
mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
|
mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
|
||||||
@ -288,7 +288,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
mtk_wed_dma_enable(dev);
|
mtk_wed_dma_enable(dev);
|
||||||
dev->running = true;
|
dev->running = true;
|
||||||
@@ -1748,6 +1864,10 @@ mtk_wed_attach(struct mtk_wed_device *de
|
@@ -1747,6 +1863,10 @@ mtk_wed_attach(struct mtk_wed_device *de
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -935,6 +1056,8 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
@@ -934,6 +1055,8 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
||||||
static void
|
static void
|
||||||
mtk_wed_set_wpdma(struct mtk_wed_device *dev)
|
mtk_wed_set_wpdma(struct mtk_wed_device *dev)
|
||||||
{
|
{
|
||||||
@ -182,7 +182,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
if (mtk_wed_is_v1(dev->hw)) {
|
if (mtk_wed_is_v1(dev->hw)) {
|
||||||
wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
|
wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
|
||||||
return;
|
return;
|
||||||
@@ -952,6 +1075,15 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
@@ -951,6 +1074,15 @@ mtk_wed_set_wpdma(struct mtk_wed_device
|
||||||
|
|
||||||
wed_w32(dev, MTK_WED_WPDMA_RX_GLO_CFG, dev->wlan.wpdma_rx_glo);
|
wed_w32(dev, MTK_WED_WPDMA_RX_GLO_CFG, dev->wlan.wpdma_rx_glo);
|
||||||
wed_w32(dev, dev->hw->soc->regmap.wpdma_rx_ring0, dev->wlan.wpdma_rx);
|
wed_w32(dev, dev->hw->soc->regmap.wpdma_rx_ring0, dev->wlan.wpdma_rx);
|
||||||
@ -198,7 +198,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1763,6 +1895,165 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
@@ -1762,6 +1894,165 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -364,7 +364,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
mtk_wed_start(struct mtk_wed_device *dev, u32 irq_mask)
|
mtk_wed_start(struct mtk_wed_device *dev, u32 irq_mask)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -2216,6 +2507,10 @@ void mtk_wed_add_hw(struct device_node *
|
@@ -2212,6 +2503,10 @@ void mtk_wed_add_hw(struct device_node *
|
||||||
.detach = mtk_wed_detach,
|
.detach = mtk_wed_detach,
|
||||||
.ppe_check = mtk_wed_ppe_check,
|
.ppe_check = mtk_wed_ppe_check,
|
||||||
.setup_tc = mtk_wed_setup_tc,
|
.setup_tc = mtk_wed_setup_tc,
|
||||||
|
@ -205,7 +205,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wdma_w32(dev, MTK_WDMA_RESET_IDX, MTK_WDMA_RESET_IDX_TX);
|
wdma_w32(dev, MTK_WDMA_RESET_IDX, MTK_WDMA_RESET_IDX_TX);
|
||||||
wdma_w32(dev, MTK_WDMA_RESET_IDX, 0);
|
wdma_w32(dev, MTK_WDMA_RESET_IDX, 0);
|
||||||
|
|
||||||
@@ -1406,13 +1570,33 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
@@ -1405,13 +1569,33 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -239,7 +239,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_WPDMA_RX_D_RST_IDX,
|
wed_w32(dev, MTK_WED_WPDMA_RX_D_RST_IDX,
|
||||||
MTK_WED_WPDMA_RX_D_RST_CRX_IDX |
|
MTK_WED_WPDMA_RX_D_RST_CRX_IDX |
|
||||||
MTK_WED_WPDMA_RX_D_RST_DRV_IDX);
|
MTK_WED_WPDMA_RX_D_RST_DRV_IDX);
|
||||||
@@ -1440,23 +1624,52 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
@@ -1439,23 +1623,52 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
||||||
wed_w32(dev, MTK_WED_RROQM_RST_IDX, 0);
|
wed_w32(dev, MTK_WED_RROQM_RST_IDX, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +298,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
mtk_wed_reset(dev, MTK_WED_RESET_WDMA_TX_DRV);
|
mtk_wed_reset(dev, MTK_WED_RESET_WDMA_TX_DRV);
|
||||||
|
|
||||||
/* reset wed rx dma */
|
/* reset wed rx dma */
|
||||||
@@ -1477,6 +1690,14 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
@@ -1476,6 +1689,14 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
||||||
MTK_WED_CTRL_WED_RX_BM_BUSY);
|
MTK_WED_CTRL_WED_RX_BM_BUSY);
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_RX_BM);
|
mtk_wed_reset(dev, MTK_WED_RESET_RX_BM);
|
||||||
|
|
||||||
@ -313,7 +313,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
/* wo change to enable state */
|
/* wo change to enable state */
|
||||||
val = MTK_WED_WO_STATE_ENABLE;
|
val = MTK_WED_WO_STATE_ENABLE;
|
||||||
ret = mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
|
ret = mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
|
||||||
@@ -1494,6 +1715,7 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
@@ -1493,6 +1714,7 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
mtk_wed_free_rx_buffer(dev);
|
mtk_wed_free_rx_buffer(dev);
|
||||||
@ -321,7 +321,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1527,15 +1749,41 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
@@ -1526,15 +1748,41 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
||||||
|
|
||||||
/* 2. reset WDMA rx DMA */
|
/* 2. reset WDMA rx DMA */
|
||||||
busy = !!mtk_wdma_rx_reset(dev);
|
busy = !!mtk_wdma_rx_reset(dev);
|
||||||
@ -364,7 +364,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
wed_w32(dev, MTK_WED_WDMA_RESET_IDX,
|
wed_w32(dev, MTK_WED_WDMA_RESET_IDX,
|
||||||
MTK_WED_WDMA_RESET_IDX_RX | MTK_WED_WDMA_RESET_IDX_DRV);
|
MTK_WED_WDMA_RESET_IDX_RX | MTK_WED_WDMA_RESET_IDX_DRV);
|
||||||
wed_w32(dev, MTK_WED_WDMA_RESET_IDX, 0);
|
wed_w32(dev, MTK_WED_WDMA_RESET_IDX, 0);
|
||||||
@@ -1551,8 +1799,13 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
@@ -1550,8 +1798,13 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
||||||
wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||||||
|
|
||||||
for (i = 0; i < 100; i++) {
|
for (i = 0; i < 100; i++) {
|
||||||
@ -380,7 +380,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1574,6 +1827,8 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
@@ -1573,6 +1826,8 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_INT_AGENT);
|
mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_INT_AGENT);
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_TX_DRV);
|
mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_TX_DRV);
|
||||||
mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_RX_DRV);
|
mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_RX_DRV);
|
||||||
@ -389,7 +389,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
} else {
|
} else {
|
||||||
wed_w32(dev, MTK_WED_WPDMA_RESET_IDX,
|
wed_w32(dev, MTK_WED_WPDMA_RESET_IDX,
|
||||||
MTK_WED_WPDMA_RESET_IDX_TX |
|
MTK_WED_WPDMA_RESET_IDX_TX |
|
||||||
@@ -1590,7 +1845,14 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
@@ -1589,7 +1844,14 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
||||||
wed_w32(dev, MTK_WED_RESET_IDX, 0);
|
wed_w32(dev, MTK_WED_RESET_IDX, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,7 +405,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -1842,6 +2104,7 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
@@ -1841,6 +2103,7 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||||||
MTK_WED_WPDMA_GLO_CFG_RX_DRV_UNS_VER_FORCE_4);
|
MTK_WED_WPDMA_GLO_CFG_RX_DRV_UNS_VER_FORCE_4);
|
||||||
|
|
||||||
wdma_set(dev, MTK_WDMA_PREF_RX_CFG, MTK_WDMA_PREF_RX_CFG_PREF_EN);
|
wdma_set(dev, MTK_WDMA_PREF_RX_CFG, MTK_WDMA_PREF_RX_CFG_PREF_EN);
|
||||||
@ -413,7 +413,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
|
wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
|
||||||
@@ -1905,6 +2168,12 @@ mtk_wed_start_hw_rro(struct mtk_wed_devi
|
@@ -1904,6 +2167,12 @@ mtk_wed_start_hw_rro(struct mtk_wed_devi
|
||||||
if (!mtk_wed_get_rx_capa(dev) || !dev->wlan.hw_rro)
|
if (!mtk_wed_get_rx_capa(dev) || !dev->wlan.hw_rro)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||||
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||||
@@ -3003,13 +3003,25 @@ static void stmmac_tx_timer_arm(struct s
|
@@ -2988,13 +2988,25 @@ static void stmmac_tx_timer_arm(struct s
|
||||||
{
|
{
|
||||||
struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
|
struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
|
||||||
u32 tx_coal_timer = priv->tx_coal_timer[queue];
|
u32 tx_coal_timer = priv->tx_coal_timer[queue];
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||||
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||||
@@ -2551,9 +2551,13 @@ static void stmmac_bump_dma_threshold(st
|
@@ -2536,9 +2536,13 @@ static void stmmac_bump_dma_threshold(st
|
||||||
* @priv: driver private structure
|
* @priv: driver private structure
|
||||||
* @budget: napi budget limiting this functions packet handling
|
* @budget: napi budget limiting this functions packet handling
|
||||||
* @queue: TX queue index
|
* @queue: TX queue index
|
||||||
@ -33,7 +33,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
{
|
{
|
||||||
struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
|
struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
|
||||||
struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];
|
struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];
|
||||||
@@ -2713,7 +2717,7 @@ static int stmmac_tx_clean(struct stmmac
|
@@ -2698,7 +2702,7 @@ static int stmmac_tx_clean(struct stmmac
|
||||||
|
|
||||||
/* We still have pending packets, let's call for a new scheduling */
|
/* We still have pending packets, let's call for a new scheduling */
|
||||||
if (tx_q->dirty_tx != tx_q->cur_tx)
|
if (tx_q->dirty_tx != tx_q->cur_tx)
|
||||||
@ -42,7 +42,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
u64_stats_update_begin(&txq_stats->napi_syncp);
|
u64_stats_update_begin(&txq_stats->napi_syncp);
|
||||||
u64_stats_add(&txq_stats->napi.tx_packets, tx_packets);
|
u64_stats_add(&txq_stats->napi.tx_packets, tx_packets);
|
||||||
@@ -5605,6 +5609,7 @@ static int stmmac_napi_poll_tx(struct na
|
@@ -5590,6 +5594,7 @@ static int stmmac_napi_poll_tx(struct na
|
||||||
container_of(napi, struct stmmac_channel, tx_napi);
|
container_of(napi, struct stmmac_channel, tx_napi);
|
||||||
struct stmmac_priv *priv = ch->priv_data;
|
struct stmmac_priv *priv = ch->priv_data;
|
||||||
struct stmmac_txq_stats *txq_stats;
|
struct stmmac_txq_stats *txq_stats;
|
||||||
@ -50,7 +50,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
u32 chan = ch->index;
|
u32 chan = ch->index;
|
||||||
int work_done;
|
int work_done;
|
||||||
|
|
||||||
@@ -5613,7 +5618,7 @@ static int stmmac_napi_poll_tx(struct na
|
@@ -5598,7 +5603,7 @@ static int stmmac_napi_poll_tx(struct na
|
||||||
u64_stats_inc(&txq_stats->napi.poll);
|
u64_stats_inc(&txq_stats->napi.poll);
|
||||||
u64_stats_update_end(&txq_stats->napi_syncp);
|
u64_stats_update_end(&txq_stats->napi_syncp);
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
work_done = min(work_done, budget);
|
work_done = min(work_done, budget);
|
||||||
|
|
||||||
if (work_done < budget && napi_complete_done(napi, work_done)) {
|
if (work_done < budget && napi_complete_done(napi, work_done)) {
|
||||||
@@ -5624,6 +5629,10 @@ static int stmmac_napi_poll_tx(struct na
|
@@ -5609,6 +5614,10 @@ static int stmmac_napi_poll_tx(struct na
|
||||||
spin_unlock_irqrestore(&ch->lock, flags);
|
spin_unlock_irqrestore(&ch->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
return work_done;
|
return work_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5632,6 +5641,7 @@ static int stmmac_napi_poll_rxtx(struct
|
@@ -5617,6 +5626,7 @@ static int stmmac_napi_poll_rxtx(struct
|
||||||
struct stmmac_channel *ch =
|
struct stmmac_channel *ch =
|
||||||
container_of(napi, struct stmmac_channel, rxtx_napi);
|
container_of(napi, struct stmmac_channel, rxtx_napi);
|
||||||
struct stmmac_priv *priv = ch->priv_data;
|
struct stmmac_priv *priv = ch->priv_data;
|
||||||
@ -78,7 +78,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
int rx_done, tx_done, rxtx_done;
|
int rx_done, tx_done, rxtx_done;
|
||||||
struct stmmac_rxq_stats *rxq_stats;
|
struct stmmac_rxq_stats *rxq_stats;
|
||||||
struct stmmac_txq_stats *txq_stats;
|
struct stmmac_txq_stats *txq_stats;
|
||||||
@@ -5647,7 +5657,7 @@ static int stmmac_napi_poll_rxtx(struct
|
@@ -5632,7 +5642,7 @@ static int stmmac_napi_poll_rxtx(struct
|
||||||
u64_stats_inc(&txq_stats->napi.poll);
|
u64_stats_inc(&txq_stats->napi.poll);
|
||||||
u64_stats_update_end(&txq_stats->napi_syncp);
|
u64_stats_update_end(&txq_stats->napi_syncp);
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
tx_done = min(tx_done, budget);
|
tx_done = min(tx_done, budget);
|
||||||
|
|
||||||
rx_done = stmmac_rx_zc(priv, budget, chan);
|
rx_done = stmmac_rx_zc(priv, budget, chan);
|
||||||
@@ -5672,6 +5682,10 @@ static int stmmac_napi_poll_rxtx(struct
|
@@ -5657,6 +5667,10 @@ static int stmmac_napi_poll_rxtx(struct
|
||||||
spin_unlock_irqrestore(&ch->lock, flags);
|
spin_unlock_irqrestore(&ch->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ Subject: [PATCH] net/usb/qmi_wwan: add MeigLink modem support
|
|||||||
|
|
||||||
#define QUECTEL_VENDOR_ID 0x2c7c
|
#define QUECTEL_VENDOR_ID 0x2c7c
|
||||||
/* These Quectel products use Quectel's vendor ID */
|
/* These Quectel products use Quectel's vendor ID */
|
||||||
@@ -1152,6 +1157,11 @@ static const struct usb_device_id option
|
@@ -1156,6 +1161,11 @@ static const struct usb_device_id option
|
||||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
|
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
|
||||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000), /* SIMCom SIM5218 */
|
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000), /* SIMCom SIM5218 */
|
||||||
.driver_info = NCTRL(0) | NCTRL(1) | NCTRL(2) | NCTRL(3) | RSVD(4) },
|
.driver_info = NCTRL(0) | NCTRL(1) | NCTRL(2) | NCTRL(3) | RSVD(4) },
|
||||||
@ -55,7 +55,7 @@ Subject: [PATCH] net/usb/qmi_wwan: add MeigLink modem support
|
|||||||
/* Quectel products using Qualcomm vendor ID */
|
/* Quectel products using Qualcomm vendor ID */
|
||||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)},
|
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)},
|
||||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20),
|
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20),
|
||||||
@@ -1193,6 +1203,11 @@ static const struct usb_device_id option
|
@@ -1197,6 +1207,11 @@ static const struct usb_device_id option
|
||||||
.driver_info = ZLP },
|
.driver_info = ZLP },
|
||||||
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
||||||
.driver_info = RSVD(4) },
|
.driver_info = RSVD(4) },
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/usb/serial/option.c
|
--- a/drivers/usb/serial/option.c
|
||||||
+++ b/drivers/usb/serial/option.c
|
+++ b/drivers/usb/serial/option.c
|
||||||
@@ -642,6 +642,7 @@ static void option_instat_callback(struc
|
@@ -646,6 +646,7 @@ static void option_instat_callback(struc
|
||||||
|
|
||||||
|
|
||||||
static const struct usb_device_id option_ids[] = {
|
static const struct usb_device_id option_ids[] = {
|
||||||
@ -8,7 +8,7 @@
|
|||||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
|
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
|
||||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
|
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
|
||||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
|
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
|
||||||
@@ -2379,6 +2380,15 @@ static int option_probe(struct usb_seria
|
@@ -2419,6 +2420,15 @@ static int option_probe(struct usb_seria
|
||||||
if (device_flags & NUMEP2 && iface_desc->bNumEndpoints != 2)
|
if (device_flags & NUMEP2 && iface_desc->bNumEndpoints != 2)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/bridge/br_input.c
|
--- a/net/bridge/br_input.c
|
||||||
+++ b/net/bridge/br_input.c
|
+++ b/net/bridge/br_input.c
|
||||||
@@ -239,6 +239,9 @@ static void __br_handle_local_finish(str
|
@@ -244,6 +244,9 @@ static void __br_handle_local_finish(str
|
||||||
/* note: already called with rcu_read_lock */
|
/* note: already called with rcu_read_lock */
|
||||||
static int br_handle_local_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
|
static int br_handle_local_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
__br_handle_local_finish(skb);
|
__br_handle_local_finish(skb);
|
||||||
|
|
||||||
/* return 1 to signal the okfn() was called so it's ok to use the skb */
|
/* return 1 to signal the okfn() was called so it's ok to use the skb */
|
||||||
@@ -408,6 +411,17 @@ forward:
|
@@ -415,6 +418,17 @@ forward:
|
||||||
goto defer_stp_filtering;
|
goto defer_stp_filtering;
|
||||||
|
|
||||||
switch (p->state) {
|
switch (p->state) {
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/netfilter/nf_tables_api.c
|
--- a/net/netfilter/nf_tables_api.c
|
||||||
+++ b/net/netfilter/nf_tables_api.c
|
+++ b/net/netfilter/nf_tables_api.c
|
||||||
@@ -8260,7 +8260,7 @@ static int nft_register_flowtable_net_ho
|
@@ -8268,7 +8268,7 @@ static int nft_register_flowtable_net_ho
|
||||||
err = flowtable->data.type->setup(&flowtable->data,
|
err = flowtable->data.type->setup(&flowtable->data,
|
||||||
hook->ops.dev,
|
hook->ops.dev,
|
||||||
FLOW_BLOCK_BIND);
|
FLOW_BLOCK_BIND);
|
||||||
|
@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (!(p->flags & BR_BCAST_FLOOD) && skb->dev != br->dev)
|
if (!(p->flags & BR_BCAST_FLOOD) && skb->dev != br->dev)
|
||||||
--- a/net/bridge/br_input.c
|
--- a/net/bridge/br_input.c
|
||||||
+++ b/net/bridge/br_input.c
|
+++ b/net/bridge/br_input.c
|
||||||
@@ -362,6 +362,8 @@ static rx_handler_result_t br_handle_fra
|
@@ -367,6 +367,8 @@ static rx_handler_result_t br_handle_fra
|
||||||
fwd_mask |= p->group_fwd_mask;
|
fwd_mask |= p->group_fwd_mask;
|
||||||
switch (dest[5]) {
|
switch (dest[5]) {
|
||||||
case 0x00: /* Bridge Group Address */
|
case 0x00: /* Bridge Group Address */
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/mt7530.c
|
--- a/drivers/net/dsa/mt7530.c
|
||||||
+++ b/drivers/net/dsa/mt7530.c
|
+++ b/drivers/net/dsa/mt7530.c
|
||||||
@@ -2465,6 +2465,10 @@ mt7530_setup(struct dsa_switch *ds)
|
@@ -2467,6 +2467,10 @@ mt7530_setup(struct dsa_switch *ds)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/mt7530.c
|
--- a/drivers/net/dsa/mt7530.c
|
||||||
+++ b/drivers/net/dsa/mt7530.c
|
+++ b/drivers/net/dsa/mt7530.c
|
||||||
@@ -2353,10 +2353,13 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
@@ -2355,10 +2355,13 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||||
{
|
{
|
||||||
struct dsa_switch *ds = priv->ds;
|
struct dsa_switch *ds = priv->ds;
|
||||||
struct device *dev = priv->dev;
|
struct device *dev = priv->dev;
|
||||||
@ -30,7 +30,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
bus = devm_mdiobus_alloc(dev);
|
bus = devm_mdiobus_alloc(dev);
|
||||||
if (!bus)
|
if (!bus)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -2375,7 +2378,9 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
@@ -2377,7 +2380,9 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||||
if (priv->irq)
|
if (priv->irq)
|
||||||
mt7530_setup_mdio_irq(priv);
|
mt7530_setup_mdio_irq(priv);
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
#endif /* __LINUX_USB_PCI_QUIRKS_H */
|
#endif /* __LINUX_USB_PCI_QUIRKS_H */
|
||||||
--- a/include/linux/usb/hcd.h
|
--- a/include/linux/usb/hcd.h
|
||||||
+++ b/include/linux/usb/hcd.h
|
+++ b/include/linux/usb/hcd.h
|
||||||
@@ -484,7 +484,14 @@ extern int usb_hcd_pci_probe(struct pci_
|
@@ -485,7 +485,14 @@ extern int usb_hcd_pci_probe(struct pci_
|
||||||
extern void usb_hcd_pci_remove(struct pci_dev *dev);
|
extern void usb_hcd_pci_remove(struct pci_dev *dev);
|
||||||
extern void usb_hcd_pci_shutdown(struct pci_dev *dev);
|
extern void usb_hcd_pci_shutdown(struct pci_dev *dev);
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
/*
|
/*
|
||||||
* We need to store the untouched command line for future reference.
|
* We need to store the untouched command line for future reference.
|
||||||
* We also need to store the touched command line since the parameter
|
* We also need to store the touched command line since the parameter
|
||||||
@@ -896,6 +919,7 @@ void start_kernel(void)
|
@@ -898,6 +921,7 @@ void start_kernel(void)
|
||||||
pr_notice("%s", linux_banner);
|
pr_notice("%s", linux_banner);
|
||||||
early_security_init();
|
early_security_init();
|
||||||
setup_arch(&command_line);
|
setup_arch(&command_line);
|
||||||
|
Loading…
Reference in New Issue
Block a user