Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen
2024-04-02 20:20:25 +08:00
221 changed files with 1256 additions and 1114 deletions

View File

@@ -1,2 +1,2 @@
LINUX_VERSION-5.15 = .150
LINUX_KERNEL_HASH-5.15.150 = ee05592b458e7fcdc515b43605883a10cc2f65f2e2b58d60af8a72b93467e4d4
LINUX_VERSION-5.15 = .153
LINUX_KERNEL_HASH-5.15.153 = d7ddb1e144a88773b56a5b4a71baea0b241f3996d446be45290537c6997c84bc

View File

@@ -17,6 +17,7 @@ cloudengines,pogoe02|\
cloudengines,pogoplugv4|\
globalscale,sheevaplug|\
iom,ix2-200|\
iom,ix4-200d|\
linksys,e4200-v2|\
linksys,ea4500|\
netgear,readynas-duo-v2|\

View File

@@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=unetd
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/unetd.git
PKG_SOURCE_DATE:=2023-05-31
PKG_SOURCE_VERSION:=7d3986b7a5a20b9af0dacd053b2657210385e7bb
PKG_MIRROR_HASH:=07f0a4cbae3e80c6309bb8aa27fcef19fbc56093a9c7e426e0d527227af09429
PKG_SOURCE_DATE:=2024-03-31
PKG_SOURCE_VERSION:=806457664ab6e952a7f4febb82e891f596fe577c
PKG_MIRROR_HASH:=0d3952f8079476e68487094b49c9c39074a1068c932f204a87c609074ce30d74
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>

View File

