Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-5.15 = .155
|
||||
LINUX_KERNEL_HASH-5.15.155 = c85859b86d2e6d1fc91ca1be8b44f24a9b5bb9f86869b04a8665a3a6559126e4
|
||||
LINUX_VERSION-5.15 = .158
|
||||
LINUX_KERNEL_HASH-5.15.158 = f9071c83a4fd8b80af026b48cfc1869bfa25883f9148b92b5dc1e1e1e26dd5c6
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mt76
|
||||
PKG_RELEASE=1
|
||||
PKG_RELEASE=2
|
||||
|
||||
PKG_LICENSE:=GPLv2
|
||||
PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2023-12-18
|
||||
PKG_SOURCE_VERSION:=bebd9cffc2aeb2cecb40aadbb8c6eab3bdf7971b
|
||||
PKG_MIRROR_HASH:=580261755bc3f251b8bc5f7f610274693c067432187570694d2f2ccab0edb62b
|
||||
PKG_SOURCE_DATE:=2024-02-03
|
||||
PKG_SOURCE_VERSION:=6124ea9135ed512671933f5520c46842906c78bc
|
||||
PKG_MIRROR_HASH:=acc326d7b15c9c72b494ed601300be329553f896e65c7f045e6a09327304c34a
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_USE_NINJA:=0
|
||||
@@ -326,6 +326,12 @@ define KernelPackage/mt7996e
|
||||
AUTOLOAD:=$(call AutoProbe,mt7996e)
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7996-firmware
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7996 firmware
|
||||
DEPENDS+=+kmod-mt7996e
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7925-common
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7925 wireless driver common code
|
||||
@@ -613,6 +619,17 @@ define KernelPackage/mt7922-firmware/install
|
||||
$(1)/lib/firmware/mediatek
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7996-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7996
|
||||
cp \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7996/mt7996_dsp.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7996/mt7996_eeprom.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7996/mt7996_rom_patch.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7996/mt7996_wa.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7996/mt7996_wm.bin \
|
||||
$(1)/lib/firmware/mediatek/mt7996
|
||||
endef
|
||||
|
||||
define Package/mt76-test/install
|
||||
mkdir -p $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/mt76-test $(1)/usr/sbin
|
||||
@@ -657,5 +674,6 @@ $(eval $(call KernelPackage,mt7921e))
|
||||
$(eval $(call KernelPackage,mt7925u))
|
||||
$(eval $(call KernelPackage,mt7925e))
|
||||
$(eval $(call KernelPackage,mt7996e))
|
||||
$(eval $(call KernelPackage,mt7996-firmware))
|
||||
$(eval $(call KernelPackage,mt76))
|
||||
$(eval $(call BuildPackage,mt76-test))
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/mt76_connac_mcu.c
|
||||
+++ b/mt76_connac_mcu.c
|
||||
@@ -2101,7 +2101,7 @@ mt76_connac_mcu_rate_txpower_band(struct
|
||||
@@ -2104,7 +2104,7 @@ mt76_connac_mcu_rate_txpower_band(struct
|
||||
int j, msg_len, num_ch;
|
||||
struct sk_buff *skb;
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/mt7996/mcu.c
|
||||
+++ b/mt7996/mcu.c
|
||||
@@ -4456,7 +4456,7 @@ int mt7996_mcu_set_txpower_sku(struct mt
|
||||
@@ -4464,7 +4464,7 @@ int mt7996_mcu_set_txpower_sku(struct mt
|
||||
u8 band_idx;
|
||||
} __packed req = {
|
||||
.tag = cpu_to_le16(UNI_TXPOWER_POWER_LIMIT_TABLE_CTRL),
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
.power_ctrl_id = UNI_TXPOWER_POWER_LIMIT_TABLE_CTRL,
|
||||
.power_limit_type = TX_POWER_LIMIT_TABLE_RATE,
|
||||
.band_idx = phy->mt76->band_idx,
|
||||
@@ -4471,7 +4471,7 @@ int mt7996_mcu_set_txpower_sku(struct mt
|
||||
@@ -4479,7 +4479,7 @@ int mt7996_mcu_set_txpower_sku(struct mt
|
||||
mphy->txpower_cur = tx_power;
|
||||
|
||||
skb = mt76_mcu_msg_alloc(&dev->mt76, NULL,
|
||||
@@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -4495,6 +4495,9 @@ int mt7996_mcu_set_txpower_sku(struct mt
|
||||
@@ -4503,6 +4503,9 @@ int mt7996_mcu_set_txpower_sku(struct mt
|
||||
/* eht */
|
||||
skb_put_data(skb, &la.eht[0], sizeof(la.eht));
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
From 786a339bac36d8e53eb8b540e79221d20011ab2a Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 3 Feb 2024 14:21:58 +0100
|
||||
Subject: [PATCH] wifi: mt76: mt7996: fix fortify warning
|
||||
|
||||
Copy cck and ofdm separately in order to avoid __read_overflow2_field
|
||||
warning.
|
||||
|
||||
Fixes: f75e4779d215 ("wifi: mt76: mt7996: add txpower setting support")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt7996/mcu.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/mt7996/mcu.c
|
||||
+++ b/mt7996/mcu.c
|
||||
@@ -4477,7 +4477,8 @@ int mt7996_mcu_set_txpower_sku(struct mt
|
||||
|
||||
skb_put_data(skb, &req, sizeof(req));
|
||||
/* cck and ofdm */
|
||||
- skb_put_data(skb, &la.cck, sizeof(la.cck) + sizeof(la.ofdm));
|
||||
+ skb_put_data(skb, &la.cck, sizeof(la.cck));
|
||||
+ skb_put_data(skb, &la.ofdm, sizeof(la.ofdm));
|
||||
/* ht20 */
|
||||
skb_put_data(skb, &la.mcs[0], 8);
|
||||
/* ht40 */
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/mt7996/mmio.c
|
||||
+++ b/mt7996/mmio.c
|
||||
@@ -499,7 +499,7 @@ static void mt7996_irq_tasklet(struct ta
|
||||
@@ -519,7 +519,7 @@ static void mt7996_irq_tasklet(struct ta
|
||||
struct mt7996_dev *dev = from_tasklet(dev, t, mt76.irq_tasklet);
|
||||
struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
|
||||
struct mtk_wed_device *wed_hif2 = &dev->mt76.mmio.wed_hif2;
|
||||
@@ -1,38 +0,0 @@
|
||||
From bc37a7ebc267e400fc4e9886b7197b4b866763d1 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Thu, 21 Dec 2023 10:41:18 +0100
|
||||
Subject: [PATCH] wifi: mt76: mt7996: fix fw loading timeout
|
||||
|
||||
Fix the following firmware loading error due to a wrong dma register
|
||||
configuration if wed is disabled.
|
||||
|
||||
[ 8.245881] mt7996e_hif 0001:01:00.0: assign IRQ: got 128
|
||||
[ 8.251308] mt7996e_hif 0001:01:00.0: enabling device (0000 -> 0002)
|
||||
[ 8.257674] mt7996e_hif 0001:01:00.0: enabling bus mastering
|
||||
[ 8.263488] mt7996e 0000:01:00.0: assign IRQ: got 126
|
||||
[ 8.268537] mt7996e 0000:01:00.0: enabling device (0000 -> 0002)
|
||||
[ 8.274551] mt7996e 0000:01:00.0: enabling bus mastering
|
||||
[ 28.648773] mt7996e 0000:01:00.0: Message 00000010 (seq 1) timeout
|
||||
[ 28.654959] mt7996e 0000:01:00.0: Failed to get patch semaphore
|
||||
[ 29.661033] mt7996e: probe of 0000:01:00.0 failed with error -11
|
||||
|
||||
Suggested-by: Sujuan Chen" <sujuan.chen@mediatek.com>
|
||||
Fixes: 4920a3a1285f ("wifi: mt76: mt7996: set DMA mask to 36 bits for boards with more than 4GB of RAM")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt7996/dma.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/mt7996/dma.c
|
||||
+++ b/mt7996/dma.c
|
||||
@@ -237,7 +237,8 @@ void mt7996_dma_start(struct mt7996_dev
|
||||
MT_WFDMA0_GLO_CFG_TX_DMA_EN |
|
||||
MT_WFDMA0_GLO_CFG_RX_DMA_EN |
|
||||
MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
|
||||
- MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
|
||||
+ MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2 |
|
||||
+ MT_WFDMA0_GLO_CFG_EXT_EN);
|
||||
|
||||
if (dev->hif2)
|
||||
mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/mt7996/mcu.c
|
||||
+++ b/mt7996/mcu.c
|
||||
@@ -3721,6 +3721,7 @@ int mt7996_mcu_get_temperature(struct mt
|
||||
@@ -3729,6 +3729,7 @@ int mt7996_mcu_get_temperature(struct mt
|
||||
} __packed * res;
|
||||
struct sk_buff *skb;
|
||||
int ret;
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
ret = mt76_mcu_send_and_get_msg(&phy->dev->mt76, MCU_WM_UNI_CMD(THERMAL),
|
||||
&req, sizeof(req), true, &skb);
|
||||
@@ -3728,8 +3729,10 @@ int mt7996_mcu_get_temperature(struct mt
|
||||
@@ -3736,8 +3737,10 @@ int mt7996_mcu_get_temperature(struct mt
|
||||
return ret;
|
||||
|
||||
res = (void *)skb->data;
|
||||
@@ -0,0 +1,27 @@
|
||||
From 725f531c14597f20645321d8a900796f5a68e135 Mon Sep 17 00:00:00 2001
|
||||
From: Muhammad Usama Anjum <usama.anjum@collabora.com>
|
||||
Date: Fri, 1 Mar 2024 19:44:06 +0500
|
||||
Subject: [PATCH] wifi: mt76: connac: check for null before dereferencing
|
||||
|
||||
The wcid can be NULL. It should be checked for validity before
|
||||
dereferencing it to avoid crash.
|
||||
|
||||
Fixes: 098428c400ff ("wifi: mt76: connac: set correct muar_idx for mt799x chipsets")
|
||||
Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
|
||||
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt76_connac_mcu.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/mt76_connac_mcu.c
|
||||
+++ b/mt76_connac_mcu.c
|
||||
@@ -283,7 +283,7 @@ __mt76_connac_mcu_alloc_sta_req(struct m
|
||||
};
|
||||
struct sk_buff *skb;
|
||||
|
||||
- if (is_mt799x(dev) && !wcid->sta)
|
||||
+ if (is_mt799x(dev) && wcid && !wcid->sta)
|
||||
hdr.muar_idx = 0xe;
|
||||
|
||||
mt76_connac_mcu_get_wlan_idx(dev, wcid, &hdr.wlan_idx_lo,
|
||||
@@ -1,60 +0,0 @@
|
||||
From 025d5734caba6fa1fd96b57c19c61e42e601815b Mon Sep 17 00:00:00 2001
|
||||
From: Peter Chiu <chui-hao.chiu@mediatek.com>
|
||||
Date: Fri, 26 Jan 2024 17:09:12 +0800
|
||||
Subject: [PATCH] wifi: mt76: mt7996: check txs format before getting skb by
|
||||
pid
|
||||
|
||||
The PPDU TXS does not include the error bit so it cannot use to report
|
||||
status to mac80211. This patch fixes issue that STA wrongly detects if AP
|
||||
is still alive.
|
||||
|
||||
Fixes: 2569ea5326e2 ("wifi: mt76: mt7996: enable PPDU-TxS to host")
|
||||
Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com>
|
||||
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt7996/mac.c | 23 +++++++++++++----------
|
||||
1 file changed, 13 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/mt7996/mac.c
|
||||
+++ b/mt7996/mac.c
|
||||
@@ -1188,25 +1188,28 @@ mt7996_mac_add_txs_skb(struct mt7996_dev
|
||||
struct ieee80211_tx_info *info;
|
||||
struct sk_buff_head list;
|
||||
struct rate_info rate = {};
|
||||
- struct sk_buff *skb;
|
||||
+ struct sk_buff *skb = NULL;
|
||||
bool cck = false;
|
||||
u32 txrate, txs, mode, stbc;
|
||||
|
||||
txs = le32_to_cpu(txs_data[0]);
|
||||
|
||||
mt76_tx_status_lock(mdev, &list);
|
||||
- skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
|
||||
|
||||
- if (skb) {
|
||||
- info = IEEE80211_SKB_CB(skb);
|
||||
- if (!(txs & MT_TXS0_ACK_ERROR_MASK))
|
||||
- info->flags |= IEEE80211_TX_STAT_ACK;
|
||||
-
|
||||
- info->status.ampdu_len = 1;
|
||||
- info->status.ampdu_ack_len =
|
||||
- !!(info->flags & IEEE80211_TX_STAT_ACK);
|
||||
+ /* only report MPDU TXS */
|
||||
+ if (le32_get_bits(txs_data[0], MT_TXS0_TXS_FORMAT) == 0) {
|
||||
+ skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
|
||||
+ if (skb) {
|
||||
+ info = IEEE80211_SKB_CB(skb);
|
||||
+ if (!(txs & MT_TXS0_ACK_ERROR_MASK))
|
||||
+ info->flags |= IEEE80211_TX_STAT_ACK;
|
||||
+
|
||||
+ info->status.ampdu_len = 1;
|
||||
+ info->status.ampdu_ack_len =
|
||||
+ !!(info->flags & IEEE80211_TX_STAT_ACK);
|
||||
|
||||
- info->status.rates[0].idx = -1;
|
||||
+ info->status.rates[0].idx = -1;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (mtk_wed_device_active(&dev->mt76.mmio.wed) && wcid->sta) {
|
||||
@@ -0,0 +1,25 @@
|
||||
From 1e336a8582dce2ef32ddd440d423e9afef961e71 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 3 Apr 2024 13:01:01 +0200
|
||||
Subject: [PATCH] wifi: mt76: connac: use muar idx 0xe for non-mt799x as well
|
||||
|
||||
This is expected by the firmware of older chipsets as well, though it may
|
||||
not have been as strongly required as on mt799x
|
||||
|
||||
Fixes: 098428c400ff ("wifi: mt76: connac: set correct muar_idx for mt799x chipsets")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt76_connac_mcu.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/mt76_connac_mcu.c
|
||||
+++ b/mt76_connac_mcu.c
|
||||
@@ -283,7 +283,7 @@ __mt76_connac_mcu_alloc_sta_req(struct m
|
||||
};
|
||||
struct sk_buff *skb;
|
||||
|
||||
- if (is_mt799x(dev) && wcid && !wcid->sta)
|
||||
+ if (wcid && !wcid->sta)
|
||||
hdr.muar_idx = 0xe;
|
||||
|
||||
mt76_connac_mcu_get_wlan_idx(dev, wcid, &hdr.wlan_idx_lo,
|
||||
@@ -1,38 +0,0 @@
|
||||
From d75eac9f5531e484fbbabf2652922976e15a7a7a Mon Sep 17 00:00:00 2001
|
||||
From: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
|
||||
Date: Tue, 16 Jan 2024 10:48:54 +0800
|
||||
Subject: [PATCH] wifi: mt76: mt7921: fix incorrect type conversion for CLC
|
||||
command
|
||||
|
||||
clc->len is defined as 32 bits in length, so it must also be
|
||||
operated on with 32 bits, not 16 bits.
|
||||
|
||||
Fixes: fa6ad88e023d ("wifi: mt76: mt7921: fix country count limitation for CLC")
|
||||
Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
|
||||
Reported-by: kernel test robot <lkp@intel.com>
|
||||
Closes: https://lore.kernel.org/oe-kbuild-all/202312112104.Zkc3QUHr-lkp@intel.com/
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt7921/mcu.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/mt7921/mcu.c
|
||||
+++ b/mt7921/mcu.c
|
||||
@@ -1272,7 +1272,7 @@ int __mt7921_mcu_set_clc(struct mt792x_d
|
||||
.mtcl_conf = mt792x_acpi_get_mtcl_conf(&dev->phy, alpha2),
|
||||
};
|
||||
int ret, valid_cnt = 0;
|
||||
- u16 buf_len = 0;
|
||||
+ u32 buf_len = 0;
|
||||
u8 *pos;
|
||||
|
||||
if (!clc)
|
||||
@@ -1283,7 +1283,7 @@ int __mt7921_mcu_set_clc(struct mt792x_d
|
||||
if (mt76_find_power_limits_node(&dev->mt76))
|
||||
req.cap |= CLC_CAP_DTS_EN;
|
||||
|
||||
- buf_len = le16_to_cpu(clc->len) - sizeof(*clc);
|
||||
+ buf_len = le32_to_cpu(clc->len) - sizeof(*clc);
|
||||
pos = clc->data;
|
||||
while (buf_len > 16) {
|
||||
struct mt7921_clc_rule *rule = (struct mt7921_clc_rule *)pos;
|
||||
@@ -0,0 +1,99 @@
|
||||
From e4de3592c4e3baa82142eff583cb5a761f790709 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 2 Apr 2024 20:14:34 +0200
|
||||
Subject: [PATCH] wifi: mt76: mt7603: fix tx queue of loopback packets
|
||||
|
||||
Use the correct WMM AC queue instead of the MGMT one to fix potential issues
|
||||
with aggregation sequence number tracking. Drop non-bufferable packets.
|
||||
|
||||
Fixes: fca9615f1a43 ("mt76: mt7603: fix up hardware queue index for PS filtered packets")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt7603/dma.c | 46 ++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 32 insertions(+), 14 deletions(-)
|
||||
|
||||
--- a/mt7603/dma.c
|
||||
+++ b/mt7603/dma.c
|
||||
@@ -4,6 +4,13 @@
|
||||
#include "mac.h"
|
||||
#include "../dma.h"
|
||||
|
||||
+static const u8 wmm_queue_map[] = {
|
||||
+ [IEEE80211_AC_BK] = 0,
|
||||
+ [IEEE80211_AC_BE] = 1,
|
||||
+ [IEEE80211_AC_VI] = 2,
|
||||
+ [IEEE80211_AC_VO] = 3,
|
||||
+};
|
||||
+
|
||||
static void
|
||||
mt7603_rx_loopback_skb(struct mt7603_dev *dev, struct sk_buff *skb)
|
||||
{
|
||||
@@ -22,10 +29,10 @@ mt7603_rx_loopback_skb(struct mt7603_dev
|
||||
struct ieee80211_sta *sta;
|
||||
struct mt7603_sta *msta;
|
||||
struct mt76_wcid *wcid;
|
||||
+ u8 tid = 0, hwq = 0;
|
||||
void *priv;
|
||||
int idx;
|
||||
u32 val;
|
||||
- u8 tid = 0;
|
||||
|
||||
if (skb->len < MT_TXD_SIZE + sizeof(struct ieee80211_hdr))
|
||||
goto free;
|
||||
@@ -42,19 +49,36 @@ mt7603_rx_loopback_skb(struct mt7603_dev
|
||||
goto free;
|
||||
|
||||
priv = msta = container_of(wcid, struct mt7603_sta, wcid);
|
||||
- val = le32_to_cpu(txd[0]);
|
||||
- val &= ~(MT_TXD0_P_IDX | MT_TXD0_Q_IDX);
|
||||
- val |= FIELD_PREP(MT_TXD0_Q_IDX, MT_TX_HW_QUEUE_MGMT);
|
||||
- txd[0] = cpu_to_le32(val);
|
||||
|
||||
sta = container_of(priv, struct ieee80211_sta, drv_priv);
|
||||
hdr = (struct ieee80211_hdr *)&skb->data[MT_TXD_SIZE];
|
||||
- if (ieee80211_is_data_qos(hdr->frame_control))
|
||||
+
|
||||
+ hwq = wmm_queue_map[IEEE80211_AC_BE];
|
||||
+ if (ieee80211_is_data_qos(hdr->frame_control)) {
|
||||
tid = *ieee80211_get_qos_ctl(hdr) &
|
||||
- IEEE80211_QOS_CTL_TAG1D_MASK;
|
||||
- skb_set_queue_mapping(skb, tid_to_ac[tid]);
|
||||
+ IEEE80211_QOS_CTL_TAG1D_MASK;
|
||||
+ u8 qid = tid_to_ac[tid];
|
||||
+ hwq = wmm_queue_map[qid];
|
||||
+ skb_set_queue_mapping(skb, qid);
|
||||
+ } else if (ieee80211_is_data(hdr->frame_control)) {
|
||||
+ skb_set_queue_mapping(skb, IEEE80211_AC_BE);
|
||||
+ hwq = wmm_queue_map[IEEE80211_AC_BE];
|
||||
+ } else {
|
||||
+ skb_pull(skb, MT_TXD_SIZE);
|
||||
+ if (!ieee80211_is_bufferable_mmpdu(skb))
|
||||
+ goto free;
|
||||
+ skb_push(skb, MT_TXD_SIZE);
|
||||
+ skb_set_queue_mapping(skb, MT_TXQ_PSD);
|
||||
+ hwq = MT_TX_HW_QUEUE_MGMT;
|
||||
+ }
|
||||
+
|
||||
ieee80211_sta_set_buffered(sta, tid, true);
|
||||
|
||||
+ val = le32_to_cpu(txd[0]);
|
||||
+ val &= ~(MT_TXD0_P_IDX | MT_TXD0_Q_IDX);
|
||||
+ val |= FIELD_PREP(MT_TXD0_Q_IDX, hwq);
|
||||
+ txd[0] = cpu_to_le32(val);
|
||||
+
|
||||
spin_lock_bh(&dev->ps_lock);
|
||||
__skb_queue_tail(&msta->psq, skb);
|
||||
if (skb_queue_len(&msta->psq) >= 64) {
|
||||
@@ -151,12 +175,6 @@ static int mt7603_poll_tx(struct napi_st
|
||||
|
||||
int mt7603_dma_init(struct mt7603_dev *dev)
|
||||
{
|
||||
- static const u8 wmm_queue_map[] = {
|
||||
- [IEEE80211_AC_BK] = 0,
|
||||
- [IEEE80211_AC_BE] = 1,
|
||||
- [IEEE80211_AC_VI] = 2,
|
||||
- [IEEE80211_AC_VO] = 3,
|
||||
- };
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
From 446f652c967c11d50d9005e2acec97f8b577bb92 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 3 Apr 2024 11:11:54 +0200
|
||||
Subject: [PATCH] wifi: mt76: mt7603: add wpdma tx eof flag for PSE client
|
||||
reset
|
||||
|
||||
This flag is needed for the PSE client reset. Fixes watchdog reset issues.
|
||||
|
||||
Fixes: c677dda16523 ("wifi: mt76: mt7603: improve watchdog reset reliablity")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
mt7603/mac.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/mt7603/mac.c
|
||||
+++ b/mt7603/mac.c
|
||||
@@ -1393,6 +1393,7 @@ void mt7603_pse_client_reset(struct mt76
|
||||
MT_CLIENT_RESET_TX_R_E_2_S);
|
||||
|
||||
/* Start PSE client TX abort */
|
||||
+ mt76_set(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_FORCE_TX_EOF);
|
||||
mt76_set(dev, addr, MT_CLIENT_RESET_TX_R_E_1);
|
||||
mt76_poll_msec(dev, addr, MT_CLIENT_RESET_TX_R_E_1_S,
|
||||
MT_CLIENT_RESET_TX_R_E_1_S, 500);
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Stephen Boyd <sboyd@kernel.org>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -3145,7 +3145,10 @@ static int clk_rate_get(void *data, u64
|
||||
@@ -3235,7 +3235,10 @@ static int clk_rate_get(void *data, u64
|
||||
{
|
||||
struct clk_core *core = data;
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1360,6 +1360,8 @@ static int clk_core_determine_round_nolo
|
||||
@@ -1450,6 +1450,8 @@ static int clk_core_determine_round_nolo
|
||||
if (!core)
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -2400,11 +2400,7 @@ int clk_set_rate_range(struct clk *clk,
|
||||
@@ -2490,11 +2490,7 @@ int clk_set_rate_range(struct clk *clk,
|
||||
* this corner case when determining the rate
|
||||
*/
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -2385,28 +2385,29 @@ int clk_set_rate_range(struct clk *clk,
|
||||
@@ -2475,28 +2475,29 @@ int clk_set_rate_range(struct clk *clk,
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -2344,19 +2344,15 @@ int clk_set_rate_exclusive(struct clk *c
|
||||
@@ -2434,19 +2434,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;
|
||||
|
||||
@@ -2369,8 +2365,6 @@ int clk_set_rate_range(struct clk *clk,
|
||||
@@ -2459,8 +2455,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);
|
||||
|
||||
@@ -2414,6 +2408,28 @@ out:
|
||||
@@ -2504,6 +2498,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;
|
||||
@@ -4376,9 +4392,10 @@ void __clk_put(struct clk *clk)
|
||||
@@ -4466,9 +4482,10 @@ void __clk_put(struct clk *clk)
|
||||
}
|
||||
|
||||
hlist_del(&clk->clks_node);
|
||||
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -2379,6 +2379,10 @@ static int clk_set_rate_range_nolock(str
|
||||
@@ -2469,6 +2469,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
|
||||
@@ -2396,7 +2400,7 @@ static int clk_set_rate_range_nolock(str
|
||||
@@ -2486,7 +2490,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
|
||||
*/
|
||||
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1771,6 +1771,23 @@ static void clk_core_update_orphan_statu
|
||||
@@ -1861,6 +1861,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;
|
||||
@@ -1795,6 +1812,7 @@ static void clk_reparent(struct clk_core
|
||||
@@ -1885,6 +1902,7 @@ static void clk_reparent(struct clk_core
|
||||
}
|
||||
|
||||
core->parent = new_parent;
|
||||
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -2401,6 +2401,12 @@ static int clk_set_rate_range_nolock(str
|
||||
@@ -2491,6 +2491,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);
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1394,6 +1394,8 @@ static void clk_core_init_rate_req(struc
|
||||
@@ -1484,6 +1484,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;
|
||||
@@ -1468,7 +1470,6 @@ unsigned long clk_hw_round_rate(struct c
|
||||
@@ -1558,7 +1560,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);
|
||||
@@ -1501,7 +1502,6 @@ long clk_round_rate(struct clk *clk, uns
|
||||
@@ -1591,7 +1592,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);
|
||||
@@ -2008,8 +2008,6 @@ static struct clk_core *clk_calc_new_rat
|
||||
@@ -2098,8 +2098,6 @@ static struct clk_core *clk_calc_new_rat
|
||||
struct clk_rate_request req;
|
||||
|
||||
req.rate = rate;
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1387,13 +1387,15 @@ static int clk_core_determine_round_nolo
|
||||
@@ -1477,13 +1477,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;
|
||||
@@ -1421,7 +1423,7 @@ static int clk_core_round_rate_nolock(st
|
||||
@@ -1511,7 +1513,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);
|
||||
@@ -2007,9 +2009,7 @@ static struct clk_core *clk_calc_new_rat
|
||||
@@ -2097,9 +2099,7 @@ static struct clk_core *clk_calc_new_rat
|
||||
if (clk_core_can_round(core)) {
|
||||
struct clk_rate_request req;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1408,6 +1408,26 @@ static void clk_core_init_rate_req(struc
|
||||
@@ -1498,6 +1498,26 @@ static void clk_core_init_rate_req(struc
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1492,7 +1492,7 @@ unsigned long clk_hw_round_rate(struct c
|
||||
@@ -1582,7 +1582,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)
|
||||
@@ -1524,7 +1524,7 @@ long clk_round_rate(struct clk *clk, uns
|
||||
@@ -1614,7 +1614,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);
|
||||
|
||||
@@ -2228,8 +2228,7 @@ static unsigned long clk_core_req_round_
|
||||
@@ -2318,8 +2318,7 @@ static unsigned long clk_core_req_round_
|
||||
if (cnt < 0)
|
||||
return cnt;
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1443,8 +1443,6 @@ static int clk_core_round_rate_nolock(st
|
||||
@@ -1533,8 +1533,6 @@ static int clk_core_round_rate_nolock(st
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -556,6 +556,9 @@ static bool mux_is_better_rate(unsigned
|
||||
@@ -644,6 +644,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)
|
||||
@@ -569,8 +572,12 @@ int clk_mux_determine_rate_flags(struct
|
||||
@@ -657,8 +660,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;
|
||||
|
||||
@@ -593,7 +600,7 @@ int clk_mux_determine_rate_flags(struct
|
||||
@@ -681,7 +688,7 @@ int clk_mux_determine_rate_flags(struct
|
||||
|
||||
if (core->flags & CLK_SET_RATE_PARENT) {
|
||||
parent_req = *req;
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -559,6 +559,26 @@ static bool mux_is_better_rate(unsigned
|
||||
@@ -647,6 +647,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)
|
||||
@@ -2582,25 +2602,11 @@ void clk_hw_reparent(struct clk_hw *hw,
|
||||
@@ -2672,25 +2692,11 @@ void clk_hw_reparent(struct clk_hw *hw,
|
||||
*/
|
||||
bool clk_has_parent(struct clk *clk, struct clk *parent)
|
||||
{
|
||||
|
||||
@@ -35,7 +35,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -556,6 +556,10 @@ static bool mux_is_better_rate(unsigned
|
||||
@@ -644,6 +644,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);
|
||||
|
||||
@@ -579,6 +583,24 @@ static bool clk_core_has_parent(struct c
|
||||
@@ -667,6 +671,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)
|
||||
@@ -586,17 +608,19 @@ int clk_mux_determine_rate_flags(struct
|
||||
@@ -674,17 +696,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;
|
||||
@@ -614,23 +638,29 @@ int clk_mux_determine_rate_flags(struct
|
||||
@@ -702,23 +726,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>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1463,6 +1493,8 @@ static bool clk_core_can_round(struct cl
|
||||
@@ -1553,6 +1583,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) {
|
||||
@@ -1472,8 +1504,20 @@ static int clk_core_round_rate_nolock(st
|
||||
@@ -1562,8 +1594,20 @@ static int clk_core_round_rate_nolock(st
|
||||
|
||||
if (clk_core_can_round(core))
|
||||
return clk_core_determine_round_nolock(core, req);
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -1452,6 +1452,8 @@ static void clk_core_init_rate_req(struc
|
||||
@@ -1542,6 +1542,8 @@ static void clk_core_init_rate_req(struc
|
||||
if (WARN_ON(!core || !req))
|
||||
return;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -280,7 +280,7 @@ EXPORT_SYMBOL_GPL(__clk_get_name);
|
||||
@@ -368,7 +368,7 @@ EXPORT_SYMBOL_GPL(__clk_get_name);
|
||||
|
||||
const char *clk_hw_get_name(const struct clk_hw *hw)
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -2589,6 +2589,24 @@ int clk_set_max_rate(struct clk *clk, un
|
||||
@@ -2679,6 +2679,24 @@ int clk_set_max_rate(struct clk *clk, un
|
||||
EXPORT_SYMBOL_GPL(clk_set_max_rate);
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/clk/clk.c
|
||||
+++ b/drivers/clk/clk.c
|
||||
@@ -2602,7 +2602,9 @@ void clk_get_rate_range(struct clk *clk,
|
||||
@@ -2692,7 +2692,9 @@ void clk_get_rate_range(struct clk *clk,
|
||||
if (!clk || !min || !max)
|
||||
return;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Subject: [PATCH 210/210] b44: register adm switch
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
@@ -2245,6 +2247,69 @@ static void b44_adjust_link(struct net_d
|
||||
@@ -2247,6 +2249,69 @@ static void b44_adjust_link(struct net_d
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ Subject: [PATCH 210/210] b44: register adm switch
|
||||
static int b44_register_phy_one(struct b44 *bp)
|
||||
{
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
|
||||
@@ -2281,6 +2346,9 @@ static int b44_register_phy_one(struct b
|
||||
@@ -2283,6 +2348,9 @@ static int b44_register_phy_one(struct b
|
||||
if (!mdiobus_is_registered_device(bp->mii_bus, bp->phy_addr) &&
|
||||
(sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) {
|
||||
|
||||
@@ -99,7 +99,7 @@ Subject: [PATCH 210/210] b44: register adm switch
|
||||
dev_info(sdev->dev,
|
||||
"could not find PHY at %i, use fixed one\n",
|
||||
bp->phy_addr);
|
||||
@@ -2475,6 +2543,7 @@ static void b44_remove_one(struct ssb_de
|
||||
@@ -2477,6 +2545,7 @@ static void b44_remove_one(struct ssb_de
|
||||
unregister_netdev(dev);
|
||||
if (bp->flags & B44_FLAG_EXTERNAL_PHY)
|
||||
b44_unregister_phy_one(bp);
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
if (bp->flags & B44_FLAG_EXTERNAL_PHY)
|
||||
return 0;
|
||||
@@ -2175,6 +2200,8 @@ static int b44_get_invariants(struct b44
|
||||
@@ -2177,6 +2202,8 @@ static int b44_get_invariants(struct b44
|
||||
* valid PHY address. */
|
||||
bp->phy_addr &= 0x1F;
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
|
||||
--- a/arch/Kconfig
|
||||
+++ b/arch/Kconfig
|
||||
@@ -1299,6 +1299,14 @@ config ARCH_HAS_ELFCORE_COMPAT
|
||||
@@ -1307,6 +1307,14 @@ config ARCH_HAS_ELFCORE_COMPAT
|
||||
config ARCH_HAS_PARANOID_L1D_FLUSH
|
||||
bool
|
||||
|
||||
@@ -90,7 +90,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
source "scripts/gcc-plugins/Kconfig"
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -85,6 +85,7 @@ config X86
|
||||
@@ -86,6 +86,7 @@ config X86
|
||||
select ARCH_HAS_PMEM_API if X86_64
|
||||
select ARCH_HAS_PTE_DEVMAP if X86_64
|
||||
select ARCH_HAS_PTE_SPECIAL
|
||||
|
||||
@@ -552,7 +552,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
--- a/kernel/bounds.c
|
||||
+++ b/kernel/bounds.c
|
||||
@@ -22,6 +22,11 @@ int main(void)
|
||||
DEFINE(NR_CPUS_BITS, bits_per(CONFIG_NR_CPUS));
|
||||
DEFINE(NR_CPUS_BITS, order_base_2(CONFIG_NR_CPUS));
|
||||
#endif
|
||||
DEFINE(SPINLOCK_SIZE, sizeof(spinlock_t));
|
||||
+#ifdef CONFIG_LRU_GEN
|
||||
|
||||
@@ -124,7 +124,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
list_del(&dst->list);
|
||||
kfree(dst);
|
||||
}
|
||||
@@ -805,7 +809,7 @@ static int dsa_switch_setup_tag_protocol
|
||||
@@ -827,7 +831,7 @@ static int dsa_switch_setup_tag_protocol
|
||||
int port, err;
|
||||
|
||||
if (tag_ops->proto == dst->default_proto)
|
||||
@@ -133,7 +133,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
for (port = 0; port < ds->num_ports; port++) {
|
||||
if (!dsa_is_cpu_port(ds, port))
|
||||
@@ -821,6 +825,17 @@ static int dsa_switch_setup_tag_protocol
|
||||
@@ -843,6 +847,17 @@ static int dsa_switch_setup_tag_protocol
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1132,6 +1147,46 @@ static void dsa_tree_teardown(struct dsa
|
||||
@@ -1154,6 +1169,46 @@ static void dsa_tree_teardown(struct dsa
|
||||
dst->setup = false;
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* Since the dsa/tagging sysfs device attribute is per master, the assumption
|
||||
* is that all DSA switches within a tree share the same tagger, otherwise
|
||||
* they would have formed disjoint trees (different "dsa,member" values).
|
||||
@@ -1164,12 +1219,15 @@ int dsa_tree_change_tag_proto(struct dsa
|
||||
@@ -1186,12 +1241,15 @@ int dsa_tree_change_tag_proto(struct dsa
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
@@ -216,7 +216,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
rtnl_unlock();
|
||||
|
||||
@@ -1257,6 +1315,7 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
@@ -1279,6 +1337,7 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
struct dsa_switch *ds = dp->ds;
|
||||
struct dsa_switch_tree *dst = ds->dst;
|
||||
enum dsa_tag_protocol default_proto;
|
||||
@@ -224,7 +224,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
/* Find out which protocol the switch would prefer. */
|
||||
default_proto = dsa_get_tag_protocol(dp, master);
|
||||
@@ -1311,6 +1370,12 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
@@ -1333,6 +1392,12 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
*/
|
||||
dsa_tag_driver_put(tag_ops);
|
||||
} else {
|
||||
|
||||
@@ -101,7 +101,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
list_del(&dst->list);
|
||||
kfree(dst);
|
||||
}
|
||||
@@ -826,17 +822,29 @@ static int dsa_switch_setup_tag_protocol
|
||||
@@ -848,17 +844,29 @@ static int dsa_switch_setup_tag_protocol
|
||||
}
|
||||
|
||||
connect:
|
||||
@@ -132,7 +132,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
|
||||
static int dsa_switch_setup(struct dsa_switch *ds)
|
||||
@@ -1156,13 +1164,6 @@ static int dsa_tree_bind_tag_proto(struc
|
||||
@@ -1178,13 +1186,6 @@ static int dsa_tree_bind_tag_proto(struc
|
||||
|
||||
dst->tag_ops = tag_ops;
|
||||
|
||||
@@ -146,7 +146,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* Notify the switches from this tree about the connection
|
||||
* to the new tagger
|
||||
*/
|
||||
@@ -1172,16 +1173,14 @@ static int dsa_tree_bind_tag_proto(struc
|
||||
@@ -1194,16 +1195,14 @@ static int dsa_tree_bind_tag_proto(struc
|
||||
goto out_disconnect;
|
||||
|
||||
/* Notify the old tagger about the disconnection from this tree */
|
||||
@@ -167,7 +167,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
dst->tag_ops = old_tag_ops;
|
||||
|
||||
return err;
|
||||
@@ -1315,7 +1314,6 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
@@ -1337,7 +1336,6 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
struct dsa_switch *ds = dp->ds;
|
||||
struct dsa_switch_tree *dst = ds->dst;
|
||||
enum dsa_tag_protocol default_proto;
|
||||
@@ -175,7 +175,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
/* Find out which protocol the switch would prefer. */
|
||||
default_proto = dsa_get_tag_protocol(dp, master);
|
||||
@@ -1370,12 +1368,6 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
@@ -1392,12 +1390,6 @@ static int dsa_port_parse_cpu(struct dsa
|
||||
*/
|
||||
dsa_tag_driver_put(tag_ops);
|
||||
} else {
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 7 Feb 2022 10:27:22 +0100
|
||||
Subject: [PATCH] arm64: dts: mediatek: mt7622: add support for coherent
|
||||
DMA
|
||||
|
||||
It improves performance by eliminating the need for a cache flush on rx and tx
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -357,7 +357,7 @@
|
||||
};
|
||||
|
||||
cci_control2: slave-if@5000 {
|
||||
- compatible = "arm,cci-400-ctrl-if";
|
||||
+ compatible = "arm,cci-400-ctrl-if", "syscon";
|
||||
interface-type = "ace";
|
||||
reg = <0x5000 0x1000>;
|
||||
};
|
||||
@@ -938,6 +938,8 @@
|
||||
power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
|
||||
mediatek,ethsys = <ðsys>;
|
||||
mediatek,sgmiisys = <&sgmiisys>;
|
||||
+ mediatek,cci-control = <&cci_control2>;
|
||||
+ dma-coherent;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
@@ -1,62 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 5 Feb 2022 18:36:36 +0100
|
||||
Subject: [PATCH] arm64: dts: mediatek: mt7622: introduce nodes for
|
||||
Wireless Ethernet Dispatch
|
||||
|
||||
Introduce wed0 and wed1 nodes in order to enable offloading forwarding
|
||||
between ethernet and wireless devices on the mt7622 chipset.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -894,6 +894,11 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ hifsys: syscon@1af00000 {
|
||||
+ compatible = "mediatek,mt7622-hifsys", "syscon";
|
||||
+ reg = <0 0x1af00000 0 0x70>;
|
||||
+ };
|
||||
+
|
||||
ethsys: syscon@1b000000 {
|
||||
compatible = "mediatek,mt7622-ethsys",
|
||||
"syscon";
|
||||
@@ -912,6 +917,26 @@
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
+ pcie_mirror: pcie-mirror@10000400 {
|
||||
+ compatible = "mediatek,mt7622-pcie-mirror",
|
||||
+ "syscon";
|
||||
+ reg = <0 0x10000400 0 0x10>;
|
||||
+ };
|
||||
+
|
||||
+ wed0: wed@1020a000 {
|
||||
+ compatible = "mediatek,mt7622-wed",
|
||||
+ "syscon";
|
||||
+ reg = <0 0x1020a000 0 0x1000>;
|
||||
+ interrupts = <GIC_SPI 214 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ wed1: wed@1020b000 {
|
||||
+ compatible = "mediatek,mt7622-wed",
|
||||
+ "syscon";
|
||||
+ reg = <0 0x1020b000 0 0x1000>;
|
||||
+ interrupts = <GIC_SPI 215 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ };
|
||||
+
|
||||
eth: ethernet@1b100000 {
|
||||
compatible = "mediatek,mt7622-eth",
|
||||
"mediatek,mt2701-eth",
|
||||
@@ -939,6 +964,9 @@
|
||||
mediatek,ethsys = <ðsys>;
|
||||
mediatek,sgmiisys = <&sgmiisys>;
|
||||
mediatek,cci-control = <&cci_control2>;
|
||||
+ mediatek,wed = <&wed0>, <&wed1>;
|
||||
+ mediatek,pcie-mirror = <&pcie_mirror>;
|
||||
+ mediatek,hifsys = <&hifsys>;
|
||||
dma-coherent;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -963,7 +963,7 @@
|
||||
@@ -957,7 +957,7 @@
|
||||
power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
|
||||
mediatek,ethsys = <ðsys>;
|
||||
mediatek,sgmiisys = <&sgmiisys>;
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -1243,27 +1243,31 @@ static int
|
||||
@@ -1425,27 +1425,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. */
|
||||
@@ -1368,24 +1372,28 @@ static void
|
||||
@@ -1550,24 +1554,28 @@ static void
|
||||
mt7530_port_bridge_leave(struct dsa_switch *ds, int port,
|
||||
struct net_device *bridge)
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2499,6 +2499,32 @@ mt7531_setup(struct dsa_switch *ds)
|
||||
@@ -2687,6 +2687,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)
|
||||
@@ -2535,6 +2561,37 @@ static bool mt7531_is_rgmii_port(struct
|
||||
@@ -2723,6 +2749,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)
|
||||
@@ -3011,6 +3068,18 @@ mt7531_cpu_port_config(struct dsa_switch
|
||||
@@ -3199,6 +3256,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)
|
||||
@@ -3246,6 +3315,7 @@ static const struct dsa_switch_ops mt753
|
||||
@@ -3435,6 +3504,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,
|
||||
@@ -3263,6 +3333,7 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3452,6 +3522,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,
|
||||
@@ -3274,6 +3345,7 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3463,6 +3534,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,
|
||||
@@ -3286,6 +3358,7 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3475,6 +3547,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,
|
||||
@@ -3348,6 +3421,7 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3537,6 +3610,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
|
||||
@@ -796,6 +796,8 @@ struct mt753x_info {
|
||||
@@ -807,6 +807,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);
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2525,37 +2525,6 @@ static void mt7530_mac_port_get_caps(str
|
||||
@@ -2713,37 +2713,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);
|
||||
@@ -2592,44 +2561,6 @@ static void mt7531_mac_port_get_caps(str
|
||||
@@ -2780,44 +2749,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)
|
||||
{
|
||||
@@ -2884,9 +2815,6 @@ mt753x_phylink_mac_config(struct dsa_swi
|
||||
@@ -3072,9 +3003,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)
|
||||
@@ -3102,12 +3030,6 @@ mt753x_phylink_validate(struct dsa_switc
|
||||
@@ -3290,12 +3218,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 &&
|
||||
@@ -3334,7 +3256,6 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3523,7 +3445,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,
|
||||
@@ -3346,7 +3267,6 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3535,7 +3456,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,
|
||||
@@ -3359,7 +3279,6 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3548,7 +3468,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,
|
||||
@@ -3422,7 +3341,6 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3611,7 +3530,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
|
||||
@@ -798,8 +798,6 @@ struct mt753x_info {
|
||||
@@ -809,8 +809,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);
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3054,11 +3054,6 @@ mt753x_phylink_validate(struct dsa_switc
|
||||
@@ -3242,11 +3242,6 @@ mt753x_phylink_validate(struct dsa_switc
|
||||
|
||||
linkmode_and(supported, supported, mask);
|
||||
linkmode_and(state->advertising, state->advertising, mask);
|
||||
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2632,12 +2632,13 @@ static int mt7531_rgmii_setup(struct mt7
|
||||
@@ -2820,12 +2820,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);
|
||||
}
|
||||
@@ -3010,16 +3011,18 @@ static void mt753x_phylink_get_caps(stru
|
||||
@@ -3198,16 +3199,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
|
||||
@@ -3042,12 +3045,13 @@ mt753x_phylink_validate(struct dsa_switc
|
||||
@@ -3230,12 +3233,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
|
||||
@@ -799,6 +799,7 @@ struct mt753x_info {
|
||||
@@ -810,6 +810,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,
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2631,19 +2631,6 @@ static int mt7531_rgmii_setup(struct mt7
|
||||
@@ -2819,19 +2819,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,
|
||||
@@ -3010,51 +2997,21 @@ static void mt753x_phylink_get_caps(stru
|
||||
@@ -3198,51 +3185,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);
|
||||
@@ -3255,7 +3212,6 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3444,7 +3401,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,
|
||||
},
|
||||
@@ -3266,7 +3222,6 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3455,7 +3411,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,
|
||||
},
|
||||
@@ -3278,7 +3233,6 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3467,7 +3422,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,
|
||||
@@ -3340,7 +3294,6 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3529,7 +3483,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 ||
|
||||
|
||||
@@ -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"),
|
||||
@@ -2631,12 +2636,11 @@ static int mt7531_rgmii_setup(struct mt7
|
||||
@@ -2819,12 +2824,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. */
|
||||
@@ -2662,6 +2666,9 @@ mt7531_sgmii_link_up_force(struct dsa_sw
|
||||
@@ -2850,6 +2854,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)
|
||||
@@ -2737,9 +2744,10 @@ static int mt7531_sgmii_setup_mode_an(st
|
||||
@@ -2925,9 +2932,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 */
|
||||
@@ -2796,6 +2804,24 @@ mt753x_mac_config(struct dsa_switch *ds,
|
||||
@@ -2984,6 +2992,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)
|
||||
@@ -2857,17 +2883,6 @@ unsupported:
|
||||
@@ -3045,17 +3071,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)
|
||||
@@ -2877,16 +2892,13 @@ static void mt753x_phylink_mac_link_down
|
||||
@@ -3065,16 +3080,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,
|
||||
@@ -2899,8 +2911,6 @@ static void mt753x_phylink_mac_link_up(s
|
||||
@@ -3087,8 +3099,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
|
||||
@@ -2978,6 +2988,8 @@ mt7531_cpu_port_config(struct dsa_switch
|
||||
@@ -3166,6 +3176,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);
|
||||
|
||||
@@ -3017,16 +3029,13 @@ mt753x_phylink_validate(struct dsa_switc
|
||||
@@ -3205,16 +3217,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);
|
||||
@@ -3053,8 +3062,6 @@ mt7530_phylink_mac_link_state(struct dsa
|
||||
@@ -3241,8 +3250,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
|
||||
@@ -3096,32 +3103,49 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
|
||||
@@ -3284,32 +3291,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;
|
||||
@@ -3134,6 +3158,13 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3322,6 +3346,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;
|
||||
}
|
||||
|
||||
@@ -3195,9 +3226,8 @@ static const struct dsa_switch_ops mt753
|
||||
@@ -3384,9 +3415,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,
|
||||
@@ -3207,36 +3237,34 @@ static const struct dsa_switch_ops mt753
|
||||
@@ -3396,36 +3426,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>
|
||||
},
|
||||
};
|
||||
|
||||
@@ -3294,7 +3322,7 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3483,7 +3511,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
|
||||
@@ -768,6 +768,12 @@ static const char *p5_intf_modes(unsigne
|
||||
@@ -779,6 +779,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
|
||||
@@ -779,18 +785,14 @@ struct mt7530_priv;
|
||||
@@ -790,18 +796,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);
|
||||
@@ -801,15 +803,9 @@ struct mt753x_info {
|
||||
@@ -812,15 +814,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
|
||||
@@ -851,6 +847,7 @@ struct mt7530_priv {
|
||||
@@ -862,6 +858,7 @@ struct mt7530_priv {
|
||||
u8 mirror_tx;
|
||||
|
||||
struct mt7530_port ports[MT7530_NUM_PORTS];
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3008,25 +3008,16 @@ static void mt753x_phylink_get_caps(stru
|
||||
@@ -3196,25 +3196,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,
|
||||
@@ -3128,12 +3119,14 @@ static void mt7530_pcs_an_restart(struct
|
||||
@@ -3316,12 +3307,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,
|
||||
@@ -3225,7 +3218,6 @@ static const struct dsa_switch_ops mt753
|
||||
@@ -3414,7 +3407,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,
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3005,6 +3005,12 @@ static void mt753x_phylink_get_caps(stru
|
||||
@@ -3193,6 +3193,12 @@ static void mt753x_phylink_get_caps(stru
|
||||
config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
||||
MAC_10 | MAC_100 | MAC_1000FD;
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3143,9 +3143,16 @@ static int
|
||||
@@ -3331,9 +3331,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;
|
||||
|
||||
@@ -3157,13 +3164,6 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3345,13 +3352,6 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
if (ret && priv->irq)
|
||||
mt7530_free_irq_common(priv);
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -1589,11 +1589,11 @@ static void
|
||||
@@ -1771,11 +1771,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.
|
||||
@@ -1604,22 +1604,20 @@ mt7530_hw_vlan_add(struct mt7530_priv *p
|
||||
@@ -1786,22 +1786,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
|
||||
@@ -1638,11 +1636,7 @@ mt7530_hw_vlan_del(struct mt7530_priv *p
|
||||
@@ -1820,11 +1818,7 @@ mt7530_hw_vlan_del(struct mt7530_priv *p
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -1093,6 +1093,7 @@ static int
|
||||
@@ -1275,6 +1275,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);
|
||||
@@ -1101,7 +1102,11 @@ mt7530_port_enable(struct dsa_switch *ds
|
||||
@@ -1283,7 +1284,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);
|
||||
@@ -1249,7 +1254,8 @@ mt7530_port_bridge_join(struct dsa_switc
|
||||
@@ -1431,7 +1436,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);
|
||||
@@ -1326,9 +1332,12 @@ mt7530_port_set_vlan_unaware(struct dsa_
|
||||
@@ -1508,9 +1514,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));
|
||||
}
|
||||
}
|
||||
@@ -1378,6 +1387,7 @@ mt7530_port_bridge_leave(struct dsa_swit
|
||||
@@ -1560,6 +1569,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);
|
||||
@@ -1406,8 +1416,8 @@ mt7530_port_bridge_leave(struct dsa_swit
|
||||
@@ -1588,8 +1598,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
|
||||
@@ -1570,6 +1580,9 @@ static int
|
||||
@@ -1752,6 +1762,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
|
||||
@@ -1577,7 +1590,7 @@ mt7530_port_vlan_filtering(struct dsa_sw
|
||||
@@ -1759,7 +1772,7 @@ mt7530_port_vlan_filtering(struct dsa_sw
|
||||
* for becoming a VLAN-aware port.
|
||||
*/
|
||||
mt7530_port_set_vlan_aware(ds, port);
|
||||
|
||||
@@ -30,7 +30,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/dsa/dsa2.c
|
||||
+++ b/net/dsa/dsa2.c
|
||||
@@ -1034,6 +1034,8 @@ static int dsa_tree_setup_master(struct
|
||||
@@ -1056,6 +1056,8 @@ static int dsa_tree_setup_master(struct
|
||||
struct dsa_port *dp;
|
||||
int err;
|
||||
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
list_for_each_entry(dp, &dst->ports, list) {
|
||||
if (dsa_port_is_cpu(dp)) {
|
||||
err = dsa_master_setup(dp->master, dp);
|
||||
@@ -1042,6 +1044,8 @@ static int dsa_tree_setup_master(struct
|
||||
@@ -1064,6 +1066,8 @@ static int dsa_tree_setup_master(struct
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1049,9 +1053,13 @@ static void dsa_tree_teardown_master(str
|
||||
@@ -1071,9 +1075,13 @@ static void dsa_tree_teardown_master(str
|
||||
{
|
||||
struct dsa_port *dp;
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/dsa/dsa2.c
|
||||
+++ b/net/dsa/dsa2.c
|
||||
@@ -999,23 +999,28 @@ static void dsa_tree_teardown_switches(s
|
||||
@@ -1021,23 +1021,28 @@ static void dsa_tree_teardown_switches(s
|
||||
dsa_switch_teardown(dp->ds);
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1024,7 +1029,21 @@ static int dsa_tree_setup_switches(struc
|
||||
@@ -1046,7 +1051,21 @@ static int dsa_tree_setup_switches(struc
|
||||
teardown:
|
||||
dsa_tree_teardown_ports(dst);
|
||||
|
||||
@@ -89,7 +89,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -1111,10 +1130,14 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
@@ -1133,10 +1152,14 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
if (err)
|
||||
goto teardown_cpu_ports;
|
||||
|
||||
@@ -105,7 +105,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
err = dsa_tree_setup_lags(dst);
|
||||
if (err)
|
||||
goto teardown_master;
|
||||
@@ -1127,8 +1150,9 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
@@ -1149,8 +1172,9 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
|
||||
teardown_master:
|
||||
dsa_tree_teardown_master(dst);
|
||||
|
||||
@@ -43,7 +43,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/dsa/dsa2.c
|
||||
+++ b/net/dsa/dsa2.c
|
||||
@@ -545,6 +545,7 @@ static void dsa_port_teardown(struct dsa
|
||||
@@ -567,6 +567,7 @@ static void dsa_port_teardown(struct dsa
|
||||
struct devlink_port *dlp = &dp->devlink_port;
|
||||
struct dsa_switch *ds = dp->ds;
|
||||
struct dsa_mac_addr *a, *tmp;
|
||||
@@ -51,7 +51,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
if (!dp->setup)
|
||||
return;
|
||||
@@ -566,9 +567,11 @@ static void dsa_port_teardown(struct dsa
|
||||
@@ -588,9 +589,11 @@ static void dsa_port_teardown(struct dsa
|
||||
dsa_port_link_unregister_of(dp);
|
||||
break;
|
||||
case DSA_PORT_TYPE_USER:
|
||||
@@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1130,17 +1133,17 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
@@ -1152,17 +1155,17 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
if (err)
|
||||
goto teardown_cpu_ports;
|
||||
|
||||
@@ -87,7 +87,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
dst->setup = true;
|
||||
|
||||
@@ -1148,10 +1151,10 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
@@ -1170,10 +1173,10 @@ static int dsa_tree_setup(struct dsa_swi
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -100,7 +100,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
teardown_switches:
|
||||
dsa_tree_teardown_switches(dst);
|
||||
teardown_cpu_ports:
|
||||
@@ -1169,10 +1172,10 @@ static void dsa_tree_teardown(struct dsa
|
||||
@@ -1191,10 +1194,10 @@ static void dsa_tree_teardown(struct dsa
|
||||
|
||||
dsa_tree_teardown_lags(dst);
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static inline bool dsa_is_unused_port(struct dsa_switch *ds, int p)
|
||||
{
|
||||
return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_UNUSED;
|
||||
@@ -949,6 +959,13 @@ struct dsa_switch_ops {
|
||||
@@ -957,6 +967,13 @@ struct dsa_switch_ops {
|
||||
int (*tag_8021q_vlan_add)(struct dsa_switch *ds, int port, u16 vid,
|
||||
u16 flags);
|
||||
int (*tag_8021q_vlan_del)(struct dsa_switch *ds, int port, u16 vid);
|
||||
@@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
#define DSA_DEVLINK_PARAM_DRIVER(_id, _name, _type, _cmodes) \
|
||||
--- a/net/dsa/dsa2.c
|
||||
+++ b/net/dsa/dsa2.c
|
||||
@@ -1275,6 +1275,52 @@ out_unlock:
|
||||
@@ -1297,6 +1297,52 @@ out_unlock:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
#include "dsa_priv.h"
|
||||
|
||||
@@ -1060,9 +1061,18 @@ static int dsa_tree_setup_master(struct
|
||||
@@ -1082,9 +1083,18 @@ static int dsa_tree_setup_master(struct
|
||||
|
||||
list_for_each_entry(dp, &dst->ports, list) {
|
||||
if (dsa_port_is_cpu(dp)) {
|
||||
@@ -64,7 +64,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1077,9 +1087,19 @@ static void dsa_tree_teardown_master(str
|
||||
@@ -1099,9 +1109,19 @@ static void dsa_tree_teardown_master(str
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2791,9 +2791,6 @@ mt7531_mac_config(struct dsa_switch *ds,
|
||||
@@ -2979,9 +2979,6 @@ mt7531_mac_config(struct dsa_switch *ds,
|
||||
case PHY_INTERFACE_MODE_NA:
|
||||
case PHY_INTERFACE_MODE_1000BASEX:
|
||||
case PHY_INTERFACE_MODE_2500BASEX:
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
return mt7531_sgmii_setup_mode_force(priv, port, interface);
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -2869,13 +2866,6 @@ unsupported:
|
||||
@@ -3057,13 +3054,6 @@ unsupported:
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mcr_cur = mt7530_read(priv, MT7530_PMCR_P(port));
|
||||
mcr_new = mcr_cur;
|
||||
mcr_new &= ~PMCR_LINK_SETTINGS_MASK;
|
||||
@@ -3012,6 +3002,9 @@ static void mt753x_phylink_get_caps(stru
|
||||
@@ -3200,6 +3190,9 @@ static void mt753x_phylink_get_caps(stru
|
||||
config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
||||
MAC_10 | MAC_100 | MAC_1000FD;
|
||||
|
||||
@@ -53,7 +53,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* This driver does not make use of the speed, duplex, pause or the
|
||||
* advertisement in its mac_config, so it is safe to mark this driver
|
||||
* as non-legacy.
|
||||
@@ -3077,6 +3070,7 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
|
||||
@@ -3265,6 +3258,7 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
|
||||
|
||||
status = mt7530_read(priv, MT7531_PCS_CONTROL_1(port));
|
||||
state->link = !!(status & MT7531_SGMII_LINK_STATUS);
|
||||
@@ -61,7 +61,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
if (state->interface == PHY_INTERFACE_MODE_SGMII &&
|
||||
(status & MT7531_SGMII_AN_ENABLE)) {
|
||||
val = mt7530_read(priv, MT7531_PCS_SPEED_ABILITY(port));
|
||||
@@ -3107,16 +3101,44 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
|
||||
@@ -3295,16 +3289,44 @@ mt7531_sgmii_pcs_get_state_an(struct mt7
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
|
||||
static int mt753x_pcs_config(struct phylink_pcs *pcs, unsigned int mode,
|
||||
@@ -3157,6 +3179,8 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3345,6 +3367,8 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
priv->pcs[i].pcs.ops = priv->info->pcs_ops;
|
||||
priv->pcs[i].priv = priv;
|
||||
priv->pcs[i].port = i;
|
||||
@@ -120,7 +120,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
ret = priv->info->sw_setup(ds);
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -400,6 +400,7 @@ enum mt7530_vlan_port_acc_frm {
|
||||
@@ -410,6 +410,7 @@ enum mt7530_vlan_port_acc_frm {
|
||||
#define MT7531_SGMII_LINK_STATUS BIT(18)
|
||||
#define MT7531_SGMII_AN_ENABLE BIT(12)
|
||||
#define MT7531_SGMII_AN_RESTART BIT(9)
|
||||
|
||||
@@ -81,7 +81,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
#include <linux/phylink.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
@@ -2643,128 +2644,11 @@ static int mt7531_rgmii_setup(struct mt7
|
||||
@@ -2831,128 +2832,11 @@ static int mt7531_rgmii_setup(struct mt7
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
static int
|
||||
mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
@@ -2787,11 +2671,11 @@ mt7531_mac_config(struct dsa_switch *ds,
|
||||
@@ -2975,11 +2859,11 @@ mt7531_mac_config(struct dsa_switch *ds,
|
||||
phydev = dp->slave->phydev;
|
||||
return mt7531_rgmii_setup(priv, port, interface, phydev);
|
||||
case PHY_INTERFACE_MODE_SGMII:
|
||||
@@ -224,7 +224,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -2816,11 +2700,11 @@ mt753x_phylink_mac_select_pcs(struct dsa
|
||||
@@ -3004,11 +2888,11 @@ mt753x_phylink_mac_select_pcs(struct dsa
|
||||
|
||||
switch (interface) {
|
||||
case PHY_INTERFACE_MODE_TRGMII:
|
||||
@@ -238,7 +238,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
@@ -3061,86 +2945,6 @@ static void mt7530_pcs_get_state(struct
|
||||
@@ -3249,86 +3133,6 @@ static void mt7530_pcs_get_state(struct
|
||||
state->pause |= MLO_PAUSE_TX;
|
||||
}
|
||||
|
||||
@@ -325,7 +325,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
static int mt753x_pcs_config(struct phylink_pcs *pcs, unsigned int mode,
|
||||
phy_interface_t interface,
|
||||
const unsigned long *advertising,
|
||||
@@ -3160,18 +2964,57 @@ static const struct phylink_pcs_ops mt75
|
||||
@@ -3348,18 +3152,57 @@ static const struct phylink_pcs_ops mt75
|
||||
.pcs_an_restart = mt7530_pcs_an_restart,
|
||||
};
|
||||
|
||||
@@ -389,7 +389,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
int i, ret;
|
||||
|
||||
/* Initialise the PCS devices */
|
||||
@@ -3179,8 +3022,6 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3367,8 +3210,6 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
priv->pcs[i].pcs.ops = priv->info->pcs_ops;
|
||||
priv->pcs[i].priv = priv;
|
||||
priv->pcs[i].port = i;
|
||||
@@ -398,7 +398,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
}
|
||||
|
||||
ret = priv->info->sw_setup(ds);
|
||||
@@ -3195,6 +3036,16 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3383,6 +3224,16 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
if (ret && priv->irq)
|
||||
mt7530_free_irq_common(priv);
|
||||
|
||||
@@ -415,7 +415,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -3286,7 +3137,7 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3475,7 +3326,7 @@ static const struct mt753x_info mt753x_t
|
||||
},
|
||||
[ID_MT7531] = {
|
||||
.id = ID_MT7531,
|
||||
@@ -424,7 +424,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
.sw_setup = mt7531_setup,
|
||||
.phy_read = mt7531_ind_phy_read,
|
||||
.phy_write = mt7531_ind_phy_write,
|
||||
@@ -3394,7 +3245,7 @@ static void
|
||||
@@ -3583,7 +3434,7 @@ static void
|
||||
mt7530_remove(struct mdio_device *mdiodev)
|
||||
{
|
||||
struct mt7530_priv *priv = dev_get_drvdata(&mdiodev->dev);
|
||||
@@ -433,7 +433,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
|
||||
if (!priv)
|
||||
return;
|
||||
@@ -3413,6 +3264,10 @@ mt7530_remove(struct mdio_device *mdiode
|
||||
@@ -3602,6 +3453,10 @@ mt7530_remove(struct mdio_device *mdiode
|
||||
mt7530_free_irq(priv);
|
||||
|
||||
dsa_unregister_switch(priv->ds);
|
||||
@@ -446,7 +446,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
dev_set_drvdata(&mdiodev->dev, NULL);
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -391,47 +391,8 @@ enum mt7530_vlan_port_acc_frm {
|
||||
@@ -401,47 +401,8 @@ enum mt7530_vlan_port_acc_frm {
|
||||
CCR_TX_OCT_CNT_BAD)
|
||||
|
||||
/* MT7531 SGMII register group */
|
||||
@@ -496,7 +496,7 @@ Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
|
||||
/* Register for system reset */
|
||||
#define MT7530_SYS_CTRL 0x7000
|
||||
@@ -730,13 +691,13 @@ struct mt7530_fdb {
|
||||
@@ -741,13 +702,13 @@ struct mt7530_fdb {
|
||||
* @pm: The matrix used to show all connections with the port.
|
||||
* @pvid: The VLAN specified is to be considered a PVID at ingress. Any
|
||||
* untagged frames will be assigned to the related VLAN.
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2996,26 +2996,56 @@ static const struct regmap_bus mt7531_re
|
||||
@@ -3184,26 +3184,56 @@ static const struct regmap_bus mt7531_re
|
||||
.reg_update_bits = mt7530_regmap_update_bits,
|
||||
};
|
||||
|
||||
@@ -88,7 +88,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
int i, ret;
|
||||
|
||||
/* Initialise the PCS devices */
|
||||
@@ -3037,15 +3067,11 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3225,15 +3255,11 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
if (ret && priv->irq)
|
||||
mt7530_free_irq_common(priv);
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2969,7 +2969,7 @@ static int mt7530_regmap_read(void *cont
|
||||
@@ -3157,7 +3157,7 @@ static int mt7530_regmap_read(void *cont
|
||||
{
|
||||
struct mt7530_priv *priv = context;
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
return 0;
|
||||
};
|
||||
|
||||
@@ -2977,23 +2977,25 @@ static int mt7530_regmap_write(void *con
|
||||
@@ -3165,23 +3165,25 @@ static int mt7530_regmap_write(void *con
|
||||
{
|
||||
struct mt7530_priv *priv = context;
|
||||
|
||||
@@ -62,7 +62,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -3019,6 +3021,9 @@ mt7531_create_sgmii(struct mt7530_priv *
|
||||
@@ -3207,6 +3209,9 @@ mt7531_create_sgmii(struct mt7530_priv *
|
||||
mt7531_pcs_config[i]->reg_stride = 4;
|
||||
mt7531_pcs_config[i]->reg_base = MT7531_SGMII_REG_BASE(5 + i);
|
||||
mt7531_pcs_config[i]->max_register = 0x17c;
|
||||
|
||||
@@ -133,7 +133,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2965,22 +2986,6 @@ static const struct phylink_pcs_ops mt75
|
||||
@@ -3153,22 +3174,6 @@ static const struct phylink_pcs_ops mt75
|
||||
.pcs_an_restart = mt7530_pcs_an_restart,
|
||||
};
|
||||
|
||||
@@ -156,7 +156,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static void
|
||||
mt7530_mdio_regmap_lock(void *mdio_lock)
|
||||
{
|
||||
@@ -2993,7 +2998,7 @@ mt7530_mdio_regmap_unlock(void *mdio_loc
|
||||
@@ -3181,7 +3186,7 @@ mt7530_mdio_regmap_unlock(void *mdio_loc
|
||||
mutex_unlock(mdio_lock);
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
.reg_write = mt7530_regmap_write,
|
||||
.reg_read = mt7530_regmap_read,
|
||||
};
|
||||
@@ -3026,7 +3031,7 @@ mt7531_create_sgmii(struct mt7530_priv *
|
||||
@@ -3214,7 +3219,7 @@ mt7531_create_sgmii(struct mt7530_priv *
|
||||
mt7531_pcs_config[i]->lock_arg = &priv->bus->mdio_lock;
|
||||
|
||||
regmap = devm_regmap_init(priv->dev,
|
||||
@@ -174,7 +174,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mt7531_pcs_config[i]);
|
||||
if (IS_ERR(regmap)) {
|
||||
ret = PTR_ERR(regmap);
|
||||
@@ -3191,6 +3196,7 @@ MODULE_DEVICE_TABLE(of, mt7530_of_match)
|
||||
@@ -3380,6 +3385,7 @@ MODULE_DEVICE_TABLE(of, mt7530_of_match)
|
||||
static int
|
||||
mt7530_probe(struct mdio_device *mdiodev)
|
||||
{
|
||||
@@ -182,7 +182,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
struct mt7530_priv *priv;
|
||||
struct device_node *dn;
|
||||
|
||||
@@ -3270,6 +3276,21 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3459,6 +3465,21 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
mutex_init(&priv->reg_mutex);
|
||||
dev_set_drvdata(&mdiodev->dev, priv);
|
||||
|
||||
@@ -206,7 +206,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -774,6 +774,7 @@ struct mt753x_info {
|
||||
@@ -785,6 +785,7 @@ struct mt753x_info {
|
||||
* @dev: The device pointer
|
||||
* @ds: The pointer to the dsa core structure
|
||||
* @bus: The bus used for the device and built-in PHY
|
||||
@@ -214,7 +214,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
* @rstc: The pointer to reset control used by MCM
|
||||
* @core_pwr: The power supplied into the core
|
||||
* @io_pwr: The power supplied into the I/O
|
||||
@@ -794,6 +795,7 @@ struct mt7530_priv {
|
||||
@@ -805,6 +806,7 @@ struct mt7530_priv {
|
||||
struct device *dev;
|
||||
struct dsa_switch *ds;
|
||||
struct mii_bus *bus;
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3077,12 +3077,6 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3265,12 +3265,6 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
if (ret && priv->irq)
|
||||
mt7530_free_irq_common(priv);
|
||||
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -3199,6 +3193,7 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3388,6 +3382,7 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
static struct regmap_config *regmap_config;
|
||||
struct mt7530_priv *priv;
|
||||
struct device_node *dn;
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
dn = mdiodev->dev.of_node;
|
||||
|
||||
@@ -3291,6 +3286,12 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3480,6 +3475,12 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
if (IS_ERR(priv->regmap))
|
||||
return PTR_ERR(priv->regmap);
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -646,14 +650,13 @@ static int
|
||||
@@ -660,14 +664,13 @@ static int
|
||||
mt7531_ind_c45_phy_read(struct mt7530_priv *priv, int port, int devad,
|
||||
int regnum)
|
||||
{
|
||||
@@ -130,7 +130,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
|
||||
!(val & MT7531_PHY_ACS_ST), 20, 100000);
|
||||
@@ -686,7 +689,7 @@ mt7531_ind_c45_phy_read(struct mt7530_pr
|
||||
@@ -700,7 +703,7 @@ mt7531_ind_c45_phy_read(struct mt7530_pr
|
||||
|
||||
ret = val & MT7531_MDIO_RW_DATA_MASK;
|
||||
out:
|
||||
@@ -139,7 +139,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -695,14 +698,13 @@ static int
|
||||
@@ -709,14 +712,13 @@ static int
|
||||
mt7531_ind_c45_phy_write(struct mt7530_priv *priv, int port, int devad,
|
||||
int regnum, u32 data)
|
||||
{
|
||||
@@ -155,7 +155,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
|
||||
!(val & MT7531_PHY_ACS_ST), 20, 100000);
|
||||
@@ -734,7 +736,7 @@ mt7531_ind_c45_phy_write(struct mt7530_p
|
||||
@@ -748,7 +750,7 @@ mt7531_ind_c45_phy_write(struct mt7530_p
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -164,7 +164,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -742,14 +744,13 @@ out:
|
||||
@@ -756,14 +758,13 @@ out:
|
||||
static int
|
||||
mt7531_ind_c22_phy_read(struct mt7530_priv *priv, int port, int regnum)
|
||||
{
|
||||
@@ -180,7 +180,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
|
||||
!(val & MT7531_PHY_ACS_ST), 20, 100000);
|
||||
@@ -772,7 +773,7 @@ mt7531_ind_c22_phy_read(struct mt7530_pr
|
||||
@@ -786,7 +787,7 @@ mt7531_ind_c22_phy_read(struct mt7530_pr
|
||||
|
||||
ret = val & MT7531_MDIO_RW_DATA_MASK;
|
||||
out:
|
||||
@@ -189,7 +189,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -781,14 +782,13 @@ static int
|
||||
@@ -795,14 +796,13 @@ static int
|
||||
mt7531_ind_c22_phy_write(struct mt7530_priv *priv, int port, int regnum,
|
||||
u16 data)
|
||||
{
|
||||
@@ -205,7 +205,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
ret = readx_poll_timeout(_mt7530_unlocked_read, &p, reg,
|
||||
!(reg & MT7531_PHY_ACS_ST), 20, 100000);
|
||||
@@ -810,7 +810,7 @@ mt7531_ind_c22_phy_write(struct mt7530_p
|
||||
@@ -824,7 +824,7 @@ mt7531_ind_c22_phy_write(struct mt7530_p
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -214,7 +214,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1162,7 +1162,6 @@ static int
|
||||
@@ -1344,7 +1344,6 @@ static int
|
||||
mt7530_port_change_mtu(struct dsa_switch *ds, int port, int new_mtu)
|
||||
{
|
||||
struct mt7530_priv *priv = ds->priv;
|
||||
@@ -222,7 +222,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
int length;
|
||||
u32 val;
|
||||
|
||||
@@ -1173,7 +1172,7 @@ mt7530_port_change_mtu(struct dsa_switch
|
||||
@@ -1355,7 +1354,7 @@ mt7530_port_change_mtu(struct dsa_switch
|
||||
if (!dsa_is_cpu_port(ds, port))
|
||||
return 0;
|
||||
|
||||
@@ -231,7 +231,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
val = mt7530_mii_read(priv, MT7530_GMACCR);
|
||||
val &= ~MAX_RX_PKT_LEN_MASK;
|
||||
@@ -1194,7 +1193,7 @@ mt7530_port_change_mtu(struct dsa_switch
|
||||
@@ -1376,7 +1375,7 @@ mt7530_port_change_mtu(struct dsa_switch
|
||||
|
||||
mt7530_mii_write(priv, MT7530_GMACCR, val);
|
||||
|
||||
@@ -240,7 +240,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1990,10 +1989,10 @@ mt7530_irq_thread_fn(int irq, void *dev_
|
||||
@@ -2172,10 +2171,10 @@ mt7530_irq_thread_fn(int irq, void *dev_
|
||||
u32 val;
|
||||
int p;
|
||||
|
||||
@@ -253,7 +253,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
for (p = 0; p < MT7530_NUM_PHYS; p++) {
|
||||
if (BIT(p) & val) {
|
||||
@@ -2029,7 +2028,7 @@ mt7530_irq_bus_lock(struct irq_data *d)
|
||||
@@ -2211,7 +2210,7 @@ mt7530_irq_bus_lock(struct irq_data *d)
|
||||
{
|
||||
struct mt7530_priv *priv = irq_data_get_irq_chip_data(d);
|
||||
|
||||
@@ -262,7 +262,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2038,7 +2037,7 @@ mt7530_irq_bus_sync_unlock(struct irq_da
|
||||
@@ -2220,7 +2219,7 @@ mt7530_irq_bus_sync_unlock(struct irq_da
|
||||
struct mt7530_priv *priv = irq_data_get_irq_chip_data(d);
|
||||
|
||||
mt7530_mii_write(priv, MT7530_SYS_INT_EN, priv->irq_enable);
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -951,6 +951,24 @@ mt7530_set_ageing_time(struct dsa_switch
|
||||
@@ -965,6 +965,24 @@ mt7530_set_ageing_time(struct dsa_switch
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
struct mt7530_priv *priv = ds->priv;
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -709,24 +709,6 @@ enum p5_interface_select {
|
||||
@@ -720,24 +720,6 @@ enum p5_interface_select {
|
||||
P5_INTF_SEL_GMAC5_SGMII,
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3205,44 +3205,21 @@ static const struct of_device_id mt7530_
|
||||
@@ -3394,44 +3394,21 @@ static const struct of_device_id mt7530_
|
||||
MODULE_DEVICE_TABLE(of, mt7530_of_match);
|
||||
|
||||
static int
|
||||
@@ -67,7 +67,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
if (!priv->info)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -3256,23 +3233,53 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3445,23 +3422,53 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
return -EINVAL;
|
||||
|
||||
priv->id = priv->info->id;
|
||||
@@ -131,7 +131,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
priv->reset = devm_gpiod_get_optional(&mdiodev->dev, "reset",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR(priv->reset)) {
|
||||
@@ -3281,12 +3288,15 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3470,12 +3477,15 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3323,6 +3323,17 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
@@ -3512,6 +3512,17 @@ mt7530_probe(struct mdio_device *mdiodev
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mt7530_remove(struct mdio_device *mdiodev)
|
||||
{
|
||||
struct mt7530_priv *priv = dev_get_drvdata(&mdiodev->dev);
|
||||
@@ -3341,16 +3352,11 @@ mt7530_remove(struct mdio_device *mdiode
|
||||
@@ -3530,16 +3541,11 @@ mt7530_remove(struct mdio_device *mdiode
|
||||
dev_err(priv->dev, "Failed to disable io pwr: %d\n",
|
||||
ret);
|
||||
|
||||
|
||||
@@ -416,7 +416,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static u32
|
||||
mt7530_mii_read(struct mt7530_priv *priv, u32 reg)
|
||||
{
|
||||
@@ -3003,72 +2954,6 @@ static const struct phylink_pcs_ops mt75
|
||||
@@ -3191,72 +3142,6 @@ static const struct phylink_pcs_ops mt75
|
||||
.pcs_an_restart = mt7530_pcs_an_restart,
|
||||
};
|
||||
|
||||
@@ -489,7 +489,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static int
|
||||
mt753x_setup(struct dsa_switch *ds)
|
||||
{
|
||||
@@ -3127,7 +3012,7 @@ static int mt753x_set_mac_eee(struct dsa
|
||||
@@ -3315,7 +3200,7 @@ static int mt753x_set_mac_eee(struct dsa
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -497,8 +497,8 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
+const struct dsa_switch_ops mt7530_switch_ops = {
|
||||
.get_tag_protocol = mtk_get_tag_protocol,
|
||||
.setup = mt753x_setup,
|
||||
.get_strings = mt7530_get_strings,
|
||||
@@ -3161,8 +3046,9 @@ static const struct dsa_switch_ops mt753
|
||||
.preferred_default_local_cpu_port = mt753x_preferred_default_local_cpu_port,
|
||||
@@ -3350,8 +3235,9 @@ static const struct dsa_switch_ops mt753
|
||||
.get_mac_eee = mt753x_get_mac_eee,
|
||||
.set_mac_eee = mt753x_set_mac_eee,
|
||||
};
|
||||
@@ -509,7 +509,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
[ID_MT7621] = {
|
||||
.id = ID_MT7621,
|
||||
.pcs_ops = &mt7530_pcs_ops,
|
||||
@@ -3195,16 +3081,9 @@ static const struct mt753x_info mt753x_t
|
||||
@@ -3384,16 +3270,9 @@ static const struct mt753x_info mt753x_t
|
||||
.mac_port_config = mt7531_mac_config,
|
||||
},
|
||||
};
|
||||
@@ -528,7 +528,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mt7530_probe_common(struct mt7530_priv *priv)
|
||||
{
|
||||
struct device *dev = priv->dev;
|
||||
@@ -3241,88 +3120,9 @@ mt7530_probe_common(struct mt7530_priv *
|
||||
@@ -3430,88 +3309,9 @@ mt7530_probe_common(struct mt7530_priv *
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -619,7 +619,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mt7530_remove_common(struct mt7530_priv *priv)
|
||||
{
|
||||
if (priv->irq)
|
||||
@@ -3333,57 +3133,6 @@ mt7530_remove_common(struct mt7530_priv
|
||||
@@ -3522,57 +3322,6 @@ mt7530_remove_common(struct mt7530_priv
|
||||
mutex_destroy(&priv->reg_mutex);
|
||||
}
|
||||
|
||||
@@ -679,7 +679,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
MODULE_LICENSE("GPL");
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -834,4 +834,10 @@ static inline void INIT_MT7530_DUMMY_POL
|
||||
@@ -845,4 +845,10 @@ static inline void INIT_MT7530_DUMMY_POL
|
||||
p->reg = reg;
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
+MODULE_LICENSE("GPL");
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2037,6 +2037,47 @@ static const struct irq_domain_ops mt753
|
||||
@@ -2219,6 +2219,47 @@ static const struct irq_domain_ops mt753
|
||||
};
|
||||
|
||||
static void
|
||||
@@ -232,7 +232,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mt7530_setup_mdio_irq(struct mt7530_priv *priv)
|
||||
{
|
||||
struct dsa_switch *ds = priv->ds;
|
||||
@@ -2070,8 +2111,15 @@ mt7530_setup_irq(struct mt7530_priv *pri
|
||||
@@ -2252,8 +2293,15 @@ mt7530_setup_irq(struct mt7530_priv *pri
|
||||
return priv->irq ? : -EINVAL;
|
||||
}
|
||||
|
||||
@@ -250,7 +250,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
if (!priv->irq_domain) {
|
||||
dev_err(dev, "failed to create IRQ domain\n");
|
||||
return -ENOMEM;
|
||||
@@ -2566,6 +2614,25 @@ static void mt7531_mac_port_get_caps(str
|
||||
@@ -2754,6 +2802,25 @@ static void mt7531_mac_port_get_caps(str
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,7 +276,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static int
|
||||
mt753x_pad_setup(struct dsa_switch *ds, const struct phylink_link_state *state)
|
||||
{
|
||||
@@ -2642,6 +2709,17 @@ static bool mt753x_is_mac_port(u32 port)
|
||||
@@ -2830,6 +2897,17 @@ static bool mt753x_is_mac_port(u32 port)
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -294,7 +294,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
@@ -2711,7 +2789,8 @@ mt753x_phylink_mac_config(struct dsa_swi
|
||||
@@ -2899,7 +2977,8 @@ mt753x_phylink_mac_config(struct dsa_swi
|
||||
|
||||
switch (port) {
|
||||
case 0 ... 4: /* Internal phy */
|
||||
@@ -304,7 +304,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
goto unsupported;
|
||||
break;
|
||||
case 5: /* 2nd cpu port with phy of port 0 or 4 / external phy */
|
||||
@@ -2789,7 +2868,8 @@ static void mt753x_phylink_mac_link_up(s
|
||||
@@ -2977,7 +3056,8 @@ static void mt753x_phylink_mac_link_up(s
|
||||
/* MT753x MAC works in 1G full duplex mode for all up-clocked
|
||||
* variants.
|
||||
*/
|
||||
@@ -314,7 +314,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(phy_interface_mode_is_8023z(interface))) {
|
||||
speed = SPEED_1000;
|
||||
duplex = DUPLEX_FULL;
|
||||
@@ -2869,6 +2949,21 @@ mt7531_cpu_port_config(struct dsa_switch
|
||||
@@ -3057,6 +3137,21 @@ mt7531_cpu_port_config(struct dsa_switch
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -336,7 +336,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
|
||||
struct phylink_config *config)
|
||||
{
|
||||
@@ -3014,6 +3109,27 @@ static int mt753x_set_mac_eee(struct dsa
|
||||
@@ -3202,6 +3297,27 @@ static int mt753x_set_mac_eee(struct dsa
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -364,7 +364,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
const struct dsa_switch_ops mt7530_switch_ops = {
|
||||
.get_tag_protocol = mtk_get_tag_protocol,
|
||||
.setup = mt753x_setup,
|
||||
@@ -3082,6 +3198,17 @@ const struct mt753x_info mt753x_table[]
|
||||
@@ -3271,6 +3387,17 @@ const struct mt753x_info mt753x_table[]
|
||||
.mac_port_get_caps = mt7531_mac_port_get_caps,
|
||||
.mac_port_config = mt7531_mac_config,
|
||||
},
|
||||
@@ -392,9 +392,9 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
};
|
||||
|
||||
#define NUM_TRGMII_CTRL 5
|
||||
@@ -54,11 +55,11 @@ enum mt753x_id {
|
||||
#define MT7531_MIRROR_PORT_SET(x) (((x) & MIRROR_MASK) << 16)
|
||||
@@ -59,11 +60,11 @@ enum mt753x_id {
|
||||
#define MT7531_CPU_PMAP_MASK GENMASK(7, 0)
|
||||
#define MT7531_CPU_PMAP(x) FIELD_PREP(MT7531_CPU_PMAP_MASK, x)
|
||||
|
||||
-#define MT753X_MIRROR_REG(id) (((id) == ID_MT7531) ? \
|
||||
+#define MT753X_MIRROR_REG(id) ((((id) == ID_MT7531) || ((id) == ID_MT7988)) ? \
|
||||
@@ -407,7 +407,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
MT7531_MIRROR_MASK : MIRROR_MASK)
|
||||
|
||||
/* Registers for BPDU and PAE frame control*/
|
||||
@@ -322,9 +323,8 @@ enum mt7530_vlan_port_acc_frm {
|
||||
@@ -332,9 +333,8 @@ enum mt7530_vlan_port_acc_frm {
|
||||
MT7531_FORCE_DPX | \
|
||||
MT7531_FORCE_RX_FC | \
|
||||
MT7531_FORCE_TX_FC)
|
||||
|
||||
@@ -73,7 +73,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -3076,6 +3076,12 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
@@ -3264,6 +3264,12 @@ mt753x_setup(struct dsa_switch *ds)
|
||||
if (ret && priv->irq)
|
||||
mt7530_free_irq_common(priv);
|
||||
|
||||
@@ -88,7 +88,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -768,10 +768,10 @@ struct mt753x_info {
|
||||
@@ -779,10 +779,10 @@ struct mt753x_info {
|
||||
* registers
|
||||
* @p6_interface Holding the current port 6 interface
|
||||
* @p5_intf_sel: Holding the current port 5 interface select
|
||||
@@ -100,7 +100,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
*/
|
||||
struct mt7530_priv {
|
||||
struct device *dev;
|
||||
@@ -790,7 +790,6 @@ struct mt7530_priv {
|
||||
@@ -801,7 +801,6 @@ struct mt7530_priv {
|
||||
unsigned int p5_intf_sel;
|
||||
u8 mirror_rx;
|
||||
u8 mirror_tx;
|
||||
@@ -108,7 +108,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct mt7530_port ports[MT7530_NUM_PORTS];
|
||||
struct mt753x_pcs pcs[MT7530_NUM_PORTS];
|
||||
/* protect among processes for registers access*/
|
||||
@@ -798,6 +797,7 @@ struct mt7530_priv {
|
||||
@@ -809,6 +808,7 @@ struct mt7530_priv {
|
||||
int irq;
|
||||
struct irq_domain *irq_domain;
|
||||
u32 irq_enable;
|
||||
|
||||
@@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
ax88179_reset(dev);
|
||||
|
||||
@@ -1507,17 +1508,19 @@ ax88179_tx_fixup(struct usbnet *dev, str
|
||||
@@ -1502,17 +1503,19 @@ ax88179_tx_fixup(struct usbnet *dev, str
|
||||
{
|
||||
u32 tx_hdr1, tx_hdr2;
|
||||
int frame_size = dev->maxpacket;
|
||||
@@ -57,7 +57,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
if ((skb_header_cloned(skb) || headroom < 0) &&
|
||||
pskb_expand_head(skb, headroom < 0 ? 8 : 0, 0, GFP_ATOMIC)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
@@ -1528,6 +1531,8 @@ ax88179_tx_fixup(struct usbnet *dev, str
|
||||
@@ -1523,6 +1526,8 @@ ax88179_tx_fixup(struct usbnet *dev, str
|
||||
put_unaligned_le32(tx_hdr1, ptr);
|
||||
put_unaligned_le32(tx_hdr2, ptr + 4);
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -2287,6 +2287,23 @@ struct btmtk_section_map {
|
||||
@@ -2289,6 +2289,23 @@ struct btmtk_section_map {
|
||||
};
|
||||
} __packed;
|
||||
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
static void btusb_mtk_wmt_recv(struct urb *urb)
|
||||
{
|
||||
struct hci_dev *hdev = urb->context;
|
||||
@@ -3941,6 +3958,7 @@ static int btusb_probe(struct usb_interf
|
||||
@@ -3943,6 +3960,7 @@ static int btusb_probe(struct usb_interf
|
||||
hdev->shutdown = btusb_mtk_shutdown;
|
||||
hdev->manufacturer = 70;
|
||||
hdev->cmd_timeout = btusb_mtk_cmd_timeout;
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -2292,7 +2292,7 @@ static int btusb_set_bdaddr_mtk(struct h
|
||||
@@ -2294,7 +2294,7 @@ static int btusb_set_bdaddr_mtk(struct h
|
||||
struct sk_buff *skb;
|
||||
long ret;
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -476,6 +476,9 @@ static const struct usb_device_id blackl
|
||||
@@ -478,6 +478,9 @@ static const struct usb_device_id blackl
|
||||
{ USB_DEVICE(0x13d3, 0x3564), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH |
|
||||
BTUSB_VALID_LE_STATES },
|
||||
|
||||
@@ -56,7 +56,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -467,6 +467,9 @@ static const struct usb_device_id blackl
|
||||
@@ -469,6 +469,9 @@ static const struct usb_device_id blackl
|
||||
BTUSB_VALID_LE_STATES },
|
||||
|
||||
/* Additional MediaTek MT7921 Bluetooth devices */
|
||||
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
||||
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -485,6 +485,9 @@ static const struct usb_device_id blackl
|
||||
@@ -487,6 +487,9 @@ static const struct usb_device_id blackl
|
||||
{ USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH |
|
||||
BTUSB_VALID_LE_STATES },
|
||||
|
||||
@@ -4340,6 +4340,7 @@ CONFIG_NF_CONNTRACK_PROCFS=y
|
||||
# CONFIG_NF_DUP_IPV4 is not set
|
||||
# CONFIG_NF_DUP_IPV6 is not set
|
||||
# CONFIG_NF_FLOW_TABLE is not set
|
||||
# CONFIG_NF_FLOW_TABLE_PROCFS is not set
|
||||
# CONFIG_NF_LOG_ARP is not set
|
||||
# CONFIG_NF_LOG_BRIDGE is not set
|
||||
# CONFIG_NF_LOG_IPV4 is not set
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on NETFILTER_ADVANCED
|
||||
help
|
||||
H.323 is a VoIP signalling protocol from ITU-T. As one of the most
|
||||
@@ -1105,7 +1104,6 @@ config NETFILTER_XT_TARGET_SECMARK
|
||||
@@ -1114,7 +1113,6 @@ config NETFILTER_XT_TARGET_SECMARK
|
||||
|
||||
config NETFILTER_XT_TARGET_TCPMSS
|
||||
tristate '"TCPMSS" target support'
|
||||
|
||||
@@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
This option adds the flow table core infrastructure.
|
||||
|
||||
@@ -1010,6 +1009,15 @@ config NETFILTER_XT_TARGET_NOTRACK
|
||||
@@ -1019,6 +1018,15 @@ config NETFILTER_XT_TARGET_NOTRACK
|
||||
depends on NETFILTER_ADVANCED
|
||||
select NETFILTER_XT_TARGET_CT
|
||||
|
||||
@@ -88,7 +88,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on NETFILTER_ADVANCED
|
||||
--- a/net/netfilter/Makefile
|
||||
+++ b/net/netfilter/Makefile
|
||||
@@ -143,6 +143,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CLASSIF
|
||||
@@ -144,6 +144,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CLASSIF
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_CONNSECMARK) += xt_CONNSECMARK.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += xt_CT.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
|
||||
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
|
||||
--- /dev/null
|
||||
+++ b/net/netfilter/xt_FLOWOFFLOAD.c
|
||||
@@ -0,0 +1,701 @@
|
||||
@@ -0,0 +1,702 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2018-2021 Felix Fietkau <nbd@nbd.name>
|
||||
+ *
|
||||
@@ -163,7 +163,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ proto = veth->h_vlan_encapsulated_proto;
|
||||
+ break;
|
||||
+ case htons(ETH_P_PPP_SES):
|
||||
+ proto = nf_flow_pppoe_proto(skb);
|
||||
+ if (!nf_flow_pppoe_proto(skb, &proto))
|
||||
+ return NF_ACCEPT;
|
||||
+ break;
|
||||
+ default:
|
||||
+ proto = skb->protocol;
|
||||
|
||||
@@ -43,7 +43,7 @@ Subject: [PATCH] net/usb/qmi_wwan: add MeigLink modem support
|
||||
|
||||
#define QUECTEL_VENDOR_ID 0x2c7c
|
||||
/* These Quectel products use Quectel's vendor ID */
|
||||
@@ -1152,6 +1157,11 @@ static const struct usb_device_id option
|
||||
@@ -1156,6 +1161,11 @@ static const struct usb_device_id option
|
||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
|
||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000), /* SIMCom SIM5218 */
|
||||
.driver_info = NCTRL(0) | NCTRL(1) | NCTRL(2) | NCTRL(3) | RSVD(4) },
|
||||
@@ -55,7 +55,7 @@ Subject: [PATCH] net/usb/qmi_wwan: add MeigLink modem support
|
||||
/* Quectel products using Qualcomm vendor ID */
|
||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)},
|
||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20),
|
||||
@@ -1193,6 +1203,11 @@ static const struct usb_device_id option
|
||||
@@ -1197,6 +1207,11 @@ static const struct usb_device_id option
|
||||
.driver_info = ZLP },
|
||||
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
||||
.driver_info = RSVD(4) },
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/bridge/br_input.c
|
||||
+++ b/net/bridge/br_input.c
|
||||
@@ -204,6 +204,9 @@ static void __br_handle_local_finish(str
|
||||
@@ -209,6 +209,9 @@ static void __br_handle_local_finish(str
|
||||
/* note: already called with rcu_read_lock */
|
||||
static int br_handle_local_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__br_handle_local_finish(skb);
|
||||
|
||||
/* return 1 to signal the okfn() was called so it's ok to use the skb */
|
||||
@@ -369,6 +372,17 @@ static rx_handler_result_t br_handle_fra
|
||||
@@ -376,6 +379,17 @@ static rx_handler_result_t br_handle_fra
|
||||
|
||||
forward:
|
||||
switch (p->state) {
|
||||
|
||||
@@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
for (i = sizeof(struct ipt_entry);
|
||||
i < e->target_offset;
|
||||
i += m->u.match_size) {
|
||||
@@ -1224,12 +1261,15 @@ compat_copy_entry_to_user(struct ipt_ent
|
||||
@@ -1226,12 +1263,15 @@ compat_copy_entry_to_user(struct ipt_ent
|
||||
compat_uint_t origsize;
|
||||
const struct xt_entry_match *ematch;
|
||||
int ret = 0;
|
||||
|
||||
@@ -136,14 +136,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/**
|
||||
* eth_type_trans - determine the packet's protocol ID.
|
||||
* @skb: received socket data
|
||||
@@ -173,6 +185,10 @@ __be16 eth_type_trans(struct sk_buff *sk
|
||||
} else {
|
||||
skb->pkt_type = PACKET_OTHERHOST;
|
||||
}
|
||||
+
|
||||
+ if (eth_check_local_mask(eth->h_dest, dev->dev_addr,
|
||||
+ dev->local_addr_mask))
|
||||
+ skb->gro_skip = 1;
|
||||
}
|
||||
@@ -165,6 +177,10 @@ __be16 eth_type_trans(struct sk_buff *sk
|
||||
|
||||
eth_skb_pkt_type(skb, dev);
|
||||
|
||||
+ if (unlikely(!ether_addr_equal_64bits(eth->h_dest, dev->dev_addr)) &&
|
||||
+ eth_check_local_mask(eth->h_dest, dev->dev_addr, dev->local_addr_mask))
|
||||
+ skb->gro_skip = 1;
|
||||
+
|
||||
/*
|
||||
* Some variants of DSA tagging don't have an ethertype field
|
||||
* at all, so we check here whether one of those tagging
|
||||
|
||||
@@ -10,9 +10,9 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -606,13 +606,41 @@ void nf_flow_table_free(struct nf_flowta
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_flow_table_free);
|
||||
@@ -651,6 +651,23 @@ static struct pernet_operations nf_flow_
|
||||
.exit_batch = nf_flow_table_pernet_exit,
|
||||
};
|
||||
|
||||
+static int nf_flow_table_netdev_event(struct notifier_block *this,
|
||||
+ unsigned long event, void *ptr)
|
||||
@@ -33,26 +33,30 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
+
|
||||
static int __init nf_flow_table_module_init(void)
|
||||
{
|
||||
- return nf_flow_table_offload_init();
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = nf_flow_table_offload_init();
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
int ret;
|
||||
@@ -663,8 +680,14 @@ static int __init nf_flow_table_module_i
|
||||
if (ret)
|
||||
goto out_offload;
|
||||
|
||||
+ ret = register_netdevice_notifier(&flow_offload_netdev_notifier);
|
||||
+ if (ret)
|
||||
+ nf_flow_table_offload_exit();
|
||||
+ goto out_offload_init;
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
return 0;
|
||||
|
||||
+out_offload_init:
|
||||
+ nf_flow_table_offload_exit();
|
||||
out_offload:
|
||||
unregister_pernet_subsys(&nf_flow_table_net_ops);
|
||||
return ret;
|
||||
@@ -672,6 +695,7 @@ out_offload:
|
||||
|
||||
static void __exit nf_flow_table_module_exit(void)
|
||||
{
|
||||
+ unregister_netdevice_notifier(&flow_offload_netdev_notifier);
|
||||
nf_flow_table_offload_exit();
|
||||
unregister_pernet_subsys(&nf_flow_table_net_ops);
|
||||
}
|
||||
|
||||
--- a/net/netfilter/nft_flow_offload.c
|
||||
+++ b/net/netfilter/nft_flow_offload.c
|
||||
@@ -455,47 +455,14 @@ static struct nft_expr_type nft_flow_off
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/netfilter/nf_tables_api.c
|
||||
+++ b/net/netfilter/nf_tables_api.c
|
||||
@@ -7803,7 +7803,7 @@ static int nft_register_flowtable_net_ho
|
||||
@@ -7811,7 +7811,7 @@ static int nft_register_flowtable_net_ho
|
||||
err = flowtable->data.type->setup(&flowtable->data,
|
||||
hook->ops.dev,
|
||||
FLOW_BLOCK_BIND);
|
||||
|
||||
@@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!(p->flags & BR_BCAST_FLOOD) && skb->dev != br->dev)
|
||||
--- a/net/bridge/br_input.c
|
||||
+++ b/net/bridge/br_input.c
|
||||
@@ -326,6 +326,8 @@ static rx_handler_result_t br_handle_fra
|
||||
@@ -331,6 +331,8 @@ static rx_handler_result_t br_handle_fra
|
||||
fwd_mask |= p->group_fwd_mask;
|
||||
switch (dest[5]) {
|
||||
case 0x00: /* Bridge Group Address */
|
||||
|
||||
@@ -15,16 +15,7 @@ Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2467,7 +2467,7 @@ mt7531_setup(struct dsa_switch *ds)
|
||||
struct mt7530_priv *priv = ds->priv;
|
||||
struct mt7530_dummy_poll p;
|
||||
u32 val, id;
|
||||
- int ret;
|
||||
+ int ret, i;
|
||||
|
||||
/* Reset whole chip through gpio pin or memory-mapped registers for
|
||||
* different type of hardware
|
||||
@@ -2499,6 +2499,10 @@ mt7531_setup(struct dsa_switch *ds)
|
||||
@@ -2680,6 +2680,10 @@ mt7531_setup(struct dsa_switch *ds)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2174,10 +2174,13 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||
@@ -2356,10 +2356,13 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||
{
|
||||
struct dsa_switch *ds = priv->ds;
|
||||
struct device *dev = priv->dev;
|
||||
@@ -30,7 +30,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
bus = devm_mdiobus_alloc(dev);
|
||||
if (!bus)
|
||||
return -ENOMEM;
|
||||
@@ -2194,7 +2197,9 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||
@@ -2376,7 +2379,9 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||
if (priv->irq)
|
||||
mt7530_setup_mdio_irq(priv);
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -2877,8 +2877,7 @@ static void mt753x_phylink_mac_link_up(s
|
||||
@@ -3065,8 +3065,7 @@ static void mt753x_phylink_mac_link_up(s
|
||||
/* MT753x MAC works in 1G full duplex mode for all up-clocked
|
||||
* variants.
|
||||
*/
|
||||
|
||||
@@ -61,7 +61,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
/*
|
||||
* We need to store the untouched command line for future reference.
|
||||
* We also need to store the touched command line since the parameter
|
||||
@@ -958,6 +981,7 @@ asmlinkage __visible void __init __no_sa
|
||||
@@ -960,6 +983,7 @@ asmlinkage __visible void __init __no_sa
|
||||
pr_notice("%s", linux_banner);
|
||||
early_security_init();
|
||||
setup_arch(&command_line);
|
||||
|
||||
@@ -259,7 +259,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
||||
static int kernel_init(void *);
|
||||
|
||||
extern void init_IRQ(void);
|
||||
@@ -995,6 +999,18 @@ asmlinkage __visible void __init __no_sa
|
||||
@@ -997,6 +1001,18 @@ asmlinkage __visible void __init __no_sa
|
||||
pr_notice("Kernel command line: %s\n", saved_command_line);
|
||||
/* parameters may set static keys */
|
||||
jump_label_init();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -559,6 +559,7 @@
|
||||
@@ -556,6 +556,7 @@
|
||||
compatible = "mediatek,mt7622-nor",
|
||||
"mediatek,mt8173-nor";
|
||||
reg = <0 0x11014000 0 0xe0>;
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -553,6 +553,18 @@
|
||||
@@ -550,6 +550,18 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -339,7 +339,7 @@
|
||||
@@ -337,7 +337,7 @@
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-parent = <&gic>;
|
||||
reg = <0 0x10310000 0 0x1000>,
|
||||
|
||||
@@ -112,7 +112,7 @@ Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -942,6 +942,7 @@
|
||||
@@ -938,6 +938,7 @@
|
||||
clock-names = "hsdma";
|
||||
power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
|
||||
#dma-cells = <1>;
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt2712e.dtsi
|
||||
@@ -915,64 +915,67 @@
|
||||
@@ -916,64 +916,67 @@
|
||||
};
|
||||
};
|
||||
|
||||
@@ -194,7 +194,7 @@ Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
|
||||
&pio {
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -809,75 +809,83 @@
|
||||
@@ -804,75 +804,83 @@
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
|
||||
@@ -849,6 +849,12 @@
|
||||
@@ -844,6 +844,12 @@
|
||||
#address-cells = <0>;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
@@ -13,7 +13,7 @@
|
||||
};
|
||||
|
||||
pcie1: pcie@1a145000 {
|
||||
@@ -887,6 +893,12 @@
|
||||
@@ -882,6 +888,12 @@
|
||||
#address-cells = <0>;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user