Skip to content

Commit

Permalink
kernel: backport upstream mediatek WED changes
Browse files Browse the repository at this point in the history
Reorder and update existing patches

Signed-off-by: Felix Fietkau <nbd@nbd.name>
  • Loading branch information
nbd168 committed Dec 8, 2023
1 parent 0c1cffd commit 6407ef8
Show file tree
Hide file tree
Showing 105 changed files with 9,606 additions and 359 deletions.
Expand Up @@ -82,7 +82,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>

if (!hw_list[!hw->index]->wed_dev &&
hw->eth->dma_dev != hw->eth->dev)
@@ -356,40 +380,54 @@ mtk_wed_detach(struct mtk_wed_device *de
@@ -356,40 +380,47 @@ mtk_wed_detach(struct mtk_wed_device *de
static void
mtk_wed_bus_init(struct mtk_wed_device *dev)
{
Expand All @@ -97,7 +97,6 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+ case MTK_WED_BUS_PCIE: {
+ struct device_node *np = dev->hw->eth->dev->of_node;
+ struct regmap *regs;
+ u32 val;
+
+ regs = syscon_regmap_lookup_by_phandle(np,
+ "mediatek,wed-pcie");
Expand Down Expand Up @@ -139,20 +138,14 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+ FIELD_PREP(MTK_WED_PCIE_INT_CTRL_SRC_SEL, 1));
+ wed_r32(dev, MTK_WED_PCIE_INT_CTRL);
+
+ val = wed_r32(dev, MTK_WED_PCIE_CFG_INTM);
+ val = wed_r32(dev, MTK_WED_PCIE_CFG_BASE);
+ wed_w32(dev, MTK_WED_PCIE_CFG_INTM, PCIE_BASE_ADDR0 | 0x180);
+ wed_w32(dev, MTK_WED_PCIE_CFG_BASE, PCIE_BASE_ADDR0 | 0x184);
+
+ val = wed_r32(dev, MTK_WED_PCIE_CFG_INTM);
+ val = wed_r32(dev, MTK_WED_PCIE_CFG_BASE);
+
+ /* pcie interrupt status trigger register */
+ wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER, BIT(24));
+ wed_r32(dev, MTK_WED_PCIE_INT_TRIGGER);
+
+ /* pola setting */
+ val = wed_r32(dev, MTK_WED_PCIE_INT_CTRL);
+ wed_set(dev, MTK_WED_PCIE_INT_CTRL,
+ MTK_WED_PCIE_INT_CTRL_MSK_EN_POLA);
+ break;
Expand All @@ -168,7 +161,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
}

static void
@@ -800,12 +838,14 @@ mtk_wed_attach(struct mtk_wed_device *de
@@ -800,12 +831,14 @@ mtk_wed_attach(struct mtk_wed_device *de
__releases(RCU)
{
struct mtk_wed_hw *hw;
Expand All @@ -184,7 +177,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
!try_module_get(THIS_MODULE))
ret = -ENODEV;

@@ -823,8 +863,10 @@ mtk_wed_attach(struct mtk_wed_device *de
@@ -823,8 +856,10 @@ mtk_wed_attach(struct mtk_wed_device *de
goto out;
}

Expand Down
Expand Up @@ -16,7 +16,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -1084,11 +1084,11 @@ void mtk_wed_add_hw(struct device_node *
@@ -1077,11 +1077,11 @@ void mtk_wed_add_hw(struct device_node *
get_device(&pdev->dev);
irq = platform_get_irq(pdev, 0);
if (irq < 0)
Expand All @@ -30,7 +30,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

rcu_assign_pointer(mtk_soc_wed_ops, &wed_ops);

@@ -1131,8 +1131,14 @@ void mtk_wed_add_hw(struct device_node *
@@ -1124,8 +1124,14 @@ void mtk_wed_add_hw(struct device_node *

hw_list[index] = hw;

Expand Down
Expand Up @@ -15,7 +15,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -1079,7 +1079,7 @@ void mtk_wed_add_hw(struct device_node *
@@ -1072,7 +1072,7 @@ void mtk_wed_add_hw(struct device_node *

pdev = of_find_device_by_node(np);
if (!pdev)
Expand All @@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

get_device(&pdev->dev);
irq = platform_get_irq(pdev, 0);
@@ -1139,6 +1139,8 @@ unlock:
@@ -1132,6 +1132,8 @@ unlock:
mutex_unlock(&hw_lock);
err_put_device:
put_device(&pdev->dev);
Expand All @@ -33,7 +33,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}

void mtk_wed_exit(void)
@@ -1159,6 +1161,7 @@ void mtk_wed_exit(void)
@@ -1152,6 +1154,7 @@ void mtk_wed_exit(void)
hw_list[i] = NULL;
debugfs_remove(hw->debugfs_dir);
put_device(hw->dev);
Expand Down
Expand Up @@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
struct device_node *wlan_node;
@@ -885,9 +888,11 @@ mtk_wed_attach(struct mtk_wed_device *de
@@ -878,9 +881,11 @@ mtk_wed_attach(struct mtk_wed_device *de
}

mtk_wed_hw_init_early(dev);
Expand Down
Expand Up @@ -23,7 +23,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}

static void
@@ -695,10 +695,10 @@ mtk_wed_ring_alloc(struct mtk_wed_device
@@ -688,10 +688,10 @@ mtk_wed_ring_alloc(struct mtk_wed_device
}

static int
Expand All @@ -36,7 +36,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size))
return -ENOMEM;
@@ -812,9 +812,9 @@ mtk_wed_start(struct mtk_wed_device *dev
@@ -805,9 +805,9 @@ mtk_wed_start(struct mtk_wed_device *dev
{
int i;

Expand All @@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

mtk_wed_hw_init(dev);
mtk_wed_configure_irq(dev, irq_mask);
@@ -923,7 +923,7 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
@@ -916,7 +916,7 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
sizeof(*ring->desc)))
return -ENOMEM;

Expand Down
Expand Up @@ -409,7 +409,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
struct device_node *wlan_node;
@@ -441,10 +667,12 @@ mtk_wed_set_wpdma(struct mtk_wed_device
@@ -434,10 +660,12 @@ mtk_wed_set_wpdma(struct mtk_wed_device
} else {
mtk_wed_bus_init(dev);

Expand All @@ -426,7 +426,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
}

@@ -494,6 +722,132 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
@@ -487,6 +715,132 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
}
}

Expand Down Expand Up @@ -559,7 +559,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static void
mtk_wed_hw_init(struct mtk_wed_device *dev)
{
@@ -505,11 +859,11 @@ mtk_wed_hw_init(struct mtk_wed_device *d
@@ -498,11 +852,11 @@ mtk_wed_hw_init(struct mtk_wed_device *d
wed_w32(dev, MTK_WED_TX_BM_CTRL,
MTK_WED_TX_BM_CTRL_PAUSE |
FIELD_PREP(MTK_WED_TX_BM_CTRL_VLD_GRP_NUM,
Expand All @@ -573,7 +573,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);

@@ -536,9 +890,9 @@ mtk_wed_hw_init(struct mtk_wed_device *d
@@ -529,9 +883,9 @@ mtk_wed_hw_init(struct mtk_wed_device *d
wed_w32(dev, MTK_WED_TX_TKID_CTRL,
MTK_WED_TX_TKID_CTRL_PAUSE |
FIELD_PREP(MTK_WED_TX_TKID_CTRL_VLD_GRP_NUM,
Expand All @@ -585,7 +585,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
wed_w32(dev, MTK_WED_TX_TKID_DYN_THR,
FIELD_PREP(MTK_WED_TX_TKID_DYN_THR_LO, 0) |
MTK_WED_TX_TKID_DYN_THR_HI);
@@ -546,18 +900,28 @@ mtk_wed_hw_init(struct mtk_wed_device *d
@@ -539,18 +893,28 @@ mtk_wed_hw_init(struct mtk_wed_device *d

mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);

Expand Down Expand Up @@ -617,7 +617,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
{
void *head = (void *)ring->desc;
int i;
@@ -567,7 +931,10 @@ mtk_wed_ring_reset(struct mtk_wed_ring *
@@ -560,7 +924,10 @@ mtk_wed_ring_reset(struct mtk_wed_ring *

desc = (struct mtk_wdma_desc *)(head + i * ring->desc_size);
desc->buf0 = 0;
Expand All @@ -629,7 +629,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
desc->buf1 = 0;
desc->info = 0;
}
@@ -623,7 +990,8 @@ mtk_wed_reset_dma(struct mtk_wed_device
@@ -616,7 +983,8 @@ mtk_wed_reset_dma(struct mtk_wed_device
if (!dev->tx_ring[i].desc)
continue;

Expand All @@ -639,7 +639,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}

if (mtk_wed_poll_busy(dev))
@@ -641,6 +1009,9 @@ mtk_wed_reset_dma(struct mtk_wed_device
@@ -634,6 +1002,9 @@ mtk_wed_reset_dma(struct mtk_wed_device
wdma_w32(dev, MTK_WDMA_RESET_IDX, MTK_WDMA_RESET_IDX_RX);
wdma_w32(dev, MTK_WDMA_RESET_IDX, 0);

Expand All @@ -649,7 +649,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (busy) {
mtk_wed_reset(dev, MTK_WED_RESET_WDMA_INT_AGENT);
mtk_wed_reset(dev, MTK_WED_RESET_WDMA_RX_DRV);
@@ -675,12 +1046,11 @@ mtk_wed_reset_dma(struct mtk_wed_device
@@ -668,12 +1039,11 @@ mtk_wed_reset_dma(struct mtk_wed_device
MTK_WED_WPDMA_RESET_IDX_RX);
wed_w32(dev, MTK_WED_WPDMA_RESET_IDX, 0);
}
Expand All @@ -663,7 +663,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
{
ring->desc = dma_alloc_coherent(dev->hw->dev, size * desc_size,
&ring->desc_phys, GFP_KERNEL);
@@ -689,7 +1059,7 @@ mtk_wed_ring_alloc(struct mtk_wed_device
@@ -682,7 +1052,7 @@ mtk_wed_ring_alloc(struct mtk_wed_device

ring->desc_size = desc_size;
ring->size = size;
Expand All @@ -672,7 +672,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>

return 0;
}
@@ -698,9 +1068,14 @@ static int
@@ -691,9 +1061,14 @@ static int
mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
{
u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
Expand All @@ -689,7 +689,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return -ENOMEM;

wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_BASE,
@@ -717,6 +1092,60 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_we
@@ -710,6 +1085,60 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_we
return 0;
}

Expand Down Expand Up @@ -750,7 +750,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static void
mtk_wed_configure_irq(struct mtk_wed_device *dev, u32 irq_mask)
{
@@ -739,6 +1168,8 @@ mtk_wed_configure_irq(struct mtk_wed_dev
@@ -732,6 +1161,8 @@ mtk_wed_configure_irq(struct mtk_wed_dev

wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask);
} else {
Expand All @@ -759,7 +759,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* initail tx interrupt trigger */
wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,
MTK_WED_WPDMA_INT_CTRL_TX0_DONE_EN |
@@ -757,6 +1188,16 @@ mtk_wed_configure_irq(struct mtk_wed_dev
@@ -750,6 +1181,16 @@ mtk_wed_configure_irq(struct mtk_wed_dev
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_TRIG,
dev->wlan.txfree_tbit));

Expand All @@ -776,7 +776,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
wed_w32(dev, MTK_WED_WDMA_INT_CLR, wdma_mask);
wed_set(dev, MTK_WED_WDMA_INT_CTRL,
FIELD_PREP(MTK_WED_WDMA_INT_CTRL_POLL_SRC_SEL,
@@ -794,9 +1235,15 @@ mtk_wed_dma_enable(struct mtk_wed_device
@@ -787,9 +1228,15 @@ mtk_wed_dma_enable(struct mtk_wed_device
wdma_set(dev, MTK_WDMA_GLO_CFG,
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
} else {
Expand All @@ -792,7 +792,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
wed_set(dev, MTK_WED_WPDMA_GLO_CFG,
MTK_WED_WPDMA_GLO_CFG_RX_DRV_R0_PKT_PROC |
MTK_WED_WPDMA_GLO_CFG_RX_DRV_R0_CRX_SYNC);
@@ -804,6 +1251,15 @@ mtk_wed_dma_enable(struct mtk_wed_device
@@ -797,6 +1244,15 @@ mtk_wed_dma_enable(struct mtk_wed_device
wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
MTK_WED_WPDMA_GLO_CFG_TX_TKID_KEEP |
MTK_WED_WPDMA_GLO_CFG_TX_DMAD_DW3_PREV);
Expand All @@ -808,7 +808,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
}

@@ -829,7 +1285,19 @@ mtk_wed_start(struct mtk_wed_device *dev
@@ -822,7 +1278,19 @@ mtk_wed_start(struct mtk_wed_device *dev
val |= BIT(0) | (BIT(1) * !!dev->hw->index);
regmap_write(dev->hw->mirror, dev->hw->index * 4, val);
} else {
Expand All @@ -829,7 +829,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}

mtk_wed_dma_enable(dev);
@@ -863,7 +1331,7 @@ mtk_wed_attach(struct mtk_wed_device *de
@@ -856,7 +1324,7 @@ mtk_wed_attach(struct mtk_wed_device *de
if (!hw) {
module_put(THIS_MODULE);
ret = -ENODEV;
Expand All @@ -838,7 +838,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}

device = dev->wlan.bus_type == MTK_WED_BUS_PCIE
@@ -876,15 +1344,24 @@ mtk_wed_attach(struct mtk_wed_device *de
@@ -869,15 +1337,24 @@ mtk_wed_attach(struct mtk_wed_device *de
dev->dev = hw->dev;
dev->irq = hw->irq;
dev->wdma_idx = hw->index;
Expand Down Expand Up @@ -866,7 +866,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}

mtk_wed_hw_init_early(dev);
@@ -893,8 +1370,10 @@ mtk_wed_attach(struct mtk_wed_device *de
@@ -886,8 +1363,10 @@ mtk_wed_attach(struct mtk_wed_device *de
BIT(hw->index), 0);
else
ret = mtk_wed_wo_init(hw);
Expand All @@ -878,7 +878,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mutex_unlock(&hw_lock);

return ret;
@@ -917,10 +1396,11 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
@@ -910,10 +1389,11 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
* WDMA RX.
*/

Expand All @@ -892,7 +892,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return -ENOMEM;

if (mtk_wed_wdma_rx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
@@ -967,6 +1447,37 @@ mtk_wed_txfree_ring_setup(struct mtk_wed
@@ -960,6 +1440,37 @@ mtk_wed_txfree_ring_setup(struct mtk_wed
return 0;
}

Expand Down Expand Up @@ -930,7 +930,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static u32
mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
{
@@ -1063,7 +1574,9 @@ void mtk_wed_add_hw(struct device_node *
@@ -1056,7 +1567,9 @@ void mtk_wed_add_hw(struct device_node *
static const struct mtk_wed_ops wed_ops = {
.attach = mtk_wed_attach,
.tx_ring_setup = mtk_wed_tx_ring_setup,
Expand All @@ -940,7 +940,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.start = mtk_wed_start,
.stop = mtk_wed_stop,
.reset_dma = mtk_wed_reset_dma,
@@ -1072,6 +1585,7 @@ void mtk_wed_add_hw(struct device_node *
@@ -1065,6 +1578,7 @@ void mtk_wed_add_hw(struct device_node *
.irq_get = mtk_wed_irq_get,
.irq_set_mask = mtk_wed_irq_set_mask,
.detach = mtk_wed_detach,
Expand Down
Expand Up @@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}

static void
@@ -1297,9 +1297,10 @@ mtk_wed_start(struct mtk_wed_device *dev
@@ -1290,9 +1290,10 @@ mtk_wed_start(struct mtk_wed_device *dev
if (mtk_wed_rro_cfg(dev))
return;

Expand All @@ -39,7 +39,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_wed_dma_enable(dev);
dev->running = true;
}
@@ -1365,11 +1366,13 @@ mtk_wed_attach(struct mtk_wed_device *de
@@ -1358,11 +1359,13 @@ mtk_wed_attach(struct mtk_wed_device *de
}

mtk_wed_hw_init_early(dev);
Expand Down
Expand Up @@ -70,7 +70,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}

if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
@@ -1006,11 +1009,7 @@ mtk_wed_reset_dma(struct mtk_wed_device
@@ -999,11 +1002,7 @@ mtk_wed_reset_dma(struct mtk_wed_device
wed_w32(dev, MTK_WED_RESET_IDX, 0);
}

Expand Down
Expand Up @@ -67,7 +67,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>

mtk_wdma_rx_reset(dev);
mtk_wed_reset(dev, MTK_WED_RESET_WED);
@@ -677,7 +691,7 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
@@ -670,7 +684,7 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
{
u32 mask, set;

Expand Down

3 comments on commit 6407ef8

@zxlhhyccc
Copy link

@zxlhhyccc zxlhhyccc commented on 6407ef8 Dec 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nbd168 The patch 752-12-v6.7-net-ethernet-mtk_wed-fix-EXT_INT_STATUS_RX_FBUF-defi.patch already exists upstream kernel6.1
image

image

@Ansuel
Copy link
Member

@Ansuel Ansuel commented on 6407ef8 Dec 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nbd168 I could be wrong but... ok didn't notice already reported.

Applying /home/ansuel/openwrt-ansuel/target/linux/generic/backport-6.1/752-12-v6.7-net-ethernet-mtk_wed-fix-EXT_INT_STATUS_RX_FBUF-defi.patch using plaintext:
patching file drivers/net/ethernet/mediatek/mtk_wed_regs.h
Hunk #1 FAILED at 64.
1 out of 1 hunk FAILED -- saving rejects to file drivers/net/ethernet/mediatek/mtk_wed_regs.h.rej

@nbd168
Copy link
Member Author

@nbd168 nbd168 commented on 6407ef8 Dec 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry about that, I had the changes in my staging tree for a while and forgot to re-test with 6.1 after it was updated in the mean time. Fixed now.

Please sign in to comment.