mirror of
https://github.com/kernelkit/infix.git
synced 2026-08-01 21:33:02 +02:00
Merge pull request #1017 from kernelkit/update-kernel
Upgrade linux kernel to 6.12.23 (LTS)
This commit is contained in:
@@ -27,7 +27,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.22"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.23"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
|
||||
@@ -27,7 +27,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.22"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.23"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
|
||||
@@ -29,7 +29,7 @@ BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/r2s/genimage.cfg"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.22"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.23"
|
||||
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/r2s/rk3328-nanopi-r2s-dts.patch"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/r2s/linux_defconfig"
|
||||
|
||||
@@ -26,7 +26,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INF
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.22"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.23"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
|
||||
@@ -26,7 +26,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INF
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.22"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.23"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ All notable changes to the project are documented in this file.
|
||||
-------------------------
|
||||
|
||||
### Changes
|
||||
- Upgrade Linux kernel to 6.12.22 (LTS)
|
||||
- Upgrade Linux kernel to 6.12.23 (LTS)
|
||||
- Format for disk image (for QEMU) has changed to `qcow2`
|
||||
|
||||
### Fixes
|
||||
|
||||
@@ -1,648 +0,0 @@
|
||||
From f6862a76eca677ba1ad2892e781204a463ea78ee Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 18 Mar 2025 10:55:09 +0100
|
||||
Subject: [PATCH 27/28] net: mvpp2: Prevent parser TCAM memory corruption
|
||||
Organization: Wires
|
||||
|
||||
Protect the parser TCAM/SRAM memory, and the cached (shadow) SRAM
|
||||
information, from concurrent modifications.
|
||||
|
||||
Both the TCAM and SRAM tables are indirectly accessed by configuring
|
||||
an index register that selects the row to read or write to. This means
|
||||
that operations must be atomic in order to, e.g., avoid spreading
|
||||
writes across multiple rows. Since the shadow SRAM array is used to
|
||||
find free rows in the hardware table, it must also be protected in
|
||||
order to avoid TOCTOU errors where multiple cores allocate the same
|
||||
row.
|
||||
|
||||
This issue was detected in a situation where `mvpp2_set_rx_mode()` ran
|
||||
concurrently on two CPUs. In this particular case the
|
||||
MVPP2_PE_MAC_UC_PROMISCUOUS entry was corrupted, causing the
|
||||
classifier unit to drop all incoming unicast - indicated by the
|
||||
`rx_classifier_drops` counter.
|
||||
|
||||
Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
|
||||
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
---
|
||||
drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 3 +
|
||||
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 3 +-
|
||||
.../net/ethernet/marvell/mvpp2/mvpp2_prs.c | 201 ++++++++++++------
|
||||
3 files changed, 140 insertions(+), 67 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
|
||||
index 9e02e4367bec..9bd3d76b5fe2 100644
|
||||
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
|
||||
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
|
||||
@@ -1108,6 +1108,9 @@ struct mvpp2 {
|
||||
|
||||
/* Spinlocks for CM3 shared memory configuration */
|
||||
spinlock_t mss_spinlock;
|
||||
+
|
||||
+ /* Spinlock for shared PRS parser memory and shadow table */
|
||||
+ spinlock_t prs_spinlock;
|
||||
};
|
||||
|
||||
struct mvpp2_pcpu_stats {
|
||||
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
||||
index 3880dcc0418b..66b5a80c9c28 100644
|
||||
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
||||
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
|
||||
@@ -7640,8 +7640,9 @@ static int mvpp2_probe(struct platform_device *pdev)
|
||||
if (mvpp2_read(priv, MVPP2_VER_ID_REG) == MVPP2_VER_PP23)
|
||||
priv->hw_version = MVPP23;
|
||||
|
||||
- /* Init mss lock */
|
||||
+ /* Init locks for shared packet processor resources */
|
||||
spin_lock_init(&priv->mss_spinlock);
|
||||
+ spin_lock_init(&priv->prs_spinlock);
|
||||
|
||||
/* Initialize network controller */
|
||||
err = mvpp2_init(pdev, priv);
|
||||
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
|
||||
index 9af22f497a40..a96edc7dc0de 100644
|
||||
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
|
||||
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
|
||||
@@ -23,6 +23,8 @@ static int mvpp2_prs_hw_write(struct mvpp2 *priv, struct mvpp2_prs_entry *pe)
|
||||
{
|
||||
int i;
|
||||
|
||||
+ lockdep_assert_held(&priv->prs_spinlock);
|
||||
+
|
||||
if (pe->index > MVPP2_PRS_TCAM_SRAM_SIZE - 1)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -43,11 +45,13 @@ static int mvpp2_prs_hw_write(struct mvpp2 *priv, struct mvpp2_prs_entry *pe)
|
||||
}
|
||||
|
||||
/* Initialize tcam entry from hw */
|
||||
-int mvpp2_prs_init_from_hw(struct mvpp2 *priv, struct mvpp2_prs_entry *pe,
|
||||
- int tid)
|
||||
+static int mvpp2_prs_init_from_hw_unlocked(struct mvpp2 *priv,
|
||||
+ struct mvpp2_prs_entry *pe, int tid)
|
||||
{
|
||||
int i;
|
||||
|
||||
+ lockdep_assert_held(&priv->prs_spinlock);
|
||||
+
|
||||
if (tid > MVPP2_PRS_TCAM_SRAM_SIZE - 1)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -73,6 +77,18 @@ int mvpp2_prs_init_from_hw(struct mvpp2 *priv, struct mvpp2_prs_entry *pe,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int mvpp2_prs_init_from_hw(struct mvpp2 *priv, struct mvpp2_prs_entry *pe,
|
||||
+ int tid)
|
||||
+{
|
||||
+ int err;
|
||||
+
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+ err = mvpp2_prs_init_from_hw_unlocked(priv, pe, tid);
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
/* Invalidate tcam hw entry */
|
||||
static void mvpp2_prs_hw_inv(struct mvpp2 *priv, int index)
|
||||
{
|
||||
@@ -374,7 +390,7 @@ static int mvpp2_prs_flow_find(struct mvpp2 *priv, int flow)
|
||||
priv->prs_shadow[tid].lu != MVPP2_PRS_LU_FLOWS)
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
bits = mvpp2_prs_sram_ai_get(&pe);
|
||||
|
||||
/* Sram store classification lookup ID in AI bits [5:0] */
|
||||
@@ -441,7 +457,7 @@ static void mvpp2_prs_mac_drop_all_set(struct mvpp2 *priv, int port, bool add)
|
||||
|
||||
if (priv->prs_shadow[MVPP2_PE_DROP_ALL].valid) {
|
||||
/* Entry exist - update port only */
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, MVPP2_PE_DROP_ALL);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, MVPP2_PE_DROP_ALL);
|
||||
} else {
|
||||
/* Entry doesn't exist - create new */
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
@@ -469,14 +485,17 @@ static void mvpp2_prs_mac_drop_all_set(struct mvpp2 *priv, int port, bool add)
|
||||
}
|
||||
|
||||
/* Set port to unicast or multicast promiscuous mode */
|
||||
-void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
|
||||
- enum mvpp2_prs_l2_cast l2_cast, bool add)
|
||||
+static void mvpp2_prs_mac_promisc_set_unlocked(struct mvpp2 *priv, int port,
|
||||
+ enum mvpp2_prs_l2_cast l2_cast,
|
||||
+ bool add)
|
||||
{
|
||||
struct mvpp2_prs_entry pe;
|
||||
unsigned char cast_match;
|
||||
unsigned int ri;
|
||||
int tid;
|
||||
|
||||
+ lockdep_assert_held(&priv->prs_spinlock);
|
||||
+
|
||||
if (l2_cast == MVPP2_PRS_L2_UNI_CAST) {
|
||||
cast_match = MVPP2_PRS_UCAST_VAL;
|
||||
tid = MVPP2_PE_MAC_UC_PROMISCUOUS;
|
||||
@@ -489,7 +508,7 @@ void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
|
||||
|
||||
/* promiscuous mode - Accept unknown unicast or multicast packets */
|
||||
if (priv->prs_shadow[tid].valid) {
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
} else {
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_MAC);
|
||||
@@ -522,6 +541,14 @@ void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
|
||||
mvpp2_prs_hw_write(priv, &pe);
|
||||
}
|
||||
|
||||
+void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
|
||||
+ enum mvpp2_prs_l2_cast l2_cast, bool add)
|
||||
+{
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+ mvpp2_prs_mac_promisc_set_unlocked(priv, port, l2_cast, add);
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
+}
|
||||
+
|
||||
/* Set entry for dsa packets */
|
||||
static void mvpp2_prs_dsa_tag_set(struct mvpp2 *priv, int port, bool add,
|
||||
bool tagged, bool extend)
|
||||
@@ -539,7 +566,7 @@ static void mvpp2_prs_dsa_tag_set(struct mvpp2 *priv, int port, bool add,
|
||||
|
||||
if (priv->prs_shadow[tid].valid) {
|
||||
/* Entry exist - update port only */
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
} else {
|
||||
/* Entry doesn't exist - create new */
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
@@ -610,7 +637,7 @@ static void mvpp2_prs_dsa_tag_ethertype_set(struct mvpp2 *priv, int port,
|
||||
|
||||
if (priv->prs_shadow[tid].valid) {
|
||||
/* Entry exist - update port only */
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
} else {
|
||||
/* Entry doesn't exist - create new */
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
@@ -673,7 +700,7 @@ static int mvpp2_prs_vlan_find(struct mvpp2 *priv, unsigned short tpid, int ai)
|
||||
priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VLAN)
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
match = mvpp2_prs_tcam_data_cmp(&pe, 0, tpid);
|
||||
if (!match)
|
||||
continue;
|
||||
@@ -726,7 +753,7 @@ static int mvpp2_prs_vlan_add(struct mvpp2 *priv, unsigned short tpid, int ai,
|
||||
priv->prs_shadow[tid_aux].lu != MVPP2_PRS_LU_VLAN)
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid_aux);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid_aux);
|
||||
ri_bits = mvpp2_prs_sram_ri_get(&pe);
|
||||
if ((ri_bits & MVPP2_PRS_RI_VLAN_MASK) ==
|
||||
MVPP2_PRS_RI_VLAN_DOUBLE)
|
||||
@@ -760,7 +787,7 @@ static int mvpp2_prs_vlan_add(struct mvpp2 *priv, unsigned short tpid, int ai,
|
||||
|
||||
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VLAN);
|
||||
} else {
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
}
|
||||
/* Update ports' mask */
|
||||
mvpp2_prs_tcam_port_map_set(&pe, port_map);
|
||||
@@ -800,7 +827,7 @@ static int mvpp2_prs_double_vlan_find(struct mvpp2 *priv, unsigned short tpid1,
|
||||
priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VLAN)
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
|
||||
match = mvpp2_prs_tcam_data_cmp(&pe, 0, tpid1) &&
|
||||
mvpp2_prs_tcam_data_cmp(&pe, 4, tpid2);
|
||||
@@ -849,7 +876,7 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
|
||||
priv->prs_shadow[tid_aux].lu != MVPP2_PRS_LU_VLAN)
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid_aux);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid_aux);
|
||||
ri_bits = mvpp2_prs_sram_ri_get(&pe);
|
||||
ri_bits &= MVPP2_PRS_RI_VLAN_MASK;
|
||||
if (ri_bits == MVPP2_PRS_RI_VLAN_SINGLE ||
|
||||
@@ -880,7 +907,7 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
|
||||
|
||||
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VLAN);
|
||||
} else {
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
}
|
||||
|
||||
/* Update ports' mask */
|
||||
@@ -1213,8 +1240,8 @@ static void mvpp2_prs_mac_init(struct mvpp2 *priv)
|
||||
/* Create dummy entries for drop all and promiscuous modes */
|
||||
mvpp2_prs_drop_fc(priv);
|
||||
mvpp2_prs_mac_drop_all_set(priv, 0, false);
|
||||
- mvpp2_prs_mac_promisc_set(priv, 0, MVPP2_PRS_L2_UNI_CAST, false);
|
||||
- mvpp2_prs_mac_promisc_set(priv, 0, MVPP2_PRS_L2_MULTI_CAST, false);
|
||||
+ mvpp2_prs_mac_promisc_set_unlocked(priv, 0, MVPP2_PRS_L2_UNI_CAST, false);
|
||||
+ mvpp2_prs_mac_promisc_set_unlocked(priv, 0, MVPP2_PRS_L2_MULTI_CAST, false);
|
||||
}
|
||||
|
||||
/* Set default entries for various types of dsa packets */
|
||||
@@ -1533,12 +1560,6 @@ static int mvpp2_prs_vlan_init(struct platform_device *pdev, struct mvpp2 *priv)
|
||||
struct mvpp2_prs_entry pe;
|
||||
int err;
|
||||
|
||||
- priv->prs_double_vlans = devm_kcalloc(&pdev->dev, sizeof(bool),
|
||||
- MVPP2_PRS_DBL_VLANS_MAX,
|
||||
- GFP_KERNEL);
|
||||
- if (!priv->prs_double_vlans)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
/* Double VLAN: 0x88A8, 0x8100 */
|
||||
err = mvpp2_prs_double_vlan_add(priv, ETH_P_8021AD, ETH_P_8021Q,
|
||||
MVPP2_PRS_PORT_MASK);
|
||||
@@ -1941,7 +1962,7 @@ static int mvpp2_prs_vid_range_find(struct mvpp2_port *port, u16 vid, u16 mask)
|
||||
port->priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VID)
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(port->priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(port->priv, &pe, tid);
|
||||
|
||||
mvpp2_prs_tcam_data_byte_get(&pe, 2, &byte[0], &enable[0]);
|
||||
mvpp2_prs_tcam_data_byte_get(&pe, 3, &byte[1], &enable[1]);
|
||||
@@ -1970,6 +1991,8 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
|
||||
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
/* Scan TCAM and see if entry with this <vid,port> already exist */
|
||||
tid = mvpp2_prs_vid_range_find(port, vid, mask);
|
||||
|
||||
@@ -1988,8 +2011,10 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
|
||||
MVPP2_PRS_VLAN_FILT_MAX_ENTRY);
|
||||
|
||||
/* There isn't room for a new VID filter */
|
||||
- if (tid < 0)
|
||||
+ if (tid < 0) {
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
return tid;
|
||||
+ }
|
||||
|
||||
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_VID);
|
||||
pe.index = tid;
|
||||
@@ -1997,7 +2022,7 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
|
||||
/* Mask all ports */
|
||||
mvpp2_prs_tcam_port_map_set(&pe, 0);
|
||||
} else {
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
}
|
||||
|
||||
/* Enable the current port */
|
||||
@@ -2019,6 +2044,7 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
|
||||
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VID);
|
||||
mvpp2_prs_hw_write(priv, &pe);
|
||||
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2028,15 +2054,16 @@ void mvpp2_prs_vid_entry_remove(struct mvpp2_port *port, u16 vid)
|
||||
struct mvpp2 *priv = port->priv;
|
||||
int tid;
|
||||
|
||||
- /* Scan TCAM and see if entry with this <vid,port> already exist */
|
||||
- tid = mvpp2_prs_vid_range_find(port, vid, 0xfff);
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
|
||||
- /* No such entry */
|
||||
- if (tid < 0)
|
||||
- return;
|
||||
+ /* Invalidate TCAM entry with this <vid,port>, if it exists */
|
||||
+ tid = mvpp2_prs_vid_range_find(port, vid, 0xfff);
|
||||
+ if (tid >= 0) {
|
||||
+ mvpp2_prs_hw_inv(priv, tid);
|
||||
+ priv->prs_shadow[tid].valid = false;
|
||||
+ }
|
||||
|
||||
- mvpp2_prs_hw_inv(priv, tid);
|
||||
- priv->prs_shadow[tid].valid = false;
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
}
|
||||
|
||||
/* Remove all existing VID filters on this port */
|
||||
@@ -2045,6 +2072,8 @@ void mvpp2_prs_vid_remove_all(struct mvpp2_port *port)
|
||||
struct mvpp2 *priv = port->priv;
|
||||
int tid;
|
||||
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
for (tid = MVPP2_PRS_VID_PORT_FIRST(port->id);
|
||||
tid <= MVPP2_PRS_VID_PORT_LAST(port->id); tid++) {
|
||||
if (priv->prs_shadow[tid].valid) {
|
||||
@@ -2052,6 +2081,8 @@ void mvpp2_prs_vid_remove_all(struct mvpp2_port *port)
|
||||
priv->prs_shadow[tid].valid = false;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
}
|
||||
|
||||
/* Remove VID filering entry for this port */
|
||||
@@ -2060,10 +2091,14 @@ void mvpp2_prs_vid_disable_filtering(struct mvpp2_port *port)
|
||||
unsigned int tid = MVPP2_PRS_VID_PORT_DFLT(port->id);
|
||||
struct mvpp2 *priv = port->priv;
|
||||
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
/* Invalidate the guard entry */
|
||||
mvpp2_prs_hw_inv(priv, tid);
|
||||
|
||||
priv->prs_shadow[tid].valid = false;
|
||||
+
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
}
|
||||
|
||||
/* Add guard entry that drops packets when no VID is matched on this port */
|
||||
@@ -2079,6 +2114,8 @@ void mvpp2_prs_vid_enable_filtering(struct mvpp2_port *port)
|
||||
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
pe.index = tid;
|
||||
|
||||
reg_val = mvpp2_read(priv, MVPP2_MH_REG(port->id));
|
||||
@@ -2111,6 +2148,8 @@ void mvpp2_prs_vid_enable_filtering(struct mvpp2_port *port)
|
||||
/* Update shadow table */
|
||||
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VID);
|
||||
mvpp2_prs_hw_write(priv, &pe);
|
||||
+
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
}
|
||||
|
||||
/* Parser default initialization */
|
||||
@@ -2118,6 +2157,20 @@ int mvpp2_prs_default_init(struct platform_device *pdev, struct mvpp2 *priv)
|
||||
{
|
||||
int err, index, i;
|
||||
|
||||
+ priv->prs_shadow = devm_kcalloc(&pdev->dev, MVPP2_PRS_TCAM_SRAM_SIZE,
|
||||
+ sizeof(*priv->prs_shadow),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!priv->prs_shadow)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ priv->prs_double_vlans = devm_kcalloc(&pdev->dev, sizeof(bool),
|
||||
+ MVPP2_PRS_DBL_VLANS_MAX,
|
||||
+ GFP_KERNEL);
|
||||
+ if (!priv->prs_double_vlans)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
/* Enable tcam table */
|
||||
mvpp2_write(priv, MVPP2_PRS_TCAM_CTRL_REG, MVPP2_PRS_TCAM_EN_MASK);
|
||||
|
||||
@@ -2136,12 +2189,6 @@ int mvpp2_prs_default_init(struct platform_device *pdev, struct mvpp2 *priv)
|
||||
for (index = 0; index < MVPP2_PRS_TCAM_SRAM_SIZE; index++)
|
||||
mvpp2_prs_hw_inv(priv, index);
|
||||
|
||||
- priv->prs_shadow = devm_kcalloc(&pdev->dev, MVPP2_PRS_TCAM_SRAM_SIZE,
|
||||
- sizeof(*priv->prs_shadow),
|
||||
- GFP_KERNEL);
|
||||
- if (!priv->prs_shadow)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
/* Always start from lookup = 0 */
|
||||
for (index = 0; index < MVPP2_MAX_PORTS; index++)
|
||||
mvpp2_prs_hw_port_init(priv, index, MVPP2_PRS_LU_MH,
|
||||
@@ -2158,26 +2205,13 @@ int mvpp2_prs_default_init(struct platform_device *pdev, struct mvpp2 *priv)
|
||||
mvpp2_prs_vid_init(priv);
|
||||
|
||||
err = mvpp2_prs_etype_init(priv);
|
||||
- if (err)
|
||||
- return err;
|
||||
-
|
||||
- err = mvpp2_prs_vlan_init(pdev, priv);
|
||||
- if (err)
|
||||
- return err;
|
||||
-
|
||||
- err = mvpp2_prs_pppoe_init(priv);
|
||||
- if (err)
|
||||
- return err;
|
||||
-
|
||||
- err = mvpp2_prs_ip6_init(priv);
|
||||
- if (err)
|
||||
- return err;
|
||||
-
|
||||
- err = mvpp2_prs_ip4_init(priv);
|
||||
- if (err)
|
||||
- return err;
|
||||
+ err = err ? : mvpp2_prs_vlan_init(pdev, priv);
|
||||
+ err = err ? : mvpp2_prs_pppoe_init(priv);
|
||||
+ err = err ? : mvpp2_prs_ip6_init(priv);
|
||||
+ err = err ? : mvpp2_prs_ip4_init(priv);
|
||||
|
||||
- return 0;
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
+ return err;
|
||||
}
|
||||
|
||||
/* Compare MAC DA with tcam entry data */
|
||||
@@ -2217,7 +2251,7 @@ mvpp2_prs_mac_da_range_find(struct mvpp2 *priv, int pmap, const u8 *da,
|
||||
(priv->prs_shadow[tid].udf != udf_type))
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
entry_pmap = mvpp2_prs_tcam_port_map_get(&pe);
|
||||
|
||||
if (mvpp2_prs_mac_range_equals(&pe, da, mask) &&
|
||||
@@ -2229,7 +2263,8 @@ mvpp2_prs_mac_da_range_find(struct mvpp2 *priv, int pmap, const u8 *da,
|
||||
}
|
||||
|
||||
/* Update parser's mac da entry */
|
||||
-int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
|
||||
+static int mvpp2_prs_mac_da_accept_unlocked(struct mvpp2_port *port,
|
||||
+ const u8 *da, bool add)
|
||||
{
|
||||
unsigned char mask[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
struct mvpp2 *priv = port->priv;
|
||||
@@ -2261,7 +2296,7 @@ int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
|
||||
/* Mask all ports */
|
||||
mvpp2_prs_tcam_port_map_set(&pe, 0);
|
||||
} else {
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
}
|
||||
|
||||
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_MAC);
|
||||
@@ -2317,6 +2352,17 @@ int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
|
||||
+{
|
||||
+ int err;
|
||||
+
|
||||
+ spin_lock_bh(&port->priv->prs_spinlock);
|
||||
+ err = mvpp2_prs_mac_da_accept_unlocked(port, da, add);
|
||||
+ spin_unlock_bh(&port->priv->prs_spinlock);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
int mvpp2_prs_update_mac_da(struct net_device *dev, const u8 *da)
|
||||
{
|
||||
struct mvpp2_port *port = netdev_priv(dev);
|
||||
@@ -2345,6 +2391,8 @@ void mvpp2_prs_mac_del_all(struct mvpp2_port *port)
|
||||
unsigned long pmap;
|
||||
int index, tid;
|
||||
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
for (tid = MVPP2_PE_MAC_RANGE_START;
|
||||
tid <= MVPP2_PE_MAC_RANGE_END; tid++) {
|
||||
unsigned char da[ETH_ALEN], da_mask[ETH_ALEN];
|
||||
@@ -2354,7 +2402,7 @@ void mvpp2_prs_mac_del_all(struct mvpp2_port *port)
|
||||
(priv->prs_shadow[tid].udf != MVPP2_PRS_UDF_MAC_DEF))
|
||||
continue;
|
||||
|
||||
- mvpp2_prs_init_from_hw(priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(priv, &pe, tid);
|
||||
|
||||
pmap = mvpp2_prs_tcam_port_map_get(&pe);
|
||||
|
||||
@@ -2375,14 +2423,17 @@ void mvpp2_prs_mac_del_all(struct mvpp2_port *port)
|
||||
continue;
|
||||
|
||||
/* Remove entry from TCAM */
|
||||
- mvpp2_prs_mac_da_accept(port, da, false);
|
||||
+ mvpp2_prs_mac_da_accept_unlocked(port, da, false);
|
||||
}
|
||||
+
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
}
|
||||
|
||||
int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
|
||||
{
|
||||
switch (type) {
|
||||
case MVPP2_TAG_TYPE_EDSA:
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
/* Add port to EDSA entries */
|
||||
mvpp2_prs_dsa_tag_set(priv, port, true,
|
||||
MVPP2_PRS_TAGGED, MVPP2_PRS_EDSA);
|
||||
@@ -2393,9 +2444,11 @@ int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
|
||||
MVPP2_PRS_TAGGED, MVPP2_PRS_DSA);
|
||||
mvpp2_prs_dsa_tag_set(priv, port, false,
|
||||
MVPP2_PRS_UNTAGGED, MVPP2_PRS_DSA);
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
break;
|
||||
|
||||
case MVPP2_TAG_TYPE_DSA:
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
/* Add port to DSA entries */
|
||||
mvpp2_prs_dsa_tag_set(priv, port, true,
|
||||
MVPP2_PRS_TAGGED, MVPP2_PRS_DSA);
|
||||
@@ -2406,10 +2459,12 @@ int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
|
||||
MVPP2_PRS_TAGGED, MVPP2_PRS_EDSA);
|
||||
mvpp2_prs_dsa_tag_set(priv, port, false,
|
||||
MVPP2_PRS_UNTAGGED, MVPP2_PRS_EDSA);
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
break;
|
||||
|
||||
case MVPP2_TAG_TYPE_MH:
|
||||
case MVPP2_TAG_TYPE_NONE:
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
/* Remove port form EDSA and DSA entries */
|
||||
mvpp2_prs_dsa_tag_set(priv, port, false,
|
||||
MVPP2_PRS_TAGGED, MVPP2_PRS_DSA);
|
||||
@@ -2419,6 +2474,7 @@ int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
|
||||
MVPP2_PRS_TAGGED, MVPP2_PRS_EDSA);
|
||||
mvpp2_prs_dsa_tag_set(priv, port, false,
|
||||
MVPP2_PRS_UNTAGGED, MVPP2_PRS_EDSA);
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -2437,11 +2493,15 @@ int mvpp2_prs_add_flow(struct mvpp2 *priv, int flow, u32 ri, u32 ri_mask)
|
||||
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
tid = mvpp2_prs_tcam_first_free(priv,
|
||||
MVPP2_PE_LAST_FREE_TID,
|
||||
MVPP2_PE_FIRST_FREE_TID);
|
||||
- if (tid < 0)
|
||||
+ if (tid < 0) {
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
return tid;
|
||||
+ }
|
||||
|
||||
pe.index = tid;
|
||||
|
||||
@@ -2461,6 +2521,7 @@ int mvpp2_prs_add_flow(struct mvpp2 *priv, int flow, u32 ri, u32 ri_mask)
|
||||
mvpp2_prs_tcam_port_map_set(&pe, MVPP2_PRS_PORT_MASK);
|
||||
mvpp2_prs_hw_write(priv, &pe);
|
||||
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2472,6 +2533,8 @@ int mvpp2_prs_def_flow(struct mvpp2_port *port)
|
||||
|
||||
memset(&pe, 0, sizeof(pe));
|
||||
|
||||
+ spin_lock_bh(&port->priv->prs_spinlock);
|
||||
+
|
||||
tid = mvpp2_prs_flow_find(port->priv, port->id);
|
||||
|
||||
/* Such entry not exist */
|
||||
@@ -2480,8 +2543,10 @@ int mvpp2_prs_def_flow(struct mvpp2_port *port)
|
||||
tid = mvpp2_prs_tcam_first_free(port->priv,
|
||||
MVPP2_PE_LAST_FREE_TID,
|
||||
MVPP2_PE_FIRST_FREE_TID);
|
||||
- if (tid < 0)
|
||||
+ if (tid < 0) {
|
||||
+ spin_unlock_bh(&port->priv->prs_spinlock);
|
||||
return tid;
|
||||
+ }
|
||||
|
||||
pe.index = tid;
|
||||
|
||||
@@ -2492,13 +2557,14 @@ int mvpp2_prs_def_flow(struct mvpp2_port *port)
|
||||
/* Update shadow table */
|
||||
mvpp2_prs_shadow_set(port->priv, pe.index, MVPP2_PRS_LU_FLOWS);
|
||||
} else {
|
||||
- mvpp2_prs_init_from_hw(port->priv, &pe, tid);
|
||||
+ mvpp2_prs_init_from_hw_unlocked(port->priv, &pe, tid);
|
||||
}
|
||||
|
||||
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_FLOWS);
|
||||
mvpp2_prs_tcam_port_map_set(&pe, (1 << port->id));
|
||||
mvpp2_prs_hw_write(port->priv, &pe);
|
||||
|
||||
+ spin_unlock_bh(&port->priv->prs_spinlock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2509,11 +2575,14 @@ int mvpp2_prs_hits(struct mvpp2 *priv, int index)
|
||||
if (index > MVPP2_PRS_TCAM_SRAM_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
+ spin_lock_bh(&priv->prs_spinlock);
|
||||
+
|
||||
mvpp2_write(priv, MVPP2_PRS_TCAM_HIT_IDX_REG, index);
|
||||
|
||||
val = mvpp2_read(priv, MVPP2_PRS_TCAM_HIT_CNT_REG);
|
||||
|
||||
val &= MVPP2_PRS_TCAM_HIT_CNT_MASK;
|
||||
|
||||
+ spin_unlock_bh(&priv->prs_spinlock);
|
||||
return val;
|
||||
}
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From 412fc6e03cfa025b34791b21a99d2a57a3e55d6b Mon Sep 17 00:00:00 2001
|
||||
From aa7cb68028d74ca604e29af1e0291041593aed6b Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 12 Mar 2024 10:27:24 +0100
|
||||
Subject: [PATCH 01/28] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for
|
||||
Subject: [PATCH 01/27] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for
|
||||
PPU on 6393X
|
||||
Organization: Wires
|
||||
|
||||
@@ -13,7 +13,7 @@ register 0, bit 15). Therefore, increase the timeout threshold to 1s.
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index 5aeecfab9630..2565277582c5 100644
|
||||
index 5935100e7d65..378b6714dcf9 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -86,7 +86,7 @@ int mv88e6xxx_write(struct mv88e6xxx_chip *chip, int addr, int reg, u16 val)
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From 64426e005ad2ee6485c5ddf5421279278f48862b Mon Sep 17 00:00:00 2001
|
||||
From de553470d110f8a685f084e095cabe70f6e034e7 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 27 Mar 2024 15:52:43 +0100
|
||||
Subject: [PATCH 02/28] net: dsa: mv88e6xxx: Improve indirect register access
|
||||
Subject: [PATCH 02/27] net: dsa: mv88e6xxx: Improve indirect register access
|
||||
perf on 6393
|
||||
Organization: Wires
|
||||
|
||||
@@ -22,7 +22,7 @@ other accesses use the regular indirect interface.
|
||||
5 files changed, 119 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index 2565277582c5..7ba492ee5c86 100644
|
||||
index 378b6714dcf9..e3da229cc309 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -6502,6 +6502,13 @@ static int mv88e6xxx_detect(struct mv88e6xxx_chip *chip)
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From e37a0269c5ec92d9caa2d0bc40ddd2e306b3b3b2 Mon Sep 17 00:00:00 2001
|
||||
From 3071af4b67233b72e4861c9cddf86861c39e969a Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Mon, 22 Apr 2024 23:18:01 +0200
|
||||
Subject: [PATCH 03/28] net: dsa: mv88e6xxx: Honor ports being managed via
|
||||
Subject: [PATCH 03/27] net: dsa: mv88e6xxx: Honor ports being managed via
|
||||
in-band-status
|
||||
Organization: Wires
|
||||
|
||||
@@ -18,7 +18,7 @@ when in-band-status is being used.
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index 7ba492ee5c86..cdf48fae0623 100644
|
||||
index e3da229cc309..1273d936177c 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -964,6 +964,9 @@ static void mv88e6xxx_mac_link_down(struct phylink_config *config,
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 81a1058bbda1b01139880142920e3345869994c8 Mon Sep 17 00:00:00 2001
|
||||
From f832e39dec010abcab657040a2fc7eb39593a49c Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 24 Apr 2024 22:41:04 +0200
|
||||
Subject: [PATCH 04/28] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user
|
||||
Subject: [PATCH 04/27] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user
|
||||
ports on 6393X
|
||||
Organization: Wires
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From cb2d53a6cbbdd86fabaa19bf1596bf707e22648b Mon Sep 17 00:00:00 2001
|
||||
From 28f28edf9eb603fb25dea6f73f5292b195b8f9b5 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Thu, 16 Nov 2023 19:44:32 +0100
|
||||
Subject: [PATCH 05/28] net: dsa: mv88e6xxx: Add LED infrastructure
|
||||
Subject: [PATCH 05/27] net: dsa: mv88e6xxx: Add LED infrastructure
|
||||
Organization: Wires
|
||||
|
||||
Parse DT for LEDs and register them for devices that support it,
|
||||
@@ -29,7 +29,7 @@ index a9a9651187db..6720d9303914 100644
|
||||
mv88e6xxx-objs += pcs-6352.o
|
||||
mv88e6xxx-objs += pcs-639x.o
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index cdf48fae0623..0a7858280903 100644
|
||||
index 1273d936177c..e1224c3d217a 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -37,6 +37,7 @@
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From fcd9b8f9d6b91eab102dfa97ab7488abd1fbb9e4 Mon Sep 17 00:00:00 2001
|
||||
From 511ad81be48ff78279864de5ca9154ae12a2361b Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Thu, 16 Nov 2023 21:59:35 +0100
|
||||
Subject: [PATCH 06/28] net: dsa: mv88e6xxx: Add LED support for 6393X
|
||||
Subject: [PATCH 06/27] net: dsa: mv88e6xxx: Add LED support for 6393X
|
||||
Organization: Wires
|
||||
|
||||
Trigger support:
|
||||
@@ -17,7 +17,7 @@ Trigger support:
|
||||
5 files changed, 272 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index 0a7858280903..cd746bea31be 100644
|
||||
index e1224c3d217a..8c7b8673b694 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -5657,6 +5657,7 @@ static const struct mv88e6xxx_ops mv88e6393x_ops = {
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From a7f85153c0aa99c567c62a14f8c29eb3577265d9 Mon Sep 17 00:00:00 2001
|
||||
From 7ae7d5ff2239d9d99e0fc769a07bcdcb3edfde94 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 28 May 2024 10:38:42 +0200
|
||||
Subject: [PATCH 07/28] net: dsa: tag_dsa: Use tag priority as initial
|
||||
Subject: [PATCH 07/27] net: dsa: tag_dsa: Use tag priority as initial
|
||||
skb->priority
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 8325784bddadb53ea2601858012be7097fa13c94 Mon Sep 17 00:00:00 2001
|
||||
From 4a8b7416746d92a0307b113aebcb9b8c429f031a Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 16 Jan 2024 16:00:55 +0100
|
||||
Subject: [PATCH 08/28] net: dsa: Support MDB memberships whose L2 addresses
|
||||
Subject: [PATCH 08/27] net: dsa: Support MDB memberships whose L2 addresses
|
||||
overlap
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From d9b49e23c7848972227ffc6f079d8c62d2a03c2e Mon Sep 17 00:00:00 2001
|
||||
From 180ecf6cdc045f0bc661551e3f7b0b46c4a6e490 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Thu, 21 Mar 2024 19:12:15 +0100
|
||||
Subject: [PATCH 09/28] net: dsa: Support EtherType based priority overrides
|
||||
Subject: [PATCH 09/27] net: dsa: Support EtherType based priority overrides
|
||||
Organization: Wires
|
||||
|
||||
---
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From e77eb9a0196bad9f683411a0985821ab078da741 Mon Sep 17 00:00:00 2001
|
||||
From 6c90dd976e8ecb860533a0d1c07620bbb3401d28 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Fri, 22 Mar 2024 16:15:43 +0100
|
||||
Subject: [PATCH 10/28] net: dsa: mv88e6xxx: Support EtherType based priority
|
||||
Subject: [PATCH 10/27] net: dsa: mv88e6xxx: Support EtherType based priority
|
||||
overrides
|
||||
Organization: Wires
|
||||
|
||||
@@ -15,7 +15,7 @@ Organization: Wires
|
||||
6 files changed, 207 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index cd746bea31be..e05caeabdc85 100644
|
||||
index 8c7b8673b694..97b4e3770994 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -1715,6 +1715,11 @@ static int mv88e6xxx_rmu_setup(struct mv88e6xxx_chip *chip)
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From 3fce5d8eb2b75aa4e549c798c703b99a5c895517 Mon Sep 17 00:00:00 2001
|
||||
From d253013e702aca0e4f91bea6f88a9442e25a8384 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 28 May 2024 11:04:22 +0200
|
||||
Subject: [PATCH 11/28] net: dsa: mv88e6xxx: Add mqprio qdisc support
|
||||
Subject: [PATCH 11/27] net: dsa: mv88e6xxx: Add mqprio qdisc support
|
||||
Organization: Wires
|
||||
|
||||
Add support for attaching mqprio qdisc's to mv88e6xxx ports and use
|
||||
@@ -30,7 +30,7 @@ handle the mapping down to the "real" number.
|
||||
2 files changed, 73 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index e05caeabdc85..ad997818047e 100644
|
||||
index 97b4e3770994..d2404e9431b1 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -31,6 +31,7 @@
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From 314fb04205646cf25cdcbd8bcd760e554b7dfe79 Mon Sep 17 00:00:00 2001
|
||||
From b4fe1543b6186642024d3600b47f093504ed10cc Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 29 May 2024 13:20:41 +0200
|
||||
Subject: [PATCH 12/28] net: dsa: mv88e6xxx: Use VLAN prio over IP when both
|
||||
Subject: [PATCH 12/27] net: dsa: mv88e6xxx: Use VLAN prio over IP when both
|
||||
are available
|
||||
Organization: Wires
|
||||
|
||||
@@ -27,7 +27,7 @@ main reasons for choosing the new default:
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index ad997818047e..40e8d2018fee 100644
|
||||
index d2404e9431b1..2477d201b2cf 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -3432,9 +3432,13 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From 696d559dd9874e8a481b66e24d85813d4f72b05f Mon Sep 17 00:00:00 2001
|
||||
From a9b8b2431a73995041df5f89e5c79af49e006729 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 26 Nov 2024 19:45:59 +0100
|
||||
Subject: [PATCH 13/28] [FIX] net: dsa: mv88e6xxx: Trap locally terminated
|
||||
Subject: [PATCH 13/27] [FIX] net: dsa: mv88e6xxx: Trap locally terminated
|
||||
VLANs
|
||||
Organization: Wires
|
||||
|
||||
@@ -31,7 +31,7 @@ cause all packets assigned to these VLANs to properly terminated.
|
||||
3 files changed, 27 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index 40e8d2018fee..30f8a5388733 100644
|
||||
index 2477d201b2cf..41f3223313d0 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -2654,7 +2654,7 @@ static int mv88e6xxx_port_broadcast_sync(struct mv88e6xxx_chip *chip, int port,
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 898de5125467a650acf7da4cd938cbd0ac1c1be1 Mon Sep 17 00:00:00 2001
|
||||
From 82d6ed51bb597cd1f79e74b1263c3492738b3c71 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 19 Sep 2023 18:38:10 +0200
|
||||
Subject: [PATCH 14/28] net: phy: marvell10g: Support firmware loading on
|
||||
Subject: [PATCH 14/27] net: phy: marvell10g: Support firmware loading on
|
||||
88X3310
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From ca661bdd22cca40a21161fe202cfac74dddaaf45 Mon Sep 17 00:00:00 2001
|
||||
From 384a0171443f0136f626ca2aff94f393837bcb2c Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 21 Nov 2023 20:15:24 +0100
|
||||
Subject: [PATCH 15/28] net: phy: marvell10g: Fix power-up when strapped to
|
||||
Subject: [PATCH 15/27] net: phy: marvell10g: Fix power-up when strapped to
|
||||
start powered down
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 7884dc7b9dbd40165a34da8cdd4f7ebfdcfcfd86 Mon Sep 17 00:00:00 2001
|
||||
From ee93f4ed2fbd7595622ecf0ed3fa9e2803662ae9 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 15 Nov 2023 20:58:42 +0100
|
||||
Subject: [PATCH 16/28] net: phy: marvell10g: Add LED support for 88X3310
|
||||
Subject: [PATCH 16/27] net: phy: marvell10g: Add LED support for 88X3310
|
||||
Organization: Wires
|
||||
|
||||
Pickup the LEDs from the state in which the hardware reset or
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From c93ff33ba09c6af6a20f62e07590c01bc9252b78 Mon Sep 17 00:00:00 2001
|
||||
From a37059a58453694376e6e5df700d6d4c51703b13 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Tue, 12 Dec 2023 09:51:05 +0100
|
||||
Subject: [PATCH 17/28] net: phy: marvell10g: Support LEDs tied to a single
|
||||
Subject: [PATCH 17/27] net: phy: marvell10g: Support LEDs tied to a single
|
||||
media side
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From a4d0d5bff004b329cd83fa0806d52a6eb1977b55 Mon Sep 17 00:00:00 2001
|
||||
From 0fabf9cc0ddb17ed1d88212edcb41600444c51e3 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 27 Mar 2024 10:10:19 +0100
|
||||
Subject: [PATCH 18/28] net: phy: Do not resume PHY when attaching
|
||||
Subject: [PATCH 18/27] net: phy: Do not resume PHY when attaching
|
||||
Organization: Wires
|
||||
|
||||
The PHY should not start negotiating with its link-partner until
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 4a519b0c0f6b213373756c81766f0d2564b782e7 Mon Sep 17 00:00:00 2001
|
||||
From 60514772701b8335077c9bbd7107786d2a7a3ed4 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Mon, 4 Mar 2024 16:47:28 +0100
|
||||
Subject: [PATCH 19/28] net: bridge: avoid classifying unknown multicast as
|
||||
Subject: [PATCH 19/27] net: bridge: avoid classifying unknown multicast as
|
||||
mrouters_only
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From f759e64aea4262f0744a3b8b7dee9c70bb3839c4 Mon Sep 17 00:00:00 2001
|
||||
From 91d101863365ef759c6101674881c7d21130b24b Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Tue, 5 Mar 2024 06:44:41 +0100
|
||||
Subject: [PATCH 20/28] net: bridge: Ignore router ports when forwarding L2
|
||||
Subject: [PATCH 20/27] net: bridge: Ignore router ports when forwarding L2
|
||||
multicast
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From eef84ce9cb63463b59239eb0cd352bc829b99605 Mon Sep 17 00:00:00 2001
|
||||
From e22d99445476933f9a2da0e825d8a0da62af0c20 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Thu, 4 Apr 2024 16:36:30 +0200
|
||||
Subject: [PATCH 21/28] net: bridge: drop delay for applying strict multicast
|
||||
Subject: [PATCH 21/27] net: bridge: drop delay for applying strict multicast
|
||||
filtering
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From b6d5faea067b67dae8983ca116112a2b86cd0e9b Mon Sep 17 00:00:00 2001
|
||||
From 69a5b99e93002daa2a65574677c9ab595f3c8b8d Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Thu, 16 May 2024 14:51:54 +0200
|
||||
Subject: [PATCH 22/28] net: bridge: Differentiate MDB additions from
|
||||
Subject: [PATCH 22/27] net: bridge: Differentiate MDB additions from
|
||||
modifications
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 094213f7f29c8a39e4a4524b67e3e40c338b5a7b Mon Sep 17 00:00:00 2001
|
||||
From 55ff4511898852f9408c5ccab8082f1b03f697a4 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Fri, 24 Nov 2023 23:29:55 +0100
|
||||
Subject: [PATCH 23/28] nvmem: layouts: onie-tlv: Let device probe even when
|
||||
Subject: [PATCH 23/27] nvmem: layouts: onie-tlv: Let device probe even when
|
||||
TLV is invalid
|
||||
Organization: Wires
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From ca424b04e9a753cfeb3a92d080a595fc28498fac Mon Sep 17 00:00:00 2001
|
||||
From 950e326ed789709260dbe9f139ebcec264889048 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Mon, 29 Apr 2024 15:14:51 +0200
|
||||
Subject: [PATCH 24/28] usb: core: adjust log level for unauthorized devices
|
||||
Subject: [PATCH 24/27] usb: core: adjust log level for unauthorized devices
|
||||
Organization: Wires
|
||||
|
||||
The fact that a USB device currently is not authorized is not an error,
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 569890f4ecbbd756e1d018407e1d97d98117c460 Mon Sep 17 00:00:00 2001
|
||||
From 6229922ab3d1a414dfbbc8b3d13eaf10136b9e68 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Thu, 16 Jan 2025 12:35:12 +0100
|
||||
Subject: [PATCH 25/28] net: dsa: mv88e6xxx: collapse disabled state into
|
||||
Subject: [PATCH 25/27] net: dsa: mv88e6xxx: collapse disabled state into
|
||||
blocking
|
||||
Organization: Wires
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
From 415473236cee34dc39da4ba25a1c1c006838164c Mon Sep 17 00:00:00 2001
|
||||
From fff392ae3166cc2afa80f3eca6066fa21eb6e28e Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Date: Wed, 12 Feb 2025 22:03:14 +0100
|
||||
Subject: [PATCH 26/28] net: dsa: mv88e6xxx: Only activate LAG offloading when
|
||||
Subject: [PATCH 26/27] net: dsa: mv88e6xxx: Only activate LAG offloading when
|
||||
bridged
|
||||
Organization: Wires
|
||||
|
||||
@@ -51,7 +51,7 @@ CPU; egress traffic always relies on software hashing.
|
||||
1 file changed, 20 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
index 30f8a5388733..c1f8adaa008a 100644
|
||||
index 41f3223313d0..7bee935fd40f 100644
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -3095,6 +3095,7 @@ static int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
From 8b8e0be081bb6a56f1697bc67af61f73753acd03 Mon Sep 17 00:00:00 2001
|
||||
From 2eb2c9c7eaca24788cf448b151424a347c8ddf98 Mon Sep 17 00:00:00 2001
|
||||
From: Joachim Wiberg <troglobit@gmail.com>
|
||||
Date: Sun, 11 Aug 2024 11:27:35 +0200
|
||||
Subject: [PATCH 28/28] net: usb: r8152: add r8153b support for link/activity
|
||||
Subject: [PATCH 27/27] net: usb: r8152: add r8153b support for link/activity
|
||||
LEDs
|
||||
Organization: Wires
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
# Calculated with ../utils/kernel-refresh.sh
|
||||
sha256 ab48800ab49985a78d2318ae8ac5f28fd3e123ea17357ef21498105a53337336 linux-6.12.22.tar.xz
|
||||
sha256 d8d95404f8deeb7ff6992c0df855025062e9e8182bca6daa27ef2e9275d27749 linux-6.12.23.tar.xz
|
||||
|
||||
Reference in New Issue
Block a user