|
@@ -13,7 +13,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
-@@ -862,8 +862,8 @@ static inline int mtk_max_buf_size(int f
|
|
|
|
|
|
+@@ -863,8 +863,8 @@ static inline int mtk_max_buf_size(int f
|
|
return buf_size;
|
|
return buf_size;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
{
|
|
{
|
|
rxd->rxd2 = READ_ONCE(dma_rxd->rxd2);
|
|
rxd->rxd2 = READ_ONCE(dma_rxd->rxd2);
|
|
if (!(rxd->rxd2 & RX_DMA_DONE))
|
|
if (!(rxd->rxd2 & RX_DMA_DONE))
|
|
-@@ -872,6 +872,10 @@ static inline bool mtk_rx_get_desc(struc
|
|
|
|
|
|
+@@ -873,6 +873,10 @@ static inline bool mtk_rx_get_desc(struc
|
|
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
|
|
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
|
|
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
|
|
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
|
|
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
|
|
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
|
|
@@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
-@@ -916,7 +920,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
|
|
|
|
|
+@@ -917,7 +921,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
|
phy_ring_tail = eth->phy_scratch_ring + soc->txrx.txd_size * (cnt - 1);
|
|
phy_ring_tail = eth->phy_scratch_ring + soc->txrx.txd_size * (cnt - 1);
|
|
|
|
|
|
for (i = 0; i < cnt; i++) {
|
|
for (i = 0; i < cnt; i++) {
|
|
@@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
txd = (void *)eth->scratch_ring + i * soc->txrx.txd_size;
|
|
txd = (void *)eth->scratch_ring + i * soc->txrx.txd_size;
|
|
txd->txd1 = dma_addr + i * MTK_QDMA_PAGE_SIZE;
|
|
txd->txd1 = dma_addr + i * MTK_QDMA_PAGE_SIZE;
|
|
-@@ -926,6 +930,12 @@ static int mtk_init_fq_dma(struct mtk_et
|
|
|
|
|
|
+@@ -927,6 +931,12 @@ static int mtk_init_fq_dma(struct mtk_et
|
|
|
|
|
|
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
|
|
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
|
|
txd->txd4 = 0;
|
|
txd->txd4 = 0;
|
|
@@ -57,7 +57,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
}
|
|
}
|
|
|
|
|
|
mtk_w32(eth, eth->phy_scratch_ring, soc->reg_map->qdma.fq_head);
|
|
mtk_w32(eth, eth->phy_scratch_ring, soc->reg_map->qdma.fq_head);
|
|
-@@ -1029,10 +1039,12 @@ static void setup_tx_buf(struct mtk_eth
|
|
|
|
|
|
+@@ -1030,10 +1040,12 @@ static void setup_tx_buf(struct mtk_eth
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
u32 data;
|
|
u32 data;
|
|
|
|
|
|
WRITE_ONCE(desc->txd1, info->addr);
|
|
WRITE_ONCE(desc->txd1, info->addr);
|
|
-@@ -1056,6 +1068,59 @@ static void mtk_tx_set_dma_desc(struct n
|
|
|
|
|
|
+@@ -1057,6 +1069,59 @@ static void mtk_tx_set_dma_desc(struct n
|
|
WRITE_ONCE(desc->txd4, data);
|
|
WRITE_ONCE(desc->txd4, data);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -132,7 +132,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev,
|
|
static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev,
|
|
int tx_num, struct mtk_tx_ring *ring, bool gso)
|
|
int tx_num, struct mtk_tx_ring *ring, bool gso)
|
|
{
|
|
{
|
|
-@@ -1064,6 +1129,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
|
|
|
|
|
+@@ -1065,6 +1130,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
|
.gso = gso,
|
|
.gso = gso,
|
|
.csum = skb->ip_summed == CHECKSUM_PARTIAL,
|
|
.csum = skb->ip_summed == CHECKSUM_PARTIAL,
|
|
.vlan = skb_vlan_tag_present(skb),
|
|
.vlan = skb_vlan_tag_present(skb),
|
|
@@ -140,7 +140,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
.vlan_tci = skb_vlan_tag_get(skb),
|
|
.vlan_tci = skb_vlan_tag_get(skb),
|
|
.first = true,
|
|
.first = true,
|
|
.last = !skb_is_nonlinear(skb),
|
|
.last = !skb_is_nonlinear(skb),
|
|
-@@ -1123,7 +1189,9 @@ static int mtk_tx_map(struct sk_buff *sk
|
|
|
|
|
|
+@@ -1124,7 +1190,9 @@ static int mtk_tx_map(struct sk_buff *sk
|
|
}
|
|
}
|
|
|
|
|
|
memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
|
|
memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
|
|
@@ -151,7 +151,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
txd_info.last = i == skb_shinfo(skb)->nr_frags - 1 &&
|
|
txd_info.last = i == skb_shinfo(skb)->nr_frags - 1 &&
|
|
!(frag_size - txd_info.size);
|
|
!(frag_size - txd_info.size);
|
|
txd_info.addr = skb_frag_dma_map(eth->dma_dev, frag,
|
|
txd_info.addr = skb_frag_dma_map(eth->dma_dev, frag,
|
|
-@@ -1204,17 +1272,16 @@ err_dma:
|
|
|
|
|
|
+@@ -1205,17 +1273,16 @@ err_dma:
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -172,7 +172,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
nfrags += skb_shinfo(skb)->nr_frags;
|
|
nfrags += skb_shinfo(skb)->nr_frags;
|
|
-@@ -1266,7 +1333,7 @@ static netdev_tx_t mtk_start_xmit(struct
|
|
|
|
|
|
+@@ -1267,7 +1334,7 @@ static netdev_tx_t mtk_start_xmit(struct
|
|
if (unlikely(test_bit(MTK_RESETTING, ð->state)))
|
|
if (unlikely(test_bit(MTK_RESETTING, ð->state)))
|
|
goto drop;
|
|
goto drop;
|
|
|
|
|
|
@@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
|
|
if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
|
|
netif_stop_queue(dev);
|
|
netif_stop_queue(dev);
|
|
netif_err(eth, tx_queued, dev,
|
|
netif_err(eth, tx_queued, dev,
|
|
-@@ -1358,7 +1425,7 @@ static int mtk_poll_rx(struct napi_struc
|
|
|
|
|
|
+@@ -1359,7 +1426,7 @@ static int mtk_poll_rx(struct napi_struc
|
|
int idx;
|
|
int idx;
|
|
struct sk_buff *skb;
|
|
struct sk_buff *skb;
|
|
u8 *data, *new_data;
|
|
u8 *data, *new_data;
|
|
@@ -190,7 +190,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
int done = 0, bytes = 0;
|
|
int done = 0, bytes = 0;
|
|
|
|
|
|
while (done < budget) {
|
|
while (done < budget) {
|
|
-@@ -1366,7 +1433,7 @@ static int mtk_poll_rx(struct napi_struc
|
|
|
|
|
|
+@@ -1367,7 +1434,7 @@ static int mtk_poll_rx(struct napi_struc
|
|
unsigned int pktlen;
|
|
unsigned int pktlen;
|
|
dma_addr_t dma_addr;
|
|
dma_addr_t dma_addr;
|
|
u32 hash, reason;
|
|
u32 hash, reason;
|
|
@@ -199,7 +199,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
ring = mtk_get_rx_ring(eth);
|
|
ring = mtk_get_rx_ring(eth);
|
|
if (unlikely(!ring))
|
|
if (unlikely(!ring))
|
|
-@@ -1376,16 +1443,15 @@ static int mtk_poll_rx(struct napi_struc
|
|
|
|
|
|
+@@ -1377,16 +1444,15 @@ static int mtk_poll_rx(struct napi_struc
|
|
rxd = (void *)ring->dma + idx * eth->soc->txrx.rxd_size;
|
|
rxd = (void *)ring->dma + idx * eth->soc->txrx.rxd_size;
|
|
data = ring->data[idx];
|
|
data = ring->data[idx];
|
|
|
|
|
|
@@ -222,7 +222,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
|
|
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
|
|
!eth->netdev[mac]))
|
|
!eth->netdev[mac]))
|
|
-@@ -1431,7 +1497,7 @@ static int mtk_poll_rx(struct napi_struc
|
|
|
|
|
|
+@@ -1432,7 +1498,7 @@ static int mtk_poll_rx(struct napi_struc
|
|
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
|
|
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
|
|
skb->dev = netdev;
|
|
skb->dev = netdev;
|
|
skb_put(skb, pktlen);
|
|
skb_put(skb, pktlen);
|
|
@@ -231,7 +231,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
else
|
|
else
|
|
skb_checksum_none_assert(skb);
|
|
skb_checksum_none_assert(skb);
|
|
-@@ -1449,10 +1515,25 @@ static int mtk_poll_rx(struct napi_struc
|
|
|
|
|
|
+@@ -1450,10 +1516,25 @@ static int mtk_poll_rx(struct napi_struc
|
|
mtk_ppe_check_skb(eth->ppe, skb,
|
|
mtk_ppe_check_skb(eth->ppe, skb,
|
|
trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
|
|
trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
|
|
|
|
|
|
@@ -261,7 +261,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
skb_record_rx_queue(skb, 0);
|
|
skb_record_rx_queue(skb, 0);
|
|
napi_gro_receive(napi, skb);
|
|
napi_gro_receive(napi, skb);
|
|
|
|
|
|
-@@ -1464,7 +1545,7 @@ release_desc:
|
|
|
|
|
|
+@@ -1465,7 +1546,7 @@ release_desc:
|
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
|
rxd->rxd2 = RX_DMA_LSO;
|
|
rxd->rxd2 = RX_DMA_LSO;
|
|
else
|
|
else
|
|
@@ -270,7 +270,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
ring->calc_idx = idx;
|
|
ring->calc_idx = idx;
|
|
|
|
|
|
-@@ -1666,7 +1747,8 @@ static int mtk_napi_rx(struct napi_struc
|
|
|
|
|
|
+@@ -1667,7 +1748,8 @@ static int mtk_napi_rx(struct napi_struc
|
|
do {
|
|
do {
|
|
int rx_done;
|
|
int rx_done;
|
|
|
|
|
|
@@ -280,7 +280,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
|
|
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
|
|
rx_done_total += rx_done;
|
|
rx_done_total += rx_done;
|
|
|
|
|
|
-@@ -1680,10 +1762,11 @@ static int mtk_napi_rx(struct napi_struc
|
|
|
|
|
|
+@@ -1681,10 +1763,11 @@ static int mtk_napi_rx(struct napi_struc
|
|
if (rx_done_total == budget)
|
|
if (rx_done_total == budget)
|
|
return budget;
|
|
return budget;
|
|
|
|
|
|
@@ -294,7 +294,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
return rx_done_total;
|
|
return rx_done_total;
|
|
}
|
|
}
|
|
-@@ -1693,7 +1776,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
|
|
|
|
|
+@@ -1694,7 +1777,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
|
const struct mtk_soc_data *soc = eth->soc;
|
|
const struct mtk_soc_data *soc = eth->soc;
|
|
struct mtk_tx_ring *ring = ð->tx_ring;
|
|
struct mtk_tx_ring *ring = ð->tx_ring;
|
|
int i, sz = soc->txrx.txd_size;
|
|
int i, sz = soc->txrx.txd_size;
|
|
@@ -303,7 +303,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
ring->buf = kcalloc(MTK_DMA_SIZE, sizeof(*ring->buf),
|
|
ring->buf = kcalloc(MTK_DMA_SIZE, sizeof(*ring->buf),
|
|
GFP_KERNEL);
|
|
GFP_KERNEL);
|
|
-@@ -1713,13 +1796,19 @@ static int mtk_tx_alloc(struct mtk_eth *
|
|
|
|
|
|
+@@ -1714,13 +1797,19 @@ static int mtk_tx_alloc(struct mtk_eth *
|
|
txd->txd2 = next_ptr;
|
|
txd->txd2 = next_ptr;
|
|
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
|
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
|
txd->txd4 = 0;
|
|
txd->txd4 = 0;
|
|
@@ -324,7 +324,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
ring->dma_pdma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
|
|
ring->dma_pdma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
|
|
&ring->phys_pdma, GFP_KERNEL);
|
|
&ring->phys_pdma, GFP_KERNEL);
|
|
if (!ring->dma_pdma)
|
|
if (!ring->dma_pdma)
|
|
-@@ -1799,13 +1888,11 @@ static int mtk_rx_alloc(struct mtk_eth *
|
|
|
|
|
|
+@@ -1800,13 +1889,11 @@ static int mtk_rx_alloc(struct mtk_eth *
|
|
struct mtk_rx_ring *ring;
|
|
struct mtk_rx_ring *ring;
|
|
int rx_data_len, rx_dma_size;
|
|
int rx_data_len, rx_dma_size;
|
|
int i;
|
|
int i;
|
|
@@ -338,7 +338,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
} else {
|
|
} else {
|
|
ring = ð->rx_ring[ring_no];
|
|
ring = ð->rx_ring[ring_no];
|
|
}
|
|
}
|
|
-@@ -1841,7 +1928,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
|
|
|
|
|
+@@ -1842,7 +1929,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
for (i = 0; i < rx_dma_size; i++) {
|
|
for (i = 0; i < rx_dma_size; i++) {
|
|
@@ -347,7 +347,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
dma_addr_t dma_addr = dma_map_single(eth->dma_dev,
|
|
dma_addr_t dma_addr = dma_map_single(eth->dma_dev,
|
|
ring->data[i] + NET_SKB_PAD + eth->ip_align,
|
|
ring->data[i] + NET_SKB_PAD + eth->ip_align,
|
|
-@@ -1856,26 +1943,47 @@ static int mtk_rx_alloc(struct mtk_eth *
|
|
|
|
|
|
+@@ -1857,26 +1944,47 @@ static int mtk_rx_alloc(struct mtk_eth *
|
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
|
rxd->rxd2 = RX_DMA_LSO;
|
|
rxd->rxd2 = RX_DMA_LSO;
|
|
else
|
|
else
|
|
@@ -403,7 +403,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
-@@ -2297,7 +2405,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
|
|
|
|
|
+@@ -2298,7 +2406,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
|
eth->rx_events++;
|
|
eth->rx_events++;
|
|
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
|
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
|
__napi_schedule(ð->rx_napi);
|
|
__napi_schedule(ð->rx_napi);
|
|
@@ -412,7 +412,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
}
|
|
}
|
|
|
|
|
|
return IRQ_HANDLED;
|
|
return IRQ_HANDLED;
|
|
-@@ -2321,8 +2429,10 @@ static irqreturn_t mtk_handle_irq(int ir
|
|
|
|
|
|
+@@ -2322,8 +2430,10 @@ static irqreturn_t mtk_handle_irq(int ir
|
|
struct mtk_eth *eth = _eth;
|
|
struct mtk_eth *eth = _eth;
|
|
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
|
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
|
|
|
|
|
@@ -425,7 +425,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
mtk_handle_irq_rx(irq, _eth);
|
|
mtk_handle_irq_rx(irq, _eth);
|
|
}
|
|
}
|
|
if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
|
|
if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
|
|
-@@ -2340,16 +2450,16 @@ static void mtk_poll_controller(struct n
|
|
|
|
|
|
+@@ -2341,16 +2451,16 @@ static void mtk_poll_controller(struct n
|
|
struct mtk_eth *eth = mac->hw;
|
|
struct mtk_eth *eth = mac->hw;
|
|
|
|
|
|
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
|
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
|
@@ -445,7 +445,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
|
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
-@@ -2360,12 +2470,19 @@ static int mtk_start_dma(struct mtk_eth
|
|
|
|
|
|
+@@ -2361,12 +2471,19 @@ static int mtk_start_dma(struct mtk_eth
|
|
}
|
|
}
|
|
|
|
|
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
|
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
|
|
@@ -471,7 +471,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
mtk_w32(eth,
|
|
mtk_w32(eth,
|
|
MTK_RX_DMA_EN | rx_2b_offset |
|
|
MTK_RX_DMA_EN | rx_2b_offset |
|
|
MTK_RX_BT_32DWORDS | MTK_MULTI_EN,
|
|
MTK_RX_BT_32DWORDS | MTK_MULTI_EN,
|
|
-@@ -2439,7 +2556,7 @@ static int mtk_open(struct net_device *d
|
|
|
|
|
|
+@@ -2440,7 +2557,7 @@ static int mtk_open(struct net_device *d
|
|
napi_enable(ð->tx_napi);
|
|
napi_enable(ð->tx_napi);
|
|
napi_enable(ð->rx_napi);
|
|
napi_enable(ð->rx_napi);
|
|
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
|
|
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
|
|
@@ -480,7 +480,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
refcount_set(ð->dma_refcnt, 1);
|
|
refcount_set(ð->dma_refcnt, 1);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
-@@ -2491,7 +2608,7 @@ static int mtk_stop(struct net_device *d
|
|
|
|
|
|
+@@ -2492,7 +2609,7 @@ static int mtk_stop(struct net_device *d
|
|
mtk_gdm_config(eth, MTK_GDMA_DROP_ALL);
|
|
mtk_gdm_config(eth, MTK_GDMA_DROP_ALL);
|
|
|
|
|
|
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
|
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
|
@@ -489,7 +489,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
napi_disable(ð->tx_napi);
|
|
napi_disable(ð->tx_napi);
|
|
napi_disable(ð->rx_napi);
|
|
napi_disable(ð->rx_napi);
|
|
|
|
|
|
-@@ -2651,9 +2768,25 @@ static int mtk_hw_init(struct mtk_eth *e
|
|
|
|
|
|
+@@ -2652,9 +2769,25 @@ static int mtk_hw_init(struct mtk_eth *e
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -518,7 +518,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
if (eth->pctl) {
|
|
if (eth->pctl) {
|
|
/* Set GE2 driving and slew rate */
|
|
/* Set GE2 driving and slew rate */
|
|
-@@ -2692,11 +2825,47 @@ static int mtk_hw_init(struct mtk_eth *e
|
|
|
|
|
|
+@@ -2693,11 +2826,47 @@ static int mtk_hw_init(struct mtk_eth *e
|
|
|
|
|
|
/* FE int grouping */
|
|
/* FE int grouping */
|
|
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
|
|
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
|
|
@@ -568,7 +568,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
err_disable_pm:
|
|
err_disable_pm:
|
|
-@@ -3233,12 +3402,8 @@ static int mtk_probe(struct platform_dev
|
|
|
|
|
|
+@@ -3234,12 +3403,8 @@ static int mtk_probe(struct platform_dev
|
|
if (IS_ERR(eth->base))
|
|
if (IS_ERR(eth->base))
|
|
return PTR_ERR(eth->base);
|
|
return PTR_ERR(eth->base);
|
|
|
|
|
|
@@ -582,7 +582,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
spin_lock_init(ð->page_lock);
|
|
spin_lock_init(ð->page_lock);
|
|
spin_lock_init(ð->tx_irq_lock);
|
|
spin_lock_init(ð->tx_irq_lock);
|
|
-@@ -3474,6 +3639,10 @@ static const struct mtk_soc_data mt2701_
|
|
|
|
|
|
+@@ -3475,6 +3640,10 @@ static const struct mtk_soc_data mt2701_
|
|
.txrx = {
|
|
.txrx = {
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
@@ -593,7 +593,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
-@@ -3487,6 +3656,10 @@ static const struct mtk_soc_data mt7621_
|
|
|
|
|
|
+@@ -3488,6 +3657,10 @@ static const struct mtk_soc_data mt7621_
|
|
.txrx = {
|
|
.txrx = {
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
@@ -604,7 +604,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
-@@ -3501,6 +3674,10 @@ static const struct mtk_soc_data mt7622_
|
|
|
|
|
|
+@@ -3502,6 +3675,10 @@ static const struct mtk_soc_data mt7622_
|
|
.txrx = {
|
|
.txrx = {
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
@@ -615,7 +615,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
-@@ -3514,6 +3691,10 @@ static const struct mtk_soc_data mt7623_
|
|
|
|
|
|
+@@ -3515,6 +3692,10 @@ static const struct mtk_soc_data mt7623_
|
|
.txrx = {
|
|
.txrx = {
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
@@ -626,7 +626,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
-@@ -3527,6 +3708,10 @@ static const struct mtk_soc_data mt7629_
|
|
|
|
|
|
+@@ -3528,6 +3709,10 @@ static const struct mtk_soc_data mt7629_
|
|
.txrx = {
|
|
.txrx = {
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
@@ -637,7 +637,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
-@@ -3539,6 +3724,10 @@ static const struct mtk_soc_data rt5350_
|
|
|
|
|
|
+@@ -3540,6 +3725,10 @@ static const struct mtk_soc_data rt5350_
|
|
.txrx = {
|
|
.txrx = {
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.txd_size = sizeof(struct mtk_tx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
|
@@ -804,7 +804,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
/* PHY Indirect Access Control registers */
|
|
/* PHY Indirect Access Control registers */
|
|
#define MTK_PHY_IAC 0x10004
|
|
#define MTK_PHY_IAC 0x10004
|
|
#define PHY_IAC_ACCESS BIT(31)
|
|
#define PHY_IAC_ACCESS BIT(31)
|
|
-@@ -370,6 +434,16 @@
|
|
|
|
|
|
+@@ -371,6 +435,16 @@
|
|
#define ETHSYS_TRGMII_MT7621_DDR_PLL BIT(5)
|
|
#define ETHSYS_TRGMII_MT7621_DDR_PLL BIT(5)
|
|
|
|
|
|
/* ethernet reset control register */
|
|
/* ethernet reset control register */
|
|
@@ -821,7 +821,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
#define ETHSYS_RSTCTRL 0x34
|
|
#define ETHSYS_RSTCTRL 0x34
|
|
#define RSTCTRL_FE BIT(6)
|
|
#define RSTCTRL_FE BIT(6)
|
|
#define RSTCTRL_PPE BIT(31)
|
|
#define RSTCTRL_PPE BIT(31)
|
|
-@@ -453,6 +527,17 @@ struct mtk_rx_dma {
|
|
|
|
|
|
+@@ -454,6 +528,17 @@ struct mtk_rx_dma {
|
|
unsigned int rxd4;
|
|
unsigned int rxd4;
|
|
} __packed __aligned(4);
|
|
} __packed __aligned(4);
|
|
|
|
|
|
@@ -839,7 +839,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
struct mtk_tx_dma {
|
|
struct mtk_tx_dma {
|
|
unsigned int txd1;
|
|
unsigned int txd1;
|
|
unsigned int txd2;
|
|
unsigned int txd2;
|
|
-@@ -460,6 +545,17 @@ struct mtk_tx_dma {
|
|
|
|
|
|
+@@ -461,6 +546,17 @@ struct mtk_tx_dma {
|
|
unsigned int txd4;
|
|
unsigned int txd4;
|
|
} __packed __aligned(4);
|
|
} __packed __aligned(4);
|
|
|
|
|
|
@@ -857,7 +857,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
struct mtk_eth;
|
|
struct mtk_eth;
|
|
struct mtk_mac;
|
|
struct mtk_mac;
|
|
|
|
|
|
-@@ -646,7 +742,9 @@ enum mkt_eth_capabilities {
|
|
|
|
|
|
+@@ -647,7 +743,9 @@ enum mkt_eth_capabilities {
|
|
MTK_SHARED_INT_BIT,
|
|
MTK_SHARED_INT_BIT,
|
|
MTK_TRGMII_MT7621_CLK_BIT,
|
|
MTK_TRGMII_MT7621_CLK_BIT,
|
|
MTK_QDMA_BIT,
|
|
MTK_QDMA_BIT,
|
|
@@ -867,7 +867,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
/* MUX BITS*/
|
|
/* MUX BITS*/
|
|
MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT,
|
|
MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT,
|
|
-@@ -678,7 +776,9 @@ enum mkt_eth_capabilities {
|
|
|
|
|
|
+@@ -679,7 +777,9 @@ enum mkt_eth_capabilities {
|
|
#define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
|
|
#define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
|
|
#define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
|
|
#define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
|
|
#define MTK_QDMA BIT(MTK_QDMA_BIT)
|
|
#define MTK_QDMA BIT(MTK_QDMA_BIT)
|
|
@@ -877,7 +877,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
|
|
|
|
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
|
|
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
|
|
BIT(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
|
|
BIT(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
|
|
-@@ -755,6 +855,7 @@ struct mtk_tx_dma_desc_info {
|
|
|
|
|
|
+@@ -756,6 +856,7 @@ struct mtk_tx_dma_desc_info {
|
|
dma_addr_t addr;
|
|
dma_addr_t addr;
|
|
u32 size;
|
|
u32 size;
|
|
u16 vlan_tci;
|
|
u16 vlan_tci;
|
|
@@ -885,7 +885,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
u8 gso:1;
|
|
u8 gso:1;
|
|
u8 csum:1;
|
|
u8 csum:1;
|
|
u8 vlan:1;
|
|
u8 vlan:1;
|
|
-@@ -812,6 +913,10 @@ struct mtk_reg_map {
|
|
|
|
|
|
+@@ -813,6 +914,10 @@ struct mtk_reg_map {
|
|
* the extra setup for those pins used by GMAC.
|
|
* the extra setup for those pins used by GMAC.
|
|
* @txd_size Tx DMA descriptor size.
|
|
* @txd_size Tx DMA descriptor size.
|
|
* @rxd_size Rx DMA descriptor size.
|
|
* @rxd_size Rx DMA descriptor size.
|
|
@@ -896,7 +896,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
*/
|
|
*/
|
|
struct mtk_soc_data {
|
|
struct mtk_soc_data {
|
|
const struct mtk_reg_map *reg_map;
|
|
const struct mtk_reg_map *reg_map;
|
|
-@@ -824,6 +929,10 @@ struct mtk_soc_data {
|
|
|
|
|
|
+@@ -825,6 +930,10 @@ struct mtk_soc_data {
|
|
struct {
|
|
struct {
|
|
u32 txd_size;
|
|
u32 txd_size;
|
|
u32 rxd_size;
|
|
u32 rxd_size;
|
|
@@ -907,7 +907,7 @@ Signed-off-by: David S. Miller <[email protected]>
|
|
} txrx;
|
|
} txrx;
|
|
};
|
|
};
|
|
|
|
|
|
-@@ -942,7 +1051,6 @@ struct mtk_eth {
|
|
|
|
|
|
+@@ -943,7 +1052,6 @@ struct mtk_eth {
|
|
u32 tx_bytes;
|
|
u32 tx_bytes;
|
|
struct dim tx_dim;
|
|
struct dim tx_dim;
|
|
|
|
|