kernel: backport upstream mediatek WED changes
Reorder and update existing patches
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 6407ef8d2b)
[rmilecki: rebase & fix mt76 compilation]
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
committed by
Rafał Miłecki
parent
afe2ddf827
commit
11d88dee1c
@@ -20,7 +20,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -323,13 +323,35 @@ static int _mtk_mdio_write(struct mtk_et
|
||||
@@ -324,13 +324,35 @@ static int _mtk_mdio_write(struct mtk_et
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
ret = mtk_mdio_busy_wait(eth);
|
||||
if (ret < 0)
|
||||
@@ -346,12 +368,33 @@ static int _mtk_mdio_read(struct mtk_eth
|
||||
@@ -347,12 +369,33 @@ static int _mtk_mdio_read(struct mtk_eth
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -103,7 +103,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
ret = mtk_mdio_busy_wait(eth);
|
||||
if (ret < 0)
|
||||
@@ -898,6 +941,7 @@ static int mtk_mdio_init(struct mtk_eth
|
||||
@@ -899,6 +942,7 @@ static int mtk_mdio_init(struct mtk_eth
|
||||
eth->mii_bus->name = "mdio";
|
||||
eth->mii_bus->read = mtk_mdio_read;
|
||||
eth->mii_bus->write = mtk_mdio_write;
|
||||
|
||||
@@ -15,30 +15,23 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||||
@@ -215,8 +215,8 @@ int mtk_wed_mcu_msg_update(struct mtk_we
|
||||
@@ -234,8 +234,8 @@ int mtk_wed_mcu_msg_update(struct mtk_we
|
||||
}
|
||||
|
||||
static int
|
||||
-mtk_wed_get_memory_region(struct mtk_wed_wo *wo,
|
||||
-mtk_wed_get_memory_region(struct mtk_wed_hw *hw, int index,
|
||||
- struct mtk_wed_wo_memory_region *region)
|
||||
+mtk_wed_get_reserved_memory_region(struct mtk_wed_wo *wo,
|
||||
+mtk_wed_get_reserved_memory_region(struct mtk_wed_hw *hw, int index,
|
||||
+ struct mtk_wed_wo_memory_region *region)
|
||||
{
|
||||
struct reserved_mem *rmem;
|
||||
struct device_node *np;
|
||||
@@ -311,13 +311,13 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
|
||||
@@ -321,7 +321,7 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
|
||||
if (index < 0)
|
||||
continue;
|
||||
|
||||
/* load firmware region metadata */
|
||||
for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
|
||||
- ret = mtk_wed_get_memory_region(wo, &mem_region[i]);
|
||||
+ ret = mtk_wed_get_reserved_memory_region(wo, &mem_region[i]);
|
||||
- ret = mtk_wed_get_memory_region(wo->hw, index, &mem_region[i]);
|
||||
+ ret = mtk_wed_get_reserved_memory_region(wo->hw, index, &mem_region[i]);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
wo->boot.name = "wo-boot";
|
||||
- ret = mtk_wed_get_memory_region(wo, &wo->boot);
|
||||
+ ret = mtk_wed_get_reserved_memory_region(wo, &wo->boot);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -23,15 +23,15 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||||
@@ -18,12 +18,23 @@
|
||||
@@ -34,12 +34,23 @@ static struct mtk_wed_wo_memory_region m
|
||||
|
||||
static u32 wo_r32(struct mtk_wed_wo *wo, u32 reg)
|
||||
{
|
||||
- return readl(wo->boot.addr + reg);
|
||||
- return readl(mem_region[MTK_WED_WO_REGION_BOOT].addr + reg);
|
||||
+ u32 val;
|
||||
+
|
||||
+ if (!wo->boot_regmap)
|
||||
+ return readl(wo->boot.addr + reg);
|
||||
+ return readl(mem_region[MTK_WED_WO_REGION_BOOT].addr + reg);
|
||||
+
|
||||
+ if (regmap_read(wo->boot_regmap, reg, &val))
|
||||
+ val = ~0;
|
||||
@@ -41,49 +41,41 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
static void wo_w32(struct mtk_wed_wo *wo, u32 reg, u32 val)
|
||||
{
|
||||
- writel(val, wo->boot.addr + reg);
|
||||
- writel(val, mem_region[MTK_WED_WO_REGION_BOOT].addr + reg);
|
||||
+ if (wo->boot_regmap)
|
||||
+ regmap_write(wo->boot_regmap, reg, val);
|
||||
+ else
|
||||
+ writel(val, wo->boot.addr + reg);
|
||||
+ writel(val, mem_region[MTK_WED_WO_REGION_BOOT].addr + reg);
|
||||
}
|
||||
|
||||
static struct sk_buff *
|
||||
@@ -316,10 +327,21 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
|
||||
return ret;
|
||||
}
|
||||
@@ -313,6 +324,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
|
||||
u32 val, boot_cr;
|
||||
int ret, i;
|
||||
|
||||
- wo->boot.name = "wo-boot";
|
||||
- ret = mtk_wed_get_reserved_memory_region(wo, &wo->boot);
|
||||
- if (ret)
|
||||
- return ret;
|
||||
+ wo->boot_regmap = syscon_regmap_lookup_by_phandle(wo->hw->node,
|
||||
+ "mediatek,wo-cpuboot");
|
||||
+ if (IS_ERR(wo->boot_regmap)) {
|
||||
+ if (wo->boot_regmap != ERR_PTR(-ENODEV))
|
||||
+ return PTR_ERR(wo->boot_regmap);
|
||||
+
|
||||
+ /* For backward compatibility, we need to check if cpu_boot
|
||||
+ * is defined through reserved memory property.
|
||||
+ */
|
||||
+ wo->boot_regmap = NULL;
|
||||
+ wo->boot.name = "wo-boot";
|
||||
+ ret = mtk_wed_get_reserved_memory_region(wo, &wo->boot);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ }
|
||||
/* load firmware region metadata */
|
||||
for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
|
||||
int index = of_property_match_string(wo->hw->node,
|
||||
@@ -321,6 +335,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
|
||||
if (index < 0)
|
||||
continue;
|
||||
|
||||
/* set dummy cr */
|
||||
wed_w32(wo->hw->wed_dev, MTK_WED_SCR0 + 4 * MTK_WED_DUMMY_CR_FWDL,
|
||||
+ if (index == MTK_WED_WO_REGION_BOOT && !IS_ERR(wo->boot_regmap))
|
||||
+ continue;
|
||||
+
|
||||
ret = mtk_wed_get_reserved_memory_region(wo->hw, index, &mem_region[i]);
|
||||
if (ret)
|
||||
return ret;
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.h
|
||||
@@ -228,7 +228,8 @@ struct mtk_wed_wo_queue {
|
||||
|
||||
@@ -231,6 +231,7 @@ struct mtk_wed_wo_queue {
|
||||
struct mtk_wed_wo {
|
||||
struct mtk_wed_hw *hw;
|
||||
- struct mtk_wed_wo_memory_region boot;
|
||||
+ struct mtk_wed_wo_memory_region boot; /* backward compatibility */
|
||||
+ struct regmap *boot_regmap;
|
||||
|
||||
+ struct regmap *boot_regmap;
|
||||
struct mtk_wed_wo_queue q_tx;
|
||||
struct mtk_wed_wo_queue q_rx;
|
||||
|
||||
|
||||
@@ -20,72 +20,67 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||||
@@ -300,6 +300,52 @@ next:
|
||||
@@ -316,6 +316,39 @@ next:
|
||||
}
|
||||
|
||||
static int
|
||||
+mtk_wed_mcu_load_memory_regions(struct mtk_wed_wo *wo,
|
||||
+ struct mtk_wed_wo_memory_region *region)
|
||||
+mtk_wed_mcu_load_ilm(struct mtk_wed_wo *wo)
|
||||
+{
|
||||
+ struct mtk_wed_wo_memory_region *ilm_region;
|
||||
+ struct resource res;
|
||||
+ struct device_node *np;
|
||||
+ int ret;
|
||||
+
|
||||
+ /* firmware EMI memory region */
|
||||
+ ret = mtk_wed_get_reserved_memory_region(wo,
|
||||
+ ®ion[MTK_WED_WO_REGION_EMI]);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* firmware DATA memory region */
|
||||
+ ret = mtk_wed_get_reserved_memory_region(wo,
|
||||
+ ®ion[MTK_WED_WO_REGION_DATA]);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ np = of_parse_phandle(wo->hw->node, "mediatek,wo-ilm", 0);
|
||||
+ if (np) {
|
||||
+ struct mtk_wed_wo_memory_region *ilm_region;
|
||||
+ struct resource res;
|
||||
+ if (!np)
|
||||
+ return 0;
|
||||
+
|
||||
+ ret = of_address_to_resource(np, 0, &res);
|
||||
+ of_node_put(np);
|
||||
+ ret = of_address_to_resource(np, 0, &res);
|
||||
+ of_node_put(np);
|
||||
+
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ ilm_region = ®ion[MTK_WED_WO_REGION_ILM];
|
||||
+ ilm_region->phy_addr = res.start;
|
||||
+ ilm_region->size = resource_size(&res);
|
||||
+ ilm_region->addr = devm_ioremap(wo->hw->dev, res.start,
|
||||
+ resource_size(&res));
|
||||
+ ilm_region = &mem_region[MTK_WED_WO_REGION_ILM];
|
||||
+ ilm_region->phy_addr = res.start;
|
||||
+ ilm_region->size = resource_size(&res);
|
||||
+ ilm_region->addr = devm_ioremap(wo->hw->dev, res.start,
|
||||
+ resource_size(&res));
|
||||
+
|
||||
+ return IS_ERR(ilm_region->addr) ? PTR_ERR(ilm_region->addr) : 0;
|
||||
+ }
|
||||
+ if (!IS_ERR(ilm_region->addr))
|
||||
+ return 0;
|
||||
+
|
||||
+ /* For backward compatibility, we need to check if ILM
|
||||
+ * node is defined through reserved memory property.
|
||||
+ */
|
||||
+ return mtk_wed_get_reserved_memory_region(wo,
|
||||
+ ®ion[MTK_WED_WO_REGION_ILM]);
|
||||
+ ret = PTR_ERR(ilm_region->addr);
|
||||
+ ilm_region->addr = NULL;
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
|
||||
{
|
||||
static struct mtk_wed_wo_memory_region mem_region[] = {
|
||||
@@ -320,12 +366,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
|
||||
const struct mtk_wed_fw_trailer *trailer;
|
||||
@@ -324,14 +357,20 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
|
||||
u32 val, boot_cr;
|
||||
int ret, i;
|
||||
|
||||
- /* load firmware region metadata */
|
||||
- for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
|
||||
- ret = mtk_wed_get_reserved_memory_region(wo, &mem_region[i]);
|
||||
- if (ret)
|
||||
- return ret;
|
||||
- }
|
||||
+ ret = mtk_wed_mcu_load_memory_regions(wo, mem_region);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
|
||||
+ mtk_wed_mcu_load_ilm(wo);
|
||||
wo->boot_regmap = syscon_regmap_lookup_by_phandle(wo->hw->node,
|
||||
"mediatek,wo-cpuboot");
|
||||
|
||||
/* load firmware region metadata */
|
||||
for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
|
||||
- int index = of_property_match_string(wo->hw->node,
|
||||
- "memory-region-names",
|
||||
- mem_region[i].name);
|
||||
+ int index;
|
||||
+
|
||||
+ if (mem_region[i].addr)
|
||||
+ continue;
|
||||
+
|
||||
+ index = of_property_match_string(wo->hw->node,
|
||||
+ "memory-region-names",
|
||||
+ mem_region[i].name);
|
||||
if (index < 0)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
@@ -821,6 +821,24 @@ mtk_wed_rro_alloc(struct mtk_wed_device
|
||||
@@ -1320,6 +1320,24 @@ mtk_wed_rro_alloc(struct mtk_wed_device
|
||||
struct device_node *np;
|
||||
int index;
|
||||
|
||||
@@ -47,7 +47,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
index = of_property_match_string(dev->hw->node, "memory-region-names",
|
||||
"wo-dlm");
|
||||
if (index < 0)
|
||||
@@ -837,6 +855,7 @@ mtk_wed_rro_alloc(struct mtk_wed_device
|
||||
@@ -1336,6 +1354,7 @@ mtk_wed_rro_alloc(struct mtk_wed_device
|
||||
return -ENODEV;
|
||||
|
||||
dev->rro.miod_phys = rmem->base;
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1238,7 +1238,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
@@ -1239,7 +1239,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
eth->scratch_ring = eth->sram_base;
|
||||
else
|
||||
eth->scratch_ring = dma_alloc_coherent(eth->dma_dev,
|
||||
@@ -24,7 +24,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
ð->phy_scratch_ring,
|
||||
GFP_KERNEL);
|
||||
if (unlikely(!eth->scratch_ring))
|
||||
@@ -1254,16 +1254,16 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
@@ -1255,16 +1255,16 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
if (unlikely(dma_mapping_error(eth->dma_dev, dma_addr)))
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -44,7 +44,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
|
||||
txd->txd4 = 0;
|
||||
@@ -1510,7 +1510,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1511,7 +1511,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
if (itxd == ring->last_free)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -53,7 +53,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
memset(itx_buf, 0, sizeof(*itx_buf));
|
||||
|
||||
txd_info.addr = dma_map_single(eth->dma_dev, skb->data, txd_info.size,
|
||||
@@ -1551,7 +1551,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1552,7 +1552,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
|
||||
memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
|
||||
txd_info.size = min_t(unsigned int, frag_size,
|
||||
@@ -62,7 +62,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
txd_info.qid = queue;
|
||||
txd_info.last = i == skb_shinfo(skb)->nr_frags - 1 &&
|
||||
!(frag_size - txd_info.size);
|
||||
@@ -1564,7 +1564,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1565,7 +1565,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
mtk_tx_set_dma_desc(dev, txd, &txd_info);
|
||||
|
||||
tx_buf = mtk_desc_to_tx_buf(ring, txd,
|
||||
@@ -71,7 +71,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
if (new_desc)
|
||||
memset(tx_buf, 0, sizeof(*tx_buf));
|
||||
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
|
||||
@@ -1607,7 +1607,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1608,7 +1608,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
} else {
|
||||
int next_idx;
|
||||
|
||||
@@ -80,7 +80,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
ring->dma_size);
|
||||
mtk_w32(eth, next_idx, MT7628_TX_CTX_IDX0);
|
||||
}
|
||||
@@ -1616,7 +1616,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1617,7 +1617,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
|
||||
err_dma:
|
||||
do {
|
||||
@@ -89,7 +89,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
/* unmap dma */
|
||||
mtk_tx_unmap(eth, tx_buf, false);
|
||||
@@ -1641,7 +1641,7 @@ static int mtk_cal_txd_req(struct mtk_et
|
||||
@@ -1642,7 +1642,7 @@ static int mtk_cal_txd_req(struct mtk_et
|
||||
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
|
||||
frag = &skb_shinfo(skb)->frags[i];
|
||||
nfrags += DIV_ROUND_UP(skb_frag_size(frag),
|
||||
@@ -98,7 +98,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
}
|
||||
} else {
|
||||
nfrags += skb_shinfo(skb)->nr_frags;
|
||||
@@ -1782,7 +1782,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
|
||||
@@ -1783,7 +1783,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
|
||||
|
||||
ring = ð->rx_ring[i];
|
||||
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
|
||||
@@ -107,7 +107,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
if (rxd->rxd2 & RX_DMA_DONE) {
|
||||
ring->calc_idx_update = true;
|
||||
return ring;
|
||||
@@ -1950,7 +1950,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
@@ -1951,7 +1951,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
}
|
||||
htxd = txd;
|
||||
|
||||
@@ -116,7 +116,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
memset(tx_buf, 0, sizeof(*tx_buf));
|
||||
htx_buf = tx_buf;
|
||||
|
||||
@@ -1970,7 +1970,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
@@ -1971,7 +1971,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
goto unmap;
|
||||
|
||||
tx_buf = mtk_desc_to_tx_buf(ring, txd,
|
||||
@@ -125,7 +125,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
memset(tx_buf, 0, sizeof(*tx_buf));
|
||||
n_desc++;
|
||||
}
|
||||
@@ -2007,7 +2007,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
@@ -2008,7 +2008,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
} else {
|
||||
int idx;
|
||||
|
||||
@@ -134,7 +134,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
mtk_w32(eth, NEXT_DESP_IDX(idx, ring->dma_size),
|
||||
MT7628_TX_CTX_IDX0);
|
||||
}
|
||||
@@ -2019,7 +2019,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
@@ -2020,7 +2020,7 @@ static int mtk_xdp_submit_frame(struct m
|
||||
unmap:
|
||||
while (htxd != txd) {
|
||||
txd_pdma = qdma_to_pdma(ring, htxd);
|
||||
@@ -143,7 +143,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
mtk_tx_unmap(eth, tx_buf, false);
|
||||
|
||||
htxd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
||||
@@ -2147,7 +2147,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -2148,7 +2148,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
goto rx_done;
|
||||
|
||||
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
|
||||
@@ -152,7 +152,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
data = ring->data[idx];
|
||||
|
||||
if (!mtk_rx_get_desc(eth, &trxd, rxd))
|
||||
@@ -2282,7 +2282,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -2283,7 +2283,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
rxdcsum = &trxd.rxd4;
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
else
|
||||
skb_checksum_none_assert(skb);
|
||||
@@ -2403,7 +2403,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -2404,7 +2404,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
break;
|
||||
|
||||
tx_buf = mtk_desc_to_tx_buf(ring, desc,
|
||||
@@ -170,7 +170,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
if (!tx_buf->data)
|
||||
break;
|
||||
|
||||
@@ -2451,7 +2451,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
@@ -2452,7 +2452,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
|
||||
}
|
||||
mtk_tx_unmap(eth, tx_buf, true);
|
||||
|
||||
@@ -179,7 +179,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
ring->last_free = desc;
|
||||
atomic_inc(&ring->free_count);
|
||||
|
||||
@@ -2540,7 +2540,7 @@ static int mtk_napi_rx(struct napi_struc
|
||||
@@ -2541,7 +2541,7 @@ static int mtk_napi_rx(struct napi_struc
|
||||
do {
|
||||
int rx_done;
|
||||
|
||||
@@ -188,7 +188,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
reg_map->pdma.irq_status);
|
||||
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
|
||||
rx_done_total += rx_done;
|
||||
@@ -2556,10 +2556,10 @@ static int mtk_napi_rx(struct napi_struc
|
||||
@@ -2557,10 +2557,10 @@ static int mtk_napi_rx(struct napi_struc
|
||||
return budget;
|
||||
|
||||
} while (mtk_r32(eth, reg_map->pdma.irq_status) &
|
||||
@@ -201,7 +201,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
|
||||
return rx_done_total;
|
||||
}
|
||||
@@ -2568,7 +2568,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
@@ -2569,7 +2569,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
{
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
struct mtk_tx_ring *ring = ð->tx_ring;
|
||||
@@ -210,7 +210,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
struct mtk_tx_dma_v2 *txd;
|
||||
int ring_size;
|
||||
u32 ofs, val;
|
||||
@@ -2691,14 +2691,14 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
@@ -2692,14 +2692,14 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
}
|
||||
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && ring->dma) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
@@ -227,7 +227,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
ring->dma_pdma, ring->phys_pdma);
|
||||
ring->dma_pdma = NULL;
|
||||
}
|
||||
@@ -2753,15 +2753,15 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2754,15 +2754,15 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM) ||
|
||||
rx_flag != MTK_RX_FLAGS_NORMAL) {
|
||||
ring->dma = dma_alloc_coherent(eth->dma_dev,
|
||||
@@ -247,7 +247,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
}
|
||||
|
||||
if (!ring->dma)
|
||||
@@ -2772,7 +2772,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2773,7 +2773,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
dma_addr_t dma_addr;
|
||||
void *data;
|
||||
|
||||
@@ -256,7 +256,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
if (ring->page_pool) {
|
||||
data = mtk_page_pool_get_buff(ring->page_pool,
|
||||
&dma_addr, GFP_KERNEL);
|
||||
@@ -2861,7 +2861,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
@@ -2862,7 +2862,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
if (!ring->data[i])
|
||||
continue;
|
||||
|
||||
@@ -265,7 +265,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
if (!rxd->rxd1)
|
||||
continue;
|
||||
|
||||
@@ -2878,7 +2878,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
@@ -2879,7 +2879,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
|
||||
if (!in_sram && ring->dma) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
@@ -274,7 +274,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
ring->dma, ring->phys);
|
||||
ring->dma = NULL;
|
||||
}
|
||||
@@ -3241,7 +3241,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
@@ -3242,7 +3242,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
netdev_reset_queue(eth->netdev[i]);
|
||||
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && eth->scratch_ring) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
@@ -283,7 +283,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
eth->scratch_ring, eth->phy_scratch_ring);
|
||||
eth->scratch_ring = NULL;
|
||||
eth->phy_scratch_ring = 0;
|
||||
@@ -3291,7 +3291,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||
@@ -3292,7 +3292,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||
|
||||
eth->rx_events++;
|
||||
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
||||
@@ -292,7 +292,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
__napi_schedule(ð->rx_napi);
|
||||
}
|
||||
|
||||
@@ -3317,9 +3317,9 @@ static irqreturn_t mtk_handle_irq(int ir
|
||||
@@ -3318,9 +3318,9 @@ static irqreturn_t mtk_handle_irq(int ir
|
||||
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
||||
|
||||
if (mtk_r32(eth, reg_map->pdma.irq_mask) &
|
||||
@@ -304,7 +304,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
mtk_handle_irq_rx(irq, _eth);
|
||||
}
|
||||
if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
|
||||
@@ -3337,10 +3337,10 @@ static void mtk_poll_controller(struct n
|
||||
@@ -3338,10 +3338,10 @@ static void mtk_poll_controller(struct n
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
|
||||
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
||||
@@ -317,7 +317,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -3505,7 +3505,7 @@ static int mtk_open(struct net_device *d
|
||||
@@ -3506,7 +3506,7 @@ static int mtk_open(struct net_device *d
|
||||
napi_enable(ð->tx_napi);
|
||||
napi_enable(ð->rx_napi);
|
||||
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
|
||||
@@ -326,7 +326,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
refcount_set(ð->dma_refcnt, 1);
|
||||
}
|
||||
else
|
||||
@@ -3588,7 +3588,7 @@ static int mtk_stop(struct net_device *d
|
||||
@@ -3589,7 +3589,7 @@ static int mtk_stop(struct net_device *d
|
||||
mtk_gdm_config(eth, MTK_GDMA_DROP_ALL);
|
||||
|
||||
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
||||
@@ -335,7 +335,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
napi_disable(ð->tx_napi);
|
||||
napi_disable(ð->rx_napi);
|
||||
|
||||
@@ -4064,9 +4064,9 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -4065,9 +4065,9 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
|
||||
/* FE int grouping */
|
||||
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
|
||||
@@ -347,7 +347,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||
|
||||
if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
@@ -5166,11 +5166,15 @@ static const struct mtk_soc_data mt2701_
|
||||
@@ -5167,11 +5167,15 @@ static const struct mtk_soc_data mt2701_
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
.version = 1,
|
||||
@@ -368,7 +368,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5186,11 +5190,15 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -5187,11 +5191,15 @@ static const struct mtk_soc_data mt7621_
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
@@ -389,7 +389,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5208,11 +5216,15 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -5209,11 +5217,15 @@ static const struct mtk_soc_data mt7622_
|
||||
.hash_offset = 2,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
@@ -410,7 +410,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5229,11 +5241,15 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -5230,11 +5242,15 @@ static const struct mtk_soc_data mt7623_
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.disable_pll_modes = true,
|
||||
@@ -431,7 +431,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5248,11 +5264,15 @@ static const struct mtk_soc_data mt7629_
|
||||
@@ -5249,11 +5265,15 @@ static const struct mtk_soc_data mt7629_
|
||||
.required_pctl = false,
|
||||
.has_accounting = true,
|
||||
.version = 1,
|
||||
@@ -452,7 +452,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN,
|
||||
.dma_len_offset = 16,
|
||||
},
|
||||
@@ -5270,11 +5290,15 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5271,11 +5291,15 @@ static const struct mtk_soc_data mt7981_
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
@@ -473,7 +473,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
@@ -5292,11 +5316,15 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5293,11 +5317,15 @@ static const struct mtk_soc_data mt7986_
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
@@ -494,7 +494,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
@@ -5314,11 +5342,15 @@ static const struct mtk_soc_data mt7988_
|
||||
@@ -5315,11 +5343,15 @@ static const struct mtk_soc_data mt7988_
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
|
||||
@@ -515,7 +515,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
@@ -5331,11 +5363,15 @@ static const struct mtk_soc_data rt5350_
|
||||
@@ -5332,11 +5364,15 @@ static const struct mtk_soc_data rt5350_
|
||||
.required_clks = MT7628_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
.version = 1,
|
||||
|
||||
@@ -44,7 +44,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
},
|
||||
.qdma = {
|
||||
.qtx_cfg = 0x4400,
|
||||
@@ -1206,7 +1206,7 @@ static bool mtk_rx_get_desc(struct mtk_e
|
||||
@@ -1207,7 +1207,7 @@ static bool mtk_rx_get_desc(struct mtk_e
|
||||
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
|
||||
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
|
||||
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
|
||||
@@ -53,7 +53,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
|
||||
rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
|
||||
}
|
||||
@@ -2154,7 +2154,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -2155,7 +2155,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
break;
|
||||
|
||||
/* find out which mac the packet come from. values start at 1 */
|
||||
@@ -62,7 +62,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
u32 val = RX_DMA_GET_SPORT_V2(trxd.rxd5);
|
||||
|
||||
switch (val) {
|
||||
@@ -2266,7 +2266,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -2267,7 +2267,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
skb->dev = netdev;
|
||||
bytes += skb->len;
|
||||
|
||||
@@ -71,7 +71,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
|
||||
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
|
||||
if (hash != MTK_RXD5_FOE_ENTRY)
|
||||
@@ -2807,7 +2807,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
@@ -2808,7 +2808,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
|
||||
rxd->rxd3 = 0;
|
||||
rxd->rxd4 = 0;
|
||||
@@ -80,7 +80,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
rxd->rxd5 = 0;
|
||||
rxd->rxd6 = 0;
|
||||
rxd->rxd7 = 0;
|
||||
@@ -4010,7 +4010,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
@@ -4011,7 +4011,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
else
|
||||
mtk_hw_reset(eth);
|
||||
|
||||
@@ -89,7 +89,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
/* Set FE to PDMAv2 if necessary */
|
||||
val = mtk_r32(eth, MTK_FE_GLO_MISC);
|
||||
mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
|
||||
@@ -5296,11 +5296,11 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -5297,11 +5297,11 @@ static const struct mtk_soc_data mt7981_
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
.rx = {
|
||||
@@ -105,7 +105,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
},
|
||||
};
|
||||
|
||||
@@ -5322,11 +5322,11 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -5323,11 +5323,11 @@ static const struct mtk_soc_data mt7986_
|
||||
.dma_len_offset = 8,
|
||||
},
|
||||
.rx = {
|
||||
|
||||
Reference in New Issue
Block a user