--- /dev/null
+From b6ef830c60b6f4adfb72d0780b4363df3a1feb9c Mon Sep 17 00:00:00 2001
+From: Jayesh Choudhary <j-choudhary@ti.com>
+Date: Tue, 18 Mar 2025 16:06:22 +0530
+Subject: i2c: omap: Add support for setting mux
+
+From: Jayesh Choudhary <j-choudhary@ti.com>
+
+commit b6ef830c60b6f4adfb72d0780b4363df3a1feb9c upstream.
+
+Some SoCs require muxes in the routing for SDA and SCL lines.
+Therefore, add support for setting the mux by reading the mux-states
+property from the dt-node.
+
+Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
+Link: https://lore.kernel.org/r/20250318103622.29979-3-j-choudhary@ti.com
+Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
+Stable-dep-of: a9503a2ecd95 ("i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/i2c/busses/Kconfig | 1 +
+ drivers/i2c/busses/i2c-omap.c | 22 ++++++++++++++++++++++
+ 2 files changed, 23 insertions(+)
+
+--- a/drivers/i2c/busses/Kconfig
++++ b/drivers/i2c/busses/Kconfig
+@@ -937,6 +937,7 @@ config I2C_OMAP
+ tristate "OMAP I2C adapter"
+ depends on ARCH_OMAP || ARCH_K3 || COMPILE_TEST
+ default MACH_OMAP_OSK
++ select MULTIPLEXER
+ help
+ If you say yes to this option, support will be included for the
+ I2C interface on the Texas Instruments OMAP1/2 family of processors.
+--- a/drivers/i2c/busses/i2c-omap.c
++++ b/drivers/i2c/busses/i2c-omap.c
+@@ -24,6 +24,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
++#include <linux/mux/consumer.h>
+ #include <linux/of.h>
+ #include <linux/slab.h>
+ #include <linux/platform_data/i2c-omap.h>
+@@ -211,6 +212,7 @@ struct omap_i2c_dev {
+ u16 syscstate;
+ u16 westate;
+ u16 errata;
++ struct mux_state *mux_state;
+ };
+
+ static const u8 reg_map_ip_v1[] = {
+@@ -1452,6 +1454,23 @@ omap_i2c_probe(struct platform_device *p
+ (1000 * omap->speed / 8);
+ }
+
++ if (of_property_read_bool(node, "mux-states")) {
++ struct mux_state *mux_state;
++
++ mux_state = devm_mux_state_get(&pdev->dev, NULL);
++ if (IS_ERR(mux_state)) {
++ r = PTR_ERR(mux_state);
++ dev_dbg(&pdev->dev, "failed to get I2C mux: %d\n", r);
++ goto err_disable_pm;
++ }
++ omap->mux_state = mux_state;
++ r = mux_state_select(omap->mux_state);
++ if (r) {
++ dev_err(&pdev->dev, "failed to select I2C mux: %d\n", r);
++ goto err_disable_pm;
++ }
++ }
++
+ /* reset ASAP, clearing any IRQs */
+ omap_i2c_init(omap);
+
+@@ -1511,6 +1530,9 @@ static void omap_i2c_remove(struct platf
+
+ i2c_del_adapter(&omap->adapter);
+
++ if (omap->mux_state)
++ mux_state_deselect(omap->mux_state);
++
+ ret = pm_runtime_get_sync(&pdev->dev);
+ if (ret < 0)
+ dev_err(omap->dev, "Failed to resume hardware, skip disable\n");
--- /dev/null
+From 666c23af755dccca8c25b5d5200ca28153c69a05 Mon Sep 17 00:00:00 2001
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Date: Sat, 14 Jun 2025 16:59:26 +0200
+Subject: i2c: omap: Fix an error handling path in omap_i2c_probe()
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+commit 666c23af755dccca8c25b5d5200ca28153c69a05 upstream.
+
+If an error occurs after calling mux_state_select(), mux_state_deselect()
+should be called as already done in the remove function.
+
+Fixes: b6ef830c60b6 ("i2c: omap: Add support for setting mux")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Cc: <stable@vger.kernel.org> # v6.15+
+Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
+Link: https://lore.kernel.org/r/998542981b6d2435c057dd8b9fe71743927babab.1749913149.git.christophe.jaillet@wanadoo.fr
+Stable-dep-of: a9503a2ecd95 ("i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/i2c/busses/i2c-omap.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/i2c/busses/i2c-omap.c
++++ b/drivers/i2c/busses/i2c-omap.c
+@@ -1461,13 +1461,13 @@ omap_i2c_probe(struct platform_device *p
+ if (IS_ERR(mux_state)) {
+ r = PTR_ERR(mux_state);
+ dev_dbg(&pdev->dev, "failed to get I2C mux: %d\n", r);
+- goto err_disable_pm;
++ goto err_put_pm;
+ }
+ omap->mux_state = mux_state;
+ r = mux_state_select(omap->mux_state);
+ if (r) {
+ dev_err(&pdev->dev, "failed to select I2C mux: %d\n", r);
+- goto err_disable_pm;
++ goto err_put_pm;
+ }
+ }
+
+@@ -1515,6 +1515,9 @@ omap_i2c_probe(struct platform_device *p
+
+ err_unuse_clocks:
+ omap_i2c_write_reg(omap, OMAP_I2C_CON_REG, 0);
++ if (omap->mux_state)
++ mux_state_deselect(omap->mux_state);
++err_put_pm:
+ pm_runtime_dont_use_autosuspend(omap->dev);
+ pm_runtime_put_sync(omap->dev);
+ err_disable_pm:
--- /dev/null
+From a9503a2ecd95e23d7243bcde7138192de8c1c281 Mon Sep 17 00:00:00 2001
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Date: Sat, 5 Jul 2025 09:57:37 +0200
+Subject: i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+commit a9503a2ecd95e23d7243bcde7138192de8c1c281 upstream.
+
+omap_i2c_init() can fail. Handle this error in omap_i2c_probe().
+
+Fixes: 010d442c4a29 ("i2c: New bus driver for TI OMAP boards")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Cc: <stable@vger.kernel.org> # v2.6.19+
+Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
+Link: https://lore.kernel.org/r/565311abf9bafd7291ca82bcecb48c1fac1e727b.1751701715.git.christophe.jaillet@wanadoo.fr
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/i2c/busses/i2c-omap.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/i2c/busses/i2c-omap.c
++++ b/drivers/i2c/busses/i2c-omap.c
+@@ -1472,7 +1472,9 @@ omap_i2c_probe(struct platform_device *p
+ }
+
+ /* reset ASAP, clearing any IRQs */
+- omap_i2c_init(omap);
++ r = omap_i2c_init(omap);
++ if (r)
++ goto err_mux_state_deselect;
+
+ if (omap->rev < OMAP_I2C_OMAP1_REV_2)
+ r = devm_request_irq(&pdev->dev, omap->irq, omap_i2c_omap1_isr,
+@@ -1515,6 +1517,7 @@ omap_i2c_probe(struct platform_device *p
+
+ err_unuse_clocks:
+ omap_i2c_write_reg(omap, OMAP_I2C_CON_REG, 0);
++err_mux_state_deselect:
+ if (omap->mux_state)
+ mux_state_deselect(omap->mux_state);
+ err_put_pm:
--- /dev/null
+From 2b30a3d1ec2538a1fd363fde746b9fe1d38abc77 Mon Sep 17 00:00:00 2001
+From: Jiawen Wu <jiawenwu@trustnetic.com>
+Date: Mon, 14 Jul 2025 09:56:56 +0800
+Subject: net: libwx: fix multicast packets received count
+
+From: Jiawen Wu <jiawenwu@trustnetic.com>
+
+commit 2b30a3d1ec2538a1fd363fde746b9fe1d38abc77 upstream.
+
+Multicast good packets received by PF rings that pass ethternet MAC
+address filtering are counted for rtnl_link_stats64.multicast. The
+counter is not cleared on read. Fix the duplicate counting on updating
+statistics.
+
+Fixes: 46b92e10d631 ("net: libwx: support hardware statistics")
+Cc: stable@vger.kernel.org
+Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Link: https://patch.msgid.link/DA229A4F58B70E51+20250714015656.91772-1-jiawenwu@trustnetic.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/wangxun/libwx/wx_hw.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/net/ethernet/wangxun/libwx/wx_hw.c
++++ b/drivers/net/ethernet/wangxun/libwx/wx_hw.c
+@@ -2355,6 +2355,8 @@ void wx_update_stats(struct wx *wx)
+ hwstats->fdirmiss += rd32(wx, WX_RDB_FDIR_MISS);
+ }
+
++ /* qmprc is not cleared on read, manual reset it */
++ hwstats->qmprc = 0;
+ for (i = 0; i < wx->mac.max_rx_queues; i++)
+ hwstats->qmprc += rd32(wx, WX_PX_MPRC(i));
+ }
--- /dev/null
+From 7498159226772d66f150dd406be462d75964a366 Mon Sep 17 00:00:00 2001
+From: Miguel Ojeda <ojeda@kernel.org>
+Date: Sat, 12 Jul 2025 18:01:03 +0200
+Subject: rust: use `#[used(compiler)]` to fix build and `modpost` with Rust >= 1.89.0
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Miguel Ojeda <ojeda@kernel.org>
+
+commit 7498159226772d66f150dd406be462d75964a366 upstream.
+
+Starting with Rust 1.89.0 (expected 2025-08-07), the Rust compiler fails
+to build the `rusttest` target due to undefined references such as:
+
+ kernel...-cgu.0:(.text....+0x116): undefined reference to
+ `rust_helper_kunit_get_current_test'
+
+Moreover, tooling like `modpost` gets confused:
+
+ WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/nova/nova.o
+ ERROR: modpost: missing MODULE_LICENSE() in drivers/gpu/nova-core/nova_core.o
+
+The reason behind both issues is that the Rust compiler will now [1]
+treat `#[used]` as `#[used(linker)]` instead of `#[used(compiler)]`
+for our targets. This means that the retain section flag (`R`,
+`SHF_GNU_RETAIN`) will be used and that they will be marked as `unique`
+too, with different IDs. In turn, that means we end up with undefined
+references that did not get discarded in `rusttest` and that multiple
+`.modinfo` sections are generated, which confuse tooling like `modpost`
+because they only expect one.
+
+Thus start using `#[used(compiler)]` to keep the previous behavior
+and to be explicit about what we want. Sadly, it is an unstable feature
+(`used_with_arg`) [2] -- we will talk to upstream Rust about it. The good
+news is that it has been available for a long time (Rust >= 1.60) [3].
+
+The changes should also be fine for previous Rust versions, since they
+behave the same way as before [4].
+
+Alternatively, we could use `#[no_mangle]` or `#[export_name = ...]`
+since those still behave like `#[used(compiler)]`, but of course it is
+not really what we want to express, and it requires other changes to
+avoid symbol conflicts.
+
+Cc: David Wood <david@davidtw.co>
+Cc: Wesley Wiser <wwiser@gmail.com>
+Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
+Link: https://github.com/rust-lang/rust/pull/140872 [1]
+Link: https://github.com/rust-lang/rust/issues/93798 [2]
+Link: https://github.com/rust-lang/rust/pull/91504 [3]
+Link: https://godbolt.org/z/sxzWTMfzW [4]
+Reviewed-by: Alice Ryhl <aliceryhl@google.com>
+Acked-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
+Link: https://lore.kernel.org/r/20250712160103.1244945-3-ojeda@kernel.org
+Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ rust/Makefile | 1 +
+ rust/kernel/lib.rs | 1 +
+ rust/macros/module.rs | 10 +++++-----
+ scripts/Makefile.build | 2 +-
+ 4 files changed, 8 insertions(+), 6 deletions(-)
+
+--- a/rust/Makefile
++++ b/rust/Makefile
+@@ -157,6 +157,7 @@ quiet_cmd_rustdoc_test = RUSTDOC T $<
+ cmd_rustdoc_test = \
+ OBJTREE=$(abspath $(objtree)) \
+ $(RUSTDOC) --test $(rust_common_flags) \
++ -Zcrate-attr='feature(used_with_arg)' \
+ @$(objtree)/include/generated/rustc_cfg \
+ $(rustc_target_flags) $(rustdoc_test_target_flags) \
+ $(rustdoc_test_quiet) \
+--- a/rust/kernel/lib.rs
++++ b/rust/kernel/lib.rs
+@@ -18,6 +18,7 @@
+ #![feature(inline_const)]
+ #![feature(lint_reasons)]
+ #![feature(unsize)]
++#![feature(used_with_arg)]
+
+ // Ensure conditional compilation based on the kernel configuration works;
+ // otherwise we may silently break things like initcall handling.
+--- a/rust/macros/module.rs
++++ b/rust/macros/module.rs
+@@ -57,7 +57,7 @@ impl<'a> ModInfoBuilder<'a> {
+ {cfg}
+ #[doc(hidden)]
+ #[link_section = \".modinfo\"]
+- #[used]
++ #[used(compiler)]
+ pub static __{module}_{counter}: [u8; {length}] = *{string};
+ ",
+ cfg = if builtin {
+@@ -230,7 +230,7 @@ pub(crate) fn module(ts: TokenStream) ->
+ // key or a new section. For the moment, keep it simple.
+ #[cfg(MODULE)]
+ #[doc(hidden)]
+- #[used]
++ #[used(compiler)]
+ static __IS_RUST_MODULE: () = ();
+
+ static mut __MOD: Option<{type_}> = None;
+@@ -253,7 +253,7 @@ pub(crate) fn module(ts: TokenStream) ->
+
+ #[cfg(MODULE)]
+ #[doc(hidden)]
+- #[used]
++ #[used(compiler)]
+ #[link_section = \".init.data\"]
+ static __UNIQUE_ID___addressable_init_module: unsafe extern \"C\" fn() -> i32 = init_module;
+
+@@ -273,7 +273,7 @@ pub(crate) fn module(ts: TokenStream) ->
+
+ #[cfg(MODULE)]
+ #[doc(hidden)]
+- #[used]
++ #[used(compiler)]
+ #[link_section = \".exit.data\"]
+ static __UNIQUE_ID___addressable_cleanup_module: extern \"C\" fn() = cleanup_module;
+
+@@ -283,7 +283,7 @@ pub(crate) fn module(ts: TokenStream) ->
+ #[cfg(not(CONFIG_HAVE_ARCH_PREL32_RELOCATIONS))]
+ #[doc(hidden)]
+ #[link_section = \"{initcall_section}\"]
+- #[used]
++ #[used(compiler)]
+ pub static __{name}_initcall: extern \"C\" fn() -> kernel::ffi::c_int = __{name}_init;
+
+ #[cfg(not(MODULE))]
+--- a/scripts/Makefile.build
++++ b/scripts/Makefile.build
+@@ -248,7 +248,7 @@ $(obj)/%.lst: $(obj)/%.c FORCE
+ # Compile Rust sources (.rs)
+ # ---------------------------------------------------------------------------
+
+-rust_allowed_features := arbitrary_self_types,lint_reasons
++rust_allowed_features := arbitrary_self_types,lint_reasons,used_with_arg
+
+ # `--out-dir` is required to avoid temporaries being created by `rustc` in the
+ # current working directory, which may be not accessible in the out-of-tree
--- /dev/null
+From f01750aecdfb8bfb02842f60af3d805a3ae7267a Mon Sep 17 00:00:00 2001
+From: Ihor Solodrai <ihor.solodrai@pm.me>
+Date: Fri, 15 Nov 2024 00:38:55 +0000
+Subject: selftests/bpf: Set test path for token/obj_priv_implicit_token_envvar
+
+From: Ihor Solodrai <ihor.solodrai@pm.me>
+
+commit f01750aecdfb8bfb02842f60af3d805a3ae7267a upstream.
+
+token/obj_priv_implicit_token_envvar test may fail in an environment
+where the process executing tests can not write to the root path.
+
+Example:
+https://github.com/libbpf/libbpf/actions/runs/11844507007/job/33007897936
+
+Change default path used by the test to /tmp/bpf-token-fs, and make it
+runtime configurable via an environment variable.
+
+Signed-off-by: Ihor Solodrai <ihor.solodrai@pm.me>
+Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
+Link: https://lore.kernel.org/bpf/20241115003853.864397-1-ihor.solodrai@pm.me
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
+---
+ tools/testing/selftests/bpf/prog_tests/token.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+--- a/tools/testing/selftests/bpf/prog_tests/token.c
++++ b/tools/testing/selftests/bpf/prog_tests/token.c
+@@ -828,8 +828,12 @@ static int userns_obj_priv_btf_success(i
+ return validate_struct_ops_load(mnt_fd, true /* should succeed */);
+ }
+
++static const char *token_bpffs_custom_dir()
++{
++ return getenv("BPF_SELFTESTS_BPF_TOKEN_DIR") ?: "/tmp/bpf-token-fs";
++}
++
+ #define TOKEN_ENVVAR "LIBBPF_BPF_TOKEN_PATH"
+-#define TOKEN_BPFFS_CUSTOM "/bpf-token-fs"
+
+ static int userns_obj_priv_implicit_token(int mnt_fd, struct token_lsm *lsm_skel)
+ {
+@@ -892,6 +896,7 @@ static int userns_obj_priv_implicit_toke
+
+ static int userns_obj_priv_implicit_token_envvar(int mnt_fd, struct token_lsm *lsm_skel)
+ {
++ const char *custom_dir = token_bpffs_custom_dir();
+ LIBBPF_OPTS(bpf_object_open_opts, opts);
+ struct dummy_st_ops_success *skel;
+ int err;
+@@ -909,10 +914,10 @@ static int userns_obj_priv_implicit_toke
+ * BPF token implicitly, unless pointed to it through
+ * LIBBPF_BPF_TOKEN_PATH envvar
+ */
+- rmdir(TOKEN_BPFFS_CUSTOM);
+- if (!ASSERT_OK(mkdir(TOKEN_BPFFS_CUSTOM, 0777), "mkdir_bpffs_custom"))
++ rmdir(custom_dir);
++ if (!ASSERT_OK(mkdir(custom_dir, 0777), "mkdir_bpffs_custom"))
+ goto err_out;
+- err = sys_move_mount(mnt_fd, "", AT_FDCWD, TOKEN_BPFFS_CUSTOM, MOVE_MOUNT_F_EMPTY_PATH);
++ err = sys_move_mount(mnt_fd, "", AT_FDCWD, custom_dir, MOVE_MOUNT_F_EMPTY_PATH);
+ if (!ASSERT_OK(err, "move_mount_bpffs"))
+ goto err_out;
+
+@@ -925,7 +930,7 @@ static int userns_obj_priv_implicit_toke
+ goto err_out;
+ }
+
+- err = setenv(TOKEN_ENVVAR, TOKEN_BPFFS_CUSTOM, 1 /*overwrite*/);
++ err = setenv(TOKEN_ENVVAR, custom_dir, 1 /*overwrite*/);
+ if (!ASSERT_OK(err, "setenv_token_path"))
+ goto err_out;
+
+@@ -951,11 +956,11 @@ static int userns_obj_priv_implicit_toke
+ if (!ASSERT_ERR(err, "obj_empty_token_path_load"))
+ goto err_out;
+
+- rmdir(TOKEN_BPFFS_CUSTOM);
++ rmdir(custom_dir);
+ unsetenv(TOKEN_ENVVAR);
+ return 0;
+ err_out:
+- rmdir(TOKEN_BPFFS_CUSTOM);
++ rmdir(custom_dir);
+ unsetenv(TOKEN_ENVVAR);
+ return -EINVAL;
+ }
usb-hub-fix-flushing-of-delayed-work-used-for-post-resume-purposes.patch
usb-hub-don-t-try-to-recover-devices-lost-during-warm-reset.patch
usb-dwc3-qcom-don-t-leave-bcr-asserted.patch
+net-libwx-fix-multicast-packets-received-count.patch
+rust-use-to-fix-build-and-modpost-with-rust-1.89.0.patch
+selftests-bpf-set-test-path-for-token-obj_priv_implicit_token_envvar.patch
+i2c-omap-add-support-for-setting-mux.patch
+i2c-omap-fix-an-error-handling-path-in-omap_i2c_probe.patch
+i2c-omap-handle-omap_i2c_init-errors-in-omap_i2c_probe.patch