@@ -18,7 +18,7 @@ Signed-off-by: Stephen Boyd <sboyd@kernel.org>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -3142,7 +3142,10 @@ static int clk_rate_get(void *data, u64
@@ -3145,7 +3145,10 @@ static int clk_rate_get(void *data, u64
{
struct clk_core *core = data;

View File

@@ -37,7 +37,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
ret = lan78xx_write_reg(dev, HW_CFG, buf);
if (ret < 0)
return ret;
@@ -2870,6 +2879,9 @@ static int lan78xx_reset(struct lan78xx_
@@ -2871,6 +2880,9 @@ static int lan78xx_reset(struct lan78xx_
buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
}
}

View File

@@ -15,7 +15,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2935,6 +2935,22 @@ static int lan78xx_open(struct net_devic
@@ -2936,6 +2936,22 @@ static int lan78xx_open(struct net_devic
netif_dbg(dev, ifup, dev->net, "phy initialised successfully");

View File

@@ -37,7 +37,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
{
u32 *buf;
@@ -3263,8 +3272,14 @@ static int lan78xx_bind(struct lan78xx_n
@@ -3265,8 +3274,14 @@ static int lan78xx_bind(struct lan78xx_n
if (DEFAULT_RX_CSUM_ENABLE)
dev->net->features |= NETIF_F_RXCSUM;

View File

@@ -39,7 +39,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
if (phydev->mdio.dev.of_node) {
u32 reg;
int len;
@@ -2944,22 +2960,6 @@ static int lan78xx_open(struct net_devic
@@ -2945,22 +2961,6 @@ static int lan78xx_open(struct net_devic
netif_dbg(dev, ifup, dev->net, "phy initialised successfully");

View File

@@ -28,7 +28,7 @@ See: https://github.com/raspberrypi/linux/issues/2447
static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
{
u32 *buf;
@@ -4123,7 +4128,13 @@ static int lan78xx_probe(struct usb_inte
@@ -4125,7 +4130,13 @@ static int lan78xx_probe(struct usb_inte
netdev->max_mtu = MAX_SINGLE_PACKET_SIZE;
netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER);

View File

@@ -12,7 +12,7 @@ in both dwc_otg and in ipv6 processing.
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -3502,7 +3502,7 @@ static int rx_submit(struct lan78xx_net
@@ -3504,7 +3504,7 @@ static int rx_submit(struct lan78xx_net
size_t size = dev->rx_urb_size;
int ret = 0;

View File

@@ -47,7 +47,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
val);
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1673,8 +1673,8 @@ struct urb_priv {
@@ -1674,8 +1674,8 @@ struct urb_priv {
* Each segment table entry is 4*32bits long. 1K seems like an ok size:
* (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
* meaning 64 ring segments.

View File

@@ -17,7 +17,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1357,6 +1357,8 @@ static int clk_core_determine_round_nolo
@@ -1360,6 +1360,8 @@ static int clk_core_determine_round_nolo
if (!core)
return 0;

View File

@@ -16,12 +16,12 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -1892,6 +1892,8 @@ static const struct usb_audio_quirk_flag
QUIRK_FLAG_GENERIC_IMPLICIT_FB),
DEVICE_FLG(0x2b53, 0x0031, /* Fiero SC-01 (firmware v1.1.0) */
QUIRK_FLAG_GENERIC_IMPLICIT_FB),
@@ -1808,6 +1808,8 @@ static const struct usb_audio_quirk_flag
QUIRK_FLAG_IGNORE_CTL_ERROR),
DEVICE_FLG(0x0951, 0x16ad, /* Kingston HyperX */
QUIRK_FLAG_CTL_MSG_DELAY_1M),
+ DEVICE_FLG(0x09da, 0x2695, /* A4Tech FHD 1080p webcam */
+ QUIRK_FLAG_DISABLE_AUTOSUSPEND | QUIRK_FLAG_GET_SAMPLE_RATE),
DEVICE_FLG(0x0525, 0xa4ad, /* Hamedal C20 usb camero */
QUIRK_FLAG_IFACE_SKIP_CLOSE),
DEVICE_FLG(0x0b0e, 0x0349, /* Jabra 550a */
QUIRK_FLAG_CTL_MSG_DELAY_1M),
DEVICE_FLG(0x0ecb, 0x205c, /* JBL Quantum610 Wireless */

View File

@@ -19,7 +19,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -855,8 +855,14 @@ static int usb_audio_probe(struct usb_in
@@ -856,8 +856,14 @@ static int usb_audio_probe(struct usb_in
if (ignore_ctl_error)
chip->quirk_flags |= QUIRK_FLAG_IGNORE_CTL_ERROR;

View File

@@ -54,7 +54,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
addr = xhci_trb_virt_to_dma(new_seg, new_deq);
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1907,6 +1907,7 @@ struct xhci_hcd {
@@ -1908,6 +1908,7 @@ struct xhci_hcd {
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45)
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)

View File

@@ -205,7 +205,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
xhci_err(xhci, "Tried to move enqueue past ring segment\n");
return;
}
@@ -3165,7 +3168,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd
@@ -3215,7 +3218,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd
* that clears the EHB.
*/
while (xhci_handle_event(xhci) > 0) {
@@ -214,7 +214,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
continue;
xhci_update_erst_dequeue(xhci, event_ring_deq);
event_ring_deq = xhci->event_ring->dequeue;
@@ -3307,7 +3310,8 @@ static int prepare_ring(struct xhci_hcd
@@ -3357,7 +3360,8 @@ static int prepare_ring(struct xhci_hcd
}
}
@@ -248,7 +248,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
* when the cycle bit is set to 1.
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1635,6 +1635,7 @@ struct xhci_ring {
@@ -1636,6 +1636,7 @@ struct xhci_ring {
unsigned int num_trbs_free;
unsigned int num_trbs_free_temp;
unsigned int bounce_buf_len;

View File

@@ -63,7 +63,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1909,6 +1909,7 @@ struct xhci_hcd {
@@ -1910,6 +1910,7 @@ struct xhci_hcd {
#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45)
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(47)

View File

@@ -36,7 +36,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -3620,14 +3620,15 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
@@ -3670,14 +3670,15 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
unsigned int num_trbs;
unsigned int start_cycle, num_sgs = 0;
unsigned int enqd_len, block_len, trb_buff_len, full_len;
@@ -54,7 +54,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
full_len = urb->transfer_buffer_length;
/* If we have scatter/gather list, we use it. */
if (urb->num_sgs && !(urb->transfer_flags & URB_DMA_MAP_SINGLE)) {
@@ -3664,6 +3665,17 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
@@ -3714,6 +3715,17 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
start_cycle = ring->cycle_state;
send_addr = addr;
@@ -72,7 +72,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
/* Queue the TRBs, even if they are zero-length */
for (enqd_len = 0; first_trb || enqd_len < full_len;
enqd_len += trb_buff_len) {
@@ -3676,6 +3688,11 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
@@ -3726,6 +3738,11 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
if (enqd_len + trb_buff_len > full_len)
trb_buff_len = full_len - enqd_len;
@@ -86,7 +86,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
first_trb = false;
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1910,6 +1910,7 @@ struct xhci_hcd {
@@ -1911,6 +1911,7 @@ struct xhci_hcd {
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(47)
#define XHCI_VLI_TRB_CACHE_BUG BIT_ULL(48)

View File

@@ -13,7 +13,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -3620,7 +3620,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
@@ -3670,7 +3670,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
unsigned int num_trbs;
unsigned int start_cycle, num_sgs = 0;
unsigned int enqd_len, block_len, trb_buff_len, full_len;
@@ -22,7 +22,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
u32 field, length_field, remainder, maxpacket;
u64 addr, send_addr;
@@ -3666,14 +3666,9 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
@@ -3716,14 +3716,9 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
send_addr = addr;
if (xhci->quirks & XHCI_VLI_SS_BULK_OUT_BUG &&
@@ -40,7 +40,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
}
/* Queue the TRBs, even if they are zero-length */
@@ -3688,7 +3683,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
@@ -3738,7 +3733,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
if (enqd_len + trb_buff_len > full_len)
trb_buff_len = full_len - enqd_len;

View File

@@ -18,7 +18,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2397,11 +2397,7 @@ int clk_set_rate_range(struct clk *clk,
@@ -2400,11 +2400,7 @@ int clk_set_rate_range(struct clk *clk,
* this corner case when determining the rate
*/

View File

@@ -30,7 +30,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2382,28 +2382,29 @@ int clk_set_rate_range(struct clk *clk,
@@ -2385,28 +2385,29 @@ int clk_set_rate_range(struct clk *clk,
goto out;
}

View File

@@ -29,7 +29,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2341,19 +2341,15 @@ int clk_set_rate_exclusive(struct clk *c
@@ -2344,19 +2344,15 @@ int clk_set_rate_exclusive(struct clk *c
}
EXPORT_SYMBOL_GPL(clk_set_rate_exclusive);
@@ -54,7 +54,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!clk)
return 0;
@@ -2366,8 +2362,6 @@ int clk_set_rate_range(struct clk *clk,
@@ -2369,8 +2365,6 @@ int clk_set_rate_range(struct clk *clk,
return -EINVAL;
}
@@ -63,7 +63,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (clk->exclusive_count)
clk_core_rate_unprotect(clk->core);
@@ -2411,6 +2405,28 @@ out:
@@ -2414,6 +2408,28 @@ out:
if (clk->exclusive_count)
clk_core_rate_protect(clk->core);
@@ -92,7 +92,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
clk_prepare_unlock();
return ret;
@@ -4373,9 +4389,10 @@ void __clk_put(struct clk *clk)
@@ -4376,9 +4392,10 @@ void __clk_put(struct clk *clk)
}
hlist_del(&clk->clks_node);

View File

@@ -22,7 +22,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2376,6 +2376,10 @@ static int clk_set_rate_range_nolock(str
@@ -2379,6 +2379,10 @@ static int clk_set_rate_range_nolock(str
goto out;
}
@@ -33,7 +33,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/*
* Since the boundaries have been changed, let's give the
* opportunity to the provider to adjust the clock rate based on
@@ -2393,7 +2397,7 @@ static int clk_set_rate_range_nolock(str
@@ -2396,7 +2400,7 @@ static int clk_set_rate_range_nolock(str
* - the determine_rate() callback does not really check for
* this corner case when determining the rate
*/

View File

@@ -23,7 +23,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1768,6 +1768,23 @@ static void clk_core_update_orphan_statu
@@ -1771,6 +1771,23 @@ static void clk_core_update_orphan_statu
clk_core_update_orphan_status(child, is_orphan);
}
@@ -47,7 +47,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static void clk_reparent(struct clk_core *core, struct clk_core *new_parent)
{
bool was_orphan = core->orphan;
@@ -1792,6 +1809,7 @@ static void clk_reparent(struct clk_core
@@ -1795,6 +1812,7 @@ static void clk_reparent(struct clk_core
}
core->parent = new_parent;

View File

@@ -25,7 +25,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2398,6 +2398,12 @@ static int clk_set_rate_range_nolock(str
@@ -2401,6 +2401,12 @@ static int clk_set_rate_range_nolock(str
if (clk->core->flags & CLK_GET_RATE_NOCACHE)
rate = clk_core_get_rate_recalc(clk->core);

View File

@@ -26,7 +26,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1391,6 +1391,8 @@ static void clk_core_init_rate_req(struc
@@ -1394,6 +1394,8 @@ static void clk_core_init_rate_req(struc
if (WARN_ON(!core || !req))
return;
@@ -35,7 +35,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
parent = core->parent;
if (parent) {
req->best_parent_hw = parent->hw;
@@ -1465,7 +1467,6 @@ unsigned long clk_hw_round_rate(struct c
@@ -1468,7 +1470,6 @@ unsigned long clk_hw_round_rate(struct c
int ret;
struct clk_rate_request req;
@@ -43,7 +43,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
req.rate = rate;
ret = clk_core_round_rate_nolock(hw->core, &req);
@@ -1498,7 +1499,6 @@ long clk_round_rate(struct clk *clk, uns
@@ -1501,7 +1502,6 @@ long clk_round_rate(struct clk *clk, uns
if (clk->exclusive_count)
clk_core_rate_unprotect(clk->core);
@@ -51,7 +51,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
req.rate = rate;
ret = clk_core_round_rate_nolock(clk->core, &req);
@@ -2005,8 +2005,6 @@ static struct clk_core *clk_calc_new_rat
@@ -2008,8 +2008,6 @@ static struct clk_core *clk_calc_new_rat
struct clk_rate_request req;
req.rate = rate;

View File

@@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1384,13 +1384,15 @@ static int clk_core_determine_round_nolo
@@ -1387,13 +1387,15 @@ static int clk_core_determine_round_nolo
}
static void clk_core_init_rate_req(struct clk_core * const core,
@@ -36,7 +36,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
clk_core_get_boundaries(core, &req->min_rate, &req->max_rate);
parent = core->parent;
@@ -1418,7 +1420,7 @@ static int clk_core_round_rate_nolock(st
@@ -1421,7 +1423,7 @@ static int clk_core_round_rate_nolock(st
return 0;
}
@@ -45,7 +45,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (clk_core_can_round(core))
return clk_core_determine_round_nolock(core, req);
@@ -2004,9 +2006,7 @@ static struct clk_core *clk_calc_new_rat
@@ -2007,9 +2009,7 @@ static struct clk_core *clk_calc_new_rat
if (clk_core_can_round(core)) {
struct clk_rate_request req;

View File

@@ -22,7 +22,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1405,6 +1405,26 @@ static void clk_core_init_rate_req(struc
@@ -1408,6 +1408,26 @@ static void clk_core_init_rate_req(struc
}
}

View File

@@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1489,7 +1489,7 @@ unsigned long clk_hw_round_rate(struct c
@@ -1492,7 +1492,7 @@ unsigned long clk_hw_round_rate(struct c
int ret;
struct clk_rate_request req;
@@ -28,7 +28,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = clk_core_round_rate_nolock(hw->core, &req);
if (ret)
@@ -1521,7 +1521,7 @@ long clk_round_rate(struct clk *clk, uns
@@ -1524,7 +1524,7 @@ long clk_round_rate(struct clk *clk, uns
if (clk->exclusive_count)
clk_core_rate_unprotect(clk->core);
@@ -37,7 +37,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = clk_core_round_rate_nolock(clk->core, &req);
@@ -2225,8 +2225,7 @@ static unsigned long clk_core_req_round_
@@ -2228,8 +2228,7 @@ static unsigned long clk_core_req_round_
if (cnt < 0)
return cnt;

View File

@@ -23,7 +23,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1440,8 +1440,6 @@ static int clk_core_round_rate_nolock(st
@@ -1443,8 +1443,6 @@ static int clk_core_round_rate_nolock(st
return 0;
}

View File

@@ -24,7 +24,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -553,6 +553,9 @@ static bool mux_is_better_rate(unsigned
@@ -556,6 +556,9 @@ static bool mux_is_better_rate(unsigned
return now <= rate && now > best;
}
@@ -34,7 +34,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
int clk_mux_determine_rate_flags(struct clk_hw *hw,
struct clk_rate_request *req,
unsigned long flags)
@@ -566,8 +569,12 @@ int clk_mux_determine_rate_flags(struct
@@ -569,8 +572,12 @@ int clk_mux_determine_rate_flags(struct
if (core->flags & CLK_SET_RATE_NO_REPARENT) {
parent = core->parent;
if (core->flags & CLK_SET_RATE_PARENT) {
@@ -49,7 +49,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (ret)
return ret;
@@ -590,7 +597,7 @@ int clk_mux_determine_rate_flags(struct
@@ -593,7 +600,7 @@ int clk_mux_determine_rate_flags(struct
if (core->flags & CLK_SET_RATE_PARENT) {
parent_req = *req;

View File

@@ -20,7 +20,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -556,6 +556,26 @@ static bool mux_is_better_rate(unsigned
@@ -559,6 +559,26 @@ static bool mux_is_better_rate(unsigned
static int clk_core_round_rate_nolock(struct clk_core *core,
struct clk_rate_request *req);
@@ -47,7 +47,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
int clk_mux_determine_rate_flags(struct clk_hw *hw,
struct clk_rate_request *req,
unsigned long flags)
@@ -2579,25 +2599,11 @@ void clk_hw_reparent(struct clk_hw *hw,
@@ -2582,25 +2602,11 @@ void clk_hw_reparent(struct clk_hw *hw,
*/
bool clk_has_parent(struct clk *clk, struct clk *parent)
{

View File

@@ -35,7 +35,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -553,6 +553,10 @@ static bool mux_is_better_rate(unsigned
@@ -556,6 +556,10 @@ static bool mux_is_better_rate(unsigned
return now <= rate && now > best;
}
@@ -46,7 +46,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static int clk_core_round_rate_nolock(struct clk_core *core,
struct clk_rate_request *req);
@@ -576,6 +580,24 @@ static bool clk_core_has_parent(struct c
@@ -579,6 +583,24 @@ static bool clk_core_has_parent(struct c
return false;
}
@@ -71,7 +71,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
int clk_mux_determine_rate_flags(struct clk_hw *hw,
struct clk_rate_request *req,
unsigned long flags)
@@ -583,17 +605,19 @@ int clk_mux_determine_rate_flags(struct
@@ -586,17 +608,19 @@ int clk_mux_determine_rate_flags(struct
struct clk_core *core = hw->core, *parent, *best_parent = NULL;
int i, num_parents, ret;
unsigned long best = 0;
@@ -92,7 +92,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = clk_core_round_rate_nolock(parent, &parent_req);
if (ret)
return ret;
@@ -611,23 +635,29 @@ int clk_mux_determine_rate_flags(struct
@@ -614,23 +638,29 @@ int clk_mux_determine_rate_flags(struct
/* find the parent that can provide the fastest rate <= rate */
num_parents = core->num_parents;
for (i = 0; i < num_parents; i++) {
@@ -126,7 +126,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
}
@@ -1460,6 +1490,8 @@ static bool clk_core_can_round(struct cl
@@ -1463,6 +1493,8 @@ static bool clk_core_can_round(struct cl
static int clk_core_round_rate_nolock(struct clk_core *core,
struct clk_rate_request *req)
{
@@ -135,7 +135,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
lockdep_assert_held(&prepare_lock);
if (!core) {
@@ -1469,8 +1501,20 @@ static int clk_core_round_rate_nolock(st
@@ -1472,8 +1504,20 @@ static int clk_core_round_rate_nolock(st
if (clk_core_can_round(core))
return clk_core_determine_round_nolock(core, req);

View File

@@ -17,7 +17,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1449,6 +1449,8 @@ static void clk_core_init_rate_req(struc
@@ -1452,6 +1452,8 @@ static void clk_core_init_rate_req(struc
if (WARN_ON(!core || !req))
return;

View File

@@ -28,7 +28,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2586,6 +2586,24 @@ int clk_set_max_rate(struct clk *clk, un
@@ -2589,6 +2589,24 @@ int clk_set_max_rate(struct clk *clk, un
EXPORT_SYMBOL_GPL(clk_set_max_rate);
/**

View File

@@ -13,7 +13,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2599,7 +2599,9 @@ void clk_get_rate_range(struct clk *clk,
@@ -2602,7 +2602,9 @@ void clk_get_rate_range(struct clk *clk,
if (!clk || !min || !max)
return;

View File

@@ -16,7 +16,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -298,7 +298,7 @@
@@ -295,7 +295,7 @@
status = "okay";
};

View File

@@ -16,7 +16,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -289,6 +289,141 @@
@@ -286,6 +286,141 @@
gpio-controller;
};

View File

@@ -17,7 +17,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -278,6 +278,15 @@
@@ -275,6 +275,15 @@
twd: timer-mfd@400 {
compatible = "brcm,bcm4908-twd", "simple-mfd", "syscon";
reg = <0x400 0x4c>;

View File

@@ -16,7 +16,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -458,6 +458,15 @@
@@ -455,6 +455,15 @@
};
};

View File

@@ -17,7 +17,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -352,6 +352,61 @@
@@ -349,6 +349,61 @@
groups = "led_9_grp_a";
};
@@ -79,7 +79,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
pins_led_21_a: led_21-a-pins {
function = "led_21";
groups = "led_21_grp_a";
@@ -362,6 +417,21 @@
@@ -359,6 +414,21 @@
groups = "led_22_grp_a";
};
@@ -101,7 +101,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
pins_led_26_a: led_26-a-pins {
function = "led_26";
groups = "led_26_grp_a";
@@ -387,6 +457,11 @@
@@ -384,6 +454,11 @@
groups = "led_30_grp_a";
};

View File

@@ -18,7 +18,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -517,6 +517,14 @@
@@ -514,6 +514,14 @@
status = "okay";
};

View File

@@ -17,7 +17,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -283,6 +283,11 @@
@@ -280,6 +280,11 @@
#address-cells = <1>;
#size-cells = <1>;

View File

@@ -40,7 +40,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
};
soc {
@@ -531,6 +537,18 @@
@@ -528,6 +534,18 @@
#size-cells = <0>;
};

View File

@@ -12,7 +12,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
--- a/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcmbca/bcm4908.dtsi
@@ -343,7 +343,7 @@
@@ -340,7 +340,7 @@
gpio0: gpio-controller@500 {
compatible = "brcm,bcm6345-gpio";
reg-names = "dirout", "dat";

View File

@@ -109,7 +109,7 @@ it on BCM4708 family.
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1907,6 +1907,7 @@ struct xhci_hcd {
@@ -1908,6 +1908,7 @@ struct xhci_hcd {
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45)
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)

View File

@@ -1,52 +0,0 @@
From 02d6fdecb9c38de19065f6bed8d5214556fd061d Mon Sep 17 00:00:00 2001
From: Ansuel Smith <ansuelsmth@gmail.com>
Date: Thu, 4 Nov 2021 16:00:40 +0100
Subject: regmap: allow to define reg_update_bits for no bus configuration
Some device requires a special handling for reg_update_bits and can't use
the normal regmap read write logic. An example is when locking is
handled by the device and rmw operations requires to do atomic operations.
Allow to declare a dedicated function in regmap_config for
reg_update_bits in no bus configuration.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Link: https://lore.kernel.org/r/20211104150040.1260-1-ansuelsmth@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
---
drivers/base/regmap/regmap.c | 1 +
include/linux/regmap.h | 7 +++++++
2 files changed, 8 insertions(+)
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -877,6 +877,7 @@ struct regmap *__regmap_init(struct devi
if (!bus) {
map->reg_read = config->reg_read;
map->reg_write = config->reg_write;
+ map->reg_update_bits = config->reg_update_bits;
map->defer_caching = false;
goto skip_format_initialization;
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -290,6 +290,11 @@ typedef void (*regmap_unlock)(void *);
* read operation on a bus such as SPI, I2C, etc. Most of the
* devices do not need this.
* @reg_write: Same as above for writing.
+ * @reg_update_bits: Optional callback that if filled will be used to perform
+ * all the update_bits(rmw) operation. Should only be provided
+ * if the function require special handling with lock and reg
+ * handling and the operation cannot be represented as a simple
+ * update_bits operation on a bus such as SPI, I2C, etc.
* @fast_io: Register IO is fast. Use a spinlock instead of a mutex
* to perform locking. This field is ignored if custom lock/unlock
* functions are used (see fields lock/unlock of struct regmap_config).
@@ -372,6 +377,8 @@ struct regmap_config {
int (*reg_read)(void *context, unsigned int reg, unsigned int *val);
int (*reg_write)(void *context, unsigned int reg, unsigned int val);
+ int (*reg_update_bits)(void *context, unsigned int reg,
+ unsigned int mask, unsigned int val);
bool fast_io;

View File

@@ -37,7 +37,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8);
map->format.buf_size = DIV_ROUND_UP(config->reg_bits +
config->val_bits + config->pad_bits, 8);
@@ -1737,6 +1738,7 @@ static int _regmap_raw_write_impl(struct
@@ -1750,6 +1751,7 @@ static int _regmap_raw_write_impl(struct
return ret;
}
@@ -45,7 +45,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
map->format.format_reg(map->work_buf, reg, map->reg_shift);
regmap_set_work_buf_flag_mask(map, map->format.reg_bytes,
map->write_flag_mask);
@@ -1907,6 +1909,7 @@ static int _regmap_bus_formatted_write(v
@@ -1920,6 +1922,7 @@ static int _regmap_bus_formatted_write(v
return ret;
}
@@ -53,7 +53,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
map->format.format_write(map, reg, val);
trace_regmap_hw_write_start(map, reg, 1);
@@ -2348,6 +2351,7 @@ static int _regmap_raw_multi_reg_write(s
@@ -2360,6 +2363,7 @@ static int _regmap_raw_multi_reg_write(s
unsigned int reg = regs[i].reg;
unsigned int val = regs[i].def;
trace_regmap_hw_write_start(map, reg, 1);
@@ -61,7 +61,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
map->format.format_reg(u8, reg, map->reg_shift);
u8 += reg_bytes + pad_bytes;
map->format.format_val(u8, val, 0);
@@ -2675,6 +2679,7 @@ static int _regmap_raw_read(struct regma
@@ -2685,6 +2689,7 @@ static int _regmap_raw_read(struct regma
return ret;
}
@@ -80,7 +80,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
* @pad_bits: Number of bits of padding between register and value.
* @val_bits: Number of bits in a register value, mandatory.
*
@@ -360,6 +362,7 @@ struct regmap_config {
@@ -366,6 +368,7 @@ struct regmap_config {
int reg_bits;
int reg_stride;

View File

@@ -42,7 +42,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8);
map->format.pad_bytes = config->pad_bits / 8;
map->format.reg_downshift = config->reg_downshift;
@@ -1738,6 +1740,7 @@ static int _regmap_raw_write_impl(struct
@@ -1751,6 +1753,7 @@ static int _regmap_raw_write_impl(struct
return ret;
}
@@ -50,7 +50,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
reg >>= map->format.reg_downshift;
map->format.format_reg(map->work_buf, reg, map->reg_shift);
regmap_set_work_buf_flag_mask(map, map->format.reg_bytes,
@@ -1909,6 +1912,7 @@ static int _regmap_bus_formatted_write(v
@@ -1922,6 +1925,7 @@ static int _regmap_bus_formatted_write(v
return ret;
}
@@ -58,7 +58,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
reg >>= map->format.reg_downshift;
map->format.format_write(map, reg, val);
@@ -2351,6 +2355,7 @@ static int _regmap_raw_multi_reg_write(s
@@ -2363,6 +2367,7 @@ static int _regmap_raw_multi_reg_write(s
unsigned int reg = regs[i].reg;
unsigned int val = regs[i].def;
trace_regmap_hw_write_start(map, reg, 1);
@@ -66,7 +66,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
reg >>= map->format.reg_downshift;
map->format.format_reg(u8, reg, map->reg_shift);
u8 += reg_bytes + pad_bytes;
@@ -2679,6 +2684,7 @@ static int _regmap_raw_read(struct regma
@@ -2689,6 +2694,7 @@ static int _regmap_raw_read(struct regma
return ret;
}
@@ -85,7 +85,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
* @pad_bits: Number of bits of padding between register and value.
* @val_bits: Number of bits in a register value, mandatory.
*
@@ -363,6 +365,7 @@ struct regmap_config {
@@ -369,6 +371,7 @@ struct regmap_config {
int reg_bits;
int reg_stride;
int reg_downshift;

View File

@@ -28,7 +28,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -1931,6 +1931,8 @@ static int _regmap_bus_reg_write(void *c
@@ -1943,6 +1943,8 @@ static int _regmap_bus_reg_write(void *c
{
struct regmap *map = context;
@@ -37,7 +37,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
return map->bus->reg_write(map->bus_context, reg, val);
}
@@ -2705,6 +2707,8 @@ static int _regmap_bus_reg_read(void *co
@@ -2715,6 +2717,8 @@ static int _regmap_bus_reg_read(void *co
{
struct regmap *map = context;
@@ -46,7 +46,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
return map->bus->reg_read(map->bus_context, reg, val);
}
@@ -3080,6 +3084,8 @@ static int _regmap_update_bits(struct re
@@ -3084,6 +3088,8 @@ static int _regmap_update_bits(struct re
*change = false;
if (regmap_volatile(map, reg) && map->reg_update_bits) {

View File

@@ -19,7 +19,7 @@ Link: https://lore.kernel.org/linux-mtd/20220320100001.247905-3-gch981213@gmail.
--- a/drivers/mtd/nand/spi/gigadevice.c
+++ b/drivers/mtd/nand/spi/gigadevice.c
@@ -333,6 +333,36 @@ static const struct spinand_info gigadev
@@ -335,6 +335,36 @@ static const struct spinand_info gigadev
SPINAND_HAS_QE_BIT,
SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
gd5fxgq4uexxg_ecc_get_status)),

View File

@@ -14,7 +14,7 @@ Link: https://lore.kernel.org/linux-mtd/20220320100001.247905-4-gch981213@gmail.
--- a/drivers/mtd/nand/spi/gigadevice.c
+++ b/drivers/mtd/nand/spi/gigadevice.c
@@ -383,6 +383,16 @@ static const struct spinand_info gigadev
@@ -385,6 +385,16 @@ static const struct spinand_info gigadev
SPINAND_HAS_QE_BIT,
SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
gd5fxgq5xexxg_ecc_get_status)),

View File

@@ -35,7 +35,7 @@ Link: https://lore.kernel.org/linux-mtd/20220320100001.247905-5-gch981213@gmail.
static SPINAND_OP_VARIANTS(write_cache_variants,
SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
SPINAND_PROG_LOAD(true, 0, NULL, 0));
@@ -391,6 +399,46 @@ static const struct spinand_info gigadev
@@ -393,6 +401,46 @@ static const struct spinand_info gigadev
&write_cache_variants,
&update_cache_variants),
SPINAND_HAS_QE_BIT,

View File

@@ -22,7 +22,7 @@ Link: https://lore.kernel.org/linux-mtd/20220320100001.247905-6-gch981213@gmail.
--- a/drivers/mtd/nand/spi/gigadevice.c
+++ b/drivers/mtd/nand/spi/gigadevice.c
@@ -441,6 +441,66 @@ static const struct spinand_info gigadev
@@ -443,6 +443,66 @@ static const struct spinand_info gigadev
SPINAND_HAS_QE_BIT,
SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
gd5fxgq5xexxg_ecc_get_status)),

View File

@@ -20,7 +20,7 @@ Link: https://lore.kernel.org/bpf/d5dc039c3d4123426e7023a488c449181a7bc57f.16469
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -1473,9 +1473,14 @@ static int veth_xdp_set(struct net_devic
@@ -1455,9 +1455,14 @@ static int veth_xdp_set(struct net_devic
goto err;
}

View File

@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <linux/mfd/syscon.h>
#include <linux/regmap.h>
#include <linux/clk.h>
@@ -840,7 +841,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -850,7 +851,7 @@ static int mtk_init_fq_dma(struct mtk_et
dma_addr_t dma_addr;
int i;
@@ -29,7 +29,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
cnt * sizeof(struct mtk_tx_dma),
&eth->phy_scratch_ring,
GFP_ATOMIC);
@@ -852,10 +853,10 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -862,10 +863,10 @@ static int mtk_init_fq_dma(struct mtk_et
if (unlikely(!eth->scratch_head))
return -ENOMEM;
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return -ENOMEM;
phy_ring_tail = eth->phy_scratch_ring +
@@ -909,26 +910,26 @@ static void mtk_tx_unmap(struct mtk_eth
@@ -919,26 +920,26 @@ static void mtk_tx_unmap(struct mtk_eth
{
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
if (tx_buf->flags & MTK_TX_FLAGS_SINGLE0) {
@@ -73,7 +73,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
dma_unmap_addr(tx_buf, dma_addr1),
dma_unmap_len(tx_buf, dma_len1),
DMA_TO_DEVICE);
@@ -1006,9 +1007,9 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1016,9 +1017,9 @@ static int mtk_tx_map(struct sk_buff *sk
if (skb_vlan_tag_present(skb))
txd4 |= TX_DMA_INS_VLAN | skb_vlan_tag_get(skb);
@@ -85,7 +85,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return -ENOMEM;
WRITE_ONCE(itxd->txd1, mapped_addr);
@@ -1047,10 +1048,10 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1057,10 +1058,10 @@ static int mtk_tx_map(struct sk_buff *sk
frag_map_size = min(frag_size, MTK_TX_DMA_BUF_LEN);
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
goto err_dma;
if (i == nr_frags - 1 &&
@@ -1331,18 +1332,18 @@ static int mtk_poll_rx(struct napi_struc
@@ -1341,18 +1342,18 @@ static int mtk_poll_rx(struct napi_struc
netdev->stats.rx_dropped++;
goto release_desc;
}
@@ -120,7 +120,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->buf_size, DMA_FROM_DEVICE);
/* receive data */
@@ -1615,7 +1616,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1625,7 +1626,7 @@ static int mtk_tx_alloc(struct mtk_eth *
if (!ring->buf)
goto no_tx_mem;
@@ -129,7 +129,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
&ring->phys, GFP_ATOMIC);
if (!ring->dma)
goto no_tx_mem;
@@ -1633,7 +1634,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1643,7 +1644,7 @@ static int mtk_tx_alloc(struct mtk_eth *
* descriptors in ring->dma_pdma.
*/
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
@@ -138,7 +138,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
&ring->phys_pdma,
GFP_ATOMIC);
if (!ring->dma_pdma)
@@ -1692,7 +1693,7 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1702,7 +1703,7 @@ static void mtk_tx_clean(struct mtk_eth
}
if (ring->dma) {
@@ -147,7 +147,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
MTK_DMA_SIZE * sizeof(*ring->dma),
ring->dma,
ring->phys);
@@ -1700,7 +1701,7 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1710,7 +1711,7 @@ static void mtk_tx_clean(struct mtk_eth
}
if (ring->dma_pdma) {
@@ -156,7 +156,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
MTK_DMA_SIZE * sizeof(*ring->dma_pdma),
ring->dma_pdma,
ring->phys_pdma);
@@ -1748,18 +1749,18 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1758,18 +1759,18 @@ static int mtk_rx_alloc(struct mtk_eth *
return -ENOMEM;
}
@@ -178,7 +178,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return -ENOMEM;
ring->dma[i].rxd1 = (unsigned int)dma_addr;
@@ -1795,7 +1796,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1805,7 +1806,7 @@ static void mtk_rx_clean(struct mtk_eth
continue;
if (!ring->dma[i].rxd1)
continue;
@@ -187,7 +187,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->dma[i].rxd1,
ring->buf_size,
DMA_FROM_DEVICE);
@@ -1806,7 +1807,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1816,7 +1817,7 @@ static void mtk_rx_clean(struct mtk_eth
}
if (ring->dma) {
@@ -196,7 +196,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->dma_size * sizeof(*ring->dma),
ring->dma,
ring->phys);
@@ -2165,7 +2166,7 @@ static void mtk_dma_free(struct mtk_eth
@@ -2175,7 +2176,7 @@ static void mtk_dma_free(struct mtk_eth
if (eth->netdev[i])
netdev_reset_queue(eth->netdev[i]);
if (eth->scratch_ring) {
@@ -205,7 +205,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
MTK_DMA_SIZE * sizeof(struct mtk_tx_dma),
eth->scratch_ring,
eth->phy_scratch_ring);
@@ -2517,6 +2518,8 @@ static void mtk_dim_tx(struct work_struc
@@ -2527,6 +2528,8 @@ static void mtk_dim_tx(struct work_struc
static int mtk_hw_init(struct mtk_eth *eth)
{
@@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
int i, val, ret;
if (test_and_set_bit(MTK_HW_INIT, &eth->state))
@@ -2529,6 +2532,10 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2539,6 +2542,10 @@ static int mtk_hw_init(struct mtk_eth *e
if (ret)
goto err_disable_pm;
@@ -225,7 +225,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
ret = device_reset(eth->dev);
if (ret) {
@@ -3075,6 +3082,35 @@ free_netdev:
@@ -3085,6 +3092,35 @@ free_netdev:
return err;
}
@@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int mtk_probe(struct platform_device *pdev)
{
struct device_node *mac_np;
@@ -3088,6 +3124,7 @@ static int mtk_probe(struct platform_dev
@@ -3098,6 +3134,7 @@ static int mtk_probe(struct platform_dev
eth->soc = of_device_get_match_data(&pdev->dev);
eth->dev = &pdev->dev;
@@ -269,7 +269,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
eth->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
@@ -3136,6 +3173,16 @@ static int mtk_probe(struct platform_dev
@@ -3146,6 +3183,16 @@ static int mtk_probe(struct platform_dev
}
}

View File

@@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int mtk_msg_level = -1;
module_param_named(msg_level, mtk_msg_level, int, 0);
@@ -3205,6 +3206,22 @@ static int mtk_probe(struct platform_dev
@@ -3215,6 +3216,22 @@ static int mtk_probe(struct platform_dev
}
}

View File

@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2338,7 +2338,7 @@ static int mtk_open(struct net_device *d
@@ -2348,7 +2348,7 @@ static int mtk_open(struct net_device *d
return err;
}
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
gdm_config = MTK_GDMA_TO_PPE;
mtk_gdm_config(eth, gdm_config);
@@ -2412,7 +2412,7 @@ static int mtk_stop(struct net_device *d
@@ -2422,7 +2422,7 @@ static int mtk_stop(struct net_device *d
mtk_dma_free(eth);
if (eth->soc->offload_version)
@@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return 0;
}
@@ -3297,10 +3297,11 @@ static int mtk_probe(struct platform_dev
@@ -3307,10 +3307,11 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {

View File

@@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <net/dsa.h>
#include "mtk_eth_soc.h"
@@ -1293,7 +1294,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1303,7 +1304,7 @@ static int mtk_poll_rx(struct napi_struc
struct net_device *netdev;
unsigned int pktlen;
dma_addr_t dma_addr;
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
int mac;
ring = mtk_get_rx_ring(eth);
@@ -1372,6 +1373,11 @@ static int mtk_poll_rx(struct napi_struc
@@ -1382,6 +1383,11 @@ static int mtk_poll_rx(struct napi_struc
skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
}
@@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
(trxd.rxd2 & RX_DMA_VTAG))
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
@@ -3297,7 +3303,7 @@ static int mtk_probe(struct platform_dev
@@ -3307,7 +3313,7 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {

View File

@@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mediatek,hifsys = <&hifsys>;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3184,7 +3184,7 @@ static int mtk_probe(struct platform_dev
@@ -3194,7 +3194,7 @@ static int mtk_probe(struct platform_dev
struct regmap *cci;
cci = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,

View File

@@ -13,7 +13,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
@@ -846,7 +846,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -856,7 +856,7 @@ static int mtk_init_fq_dma(struct mtk_et
eth->scratch_ring = dma_alloc_coherent(eth->dma_dev,
cnt * sizeof(struct mtk_tx_dma),
&eth->phy_scratch_ring,
@@ -22,7 +22,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(!eth->scratch_ring))
return -ENOMEM;
@@ -1624,7 +1624,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1634,7 +1634,7 @@ static int mtk_tx_alloc(struct mtk_eth *
goto no_tx_mem;
ring->dma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
@@ -31,7 +31,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!ring->dma)
goto no_tx_mem;
@@ -1642,8 +1642,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1652,8 +1652,7 @@ static int mtk_tx_alloc(struct mtk_eth *
*/
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
ring->dma_pdma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
@@ -41,7 +41,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!ring->dma_pdma)
goto no_tx_mem;
@@ -1758,7 +1757,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1768,7 +1767,7 @@ static int mtk_rx_alloc(struct mtk_eth *
ring->dma = dma_alloc_coherent(eth->dma_dev,
rx_dma_size * sizeof(*ring->dma),

View File

@@ -14,7 +14,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
@@ -972,18 +972,51 @@ static void setup_tx_buf(struct mtk_eth
@@ -982,18 +982,51 @@ static void setup_tx_buf(struct mtk_eth
}
}
@@ -69,7 +69,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int k = 0;
itxd = ring->next_free;
@@ -991,49 +1024,32 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1001,49 +1034,32 @@ static int mtk_tx_map(struct sk_buff *sk
if (itxd == ring->last_free)
return -ENOMEM;
@@ -126,7 +126,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
bool new_desc = true;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA) ||
@@ -1048,23 +1064,17 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1058,23 +1074,17 @@ static int mtk_tx_map(struct sk_buff *sk
new_desc = false;
}
@@ -159,7 +159,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
tx_buf = mtk_desc_to_tx_buf(ring, txd);
if (new_desc)
@@ -1074,20 +1084,17 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1084,20 +1094,17 @@ static int mtk_tx_map(struct sk_buff *sk
tx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 :
MTK_TX_FLAGS_FPORT1;

View File

@@ -14,7 +14,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
@@ -838,20 +838,20 @@ static void *mtk_max_lro_buf_alloc(gfp_t
@@ -848,20 +848,20 @@ static void *mtk_max_lro_buf_alloc(gfp_t
/* the qdma core needs scratch memory to be setup */
static int mtk_init_fq_dma(struct mtk_eth *eth)
{
@@ -38,7 +38,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(!eth->scratch_head))
return -ENOMEM;
@@ -861,16 +861,19 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -871,16 +871,19 @@ static int mtk_init_fq_dma(struct mtk_et
if (unlikely(dma_mapping_error(eth->dma_dev, dma_addr)))
return -ENOMEM;
@@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
mtk_w32(eth, eth->phy_scratch_ring, MTK_QDMA_FQ_HEAD);
@@ -2173,6 +2176,7 @@ static int mtk_dma_init(struct mtk_eth *
@@ -2183,6 +2186,7 @@ static int mtk_dma_init(struct mtk_eth *
static void mtk_dma_free(struct mtk_eth *eth)
{
@@ -73,7 +73,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int i;
for (i = 0; i < MTK_MAC_COUNT; i++)
@@ -2180,9 +2184,8 @@ static void mtk_dma_free(struct mtk_eth
@@ -2190,9 +2194,8 @@ static void mtk_dma_free(struct mtk_eth
netdev_reset_queue(eth->netdev[i]);
if (eth->scratch_ring) {
dma_free_coherent(eth->dma_dev,
@@ -85,7 +85,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
eth->scratch_ring = NULL;
eth->phy_scratch_ring = 0;
}
@@ -3387,6 +3390,9 @@ static const struct mtk_soc_data mt2701_
@@ -3397,6 +3400,9 @@ static const struct mtk_soc_data mt2701_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
@@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7621_data = {
@@ -3395,6 +3401,9 @@ static const struct mtk_soc_data mt7621_
@@ -3405,6 +3411,9 @@ static const struct mtk_soc_data mt7621_
.required_clks = MT7621_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
@@ -105,7 +105,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7622_data = {
@@ -3404,6 +3413,9 @@ static const struct mtk_soc_data mt7622_
@@ -3414,6 +3423,9 @@ static const struct mtk_soc_data mt7622_
.required_clks = MT7622_CLKS_BITMAP,
.required_pctl = false,
.offload_version = 2,
@@ -115,7 +115,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7623_data = {
@@ -3412,6 +3424,9 @@ static const struct mtk_soc_data mt7623_
@@ -3422,6 +3434,9 @@ static const struct mtk_soc_data mt7623_
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
.offload_version = 2,
@@ -125,7 +125,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data mt7629_data = {
@@ -3420,6 +3435,9 @@ static const struct mtk_soc_data mt7629_
@@ -3430,6 +3445,9 @@ static const struct mtk_soc_data mt7629_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7629_CLKS_BITMAP,
.required_pctl = false,
@@ -135,7 +135,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const struct mtk_soc_data rt5350_data = {
@@ -3427,6 +3445,9 @@ static const struct mtk_soc_data rt5350_
@@ -3437,6 +3455,9 @@ static const struct mtk_soc_data rt5350_
.hw_features = MTK_HW_FEATURES_MT7628,
.required_clks = MT7628_CLKS_BITMAP,
.required_pctl = false,

View File

@@ -12,7 +12,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
@@ -1625,8 +1625,10 @@ static int mtk_napi_rx(struct napi_struc
@@ -1635,8 +1635,10 @@ static int mtk_napi_rx(struct napi_struc
static int mtk_tx_alloc(struct mtk_eth *eth)
{
@@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->buf = kcalloc(MTK_DMA_SIZE, sizeof(*ring->buf),
GFP_KERNEL);
@@ -1642,8 +1644,10 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1652,8 +1654,10 @@ static int mtk_tx_alloc(struct mtk_eth *
int next = (i + 1) % MTK_DMA_SIZE;
u32 next_ptr = ring->phys + next * sz;
@@ -37,7 +37,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
/* On MT7688 (PDMA only) this driver uses the ring->dma structs
@@ -1665,7 +1669,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1675,7 +1679,7 @@ static int mtk_tx_alloc(struct mtk_eth *
ring->dma_size = MTK_DMA_SIZE;
atomic_set(&ring->free_count, MTK_DMA_SIZE - 2);
ring->next_free = &ring->dma[0];
@@ -46,7 +46,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->last_free_ptr = (u32)(ring->phys + ((MTK_DMA_SIZE - 1) * sz));
ring->thresh = MAX_SKB_FRAGS;
@@ -1698,6 +1702,7 @@ no_tx_mem:
@@ -1708,6 +1712,7 @@ no_tx_mem:
static void mtk_tx_clean(struct mtk_eth *eth)
{
@@ -54,7 +54,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_ring *ring = &eth->tx_ring;
int i;
@@ -1710,17 +1715,15 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1720,17 +1725,15 @@ static void mtk_tx_clean(struct mtk_eth
if (ring->dma) {
dma_free_coherent(eth->dma_dev,

View File

@@ -12,7 +12,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
@@ -891,10 +891,11 @@ static inline void *mtk_qdma_phys_to_vir
@@ -901,10 +901,11 @@ static inline void *mtk_qdma_phys_to_vir
return ret + (desc - ring->phys);
}
@@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return &ring->buf[idx];
}
@@ -1016,6 +1017,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1026,6 +1027,7 @@ static int mtk_tx_map(struct sk_buff *sk
};
struct mtk_mac *mac = netdev_priv(dev);
struct mtk_eth *eth = mac->hw;
@@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_dma *itxd, *txd;
struct mtk_tx_dma *itxd_pdma, *txd_pdma;
struct mtk_tx_buf *itx_buf, *tx_buf;
@@ -1027,7 +1029,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1037,7 +1039,7 @@ static int mtk_tx_map(struct sk_buff *sk
if (itxd == ring->last_free)
return -ENOMEM;
@@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
memset(itx_buf, 0, sizeof(*itx_buf));
txd_info.addr = dma_map_single(eth->dma_dev, skb->data, txd_info.size,
@@ -1055,7 +1057,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1065,7 +1067,7 @@ static int mtk_tx_map(struct sk_buff *sk
while (frag_size) {
bool new_desc = true;
@@ -53,7 +53,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
(i & 0x1)) {
txd = mtk_qdma_phys_to_virt(ring, txd->txd2);
txd_pdma = qdma_to_pdma(ring, txd);
@@ -1079,7 +1081,8 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1089,7 +1091,8 @@ static int mtk_tx_map(struct sk_buff *sk
mtk_tx_set_dma_desc(dev, txd, &txd_info);
@@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (new_desc)
memset(tx_buf, 0, sizeof(*tx_buf));
tx_buf->skb = (struct sk_buff *)MTK_DMA_DUMMY_DESC;
@@ -1098,7 +1101,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1108,7 +1111,7 @@ static int mtk_tx_map(struct sk_buff *sk
/* store skb to cleanup */
itx_buf->skb = skb;
@@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (k & 0x1)
txd_pdma->txd2 |= TX_DMA_LS0;
else
@@ -1116,7 +1119,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1126,7 +1129,7 @@ static int mtk_tx_map(struct sk_buff *sk
*/
wmb();
@@ -81,7 +81,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
!netdev_xmit_more())
mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
@@ -1130,13 +1133,13 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1140,13 +1143,13 @@ static int mtk_tx_map(struct sk_buff *sk
err_dma:
do {
@@ -97,7 +97,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
itxd_pdma->txd2 = TX_DMA_DESP2_DEF;
itxd = mtk_qdma_phys_to_virt(ring, itxd->txd2);
@@ -1450,7 +1453,8 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1460,7 +1463,8 @@ static int mtk_poll_tx_qdma(struct mtk_e
if ((desc->txd3 & TX_DMA_OWNER_CPU) == 0)
break;

View File

@@ -11,7 +11,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
@@ -906,9 +906,10 @@ static struct mtk_tx_dma *qdma_to_pdma(s
@@ -916,9 +916,10 @@ static struct mtk_tx_dma *qdma_to_pdma(s
return ring->dma_pdma - ring->dma + dma;
}
@@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
static void mtk_tx_unmap(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
@@ -1124,8 +1125,10 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1134,8 +1135,10 @@ static int mtk_tx_map(struct sk_buff *sk
!netdev_xmit_more())
mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
} else {

View File

@@ -13,7 +13,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
@@ -1776,7 +1776,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1786,7 +1786,7 @@ static int mtk_rx_alloc(struct mtk_eth *
}
ring->dma = dma_alloc_coherent(eth->dma_dev,
@@ -22,7 +22,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
&ring->phys, GFP_KERNEL);
if (!ring->dma)
return -ENOMEM;
@@ -1834,9 +1834,8 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1844,9 +1844,8 @@ static void mtk_rx_clean(struct mtk_eth
if (ring->dma) {
dma_free_coherent(eth->dma_dev,
@@ -34,7 +34,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->dma = NULL;
}
}
@@ -3402,6 +3401,7 @@ static const struct mtk_soc_data mt2701_
@@ -3412,6 +3411,7 @@ static const struct mtk_soc_data mt2701_
.required_pctl = true,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@@ -42,7 +42,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3413,6 +3413,7 @@ static const struct mtk_soc_data mt7621_
@@ -3423,6 +3423,7 @@ static const struct mtk_soc_data mt7621_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@@ -50,7 +50,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3425,6 +3426,7 @@ static const struct mtk_soc_data mt7622_
@@ -3435,6 +3436,7 @@ static const struct mtk_soc_data mt7622_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@@ -58,7 +58,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3436,6 +3438,7 @@ static const struct mtk_soc_data mt7623_
@@ -3446,6 +3448,7 @@ static const struct mtk_soc_data mt7623_
.offload_version = 2,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@@ -66,7 +66,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3447,6 +3450,7 @@ static const struct mtk_soc_data mt7629_
@@ -3457,6 +3460,7 @@ static const struct mtk_soc_data mt7629_
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
@@ -74,7 +74,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3457,6 +3461,7 @@ static const struct mtk_soc_data rt5350_
@@ -3467,6 +3471,7 @@ static const struct mtk_soc_data rt5350_
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),

View File

@@ -12,7 +12,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
@@ -1265,9 +1265,12 @@ static struct mtk_rx_ring *mtk_get_rx_ri
@@ -1275,9 +1275,12 @@ static struct mtk_rx_ring *mtk_get_rx_ri
return &eth->rx_ring[0];
for (i = 0; i < MTK_MAX_RX_RING_NUM; i++) {
@@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->calc_idx_update = true;
return ring;
}
@@ -1318,7 +1321,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1328,7 +1331,7 @@ static int mtk_poll_rx(struct napi_struc
goto rx_done;
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
data = ring->data[idx];
if (!mtk_rx_get_desc(&trxd, rxd))
@@ -1510,7 +1513,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -1520,7 +1523,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
mtk_tx_unmap(eth, tx_buf, true);

View File

@@ -14,7 +14,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
@@ -1785,18 +1785,25 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1795,18 +1795,25 @@ static int mtk_rx_alloc(struct mtk_eth *
return -ENOMEM;
for (i = 0; i < rx_dma_size; i++) {
@@ -43,7 +43,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
ring->dma_size = rx_dma_size;
ring->calc_idx_update = false;
@@ -1821,14 +1828,17 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1831,14 +1838,17 @@ static void mtk_rx_clean(struct mtk_eth
if (ring->data && ring->dma) {
for (i = 0; i < ring->dma_size; i++) {

View File

@@ -73,7 +73,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* strings used by ethtool */
static const struct mtk_ethtool_stats {
char str[ETH_GSTRING_LEN];
@@ -619,8 +672,8 @@ static inline void mtk_tx_irq_disable(st
@@ -629,8 +682,8 @@ static inline void mtk_tx_irq_disable(st
u32 val;
spin_lock_irqsave(&eth->tx_irq_lock, flags);
@@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->tx_irq_lock, flags);
}
@@ -630,8 +683,8 @@ static inline void mtk_tx_irq_enable(str
@@ -640,8 +693,8 @@ static inline void mtk_tx_irq_enable(str
u32 val;
spin_lock_irqsave(&eth->tx_irq_lock, flags);
@@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->tx_irq_lock, flags);
}
@@ -641,8 +694,8 @@ static inline void mtk_rx_irq_disable(st
@@ -651,8 +704,8 @@ static inline void mtk_rx_irq_disable(st
u32 val;
spin_lock_irqsave(&eth->rx_irq_lock, flags);
@@ -106,7 +106,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->rx_irq_lock, flags);
}
@@ -652,8 +705,8 @@ static inline void mtk_rx_irq_enable(str
@@ -662,8 +715,8 @@ static inline void mtk_rx_irq_enable(str
u32 val;
spin_lock_irqsave(&eth->rx_irq_lock, flags);
@@ -117,7 +117,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_irqrestore(&eth->rx_irq_lock, flags);
}
@@ -704,39 +757,39 @@ void mtk_stats_update_mac(struct mtk_mac
@@ -714,39 +767,39 @@ void mtk_stats_update_mac(struct mtk_mac
hw_stats->rx_checksum_errors +=
mtk_r32(mac->hw, MT7628_SDM_CS_ERR);
} else {
@@ -172,7 +172,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
u64_stats_update_end(&hw_stats->syncp);
@@ -876,10 +929,10 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -886,10 +939,10 @@ static int mtk_init_fq_dma(struct mtk_et
txd->txd4 = 0;
}
@@ -187,7 +187,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
}
@@ -1123,7 +1176,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1133,7 +1186,7 @@ static int mtk_tx_map(struct sk_buff *sk
if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
!netdev_xmit_more())
@@ -196,7 +196,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} else {
int next_idx;
@@ -1440,6 +1493,7 @@ rx_done:
@@ -1450,6 +1503,7 @@ rx_done:
static int mtk_poll_tx_qdma(struct mtk_eth *eth, int budget,
unsigned int *done, unsigned int *bytes)
{
@@ -204,7 +204,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_tx_ring *ring = &eth->tx_ring;
struct mtk_tx_dma *desc;
struct sk_buff *skb;
@@ -1447,7 +1501,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1457,7 +1511,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
u32 cpu, dma;
cpu = ring->last_free_ptr;
@@ -213,7 +213,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
desc = mtk_qdma_phys_to_virt(ring, cpu);
@@ -1482,7 +1536,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -1492,7 +1546,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
}
ring->last_free_ptr = cpu;
@@ -222,7 +222,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return budget;
}
@@ -1575,24 +1629,25 @@ static void mtk_handle_status_irq(struct
@@ -1585,24 +1639,25 @@ static void mtk_handle_status_irq(struct
static int mtk_napi_tx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, tx_napi);
@@ -252,7 +252,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return budget;
if (napi_complete_done(napi, tx_done))
@@ -1604,6 +1659,7 @@ static int mtk_napi_tx(struct napi_struc
@@ -1614,6 +1669,7 @@ static int mtk_napi_tx(struct napi_struc
static int mtk_napi_rx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, rx_napi);
@@ -260,7 +260,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int rx_done_total = 0;
mtk_handle_status_irq(eth);
@@ -1611,21 +1667,21 @@ static int mtk_napi_rx(struct napi_struc
@@ -1621,21 +1677,21 @@ static int mtk_napi_rx(struct napi_struc
do {
int rx_done;
@@ -286,7 +286,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (napi_complete_done(napi, rx_done_total))
mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);
@@ -1688,20 +1744,20 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1698,20 +1754,20 @@ static int mtk_tx_alloc(struct mtk_eth *
*/
wmb();
@@ -314,7 +314,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return 0;
@@ -1740,6 +1796,7 @@ static void mtk_tx_clean(struct mtk_eth
@@ -1750,6 +1806,7 @@ static void mtk_tx_clean(struct mtk_eth
static int mtk_rx_alloc(struct mtk_eth *eth, int ring_no, int rx_flag)
{
@@ -322,7 +322,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_rx_ring *ring;
int rx_data_len, rx_dma_size;
int i;
@@ -1808,16 +1865,18 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1818,16 +1875,18 @@ static int mtk_rx_alloc(struct mtk_eth *
ring->dma_size = rx_dma_size;
ring->calc_idx_update = false;
ring->calc_idx = rx_dma_size - 1;
@@ -345,7 +345,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
}
@@ -2129,9 +2188,9 @@ static int mtk_dma_busy_wait(struct mtk_
@@ -2139,9 +2198,9 @@ static int mtk_dma_busy_wait(struct mtk_
u32 val;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
@@ -357,7 +357,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ret = readx_poll_timeout_atomic(__raw_readl, eth->base + reg, val,
!(val & (MTK_RX_DMA_BUSY | MTK_TX_DMA_BUSY)),
@@ -2189,8 +2248,8 @@ static int mtk_dma_init(struct mtk_eth *
@@ -2199,8 +2258,8 @@ static int mtk_dma_init(struct mtk_eth *
* automatically
*/
mtk_w32(eth, FC_THRES_DROP_MODE | FC_THRES_DROP_EN |
@@ -368,7 +368,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return 0;
@@ -2264,13 +2323,14 @@ static irqreturn_t mtk_handle_irq_tx(int
@@ -2274,13 +2333,14 @@ static irqreturn_t mtk_handle_irq_tx(int
static irqreturn_t mtk_handle_irq(int irq, void *_eth)
{
struct mtk_eth *eth = _eth;
@@ -387,7 +387,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_handle_irq_tx(irq, _eth);
}
@@ -2294,6 +2354,7 @@ static void mtk_poll_controller(struct n
@@ -2304,6 +2364,7 @@ static void mtk_poll_controller(struct n
static int mtk_start_dma(struct mtk_eth *eth)
{
u32 rx_2b_offset = (NET_IP_ALIGN == 2) ? MTK_RX_2B_OFFSET : 0;
@@ -395,7 +395,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int err;
err = mtk_dma_init(eth);
@@ -2308,16 +2369,15 @@ static int mtk_start_dma(struct mtk_eth
@@ -2318,16 +2379,15 @@ static int mtk_start_dma(struct mtk_eth
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
MTK_RX_DMA_EN | MTK_RX_2B_OFFSET |
MTK_RX_BT_32DWORDS,
@@ -415,7 +415,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return 0;
@@ -2443,8 +2503,8 @@ static int mtk_stop(struct net_device *d
@@ -2453,8 +2513,8 @@ static int mtk_stop(struct net_device *d
cancel_work_sync(&eth->tx_dim.work);
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
@@ -426,7 +426,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_dma_free(eth);
@@ -2498,6 +2558,7 @@ static void mtk_dim_rx(struct work_struc
@@ -2508,6 +2568,7 @@ static void mtk_dim_rx(struct work_struc
{
struct dim *dim = container_of(work, struct dim, work);
struct mtk_eth *eth = container_of(dim, struct mtk_eth, rx_dim);
@@ -434,7 +434,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct dim_cq_moder cur_profile;
u32 val, cur;
@@ -2505,7 +2566,7 @@ static void mtk_dim_rx(struct work_struc
@@ -2515,7 +2576,7 @@ static void mtk_dim_rx(struct work_struc
dim->profile_ix);
spin_lock_bh(&eth->dim_lock);
@@ -443,7 +443,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
val &= MTK_PDMA_DELAY_TX_MASK;
val |= MTK_PDMA_DELAY_RX_EN;
@@ -2515,9 +2576,9 @@ static void mtk_dim_rx(struct work_struc
@@ -2525,9 +2586,9 @@ static void mtk_dim_rx(struct work_struc
cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
val |= cur << MTK_PDMA_DELAY_RX_PINT_SHIFT;
@@ -455,7 +455,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_bh(&eth->dim_lock);
@@ -2528,6 +2589,7 @@ static void mtk_dim_tx(struct work_struc
@@ -2538,6 +2599,7 @@ static void mtk_dim_tx(struct work_struc
{
struct dim *dim = container_of(work, struct dim, work);
struct mtk_eth *eth = container_of(dim, struct mtk_eth, tx_dim);
@@ -463,7 +463,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct dim_cq_moder cur_profile;
u32 val, cur;
@@ -2535,7 +2597,7 @@ static void mtk_dim_tx(struct work_struc
@@ -2545,7 +2607,7 @@ static void mtk_dim_tx(struct work_struc
dim->profile_ix);
spin_lock_bh(&eth->dim_lock);
@@ -472,7 +472,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
val &= MTK_PDMA_DELAY_RX_MASK;
val |= MTK_PDMA_DELAY_TX_EN;
@@ -2545,9 +2607,9 @@ static void mtk_dim_tx(struct work_struc
@@ -2555,9 +2617,9 @@ static void mtk_dim_tx(struct work_struc
cur = min_t(u32, cur_profile.pkts, MTK_PDMA_DELAY_PINT_MASK);
val |= cur << MTK_PDMA_DELAY_TX_PINT_SHIFT;
@@ -484,7 +484,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_unlock_bh(&eth->dim_lock);
@@ -2558,6 +2620,7 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2568,6 +2630,7 @@ static int mtk_hw_init(struct mtk_eth *e
{
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
ETHSYS_DMA_AG_MAP_PPE;
@@ -492,7 +492,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int i, val, ret;
if (test_and_set_bit(MTK_HW_INIT, &eth->state))
@@ -2632,10 +2695,10 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2642,10 +2705,10 @@ static int mtk_hw_init(struct mtk_eth *e
mtk_rx_irq_disable(eth, ~0);
/* FE int grouping */
@@ -507,7 +507,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
return 0;
@@ -3167,14 +3230,6 @@ static int mtk_probe(struct platform_dev
@@ -3177,14 +3240,6 @@ static int mtk_probe(struct platform_dev
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
@@ -522,7 +522,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
eth->rx_dma_l4_valid = RX_DMA_L4_VALID_PDMA;
eth->ip_align = NET_IP_ALIGN;
@@ -3408,6 +3463,7 @@ static int mtk_remove(struct platform_de
@@ -3418,6 +3473,7 @@ static int mtk_remove(struct platform_de
}
static const struct mtk_soc_data mt2701_data = {
@@ -530,7 +530,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.caps = MT7623_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
@@ -3419,6 +3475,7 @@ static const struct mtk_soc_data mt2701_
@@ -3429,6 +3485,7 @@ static const struct mtk_soc_data mt2701_
};
static const struct mtk_soc_data mt7621_data = {
@@ -538,7 +538,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.caps = MT7621_CAPS,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7621_CLKS_BITMAP,
@@ -3431,6 +3488,7 @@ static const struct mtk_soc_data mt7621_
@@ -3441,6 +3498,7 @@ static const struct mtk_soc_data mt7621_
};
static const struct mtk_soc_data mt7622_data = {
@@ -546,7 +546,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.ana_rgc3 = 0x2028,
.caps = MT7622_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
@@ -3444,6 +3502,7 @@ static const struct mtk_soc_data mt7622_
@@ -3454,6 +3512,7 @@ static const struct mtk_soc_data mt7622_
};
static const struct mtk_soc_data mt7623_data = {
@@ -554,7 +554,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.caps = MT7623_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7623_CLKS_BITMAP,
@@ -3456,6 +3515,7 @@ static const struct mtk_soc_data mt7623_
@@ -3466,6 +3525,7 @@ static const struct mtk_soc_data mt7623_
};
static const struct mtk_soc_data mt7629_data = {
@@ -562,7 +562,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.ana_rgc3 = 0x128,
.caps = MT7629_CAPS | MTK_HWLRO,
.hw_features = MTK_HW_FEATURES,
@@ -3468,6 +3528,7 @@ static const struct mtk_soc_data mt7629_
@@ -3478,6 +3538,7 @@ static const struct mtk_soc_data mt7629_
};
static const struct mtk_soc_data rt5350_data = {

View File

@@ -13,7 +13,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
@@ -863,8 +863,8 @@ static inline int mtk_max_buf_size(int f
@@ -873,8 +873,8 @@ static inline int mtk_max_buf_size(int f
return buf_size;
}
@@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
{
rxd->rxd2 = READ_ONCE(dma_rxd->rxd2);
if (!(rxd->rxd2 & RX_DMA_DONE))
@@ -873,6 +873,10 @@ static inline bool mtk_rx_get_desc(struc
@@ -883,6 +883,10 @@ static inline bool mtk_rx_get_desc(struc
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
@@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return true;
}
@@ -917,7 +921,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -927,7 +931,7 @@ static int mtk_init_fq_dma(struct mtk_et
phy_ring_tail = eth->phy_scratch_ring + soc->txrx.txd_size * (cnt - 1);
for (i = 0; i < cnt; i++) {
@@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd = (void *)eth->scratch_ring + i * soc->txrx.txd_size;
txd->txd1 = dma_addr + i * MTK_QDMA_PAGE_SIZE;
@@ -927,6 +931,12 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -937,6 +941,12 @@ static int mtk_init_fq_dma(struct mtk_et
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
txd->txd4 = 0;
@@ -57,7 +57,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
mtk_w32(eth, eth->phy_scratch_ring, soc->reg_map->qdma.fq_head);
@@ -1030,10 +1040,12 @@ static void setup_tx_buf(struct mtk_eth
@@ -1040,10 +1050,12 @@ static void setup_tx_buf(struct mtk_eth
}
}
@@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
u32 data;
WRITE_ONCE(desc->txd1, info->addr);
@@ -1057,6 +1069,59 @@ static void mtk_tx_set_dma_desc(struct n
@@ -1067,6 +1079,59 @@ static void mtk_tx_set_dma_desc(struct n
WRITE_ONCE(desc->txd4, data);
}
@@ -132,7 +132,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev,
int tx_num, struct mtk_tx_ring *ring, bool gso)
{
@@ -1065,6 +1130,7 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1075,6 +1140,7 @@ static int mtk_tx_map(struct sk_buff *sk
.gso = gso,
.csum = skb->ip_summed == CHECKSUM_PARTIAL,
.vlan = skb_vlan_tag_present(skb),
@@ -140,7 +140,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.vlan_tci = skb_vlan_tag_get(skb),
.first = true,
.last = !skb_is_nonlinear(skb),
@@ -1124,7 +1190,9 @@ static int mtk_tx_map(struct sk_buff *sk
@@ -1134,7 +1200,9 @@ static int mtk_tx_map(struct sk_buff *sk
}
memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
@@ -151,7 +151,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd_info.last = i == skb_shinfo(skb)->nr_frags - 1 &&
!(frag_size - txd_info.size);
txd_info.addr = skb_frag_dma_map(eth->dma_dev, frag,
@@ -1205,17 +1273,16 @@ err_dma:
@@ -1215,17 +1283,16 @@ err_dma:
return -ENOMEM;
}
@@ -172,7 +172,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
} else {
nfrags += skb_shinfo(skb)->nr_frags;
@@ -1267,7 +1334,7 @@ static netdev_tx_t mtk_start_xmit(struct
@@ -1277,7 +1344,7 @@ static netdev_tx_t mtk_start_xmit(struct
if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
goto drop;
@@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
netif_stop_queue(dev);
netif_err(eth, tx_queued, dev,
@@ -1359,7 +1426,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1369,7 +1436,7 @@ static int mtk_poll_rx(struct napi_struc
int idx;
struct sk_buff *skb;
u8 *data, *new_data;
@@ -190,7 +190,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int done = 0, bytes = 0;
while (done < budget) {
@@ -1367,7 +1434,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1377,7 +1444,7 @@ static int mtk_poll_rx(struct napi_struc
unsigned int pktlen;
dma_addr_t dma_addr;
u32 hash, reason;
@@ -199,7 +199,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring = mtk_get_rx_ring(eth);
if (unlikely(!ring))
@@ -1377,16 +1444,15 @@ static int mtk_poll_rx(struct napi_struc
@@ -1387,16 +1454,15 @@ static int mtk_poll_rx(struct napi_struc
rxd = (void *)ring->dma + idx * eth->soc->txrx.rxd_size;
data = ring->data[idx];
@@ -222,7 +222,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
!eth->netdev[mac]))
@@ -1432,7 +1498,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1442,7 +1508,7 @@ static int mtk_poll_rx(struct napi_struc
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
skb->dev = netdev;
skb_put(skb, pktlen);
@@ -231,7 +231,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
skb->ip_summed = CHECKSUM_UNNECESSARY;
else
skb_checksum_none_assert(skb);
@@ -1450,10 +1516,25 @@ static int mtk_poll_rx(struct napi_struc
@@ -1460,10 +1526,25 @@ static int mtk_poll_rx(struct napi_struc
mtk_ppe_check_skb(eth->ppe, skb,
trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
@@ -261,7 +261,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
skb_record_rx_queue(skb, 0);
napi_gro_receive(napi, skb);
@@ -1465,7 +1546,7 @@ release_desc:
@@ -1475,7 +1556,7 @@ release_desc:
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
else
@@ -270,7 +270,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->calc_idx = idx;
@@ -1667,7 +1748,8 @@ static int mtk_napi_rx(struct napi_struc
@@ -1677,7 +1758,8 @@ static int mtk_napi_rx(struct napi_struc
do {
int rx_done;
@@ -280,7 +280,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
rx_done_total += rx_done;
@@ -1681,10 +1763,11 @@ static int mtk_napi_rx(struct napi_struc
@@ -1691,10 +1773,11 @@ static int mtk_napi_rx(struct napi_struc
if (rx_done_total == budget)
return budget;
@@ -294,7 +294,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return rx_done_total;
}
@@ -1694,7 +1777,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1704,7 +1787,7 @@ static int mtk_tx_alloc(struct mtk_eth *
const struct mtk_soc_data *soc = eth->soc;
struct mtk_tx_ring *ring = &eth->tx_ring;
int i, sz = soc->txrx.txd_size;
@@ -303,7 +303,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->buf = kcalloc(MTK_DMA_SIZE, sizeof(*ring->buf),
GFP_KERNEL);
@@ -1714,13 +1797,19 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1724,13 +1807,19 @@ static int mtk_tx_alloc(struct mtk_eth *
txd->txd2 = next_ptr;
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
txd->txd4 = 0;
@@ -324,7 +324,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->dma_pdma = dma_alloc_coherent(eth->dma_dev, MTK_DMA_SIZE * sz,
&ring->phys_pdma, GFP_KERNEL);
if (!ring->dma_pdma)
@@ -1800,13 +1889,11 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1810,13 +1899,11 @@ static int mtk_rx_alloc(struct mtk_eth *
struct mtk_rx_ring *ring;
int rx_data_len, rx_dma_size;
int i;
@@ -338,7 +338,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} else {
ring = &eth->rx_ring[ring_no];
}
@@ -1842,7 +1929,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1852,7 +1939,7 @@ static int mtk_rx_alloc(struct mtk_eth *
return -ENOMEM;
for (i = 0; i < rx_dma_size; i++) {
@@ -347,7 +347,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
dma_addr_t dma_addr = dma_map_single(eth->dma_dev,
ring->data[i] + NET_SKB_PAD + eth->ip_align,
@@ -1857,26 +1944,47 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1867,26 +1954,47 @@ static int mtk_rx_alloc(struct mtk_eth *
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
else
@@ -403,7 +403,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
}
@@ -2301,7 +2409,7 @@ static irqreturn_t mtk_handle_irq_rx(int
@@ -2311,7 +2419,7 @@ static irqreturn_t mtk_handle_irq_rx(int
eth->rx_events++;
if (likely(napi_schedule_prep(&eth->rx_napi))) {
__napi_schedule(&eth->rx_napi);
@@ -412,7 +412,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
return IRQ_HANDLED;
@@ -2325,8 +2433,10 @@ static irqreturn_t mtk_handle_irq(int ir
@@ -2335,8 +2443,10 @@ static irqreturn_t mtk_handle_irq(int ir
struct mtk_eth *eth = _eth;
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
@@ -425,7 +425,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_handle_irq_rx(irq, _eth);
}
if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
@@ -2344,16 +2454,16 @@ static void mtk_poll_controller(struct n
@@ -2354,16 +2464,16 @@ static void mtk_poll_controller(struct n
struct mtk_eth *eth = mac->hw;
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
@@ -445,7 +445,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
int err;
@@ -2364,12 +2474,19 @@ static int mtk_start_dma(struct mtk_eth
@@ -2374,12 +2484,19 @@ static int mtk_start_dma(struct mtk_eth
}
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
@@ -471,7 +471,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
mtk_w32(eth,
MTK_RX_DMA_EN | rx_2b_offset |
MTK_RX_BT_32DWORDS | MTK_MULTI_EN,
@@ -2443,7 +2560,7 @@ static int mtk_open(struct net_device *d
@@ -2453,7 +2570,7 @@ static int mtk_open(struct net_device *d
napi_enable(&eth->tx_napi);
napi_enable(&eth->rx_napi);
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
@@ -480,7 +480,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
refcount_set(&eth->dma_refcnt, 1);
}
else
@@ -2495,7 +2612,7 @@ static int mtk_stop(struct net_device *d
@@ -2505,7 +2622,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);
@@ -489,7 +489,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
napi_disable(&eth->tx_napi);
napi_disable(&eth->rx_napi);
@@ -2655,9 +2772,25 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2665,9 +2782,25 @@ static int mtk_hw_init(struct mtk_eth *e
return 0;
}
@@ -518,7 +518,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (eth->pctl) {
/* Set GE2 driving and slew rate */
@@ -2696,11 +2829,47 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -2706,11 +2839,47 @@ static int mtk_hw_init(struct mtk_eth *e
/* FE int grouping */
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
@@ -568,7 +568,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return 0;
err_disable_pm:
@@ -3230,12 +3399,8 @@ static int mtk_probe(struct platform_dev
@@ -3240,12 +3409,8 @@ static int mtk_probe(struct platform_dev
if (IS_ERR(eth->base))
return PTR_ERR(eth->base);
@@ -582,7 +582,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
spin_lock_init(&eth->page_lock);
spin_lock_init(&eth->tx_irq_lock);
@@ -3471,6 +3636,10 @@ static const struct mtk_soc_data mt2701_
@@ -3481,6 +3646,10 @@ static const struct mtk_soc_data mt2701_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -593,7 +593,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3484,6 +3653,10 @@ static const struct mtk_soc_data mt7621_
@@ -3494,6 +3663,10 @@ static const struct mtk_soc_data mt7621_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -604,7 +604,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3498,6 +3671,10 @@ static const struct mtk_soc_data mt7622_
@@ -3508,6 +3681,10 @@ static const struct mtk_soc_data mt7622_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -615,7 +615,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3511,6 +3688,10 @@ static const struct mtk_soc_data mt7623_
@@ -3521,6 +3698,10 @@ static const struct mtk_soc_data mt7623_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -626,7 +626,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3524,6 +3705,10 @@ static const struct mtk_soc_data mt7629_
@@ -3534,6 +3715,10 @@ static const struct mtk_soc_data mt7629_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
@@ -637,7 +637,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -3536,6 +3721,10 @@ static const struct mtk_soc_data rt5350_
@@ -3546,6 +3731,10 @@ static const struct mtk_soc_data rt5350_
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),

View File

@@ -10,7 +10,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
@@ -947,18 +947,15 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -957,18 +957,15 @@ static int mtk_init_fq_dma(struct mtk_et
return 0;
}
@@ -33,7 +33,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return &ring->buf[idx];
}
@@ -966,13 +963,12 @@ static struct mtk_tx_buf *mtk_desc_to_tx
@@ -976,13 +973,12 @@ static struct mtk_tx_buf *mtk_desc_to_tx
static struct mtk_tx_dma *qdma_to_pdma(struct mtk_tx_ring *ring,
struct mtk_tx_dma *dma)
{
@@ -50,7 +50,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
static void mtk_tx_unmap(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
@@ -1389,7 +1385,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
@@ -1399,7 +1395,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
ring = &eth->rx_ring[i];
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@@ -59,7 +59,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (rxd->rxd2 & RX_DMA_DONE) {
ring->calc_idx_update = true;
return ring;
@@ -1441,7 +1437,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -1451,7 +1447,7 @@ static int mtk_poll_rx(struct napi_struc
goto rx_done;
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@@ -68,7 +68,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
data = ring->data[idx];
if (!mtk_rx_get_desc(eth, &trxd, rxd))
@@ -1648,7 +1644,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -1658,7 +1654,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
mtk_tx_unmap(eth, tx_buf, true);
@@ -77,7 +77,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->last_free = desc;
atomic_inc(&ring->free_count);
@@ -1793,7 +1789,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1803,7 +1799,7 @@ static int mtk_tx_alloc(struct mtk_eth *
int next = (i + 1) % MTK_DMA_SIZE;
u32 next_ptr = ring->phys + next * sz;
@@ -86,7 +86,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
txd->txd2 = next_ptr;
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
txd->txd4 = 0;
@@ -1823,7 +1819,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -1833,7 +1829,7 @@ static int mtk_tx_alloc(struct mtk_eth *
ring->dma_size = MTK_DMA_SIZE;
atomic_set(&ring->free_count, MTK_DMA_SIZE - 2);
@@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->last_free = (void *)txd;
ring->last_free_ptr = (u32)(ring->phys + ((MTK_DMA_SIZE - 1) * sz));
ring->thresh = MAX_SKB_FRAGS;
@@ -1938,7 +1934,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1948,7 +1944,7 @@ static int mtk_rx_alloc(struct mtk_eth *
if (unlikely(dma_mapping_error(eth->dma_dev, dma_addr)))
return -ENOMEM;
@@ -104,7 +104,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
rxd->rxd1 = (unsigned int)dma_addr;
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
@@ -2000,7 +1996,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -2010,7 +2006,7 @@ static void mtk_rx_clean(struct mtk_eth
if (!ring->data[i])
continue;

View File

@@ -11,7 +11,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
@@ -923,7 +923,7 @@ static int mtk_init_fq_dma(struct mtk_et
@@ -933,7 +933,7 @@ static int mtk_init_fq_dma(struct mtk_et
for (i = 0; i < cnt; i++) {
struct mtk_tx_dma_v2 *txd;

View File

@@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
@@ -3708,6 +3745,21 @@ static const struct mtk_soc_data mt7629_
@@ -3718,6 +3755,21 @@ static const struct mtk_soc_data mt7629_
},
};
@@ -87,7 +87,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static const struct mtk_soc_data rt5350_data = {
.reg_map = &mt7628_reg_map,
.caps = MT7628_CAPS,
@@ -3730,6 +3782,7 @@ const struct of_device_id of_mtk_match[]
@@ -3740,6 +3792,7 @@ const struct of_device_id of_mtk_match[]
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},

View File

@@ -12,7 +12,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1463,8 +1463,8 @@ static int mtk_poll_rx(struct napi_struc
@@ -1473,8 +1473,8 @@ static int mtk_poll_rx(struct napi_struc
int done = 0, bytes = 0;
while (done < budget) {
@@ -22,7 +22,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
dma_addr_t dma_addr;
u32 hash, reason;
int mac = 0;
@@ -1531,7 +1531,13 @@ static int mtk_poll_rx(struct napi_struc
@@ -1541,7 +1541,13 @@ static int mtk_poll_rx(struct napi_struc
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
skb->dev = netdev;
skb_put(skb, pktlen);
@@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
skb->ip_summed = CHECKSUM_UNNECESSARY;
else
skb_checksum_none_assert(skb);
@@ -3755,6 +3761,7 @@ static const struct mtk_soc_data mt7986_
@@ -3765,6 +3771,7 @@ static const struct mtk_soc_data mt7986_
.txd_size = sizeof(struct mtk_tx_dma_v2),
.rxd_size = sizeof(struct mtk_rx_dma_v2),
.rx_irq_done_mask = MTK_RX_DONE_INT_V2,

View File

@@ -14,7 +14,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
@@ -3351,6 +3351,26 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3361,6 +3361,26 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;

View File

@@ -16,7 +16,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
@@ -568,24 +568,8 @@ static void mtk_validate(struct phylink_
@@ -577,24 +577,8 @@ static void mtk_validate(struct phylink_
unsigned long *supported,
struct phylink_link_state *state)
{
@@ -41,7 +41,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
phylink_set_port_modes(mask);
phylink_set(mask, Autoneg);
@@ -612,7 +596,6 @@ static void mtk_validate(struct phylink_
@@ -621,7 +605,6 @@ static void mtk_validate(struct phylink_
case PHY_INTERFACE_MODE_MII:
case PHY_INTERFACE_MODE_RMII:
case PHY_INTERFACE_MODE_REVMII:
@@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
default:
phylink_set(mask, 10baseT_Half);
phylink_set(mask, 10baseT_Full);
@@ -621,23 +604,6 @@ static void mtk_validate(struct phylink_
@@ -630,23 +613,6 @@ static void mtk_validate(struct phylink_
break;
}

View File

@@ -17,7 +17,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
@@ -578,8 +578,9 @@ static void mtk_validate(struct phylink_
@@ -587,8 +587,9 @@ static void mtk_validate(struct phylink_
phylink_set(mask, 1000baseT_Full);
break;
case PHY_INTERFACE_MODE_1000BASEX:
@@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
phylink_set(mask, 2500baseX_Full);
break;
case PHY_INTERFACE_MODE_GMII:
@@ -609,11 +610,6 @@ static void mtk_validate(struct phylink_
@@ -618,11 +619,6 @@ static void mtk_validate(struct phylink_
linkmode_and(supported, supported, mask);
linkmode_and(state->advertising, state->advertising, mask);

View File

@@ -14,7 +14,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
@@ -564,56 +564,8 @@ static void mtk_mac_link_up(struct phyli
@@ -573,56 +573,8 @@ static void mtk_mac_link_up(struct phyli
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
}
@@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.mac_pcs_get_state = mtk_mac_pcs_get_state,
.mac_an_restart = mtk_mac_an_restart,
.mac_config = mtk_mac_config,
@@ -3313,6 +3265,9 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3323,6 +3275,9 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;

View File

@@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3265,6 +3265,10 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3275,6 +3275,10 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;

View File

@@ -16,7 +16,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
@@ -3564,9 +3564,9 @@ static int mtk_probe(struct platform_dev
@@ -3574,9 +3574,9 @@ static int mtk_probe(struct platform_dev
*/
init_dummy_netdev(&eth->dummy_dev);
netif_napi_add(&eth->dummy_dev, &eth->tx_napi, mtk_napi_tx,

View File

@@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3260,7 +3260,6 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3270,7 +3270,6 @@ static int mtk_add_mac(struct mtk_eth *e
/* mac config is not set */
mac->interface = PHY_INTERFACE_MODE_NA;

View File

@@ -18,7 +18,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -533,8 +533,18 @@ static void mtk_mac_link_up(struct phyli
@@ -542,8 +542,18 @@ static void mtk_mac_link_up(struct phyli
{
struct mtk_mac *mac = container_of(config, struct mtk_mac,
phylink_config);
@@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
MAC_MCR_FORCE_RX_FC);
@@ -3264,9 +3274,7 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -3274,9 +3284,7 @@ static int mtk_add_mac(struct mtk_eth *e
mac->phylink_config.dev = &eth->netdev[id]->dev;
mac->phylink_config.type = PHYLINK_NETDEV;

View File

@@ -1,79 +0,0 @@
From 0e37ad71b2ff772009595002da2860999e98e14e Mon Sep 17 00:00:00 2001
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
Date: Wed, 18 May 2022 15:55:12 +0100
Subject: [PATCH 09/12] net: mtk_eth_soc: move MAC_MCR setting to mac_finish()
Move the setting of the MTK_MAC_MCR register from the end of mac_config
into the phylink mac_finish() method, to keep it as the very last write
that is done during configuration.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 33 ++++++++++++++-------
1 file changed, 22 insertions(+), 11 deletions(-)
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -316,8 +316,8 @@ static void mtk_mac_config(struct phylin
struct mtk_mac *mac = container_of(config, struct mtk_mac,
phylink_config);
struct mtk_eth *eth = mac->hw;
- u32 mcr_cur, mcr_new, sid, i;
int val, ge_mode, err = 0;
+ u32 sid, i;
/* MT76x8 has no hardware settings between for the MAC */
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
@@ -455,6 +455,25 @@ static void mtk_mac_config(struct phylin
return;
}
+ return;
+
+err_phy:
+ dev_err(eth->dev, "%s: GMAC%d mode %s not supported!\n", __func__,
+ mac->id, phy_modes(state->interface));
+ return;
+
+init_err:
+ dev_err(eth->dev, "%s: GMAC%d mode %s err: %d!\n", __func__,
+ mac->id, phy_modes(state->interface), err);
+}
+
+static int mtk_mac_finish(struct phylink_config *config, unsigned int mode,
+ phy_interface_t interface)
+{
+ struct mtk_mac *mac = container_of(config, struct mtk_mac,
+ phylink_config);
+ u32 mcr_cur, mcr_new;
+
/* Setup gmac */
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr_new = mcr_cur;
@@ -466,16 +485,7 @@ static void mtk_mac_config(struct phylin
if (mcr_new != mcr_cur)
mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
- return;
-
-err_phy:
- dev_err(eth->dev, "%s: GMAC%d mode %s not supported!\n", __func__,
- mac->id, phy_modes(state->interface));
- return;
-
-init_err:
- dev_err(eth->dev, "%s: GMAC%d mode %s err: %d!\n", __func__,
- mac->id, phy_modes(state->interface), err);
+ return 0;
}
static void mtk_mac_pcs_get_state(struct phylink_config *config,
@@ -582,6 +592,7 @@ static const struct phylink_mac_ops mtk_
.mac_pcs_get_state = mtk_mac_pcs_get_state,
.mac_an_restart = mtk_mac_an_restart,
.mac_config = mtk_mac_config,
+ .mac_finish = mtk_mac_finish,
.mac_link_down = mtk_mac_link_down,
.mac_link_up = mtk_mac_link_up,
};

View File

@@ -69,7 +69,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* Save the syscfg0 value for mac_finish */
mac->syscfg0 = val;
} else if (phylink_autoneg_inband(mode)) {
@@ -527,14 +537,6 @@ static void mtk_mac_pcs_get_state(struct
@@ -526,14 +536,6 @@ static void mtk_mac_pcs_get_state(struct
state->pause |= MLO_PAUSE_TX;
}
@@ -84,7 +84,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
static void mtk_mac_link_down(struct phylink_config *config, unsigned int mode,
phy_interface_t interface)
{
@@ -555,15 +557,6 @@ static void mtk_mac_link_up(struct phyli
@@ -554,15 +556,6 @@ static void mtk_mac_link_up(struct phyli
phylink_config);
u32 mcr;
@@ -100,7 +100,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
@@ -596,8 +589,8 @@ static void mtk_mac_link_up(struct phyli
@@ -595,8 +588,8 @@ static void mtk_mac_link_up(struct phyli
static const struct phylink_mac_ops mtk_phylink_ops = {
.validate = phylink_generic_validate,

View File

@@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1198,27 +1198,31 @@ static int
@@ -1243,27 +1243,31 @@ static int
mt7530_port_bridge_join(struct dsa_switch *ds, int port,
struct net_device *bridge)
{
@@ -65,7 +65,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
/* Add the all other ports to this port matrix. */
@@ -1323,24 +1327,28 @@ static void
@@ -1368,24 +1372,28 @@ static void
mt7530_port_bridge_leave(struct dsa_switch *ds, int port,
struct net_device *bridge)
{

View File

@@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2454,6 +2454,32 @@ mt7531_setup(struct dsa_switch *ds)
@@ -2499,6 +2499,32 @@ mt7531_setup(struct dsa_switch *ds)
return 0;
}
@@ -56,7 +56,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static bool
mt7530_phy_mode_supported(struct dsa_switch *ds, int port,
const struct phylink_link_state *state)
@@ -2490,6 +2516,37 @@ static bool mt7531_is_rgmii_port(struct
@@ -2535,6 +2561,37 @@ static bool mt7531_is_rgmii_port(struct
return (port == 5) && (priv->p5_intf_sel != P5_INTF_SEL_GMAC5_SGMII);
}
@@ -94,7 +94,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static bool
mt7531_phy_mode_supported(struct dsa_switch *ds, int port,
const struct phylink_link_state *state)
@@ -2966,6 +3023,18 @@ mt7531_cpu_port_config(struct dsa_switch
@@ -3011,6 +3068,18 @@ mt7531_cpu_port_config(struct dsa_switch
return 0;
}
@@ -113,7 +113,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void
mt7530_mac_port_validate(struct dsa_switch *ds, int port,
unsigned long *supported)
@@ -3201,6 +3270,7 @@ static const struct dsa_switch_ops mt753
@@ -3246,6 +3315,7 @@ static const struct dsa_switch_ops mt753
.port_vlan_del = mt7530_port_vlan_del,
.port_mirror_add = mt753x_port_mirror_add,
.port_mirror_del = mt753x_port_mirror_del,
@@ -121,7 +121,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phylink_validate = mt753x_phylink_validate,
.phylink_mac_link_state = mt753x_phylink_mac_link_state,
.phylink_mac_config = mt753x_phylink_mac_config,
@@ -3218,6 +3288,7 @@ static const struct mt753x_info mt753x_t
@@ -3263,6 +3333,7 @@ static const struct mt753x_info mt753x_t
.phy_read = mt7530_phy_read,
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
@@ -129,7 +129,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phy_mode_supported = mt7530_phy_mode_supported,
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
@@ -3229,6 +3300,7 @@ static const struct mt753x_info mt753x_t
@@ -3274,6 +3345,7 @@ static const struct mt753x_info mt753x_t
.phy_read = mt7530_phy_read,
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
@@ -137,7 +137,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phy_mode_supported = mt7530_phy_mode_supported,
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
@@ -3241,6 +3313,7 @@ static const struct mt753x_info mt753x_t
@@ -3286,6 +3358,7 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7531_ind_phy_write,
.pad_setup = mt7531_pad_setup,
.cpu_port_config = mt7531_cpu_port_config,
@@ -145,7 +145,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phy_mode_supported = mt7531_phy_mode_supported,
.mac_port_validate = mt7531_mac_port_validate,
.mac_port_get_state = mt7531_phylink_mac_link_state,
@@ -3303,6 +3376,7 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3348,6 +3421,7 @@ mt7530_probe(struct mdio_device *mdiodev
*/
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||
@@ -155,7 +155,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
!priv->info->mac_port_get_state || !priv->info->mac_port_config)
--- a/drivers/net/dsa/mt7530.h
+++ b/drivers/net/dsa/mt7530.h
@@ -769,6 +769,8 @@ struct mt753x_info {
@@ -796,6 +796,8 @@ struct mt753x_info {
int (*phy_write)(struct mt7530_priv *priv, int port, int regnum, u16 val);
int (*pad_setup)(struct dsa_switch *ds, phy_interface_t interface);
int (*cpu_port_config)(struct dsa_switch *ds, int port);

View File

@@ -21,7 +21,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2480,37 +2480,6 @@ static void mt7530_mac_port_get_caps(str
@@ -2525,37 +2525,6 @@ static void mt7530_mac_port_get_caps(str
}
}
@@ -59,7 +59,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static bool mt7531_is_rgmii_port(struct mt7530_priv *priv, u32 port)
{
return (port == 5) && (priv->p5_intf_sel != P5_INTF_SEL_GMAC5_SGMII);
@@ -2547,44 +2516,6 @@ static void mt7531_mac_port_get_caps(str
@@ -2592,44 +2561,6 @@ static void mt7531_mac_port_get_caps(str
}
}
@@ -104,7 +104,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static int
mt753x_pad_setup(struct dsa_switch *ds, const struct phylink_link_state *state)
{
@@ -2839,9 +2770,6 @@ mt753x_phylink_mac_config(struct dsa_swi
@@ -2884,9 +2815,6 @@ mt753x_phylink_mac_config(struct dsa_swi
struct mt7530_priv *priv = ds->priv;
u32 mcr_cur, mcr_new;
@@ -114,7 +114,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
switch (port) {
case 0 ... 4: /* Internal phy */
if (state->interface != PHY_INTERFACE_MODE_GMII)
@@ -3057,12 +2985,6 @@ mt753x_phylink_validate(struct dsa_switc
@@ -3102,12 +3030,6 @@ mt753x_phylink_validate(struct dsa_switc
__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
struct mt7530_priv *priv = ds->priv;
@@ -127,7 +127,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
phylink_set_port_modes(mask);
if (state->interface != PHY_INTERFACE_MODE_TRGMII &&
@@ -3289,7 +3211,6 @@ static const struct mt753x_info mt753x_t
@@ -3334,7 +3256,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@@ -135,7 +135,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
@@ -3301,7 +3222,6 @@ static const struct mt753x_info mt753x_t
@@ -3346,7 +3267,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@@ -143,7 +143,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_validate = mt7530_mac_port_validate,
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
@@ -3314,7 +3234,6 @@ static const struct mt753x_info mt753x_t
@@ -3359,7 +3279,6 @@ static const struct mt753x_info mt753x_t
.pad_setup = mt7531_pad_setup,
.cpu_port_config = mt7531_cpu_port_config,
.mac_port_get_caps = mt7531_mac_port_get_caps,
@@ -151,7 +151,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_validate = mt7531_mac_port_validate,
.mac_port_get_state = mt7531_phylink_mac_link_state,
.mac_port_config = mt7531_mac_config,
@@ -3377,7 +3296,6 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3422,7 +3341,6 @@ mt7530_probe(struct mdio_device *mdiodev
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||
!priv->info->mac_port_get_caps ||
@@ -161,7 +161,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
return -EINVAL;
--- a/drivers/net/dsa/mt7530.h
+++ b/drivers/net/dsa/mt7530.h
@@ -771,8 +771,6 @@ struct mt753x_info {
@@ -798,8 +798,6 @@ struct mt753x_info {
int (*cpu_port_config)(struct dsa_switch *ds, int port);
void (*mac_port_get_caps)(struct dsa_switch *ds, int port,
struct phylink_config *config);

View File

@@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -3009,11 +3009,6 @@ mt753x_phylink_validate(struct dsa_switc
@@ -3054,11 +3054,6 @@ mt753x_phylink_validate(struct dsa_switc
linkmode_and(supported, supported, mask);
linkmode_and(state->advertising, state->advertising, mask);

View File

@@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2587,12 +2587,13 @@ static int mt7531_rgmii_setup(struct mt7
@@ -2632,12 +2632,13 @@ static int mt7531_rgmii_setup(struct mt7
}
static void mt7531_sgmii_validate(struct mt7530_priv *priv, int port,
@@ -38,7 +38,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
phylink_set(supported, 2500baseX_Full);
phylink_set(supported, 2500baseT_Full);
}
@@ -2965,16 +2966,18 @@ static void mt753x_phylink_get_caps(stru
@@ -3010,16 +3011,18 @@ static void mt753x_phylink_get_caps(stru
static void
mt7530_mac_port_validate(struct dsa_switch *ds, int port,
@@ -58,7 +58,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static void
@@ -2997,12 +3000,13 @@ mt753x_phylink_validate(struct dsa_switc
@@ -3042,12 +3045,13 @@ mt753x_phylink_validate(struct dsa_switc
}
/* This switch only supports 1G full-duplex. */
@@ -76,7 +76,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
phylink_set(mask, Asym_Pause);
--- a/drivers/net/dsa/mt7530.h
+++ b/drivers/net/dsa/mt7530.h
@@ -772,6 +772,7 @@ struct mt753x_info {
@@ -799,6 +799,7 @@ struct mt753x_info {
void (*mac_port_get_caps)(struct dsa_switch *ds, int port,
struct phylink_config *config);
void (*mac_port_validate)(struct dsa_switch *ds, int port,

View File

@@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2586,19 +2586,6 @@ static int mt7531_rgmii_setup(struct mt7
@@ -2631,19 +2631,6 @@ static int mt7531_rgmii_setup(struct mt7
return 0;
}
@@ -40,7 +40,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void
mt7531_sgmii_link_up_force(struct dsa_switch *ds, int port,
unsigned int mode, phy_interface_t interface,
@@ -2965,51 +2952,21 @@ static void mt753x_phylink_get_caps(stru
@@ -3010,51 +2997,21 @@ static void mt753x_phylink_get_caps(stru
}
static void
@@ -97,7 +97,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
linkmode_and(supported, supported, mask);
linkmode_and(state->advertising, state->advertising, mask);
@@ -3210,7 +3167,6 @@ static const struct mt753x_info mt753x_t
@@ -3255,7 +3212,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@@ -105,7 +105,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
},
@@ -3221,7 +3177,6 @@ static const struct mt753x_info mt753x_t
@@ -3266,7 +3222,6 @@ static const struct mt753x_info mt753x_t
.phy_write = mt7530_phy_write,
.pad_setup = mt7530_pad_clk_setup,
.mac_port_get_caps = mt7530_mac_port_get_caps,
@@ -113,7 +113,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_get_state = mt7530_phylink_mac_link_state,
.mac_port_config = mt7530_mac_config,
},
@@ -3233,7 +3188,6 @@ static const struct mt753x_info mt753x_t
@@ -3278,7 +3233,6 @@ static const struct mt753x_info mt753x_t
.pad_setup = mt7531_pad_setup,
.cpu_port_config = mt7531_cpu_port_config,
.mac_port_get_caps = mt7531_mac_port_get_caps,
@@ -121,7 +121,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.mac_port_get_state = mt7531_phylink_mac_link_state,
.mac_port_config = mt7531_mac_config,
.mac_pcs_an_restart = mt7531_sgmii_restart_an,
@@ -3295,7 +3249,6 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3340,7 +3294,6 @@ mt7530_probe(struct mdio_device *mdiodev
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||
!priv->info->mac_port_get_caps ||

View File

@@ -21,7 +21,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -24,6 +24,11 @@
@@ -25,6 +25,11 @@
#include "mt7530.h"
@@ -33,7 +33,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
/* String, offset, and register size in bytes if different from 4 bytes */
static const struct mt7530_mib_desc mt7530_mib[] = {
MIB_DESC(1, 0x00, "TxDrop"),
@@ -2586,12 +2591,11 @@ static int mt7531_rgmii_setup(struct mt7
@@ -2631,12 +2636,11 @@ static int mt7531_rgmii_setup(struct mt7
return 0;
}
@@ -50,7 +50,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
unsigned int val;
/* For adjusting speed and duplex of SGMII force mode. */
@@ -2617,6 +2621,9 @@ mt7531_sgmii_link_up_force(struct dsa_sw
@@ -2662,6 +2666,9 @@ mt7531_sgmii_link_up_force(struct dsa_sw
/* MT7531 SGMII 1G force mode can only work in full duplex mode,
* no matter MT7531_SGMII_FORCE_HALF_DUPLEX is set or not.
@@ -60,7 +60,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
*/
if ((speed == SPEED_10 || speed == SPEED_100) &&
duplex != DUPLEX_FULL)
@@ -2692,9 +2699,10 @@ static int mt7531_sgmii_setup_mode_an(st
@@ -2737,9 +2744,10 @@ static int mt7531_sgmii_setup_mode_an(st
return 0;
}
@@ -73,7 +73,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
u32 val;
/* Only restart AN when AN is enabled */
@@ -2751,6 +2759,24 @@ mt753x_mac_config(struct dsa_switch *ds,
@@ -2796,6 +2804,24 @@ mt753x_mac_config(struct dsa_switch *ds,
return priv->info->mac_port_config(ds, port, mode, state->interface);
}
@@ -98,7 +98,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void
mt753x_phylink_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
const struct phylink_link_state *state)
@@ -2812,17 +2838,6 @@ unsupported:
@@ -2857,17 +2883,6 @@ unsupported:
mt7530_write(priv, MT7530_PMCR_P(port), mcr_new);
}
@@ -116,7 +116,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
static void mt753x_phylink_mac_link_down(struct dsa_switch *ds, int port,
unsigned int mode,
phy_interface_t interface)
@@ -2832,16 +2847,13 @@ static void mt753x_phylink_mac_link_down
@@ -2877,16 +2892,13 @@ static void mt753x_phylink_mac_link_down
mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK);
}
@@ -139,7 +139,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static void mt753x_phylink_mac_link_up(struct dsa_switch *ds, int port,
@@ -2854,8 +2866,6 @@ static void mt753x_phylink_mac_link_up(s
@@ -2899,8 +2911,6 @@ static void mt753x_phylink_mac_link_up(s
struct mt7530_priv *priv = ds->priv;
u32 mcr;
@@ -148,7 +148,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
mcr = PMCR_RX_EN | PMCR_TX_EN | PMCR_FORCE_LNK;
/* MT753x MAC works in 1G full duplex mode for all up-clocked
@@ -2933,6 +2943,8 @@ mt7531_cpu_port_config(struct dsa_switch
@@ -2978,6 +2988,8 @@ mt7531_cpu_port_config(struct dsa_switch
return ret;
mt7530_write(priv, MT7530_PMCR_P(port),
PMCR_CPU_PORT_SETTING(priv->id));
@@ -157,7 +157,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL,
speed, DUPLEX_FULL, true, true);
@@ -2972,16 +2984,13 @@ mt753x_phylink_validate(struct dsa_switc
@@ -3017,16 +3029,13 @@ mt753x_phylink_validate(struct dsa_switc
linkmode_and(state->advertising, state->advertising, mask);
}
@@ -178,7 +178,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
pmsr = mt7530_read(priv, MT7530_PMSR_P(port));
state->link = (pmsr & PMSR_LINK);
@@ -3008,8 +3017,6 @@ mt7530_phylink_mac_link_state(struct dsa
@@ -3053,8 +3062,6 @@ mt7530_phylink_mac_link_state(struct dsa
state->pause |= MLO_PAUSE_RX;
if (pmsr & PMSR_TX_FC)
state->pause |= MLO_PAUSE_TX;
@@ -187,7 +187,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static int
@@ -3051,32 +3058,49 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
@@ -3096,32 +3103,49 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
return 0;
}
@@ -249,7 +249,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
if (ret)
return ret;
@@ -3089,6 +3113,13 @@ mt753x_setup(struct dsa_switch *ds)
@@ -3134,6 +3158,13 @@ mt753x_setup(struct dsa_switch *ds)
if (ret && priv->irq)
mt7530_free_irq_common(priv);
@@ -263,7 +263,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
return ret;
}
@@ -3150,9 +3181,8 @@ static const struct dsa_switch_ops mt753
@@ -3195,9 +3226,8 @@ static const struct dsa_switch_ops mt753
.port_mirror_del = mt753x_port_mirror_del,
.phylink_get_caps = mt753x_phylink_get_caps,
.phylink_validate = mt753x_phylink_validate,
@@ -274,7 +274,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.phylink_mac_link_down = mt753x_phylink_mac_link_down,
.phylink_mac_link_up = mt753x_phylink_mac_link_up,
.get_mac_eee = mt753x_get_mac_eee,
@@ -3162,36 +3192,34 @@ static const struct dsa_switch_ops mt753
@@ -3207,36 +3237,34 @@ static const struct dsa_switch_ops mt753
static const struct mt753x_info mt753x_table[] = {
[ID_MT7621] = {
.id = ID_MT7621,
@@ -314,7 +314,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
},
};
@@ -3249,7 +3277,7 @@ mt7530_probe(struct mdio_device *mdiodev
@@ -3294,7 +3322,7 @@ mt7530_probe(struct mdio_device *mdiodev
if (!priv->info->sw_setup || !priv->info->pad_setup ||
!priv->info->phy_read || !priv->info->phy_write ||
!priv->info->mac_port_get_caps ||
@@ -325,7 +325,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
priv->id = priv->info->id;
--- a/drivers/net/dsa/mt7530.h
+++ b/drivers/net/dsa/mt7530.h
@@ -741,6 +741,12 @@ static const char *p5_intf_modes(unsigne
@@ -768,6 +768,12 @@ static const char *p5_intf_modes(unsigne
struct mt7530_priv;
@@ -338,7 +338,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
/* struct mt753x_info - This is the main data structure for holding the specific
* part for each supported device
* @sw_setup: Holding the handler to a device initialization
@@ -752,18 +758,14 @@ struct mt7530_priv;
@@ -779,18 +785,14 @@ struct mt7530_priv;
* port
* @mac_port_validate: Holding the way to set addition validate type for a
* certan MAC port
@@ -359,7 +359,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
int (*sw_setup)(struct dsa_switch *ds);
int (*phy_read)(struct mt7530_priv *priv, int port, int regnum);
int (*phy_write)(struct mt7530_priv *priv, int port, int regnum, u16 val);
@@ -774,15 +776,9 @@ struct mt753x_info {
@@ -801,15 +803,9 @@ struct mt753x_info {
void (*mac_port_validate)(struct dsa_switch *ds, int port,
phy_interface_t interface,
unsigned long *supported);
@@ -375,7 +375,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
};
/* struct mt7530_priv - This is the main data structure for holding the state
@@ -824,6 +820,7 @@ struct mt7530_priv {
@@ -851,6 +847,7 @@ struct mt7530_priv {
u8 mirror_tx;
struct mt7530_port ports[MT7530_NUM_PORTS];

View File

@@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2963,25 +2963,16 @@ static void mt753x_phylink_get_caps(stru
@@ -3008,25 +3008,16 @@ static void mt753x_phylink_get_caps(stru
priv->info->mac_port_get_caps(ds, port, config);
}
@@ -55,7 +55,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
}
static void mt7530_pcs_get_state(struct phylink_pcs *pcs,
@@ -3083,12 +3074,14 @@ static void mt7530_pcs_an_restart(struct
@@ -3128,12 +3119,14 @@ static void mt7530_pcs_an_restart(struct
}
static const struct phylink_pcs_ops mt7530_pcs_ops = {
@@ -70,7 +70,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
.pcs_get_state = mt7531_pcs_get_state,
.pcs_config = mt753x_pcs_config,
.pcs_an_restart = mt7531_pcs_an_restart,
@@ -3180,7 +3173,6 @@ static const struct dsa_switch_ops mt753
@@ -3225,7 +3218,6 @@ static const struct dsa_switch_ops mt753
.port_mirror_add = mt753x_port_mirror_add,
.port_mirror_del = mt753x_port_mirror_del,
.phylink_get_caps = mt753x_phylink_get_caps,

View File

@@ -19,7 +19,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -2960,6 +2960,12 @@ static void mt753x_phylink_get_caps(stru
@@ -3005,6 +3005,12 @@ static void mt753x_phylink_get_caps(stru
config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
MAC_10 | MAC_100 | MAC_1000FD;

View File

@@ -81,7 +81,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -3098,9 +3098,16 @@ static int
@@ -3143,9 +3143,16 @@ static int
mt753x_setup(struct dsa_switch *ds)
{
struct mt7530_priv *priv = ds->priv;
@@ -100,7 +100,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (ret)
return ret;
@@ -3112,13 +3119,6 @@ mt753x_setup(struct dsa_switch *ds)
@@ -3157,13 +3164,6 @@ mt753x_setup(struct dsa_switch *ds)
if (ret && priv->irq)
mt7530_free_irq_common(priv);

View File

@@ -26,7 +26,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1544,11 +1544,11 @@ static void
@@ -1589,11 +1589,11 @@ static void
mt7530_hw_vlan_add(struct mt7530_priv *priv,
struct mt7530_hw_vlan_entry *entry)
{
@@ -40,7 +40,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* Validate the entry with independent learning, create egress tag per
* VLAN and joining the port as one of the port members.
@@ -1559,22 +1559,20 @@ mt7530_hw_vlan_add(struct mt7530_priv *p
@@ -1604,22 +1604,20 @@ mt7530_hw_vlan_add(struct mt7530_priv *p
/* Decide whether adding tag or not for those outgoing packets from the
* port inside the VLAN.
@@ -72,7 +72,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
static void
@@ -1593,11 +1591,7 @@ mt7530_hw_vlan_del(struct mt7530_priv *p
@@ -1638,11 +1636,7 @@ mt7530_hw_vlan_del(struct mt7530_priv *p
return;
}

View File

@@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1048,6 +1048,7 @@ static int
@@ -1093,6 +1093,7 @@ static int
mt7530_port_enable(struct dsa_switch *ds, int port,
struct phy_device *phy)
{
@@ -29,7 +29,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
struct mt7530_priv *priv = ds->priv;
mutex_lock(&priv->reg_mutex);
@@ -1056,7 +1057,11 @@ mt7530_port_enable(struct dsa_switch *ds
@@ -1101,7 +1102,11 @@ mt7530_port_enable(struct dsa_switch *ds
* restore the port matrix if the port is the member of a certain
* bridge.
*/
@@ -42,7 +42,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
priv->ports[port].enable = true;
mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
priv->ports[port].pm);
@@ -1204,7 +1209,8 @@ mt7530_port_bridge_join(struct dsa_switc
@@ -1249,7 +1254,8 @@ mt7530_port_bridge_join(struct dsa_switc
struct net_device *bridge)
{
struct dsa_port *dp = dsa_to_port(ds, port), *other_dp;
@@ -52,7 +52,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
struct mt7530_priv *priv = ds->priv;
mutex_lock(&priv->reg_mutex);
@@ -1281,9 +1287,12 @@ mt7530_port_set_vlan_unaware(struct dsa_
@@ -1326,9 +1332,12 @@ mt7530_port_set_vlan_unaware(struct dsa_
* the CPU port get out of VLAN filtering mode.
*/
if (all_user_ports_removed) {
@@ -67,7 +67,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
| PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
}
}
@@ -1333,6 +1342,7 @@ mt7530_port_bridge_leave(struct dsa_swit
@@ -1378,6 +1387,7 @@ mt7530_port_bridge_leave(struct dsa_swit
struct net_device *bridge)
{
struct dsa_port *dp = dsa_to_port(ds, port), *other_dp;
@@ -75,7 +75,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
struct mt7530_priv *priv = ds->priv;
mutex_lock(&priv->reg_mutex);
@@ -1361,8 +1371,8 @@ mt7530_port_bridge_leave(struct dsa_swit
@@ -1406,8 +1416,8 @@ mt7530_port_bridge_leave(struct dsa_swit
*/
if (priv->ports[port].enable)
mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
@@ -86,7 +86,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* When a port is removed from the bridge, the port would be set up
* back to the default as is at initial boot which is a VLAN-unaware
@@ -1525,6 +1535,9 @@ static int
@@ -1570,6 +1580,9 @@ static int
mt7530_port_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
struct netlink_ext_ack *extack)
{
@@ -96,7 +96,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (vlan_filtering) {
/* The port is being kept as VLAN-unaware port when bridge is
* set up with vlan_filtering not being set, Otherwise, the
@@ -1532,7 +1545,7 @@ mt7530_port_vlan_filtering(struct dsa_sw
@@ -1577,7 +1590,7 @@ mt7530_port_vlan_filtering(struct dsa_sw
* for becoming a VLAN-aware port.
*/
mt7530_port_set_vlan_aware(ds, port);

View File

@@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
MediaTek SoC family.
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1389,6 +1389,68 @@ static void mtk_update_rx_cpu_idx(struct
@@ -1388,6 +1388,68 @@ static void mtk_update_rx_cpu_idx(struct
}
}
@@ -96,7 +96,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static int mtk_poll_rx(struct napi_struct *napi, int budget,
struct mtk_eth *eth)
{
@@ -1402,9 +1464,9 @@ static int mtk_poll_rx(struct napi_struc
@@ -1401,9 +1463,9 @@ static int mtk_poll_rx(struct napi_struc
while (done < budget) {
unsigned int pktlen, *rxdcsum;
@@ -107,7 +107,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int mac = 0;
ring = mtk_get_rx_ring(eth);
@@ -1435,36 +1497,54 @@ static int mtk_poll_rx(struct napi_struc
@@ -1434,36 +1496,54 @@ static int mtk_poll_rx(struct napi_struc
goto release_desc;
/* alloc new buffer */
@@ -184,7 +184,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
skb->dev = netdev;
@@ -1518,7 +1598,6 @@ static int mtk_poll_rx(struct napi_struc
@@ -1517,7 +1597,6 @@ static int mtk_poll_rx(struct napi_struc
skip_rx:
ring->data[idx] = new_data;
rxd->rxd1 = (unsigned int)dma_addr;
@@ -192,7 +192,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
release_desc:
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
@@ -1526,7 +1605,6 @@ release_desc:
@@ -1525,7 +1604,6 @@ release_desc:
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
ring->calc_idx = idx;
@@ -200,7 +200,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
done++;
}
@@ -1890,13 +1968,15 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1889,13 +1967,15 @@ static int mtk_rx_alloc(struct mtk_eth *
if (!ring->data)
return -ENOMEM;
@@ -223,7 +223,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
ring->dma = dma_alloc_coherent(eth->dma_dev,
@@ -1907,16 +1987,33 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1906,16 +1986,33 @@ static int mtk_rx_alloc(struct mtk_eth *
for (i = 0; i < rx_dma_size; i++) {
struct mtk_rx_dma_v2 *rxd;
@@ -264,7 +264,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
rxd->rxd2 = RX_DMA_LSO;
@@ -1932,6 +2029,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1931,6 +2028,7 @@ static int mtk_rx_alloc(struct mtk_eth *
rxd->rxd8 = 0;
}
}
@@ -272,7 +272,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->dma_size = rx_dma_size;
ring->calc_idx_update = false;
ring->calc_idx = rx_dma_size - 1;
@@ -1983,7 +2081,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1982,7 +2080,7 @@ static void mtk_rx_clean(struct mtk_eth
dma_unmap_single(eth->dma_dev, rxd->rxd1,
ring->buf_size, DMA_FROM_DEVICE);
@@ -281,7 +281,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
kfree(ring->data);
ring->data = NULL;
@@ -1995,6 +2093,13 @@ static void mtk_rx_clean(struct mtk_eth
@@ -1994,6 +2092,13 @@ static void mtk_rx_clean(struct mtk_eth
ring->dma, ring->phys);
ring->dma = NULL;
}

View File

@@ -18,7 +18,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
@@ -1389,6 +1389,11 @@ static void mtk_update_rx_cpu_idx(struct
@@ -1388,6 +1388,11 @@ static void mtk_update_rx_cpu_idx(struct
}
}
@@ -30,7 +30,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
struct xdp_rxq_info *xdp_q,
int id, int size)
@@ -1451,11 +1456,52 @@ static void mtk_rx_put_buff(struct mtk_r
@@ -1450,11 +1455,52 @@ static void mtk_rx_put_buff(struct mtk_r
skb_free_frag(data);
}
@@ -83,7 +83,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int idx;
struct sk_buff *skb;
u8 *data, *new_data;
@@ -1464,9 +1510,9 @@ static int mtk_poll_rx(struct napi_struc
@@ -1463,9 +1509,9 @@ static int mtk_poll_rx(struct napi_struc
while (done < budget) {
unsigned int pktlen, *rxdcsum;
@@ -94,7 +94,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
int mac = 0;
ring = mtk_get_rx_ring(eth);
@@ -1496,8 +1542,14 @@ static int mtk_poll_rx(struct napi_struc
@@ -1495,8 +1541,14 @@ static int mtk_poll_rx(struct napi_struc
if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
goto release_desc;
@@ -109,7 +109,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
new_data = mtk_page_pool_get_buff(ring->page_pool,
&dma_addr,
GFP_ATOMIC);
@@ -1505,6 +1557,34 @@ static int mtk_poll_rx(struct napi_struc
@@ -1504,6 +1556,34 @@ static int mtk_poll_rx(struct napi_struc
netdev->stats.rx_dropped++;
goto release_desc;
}
@@ -144,7 +144,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} else {
if (ring->frag_size <= PAGE_SIZE)
new_data = napi_alloc_frag(ring->frag_size);
@@ -1528,27 +1608,20 @@ static int mtk_poll_rx(struct napi_struc
@@ -1527,27 +1607,20 @@ static int mtk_poll_rx(struct napi_struc
dma_unmap_single(eth->dma_dev, trxd.rxd1,
ring->buf_size, DMA_FROM_DEVICE);
@@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
rxdcsum = &trxd.rxd3;
@@ -1560,7 +1633,6 @@ static int mtk_poll_rx(struct napi_struc
@@ -1559,7 +1632,6 @@ static int mtk_poll_rx(struct napi_struc
else
skb_checksum_none_assert(skb);
skb->protocol = eth_type_trans(skb, netdev);
@@ -189,7 +189,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
if (hash != MTK_RXD4_FOE_ENTRY) {
@@ -1623,6 +1695,9 @@ rx_done:
@@ -1622,6 +1694,9 @@ rx_done:
&dim_sample);
net_dim(&eth->rx_dim, dim_sample);
@@ -199,7 +199,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
return done;
}
@@ -1968,7 +2043,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -1967,7 +2042,7 @@ static int mtk_rx_alloc(struct mtk_eth *
if (!ring->data)
return -ENOMEM;
@@ -208,7 +208,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct page_pool *pp;
pp = mtk_create_page_pool(eth, &ring->xdp_q, ring_no,
@@ -2713,6 +2788,48 @@ static int mtk_stop(struct net_device *d
@@ -2712,6 +2787,48 @@ static int mtk_stop(struct net_device *d
return 0;
}
@@ -257,7 +257,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
static void ethsys_reset(struct mtk_eth *eth, u32 reset_bits)
{
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL,
@@ -2991,6 +3108,12 @@ static int mtk_change_mtu(struct net_dev
@@ -2990,6 +3107,12 @@ static int mtk_change_mtu(struct net_dev
struct mtk_eth *eth = mac->hw;
u32 mcr_cur, mcr_new;
@@ -270,7 +270,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr_new = mcr_cur & ~MAC_MCR_MAX_RX_MASK;
@@ -3317,6 +3440,7 @@ static const struct net_device_ops mtk_n
@@ -3316,6 +3439,7 @@ static const struct net_device_ops mtk_n
.ndo_poll_controller = mtk_poll_controller,
#endif
.ndo_setup_tc = mtk_eth_setup_tc,

View File

@@ -39,7 +39,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
};
static const char * const mtk_clks_source_name[] = {
@@ -1459,6 +1470,9 @@ static void mtk_rx_put_buff(struct mtk_r
@@ -1458,6 +1469,9 @@ static void mtk_rx_put_buff(struct mtk_r
static u32 mtk_xdp_run(struct mtk_eth *eth, struct mtk_rx_ring *ring,
struct xdp_buff *xdp, struct net_device *dev)
{
@@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct bpf_prog *prog;
u32 act = XDP_PASS;
@@ -1471,13 +1485,16 @@ static u32 mtk_xdp_run(struct mtk_eth *e
@@ -1470,13 +1484,16 @@ static u32 mtk_xdp_run(struct mtk_eth *e
act = bpf_prog_run_xdp(prog, xdp);
switch (act) {
case XDP_PASS:
@@ -68,7 +68,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
default:
bpf_warn_invalid_xdp_action(act);
fallthrough;
@@ -1490,6 +1507,11 @@ static u32 mtk_xdp_run(struct mtk_eth *e
@@ -1489,6 +1506,11 @@ static u32 mtk_xdp_run(struct mtk_eth *e
page_pool_put_full_page(ring->page_pool,
virt_to_head_page(xdp->data), true);

Some files were not shown because too many files have changed in this diff Show More