Fixes for all trees

Signed-off-by: Sasha Levin <sashal@kernel.org>
diff --git a/queue-5.10/btrfs-fix-transaction-abort-on-set-received-ioctl-du.patch b/queue-5.10/btrfs-fix-transaction-abort-on-set-received-ioctl-du.patch
new file mode 100644
index 0000000..7761fb8
--- /dev/null
+++ b/queue-5.10/btrfs-fix-transaction-abort-on-set-received-ioctl-du.patch
@@ -0,0 +1,147 @@
+From 59da1e3ff3cc66b5dff4936e1209e1b93f647984 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 Apr 2026 09:02:32 -0400
+Subject: btrfs: fix transaction abort on set received ioctl due to item
+ overflow
+
+From: Filipe Manana <fdmanana@suse.com>
+
+[ Upstream commit 87f2c46003fce4d739138aab4af1942b1afdadac ]
+
+If the set received ioctl fails due to an item overflow when attempting to
+add the BTRFS_UUID_KEY_RECEIVED_SUBVOL we have to abort the transaction
+since we did some metadata updates before.
+
+This means that if a user calls this ioctl with the same received UUID
+field for a lot of subvolumes, we will hit the overflow, trigger the
+transaction abort and turn the filesystem into RO mode. A malicious user
+could exploit this, and this ioctl does not even requires that a user
+has admin privileges (CAP_SYS_ADMIN), only that he/she owns the subvolume.
+
+Fix this by doing an early check for item overflow before starting a
+transaction. This is also race safe because we are holding the subvol_sem
+semaphore in exclusive (write) mode.
+
+A test case for fstests will follow soon.
+
+Fixes: dd5f9615fc5c ("Btrfs: maintain subvolume items in the UUID tree")
+CC: stable@vger.kernel.org # 3.12+
+Reviewed-by: Anand Jain <asj@kernel.org>
+Signed-off-by: Filipe Manana <fdmanana@suse.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/btrfs/ctree.h     |  2 ++
+ fs/btrfs/ioctl.c     | 21 +++++++++++++++++++--
+ fs/btrfs/uuid-tree.c | 42 ++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 63 insertions(+), 2 deletions(-)
+
+diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
+index a9926fb10c491..c395035980eef 100644
+--- a/fs/btrfs/ctree.h
++++ b/fs/btrfs/ctree.h
+@@ -2870,6 +2870,8 @@ int btrfs_uuid_tree_add(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
+ int btrfs_uuid_tree_remove(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
+ 			u64 subid);
+ int btrfs_uuid_tree_iterate(struct btrfs_fs_info *fs_info);
++int btrfs_uuid_tree_check_overflow(struct btrfs_fs_info *fs_info,
++				   u8 *uuid, u8 type);
+ 
+ /* dir-item.c */
+ int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
+diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
+index 574a00db258a0..3712396c3f8a0 100644
+--- a/fs/btrfs/ioctl.c
++++ b/fs/btrfs/ioctl.c
+@@ -4486,6 +4486,25 @@ static long _btrfs_ioctl_set_received_subvol(struct file *file,
+ 		goto out;
+ 	}
+ 
++	received_uuid_changed = memcmp(root_item->received_uuid, sa->uuid,
++				       BTRFS_UUID_SIZE);
++
++	/*
++	 * Before we attempt to add the new received uuid, check if we have room
++	 * for it in case there's already an item. If the size of the existing
++	 * item plus this root's ID (u64) exceeds the maximum item size, we can
++	 * return here without the need to abort a transaction. If we don't do
++	 * this check, the btrfs_uuid_tree_add() call below would fail with
++	 * -EOVERFLOW and result in a transaction abort. Malicious users could
++	 * exploit this to turn the fs into RO mode.
++	 */
++	if (received_uuid_changed && !btrfs_is_empty_uuid(sa->uuid)) {
++		ret = btrfs_uuid_tree_check_overflow(fs_info, sa->uuid,
++						     BTRFS_UUID_KEY_RECEIVED_SUBVOL);
++		if (ret < 0)
++			goto out;
++	}
++
+ 	/*
+ 	 * 1 - root item
+ 	 * 2 - uuid items (received uuid + subvol uuid)
+@@ -4501,8 +4520,6 @@ static long _btrfs_ioctl_set_received_subvol(struct file *file,
+ 	sa->rtime.sec = ct.tv_sec;
+ 	sa->rtime.nsec = ct.tv_nsec;
+ 
+-	received_uuid_changed = memcmp(root_item->received_uuid, sa->uuid,
+-				       BTRFS_UUID_SIZE);
+ 	if (received_uuid_changed &&
+ 	    !btrfs_is_empty_uuid(root_item->received_uuid)) {
+ 		ret = btrfs_uuid_tree_remove(trans, root_item->received_uuid,
+diff --git a/fs/btrfs/uuid-tree.c b/fs/btrfs/uuid-tree.c
+index 28525ad7ff8cb..d40e1731b570e 100644
+--- a/fs/btrfs/uuid-tree.c
++++ b/fs/btrfs/uuid-tree.c
+@@ -226,6 +226,48 @@ int btrfs_uuid_tree_remove(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
+ 	return ret;
+ }
+ 
++/*
++ * Check if we can add one root ID to a UUID key.
++ * If the key does not yet exists, we can, otherwise only if extended item does
++ * not exceeds the maximum item size permitted by the leaf size.
++ *
++ * Returns 0 on success, negative value on error.
++ */
++int btrfs_uuid_tree_check_overflow(struct btrfs_fs_info *fs_info,
++				   u8 *uuid, u8 type)
++{
++	struct btrfs_path *path = NULL;
++	int ret;
++	u32 item_size;
++	struct btrfs_key key;
++
++	if (WARN_ON_ONCE(!fs_info->uuid_root))
++		return -EINVAL;
++
++	path = btrfs_alloc_path();
++	if (!path)
++		return -ENOMEM;
++
++	btrfs_uuid_to_key(uuid, type, &key);
++	ret = btrfs_search_slot(NULL, fs_info->uuid_root, &key, path, 0, 0);
++	if (ret < 0)
++		goto out;
++	if (ret > 0) {
++		ret = 0;
++		goto out;
++	}
++
++	item_size = btrfs_item_size_nr(path->nodes[0], path->slots[0]);
++
++	if (sizeof(struct btrfs_item) + item_size + sizeof(u64) >
++	    BTRFS_LEAF_DATA_SIZE(fs_info))
++		ret = -EOVERFLOW;
++
++out:
++	btrfs_free_path(path);
++	return ret;
++}
++
+ static int btrfs_uuid_iter_rem(struct btrfs_root *uuid_root, u8 *uuid, u8 type,
+ 			       u64 subid)
+ {
+-- 
+2.53.0
+
diff --git a/queue-5.10/drm-vmwgfx-add-seqno-waiter-for-sync_files.patch-18451 b/queue-5.10/drm-vmwgfx-add-seqno-waiter-for-sync_files.patch-18451
new file mode 100644
index 0000000..3069844
--- /dev/null
+++ b/queue-5.10/drm-vmwgfx-add-seqno-waiter-for-sync_files.patch-18451
@@ -0,0 +1,91 @@
+From 9d079da810823569a1246aea670560a5648ae356 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 28 Feb 2025 14:06:33 -0600
+Subject: drm/vmwgfx: Add seqno waiter for sync_files
+
+From: Ian Forbes <ian.forbes@broadcom.com>
+
+[ Upstream commit 0039a3b35b10d9c15d3d26320532ab56cc566750 ]
+
+Because sync_files are passive waiters they do not participate in
+the processing of fences like the traditional vmw_fence_wait IOCTL.
+If userspace exclusively uses sync_files for synchronization then
+nothing in the kernel actually processes fence updates as interrupts
+for fences are masked and ignored if the kernel does not indicate to the
+SVGA device that there are active waiters.
+
+This oversight results in a bug where the entire GUI can freeze waiting
+on a sync_file that will never be signalled as we've masked the interrupts
+to signal its completion. This bug is incredibly racy as any process which
+interacts with the fencing code via the 3D stack can process the stuck
+fences on behalf of the stuck process causing it to run again. Even a
+simple app like eglinfo is enough to resume the stuck process. Usually
+this bug is seen at a login screen like GDM because there are no other
+3D apps running.
+
+By adding a seqno waiter we re-enable interrupt based processing of the
+dma_fences associated with the sync_file which is signalled as part of a
+dma_fence_callback.
+
+This has likely been broken since it was initially added to the kernel in
+2017 but has gone unnoticed until mutter recently started using sync_files
+heavily over the course of 2024 as part of their explicit sync support.
+
+Fixes: c906965dee22 ("drm/vmwgfx: Add export fence to file descriptor support")
+Signed-off-by: Ian Forbes <ian.forbes@broadcom.com>
+Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20250228200633.642417-1-ian.forbes@broadcom.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 26 +++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+index daea547704ddc..9bec26fda14cb 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+@@ -4039,6 +4039,23 @@ static int vmw_execbuf_tie_context(struct vmw_private *dev_priv,
+ 	return 0;
+ }
+ 
++/*
++ * DMA fence callback to remove a seqno_waiter
++ */
++struct seqno_waiter_rm_context {
++	struct dma_fence_cb base;
++	struct vmw_private *dev_priv;
++};
++
++static void seqno_waiter_rm_cb(struct dma_fence *f, struct dma_fence_cb *cb)
++{
++	struct seqno_waiter_rm_context *ctx =
++		container_of(cb, struct seqno_waiter_rm_context, base);
++
++	vmw_seqno_waiter_remove(ctx->dev_priv);
++	kfree(ctx);
++}
++
+ int vmw_execbuf_process(struct drm_file *file_priv,
+ 			struct vmw_private *dev_priv,
+ 			void __user *user_commands, void *kernel_commands,
+@@ -4230,8 +4247,17 @@ int vmw_execbuf_process(struct drm_file *file_priv,
+ 			fput(sync_file->file);
+ 			put_unused_fd(out_fence_fd);
+ 		} else {
++			struct seqno_waiter_rm_context *ctx;
+ 			/* Link the fence with the FD created earlier */
+ 			fd_install(out_fence_fd, sync_file->file);
++			ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
++			ctx->dev_priv = dev_priv;
++			vmw_seqno_waiter_add(dev_priv);
++			if (dma_fence_add_callback(&fence->base, &ctx->base,
++						   seqno_waiter_rm_cb) < 0) {
++				vmw_seqno_waiter_remove(dev_priv);
++				kfree(ctx);
++			}
+ 		}
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-5.10/efi-mokvar-table-avoid-repeated-map-unmap-of-the-sam.patch b/queue-5.10/efi-mokvar-table-avoid-repeated-map-unmap-of-the-sam.patch
new file mode 100644
index 0000000..6626b2c
--- /dev/null
+++ b/queue-5.10/efi-mokvar-table-avoid-repeated-map-unmap-of-the-sam.patch
@@ -0,0 +1,73 @@
+From 762795dc246a2cd1f66587e6a3fd74d3d5548c03 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 27 Feb 2025 14:30:22 +0100
+Subject: efi/mokvar-table: Avoid repeated map/unmap of the same page
+
+From: Ard Biesheuvel <ardb@kernel.org>
+
+[ Upstream commit e3cf2d91d0583cae70aeb512da87e3ade25ea912 ]
+
+Tweak the logic that traverses the MOKVAR UEFI configuration table to
+only unmap the entry header and map the next one if they don't live in
+the same physical page.
+
+Link: https://lore.kernel.org/all/8f085931-3e9d-4386-9209-1d6c95616327@uncooperative.org/
+Tested-By: Peter Jones <pjones@redhat.com>
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/efi/mokvar-table.c | 18 +++++++++++++++---
+ 1 file changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/firmware/efi/mokvar-table.c b/drivers/firmware/efi/mokvar-table.c
+index 39a49adf007a5..69ac876ca809d 100644
+--- a/drivers/firmware/efi/mokvar-table.c
++++ b/drivers/firmware/efi/mokvar-table.c
+@@ -99,13 +99,13 @@ static struct kobject *mokvar_kobj;
+  */
+ void __init efi_mokvar_table_init(void)
+ {
++	struct efi_mokvar_table_entry __aligned(1) *mokvar_entry, *next_entry;
+ 	efi_memory_desc_t md;
+ 	void *va = NULL;
+ 	unsigned long cur_offset = 0;
+ 	unsigned long offset_limit;
+ 	unsigned long map_size_needed = 0;
+ 	unsigned long size;
+-	struct efi_mokvar_table_entry *mokvar_entry;
+ 	int err;
+ 
+ 	if (!efi_enabled(EFI_MEMMAP))
+@@ -142,7 +142,7 @@ void __init efi_mokvar_table_init(void)
+ 			return;
+ 		}
+ 		mokvar_entry = va;
+-
++next:
+ 		/* Check for last sentinel entry */
+ 		if (mokvar_entry->name[0] == '\0') {
+ 			if (mokvar_entry->data_size != 0)
+@@ -156,7 +156,19 @@ void __init efi_mokvar_table_init(void)
+ 		mokvar_entry->name[sizeof(mokvar_entry->name) - 1] = '\0';
+ 
+ 		/* Advance to the next entry */
+-		cur_offset += sizeof(*mokvar_entry) + mokvar_entry->data_size;
++		size = sizeof(*mokvar_entry) + mokvar_entry->data_size;
++		cur_offset += size;
++
++		/*
++		 * Don't bother remapping if the current entry header and the
++		 * next one end on the same page.
++		 */
++		next_entry = (void *)((unsigned long)mokvar_entry + size);
++		if (((((unsigned long)(mokvar_entry + 1) - 1) ^
++		      ((unsigned long)(next_entry + 1) - 1)) & PAGE_MASK) == 0) {
++			mokvar_entry = next_entry;
++			goto next;
++		}
+ 	}
+ 
+ 	if (va)
+-- 
+2.53.0
+
diff --git a/queue-5.10/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch b/queue-5.10/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
new file mode 100644
index 0000000..94e2078
--- /dev/null
+++ b/queue-5.10/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
@@ -0,0 +1,42 @@
+From bfccb09fdb85e91114583e1ea9e7d6a2315485ed Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 22:45:29 +0000
+Subject: hwmon: (occ) Fix missing newline in occ_show_extended()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 09773978879ecf71a7990fe9a28ce4eb92bce645 ]
+
+In occ_show_extended() case 0, when the EXTN_FLAG_SENSOR_ID flag
+is set, the sysfs_emit format string "%u" is missing the trailing
+newline that the sysfs ABI expects. The else branch correctly uses
+"%4phN\n", and all other show functions in this file include the
+trailing newline.
+
+Add the missing "\n" for consistency and correct sysfs output.
+
+Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260326224510.294619-3-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/occ/common.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
+index 1a6c8ebc32e16..2b088418259b0 100644
+--- a/drivers/hwmon/occ/common.c
++++ b/drivers/hwmon/occ/common.c
+@@ -727,7 +727,7 @@ static ssize_t occ_show_extended(struct device *dev,
+ 	switch (sattr->nr) {
+ 	case 0:
+ 		if (extn->flags & EXTN_FLAG_SENSOR_ID) {
+-			rc = sysfs_emit(buf, "%u",
++			rc = sysfs_emit(buf, "%u\n",
+ 					get_unaligned_be32(&extn->sensor_id));
+ 		} else {
+ 			rc = sysfs_emit(buf, "%02x%02x%02x%02x\n",
+-- 
+2.53.0
+
diff --git a/queue-5.10/hwmon-pxe1610-check-return-value-of-page-select-writ.patch b/queue-5.10/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
new file mode 100644
index 0000000..938ab20
--- /dev/null
+++ b/queue-5.10/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
@@ -0,0 +1,45 @@
+From 07496096fbb353f30eaac1595383c8592732a58b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:48 +0000
+Subject: hwmon: (pxe1610) Check return value of page-select write in probe
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ccf70c41e562b29d1c05d1bbf53391785e09c6fb ]
+
+pxe1610_probe() writes PMBUS_PAGE to select page 0 but does not check
+the return value. If the write fails, subsequent register reads operate
+on an indeterminate page, leading to silent misconfiguration.
+
+Check the return value and propagate the error using dev_err_probe(),
+which also handles -EPROBE_DEFER correctly without log spam.
+
+Fixes: 344757bac526 ("hwmon: (pmbus) Add Infineon PXE1610 VR driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-4-sanman.pradhan@hpe.com
+[groeck: Fix "Fixes" SHA]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/pxe1610.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c
+index 212433eb6cc31..7794e5cf550fc 100644
+--- a/drivers/hwmon/pmbus/pxe1610.c
++++ b/drivers/hwmon/pmbus/pxe1610.c
+@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)
+ 	 * By default this device doesn't boot to page 0, so set page 0
+ 	 * to access all pmbus registers.
+ 	 */
+-	i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	ret = i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	if (ret < 0)
++		return dev_err_probe(&client->dev, ret,
++				     "Failed to set page 0\n");
+ 
+ 	/* Read Manufacturer id */
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf);
+-- 
+2.53.0
+
diff --git a/queue-5.10/media-dvb-frontends-w7090p-fix-null-ptr-deref-in-w70.patch b/queue-5.10/media-dvb-frontends-w7090p-fix-null-ptr-deref-in-w70.patch
new file mode 100644
index 0000000..bcc3f29
--- /dev/null
+++ b/queue-5.10/media-dvb-frontends-w7090p-fix-null-ptr-deref-in-w70.patch
@@ -0,0 +1,58 @@
+From 62e679f2c3cbd2fdede11c97fbab3d439930aff2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 15 Jun 2025 21:33:53 -0400
+Subject: media: dvb-frontends: w7090p: fix null-ptr-deref in
+ w7090p_tuner_write_serpar and w7090p_tuner_read_serpar
+
+From: Alex Guo <alexguo1023@gmail.com>
+
+[ Upstream commit ed0234c8458b3149f15e496b48a1c9874dd24a1b ]
+
+In w7090p_tuner_write_serpar, msg is controlled by user. When msg[0].buf is null and msg[0].len is zero, former checks on msg[0].buf would be passed. If accessing msg[0].buf[2] without sanity check, null pointer deref would happen. We add
+check on msg[0].len to prevent crash.
+
+Similar commit: commit 0ed554fd769a ("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
+
+Signed-off-by: Alex Guo <alexguo1023@gmail.com>
+Link: https://lore.kernel.org/r/20250616013353.738790-1-alexguo1023@gmail.com
+Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/dvb-frontends/dib7000p.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb-frontends/dib7000p.c b/drivers/media/dvb-frontends/dib7000p.c
+index a4d060fb1babd..18b48a3984291 100644
+--- a/drivers/media/dvb-frontends/dib7000p.c
++++ b/drivers/media/dvb-frontends/dib7000p.c
+@@ -2198,7 +2198,11 @@ static int w7090p_tuner_write_serpar(struct i2c_adapter *i2c_adap, struct i2c_ms
+ 	struct dib7000p_state *state = i2c_get_adapdata(i2c_adap);
+ 	u8 n_overflow = 1;
+ 	u16 i = 1000;
+-	u16 serpar_num = msg[0].buf[0];
++	u16 serpar_num;
++
++	if (msg[0].len < 3)
++		return -EOPNOTSUPP;
++	serpar_num = msg[0].buf[0];
+ 
+ 	while (n_overflow == 1 && i) {
+ 		n_overflow = (dib7000p_read_word(state, 1984) >> 1) & 0x1;
+@@ -2217,9 +2221,13 @@ static int w7090p_tuner_read_serpar(struct i2c_adapter *i2c_adap, struct i2c_msg
+ 	struct dib7000p_state *state = i2c_get_adapdata(i2c_adap);
+ 	u8 n_overflow = 1, n_empty = 1;
+ 	u16 i = 1000;
+-	u16 serpar_num = msg[0].buf[0];
++	u16 serpar_num;
+ 	u16 read_word;
+ 
++	if (msg[0].len < 1 || msg[1].len < 2)
++		return -EOPNOTSUPP;
++	serpar_num = msg[0].buf[0];
++
+ 	while (n_overflow == 1 && i) {
+ 		n_overflow = (dib7000p_read_word(state, 1984) >> 1) & 0x1;
+ 		i--;
+-- 
+2.53.0
+
diff --git a/queue-5.10/revert-btrfs-fix-transaction-abort-on-set-received-i.patch b/queue-5.10/revert-btrfs-fix-transaction-abort-on-set-received-i.patch
new file mode 100644
index 0000000..6c4c643
--- /dev/null
+++ b/queue-5.10/revert-btrfs-fix-transaction-abort-on-set-received-i.patch
@@ -0,0 +1,127 @@
+From bfe3c6804c83ddaade6f882277e363dadd75ac0c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 Apr 2026 08:55:23 -0400
+Subject: Revert "btrfs: fix transaction abort on set received ioctl due to
+ item overflow"
+
+This reverts commit 20b9a8d6f7ff4dc7dff3fdcba51730caa536a2de.
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/btrfs/ctree.h     |  2 --
+ fs/btrfs/ioctl.c     | 21 ++------------------
+ fs/btrfs/uuid-tree.c | 46 --------------------------------------------
+ 3 files changed, 2 insertions(+), 67 deletions(-)
+
+diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
+index 15affee7c6d11..a9926fb10c491 100644
+--- a/fs/btrfs/ctree.h
++++ b/fs/btrfs/ctree.h
+@@ -2869,8 +2869,6 @@ int btrfs_uuid_tree_add(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
+ 			u64 subid);
+ int btrfs_uuid_tree_remove(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
+ 			u64 subid);
+-int btrfs_uuid_tree_check_overflow(struct btrfs_fs_info *fs_info,
+-				   u8 *uuid, u8 type);
+ int btrfs_uuid_tree_iterate(struct btrfs_fs_info *fs_info);
+ 
+ /* dir-item.c */
+diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
+index 3712396c3f8a0..574a00db258a0 100644
+--- a/fs/btrfs/ioctl.c
++++ b/fs/btrfs/ioctl.c
+@@ -4486,25 +4486,6 @@ static long _btrfs_ioctl_set_received_subvol(struct file *file,
+ 		goto out;
+ 	}
+ 
+-	received_uuid_changed = memcmp(root_item->received_uuid, sa->uuid,
+-				       BTRFS_UUID_SIZE);
+-
+-	/*
+-	 * Before we attempt to add the new received uuid, check if we have room
+-	 * for it in case there's already an item. If the size of the existing
+-	 * item plus this root's ID (u64) exceeds the maximum item size, we can
+-	 * return here without the need to abort a transaction. If we don't do
+-	 * this check, the btrfs_uuid_tree_add() call below would fail with
+-	 * -EOVERFLOW and result in a transaction abort. Malicious users could
+-	 * exploit this to turn the fs into RO mode.
+-	 */
+-	if (received_uuid_changed && !btrfs_is_empty_uuid(sa->uuid)) {
+-		ret = btrfs_uuid_tree_check_overflow(fs_info, sa->uuid,
+-						     BTRFS_UUID_KEY_RECEIVED_SUBVOL);
+-		if (ret < 0)
+-			goto out;
+-	}
+-
+ 	/*
+ 	 * 1 - root item
+ 	 * 2 - uuid items (received uuid + subvol uuid)
+@@ -4520,6 +4501,8 @@ static long _btrfs_ioctl_set_received_subvol(struct file *file,
+ 	sa->rtime.sec = ct.tv_sec;
+ 	sa->rtime.nsec = ct.tv_nsec;
+ 
++	received_uuid_changed = memcmp(root_item->received_uuid, sa->uuid,
++				       BTRFS_UUID_SIZE);
+ 	if (received_uuid_changed &&
+ 	    !btrfs_is_empty_uuid(root_item->received_uuid)) {
+ 		ret = btrfs_uuid_tree_remove(trans, root_item->received_uuid,
+diff --git a/fs/btrfs/uuid-tree.c b/fs/btrfs/uuid-tree.c
+index aee89c7293f65..28525ad7ff8cb 100644
+--- a/fs/btrfs/uuid-tree.c
++++ b/fs/btrfs/uuid-tree.c
+@@ -226,52 +226,6 @@ int btrfs_uuid_tree_remove(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
+ 	return ret;
+ }
+ 
+-/*
+- * Check if we can add one root ID to a UUID key.
+- * If the key does not yet exists, we can, otherwise only if extended item does
+- * not exceeds the maximum item size permitted by the leaf size.
+- *
+- * Returns 0 on success, negative value on error.
+- */
+-int btrfs_uuid_tree_check_overflow(struct btrfs_fs_info *fs_info,
+-				   u8 *uuid, u8 type)
+-{
+-	struct btrfs_path *path = NULL;
+-	int ret;
+-	u32 item_size;
+-	struct btrfs_key key;
+-
+-	if (WARN_ON_ONCE(!fs_info->uuid_root)) {
+-		ret = -EINVAL;
+-		goto out;
+-	}
+-
+-	path = btrfs_alloc_path();
+-	if (!path) {
+-		ret = -ENOMEM;
+-		goto out;
+-	}
+-
+-	btrfs_uuid_to_key(uuid, type, &key);
+-	ret = btrfs_search_slot(NULL, fs_info->uuid_root, &key, path, 0, 0);
+-	if (ret < 0)
+-		goto out;
+-	if (ret > 0) {
+-		ret = 0;
+-		goto out;
+-	}
+-
+-	item_size = btrfs_item_size(path->nodes[0], path->slots[0]);
+-
+-	if (sizeof(struct btrfs_item) + item_size + sizeof(u64) >
+-	    BTRFS_LEAF_DATA_SIZE(fs_info))
+-		ret = -EOVERFLOW;
+-
+-out:
+-	btrfs_free_path(path);
+-	return ret;
+-}
+-
+ static int btrfs_uuid_iter_rem(struct btrfs_root *uuid_root, u8 *uuid, u8 type,
+ 			       u64 subid)
+ {
+-- 
+2.53.0
+
diff --git a/queue-5.10/revert-drm-vmwgfx-add-seqno-waiter-for-sync_files.patch b/queue-5.10/revert-drm-vmwgfx-add-seqno-waiter-for-sync_files.patch
new file mode 100644
index 0000000..1f3a5db
--- /dev/null
+++ b/queue-5.10/revert-drm-vmwgfx-add-seqno-waiter-for-sync_files.patch
@@ -0,0 +1,59 @@
+From e10d488d35b51e42677b371088bdd8901edc34e1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 Apr 2026 09:44:24 -0400
+Subject: Revert "drm/vmwgfx: Add seqno waiter for sync_files"
+
+This reverts commit 7db6c88bb52f3b7525a06110cfd208990c49f8b4.
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 26 -------------------------
+ 1 file changed, 26 deletions(-)
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+index 361f96d09374d..daea547704ddc 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+@@ -4039,23 +4039,6 @@ static int vmw_execbuf_tie_context(struct vmw_private *dev_priv,
+ 	return 0;
+ }
+ 
+-/*
+- * DMA fence callback to remove a seqno_waiter
+- */
+-struct seqno_waiter_rm_context {
+-	struct dma_fence_cb base;
+-	struct vmw_private *dev_priv;
+-};
+-
+-static void seqno_waiter_rm_cb(struct dma_fence *f, struct dma_fence_cb *cb)
+-{
+-	struct seqno_waiter_rm_context *ctx =
+-		container_of(cb, struct seqno_waiter_rm_context, base);
+-
+-	vmw_seqno_waiter_remove(ctx->dev_priv);
+-	kfree(ctx);
+-}
+-
+ int vmw_execbuf_process(struct drm_file *file_priv,
+ 			struct vmw_private *dev_priv,
+ 			void __user *user_commands, void *kernel_commands,
+@@ -4249,15 +4232,6 @@ int vmw_execbuf_process(struct drm_file *file_priv,
+ 		} else {
+ 			/* Link the fence with the FD created earlier */
+ 			fd_install(out_fence_fd, sync_file->file);
+-			struct seqno_waiter_rm_context *ctx =
+-				kmalloc(sizeof(*ctx), GFP_KERNEL);
+-			ctx->dev_priv = dev_priv;
+-			vmw_seqno_waiter_add(dev_priv);
+-			if (dma_fence_add_callback(&fence->base, &ctx->base,
+-						   seqno_waiter_rm_cb) < 0) {
+-				vmw_seqno_waiter_remove(dev_priv);
+-				kfree(ctx);
+-			}
+ 		}
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-5.10/revert-media-dvb-frontends-w7090p-fix-null-ptr-deref.patch b/queue-5.10/revert-media-dvb-frontends-w7090p-fix-null-ptr-deref.patch
new file mode 100644
index 0000000..11fece5
--- /dev/null
+++ b/queue-5.10/revert-media-dvb-frontends-w7090p-fix-null-ptr-deref.patch
@@ -0,0 +1,38 @@
+From 1486ed19c7f53899f7b16bec0e3e857377113bbd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 Apr 2026 10:40:26 -0400
+Subject: Revert "media: dvb-frontends: w7090p: fix null-ptr-deref in
+ w7090p_tuner_write_serpar and w7090p_tuner_read_serpar"
+
+This reverts commit b3d77a3fc71c084575d3df4ec6544b3fb6ce587d.
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/dvb-frontends/dib7000p.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/drivers/media/dvb-frontends/dib7000p.c b/drivers/media/dvb-frontends/dib7000p.c
+index 08b3ac8ff1083..a4d060fb1babd 100644
+--- a/drivers/media/dvb-frontends/dib7000p.c
++++ b/drivers/media/dvb-frontends/dib7000p.c
+@@ -2198,8 +2198,6 @@ static int w7090p_tuner_write_serpar(struct i2c_adapter *i2c_adap, struct i2c_ms
+ 	struct dib7000p_state *state = i2c_get_adapdata(i2c_adap);
+ 	u8 n_overflow = 1;
+ 	u16 i = 1000;
+-	if (msg[0].len < 3)
+-		return -EOPNOTSUPP;
+ 	u16 serpar_num = msg[0].buf[0];
+ 
+ 	while (n_overflow == 1 && i) {
+@@ -2219,8 +2217,6 @@ static int w7090p_tuner_read_serpar(struct i2c_adapter *i2c_adap, struct i2c_msg
+ 	struct dib7000p_state *state = i2c_get_adapdata(i2c_adap);
+ 	u8 n_overflow = 1, n_empty = 1;
+ 	u16 i = 1000;
+-	if (msg[0].len < 1 || msg[1].len < 2)
+-		return -EOPNOTSUPP;
+ 	u16 serpar_num = msg[0].buf[0];
+ 	u16 read_word;
+ 
+-- 
+2.53.0
+
diff --git a/queue-5.10/revert-scsi-core-wake-up-the-error-handler-when-fina.patch b/queue-5.10/revert-scsi-core-wake-up-the-error-handler-when-fina.patch
new file mode 100644
index 0000000..6bcdb13
--- /dev/null
+++ b/queue-5.10/revert-scsi-core-wake-up-the-error-handler-when-fina.patch
@@ -0,0 +1,62 @@
+From 9632149df503f37834581279a5bada1c4cc3f5ee Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 Apr 2026 10:26:40 -0400
+Subject: Revert "scsi: core: Wake up the error handler when final completions
+ race against each other"
+
+This reverts commit cc872e35c0df80062abc71268d690a2f749e542e.
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/scsi_error.c | 11 +----------
+ drivers/scsi/scsi_lib.c   |  8 --------
+ 2 files changed, 1 insertion(+), 18 deletions(-)
+
+diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
+index 4e9114f069832..ffc6f3031e82b 100644
+--- a/drivers/scsi/scsi_error.c
++++ b/drivers/scsi/scsi_error.c
+@@ -241,20 +241,11 @@ static void scsi_eh_inc_host_failed(struct rcu_head *head)
+ {
+ 	struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu);
+ 	struct Scsi_Host *shost = scmd->device->host;
+-	unsigned int busy;
++	unsigned int busy = scsi_host_busy(shost);
+ 	unsigned long flags;
+ 
+ 	spin_lock_irqsave(shost->host_lock, flags);
+ 	shost->host_failed++;
+-	spin_unlock_irqrestore(shost->host_lock, flags);
+-	/*
+-	 * The counting of busy requests needs to occur after adding to
+-	 * host_failed or after the lock acquire for adding to host_failed
+-	 * to prevent a race with host unbusy and missing an eh wakeup.
+-	 */
+-	busy = scsi_host_busy(shost);
+-
+-	spin_lock_irqsave(shost->host_lock, flags);
+ 	scsi_eh_wakeup(shost, busy);
+ 	spin_unlock_irqrestore(shost->host_lock, flags);
+ }
+diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
+index 8d570632982f3..fb48d47e9183e 100644
+--- a/drivers/scsi/scsi_lib.c
++++ b/drivers/scsi/scsi_lib.c
+@@ -310,14 +310,6 @@ static void scsi_dec_host_busy(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
+ 	rcu_read_lock();
+ 	__clear_bit(SCMD_STATE_INFLIGHT, &cmd->state);
+ 	if (unlikely(scsi_host_in_recovery(shost))) {
+-		/*
+-		 * Ensure the clear of SCMD_STATE_INFLIGHT is visible to
+-		 * other CPUs before counting busy requests. Otherwise,
+-		 * reordering can cause CPUs to race and miss an eh wakeup
+-		 * when no CPU sees all busy requests as done or timed out.
+-		 */
+-		smp_mb();
+-
+ 		unsigned int busy = scsi_host_busy(shost);
+ 
+ 		spin_lock_irqsave(shost->host_lock, flags);
+-- 
+2.53.0
+
diff --git a/queue-5.10/riscv-kgdb-fix-several-debug-register-assignment-bug.patch b/queue-5.10/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
new file mode 100644
index 0000000..22df416
--- /dev/null
+++ b/queue-5.10/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
@@ -0,0 +1,58 @@
+From e5721662a492a05259c70b35ea6884ecac92f1c9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 17:43:47 -0600
+Subject: riscv: kgdb: fix several debug register assignment bugs
+
+From: Paul Walmsley <pjw@kernel.org>
+
+[ Upstream commit 834911eb8eef2501485d819b4eabebadc25c3497 ]
+
+Fix several bugs in the RISC-V kgdb implementation:
+
+- The element of dbg_reg_def[] that is supposed to pertain to the S1
+  register embeds instead the struct pt_regs offset of the A1
+  register.  Fix this to use the S1 register offset in struct pt_regs.
+
+- The sleeping_thread_to_gdb_regs() function copies the value of the
+  S10 register into the gdb_regs[] array element meant for the S9
+  register, and copies the value of the S11 register into the array
+  element meant for the S10 register.  It also neglects to copy the
+  value of the S11 register.  Fix all of these issues.
+
+Fixes: fe89bd2be8667 ("riscv: Add KGDB support")
+Cc: Vincent Chen <vincent.chen@sifive.com>
+Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/kgdb.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/riscv/kernel/kgdb.c b/arch/riscv/kernel/kgdb.c
+index 1d83b36967212..eb737c7a563b9 100644
+--- a/arch/riscv/kernel/kgdb.c
++++ b/arch/riscv/kernel/kgdb.c
+@@ -194,7 +194,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
+ 	{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
+ 	{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
+ 	{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
+-	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
++	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
+ 	{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
+ 	{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
+ 	{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
+@@ -263,8 +263,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
+ 	gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
+ 	gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
+ 	gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
+-	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
+-	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
++	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
++	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
++	gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
+ 	gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-5.10/scsi-core-wake-up-the-error-handler-when-final-compl.patch b/queue-5.10/scsi-core-wake-up-the-error-handler-when-final-compl.patch
new file mode 100644
index 0000000..e645940
--- /dev/null
+++ b/queue-5.10/scsi-core-wake-up-the-error-handler-when-final-compl.patch
@@ -0,0 +1,99 @@
+From ab5cf50f7aa60abae478128bb0ec72bd4349b375 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 13 Jan 2026 11:08:13 -0500
+Subject: scsi: core: Wake up the error handler when final completions race
+ against each other
+
+From: David Jeffery <djeffery@redhat.com>
+
+[ Upstream commit fe2f8ad6f0999db3b318359a01ee0108c703a8c3 ]
+
+The fragile ordering between marking commands completed or failed so
+that the error handler only wakes when the last running command
+completes or times out has race conditions. These race conditions can
+cause the SCSI layer to fail to wake the error handler, leaving I/O
+through the SCSI host stuck as the error state cannot advance.
+
+First, there is an memory ordering issue within scsi_dec_host_busy().
+The write which clears SCMD_STATE_INFLIGHT may be reordered with reads
+counting in scsi_host_busy(). While the local CPU will see its own
+write, reordering can allow other CPUs in scsi_dec_host_busy() or
+scsi_eh_inc_host_failed() to see a raised busy count, causing no CPU to
+see a host busy equal to the host_failed count.
+
+This race condition can be prevented with a memory barrier on the error
+path to force the write to be visible before counting host busy
+commands.
+
+Second, there is a general ordering issue with scsi_eh_inc_host_failed(). By
+counting busy commands before incrementing host_failed, it can race with a
+final command in scsi_dec_host_busy(), such that scsi_dec_host_busy() does
+not see host_failed incremented but scsi_eh_inc_host_failed() counts busy
+commands before SCMD_STATE_INFLIGHT is cleared by scsi_dec_host_busy(),
+resulting in neither waking the error handler task.
+
+This needs the call to scsi_host_busy() to be moved after host_failed is
+incremented to close the race condition.
+
+Fixes: 6eb045e092ef ("scsi: core: avoid host-wide host_busy counter for scsi_mq")
+Signed-off-by: David Jeffery <djeffery@redhat.com>
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Link: https://patch.msgid.link/20260113161036.6730-1-djeffery@redhat.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/scsi_error.c | 11 ++++++++++-
+ drivers/scsi/scsi_lib.c   | 11 ++++++++++-
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
+index ffc6f3031e82b..4e9114f069832 100644
+--- a/drivers/scsi/scsi_error.c
++++ b/drivers/scsi/scsi_error.c
+@@ -241,11 +241,20 @@ static void scsi_eh_inc_host_failed(struct rcu_head *head)
+ {
+ 	struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu);
+ 	struct Scsi_Host *shost = scmd->device->host;
+-	unsigned int busy = scsi_host_busy(shost);
++	unsigned int busy;
+ 	unsigned long flags;
+ 
+ 	spin_lock_irqsave(shost->host_lock, flags);
+ 	shost->host_failed++;
++	spin_unlock_irqrestore(shost->host_lock, flags);
++	/*
++	 * The counting of busy requests needs to occur after adding to
++	 * host_failed or after the lock acquire for adding to host_failed
++	 * to prevent a race with host unbusy and missing an eh wakeup.
++	 */
++	busy = scsi_host_busy(shost);
++
++	spin_lock_irqsave(shost->host_lock, flags);
+ 	scsi_eh_wakeup(shost, busy);
+ 	spin_unlock_irqrestore(shost->host_lock, flags);
+ }
+diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
+index fb48d47e9183e..e69d1c0ea4507 100644
+--- a/drivers/scsi/scsi_lib.c
++++ b/drivers/scsi/scsi_lib.c
+@@ -310,7 +310,16 @@ static void scsi_dec_host_busy(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
+ 	rcu_read_lock();
+ 	__clear_bit(SCMD_STATE_INFLIGHT, &cmd->state);
+ 	if (unlikely(scsi_host_in_recovery(shost))) {
+-		unsigned int busy = scsi_host_busy(shost);
++		unsigned int busy;
++		/*
++		 * Ensure the clear of SCMD_STATE_INFLIGHT is visible to
++		 * other CPUs before counting busy requests. Otherwise,
++		 * reordering can cause CPUs to race and miss an eh wakeup
++		 * when no CPU sees all busy requests as done or timed out.
++		 */
++		smp_mb();
++
++		busy = scsi_host_busy(shost);
+ 
+ 		spin_lock_irqsave(shost->host_lock, flags);
+ 		if (shost->host_failed || shost->host_eh_scheduled)
+-- 
+2.53.0
+
diff --git a/queue-5.10/series b/queue-5.10/series
index aef9bdc..3459bca 100644
--- a/queue-5.10/series
+++ b/queue-5.10/series
@@ -353,3 +353,15 @@
 net-sched-cls_fw-fix-null-pointer-dereference-on-sha.patch
 net-sched-cls_flow-fix-null-pointer-dereference-on-s.patch
 ipv6-avoid-overflows-in-ip6_datagram_send_ctl.patch
+efi-mokvar-table-avoid-repeated-map-unmap-of-the-sam.patch
+revert-btrfs-fix-transaction-abort-on-set-received-i.patch
+btrfs-fix-transaction-abort-on-set-received-ioctl-du.patch
+revert-drm-vmwgfx-add-seqno-waiter-for-sync_files.patch
+drm-vmwgfx-add-seqno-waiter-for-sync_files.patch-18451
+revert-scsi-core-wake-up-the-error-handler-when-fina.patch
+scsi-core-wake-up-the-error-handler-when-final-compl.patch
+revert-media-dvb-frontends-w7090p-fix-null-ptr-deref.patch
+media-dvb-frontends-w7090p-fix-null-ptr-deref-in-w70.patch
+hwmon-pxe1610-check-return-value-of-page-select-writ.patch
+hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
+riscv-kgdb-fix-several-debug-register-assignment-bug.patch
diff --git a/queue-5.15/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch b/queue-5.15/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
new file mode 100644
index 0000000..7c093d2
--- /dev/null
+++ b/queue-5.15/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
@@ -0,0 +1,42 @@
+From a79c14b58ea2736af2a1d455de64dd237f4dcf35 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 22:45:29 +0000
+Subject: hwmon: (occ) Fix missing newline in occ_show_extended()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 09773978879ecf71a7990fe9a28ce4eb92bce645 ]
+
+In occ_show_extended() case 0, when the EXTN_FLAG_SENSOR_ID flag
+is set, the sysfs_emit format string "%u" is missing the trailing
+newline that the sysfs ABI expects. The else branch correctly uses
+"%4phN\n", and all other show functions in this file include the
+trailing newline.
+
+Add the missing "\n" for consistency and correct sysfs output.
+
+Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260326224510.294619-3-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/occ/common.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
+index 44007858c23fc..f178cb16b28cb 100644
+--- a/drivers/hwmon/occ/common.c
++++ b/drivers/hwmon/occ/common.c
+@@ -724,7 +724,7 @@ static ssize_t occ_show_extended(struct device *dev,
+ 	switch (sattr->nr) {
+ 	case 0:
+ 		if (extn->flags & EXTN_FLAG_SENSOR_ID) {
+-			rc = sysfs_emit(buf, "%u",
++			rc = sysfs_emit(buf, "%u\n",
+ 					get_unaligned_be32(&extn->sensor_id));
+ 		} else {
+ 			rc = sysfs_emit(buf, "%02x%02x%02x%02x\n",
+-- 
+2.53.0
+
diff --git a/queue-5.15/hwmon-pxe1610-check-return-value-of-page-select-writ.patch b/queue-5.15/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
new file mode 100644
index 0000000..16a12db
--- /dev/null
+++ b/queue-5.15/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
@@ -0,0 +1,45 @@
+From 31161ebaad51a826731789ab4cedb64adf80a05f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:48 +0000
+Subject: hwmon: (pxe1610) Check return value of page-select write in probe
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ccf70c41e562b29d1c05d1bbf53391785e09c6fb ]
+
+pxe1610_probe() writes PMBUS_PAGE to select page 0 but does not check
+the return value. If the write fails, subsequent register reads operate
+on an indeterminate page, leading to silent misconfiguration.
+
+Check the return value and propagate the error using dev_err_probe(),
+which also handles -EPROBE_DEFER correctly without log spam.
+
+Fixes: 344757bac526 ("hwmon: (pmbus) Add Infineon PXE1610 VR driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-4-sanman.pradhan@hpe.com
+[groeck: Fix "Fixes" SHA]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/pxe1610.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c
+index 52bee5de29883..12d5d7297b5c9 100644
+--- a/drivers/hwmon/pmbus/pxe1610.c
++++ b/drivers/hwmon/pmbus/pxe1610.c
+@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)
+ 	 * By default this device doesn't boot to page 0, so set page 0
+ 	 * to access all pmbus registers.
+ 	 */
+-	i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	ret = i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	if (ret < 0)
++		return dev_err_probe(&client->dev, ret,
++				     "Failed to set page 0\n");
+ 
+ 	/* Read Manufacturer id */
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf);
+-- 
+2.53.0
+
diff --git a/queue-5.15/hwmon-tps53679-fix-device-id-comparison-and-printing.patch b/queue-5.15/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
new file mode 100644
index 0000000..5c5651f
--- /dev/null
+++ b/queue-5.15/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
@@ -0,0 +1,51 @@
+From be4170d4ca365e32a765cca143c4c55c454bc10f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 15:56:40 +0000
+Subject: hwmon: (tps53679) Fix device ID comparison and printing in
+ tps53676_identify()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ca34ee6d0307a0b4e52c870dfc1bb8a3c3eb956e ]
+
+tps53676_identify() uses strncmp() to compare the device ID buffer
+against a byte sequence containing embedded non-printable bytes
+(\x53\x67\x60). strncmp() is semantically wrong for binary data
+comparison; use memcmp() instead.
+
+Additionally, the buffer from i2c_smbus_read_block_data() is not
+NUL-terminated, so printing it with "%s" in the error path is
+undefined behavior and may read past the buffer. Use "%*ph" to
+hex-dump the actual bytes returned.
+
+Per the datasheet, the expected device ID is the 6-byte sequence
+54 49 53 67 60 00 ("TI\x53\x67\x60\x00"), so compare all 6 bytes
+including the trailing NUL.
+
+Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260330155618.77403-1-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index 81b9d813655ad..de91996886dbb 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -156,8 +156,8 @@ static int tps53676_identify(struct i2c_client *client,
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+ 	if (ret < 0)
+ 		return ret;
+-	if (strncmp("TI\x53\x67\x60", buf, 5)) {
+-		dev_err(&client->dev, "Unexpected device ID: %s\n", buf);
++	if (ret != 6 || memcmp(buf, "TI\x53\x67\x60\x00", 6)) {
++		dev_err(&client->dev, "Unexpected device ID: %*ph\n", ret, buf);
+ 		return -ENODEV;
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-5.15/riscv-kgdb-fix-several-debug-register-assignment-bug.patch b/queue-5.15/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
new file mode 100644
index 0000000..404328c
--- /dev/null
+++ b/queue-5.15/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
@@ -0,0 +1,58 @@
+From bdc17f5b7295c20f60d51794ad0bc756d4b21e09 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 17:43:47 -0600
+Subject: riscv: kgdb: fix several debug register assignment bugs
+
+From: Paul Walmsley <pjw@kernel.org>
+
+[ Upstream commit 834911eb8eef2501485d819b4eabebadc25c3497 ]
+
+Fix several bugs in the RISC-V kgdb implementation:
+
+- The element of dbg_reg_def[] that is supposed to pertain to the S1
+  register embeds instead the struct pt_regs offset of the A1
+  register.  Fix this to use the S1 register offset in struct pt_regs.
+
+- The sleeping_thread_to_gdb_regs() function copies the value of the
+  S10 register into the gdb_regs[] array element meant for the S9
+  register, and copies the value of the S11 register into the array
+  element meant for the S10 register.  It also neglects to copy the
+  value of the S11 register.  Fix all of these issues.
+
+Fixes: fe89bd2be8667 ("riscv: Add KGDB support")
+Cc: Vincent Chen <vincent.chen@sifive.com>
+Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/kgdb.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/riscv/kernel/kgdb.c b/arch/riscv/kernel/kgdb.c
+index 1d83b36967212..eb737c7a563b9 100644
+--- a/arch/riscv/kernel/kgdb.c
++++ b/arch/riscv/kernel/kgdb.c
+@@ -194,7 +194,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
+ 	{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
+ 	{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
+ 	{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
+-	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
++	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
+ 	{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
+ 	{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
+ 	{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
+@@ -263,8 +263,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
+ 	gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
+ 	gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
+ 	gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
+-	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
+-	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
++	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
++	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
++	gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
+ 	gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-5.15/series b/queue-5.15/series
index 029c143..cd2bc97 100644
--- a/queue-5.15/series
+++ b/queue-5.15/series
@@ -436,3 +436,7 @@
 net-hsr-fix-vlan-add-unwind-on-slave-errors.patch
 ipv6-avoid-overflows-in-ip6_datagram_send_ctl.patch
 bpf-reject-direct-access-to-nullable-ptr_to_buf-poin.patch
+hwmon-pxe1610-check-return-value-of-page-select-writ.patch
+hwmon-tps53679-fix-device-id-comparison-and-printing.patch
+hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
+riscv-kgdb-fix-several-debug-register-assignment-bug.patch
diff --git a/queue-6.1/dt-bindings-gpio-fix-microchip-interrupt-cells.patch b/queue-6.1/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
new file mode 100644
index 0000000..16645ba
--- /dev/null
+++ b/queue-6.1/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
@@ -0,0 +1,47 @@
+From da559aea5d96b8b46fde45c74687671323c3a112 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 17:02:34 +0000
+Subject: dt-bindings: gpio: fix microchip #interrupt-cells
+
+From: Jamie Gibbons <jamie.gibbons@microchip.com>
+
+[ Upstream commit 6b5ef8c88854b343b733b574ea8754c9dab61f41 ]
+
+The GPIO controller on PolarFire SoC supports more than one type of
+interrupt and needs two interrupt cells.
+
+Fixes: 735806d8a68e9 ("dt-bindings: gpio: add bindings for microchip mpfs gpio")
+Signed-off-by: Jamie Gibbons <jamie.gibbons@microchip.com>
+Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
+Link: https://patch.msgid.link/20260326-wise-gumdrop-49217723a72a@spud
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../devicetree/bindings/gpio/microchip,mpfs-gpio.yaml         | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+index d481e78958a74..2c7355e9547a1 100644
+--- a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
++++ b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+@@ -33,7 +33,7 @@ properties:
+     const: 2
+ 
+   "#interrupt-cells":
+-    const: 1
++    const: 2
+ 
+   ngpios:
+     description:
+@@ -84,7 +84,7 @@ examples:
+         gpio-controller;
+         #gpio-cells = <2>;
+         interrupt-controller;
+-        #interrupt-cells = <1>;
++        #interrupt-cells = <2>;
+         interrupts = <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+-- 
+2.53.0
+
diff --git a/queue-6.1/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch b/queue-6.1/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
new file mode 100644
index 0000000..40d7a91
--- /dev/null
+++ b/queue-6.1/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
@@ -0,0 +1,42 @@
+From 4430acd035dab1b63979a9f5a23a0ae460653784 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 22:45:29 +0000
+Subject: hwmon: (occ) Fix missing newline in occ_show_extended()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 09773978879ecf71a7990fe9a28ce4eb92bce645 ]
+
+In occ_show_extended() case 0, when the EXTN_FLAG_SENSOR_ID flag
+is set, the sysfs_emit format string "%u" is missing the trailing
+newline that the sysfs ABI expects. The else branch correctly uses
+"%4phN\n", and all other show functions in this file include the
+trailing newline.
+
+Add the missing "\n" for consistency and correct sysfs output.
+
+Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260326224510.294619-3-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/occ/common.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
+index 755926fa0bf7d..c6a78436e9bba 100644
+--- a/drivers/hwmon/occ/common.c
++++ b/drivers/hwmon/occ/common.c
+@@ -725,7 +725,7 @@ static ssize_t occ_show_extended(struct device *dev,
+ 	switch (sattr->nr) {
+ 	case 0:
+ 		if (extn->flags & EXTN_FLAG_SENSOR_ID) {
+-			rc = sysfs_emit(buf, "%u",
++			rc = sysfs_emit(buf, "%u\n",
+ 					get_unaligned_be32(&extn->sensor_id));
+ 		} else {
+ 			rc = sysfs_emit(buf, "%4phN\n", extn->name);
+-- 
+2.53.0
+
diff --git a/queue-6.1/hwmon-pxe1610-check-return-value-of-page-select-writ.patch b/queue-6.1/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
new file mode 100644
index 0000000..054482a
--- /dev/null
+++ b/queue-6.1/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
@@ -0,0 +1,45 @@
+From 8597163006b29dc493b8347a81ce9c114c73cfa9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:48 +0000
+Subject: hwmon: (pxe1610) Check return value of page-select write in probe
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ccf70c41e562b29d1c05d1bbf53391785e09c6fb ]
+
+pxe1610_probe() writes PMBUS_PAGE to select page 0 but does not check
+the return value. If the write fails, subsequent register reads operate
+on an indeterminate page, leading to silent misconfiguration.
+
+Check the return value and propagate the error using dev_err_probe(),
+which also handles -EPROBE_DEFER correctly without log spam.
+
+Fixes: 344757bac526 ("hwmon: (pmbus) Add Infineon PXE1610 VR driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-4-sanman.pradhan@hpe.com
+[groeck: Fix "Fixes" SHA]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/pxe1610.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c
+index 52bee5de29883..12d5d7297b5c9 100644
+--- a/drivers/hwmon/pmbus/pxe1610.c
++++ b/drivers/hwmon/pmbus/pxe1610.c
+@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)
+ 	 * By default this device doesn't boot to page 0, so set page 0
+ 	 * to access all pmbus registers.
+ 	 */
+-	i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	ret = i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	if (ret < 0)
++		return dev_err_probe(&client->dev, ret,
++				     "Failed to set page 0\n");
+ 
+ 	/* Read Manufacturer id */
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf);
+-- 
+2.53.0
+
diff --git a/queue-6.1/hwmon-tps53679-fix-device-id-comparison-and-printing.patch b/queue-6.1/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
new file mode 100644
index 0000000..799847a
--- /dev/null
+++ b/queue-6.1/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
@@ -0,0 +1,51 @@
+From 04c6e51b5b691c6510f6b9bd25d5d82320161696 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 15:56:40 +0000
+Subject: hwmon: (tps53679) Fix device ID comparison and printing in
+ tps53676_identify()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ca34ee6d0307a0b4e52c870dfc1bb8a3c3eb956e ]
+
+tps53676_identify() uses strncmp() to compare the device ID buffer
+against a byte sequence containing embedded non-printable bytes
+(\x53\x67\x60). strncmp() is semantically wrong for binary data
+comparison; use memcmp() instead.
+
+Additionally, the buffer from i2c_smbus_read_block_data() is not
+NUL-terminated, so printing it with "%s" in the error path is
+undefined behavior and may read past the buffer. Use "%*ph" to
+hex-dump the actual bytes returned.
+
+Per the datasheet, the expected device ID is the 6-byte sequence
+54 49 53 67 60 00 ("TI\x53\x67\x60\x00"), so compare all 6 bytes
+including the trailing NUL.
+
+Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260330155618.77403-1-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index 81b9d813655ad..de91996886dbb 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -156,8 +156,8 @@ static int tps53676_identify(struct i2c_client *client,
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+ 	if (ret < 0)
+ 		return ret;
+-	if (strncmp("TI\x53\x67\x60", buf, 5)) {
+-		dev_err(&client->dev, "Unexpected device ID: %s\n", buf);
++	if (ret != 6 || memcmp(buf, "TI\x53\x67\x60\x00", 6)) {
++		dev_err(&client->dev, "Unexpected device ID: %*ph\n", ret, buf);
+ 		return -ENODEV;
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.1/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch b/queue-6.1/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
new file mode 100644
index 0000000..b1e6877
--- /dev/null
+++ b/queue-6.1/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
@@ -0,0 +1,43 @@
+From 94fd11083f647d1450e58d9c1fa90077f85c7869 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 Feb 2026 16:33:54 -0600
+Subject: iio: imu: bno055: fix BNO055_SCAN_CH_COUNT off by one
+
+From: David Lechner <dlechner@baylibre.com>
+
+[ Upstream commit 773ef9f95385bae52dcb7fd129fefba3a71a04db ]
+
+Fix an off-by-one error in the BNO055_SCAN_CH_COUNT macro. The count
+is derived by taking the difference of the last and first register
+addresses, dividing by the size of each channel (2 bytes). It needs to
+also add 1 to account for the fact that the count is inclusive of both
+the first and last channels.
+
+Thanks to the aligned_s64 timestamp field, there was already extra
+padding in the buffer, so there were no runtime issues caused by this
+bug.
+
+Fixes: 4aefe1c2bd0c ("iio: imu: add Bosch Sensortec BNO055 core driver")
+Signed-off-by: David Lechner <dlechner@baylibre.com>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/imu/bno055/bno055.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/iio/imu/bno055/bno055.c b/drivers/iio/imu/bno055/bno055.c
+index 98f17c29da69b..7b58b418b8a8b 100644
+--- a/drivers/iio/imu/bno055/bno055.c
++++ b/drivers/iio/imu/bno055/bno055.c
+@@ -64,7 +64,7 @@
+ #define BNO055_GRAVITY_DATA_X_LSB_REG	0x2E
+ #define BNO055_GRAVITY_DATA_Y_LSB_REG	0x30
+ #define BNO055_GRAVITY_DATA_Z_LSB_REG	0x32
+-#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2)
++#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2 + 1)
+ #define BNO055_TEMP_REG			0x34
+ #define BNO055_CALIB_STAT_REG		0x35
+ #define BNO055_CALIB_STAT_MAGN_SHIFT 0
+-- 
+2.53.0
+
diff --git a/queue-6.1/riscv-kgdb-fix-several-debug-register-assignment-bug.patch b/queue-6.1/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
new file mode 100644
index 0000000..39150df
--- /dev/null
+++ b/queue-6.1/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
@@ -0,0 +1,58 @@
+From 4b03c93ef1a41391e46322af5f7bdd41e5aaaf88 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 17:43:47 -0600
+Subject: riscv: kgdb: fix several debug register assignment bugs
+
+From: Paul Walmsley <pjw@kernel.org>
+
+[ Upstream commit 834911eb8eef2501485d819b4eabebadc25c3497 ]
+
+Fix several bugs in the RISC-V kgdb implementation:
+
+- The element of dbg_reg_def[] that is supposed to pertain to the S1
+  register embeds instead the struct pt_regs offset of the A1
+  register.  Fix this to use the S1 register offset in struct pt_regs.
+
+- The sleeping_thread_to_gdb_regs() function copies the value of the
+  S10 register into the gdb_regs[] array element meant for the S9
+  register, and copies the value of the S11 register into the array
+  element meant for the S10 register.  It also neglects to copy the
+  value of the S11 register.  Fix all of these issues.
+
+Fixes: fe89bd2be8667 ("riscv: Add KGDB support")
+Cc: Vincent Chen <vincent.chen@sifive.com>
+Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/kgdb.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/riscv/kernel/kgdb.c b/arch/riscv/kernel/kgdb.c
+index 1d83b36967212..eb737c7a563b9 100644
+--- a/arch/riscv/kernel/kgdb.c
++++ b/arch/riscv/kernel/kgdb.c
+@@ -194,7 +194,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
+ 	{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
+ 	{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
+ 	{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
+-	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
++	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
+ 	{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
+ 	{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
+ 	{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
+@@ -263,8 +263,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
+ 	gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
+ 	gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
+ 	gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
+-	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
+-	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
++	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
++	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
++	gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
+ 	gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.1/series b/queue-6.1/series
index c467381..aaf8889 100644
--- a/queue-6.1/series
+++ b/queue-6.1/series
@@ -189,3 +189,9 @@
 net-hsr-fix-vlan-add-unwind-on-slave-errors.patch
 ipv6-avoid-overflows-in-ip6_datagram_send_ctl.patch
 bpf-reject-direct-access-to-nullable-ptr_to_buf-poin.patch
+iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
+hwmon-pxe1610-check-return-value-of-page-select-writ.patch
+dt-bindings-gpio-fix-microchip-interrupt-cells.patch
+hwmon-tps53679-fix-device-id-comparison-and-printing.patch
+hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
+riscv-kgdb-fix-several-debug-register-assignment-bug.patch
diff --git a/queue-6.12/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch b/queue-6.12/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
new file mode 100644
index 0000000..ada3419
--- /dev/null
+++ b/queue-6.12/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
@@ -0,0 +1,111 @@
+From 77a9f24f2e2627e8afd04af19bd8419b92678b1e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 Feb 2026 13:34:14 +0100
+Subject: accel/qaic: Handle DBC deactivation if the owner went away
+
+From: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+
+[ Upstream commit 2feec5ae5df785658924ab6bd91280dc3926507c ]
+
+When a DBC is released, the device sends a QAIC_TRANS_DEACTIVATE_FROM_DEV
+transaction to the host over the QAIC_CONTROL MHI channel. QAIC handles
+this by calling decode_deactivate() to release the resources allocated for
+that DBC. Since that handling is done in the qaic_manage_ioctl() context,
+if the user goes away before receiving and handling the deactivation, the
+host will be out-of-sync with the DBCs available for use, and the DBC
+resources will not be freed unless the device is removed. If another user
+loads and requests to activate a network, then the device assigns the same
+DBC to that network, QAIC will "indefinitely" wait for dbc->in_use = false,
+leading the user process to hang.
+
+As a solution to this, handle QAIC_TRANS_DEACTIVATE_FROM_DEV transactions
+that are received after the user has gone away.
+
+Fixes: 129776ac2e38 ("accel/qaic: Add control path")
+Signed-off-by: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
+Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Signed-off-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Link: https://patch.msgid.link/20260205123415.3870898-1-youssef.abdulrahman@oss.qualcomm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/accel/qaic/qaic_control.c | 47 +++++++++++++++++++++++++++++--
+ 1 file changed, 45 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/accel/qaic/qaic_control.c b/drivers/accel/qaic/qaic_control.c
+index b86a8e48e731b..8eae30fe14f98 100644
+--- a/drivers/accel/qaic/qaic_control.c
++++ b/drivers/accel/qaic/qaic_control.c
+@@ -910,7 +910,7 @@ static int decode_deactivate(struct qaic_device *qdev, void *trans, u32 *msg_len
+ 		 */
+ 		return -ENODEV;
+ 
+-	if (status) {
++	if (usr && status) {
+ 		/*
+ 		 * Releasing resources failed on the device side, which puts
+ 		 * us in a bind since they may still be in use, so enable the
+@@ -1105,6 +1105,9 @@ static void *msg_xfer(struct qaic_device *qdev, struct wrapper_list *wrappers, u
+ 	mutex_lock(&qdev->cntl_mutex);
+ 	if (!list_empty(&elem.list))
+ 		list_del(&elem.list);
++	/* resp_worker() processed the response but the wait was interrupted */
++	else if (ret == -ERESTARTSYS)
++		ret = 0;
+ 	if (!ret && !elem.buf)
+ 		ret = -ETIMEDOUT;
+ 	else if (ret > 0 && !elem.buf)
+@@ -1415,9 +1418,49 @@ static void resp_worker(struct work_struct *work)
+ 	}
+ 	mutex_unlock(&qdev->cntl_mutex);
+ 
+-	if (!found)
++	if (!found) {
++		/*
++		 * The user might have gone away at this point without waiting
++		 * for QAIC_TRANS_DEACTIVATE_FROM_DEV transaction coming from
++		 * the device. If this is not handled correctly, the host will
++		 * not know that the DBC[n] has been freed on the device.
++		 * Due to this failure in synchronization between the device and
++		 * the host, if another user requests to activate a network, and
++		 * the device assigns DBC[n] again, save_dbc_buf() will hang,
++		 * waiting for dbc[n]->in_use to be set to false, which will not
++		 * happen unless the qaic_dev_reset_clean_local_state() gets
++		 * called by resetting the device (or re-inserting the module).
++		 *
++		 * As a solution, we look for QAIC_TRANS_DEACTIVATE_FROM_DEV
++		 * transactions in the message before disposing of it, then
++		 * handle releasing the DBC resources.
++		 *
++		 * Since the user has gone away, if the device could not
++		 * deactivate the network (status != 0), there is no way to
++		 * enable and reassign the DBC to the user. We can put trust in
++		 * the device that it will release all the active DBCs in
++		 * response to the QAIC_TRANS_TERMINATE_TO_DEV transaction,
++		 * otherwise, the user can issue an soc_reset to the device.
++		 */
++		u32 msg_count = le32_to_cpu(msg->hdr.count);
++		u32 msg_len = le32_to_cpu(msg->hdr.len);
++		u32 len = 0;
++		int j;
++
++		for (j = 0; j < msg_count && len < msg_len; ++j) {
++			struct wire_trans_hdr *trans_hdr;
++
++			trans_hdr = (struct wire_trans_hdr *)(msg->data + len);
++			if (le32_to_cpu(trans_hdr->type) == QAIC_TRANS_DEACTIVATE_FROM_DEV) {
++				if (decode_deactivate(qdev, trans_hdr, &len, NULL))
++					len += le32_to_cpu(trans_hdr->len);
++			} else {
++				len += le32_to_cpu(trans_hdr->len);
++			}
++		}
+ 		/* request must have timed out, drop packet */
+ 		kfree(msg);
++	}
+ 
+ 	kfree(resp);
+ }
+-- 
+2.53.0
+
diff --git a/queue-6.12/dt-bindings-gpio-fix-microchip-interrupt-cells.patch b/queue-6.12/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
new file mode 100644
index 0000000..8271784
--- /dev/null
+++ b/queue-6.12/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
@@ -0,0 +1,47 @@
+From 93b23055139428192e95f78d236a875cafee6e74 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 17:02:34 +0000
+Subject: dt-bindings: gpio: fix microchip #interrupt-cells
+
+From: Jamie Gibbons <jamie.gibbons@microchip.com>
+
+[ Upstream commit 6b5ef8c88854b343b733b574ea8754c9dab61f41 ]
+
+The GPIO controller on PolarFire SoC supports more than one type of
+interrupt and needs two interrupt cells.
+
+Fixes: 735806d8a68e9 ("dt-bindings: gpio: add bindings for microchip mpfs gpio")
+Signed-off-by: Jamie Gibbons <jamie.gibbons@microchip.com>
+Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
+Link: https://patch.msgid.link/20260326-wise-gumdrop-49217723a72a@spud
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../devicetree/bindings/gpio/microchip,mpfs-gpio.yaml         | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+index d78da7dd2a566..dafd80bdd23aa 100644
+--- a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
++++ b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+@@ -34,7 +34,7 @@ properties:
+     const: 2
+ 
+   "#interrupt-cells":
+-    const: 1
++    const: 2
+ 
+   ngpios:
+     description:
+@@ -83,7 +83,7 @@ examples:
+         gpio-controller;
+         #gpio-cells = <2>;
+         interrupt-controller;
+-        #interrupt-cells = <1>;
++        #interrupt-cells = <2>;
+         interrupts = <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+-- 
+2.53.0
+
diff --git a/queue-6.12/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch b/queue-6.12/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
new file mode 100644
index 0000000..3b20ee1
--- /dev/null
+++ b/queue-6.12/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
@@ -0,0 +1,35 @@
+From a730f9477a4942dcd752149b9452d2be986605d1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:53 +0000
+Subject: hwmon: (ltc4286) Add missing MODULE_IMPORT_NS("PMBUS")
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit a9d2fbd3ad0e6ac588386e699beeccfe7516755f ]
+
+ltc4286.c uses PMBus core symbols exported in the PMBUS namespace,
+such as pmbus_do_probe(), but does not declare MODULE_IMPORT_NS("PMBUS").
+
+Add the missing namespace import to avoid modpost warnings.
+
+Fixes: 0c459759ca97 ("hwmon: (pmbus) Add ltc4286 driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-5-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/ltc4286.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/hwmon/pmbus/ltc4286.c b/drivers/hwmon/pmbus/ltc4286.c
+index aabd0bcdfeee3..8715d380784a0 100644
+--- a/drivers/hwmon/pmbus/ltc4286.c
++++ b/drivers/hwmon/pmbus/ltc4286.c
+@@ -173,3 +173,4 @@ module_i2c_driver(ltc4286_driver);
+ MODULE_AUTHOR("Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>");
+ MODULE_DESCRIPTION("PMBUS driver for LTC4286 and compatibles");
+ MODULE_LICENSE("GPL");
++MODULE_IMPORT_NS("PMBUS");
+-- 
+2.53.0
+
diff --git a/queue-6.12/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch b/queue-6.12/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
new file mode 100644
index 0000000..7794e6e
--- /dev/null
+++ b/queue-6.12/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
@@ -0,0 +1,42 @@
+From 0055f19461abea51f48ec8f3a8fe75214087da4a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 22:45:29 +0000
+Subject: hwmon: (occ) Fix missing newline in occ_show_extended()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 09773978879ecf71a7990fe9a28ce4eb92bce645 ]
+
+In occ_show_extended() case 0, when the EXTN_FLAG_SENSOR_ID flag
+is set, the sysfs_emit format string "%u" is missing the trailing
+newline that the sysfs ABI expects. The else branch correctly uses
+"%4phN\n", and all other show functions in this file include the
+trailing newline.
+
+Add the missing "\n" for consistency and correct sysfs output.
+
+Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260326224510.294619-3-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/occ/common.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
+index 89928d38831b6..86c79156a46b9 100644
+--- a/drivers/hwmon/occ/common.c
++++ b/drivers/hwmon/occ/common.c
+@@ -725,7 +725,7 @@ static ssize_t occ_show_extended(struct device *dev,
+ 	switch (sattr->nr) {
+ 	case 0:
+ 		if (extn->flags & EXTN_FLAG_SENSOR_ID) {
+-			rc = sysfs_emit(buf, "%u",
++			rc = sysfs_emit(buf, "%u\n",
+ 					get_unaligned_be32(&extn->sensor_id));
+ 		} else {
+ 			rc = sysfs_emit(buf, "%4phN\n", extn->name);
+-- 
+2.53.0
+
diff --git a/queue-6.12/hwmon-pxe1610-check-return-value-of-page-select-writ.patch b/queue-6.12/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
new file mode 100644
index 0000000..0a20791
--- /dev/null
+++ b/queue-6.12/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
@@ -0,0 +1,45 @@
+From 8d0072cdbeae86c939494a4664a5f3d4e7f436dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:48 +0000
+Subject: hwmon: (pxe1610) Check return value of page-select write in probe
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ccf70c41e562b29d1c05d1bbf53391785e09c6fb ]
+
+pxe1610_probe() writes PMBUS_PAGE to select page 0 but does not check
+the return value. If the write fails, subsequent register reads operate
+on an indeterminate page, leading to silent misconfiguration.
+
+Check the return value and propagate the error using dev_err_probe(),
+which also handles -EPROBE_DEFER correctly without log spam.
+
+Fixes: 344757bac526 ("hwmon: (pmbus) Add Infineon PXE1610 VR driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-4-sanman.pradhan@hpe.com
+[groeck: Fix "Fixes" SHA]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/pxe1610.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c
+index 5ac476d3cdd2a..4cf98ffae841c 100644
+--- a/drivers/hwmon/pmbus/pxe1610.c
++++ b/drivers/hwmon/pmbus/pxe1610.c
+@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)
+ 	 * By default this device doesn't boot to page 0, so set page 0
+ 	 * to access all pmbus registers.
+ 	 */
+-	i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	ret = i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	if (ret < 0)
++		return dev_err_probe(&client->dev, ret,
++				     "Failed to set page 0\n");
+ 
+ 	/* Read Manufacturer id */
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf);
+-- 
+2.53.0
+
diff --git a/queue-6.12/hwmon-tps53679-fix-device-id-comparison-and-printing.patch b/queue-6.12/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
new file mode 100644
index 0000000..3ac8b6b
--- /dev/null
+++ b/queue-6.12/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
@@ -0,0 +1,51 @@
+From 8c0eb4be14f5e5d59d2c7a4b8e44fc69a11e49d9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 15:56:40 +0000
+Subject: hwmon: (tps53679) Fix device ID comparison and printing in
+ tps53676_identify()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ca34ee6d0307a0b4e52c870dfc1bb8a3c3eb956e ]
+
+tps53676_identify() uses strncmp() to compare the device ID buffer
+against a byte sequence containing embedded non-printable bytes
+(\x53\x67\x60). strncmp() is semantically wrong for binary data
+comparison; use memcmp() instead.
+
+Additionally, the buffer from i2c_smbus_read_block_data() is not
+NUL-terminated, so printing it with "%s" in the error path is
+undefined behavior and may read past the buffer. Use "%*ph" to
+hex-dump the actual bytes returned.
+
+Per the datasheet, the expected device ID is the 6-byte sequence
+54 49 53 67 60 00 ("TI\x53\x67\x60\x00"), so compare all 6 bytes
+including the trailing NUL.
+
+Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260330155618.77403-1-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index 5c9466244d70d..ecc1be33b3b1b 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -156,8 +156,8 @@ static int tps53676_identify(struct i2c_client *client,
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+ 	if (ret < 0)
+ 		return ret;
+-	if (strncmp("TI\x53\x67\x60", buf, 5)) {
+-		dev_err(&client->dev, "Unexpected device ID: %s\n", buf);
++	if (ret != 6 || memcmp(buf, "TI\x53\x67\x60\x00", 6)) {
++		dev_err(&client->dev, "Unexpected device ID: %*ph\n", ret, buf);
+ 		return -ENODEV;
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.12/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch b/queue-6.12/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
new file mode 100644
index 0000000..430233e
--- /dev/null
+++ b/queue-6.12/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
@@ -0,0 +1,43 @@
+From d3e78dd6236955258ee81d58ab1124e1a06915eb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 Feb 2026 16:33:54 -0600
+Subject: iio: imu: bno055: fix BNO055_SCAN_CH_COUNT off by one
+
+From: David Lechner <dlechner@baylibre.com>
+
+[ Upstream commit 773ef9f95385bae52dcb7fd129fefba3a71a04db ]
+
+Fix an off-by-one error in the BNO055_SCAN_CH_COUNT macro. The count
+is derived by taking the difference of the last and first register
+addresses, dividing by the size of each channel (2 bytes). It needs to
+also add 1 to account for the fact that the count is inclusive of both
+the first and last channels.
+
+Thanks to the aligned_s64 timestamp field, there was already extra
+padding in the buffer, so there were no runtime issues caused by this
+bug.
+
+Fixes: 4aefe1c2bd0c ("iio: imu: add Bosch Sensortec BNO055 core driver")
+Signed-off-by: David Lechner <dlechner@baylibre.com>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/imu/bno055/bno055.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/iio/imu/bno055/bno055.c b/drivers/iio/imu/bno055/bno055.c
+index 0b2d6ad699f30..932821254bf89 100644
+--- a/drivers/iio/imu/bno055/bno055.c
++++ b/drivers/iio/imu/bno055/bno055.c
+@@ -64,7 +64,7 @@
+ #define BNO055_GRAVITY_DATA_X_LSB_REG	0x2E
+ #define BNO055_GRAVITY_DATA_Y_LSB_REG	0x30
+ #define BNO055_GRAVITY_DATA_Z_LSB_REG	0x32
+-#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2)
++#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2 + 1)
+ #define BNO055_TEMP_REG			0x34
+ #define BNO055_CALIB_STAT_REG		0x35
+ #define BNO055_CALIB_STAT_MAGN_SHIFT 0
+-- 
+2.53.0
+
diff --git a/queue-6.12/mips-ralink-update-cpu-clock-index.patch b/queue-6.12/mips-ralink-update-cpu-clock-index.patch
new file mode 100644
index 0000000..9eccd07
--- /dev/null
+++ b/queue-6.12/mips-ralink-update-cpu-clock-index.patch
@@ -0,0 +1,49 @@
+From 74940713c49e293fce31ad1eac6cde60f506fe26 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Feb 2026 10:22:50 +0800
+Subject: mips: ralink: update CPU clock index
+
+From: Shiji Yang <yangshiji66@outlook.com>
+
+[ Upstream commit 43985a62bab9d35e5e9af41118ce2f44c01b97d2 ]
+
+Update CPU clock index to match the clock driver changes.
+
+Fixes: d34db686a3d7 ("clk: ralink: mtmips: fix clocks probe order in oldest ralink SoCs")
+Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
+Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
+Reviewed-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
+Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/mips/ralink/clk.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/mips/ralink/clk.c b/arch/mips/ralink/clk.c
+index 9db73fcac522e..5c1eb46ef5d07 100644
+--- a/arch/mips/ralink/clk.c
++++ b/arch/mips/ralink/clk.c
+@@ -21,16 +21,16 @@ static const char *clk_cpu(int *idx)
+ {
+ 	switch (ralink_soc) {
+ 	case RT2880_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt2880-sysc";
+ 	case RT3883_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3883-sysc";
+ 	case RT305X_SOC_RT3050:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3050-sysc";
+ 	case RT305X_SOC_RT3052:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3052-sysc";
+ 	case RT305X_SOC_RT3350:
+ 		*idx = 1;
+-- 
+2.53.0
+
diff --git a/queue-6.12/riscv-kgdb-fix-several-debug-register-assignment-bug.patch b/queue-6.12/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
new file mode 100644
index 0000000..da5a597
--- /dev/null
+++ b/queue-6.12/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
@@ -0,0 +1,58 @@
+From ce6733647d60ccaba762b60ddcd0c9c7a09ff4d5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 17:43:47 -0600
+Subject: riscv: kgdb: fix several debug register assignment bugs
+
+From: Paul Walmsley <pjw@kernel.org>
+
+[ Upstream commit 834911eb8eef2501485d819b4eabebadc25c3497 ]
+
+Fix several bugs in the RISC-V kgdb implementation:
+
+- The element of dbg_reg_def[] that is supposed to pertain to the S1
+  register embeds instead the struct pt_regs offset of the A1
+  register.  Fix this to use the S1 register offset in struct pt_regs.
+
+- The sleeping_thread_to_gdb_regs() function copies the value of the
+  S10 register into the gdb_regs[] array element meant for the S9
+  register, and copies the value of the S11 register into the array
+  element meant for the S10 register.  It also neglects to copy the
+  value of the S11 register.  Fix all of these issues.
+
+Fixes: fe89bd2be8667 ("riscv: Add KGDB support")
+Cc: Vincent Chen <vincent.chen@sifive.com>
+Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/kgdb.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/riscv/kernel/kgdb.c b/arch/riscv/kernel/kgdb.c
+index 9f3db3503dabd..edaab2aa16a3e 100644
+--- a/arch/riscv/kernel/kgdb.c
++++ b/arch/riscv/kernel/kgdb.c
+@@ -175,7 +175,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
+ 	{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
+ 	{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
+ 	{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
+-	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
++	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
+ 	{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
+ 	{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
+ 	{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
+@@ -244,8 +244,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
+ 	gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
+ 	gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
+ 	gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
+-	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
+-	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
++	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
++	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
++	gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
+ 	gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.12/sched-fair-fix-zero_vruntime-tracking-fix.patch b/queue-6.12/sched-fair-fix-zero_vruntime-tracking-fix.patch
new file mode 100644
index 0000000..a3cfe1b
--- /dev/null
+++ b/queue-6.12/sched-fair-fix-zero_vruntime-tracking-fix.patch
@@ -0,0 +1,103 @@
+From b74fe4717c0c335e3c0efe9446f946842b3cd4f5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Apr 2026 15:20:20 +0200
+Subject: sched/fair: Fix zero_vruntime tracking fix
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+[ Upstream commit 1319ea57529e131822bab56bf417c8edc2db9ae8 ]
+
+John reported that stress-ng-yield could make his machine unhappy and
+managed to bisect it to commit b3d99f43c72b ("sched/fair: Fix
+zero_vruntime tracking").
+
+The combination of yield and that commit was specific enough to
+hypothesize the following scenario:
+
+Suppose we have 2 runnable tasks, both doing yield. Then one will be
+eligible and one will not be, because the average position must be in
+between these two entities.
+
+Therefore, the runnable task will be eligible, and be promoted a full
+slice (all the tasks do is yield after all). This causes it to jump over
+the other task and now the other task is eligible and current is no
+longer. So we schedule.
+
+Since we are runnable, there is no {de,en}queue. All we have is the
+__{en,de}queue_entity() from {put_prev,set_next}_task(). But per the
+fingered commit, those two no longer move zero_vruntime.
+
+All that moves zero_vruntime are tick and full {de,en}queue.
+
+This means, that if the two tasks playing leapfrog can reach the
+critical speed to reach the overflow point inside one tick's worth of
+time, we're up a creek.
+
+Additionally, when multiple cgroups are involved, there is no guarantee
+the tick will in fact hit every cgroup in a timely manner. Statistically
+speaking it will, but that same statistics does not rule out the
+possibility of one cgroup not getting a tick for a significant amount of
+time -- however unlikely.
+
+Therefore, just like with the yield() case, force an update at the end
+of every slice. This ensures the update is never more than a single
+slice behind and the whole thing is within 2 lag bounds as per the
+comment on entity_key().
+
+Fixes: b3d99f43c72b ("sched/fair: Fix zero_vruntime tracking")
+Reported-by: John Stultz <jstultz@google.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
+Tested-by: K Prateek Nayak <kprateek.nayak@amd.com>
+Tested-by: John Stultz <jstultz@google.com>
+Link: https://patch.msgid.link/20260401132355.081530332@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/fair.c | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
+index fff27f3378cbf..a0a47e50b71ca 100644
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -669,7 +669,7 @@ void update_zero_vruntime(struct cfs_rq *cfs_rq, s64 delta)
+  * Called in:
+  *  - place_entity()      -- before enqueue
+  *  - update_entity_lag() -- before dequeue
+- *  - entity_tick()
++ *  - update_deadline()   -- slice expiration
+  *
+  * This means it is one entry 'behind' but that puts it close enough to where
+  * the bound on entity_key() is at most two lag bounds.
+@@ -1036,6 +1036,7 @@ static bool update_deadline(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ 	 * EEVDF: vd_i = ve_i + r_i / w_i
+ 	 */
+ 	se->deadline = se->vruntime + calc_delta_fair(se->slice, se);
++	avg_vruntime(cfs_rq);
+ 
+ 	/*
+ 	 * The task has consumed its request, reschedule.
+@@ -5725,11 +5726,6 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued)
+ 	update_load_avg(cfs_rq, curr, UPDATE_TG);
+ 	update_cfs_group(curr);
+ 
+-	/*
+-	 * Pulls along cfs_rq::zero_vruntime.
+-	 */
+-	avg_vruntime(cfs_rq);
+-
+ #ifdef CONFIG_SCHED_HRTICK
+ 	/*
+ 	 * queued ticks are scheduled to match the slice, so don't bother
+@@ -9143,7 +9139,7 @@ static void yield_task_fair(struct rq *rq)
+ 	 */
+ 	if (entity_eligible(cfs_rq, se)) {
+ 		se->vruntime = se->deadline;
+-		se->deadline += calc_delta_fair(se->slice, se);
++		update_deadline(cfs_rq, se);
+ 	}
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.12/sched-fair-use-protect_slice-instead-of-direct-compa.patch b/queue-6.12/sched-fair-use-protect_slice-instead-of-direct-compa.patch
new file mode 100644
index 0000000..a61d042
--- /dev/null
+++ b/queue-6.12/sched-fair-use-protect_slice-instead-of-direct-compa.patch
@@ -0,0 +1,37 @@
+From 53aaf3f310af379ed4c9f06452007c748c185cd5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Jul 2025 18:56:25 +0200
+Subject: sched/fair: Use protect_slice() instead of direct comparison
+
+From: Vincent Guittot <vincent.guittot@linaro.org>
+
+[ Upstream commit 9cdb4fe20cd239c848b5c3f5753d83a9443ba329 ]
+
+Replace the test by the relevant protect_slice() function.
+
+Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Dhaval Giani (AMD) <dhaval@gianis.ca>
+Link: https://lkml.kernel.org/r/20250708165630.1948751-2-vincent.guittot@linaro.org
+Stable-dep-of: 1319ea57529e ("sched/fair: Fix zero_vruntime tracking fix")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/fair.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
+index efd3cbefb5a22..fff27f3378cbf 100644
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -1181,7 +1181,7 @@ static inline bool did_preempt_short(struct cfs_rq *cfs_rq, struct sched_entity
+ 	if (!sched_feat(PREEMPT_SHORT))
+ 		return false;
+ 
+-	if (curr->vlag == curr->deadline)
++	if (protect_slice(curr))
+ 		return false;
+ 
+ 	return !entity_eligible(cfs_rq, curr);
+-- 
+2.53.0
+
diff --git a/queue-6.12/series b/queue-6.12/series
index cff16e5..5c665d6 100644
--- a/queue-6.12/series
+++ b/queue-6.12/series
@@ -105,3 +105,14 @@
 ipv6-avoid-overflows-in-ip6_datagram_send_ctl.patch
 bpf-reject-direct-access-to-nullable-ptr_to_buf-poin.patch
 revert-drm-fix-use-after-free-on-framebuffers-and-property-blobs-when-calling-drm_dev_unplug.patch
+iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
+accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
+hwmon-pxe1610-check-return-value-of-page-select-writ.patch
+hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
+dt-bindings-gpio-fix-microchip-interrupt-cells.patch
+hwmon-tps53679-fix-device-id-comparison-and-printing.patch
+hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
+mips-ralink-update-cpu-clock-index.patch
+sched-fair-use-protect_slice-instead-of-direct-compa.patch
+sched-fair-fix-zero_vruntime-tracking-fix.patch
+riscv-kgdb-fix-several-debug-register-assignment-bug.patch
diff --git a/queue-6.18/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch b/queue-6.18/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
new file mode 100644
index 0000000..5987410
--- /dev/null
+++ b/queue-6.18/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
@@ -0,0 +1,111 @@
+From f5319f8ccd21f394655901ae5f76b6135f790a84 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 Feb 2026 13:34:14 +0100
+Subject: accel/qaic: Handle DBC deactivation if the owner went away
+
+From: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+
+[ Upstream commit 2feec5ae5df785658924ab6bd91280dc3926507c ]
+
+When a DBC is released, the device sends a QAIC_TRANS_DEACTIVATE_FROM_DEV
+transaction to the host over the QAIC_CONTROL MHI channel. QAIC handles
+this by calling decode_deactivate() to release the resources allocated for
+that DBC. Since that handling is done in the qaic_manage_ioctl() context,
+if the user goes away before receiving and handling the deactivation, the
+host will be out-of-sync with the DBCs available for use, and the DBC
+resources will not be freed unless the device is removed. If another user
+loads and requests to activate a network, then the device assigns the same
+DBC to that network, QAIC will "indefinitely" wait for dbc->in_use = false,
+leading the user process to hang.
+
+As a solution to this, handle QAIC_TRANS_DEACTIVATE_FROM_DEV transactions
+that are received after the user has gone away.
+
+Fixes: 129776ac2e38 ("accel/qaic: Add control path")
+Signed-off-by: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
+Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Signed-off-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Link: https://patch.msgid.link/20260205123415.3870898-1-youssef.abdulrahman@oss.qualcomm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/accel/qaic/qaic_control.c | 47 +++++++++++++++++++++++++++++--
+ 1 file changed, 45 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/accel/qaic/qaic_control.c b/drivers/accel/qaic/qaic_control.c
+index b86a8e48e731b..8eae30fe14f98 100644
+--- a/drivers/accel/qaic/qaic_control.c
++++ b/drivers/accel/qaic/qaic_control.c
+@@ -910,7 +910,7 @@ static int decode_deactivate(struct qaic_device *qdev, void *trans, u32 *msg_len
+ 		 */
+ 		return -ENODEV;
+ 
+-	if (status) {
++	if (usr && status) {
+ 		/*
+ 		 * Releasing resources failed on the device side, which puts
+ 		 * us in a bind since they may still be in use, so enable the
+@@ -1105,6 +1105,9 @@ static void *msg_xfer(struct qaic_device *qdev, struct wrapper_list *wrappers, u
+ 	mutex_lock(&qdev->cntl_mutex);
+ 	if (!list_empty(&elem.list))
+ 		list_del(&elem.list);
++	/* resp_worker() processed the response but the wait was interrupted */
++	else if (ret == -ERESTARTSYS)
++		ret = 0;
+ 	if (!ret && !elem.buf)
+ 		ret = -ETIMEDOUT;
+ 	else if (ret > 0 && !elem.buf)
+@@ -1415,9 +1418,49 @@ static void resp_worker(struct work_struct *work)
+ 	}
+ 	mutex_unlock(&qdev->cntl_mutex);
+ 
+-	if (!found)
++	if (!found) {
++		/*
++		 * The user might have gone away at this point without waiting
++		 * for QAIC_TRANS_DEACTIVATE_FROM_DEV transaction coming from
++		 * the device. If this is not handled correctly, the host will
++		 * not know that the DBC[n] has been freed on the device.
++		 * Due to this failure in synchronization between the device and
++		 * the host, if another user requests to activate a network, and
++		 * the device assigns DBC[n] again, save_dbc_buf() will hang,
++		 * waiting for dbc[n]->in_use to be set to false, which will not
++		 * happen unless the qaic_dev_reset_clean_local_state() gets
++		 * called by resetting the device (or re-inserting the module).
++		 *
++		 * As a solution, we look for QAIC_TRANS_DEACTIVATE_FROM_DEV
++		 * transactions in the message before disposing of it, then
++		 * handle releasing the DBC resources.
++		 *
++		 * Since the user has gone away, if the device could not
++		 * deactivate the network (status != 0), there is no way to
++		 * enable and reassign the DBC to the user. We can put trust in
++		 * the device that it will release all the active DBCs in
++		 * response to the QAIC_TRANS_TERMINATE_TO_DEV transaction,
++		 * otherwise, the user can issue an soc_reset to the device.
++		 */
++		u32 msg_count = le32_to_cpu(msg->hdr.count);
++		u32 msg_len = le32_to_cpu(msg->hdr.len);
++		u32 len = 0;
++		int j;
++
++		for (j = 0; j < msg_count && len < msg_len; ++j) {
++			struct wire_trans_hdr *trans_hdr;
++
++			trans_hdr = (struct wire_trans_hdr *)(msg->data + len);
++			if (le32_to_cpu(trans_hdr->type) == QAIC_TRANS_DEACTIVATE_FROM_DEV) {
++				if (decode_deactivate(qdev, trans_hdr, &len, NULL))
++					len += le32_to_cpu(trans_hdr->len);
++			} else {
++				len += le32_to_cpu(trans_hdr->len);
++			}
++		}
+ 		/* request must have timed out, drop packet */
+ 		kfree(msg);
++	}
+ 
+ 	kfree(resp);
+ }
+-- 
+2.53.0
+
diff --git a/queue-6.18/acpi-rimt-add-dependency-between-iommu-and-devices.patch b/queue-6.18/acpi-rimt-add-dependency-between-iommu-and-devices.patch
new file mode 100644
index 0000000..57dbe91
--- /dev/null
+++ b/queue-6.18/acpi-rimt-add-dependency-between-iommu-and-devices.patch
@@ -0,0 +1,44 @@
+From ebb6341ca64853ce0c6093f4d98d19a8b0e795c7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 3 Mar 2026 11:46:05 +0530
+Subject: ACPI: RIMT: Add dependency between iommu and devices
+
+From: Sunil V L <sunilvl@oss.qualcomm.com>
+
+[ Upstream commit 9156585280f161fc1c3552cf1860559edb2bb7e3 ]
+
+EPROBE_DEFER ensures IOMMU devices are probed before the devices that
+depend on them. During shutdown, however, the IOMMU may be removed
+first, leading to issues. To avoid this, a device link is added
+which enforces the correct removal order.
+
+Fixes: 8f7729552582 ("ACPI: RISC-V: Add support for RIMT")
+Signed-off-by: Sunil V L <sunilvl@oss.qualcomm.com>
+Link: https://patch.msgid.link/20260303061605.722949-1-sunilvl@oss.qualcomm.com
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/riscv/rimt.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/acpi/riscv/rimt.c b/drivers/acpi/riscv/rimt.c
+index 7f423405e5ef0..8eaa8731bddd6 100644
+--- a/drivers/acpi/riscv/rimt.c
++++ b/drivers/acpi/riscv/rimt.c
+@@ -263,6 +263,13 @@ static int rimt_iommu_xlate(struct device *dev, struct acpi_rimt_node *node, u32
+ 	if (!rimt_fwnode)
+ 		return -EPROBE_DEFER;
+ 
++	/*
++	 * EPROBE_DEFER ensures IOMMU is probed before the devices that
++	 * depend on them. During shutdown, however, the IOMMU may be removed
++	 * first, leading to issues. To avoid this, a device link is added
++	 * which enforces the correct removal order.
++	 */
++	device_link_add(dev, rimt_fwnode->dev, DL_FLAG_AUTOREMOVE_CONSUMER);
+ 	return acpi_iommu_fwspec_init(dev, deviceid, rimt_fwnode);
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.18/drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch b/queue-6.18/drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch
new file mode 100644
index 0000000..e8ca1f1
--- /dev/null
+++ b/queue-6.18/drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch
@@ -0,0 +1,96 @@
+From 7587f6c0f8ee45faa1f6905c798b1fded99b87d0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 Mar 2026 14:46:52 +0800
+Subject: drm/sysfb: Fix efidrm error handling and memory type mismatch
+
+From: Chen Ni <nichen@iscas.ac.cn>
+
+[ Upstream commit 5e77923a3eb39cce91bf08ed7670f816bf86d4af ]
+
+Fix incorrect error checking and memory type confusion in
+efidrm_device_create(). devm_memremap() returns error pointers, not
+NULL, and returns system memory while devm_ioremap() returns I/O memory.
+The code incorrectly passes system memory to iosys_map_set_vaddr_iomem().
+
+Restructure to handle each memory type separately. Use devm_ioremap*()
+with ERR_PTR(-ENXIO) for WC/UC, and devm_memremap() with ERR_CAST() for
+WT/WB.
+
+Fixes: 32ae90c66fb6 ("drm/sysfb: Add efidrm for EFI displays")
+Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
+Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
+Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
+Link: https://patch.msgid.link/20260311064652.2903449-1-nichen@iscas.ac.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/sysfb/efidrm.c | 46 +++++++++++++++++++++++-----------
+ 1 file changed, 31 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/gpu/drm/sysfb/efidrm.c b/drivers/gpu/drm/sysfb/efidrm.c
+index 1883c4a8604c2..97a3711e79337 100644
+--- a/drivers/gpu/drm/sysfb/efidrm.c
++++ b/drivers/gpu/drm/sysfb/efidrm.c
+@@ -150,7 +150,6 @@ static struct efidrm_device *efidrm_device_create(struct drm_driver *drv,
+ 	struct drm_sysfb_device *sysfb;
+ 	struct drm_device *dev;
+ 	struct resource *mem = NULL;
+-	void __iomem *screen_base = NULL;
+ 	struct drm_plane *primary_plane;
+ 	struct drm_crtc *crtc;
+ 	struct drm_encoder *encoder;
+@@ -235,21 +234,38 @@ static struct efidrm_device *efidrm_device_create(struct drm_driver *drv,
+ 
+ 	mem_flags = efidrm_get_mem_flags(dev, res->start, vsize);
+ 
+-	if (mem_flags & EFI_MEMORY_WC)
+-		screen_base = devm_ioremap_wc(&pdev->dev, mem->start, resource_size(mem));
+-	else if (mem_flags & EFI_MEMORY_UC)
+-		screen_base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
+-	else if (mem_flags & EFI_MEMORY_WT)
+-		screen_base = devm_memremap(&pdev->dev, mem->start, resource_size(mem),
+-					    MEMREMAP_WT);
+-	else if (mem_flags & EFI_MEMORY_WB)
+-		screen_base = devm_memremap(&pdev->dev, mem->start, resource_size(mem),
+-					    MEMREMAP_WB);
+-	else
++	if (mem_flags & EFI_MEMORY_WC) {
++		void __iomem *screen_base = devm_ioremap_wc(&pdev->dev, mem->start,
++							    resource_size(mem));
++
++		if (!screen_base)
++			return ERR_PTR(-ENXIO);
++		iosys_map_set_vaddr_iomem(&sysfb->fb_addr, screen_base);
++	} else if (mem_flags & EFI_MEMORY_UC) {
++		void __iomem *screen_base = devm_ioremap(&pdev->dev, mem->start,
++							 resource_size(mem));
++
++		if (!screen_base)
++			return ERR_PTR(-ENXIO);
++		iosys_map_set_vaddr_iomem(&sysfb->fb_addr, screen_base);
++	} else if (mem_flags & EFI_MEMORY_WT) {
++		void *screen_base = devm_memremap(&pdev->dev, mem->start,
++						  resource_size(mem), MEMREMAP_WT);
++
++		if (IS_ERR(screen_base))
++			return ERR_CAST(screen_base);
++		iosys_map_set_vaddr(&sysfb->fb_addr, screen_base);
++	} else if (mem_flags & EFI_MEMORY_WB) {
++		void *screen_base = devm_memremap(&pdev->dev, mem->start,
++						  resource_size(mem), MEMREMAP_WB);
++
++		if (IS_ERR(screen_base))
++			return ERR_CAST(screen_base);
++		iosys_map_set_vaddr(&sysfb->fb_addr, screen_base);
++	} else {
+ 		drm_err(dev, "invalid mem_flags: 0x%llx\n", mem_flags);
+-	if (!screen_base)
+-		return ERR_PTR(-ENOMEM);
+-	iosys_map_set_vaddr_iomem(&sysfb->fb_addr, screen_base);
++		return ERR_PTR(-EINVAL);
++	}
+ 
+ 	/*
+ 	 * Modesetting
+-- 
+2.53.0
+
diff --git a/queue-6.18/drm-xe-pxp-clean-up-termination-status-on-failure.patch b/queue-6.18/drm-xe-pxp-clean-up-termination-status-on-failure.patch
new file mode 100644
index 0000000..8ef3b35
--- /dev/null
+++ b/queue-6.18/drm-xe-pxp-clean-up-termination-status-on-failure.patch
@@ -0,0 +1,43 @@
+From 734d662f41597d3c2964f06763cfa282099ac252 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Mar 2026 08:37:20 -0700
+Subject: drm/xe/pxp: Clean up termination status on failure
+
+From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+
+[ Upstream commit e2628e670bb0923fcdc00828bfcd67b26a7df020 ]
+
+If the PXP HW termination fails during PXP start, the normal completion
+code won't be called, so the termination will remain uncomplete. To avoid
+unnecessary waits, mark the termination as completed from the error path.
+Note that we already do this if the termination fails when handling a
+termination irq from the HW.
+
+Fixes: f8caa80154c4 ("drm/xe/pxp: Add PXP queue tracking and session start")
+Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+Cc: Alan Previn Teres Alexis <alan.previn.teres.alexis@intel.com>
+Cc: Julia Filipchuk <julia.filipchuk@intel.com>
+Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com>
+Link: https://patch.msgid.link/20260324153718.3155504-7-daniele.ceraolospurio@intel.com
+(cherry picked from commit 5d9e708d2a69ab1f64a17aec810cd7c70c5b9fab)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_pxp.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
+index bdbdbbf6a6781..ba4d52001b853 100644
+--- a/drivers/gpu/drm/xe/xe_pxp.c
++++ b/drivers/gpu/drm/xe/xe_pxp.c
+@@ -603,6 +603,7 @@ static int pxp_start(struct xe_pxp *pxp, u8 type)
+ 			drm_err(&pxp->xe->drm, "PXP termination failed before start\n");
+ 			mutex_lock(&pxp->mutex);
+ 			pxp->status = XE_PXP_ERROR;
++			complete_all(&pxp->termination);
+ 
+ 			goto out_unlock;
+ 		}
+-- 
+2.53.0
+
diff --git a/queue-6.18/drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch b/queue-6.18/drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch
new file mode 100644
index 0000000..674b8b1
--- /dev/null
+++ b/queue-6.18/drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch
@@ -0,0 +1,49 @@
+From 1d4058835a4bd305bc4cfe549971864128a29299 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Mar 2026 08:37:22 -0700
+Subject: drm/xe/pxp: Clear restart flag in pxp_start after jumping back
+
+From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+
+[ Upstream commit 76903b2057c8677c2c006e87fede15f496555dc0 ]
+
+If we don't clear the flag we'll keep jumping back at the beginning of
+the function once we reach the end.
+
+Fixes: ccd3c6820a90 ("drm/xe/pxp: Decouple queue addition from PXP start")
+Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+Cc: Julia Filipchuk <julia.filipchuk@intel.com>
+Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com>
+Link: https://patch.msgid.link/20260324153718.3155504-9-daniele.ceraolospurio@intel.com
+(cherry picked from commit 0850ec7bb2459602351639dccf7a68a03c9d1ee0)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_pxp.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
+index fdcecc026e937..9261a8412b64f 100644
+--- a/drivers/gpu/drm/xe/xe_pxp.c
++++ b/drivers/gpu/drm/xe/xe_pxp.c
+@@ -532,7 +532,7 @@ static int __exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q)
+ static int pxp_start(struct xe_pxp *pxp, u8 type)
+ {
+ 	int ret = 0;
+-	bool restart = false;
++	bool restart;
+ 
+ 	if (!xe_pxp_is_enabled(pxp))
+ 		return -ENODEV;
+@@ -561,6 +561,8 @@ static int pxp_start(struct xe_pxp *pxp, u8 type)
+ 					 msecs_to_jiffies(PXP_ACTIVATION_TIMEOUT_MS)))
+ 		return -ETIMEDOUT;
+ 
++	restart = false;
++
+ 	mutex_lock(&pxp->mutex);
+ 
+ 	/* If PXP is not already active, turn it on */
+-- 
+2.53.0
+
diff --git a/queue-6.18/drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch b/queue-6.18/drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch
new file mode 100644
index 0000000..8f0867d
--- /dev/null
+++ b/queue-6.18/drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch
@@ -0,0 +1,57 @@
+From 827f4c6e8f1c3f3587a17e404930e0c1e34952cc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Mar 2026 08:37:21 -0700
+Subject: drm/xe/pxp: Remove incorrect handling of impossible state during
+ suspend
+
+From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+
+[ Upstream commit 4fed244954c2dc9aafa333d08f66b14345225e03 ]
+
+The default case of the PXP suspend switch is incorrectly exiting
+without releasing the lock. However, this case is impossible to hit
+because we're switching on an enum and all the valid enum values have
+their own cases. Therefore, we can just get rid of the default case
+and rely on the compiler to warn us if a new enum value is added and
+we forget to add it to the switch.
+
+Fixes: 51462211f4a9 ("drm/xe/pxp: add PXP PM support")
+Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+Cc: Alan Previn Teres Alexis <alan.previn.teres.alexis@intel.com>
+Cc: Julia Filipchuk <julia.filipchuk@intel.com>
+Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com>
+Link: https://patch.msgid.link/20260324153718.3155504-8-daniele.ceraolospurio@intel.com
+(cherry picked from commit f1b5a77fc9b6a90cd9a5e3db9d4c73ae1edfcfac)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_pxp.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
+index ba4d52001b853..fdcecc026e937 100644
+--- a/drivers/gpu/drm/xe/xe_pxp.c
++++ b/drivers/gpu/drm/xe/xe_pxp.c
+@@ -891,11 +891,6 @@ int xe_pxp_pm_suspend(struct xe_pxp *pxp)
+ 		pxp->key_instance++;
+ 		needs_queue_inval = true;
+ 		break;
+-	default:
+-		drm_err(&pxp->xe->drm, "unexpected state during PXP suspend: %u",
+-			pxp->status);
+-		ret = -EIO;
+-		goto out;
+ 	}
+ 
+ 	/*
+@@ -920,7 +915,6 @@ int xe_pxp_pm_suspend(struct xe_pxp *pxp)
+ 
+ 	pxp->last_suspend_key_instance = pxp->key_instance;
+ 
+-out:
+ 	return ret;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.18/dt-bindings-gpio-fix-microchip-interrupt-cells.patch b/queue-6.18/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
new file mode 100644
index 0000000..7f38ad3
--- /dev/null
+++ b/queue-6.18/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
@@ -0,0 +1,47 @@
+From 5302f7d02ce0f830ce9ee1b2223f50ecc8bbdfe3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 17:02:34 +0000
+Subject: dt-bindings: gpio: fix microchip #interrupt-cells
+
+From: Jamie Gibbons <jamie.gibbons@microchip.com>
+
+[ Upstream commit 6b5ef8c88854b343b733b574ea8754c9dab61f41 ]
+
+The GPIO controller on PolarFire SoC supports more than one type of
+interrupt and needs two interrupt cells.
+
+Fixes: 735806d8a68e9 ("dt-bindings: gpio: add bindings for microchip mpfs gpio")
+Signed-off-by: Jamie Gibbons <jamie.gibbons@microchip.com>
+Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
+Link: https://patch.msgid.link/20260326-wise-gumdrop-49217723a72a@spud
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../devicetree/bindings/gpio/microchip,mpfs-gpio.yaml         | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+index d78da7dd2a566..dafd80bdd23aa 100644
+--- a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
++++ b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+@@ -34,7 +34,7 @@ properties:
+     const: 2
+ 
+   "#interrupt-cells":
+-    const: 1
++    const: 2
+ 
+   ngpios:
+     description:
+@@ -83,7 +83,7 @@ examples:
+         gpio-controller;
+         #gpio-cells = <2>;
+         interrupt-controller;
+-        #interrupt-cells = <1>;
++        #interrupt-cells = <2>;
+         interrupts = <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+-- 
+2.53.0
+
diff --git a/queue-6.18/gpio-rename-gpio_chip_hwgpio-to-gpiod_hwgpio.patch b/queue-6.18/gpio-rename-gpio_chip_hwgpio-to-gpiod_hwgpio.patch
new file mode 100644
index 0000000..f906926
--- /dev/null
+++ b/queue-6.18/gpio-rename-gpio_chip_hwgpio-to-gpiod_hwgpio.patch
@@ -0,0 +1,395 @@
+From 68da4dce56260e5974879b6312a4fd9cf67e1180 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 16 Oct 2025 11:09:25 +0200
+Subject: gpio: rename gpio_chip_hwgpio() to gpiod_hwgpio()
+
+From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+
+[ Upstream commit df900536e85819f6168783d5f6b3908d47811fdd ]
+
+This function takes a GPIO descriptor as first argument. Make its naming
+consistent with the rest of the GPIO codebase and use the gpiod_ prefix.
+
+Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
+Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au>
+Link: https://lore.kernel.org/r/20251016-aspeed-gpiolib-include-v1-1-31201c06d124@linaro.org
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+Stable-dep-of: 6df6ea4b3d15 ("gpiolib: clear requested flag if line is invalid")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpio-aspeed.c   |  6 ++---
+ drivers/gpio/gpiolib-cdev.c  | 12 +++++-----
+ drivers/gpio/gpiolib-sysfs.c | 14 +++++------
+ drivers/gpio/gpiolib.c       | 46 ++++++++++++++++++------------------
+ drivers/gpio/gpiolib.h       |  2 +-
+ 5 files changed, 40 insertions(+), 40 deletions(-)
+
+diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
+index 7953a9c4e36d7..3da37a0fda3fb 100644
+--- a/drivers/gpio/gpio-aspeed.c
++++ b/drivers/gpio/gpio-aspeed.c
+@@ -24,7 +24,7 @@
+ 
+ /*
+  * These two headers aren't meant to be used by GPIO drivers. We need
+- * them in order to access gpio_chip_hwgpio() which we need to implement
++ * them in order to access gpiod_hwgpio() which we need to implement
+  * the aspeed specific API which allows the coprocessor to request
+  * access to some GPIOs and to arbitrate between coprocessor and ARM.
+  */
+@@ -942,7 +942,7 @@ int aspeed_gpio_copro_grab_gpio(struct gpio_desc *desc,
+ {
+ 	struct gpio_chip *chip = gpiod_to_chip(desc);
+ 	struct aspeed_gpio *gpio = gpiochip_get_data(chip);
+-	int rc = 0, bindex, offset = gpio_chip_hwgpio(desc);
++	int rc = 0, bindex, offset = gpiod_hwgpio(desc);
+ 	const struct aspeed_gpio_bank *bank = to_bank(offset);
+ 
+ 	if (!aspeed_gpio_support_copro(gpio))
+@@ -987,7 +987,7 @@ int aspeed_gpio_copro_release_gpio(struct gpio_desc *desc)
+ {
+ 	struct gpio_chip *chip = gpiod_to_chip(desc);
+ 	struct aspeed_gpio *gpio = gpiochip_get_data(chip);
+-	int rc = 0, bindex, offset = gpio_chip_hwgpio(desc);
++	int rc = 0, bindex, offset = gpiod_hwgpio(desc);
+ 
+ 	if (!aspeed_gpio_support_copro(gpio))
+ 		return -EOPNOTSUPP;
+diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c
+index e76bcbd647539..986312c71678f 100644
+--- a/drivers/gpio/gpiolib-cdev.c
++++ b/drivers/gpio/gpiolib-cdev.c
+@@ -676,7 +676,7 @@ static enum hte_return process_hw_ts_thread(void *p)
+ 	}
+ 	le.line_seqno = line->line_seqno;
+ 	le.seqno = (lr->num_lines == 1) ? le.line_seqno : line->req_seqno;
+-	le.offset = gpio_chip_hwgpio(line->desc);
++	le.offset = gpiod_hwgpio(line->desc);
+ 
+ 	linereq_put_event(lr, &le);
+ 
+@@ -793,7 +793,7 @@ static irqreturn_t edge_irq_thread(int irq, void *p)
+ 	line->line_seqno++;
+ 	le.line_seqno = line->line_seqno;
+ 	le.seqno = (lr->num_lines == 1) ? le.line_seqno : line->req_seqno;
+-	le.offset = gpio_chip_hwgpio(line->desc);
++	le.offset = gpiod_hwgpio(line->desc);
+ 
+ 	linereq_put_event(lr, &le);
+ 
+@@ -891,7 +891,7 @@ static void debounce_work_func(struct work_struct *work)
+ 
+ 	lr = line->req;
+ 	le.timestamp_ns = line_event_timestamp(line);
+-	le.offset = gpio_chip_hwgpio(line->desc);
++	le.offset = gpiod_hwgpio(line->desc);
+ #ifdef CONFIG_HTE
+ 	if (edflags & GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE) {
+ 		/* discard events except the last one */
+@@ -1591,7 +1591,7 @@ static void linereq_show_fdinfo(struct seq_file *out, struct file *file)
+ 
+ 	for (i = 0; i < lr->num_lines; i++)
+ 		seq_printf(out, "gpio-line:\t%d\n",
+-			   gpio_chip_hwgpio(lr->lines[i].desc));
++			   gpiod_hwgpio(lr->lines[i].desc));
+ }
+ #endif
+ 
+@@ -2244,7 +2244,7 @@ static void gpio_desc_to_lineinfo(struct gpio_desc *desc,
+ 		return;
+ 
+ 	memset(info, 0, sizeof(*info));
+-	info->offset = gpio_chip_hwgpio(desc);
++	info->offset = gpiod_hwgpio(desc);
+ 
+ 	if (desc->name)
+ 		strscpy(info->name, desc->name, sizeof(info->name));
+@@ -2550,7 +2550,7 @@ static int lineinfo_changed_notify(struct notifier_block *nb,
+ 	struct gpio_desc *desc = data;
+ 	struct file *fp;
+ 
+-	if (!test_bit(gpio_chip_hwgpio(desc), cdev->watched_lines))
++	if (!test_bit(gpiod_hwgpio(desc), cdev->watched_lines))
+ 		return NOTIFY_DONE;
+ 
+ 	/* Keep the file descriptor alive for the duration of the notification. */
+diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c
+index e044690ad412b..d4a46a0a37d8f 100644
+--- a/drivers/gpio/gpiolib-sysfs.c
++++ b/drivers/gpio/gpiolib-sysfs.c
+@@ -244,7 +244,7 @@ static int gpio_sysfs_request_irq(struct gpiod_data *data, unsigned char flags)
+ 	 * Remove this redundant call (along with the corresponding unlock)
+ 	 * when those drivers have been fixed.
+ 	 */
+-	ret = gpiochip_lock_as_irq(guard.gc, gpio_chip_hwgpio(desc));
++	ret = gpiochip_lock_as_irq(guard.gc, gpiod_hwgpio(desc));
+ 	if (ret < 0)
+ 		goto err_clr_bits;
+ 
+@@ -258,7 +258,7 @@ static int gpio_sysfs_request_irq(struct gpiod_data *data, unsigned char flags)
+ 	return 0;
+ 
+ err_unlock:
+-	gpiochip_unlock_as_irq(guard.gc, gpio_chip_hwgpio(desc));
++	gpiochip_unlock_as_irq(guard.gc, gpiod_hwgpio(desc));
+ err_clr_bits:
+ 	clear_bit(GPIOD_FLAG_EDGE_RISING, &desc->flags);
+ 	clear_bit(GPIOD_FLAG_EDGE_FALLING, &desc->flags);
+@@ -280,7 +280,7 @@ static void gpio_sysfs_free_irq(struct gpiod_data *data)
+ 
+ 	data->irq_flags = 0;
+ 	free_irq(data->irq, data);
+-	gpiochip_unlock_as_irq(guard.gc, gpio_chip_hwgpio(desc));
++	gpiochip_unlock_as_irq(guard.gc, gpiod_hwgpio(desc));
+ 	clear_bit(GPIOD_FLAG_EDGE_RISING, &desc->flags);
+ 	clear_bit(GPIOD_FLAG_EDGE_FALLING, &desc->flags);
+ }
+@@ -478,10 +478,10 @@ static int export_gpio_desc(struct gpio_desc *desc)
+ 	if (!guard.gc)
+ 		return -ENODEV;
+ 
+-	offset = gpio_chip_hwgpio(desc);
++	offset = gpiod_hwgpio(desc);
+ 	if (!gpiochip_line_is_valid(guard.gc, offset)) {
+ 		pr_debug_ratelimited("%s: GPIO %d masked\n", __func__,
+-				     gpio_chip_hwgpio(desc));
++				     gpiod_hwgpio(desc));
+ 		return -EINVAL;
+ 	}
+ 
+@@ -823,7 +823,7 @@ int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
+ 	}
+ 
+ 	desc_data->chip_attr_group.name = kasprintf(GFP_KERNEL, "gpio%u",
+-						    gpio_chip_hwgpio(desc));
++						    gpiod_hwgpio(desc));
+ 	if (!desc_data->chip_attr_group.name) {
+ 		status = -ENOMEM;
+ 		goto err_put_dirent;
+@@ -843,7 +843,7 @@ int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
+ 	if (status)
+ 		goto err_free_name;
+ 
+-	path = kasprintf(GFP_KERNEL, "gpio%u/value", gpio_chip_hwgpio(desc));
++	path = kasprintf(GFP_KERNEL, "gpio%u/value", gpiod_hwgpio(desc));
+ 	if (!path) {
+ 		status = -ENOMEM;
+ 		goto err_remove_groups;
+diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
+index 4524c89946d7c..497fda9bf8f1e 100644
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -443,7 +443,7 @@ int gpiod_get_direction(struct gpio_desc *desc)
+ 	if (!guard.gc)
+ 		return -ENODEV;
+ 
+-	offset = gpio_chip_hwgpio(desc);
++	offset = gpiod_hwgpio(desc);
+ 	flags = READ_ONCE(desc->flags);
+ 
+ 	/*
+@@ -2446,7 +2446,7 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
+ 	if (test_and_set_bit(GPIOD_FLAG_REQUESTED, &desc->flags))
+ 		return -EBUSY;
+ 
+-	offset = gpio_chip_hwgpio(desc);
++	offset = gpiod_hwgpio(desc);
+ 	if (!gpiochip_line_is_valid(guard.gc, offset))
+ 		return -EINVAL;
+ 
+@@ -2508,7 +2508,7 @@ static void gpiod_free_commit(struct gpio_desc *desc)
+ 
+ 	if (guard.gc && test_bit(GPIOD_FLAG_REQUESTED, &flags)) {
+ 		if (guard.gc->free)
+-			guard.gc->free(guard.gc, gpio_chip_hwgpio(desc));
++			guard.gc->free(guard.gc, gpiod_hwgpio(desc));
+ 
+ 		clear_bit(GPIOD_FLAG_ACTIVE_LOW, &flags);
+ 		clear_bit(GPIOD_FLAG_REQUESTED, &flags);
+@@ -2668,7 +2668,7 @@ int gpio_do_set_config(struct gpio_desc *desc, unsigned long config)
+ 	if (!guard.gc->set_config)
+ 		return -ENOTSUPP;
+ 
+-	ret = guard.gc->set_config(guard.gc, gpio_chip_hwgpio(desc), config);
++	ret = guard.gc->set_config(guard.gc, gpiod_hwgpio(desc), config);
+ 	if (ret > 0)
+ 		ret = -EBADE;
+ 
+@@ -2699,7 +2699,7 @@ static int gpio_set_config_with_argument_optional(struct gpio_desc *desc,
+ 						  u32 argument)
+ {
+ 	struct device *dev = &desc->gdev->dev;
+-	int gpio = gpio_chip_hwgpio(desc);
++	int gpio = gpiod_hwgpio(desc);
+ 	int ret;
+ 
+ 	ret = gpio_set_config_with_argument(desc, mode, argument);
+@@ -2862,9 +2862,9 @@ int gpiod_direction_input_nonotify(struct gpio_desc *desc)
+ 	 */
+ 	if (guard.gc->direction_input) {
+ 		ret = gpiochip_direction_input(guard.gc,
+-					       gpio_chip_hwgpio(desc));
++					       gpiod_hwgpio(desc));
+ 	} else if (guard.gc->get_direction) {
+-		dir = gpiochip_get_direction(guard.gc, gpio_chip_hwgpio(desc));
++		dir = gpiochip_get_direction(guard.gc, gpiod_hwgpio(desc));
+ 		if (dir < 0)
+ 			return dir;
+ 
+@@ -2923,12 +2923,12 @@ static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
+ 
+ 	if (guard.gc->direction_output) {
+ 		ret = gpiochip_direction_output(guard.gc,
+-						gpio_chip_hwgpio(desc), val);
++						gpiod_hwgpio(desc), val);
+ 	} else {
+ 		/* Check that we are in output mode if we can */
+ 		if (guard.gc->get_direction) {
+ 			dir = gpiochip_get_direction(guard.gc,
+-						     gpio_chip_hwgpio(desc));
++						     gpiod_hwgpio(desc));
+ 			if (dir < 0)
+ 				return dir;
+ 
+@@ -2943,7 +2943,7 @@ static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
+ 		 * If we can't actively set the direction, we are some
+ 		 * output-only chip, so just drive the output as desired.
+ 		 */
+-		ret = gpiochip_set(guard.gc, gpio_chip_hwgpio(desc), val);
++		ret = gpiochip_set(guard.gc, gpiod_hwgpio(desc), val);
+ 		if (ret)
+ 			return ret;
+ 	}
+@@ -3094,7 +3094,7 @@ int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags)
+ 	}
+ 
+ 	ret = guard.gc->en_hw_timestamp(guard.gc,
+-					gpio_chip_hwgpio(desc), flags);
++					gpiod_hwgpio(desc), flags);
+ 	if (ret)
+ 		gpiod_warn(desc, "%s: hw ts request failed\n", __func__);
+ 
+@@ -3126,7 +3126,7 @@ int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags)
+ 		return -ENOTSUPP;
+ 	}
+ 
+-	ret = guard.gc->dis_hw_timestamp(guard.gc, gpio_chip_hwgpio(desc),
++	ret = guard.gc->dis_hw_timestamp(guard.gc, gpiod_hwgpio(desc),
+ 					 flags);
+ 	if (ret)
+ 		gpiod_warn(desc, "%s: hw ts release failed\n", __func__);
+@@ -3261,7 +3261,7 @@ static int gpiochip_get(struct gpio_chip *gc, unsigned int offset)
+ 
+ static int gpio_chip_get_value(struct gpio_chip *gc, const struct gpio_desc *desc)
+ {
+-	return gc->get ? gpiochip_get(gc, gpio_chip_hwgpio(desc)) : -EIO;
++	return gc->get ? gpiochip_get(gc, gpiod_hwgpio(desc)) : -EIO;
+ }
+ 
+ /* I/O calls are only valid after configuration completed; the relevant
+@@ -3421,7 +3421,7 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
+ 		first = i;
+ 		do {
+ 			const struct gpio_desc *desc = desc_array[i];
+-			int hwgpio = gpio_chip_hwgpio(desc);
++			int hwgpio = gpiod_hwgpio(desc);
+ 
+ 			__set_bit(hwgpio, mask);
+ 			i++;
+@@ -3443,7 +3443,7 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
+ 
+ 		for (j = first; j < i; ) {
+ 			const struct gpio_desc *desc = desc_array[j];
+-			int hwgpio = gpio_chip_hwgpio(desc);
++			int hwgpio = gpiod_hwgpio(desc);
+ 			int value = test_bit(hwgpio, bits);
+ 
+ 			if (!raw && test_bit(GPIOD_FLAG_ACTIVE_LOW, &desc->flags))
+@@ -3580,7 +3580,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_array_value);
+  */
+ static int gpio_set_open_drain_value_commit(struct gpio_desc *desc, bool value)
+ {
+-	int ret = 0, offset = gpio_chip_hwgpio(desc);
++	int ret = 0, offset = gpiod_hwgpio(desc);
+ 
+ 	CLASS(gpio_chip_guard, guard)(desc);
+ 	if (!guard.gc)
+@@ -3609,7 +3609,7 @@ static int gpio_set_open_drain_value_commit(struct gpio_desc *desc, bool value)
+  */
+ static int gpio_set_open_source_value_commit(struct gpio_desc *desc, bool value)
+ {
+-	int ret = 0, offset = gpio_chip_hwgpio(desc);
++	int ret = 0, offset = gpiod_hwgpio(desc);
+ 
+ 	CLASS(gpio_chip_guard, guard)(desc);
+ 	if (!guard.gc)
+@@ -3641,7 +3641,7 @@ static int gpiod_set_raw_value_commit(struct gpio_desc *desc, bool value)
+ 		return -ENODEV;
+ 
+ 	trace_gpio_value(desc_to_gpio(desc), 0, value);
+-	return gpiochip_set(guard.gc, gpio_chip_hwgpio(desc), value);
++	return gpiochip_set(guard.gc, gpiod_hwgpio(desc), value);
+ }
+ 
+ /*
+@@ -3764,7 +3764,7 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep,
+ 
+ 		do {
+ 			struct gpio_desc *desc = desc_array[i];
+-			int hwgpio = gpio_chip_hwgpio(desc);
++			int hwgpio = gpiod_hwgpio(desc);
+ 			int value = test_bit(i, value_bitmap);
+ 
+ 			if (unlikely(!test_bit(GPIOD_FLAG_IS_OUT, &desc->flags)))
+@@ -4004,7 +4004,7 @@ int gpiod_to_irq(const struct gpio_desc *desc)
+ 	if (!gc)
+ 		return -ENODEV;
+ 
+-	offset = gpio_chip_hwgpio(desc);
++	offset = gpiod_hwgpio(desc);
+ 	if (gc->to_irq) {
+ 		ret = gc->to_irq(gc, offset);
+ 		if (ret)
+@@ -4961,7 +4961,7 @@ int gpiod_hog(struct gpio_desc *desc, const char *name,
+ 	if (test_and_set_bit(GPIOD_FLAG_IS_HOGGED, &desc->flags))
+ 		return 0;
+ 
+-	hwnum = gpio_chip_hwgpio(desc);
++	hwnum = gpiod_hwgpio(desc);
+ 
+ 	local_desc = gpiochip_request_own_desc(guard.gc, hwnum, name,
+ 					       lflags, dflags);
+@@ -5042,7 +5042,7 @@ struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
+ 		 * If pin hardware number of array member 0 is also 0, select
+ 		 * its chip as a candidate for fast bitmap processing path.
+ 		 */
+-		if (descs->ndescs == 0 && gpio_chip_hwgpio(desc) == 0) {
++		if (descs->ndescs == 0 && gpiod_hwgpio(desc) == 0) {
+ 			struct gpio_descs *array;
+ 
+ 			bitmap_size = BITS_TO_LONGS(gdev->ngpio > count ?
+@@ -5087,7 +5087,7 @@ struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
+ 		 * Detect array members which belong to the 'fast' chip
+ 		 * but their pins are not in hardware order.
+ 		 */
+-		else if (gpio_chip_hwgpio(desc) != descs->ndescs) {
++		else if (gpiod_hwgpio(desc) != descs->ndescs) {
+ 			/*
+ 			 * Don't use fast path if all array members processed so
+ 			 * far belong to the same chip as this one but its pin
+diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
+index 6ee29d0222393..2b4f479d32123 100644
+--- a/drivers/gpio/gpiolib.h
++++ b/drivers/gpio/gpiolib.h
+@@ -276,7 +276,7 @@ const char *gpiod_get_label(struct gpio_desc *desc);
+ /*
+  * Return the GPIO number of the passed descriptor relative to its chip
+  */
+-static inline int gpio_chip_hwgpio(const struct gpio_desc *desc)
++static inline int gpiod_hwgpio(const struct gpio_desc *desc)
+ {
+ 	return desc - &desc->gdev->descs[0];
+ }
+-- 
+2.53.0
+
diff --git a/queue-6.18/gpiolib-clear-requested-flag-if-line-is-invalid.patch b/queue-6.18/gpiolib-clear-requested-flag-if-line-is-invalid.patch
new file mode 100644
index 0000000..5807d27
--- /dev/null
+++ b/queue-6.18/gpiolib-clear-requested-flag-if-line-is-invalid.patch
@@ -0,0 +1,48 @@
+From b3ac613a95d703790e82d31c435db7b3fcab48b1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 10 Mar 2026 20:44:03 +0000
+Subject: gpiolib: clear requested flag if line is invalid
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Barnabás PÅ‘cze <pobrn@protonmail.com>
+
+[ Upstream commit 6df6ea4b3d1567dbe6442f308735c23b63007c7f ]
+
+If `gpiochip_line_is_valid()` fails, then `-EINVAL` is returned, but
+`desc->flags` will have `GPIOD_FLAG_REQUESTED` set, which will result
+in subsequent calls misleadingly returning `-EBUSY`.
+
+Fix that by clearing the flag in case of failure.
+
+Fixes: a501624864f3 ("gpio: Respect valid_mask when requesting GPIOs")
+Signed-off-by: Barnabás PÅ‘cze <pobrn@protonmail.com>
+Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
+Link: https://patch.msgid.link/20260310204359.1202451-1-pobrn@protonmail.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpiolib.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
+index 497fda9bf8f1e..9dd22b4bbff54 100644
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -2447,8 +2447,10 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
+ 		return -EBUSY;
+ 
+ 	offset = gpiod_hwgpio(desc);
+-	if (!gpiochip_line_is_valid(guard.gc, offset))
+-		return -EINVAL;
++	if (!gpiochip_line_is_valid(guard.gc, offset)) {
++		ret = -EINVAL;
++		goto out_clear_bit;
++	}
+ 
+ 	/* NOTE:  gpio_request() can be called in early boot,
+ 	 * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
+-- 
+2.53.0
+
diff --git a/queue-6.18/hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch b/queue-6.18/hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch
new file mode 100644
index 0000000..7edc4b1
--- /dev/null
+++ b/queue-6.18/hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch
@@ -0,0 +1,76 @@
+From c1cb8fdf468d9fbdbbd5781acadba6acaf93ba55 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 31 Mar 2026 14:49:06 -0700
+Subject: hwmon: (asus-ec-sensors) Fix T_Sensor for PRIME X670E-PRO WIFI
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Corey Hickey <bugfood-c@fatooh.org>
+
+[ Upstream commit cffff6df669a438ecac506dadd49a53d4475a796 ]
+
+On the Asus PRIME X670E-PRO WIFI, the driver reports a constant value of
+zero for T_Sensor. On this board, the register for T_Sensor is at a
+different address, as found by experimentation and confirmed by
+comparison to an independent temperature reading.
+
+* sensor disconnected: -62.0°C
+* ambient temperature: +22.0°C
+* held between fingers: +30.0°C
+
+Introduce SENSOR_TEMP_T_SENSOR_ALT1 to support the PRIME X670E-PRO WIFI
+without causing a regression for other 600-series boards
+
+Fixes: e0444758dd1b ("hwmon: (asus-ec-sensors) add PRIME X670E-PRO WIFI")
+Signed-off-by: Corey Hickey <bugfood-c@fatooh.org>
+Link: https://lore.kernel.org/r/20260331215414.368785-1-bugfood-ml@fatooh.org
+[groeck: Fixed typo, updated Fixes: reference]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/asus-ec-sensors.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/asus-ec-sensors.c b/drivers/hwmon/asus-ec-sensors.c
+index 34a8f6b834c97..95c50d3a788ce 100644
+--- a/drivers/hwmon/asus-ec-sensors.c
++++ b/drivers/hwmon/asus-ec-sensors.c
+@@ -111,6 +111,8 @@ enum ec_sensors {
+ 	ec_sensor_temp_mb,
+ 	/* "T_Sensor" temperature sensor reading [℃] */
+ 	ec_sensor_temp_t_sensor,
++	/* like ec_sensor_temp_t_sensor, but at an alternate address [℃] */
++	ec_sensor_temp_t_sensor_alt1,
+ 	/* VRM temperature [℃] */
+ 	ec_sensor_temp_vrm,
+ 	/* CPU Core voltage [mV] */
+@@ -156,6 +158,7 @@ enum ec_sensors {
+ #define SENSOR_TEMP_CPU_PACKAGE BIT(ec_sensor_temp_cpu_package)
+ #define SENSOR_TEMP_MB BIT(ec_sensor_temp_mb)
+ #define SENSOR_TEMP_T_SENSOR BIT(ec_sensor_temp_t_sensor)
++#define SENSOR_TEMP_T_SENSOR_ALT1 BIT(ec_sensor_temp_t_sensor_alt1)
+ #define SENSOR_TEMP_VRM BIT(ec_sensor_temp_vrm)
+ #define SENSOR_IN_CPU_CORE BIT(ec_sensor_in_cpu_core)
+ #define SENSOR_FAN_CPU_OPT BIT(ec_sensor_fan_cpu_opt)
+@@ -272,6 +275,8 @@ static const struct ec_sensor_info sensors_family_amd_600[] = {
+ 		EC_SENSOR("VRM", hwmon_temp, 1, 0x00, 0x33),
+ 	[ec_sensor_temp_t_sensor] =
+ 		EC_SENSOR("T_Sensor", hwmon_temp, 1, 0x00, 0x36),
++	[ec_sensor_temp_t_sensor_alt1] =
++		EC_SENSOR("T_Sensor", hwmon_temp, 1, 0x00, 0x37),
+ 	[ec_sensor_fan_cpu_opt] =
+ 		EC_SENSOR("CPU_Opt", hwmon_fan, 2, 0x00, 0xb0),
+ 	[ec_sensor_temp_water_in] =
+@@ -489,7 +494,7 @@ static const struct ec_board_info board_info_prime_x570_pro = {
+ static const struct ec_board_info board_info_prime_x670e_pro_wifi = {
+ 	.sensors = SENSOR_TEMP_CPU | SENSOR_TEMP_CPU_PACKAGE |
+ 		SENSOR_TEMP_MB | SENSOR_TEMP_VRM |
+-		SENSOR_TEMP_T_SENSOR | SENSOR_FAN_CPU_OPT,
++		SENSOR_TEMP_T_SENSOR_ALT1 | SENSOR_FAN_CPU_OPT,
+ 	.mutex_path = ACPI_GLOBAL_LOCK_PSEUDO_PATH,
+ 	.family = family_amd_600_series,
+ };
+-- 
+2.53.0
+
diff --git a/queue-6.18/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch b/queue-6.18/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
new file mode 100644
index 0000000..6f5aa2d
--- /dev/null
+++ b/queue-6.18/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
@@ -0,0 +1,35 @@
+From 43e7ff37d0bca7c361bc15f71068ed17af0cb26f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:53 +0000
+Subject: hwmon: (ltc4286) Add missing MODULE_IMPORT_NS("PMBUS")
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit a9d2fbd3ad0e6ac588386e699beeccfe7516755f ]
+
+ltc4286.c uses PMBus core symbols exported in the PMBUS namespace,
+such as pmbus_do_probe(), but does not declare MODULE_IMPORT_NS("PMBUS").
+
+Add the missing namespace import to avoid modpost warnings.
+
+Fixes: 0c459759ca97 ("hwmon: (pmbus) Add ltc4286 driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-5-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/ltc4286.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/hwmon/pmbus/ltc4286.c b/drivers/hwmon/pmbus/ltc4286.c
+index aabd0bcdfeee3..8715d380784a0 100644
+--- a/drivers/hwmon/pmbus/ltc4286.c
++++ b/drivers/hwmon/pmbus/ltc4286.c
+@@ -173,3 +173,4 @@ module_i2c_driver(ltc4286_driver);
+ MODULE_AUTHOR("Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>");
+ MODULE_DESCRIPTION("PMBUS driver for LTC4286 and compatibles");
+ MODULE_LICENSE("GPL");
++MODULE_IMPORT_NS("PMBUS");
+-- 
+2.53.0
+
diff --git a/queue-6.18/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch b/queue-6.18/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
new file mode 100644
index 0000000..3fea125
--- /dev/null
+++ b/queue-6.18/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
@@ -0,0 +1,42 @@
+From 464816df44e8301a19facad1c7bfc93556964833 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 22:45:29 +0000
+Subject: hwmon: (occ) Fix missing newline in occ_show_extended()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 09773978879ecf71a7990fe9a28ce4eb92bce645 ]
+
+In occ_show_extended() case 0, when the EXTN_FLAG_SENSOR_ID flag
+is set, the sysfs_emit format string "%u" is missing the trailing
+newline that the sysfs ABI expects. The else branch correctly uses
+"%4phN\n", and all other show functions in this file include the
+trailing newline.
+
+Add the missing "\n" for consistency and correct sysfs output.
+
+Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260326224510.294619-3-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/occ/common.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
+index 89928d38831b6..86c79156a46b9 100644
+--- a/drivers/hwmon/occ/common.c
++++ b/drivers/hwmon/occ/common.c
+@@ -725,7 +725,7 @@ static ssize_t occ_show_extended(struct device *dev,
+ 	switch (sattr->nr) {
+ 	case 0:
+ 		if (extn->flags & EXTN_FLAG_SENSOR_ID) {
+-			rc = sysfs_emit(buf, "%u",
++			rc = sysfs_emit(buf, "%u\n",
+ 					get_unaligned_be32(&extn->sensor_id));
+ 		} else {
+ 			rc = sysfs_emit(buf, "%4phN\n", extn->name);
+-- 
+2.53.0
+
diff --git a/queue-6.18/hwmon-pxe1610-check-return-value-of-page-select-writ.patch b/queue-6.18/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
new file mode 100644
index 0000000..2d9b2ea
--- /dev/null
+++ b/queue-6.18/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
@@ -0,0 +1,45 @@
+From 46f2c875c7dd587bebb0923348dc15e7d1e43e12 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:48 +0000
+Subject: hwmon: (pxe1610) Check return value of page-select write in probe
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ccf70c41e562b29d1c05d1bbf53391785e09c6fb ]
+
+pxe1610_probe() writes PMBUS_PAGE to select page 0 but does not check
+the return value. If the write fails, subsequent register reads operate
+on an indeterminate page, leading to silent misconfiguration.
+
+Check the return value and propagate the error using dev_err_probe(),
+which also handles -EPROBE_DEFER correctly without log spam.
+
+Fixes: 344757bac526 ("hwmon: (pmbus) Add Infineon PXE1610 VR driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-4-sanman.pradhan@hpe.com
+[groeck: Fix "Fixes" SHA]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/pxe1610.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c
+index 6a4a978eca7e8..24c1f961c7668 100644
+--- a/drivers/hwmon/pmbus/pxe1610.c
++++ b/drivers/hwmon/pmbus/pxe1610.c
+@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)
+ 	 * By default this device doesn't boot to page 0, so set page 0
+ 	 * to access all pmbus registers.
+ 	 */
+-	i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	ret = i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	if (ret < 0)
++		return dev_err_probe(&client->dev, ret,
++				     "Failed to set page 0\n");
+ 
+ 	/* Read Manufacturer id */
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf);
+-- 
+2.53.0
+
diff --git a/queue-6.18/hwmon-tps53679-fix-array-access-with-zero-length-blo.patch b/queue-6.18/hwmon-tps53679-fix-array-access-with-zero-length-blo.patch
new file mode 100644
index 0000000..3e5e0f9
--- /dev/null
+++ b/queue-6.18/hwmon-tps53679-fix-array-access-with-zero-length-blo.patch
@@ -0,0 +1,50 @@
+From 359de1206b33eca18789ab0bbaf8e227843837de Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:40 +0000
+Subject: hwmon: (tps53679) Fix array access with zero-length block read
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 0e211f6aaa6a00fd0ee0c1eea5498f168c6725e6 ]
+
+i2c_smbus_read_block_data() can return 0, indicating a zero-length
+read. When this happens, tps53679_identify_chip() accesses buf[ret - 1]
+which is buf[-1], reading one byte before the buffer on the stack.
+
+Fix by changing the check from "ret < 0" to "ret <= 0", treating a
+zero-length read as an error (-EIO), which prevents the out-of-bounds
+array access.
+
+Also fix a typo in the adjacent comment: "if present" instead of
+duplicate "if".
+
+Fixes: 75ca1e5875fe ("hwmon: (pmbus/tps53679) Add support for TPS53685")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-2-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index ca2bfa25eb04c..3bca543817a60 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -103,10 +103,10 @@ static int tps53679_identify_chip(struct i2c_client *client,
+ 	}
+ 
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+-	if (ret < 0)
+-		return ret;
++	if (ret <= 0)
++		return ret < 0 ? ret : -EIO;
+ 
+-	/* Adjust length if null terminator if present */
++	/* Adjust length if null terminator is present */
+ 	buf_len = (buf[ret - 1] != '\x00' ? ret : ret - 1);
+ 
+ 	id_len = strlen(id);
+-- 
+2.53.0
+
diff --git a/queue-6.18/hwmon-tps53679-fix-device-id-comparison-and-printing.patch b/queue-6.18/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
new file mode 100644
index 0000000..a0bb2ca
--- /dev/null
+++ b/queue-6.18/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
@@ -0,0 +1,51 @@
+From abe81700aa56a6d75149850a382e6839c30feba4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 15:56:40 +0000
+Subject: hwmon: (tps53679) Fix device ID comparison and printing in
+ tps53676_identify()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ca34ee6d0307a0b4e52c870dfc1bb8a3c3eb956e ]
+
+tps53676_identify() uses strncmp() to compare the device ID buffer
+against a byte sequence containing embedded non-printable bytes
+(\x53\x67\x60). strncmp() is semantically wrong for binary data
+comparison; use memcmp() instead.
+
+Additionally, the buffer from i2c_smbus_read_block_data() is not
+NUL-terminated, so printing it with "%s" in the error path is
+undefined behavior and may read past the buffer. Use "%*ph" to
+hex-dump the actual bytes returned.
+
+Per the datasheet, the expected device ID is the 6-byte sequence
+54 49 53 67 60 00 ("TI\x53\x67\x60\x00"), so compare all 6 bytes
+including the trailing NUL.
+
+Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260330155618.77403-1-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index 3bca543817a60..249974c13aa39 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -175,8 +175,8 @@ static int tps53676_identify(struct i2c_client *client,
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+ 	if (ret < 0)
+ 		return ret;
+-	if (strncmp("TI\x53\x67\x60", buf, 5)) {
+-		dev_err(&client->dev, "Unexpected device ID: %s\n", buf);
++	if (ret != 6 || memcmp(buf, "TI\x53\x67\x60\x00", 6)) {
++		dev_err(&client->dev, "Unexpected device ID: %*ph\n", ret, buf);
+ 		return -ENODEV;
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.18/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch b/queue-6.18/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
new file mode 100644
index 0000000..2db318e
--- /dev/null
+++ b/queue-6.18/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
@@ -0,0 +1,43 @@
+From cc2c1a027ef46c4f676d0bf6b0b13884c296210c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 Feb 2026 16:33:54 -0600
+Subject: iio: imu: bno055: fix BNO055_SCAN_CH_COUNT off by one
+
+From: David Lechner <dlechner@baylibre.com>
+
+[ Upstream commit 773ef9f95385bae52dcb7fd129fefba3a71a04db ]
+
+Fix an off-by-one error in the BNO055_SCAN_CH_COUNT macro. The count
+is derived by taking the difference of the last and first register
+addresses, dividing by the size of each channel (2 bytes). It needs to
+also add 1 to account for the fact that the count is inclusive of both
+the first and last channels.
+
+Thanks to the aligned_s64 timestamp field, there was already extra
+padding in the buffer, so there were no runtime issues caused by this
+bug.
+
+Fixes: 4aefe1c2bd0c ("iio: imu: add Bosch Sensortec BNO055 core driver")
+Signed-off-by: David Lechner <dlechner@baylibre.com>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/imu/bno055/bno055.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/iio/imu/bno055/bno055.c b/drivers/iio/imu/bno055/bno055.c
+index 303bc308f80a8..c96fec2ebb3e7 100644
+--- a/drivers/iio/imu/bno055/bno055.c
++++ b/drivers/iio/imu/bno055/bno055.c
+@@ -64,7 +64,7 @@
+ #define BNO055_GRAVITY_DATA_X_LSB_REG	0x2E
+ #define BNO055_GRAVITY_DATA_Y_LSB_REG	0x30
+ #define BNO055_GRAVITY_DATA_Z_LSB_REG	0x32
+-#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2)
++#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2 + 1)
+ #define BNO055_TEMP_REG			0x34
+ #define BNO055_CALIB_STAT_REG		0x35
+ #define BNO055_CALIB_STAT_MAGN_SHIFT 0
+-- 
+2.53.0
+
diff --git a/queue-6.18/io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch b/queue-6.18/io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch
new file mode 100644
index 0000000..ef9ce71
--- /dev/null
+++ b/queue-6.18/io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch
@@ -0,0 +1,60 @@
+From e6f4db2841483f7d834482ad52fae83a379a29dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 00:49:36 +0800
+Subject: io_uring/rsrc: reject zero-length fixed buffer import
+
+From: Qi Tang <tpluszz77@gmail.com>
+
+[ Upstream commit 111a12b422a8cfa93deabaef26fec48237163214 ]
+
+validate_fixed_range() admits buf_addr at the exact end of the
+registered region when len is zero, because the check uses strict
+greater-than (buf_end > imu->ubuf + imu->len).  io_import_fixed()
+then computes offset == imu->len, which causes the bvec skip logic
+to advance past the last bio_vec entry and read bv_offset from
+out-of-bounds slab memory.
+
+Return early from io_import_fixed() when len is zero.  A zero-length
+import has no data to transfer and should not walk the bvec array
+at all.
+
+  BUG: KASAN: slab-out-of-bounds in io_import_reg_buf+0x697/0x7f0
+  Read of size 4 at addr ffff888002bcc254 by task poc/103
+  Call Trace:
+   io_import_reg_buf+0x697/0x7f0
+   io_write_fixed+0xd9/0x250
+   __io_issue_sqe+0xad/0x710
+   io_issue_sqe+0x7d/0x1100
+   io_submit_sqes+0x86a/0x23c0
+   __do_sys_io_uring_enter+0xa98/0x1590
+  Allocated by task 103:
+  The buggy address is located 12 bytes to the right of
+   allocated 584-byte region [ffff888002bcc000, ffff888002bcc248)
+
+Fixes: 8622b20f23ed ("io_uring: add validate_fixed_range() for validate fixed buffer")
+Signed-off-by: Qi Tang <tpluszz77@gmail.com>
+Link: https://patch.msgid.link/20260329164936.240871-1-tpluszz77@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ io_uring/rsrc.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
+index 44442bf4827e4..dc87c6a86e346 100644
+--- a/io_uring/rsrc.c
++++ b/io_uring/rsrc.c
+@@ -1082,6 +1082,10 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
+ 		return ret;
+ 	if (!(imu->dir & (1 << ddir)))
+ 		return -EFAULT;
++	if (unlikely(!len)) {
++		iov_iter_bvec(iter, ddir, NULL, 0, 0);
++		return 0;
++	}
+ 
+ 	offset = buf_addr - imu->ubuf;
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.18/mips-ralink-update-cpu-clock-index.patch b/queue-6.18/mips-ralink-update-cpu-clock-index.patch
new file mode 100644
index 0000000..3a5c73b
--- /dev/null
+++ b/queue-6.18/mips-ralink-update-cpu-clock-index.patch
@@ -0,0 +1,49 @@
+From addb22f58714353051c1cc26a3dd801f2fcbcb6a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Feb 2026 10:22:50 +0800
+Subject: mips: ralink: update CPU clock index
+
+From: Shiji Yang <yangshiji66@outlook.com>
+
+[ Upstream commit 43985a62bab9d35e5e9af41118ce2f44c01b97d2 ]
+
+Update CPU clock index to match the clock driver changes.
+
+Fixes: d34db686a3d7 ("clk: ralink: mtmips: fix clocks probe order in oldest ralink SoCs")
+Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
+Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
+Reviewed-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
+Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/mips/ralink/clk.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/mips/ralink/clk.c b/arch/mips/ralink/clk.c
+index 9db73fcac522e..5c1eb46ef5d07 100644
+--- a/arch/mips/ralink/clk.c
++++ b/arch/mips/ralink/clk.c
+@@ -21,16 +21,16 @@ static const char *clk_cpu(int *idx)
+ {
+ 	switch (ralink_soc) {
+ 	case RT2880_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt2880-sysc";
+ 	case RT3883_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3883-sysc";
+ 	case RT305X_SOC_RT3050:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3050-sysc";
+ 	case RT305X_SOC_RT3052:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3052-sysc";
+ 	case RT305X_SOC_RT3350:
+ 		*idx = 1;
+-- 
+2.53.0
+
diff --git a/queue-6.18/perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch b/queue-6.18/perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch
new file mode 100644
index 0000000..9ffd371
--- /dev/null
+++ b/queue-6.18/perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch
@@ -0,0 +1,46 @@
+From e19c2e6351a6da8d6445ceae43db64033291d430 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 Mar 2026 12:43:05 -0700
+Subject: perf/x86: Fix potential bad container_of in intel_pmu_hw_config
+
+From: Ian Rogers <irogers@google.com>
+
+[ Upstream commit dbde07f06226438cd2cf1179745fa1bec5d8914a ]
+
+Auto counter reload may have a group of events with software events
+present within it. The software event PMU isn't the x86_hybrid_pmu and
+a container_of operation in intel_pmu_set_acr_caused_constr (via the
+hybrid helper) could cause out of bound memory reads. Avoid this by
+guarding the call to intel_pmu_set_acr_caused_constr with an
+is_x86_event check.
+
+Fixes: ec980e4facef ("perf/x86/intel: Support auto counter reload")
+Signed-off-by: Ian Rogers <irogers@google.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Thomas Falcon <thomas.falcon@intel.com>
+Link: https://patch.msgid.link/20260312194305.1834035-1-irogers@google.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/events/intel/core.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
+index f43aba3ac779d..3046058e7e238 100644
+--- a/arch/x86/events/intel/core.c
++++ b/arch/x86/events/intel/core.c
+@@ -4441,8 +4441,10 @@ static int intel_pmu_hw_config(struct perf_event *event)
+ 		intel_pmu_set_acr_caused_constr(leader, idx++, cause_mask);
+ 
+ 		if (leader->nr_siblings) {
+-			for_each_sibling_event(sibling, leader)
+-				intel_pmu_set_acr_caused_constr(sibling, idx++, cause_mask);
++			for_each_sibling_event(sibling, leader) {
++				if (is_x86_event(sibling))
++					intel_pmu_set_acr_caused_constr(sibling, idx++, cause_mask);
++			}
+ 		}
+ 
+ 		if (leader != event)
+-- 
+2.53.0
+
diff --git a/queue-6.18/riscv-kgdb-fix-several-debug-register-assignment-bug.patch b/queue-6.18/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
new file mode 100644
index 0000000..e9903d4
--- /dev/null
+++ b/queue-6.18/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
@@ -0,0 +1,58 @@
+From 9d8f80ab5b69538151bfd9c58a9668282f4a0fdf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 17:43:47 -0600
+Subject: riscv: kgdb: fix several debug register assignment bugs
+
+From: Paul Walmsley <pjw@kernel.org>
+
+[ Upstream commit 834911eb8eef2501485d819b4eabebadc25c3497 ]
+
+Fix several bugs in the RISC-V kgdb implementation:
+
+- The element of dbg_reg_def[] that is supposed to pertain to the S1
+  register embeds instead the struct pt_regs offset of the A1
+  register.  Fix this to use the S1 register offset in struct pt_regs.
+
+- The sleeping_thread_to_gdb_regs() function copies the value of the
+  S10 register into the gdb_regs[] array element meant for the S9
+  register, and copies the value of the S11 register into the array
+  element meant for the S10 register.  It also neglects to copy the
+  value of the S11 register.  Fix all of these issues.
+
+Fixes: fe89bd2be8667 ("riscv: Add KGDB support")
+Cc: Vincent Chen <vincent.chen@sifive.com>
+Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/kgdb.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/riscv/kernel/kgdb.c b/arch/riscv/kernel/kgdb.c
+index 15fec5d1e6dec..0bf629204c76a 100644
+--- a/arch/riscv/kernel/kgdb.c
++++ b/arch/riscv/kernel/kgdb.c
+@@ -175,7 +175,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
+ 	{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
+ 	{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
+ 	{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
+-	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
++	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
+ 	{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
+ 	{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
+ 	{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
+@@ -244,8 +244,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
+ 	gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
+ 	gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
+ 	gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
+-	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
+-	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
++	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
++	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
++	gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
+ 	gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.18/riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch b/queue-6.18/riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch
new file mode 100644
index 0000000..8312a2a
--- /dev/null
+++ b/queue-6.18/riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch
@@ -0,0 +1,44 @@
+From af7250a375bcaf5ae1a9a40aee379f285f38b183 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 00:00:22 +0800
+Subject: riscv: Reset pmm when PR_TAGGED_ADDR_ENABLE is not set
+
+From: Zishun Yi <vulab@iscas.ac.cn>
+
+[ Upstream commit 3033b2b1e3949274f33a140e2a97571b5a307298 ]
+
+In set_tagged_addr_ctrl(), when PR_TAGGED_ADDR_ENABLE is not set, pmlen
+is correctly set to 0, but it forgets to reset pmm. This results in the
+CPU pmm state not corresponding to the software pmlen state.
+
+Fix this by resetting pmm along with pmlen.
+
+Fixes: 2e1743085887 ("riscv: Add support for the tagged address ABI")
+Signed-off-by: Zishun Yi <vulab@iscas.ac.cn>
+Reviewed-by: Samuel Holland <samuel.holland@sifive.com>
+Link: https://patch.msgid.link/20260322160022.21908-1-vulab@iscas.ac.cn
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/process.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
+index 31a392993cb45..b5188dc74727d 100644
+--- a/arch/riscv/kernel/process.c
++++ b/arch/riscv/kernel/process.c
+@@ -324,8 +324,10 @@ long set_tagged_addr_ctrl(struct task_struct *task, unsigned long arg)
+ 	if (arg & PR_TAGGED_ADDR_ENABLE && (tagged_addr_disabled || !pmlen))
+ 		return -EINVAL;
+ 
+-	if (!(arg & PR_TAGGED_ADDR_ENABLE))
++	if (!(arg & PR_TAGGED_ADDR_ENABLE)) {
+ 		pmlen = PMLEN_0;
++		pmm = ENVCFG_PMM_PMLEN_0;
++	}
+ 
+ 	if (mmap_write_lock_killable(mm))
+ 		return -EINTR;
+-- 
+2.53.0
+
diff --git a/queue-6.18/sched-fair-fix-zero_vruntime-tracking-fix.patch b/queue-6.18/sched-fair-fix-zero_vruntime-tracking-fix.patch
new file mode 100644
index 0000000..b02ebdc
--- /dev/null
+++ b/queue-6.18/sched-fair-fix-zero_vruntime-tracking-fix.patch
@@ -0,0 +1,103 @@
+From da042ca9e55d846171900f7ffbd8c990f566df6c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Apr 2026 15:20:20 +0200
+Subject: sched/fair: Fix zero_vruntime tracking fix
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+[ Upstream commit 1319ea57529e131822bab56bf417c8edc2db9ae8 ]
+
+John reported that stress-ng-yield could make his machine unhappy and
+managed to bisect it to commit b3d99f43c72b ("sched/fair: Fix
+zero_vruntime tracking").
+
+The combination of yield and that commit was specific enough to
+hypothesize the following scenario:
+
+Suppose we have 2 runnable tasks, both doing yield. Then one will be
+eligible and one will not be, because the average position must be in
+between these two entities.
+
+Therefore, the runnable task will be eligible, and be promoted a full
+slice (all the tasks do is yield after all). This causes it to jump over
+the other task and now the other task is eligible and current is no
+longer. So we schedule.
+
+Since we are runnable, there is no {de,en}queue. All we have is the
+__{en,de}queue_entity() from {put_prev,set_next}_task(). But per the
+fingered commit, those two no longer move zero_vruntime.
+
+All that moves zero_vruntime are tick and full {de,en}queue.
+
+This means, that if the two tasks playing leapfrog can reach the
+critical speed to reach the overflow point inside one tick's worth of
+time, we're up a creek.
+
+Additionally, when multiple cgroups are involved, there is no guarantee
+the tick will in fact hit every cgroup in a timely manner. Statistically
+speaking it will, but that same statistics does not rule out the
+possibility of one cgroup not getting a tick for a significant amount of
+time -- however unlikely.
+
+Therefore, just like with the yield() case, force an update at the end
+of every slice. This ensures the update is never more than a single
+slice behind and the whole thing is within 2 lag bounds as per the
+comment on entity_key().
+
+Fixes: b3d99f43c72b ("sched/fair: Fix zero_vruntime tracking")
+Reported-by: John Stultz <jstultz@google.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
+Tested-by: K Prateek Nayak <kprateek.nayak@amd.com>
+Tested-by: John Stultz <jstultz@google.com>
+Link: https://patch.msgid.link/20260401132355.081530332@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/fair.c | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
+index 292141f4aaa54..d9777c81db0da 100644
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -707,7 +707,7 @@ void update_zero_vruntime(struct cfs_rq *cfs_rq, s64 delta)
+  * Called in:
+  *  - place_entity()      -- before enqueue
+  *  - update_entity_lag() -- before dequeue
+- *  - entity_tick()
++ *  - update_deadline()   -- slice expiration
+  *
+  * This means it is one entry 'behind' but that puts it close enough to where
+  * the bound on entity_key() is at most two lag bounds.
+@@ -1121,6 +1121,7 @@ static bool update_deadline(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ 	 * EEVDF: vd_i = ve_i + r_i / w_i
+ 	 */
+ 	se->deadline = se->vruntime + calc_delta_fair(se->slice, se);
++	avg_vruntime(cfs_rq);
+ 
+ 	/*
+ 	 * The task has consumed its request, reschedule.
+@@ -5635,11 +5636,6 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued)
+ 	update_load_avg(cfs_rq, curr, UPDATE_TG);
+ 	update_cfs_group(curr);
+ 
+-	/*
+-	 * Pulls along cfs_rq::zero_vruntime.
+-	 */
+-	avg_vruntime(cfs_rq);
+-
+ #ifdef CONFIG_SCHED_HRTICK
+ 	/*
+ 	 * queued ticks are scheduled to match the slice, so don't bother
+@@ -9086,7 +9082,7 @@ static void yield_task_fair(struct rq *rq)
+ 	 */
+ 	if (entity_eligible(cfs_rq, se)) {
+ 		se->vruntime = se->deadline;
+-		se->deadline += calc_delta_fair(se->slice, se);
++		update_deadline(cfs_rq, se);
+ 	}
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.18/series b/queue-6.18/series
index 62f275c..6bf2947 100644
--- a/queue-6.18/series
+++ b/queue-6.18/series
@@ -101,3 +101,28 @@
 bpf-reject-direct-access-to-nullable-ptr_to_buf-poin.patch
 bpf-reject-sleepable-kprobe_multi-programs-at-attach.patch
 revert-drm-fix-use-after-free-on-framebuffers-and-property-blobs-when-calling-drm_dev_unplug.patch
+iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
+gpio-rename-gpio_chip_hwgpio-to-gpiod_hwgpio.patch
+gpiolib-clear-requested-flag-if-line-is-invalid.patch
+accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
+io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch
+hwmon-tps53679-fix-array-access-with-zero-length-blo.patch
+hwmon-pxe1610-check-return-value-of-page-select-writ.patch
+hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
+dt-bindings-gpio-fix-microchip-interrupt-cells.patch
+spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch
+spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch
+drm-xe-pxp-clean-up-termination-status-on-failure.patch
+drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch
+drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch
+hwmon-tps53679-fix-device-id-comparison-and-printing.patch
+spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch
+hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
+drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch
+hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch
+mips-ralink-update-cpu-clock-index.patch
+sched-fair-fix-zero_vruntime-tracking-fix.patch
+perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch
+riscv-kgdb-fix-several-debug-register-assignment-bug.patch
+riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch
+acpi-rimt-add-dependency-between-iommu-and-devices.patch
diff --git a/queue-6.18/spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch b/queue-6.18/spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch
new file mode 100644
index 0000000..886c281
--- /dev/null
+++ b/queue-6.18/spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch
@@ -0,0 +1,58 @@
+From 3c3fa8cdbf5bfe4d86389e789686fd5b01b654ad Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 22 Mar 2026 22:28:45 +0800
+Subject: spi: amlogic: spifc-a4: unregister ECC engine on probe failure and
+ remove() callback
+
+From: Felix Gu <ustc.gu@gmail.com>
+
+[ Upstream commit b0dc7e7c56573e7a52080f25f3179a45f3dd7e6f ]
+
+aml_sfc_probe() registers the on-host NAND ECC engine, but teardown was
+missing from both probe unwind and remove-time cleanup. Add a devm cleanup
+action after successful registration so
+nand_ecc_unregister_on_host_hw_engine() runs automatically on probe
+failures and during device removal.
+
+Fixes: 4670db6f32e9 ("spi: amlogic: add driver for Amlogic SPI Flash Controller")
+Signed-off-by: Felix Gu <ustc.gu@gmail.com>
+Link: https://patch.msgid.link/20260322-spifc-a4-v1-1-2dc5ebcbe0a9@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-amlogic-spifc-a4.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/drivers/spi/spi-amlogic-spifc-a4.c b/drivers/spi/spi-amlogic-spifc-a4.c
+index b2589fe2425cc..3393e1f305709 100644
+--- a/drivers/spi/spi-amlogic-spifc-a4.c
++++ b/drivers/spi/spi-amlogic-spifc-a4.c
+@@ -1066,6 +1066,13 @@ static const struct nand_ecc_engine_ops aml_sfc_ecc_engine_ops = {
+ 	.finish_io_req = aml_sfc_ecc_finish_io_req,
+ };
+ 
++static void aml_sfc_unregister_ecc_engine(void *data)
++{
++	struct nand_ecc_engine *eng = data;
++
++	nand_ecc_unregister_on_host_hw_engine(eng);
++}
++
+ static int aml_sfc_clk_init(struct aml_sfc *sfc)
+ {
+ 	sfc->gate_clk = devm_clk_get_enabled(sfc->dev, "gate");
+@@ -1149,6 +1156,11 @@ static int aml_sfc_probe(struct platform_device *pdev)
+ 	if (ret)
+ 		return dev_err_probe(&pdev->dev, ret, "failed to register Aml host ecc engine.\n");
+ 
++	ret = devm_add_action_or_reset(dev, aml_sfc_unregister_ecc_engine,
++				       &sfc->ecc_eng);
++	if (ret)
++		return dev_err_probe(dev, ret, "failed to add ECC unregister action\n");
++
+ 	ret = of_property_read_u32(np, "amlogic,rx-adj", &val);
+ 	if (!ret)
+ 		sfc->rx_adj = val;
+-- 
+2.53.0
+
diff --git a/queue-6.18/spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch b/queue-6.18/spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch
new file mode 100644
index 0000000..483ae0f
--- /dev/null
+++ b/queue-6.18/spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch
@@ -0,0 +1,49 @@
+From 54f15c51696e48ef774e8a0dc24beaa66803a1c6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 00:07:06 +0800
+Subject: spi: stm32-ospi: Fix reset control leak on probe error
+
+From: Felix Gu <ustc.gu@gmail.com>
+
+[ Upstream commit 5a570c8d6e55689253f6fcc4a198c56cca7e39d6 ]
+
+When spi_register_controller() fails after reset_control_acquire()
+succeeds, the reset control is never released. This causes a resource
+leak in the error path.
+
+Add the missing reset_control_release() call in the error path.
+
+Fixes: cf2c3eceb757 ("spi: stm32-ospi: Make usage of reset_control_acquire/release() API")
+Signed-off-by: Felix Gu <ustc.gu@gmail.com>
+Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
+Link: https://patch.msgid.link/20260329-stm32-ospi-v1-1-142122466412@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-stm32-ospi.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-stm32-ospi.c b/drivers/spi/spi-stm32-ospi.c
+index 5fa27de89210a..2988ff288ff02 100644
+--- a/drivers/spi/spi-stm32-ospi.c
++++ b/drivers/spi/spi-stm32-ospi.c
+@@ -939,13 +939,15 @@ static int stm32_ospi_probe(struct platform_device *pdev)
+ 	if (ret) {
+ 		/* Disable ospi */
+ 		writel_relaxed(0, ospi->regs_base + OSPI_CR);
+-		goto err_pm_resume;
++		goto err_reset_control;
+ 	}
+ 
+ 	pm_runtime_put_autosuspend(ospi->dev);
+ 
+ 	return 0;
+ 
++err_reset_control:
++	reset_control_release(ospi->rstc);
+ err_pm_resume:
+ 	pm_runtime_put_sync_suspend(ospi->dev);
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.18/spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch b/queue-6.18/spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch
new file mode 100644
index 0000000..1e37ec5
--- /dev/null
+++ b/queue-6.18/spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch
@@ -0,0 +1,45 @@
+From e899a2c653c3b690d1c6c0e4bc4484ec3b66e2dd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 19:14:05 +0800
+Subject: spi: stm32-ospi: Fix resource leak in remove() callback
+
+From: Felix Gu <ustc.gu@gmail.com>
+
+[ Upstream commit 73cd1f97946ae3796544448ff12c07f399bb2881 ]
+
+The remove() callback returned early if pm_runtime_resume_and_get()
+failed, skipping the cleanup of spi controller and other resources.
+
+Remove the early return so cleanup completes regardless of PM resume
+result.
+
+Fixes: 79b8a705e26c ("spi: stm32: Add OSPI driver")
+Signed-off-by: Felix Gu <ustc.gu@gmail.com>
+Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
+Link: https://patch.msgid.link/20260329-ospi-v1-1-cc8cf1c82c4a@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-stm32-ospi.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/drivers/spi/spi-stm32-ospi.c b/drivers/spi/spi-stm32-ospi.c
+index f36fd36da2692..5fa27de89210a 100644
+--- a/drivers/spi/spi-stm32-ospi.c
++++ b/drivers/spi/spi-stm32-ospi.c
+@@ -963,11 +963,8 @@ static int stm32_ospi_probe(struct platform_device *pdev)
+ static void stm32_ospi_remove(struct platform_device *pdev)
+ {
+ 	struct stm32_ospi *ospi = platform_get_drvdata(pdev);
+-	int ret;
+ 
+-	ret = pm_runtime_resume_and_get(ospi->dev);
+-	if (ret < 0)
+-		return;
++	pm_runtime_resume_and_get(ospi->dev);
+ 
+ 	spi_unregister_controller(ospi->ctrl);
+ 	/* Disable ospi */
+-- 
+2.53.0
+
diff --git a/queue-6.19/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch b/queue-6.19/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
new file mode 100644
index 0000000..90dc493
--- /dev/null
+++ b/queue-6.19/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
@@ -0,0 +1,111 @@
+From 8ebf6cc52c51fe456fcf8c062cef09a2093b196a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 Feb 2026 13:34:14 +0100
+Subject: accel/qaic: Handle DBC deactivation if the owner went away
+
+From: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+
+[ Upstream commit 2feec5ae5df785658924ab6bd91280dc3926507c ]
+
+When a DBC is released, the device sends a QAIC_TRANS_DEACTIVATE_FROM_DEV
+transaction to the host over the QAIC_CONTROL MHI channel. QAIC handles
+this by calling decode_deactivate() to release the resources allocated for
+that DBC. Since that handling is done in the qaic_manage_ioctl() context,
+if the user goes away before receiving and handling the deactivation, the
+host will be out-of-sync with the DBCs available for use, and the DBC
+resources will not be freed unless the device is removed. If another user
+loads and requests to activate a network, then the device assigns the same
+DBC to that network, QAIC will "indefinitely" wait for dbc->in_use = false,
+leading the user process to hang.
+
+As a solution to this, handle QAIC_TRANS_DEACTIVATE_FROM_DEV transactions
+that are received after the user has gone away.
+
+Fixes: 129776ac2e38 ("accel/qaic: Add control path")
+Signed-off-by: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
+Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Signed-off-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Link: https://patch.msgid.link/20260205123415.3870898-1-youssef.abdulrahman@oss.qualcomm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/accel/qaic/qaic_control.c | 47 +++++++++++++++++++++++++++++--
+ 1 file changed, 45 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/accel/qaic/qaic_control.c b/drivers/accel/qaic/qaic_control.c
+index 428d8f65bff36..3842e59291b93 100644
+--- a/drivers/accel/qaic/qaic_control.c
++++ b/drivers/accel/qaic/qaic_control.c
+@@ -913,7 +913,7 @@ static int decode_deactivate(struct qaic_device *qdev, void *trans, u32 *msg_len
+ 		 */
+ 		return -ENODEV;
+ 
+-	if (status) {
++	if (usr && status) {
+ 		/*
+ 		 * Releasing resources failed on the device side, which puts
+ 		 * us in a bind since they may still be in use, so enable the
+@@ -1108,6 +1108,9 @@ static void *msg_xfer(struct qaic_device *qdev, struct wrapper_list *wrappers, u
+ 	mutex_lock(&qdev->cntl_mutex);
+ 	if (!list_empty(&elem.list))
+ 		list_del(&elem.list);
++	/* resp_worker() processed the response but the wait was interrupted */
++	else if (ret == -ERESTARTSYS)
++		ret = 0;
+ 	if (!ret && !elem.buf)
+ 		ret = -ETIMEDOUT;
+ 	else if (ret > 0 && !elem.buf)
+@@ -1418,9 +1421,49 @@ static void resp_worker(struct work_struct *work)
+ 	}
+ 	mutex_unlock(&qdev->cntl_mutex);
+ 
+-	if (!found)
++	if (!found) {
++		/*
++		 * The user might have gone away at this point without waiting
++		 * for QAIC_TRANS_DEACTIVATE_FROM_DEV transaction coming from
++		 * the device. If this is not handled correctly, the host will
++		 * not know that the DBC[n] has been freed on the device.
++		 * Due to this failure in synchronization between the device and
++		 * the host, if another user requests to activate a network, and
++		 * the device assigns DBC[n] again, save_dbc_buf() will hang,
++		 * waiting for dbc[n]->in_use to be set to false, which will not
++		 * happen unless the qaic_dev_reset_clean_local_state() gets
++		 * called by resetting the device (or re-inserting the module).
++		 *
++		 * As a solution, we look for QAIC_TRANS_DEACTIVATE_FROM_DEV
++		 * transactions in the message before disposing of it, then
++		 * handle releasing the DBC resources.
++		 *
++		 * Since the user has gone away, if the device could not
++		 * deactivate the network (status != 0), there is no way to
++		 * enable and reassign the DBC to the user. We can put trust in
++		 * the device that it will release all the active DBCs in
++		 * response to the QAIC_TRANS_TERMINATE_TO_DEV transaction,
++		 * otherwise, the user can issue an soc_reset to the device.
++		 */
++		u32 msg_count = le32_to_cpu(msg->hdr.count);
++		u32 msg_len = le32_to_cpu(msg->hdr.len);
++		u32 len = 0;
++		int j;
++
++		for (j = 0; j < msg_count && len < msg_len; ++j) {
++			struct wire_trans_hdr *trans_hdr;
++
++			trans_hdr = (struct wire_trans_hdr *)(msg->data + len);
++			if (le32_to_cpu(trans_hdr->type) == QAIC_TRANS_DEACTIVATE_FROM_DEV) {
++				if (decode_deactivate(qdev, trans_hdr, &len, NULL))
++					len += le32_to_cpu(trans_hdr->len);
++			} else {
++				len += le32_to_cpu(trans_hdr->len);
++			}
++		}
+ 		/* request must have timed out, drop packet */
+ 		kfree(msg);
++	}
+ 
+ 	kfree(resp);
+ }
+-- 
+2.53.0
+
diff --git a/queue-6.19/acpi-rimt-add-dependency-between-iommu-and-devices.patch b/queue-6.19/acpi-rimt-add-dependency-between-iommu-and-devices.patch
new file mode 100644
index 0000000..1ef187c
--- /dev/null
+++ b/queue-6.19/acpi-rimt-add-dependency-between-iommu-and-devices.patch
@@ -0,0 +1,44 @@
+From 81fda71c8356b4cc762209184119413e838d943e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 3 Mar 2026 11:46:05 +0530
+Subject: ACPI: RIMT: Add dependency between iommu and devices
+
+From: Sunil V L <sunilvl@oss.qualcomm.com>
+
+[ Upstream commit 9156585280f161fc1c3552cf1860559edb2bb7e3 ]
+
+EPROBE_DEFER ensures IOMMU devices are probed before the devices that
+depend on them. During shutdown, however, the IOMMU may be removed
+first, leading to issues. To avoid this, a device link is added
+which enforces the correct removal order.
+
+Fixes: 8f7729552582 ("ACPI: RISC-V: Add support for RIMT")
+Signed-off-by: Sunil V L <sunilvl@oss.qualcomm.com>
+Link: https://patch.msgid.link/20260303061605.722949-1-sunilvl@oss.qualcomm.com
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/riscv/rimt.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/acpi/riscv/rimt.c b/drivers/acpi/riscv/rimt.c
+index 7f423405e5ef0..8eaa8731bddd6 100644
+--- a/drivers/acpi/riscv/rimt.c
++++ b/drivers/acpi/riscv/rimt.c
+@@ -263,6 +263,13 @@ static int rimt_iommu_xlate(struct device *dev, struct acpi_rimt_node *node, u32
+ 	if (!rimt_fwnode)
+ 		return -EPROBE_DEFER;
+ 
++	/*
++	 * EPROBE_DEFER ensures IOMMU is probed before the devices that
++	 * depend on them. During shutdown, however, the IOMMU may be removed
++	 * first, leading to issues. To avoid this, a device link is added
++	 * which enforces the correct removal order.
++	 */
++	device_link_add(dev, rimt_fwnode->dev, DL_FLAG_AUTOREMOVE_CONSUMER);
+ 	return acpi_iommu_fwspec_init(dev, deviceid, rimt_fwnode);
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/drm-bridge-fix-refcount-shown-via-debugfs-for-encode.patch b/queue-6.19/drm-bridge-fix-refcount-shown-via-debugfs-for-encode.patch
new file mode 100644
index 0000000..b8b9e90
--- /dev/null
+++ b/queue-6.19/drm-bridge-fix-refcount-shown-via-debugfs-for-encode.patch
@@ -0,0 +1,83 @@
+From ff272405b103285518948e616315631149399e14 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 18 Mar 2026 13:26:05 +0800
+Subject: drm/bridge: Fix refcount shown via debugfs for encoder_bridges_show()
+
+From: Liu Ying <victor.liu@nxp.com>
+
+[ Upstream commit f078634c184a9b5ccaa056e8b8d6cd32f7bff1b6 ]
+
+A typical bridge refcount value is 3 after a bridge chain is formed:
+- devm_drm_bridge_alloc() initializes the refcount value to be 1.
+- drm_bridge_add() gets an additional reference hence 2.
+- drm_bridge_attach() gets the third reference hence 3.
+
+This typical refcount value aligns with allbridges_show()'s behaviour.
+However, since encoder_bridges_show() uses
+drm_for_each_bridge_in_chain_scoped() to automatically get/put the
+bridge reference while iterating, a bogus reference is accidentally
+got when showing the wrong typical refcount value as 4 to users via
+debugfs.  Fix this by caching the refcount value returned from
+kref_read() while iterating and explicitly decreasing the cached
+refcount value by 1 before showing it to users.
+
+Fixes: bd57048e4576 ("drm/bridge: use drm_for_each_bridge_in_chain_scoped()")
+Signed-off-by: Liu Ying <victor.liu@nxp.com>
+Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Link: https://patch.msgid.link/20260318-drm-misc-next-2026-03-05-fix-encoder-bridges-refcount-v3-1-147fea581279@nxp.com
+Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_bridge.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
+index 8f355df883d8a..250bf8fa51677 100644
+--- a/drivers/gpu/drm/drm_bridge.c
++++ b/drivers/gpu/drm/drm_bridge.c
+@@ -1465,11 +1465,17 @@ EXPORT_SYMBOL(devm_drm_put_bridge);
+ static void drm_bridge_debugfs_show_bridge(struct drm_printer *p,
+ 					   struct drm_bridge *bridge,
+ 					   unsigned int idx,
+-					   bool lingering)
++					   bool lingering,
++					   bool scoped)
+ {
++	unsigned int refcount = kref_read(&bridge->refcount);
++
++	if (scoped)
++		refcount--;
++
+ 	drm_printf(p, "bridge[%u]: %ps\n", idx, bridge->funcs);
+ 
+-	drm_printf(p, "\trefcount: %u%s\n", kref_read(&bridge->refcount),
++	drm_printf(p, "\trefcount: %u%s\n", refcount,
+ 		   lingering ? " [lingering]" : "");
+ 
+ 	drm_printf(p, "\ttype: [%d] %s\n",
+@@ -1503,10 +1509,10 @@ static int allbridges_show(struct seq_file *m, void *data)
+ 	mutex_lock(&bridge_lock);
+ 
+ 	list_for_each_entry(bridge, &bridge_list, list)
+-		drm_bridge_debugfs_show_bridge(&p, bridge, idx++, false);
++		drm_bridge_debugfs_show_bridge(&p, bridge, idx++, false, false);
+ 
+ 	list_for_each_entry(bridge, &bridge_lingering_list, list)
+-		drm_bridge_debugfs_show_bridge(&p, bridge, idx++, true);
++		drm_bridge_debugfs_show_bridge(&p, bridge, idx++, true, false);
+ 
+ 	mutex_unlock(&bridge_lock);
+ 
+@@ -1521,7 +1527,7 @@ static int encoder_bridges_show(struct seq_file *m, void *data)
+ 	unsigned int idx = 0;
+ 
+ 	drm_for_each_bridge_in_chain_scoped(encoder, bridge)
+-		drm_bridge_debugfs_show_bridge(&p, bridge, idx++, false);
++		drm_bridge_debugfs_show_bridge(&p, bridge, idx++, false, true);
+ 
+ 	return 0;
+ }
+-- 
+2.53.0
+
diff --git a/queue-6.19/drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch b/queue-6.19/drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch
new file mode 100644
index 0000000..9e059e8
--- /dev/null
+++ b/queue-6.19/drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch
@@ -0,0 +1,96 @@
+From ce28341235dac4c095f76a422f658bd492e10bcd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 Mar 2026 14:46:52 +0800
+Subject: drm/sysfb: Fix efidrm error handling and memory type mismatch
+
+From: Chen Ni <nichen@iscas.ac.cn>
+
+[ Upstream commit 5e77923a3eb39cce91bf08ed7670f816bf86d4af ]
+
+Fix incorrect error checking and memory type confusion in
+efidrm_device_create(). devm_memremap() returns error pointers, not
+NULL, and returns system memory while devm_ioremap() returns I/O memory.
+The code incorrectly passes system memory to iosys_map_set_vaddr_iomem().
+
+Restructure to handle each memory type separately. Use devm_ioremap*()
+with ERR_PTR(-ENXIO) for WC/UC, and devm_memremap() with ERR_CAST() for
+WT/WB.
+
+Fixes: 32ae90c66fb6 ("drm/sysfb: Add efidrm for EFI displays")
+Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
+Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
+Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
+Link: https://patch.msgid.link/20260311064652.2903449-1-nichen@iscas.ac.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/sysfb/efidrm.c | 46 +++++++++++++++++++++++-----------
+ 1 file changed, 31 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/gpu/drm/sysfb/efidrm.c b/drivers/gpu/drm/sysfb/efidrm.c
+index 1b683d55d6ea4..ac48bfa47e081 100644
+--- a/drivers/gpu/drm/sysfb/efidrm.c
++++ b/drivers/gpu/drm/sysfb/efidrm.c
+@@ -151,7 +151,6 @@ static struct efidrm_device *efidrm_device_create(struct drm_driver *drv,
+ 	struct drm_sysfb_device *sysfb;
+ 	struct drm_device *dev;
+ 	struct resource *mem = NULL;
+-	void __iomem *screen_base = NULL;
+ 	struct drm_plane *primary_plane;
+ 	struct drm_crtc *crtc;
+ 	struct drm_encoder *encoder;
+@@ -236,21 +235,38 @@ static struct efidrm_device *efidrm_device_create(struct drm_driver *drv,
+ 
+ 	mem_flags = efidrm_get_mem_flags(dev, res->start, vsize);
+ 
+-	if (mem_flags & EFI_MEMORY_WC)
+-		screen_base = devm_ioremap_wc(&pdev->dev, mem->start, resource_size(mem));
+-	else if (mem_flags & EFI_MEMORY_UC)
+-		screen_base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
+-	else if (mem_flags & EFI_MEMORY_WT)
+-		screen_base = devm_memremap(&pdev->dev, mem->start, resource_size(mem),
+-					    MEMREMAP_WT);
+-	else if (mem_flags & EFI_MEMORY_WB)
+-		screen_base = devm_memremap(&pdev->dev, mem->start, resource_size(mem),
+-					    MEMREMAP_WB);
+-	else
++	if (mem_flags & EFI_MEMORY_WC) {
++		void __iomem *screen_base = devm_ioremap_wc(&pdev->dev, mem->start,
++							    resource_size(mem));
++
++		if (!screen_base)
++			return ERR_PTR(-ENXIO);
++		iosys_map_set_vaddr_iomem(&sysfb->fb_addr, screen_base);
++	} else if (mem_flags & EFI_MEMORY_UC) {
++		void __iomem *screen_base = devm_ioremap(&pdev->dev, mem->start,
++							 resource_size(mem));
++
++		if (!screen_base)
++			return ERR_PTR(-ENXIO);
++		iosys_map_set_vaddr_iomem(&sysfb->fb_addr, screen_base);
++	} else if (mem_flags & EFI_MEMORY_WT) {
++		void *screen_base = devm_memremap(&pdev->dev, mem->start,
++						  resource_size(mem), MEMREMAP_WT);
++
++		if (IS_ERR(screen_base))
++			return ERR_CAST(screen_base);
++		iosys_map_set_vaddr(&sysfb->fb_addr, screen_base);
++	} else if (mem_flags & EFI_MEMORY_WB) {
++		void *screen_base = devm_memremap(&pdev->dev, mem->start,
++						  resource_size(mem), MEMREMAP_WB);
++
++		if (IS_ERR(screen_base))
++			return ERR_CAST(screen_base);
++		iosys_map_set_vaddr(&sysfb->fb_addr, screen_base);
++	} else {
+ 		drm_err(dev, "invalid mem_flags: 0x%llx\n", mem_flags);
+-	if (!screen_base)
+-		return ERR_PTR(-ENOMEM);
+-	iosys_map_set_vaddr_iomem(&sysfb->fb_addr, screen_base);
++		return ERR_PTR(-EINVAL);
++	}
+ 
+ 	/*
+ 	 * Modesetting
+-- 
+2.53.0
+
diff --git a/queue-6.19/drm-xe-pxp-clean-up-termination-status-on-failure.patch b/queue-6.19/drm-xe-pxp-clean-up-termination-status-on-failure.patch
new file mode 100644
index 0000000..5da9d7a
--- /dev/null
+++ b/queue-6.19/drm-xe-pxp-clean-up-termination-status-on-failure.patch
@@ -0,0 +1,43 @@
+From 43f75c99f2577c1950565134653c3db5ee29f8e9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Mar 2026 08:37:20 -0700
+Subject: drm/xe/pxp: Clean up termination status on failure
+
+From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+
+[ Upstream commit e2628e670bb0923fcdc00828bfcd67b26a7df020 ]
+
+If the PXP HW termination fails during PXP start, the normal completion
+code won't be called, so the termination will remain uncomplete. To avoid
+unnecessary waits, mark the termination as completed from the error path.
+Note that we already do this if the termination fails when handling a
+termination irq from the HW.
+
+Fixes: f8caa80154c4 ("drm/xe/pxp: Add PXP queue tracking and session start")
+Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+Cc: Alan Previn Teres Alexis <alan.previn.teres.alexis@intel.com>
+Cc: Julia Filipchuk <julia.filipchuk@intel.com>
+Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com>
+Link: https://patch.msgid.link/20260324153718.3155504-7-daniele.ceraolospurio@intel.com
+(cherry picked from commit 5d9e708d2a69ab1f64a17aec810cd7c70c5b9fab)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_pxp.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
+index bdbdbbf6a6781..ba4d52001b853 100644
+--- a/drivers/gpu/drm/xe/xe_pxp.c
++++ b/drivers/gpu/drm/xe/xe_pxp.c
+@@ -603,6 +603,7 @@ static int pxp_start(struct xe_pxp *pxp, u8 type)
+ 			drm_err(&pxp->xe->drm, "PXP termination failed before start\n");
+ 			mutex_lock(&pxp->mutex);
+ 			pxp->status = XE_PXP_ERROR;
++			complete_all(&pxp->termination);
+ 
+ 			goto out_unlock;
+ 		}
+-- 
+2.53.0
+
diff --git a/queue-6.19/drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch b/queue-6.19/drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch
new file mode 100644
index 0000000..e05611e
--- /dev/null
+++ b/queue-6.19/drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch
@@ -0,0 +1,49 @@
+From a645ad0d4bc94481034a71c231333c2c4ba06d1f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Mar 2026 08:37:22 -0700
+Subject: drm/xe/pxp: Clear restart flag in pxp_start after jumping back
+
+From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+
+[ Upstream commit 76903b2057c8677c2c006e87fede15f496555dc0 ]
+
+If we don't clear the flag we'll keep jumping back at the beginning of
+the function once we reach the end.
+
+Fixes: ccd3c6820a90 ("drm/xe/pxp: Decouple queue addition from PXP start")
+Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+Cc: Julia Filipchuk <julia.filipchuk@intel.com>
+Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com>
+Link: https://patch.msgid.link/20260324153718.3155504-9-daniele.ceraolospurio@intel.com
+(cherry picked from commit 0850ec7bb2459602351639dccf7a68a03c9d1ee0)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_pxp.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
+index fdcecc026e937..9261a8412b64f 100644
+--- a/drivers/gpu/drm/xe/xe_pxp.c
++++ b/drivers/gpu/drm/xe/xe_pxp.c
+@@ -532,7 +532,7 @@ static int __exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q)
+ static int pxp_start(struct xe_pxp *pxp, u8 type)
+ {
+ 	int ret = 0;
+-	bool restart = false;
++	bool restart;
+ 
+ 	if (!xe_pxp_is_enabled(pxp))
+ 		return -ENODEV;
+@@ -561,6 +561,8 @@ static int pxp_start(struct xe_pxp *pxp, u8 type)
+ 					 msecs_to_jiffies(PXP_ACTIVATION_TIMEOUT_MS)))
+ 		return -ETIMEDOUT;
+ 
++	restart = false;
++
+ 	mutex_lock(&pxp->mutex);
+ 
+ 	/* If PXP is not already active, turn it on */
+-- 
+2.53.0
+
diff --git a/queue-6.19/drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch b/queue-6.19/drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch
new file mode 100644
index 0000000..9e374a7
--- /dev/null
+++ b/queue-6.19/drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch
@@ -0,0 +1,57 @@
+From 76f2719cf331b8c9649c489d7bc2d74ef090e231 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Mar 2026 08:37:21 -0700
+Subject: drm/xe/pxp: Remove incorrect handling of impossible state during
+ suspend
+
+From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+
+[ Upstream commit 4fed244954c2dc9aafa333d08f66b14345225e03 ]
+
+The default case of the PXP suspend switch is incorrectly exiting
+without releasing the lock. However, this case is impossible to hit
+because we're switching on an enum and all the valid enum values have
+their own cases. Therefore, we can just get rid of the default case
+and rely on the compiler to warn us if a new enum value is added and
+we forget to add it to the switch.
+
+Fixes: 51462211f4a9 ("drm/xe/pxp: add PXP PM support")
+Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
+Cc: Alan Previn Teres Alexis <alan.previn.teres.alexis@intel.com>
+Cc: Julia Filipchuk <julia.filipchuk@intel.com>
+Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com>
+Link: https://patch.msgid.link/20260324153718.3155504-8-daniele.ceraolospurio@intel.com
+(cherry picked from commit f1b5a77fc9b6a90cd9a5e3db9d4c73ae1edfcfac)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_pxp.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
+index ba4d52001b853..fdcecc026e937 100644
+--- a/drivers/gpu/drm/xe/xe_pxp.c
++++ b/drivers/gpu/drm/xe/xe_pxp.c
+@@ -891,11 +891,6 @@ int xe_pxp_pm_suspend(struct xe_pxp *pxp)
+ 		pxp->key_instance++;
+ 		needs_queue_inval = true;
+ 		break;
+-	default:
+-		drm_err(&pxp->xe->drm, "unexpected state during PXP suspend: %u",
+-			pxp->status);
+-		ret = -EIO;
+-		goto out;
+ 	}
+ 
+ 	/*
+@@ -920,7 +915,6 @@ int xe_pxp_pm_suspend(struct xe_pxp *pxp)
+ 
+ 	pxp->last_suspend_key_instance = pxp->key_instance;
+ 
+-out:
+ 	return ret;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/drm-xe-xe_pagefault-disallow-writes-to-read-only-vma.patch b/queue-6.19/drm-xe-xe_pagefault-disallow-writes-to-read-only-vma.patch
new file mode 100644
index 0000000..129c4d0
--- /dev/null
+++ b/queue-6.19/drm-xe-xe_pagefault-disallow-writes-to-read-only-vma.patch
@@ -0,0 +1,50 @@
+From 30eebb5febe0d774cb9463cd70abeaa93a5857b7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Mar 2026 15:29:37 +0000
+Subject: drm/xe/xe_pagefault: Disallow writes to read-only VMAs
+
+From: Jonathan Cavitt <jonathan.cavitt@intel.com>
+
+[ Upstream commit 6d192b4f2d644d15d9a9f1d33dab05af936f6540 ]
+
+The page fault handler should reject write/atomic access to read only
+VMAs.  Add code to handle this in xe_pagefault_service after the VMA
+lookup.
+
+v2:
+- Apply max line length (Matthew)
+
+Fixes: fb544b844508 ("drm/xe: Implement xe_pagefault_queue_work")
+Signed-off-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
+Suggested-by: Matthew Brost <matthew.brost@intel.com>
+Cc: Shuicheng Lin <shuicheng.lin@intel.com>
+Reviewed-by: Matthew Brost <matthew.brost@intel.com>
+Signed-off-by: Matthew Brost <matthew.brost@intel.com>
+Link: https://patch.msgid.link/20260324152935.72444-7-jonathan.cavitt@intel.com
+(cherry picked from commit 714ee6754ac5fa3dc078856a196a6b124cd797a0)
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/xe/xe_pagefault.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
+index afb06598b6e1a..0b625a52a5984 100644
+--- a/drivers/gpu/drm/xe/xe_pagefault.c
++++ b/drivers/gpu/drm/xe/xe_pagefault.c
+@@ -187,6 +187,12 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
+ 		goto unlock_vm;
+ 	}
+ 
++	if (xe_vma_read_only(vma) &&
++	    pf->consumer.access_type != XE_PAGEFAULT_ACCESS_TYPE_READ) {
++		err = -EPERM;
++		goto unlock_vm;
++	}
++
+ 	atomic = xe_pagefault_access_is_atomic(pf->consumer.access_type);
+ 
+ 	if (xe_vma_is_cpu_addr_mirror(vma))
+-- 
+2.53.0
+
diff --git a/queue-6.19/dt-bindings-gpio-fix-microchip-interrupt-cells.patch b/queue-6.19/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
new file mode 100644
index 0000000..e050e73
--- /dev/null
+++ b/queue-6.19/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
@@ -0,0 +1,47 @@
+From 1a68ba00e7c6bf166212e811f7157dbeebe231c2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 17:02:34 +0000
+Subject: dt-bindings: gpio: fix microchip #interrupt-cells
+
+From: Jamie Gibbons <jamie.gibbons@microchip.com>
+
+[ Upstream commit 6b5ef8c88854b343b733b574ea8754c9dab61f41 ]
+
+The GPIO controller on PolarFire SoC supports more than one type of
+interrupt and needs two interrupt cells.
+
+Fixes: 735806d8a68e9 ("dt-bindings: gpio: add bindings for microchip mpfs gpio")
+Signed-off-by: Jamie Gibbons <jamie.gibbons@microchip.com>
+Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
+Link: https://patch.msgid.link/20260326-wise-gumdrop-49217723a72a@spud
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../devicetree/bindings/gpio/microchip,mpfs-gpio.yaml         | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+index 184432d24ea18..f42c54653d521 100644
+--- a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
++++ b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+@@ -37,7 +37,7 @@ properties:
+     const: 2
+ 
+   "#interrupt-cells":
+-    const: 1
++    const: 2
+ 
+   ngpios:
+     description:
+@@ -86,7 +86,7 @@ examples:
+         gpio-controller;
+         #gpio-cells = <2>;
+         interrupt-controller;
+-        #interrupt-cells = <1>;
++        #interrupt-cells = <2>;
+         interrupts = <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+-- 
+2.53.0
+
diff --git a/queue-6.19/gpio-qixis-fpga-fix-error-handling-for-devm_regmap_i.patch b/queue-6.19/gpio-qixis-fpga-fix-error-handling-for-devm_regmap_i.patch
new file mode 100644
index 0000000..c056f2b
--- /dev/null
+++ b/queue-6.19/gpio-qixis-fpga-fix-error-handling-for-devm_regmap_i.patch
@@ -0,0 +1,41 @@
+From ea8a66b5940b0a4dd572063c317218918e2fe0af Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 20 Mar 2026 22:56:38 +0800
+Subject: gpio: qixis-fpga: Fix error handling for devm_regmap_init_mmio()
+
+From: Felix Gu <ustc.gu@gmail.com>
+
+[ Upstream commit 8de4e0f44c638c66cdc5eeb4d5ab9acd61c31e4f ]
+
+devm_regmap_init_mmio() returns an ERR_PTR() on failure, not NULL.
+The original code checked for NULL which would never trigger on error,
+potentially leading to an invalid pointer dereference.
+Use IS_ERR() and PTR_ERR() to properly handle the error case.
+
+Fixes: e88500247dc3 ("gpio: add QIXIS FPGA GPIO controller")
+Signed-off-by: Felix Gu <ustc.gu@gmail.com>
+Link: https://patch.msgid.link/20260320-qixis-v1-1-a8efc22e8945@gmail.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpio-qixis-fpga.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpio/gpio-qixis-fpga.c b/drivers/gpio/gpio-qixis-fpga.c
+index 6e67f43ac0bdd..3ced47db1521c 100644
+--- a/drivers/gpio/gpio-qixis-fpga.c
++++ b/drivers/gpio/gpio-qixis-fpga.c
+@@ -60,8 +60,8 @@ static int qixis_cpld_gpio_probe(struct platform_device *pdev)
+ 			return PTR_ERR(reg);
+ 
+ 		regmap = devm_regmap_init_mmio(&pdev->dev, reg, &regmap_config_8r_8v);
+-		if (!regmap)
+-			return -ENODEV;
++		if (IS_ERR(regmap))
++			return PTR_ERR(regmap);
+ 
+ 		/* In this case, the offset of our register is 0 inside the
+ 		 * regmap area that we just created.
+-- 
+2.53.0
+
diff --git a/queue-6.19/gpio-shared-call-gpio_chip-of_xlate-if-set.patch b/queue-6.19/gpio-shared-call-gpio_chip-of_xlate-if-set.patch
new file mode 100644
index 0000000..c69f9cc
--- /dev/null
+++ b/queue-6.19/gpio-shared-call-gpio_chip-of_xlate-if-set.patch
@@ -0,0 +1,130 @@
+From 39a413521a63a48a7086f28c37e1cca850f21338 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 18 Mar 2026 15:00:53 +0100
+Subject: gpio: shared: call gpio_chip::of_xlate() if set
+
+From: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+
+[ Upstream commit 710abda58055ed5eaa8958107633cc12a365c328 ]
+
+OF-based GPIO controller drivers may provide a translation function that
+calculates the real chip offset from whatever devicetree sources
+provide. We need to take this into account in the shared GPIO management
+and call of_xlate() if it's provided and adjust the entry->offset we
+initially set when scanning the tree.
+
+To that end: modify the shared GPIO API to take the GPIO chip as
+argument on setup (to avoid having to rcu_dereference() it from the GPIO
+device) and protect the access to entry->offset with the existing lock.
+
+Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support")
+Reported-by: Jon Hunter <jonathanh@nvidia.com>
+Closes: https://lore.kernel.org/all/921ba8ce-b18e-4a99-966d-c763d22081e2@nvidia.com/
+Reviewed-by: Linus Walleij <linusw@kernel.org>
+Tested-by: Jon Hunter <jonathanh@nvidia.com>
+Acked-by: Jon Hunter <jonathanh@nvidia.com>
+Link: https://patch.msgid.link/20260318-gpio-shared-xlate-v2-1-0ce34c707e81@oss.qualcomm.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpiolib-shared.c | 27 ++++++++++++++++++++++++++-
+ drivers/gpio/gpiolib-shared.h |  4 ++--
+ drivers/gpio/gpiolib.c        |  2 +-
+ 3 files changed, 29 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpio/gpiolib-shared.c b/drivers/gpio/gpiolib-shared.c
+index e16f467b72e7a..6316ae5a1c310 100644
+--- a/drivers/gpio/gpiolib-shared.c
++++ b/drivers/gpio/gpiolib-shared.c
+@@ -511,8 +511,9 @@ static void gpio_shared_remove_adev(struct auxiliary_device *adev)
+ 	auxiliary_device_uninit(adev);
+ }
+ 
+-int gpio_device_setup_shared(struct gpio_device *gdev)
++int gpiochip_setup_shared(struct gpio_chip *gc)
+ {
++	struct gpio_device *gdev = gc->gpiodev;
+ 	struct gpio_shared_entry *entry;
+ 	struct gpio_shared_ref *ref;
+ 	struct gpio_desc *desc;
+@@ -537,12 +538,34 @@ int gpio_device_setup_shared(struct gpio_device *gdev)
+ 	 * exposing shared pins. Find them and create the proxy devices.
+ 	 */
+ 	list_for_each_entry(entry, &gpio_shared_list, list) {
++		guard(mutex)(&entry->lock);
++
+ 		if (!device_match_fwnode(&gdev->dev, entry->fwnode))
+ 			continue;
+ 
+ 		if (list_count_nodes(&entry->refs) <= 1)
+ 			continue;
+ 
++#if IS_ENABLED(CONFIG_OF)
++		if (is_of_node(entry->fwnode) && gc->of_xlate) {
++			/*
++			 * This is the earliest that we can tranlate the
++			 * devicetree offset to the chip offset.
++			 */
++			struct of_phandle_args gpiospec = { };
++
++			gpiospec.np = to_of_node(entry->fwnode);
++			gpiospec.args_count = 2;
++			gpiospec.args[0] = entry->offset;
++
++			ret = gc->of_xlate(gc, &gpiospec, NULL);
++			if (ret < 0)
++				return ret;
++
++			entry->offset = ret;
++		}
++#endif /* CONFIG_OF */
++
+ 		desc = &gdev->descs[entry->offset];
+ 
+ 		__set_bit(GPIOD_FLAG_SHARED, &desc->flags);
+@@ -580,6 +603,8 @@ void gpio_device_teardown_shared(struct gpio_device *gdev)
+ 	struct gpio_shared_ref *ref;
+ 
+ 	list_for_each_entry(entry, &gpio_shared_list, list) {
++		guard(mutex)(&entry->lock);
++
+ 		if (!device_match_fwnode(&gdev->dev, entry->fwnode))
+ 			continue;
+ 
+diff --git a/drivers/gpio/gpiolib-shared.h b/drivers/gpio/gpiolib-shared.h
+index 40568ef7364cc..e11e260e1f590 100644
+--- a/drivers/gpio/gpiolib-shared.h
++++ b/drivers/gpio/gpiolib-shared.h
+@@ -14,14 +14,14 @@ struct device;
+ 
+ #if IS_ENABLED(CONFIG_GPIO_SHARED)
+ 
+-int gpio_device_setup_shared(struct gpio_device *gdev);
++int gpiochip_setup_shared(struct gpio_chip *gc);
+ void gpio_device_teardown_shared(struct gpio_device *gdev);
+ int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_id,
+ 				 unsigned long lflags);
+ 
+ #else
+ 
+-static inline int gpio_device_setup_shared(struct gpio_device *gdev)
++static inline int gpiochip_setup_shared(struct gpio_chip *gc)
+ {
+ 	return 0;
+ }
+diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
+index 04068f4eb3422..0285142893642 100644
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -1211,7 +1211,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
+ 	if (ret)
+ 		goto err_remove_irqchip_mask;
+ 
+-	ret = gpio_device_setup_shared(gdev);
++	ret = gpiochip_setup_shared(gc);
+ 	if (ret)
+ 		goto err_remove_irqchip;
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/gpio-shared-handle-pins-shared-by-child-nodes-of-dev.patch b/queue-6.19/gpio-shared-handle-pins-shared-by-child-nodes-of-dev.patch
new file mode 100644
index 0000000..399f69d
--- /dev/null
+++ b/queue-6.19/gpio-shared-handle-pins-shared-by-child-nodes-of-dev.patch
@@ -0,0 +1,100 @@
+From b68719fbe0b8c8c65e3f7889edc9c9a0efc79895 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 18 Mar 2026 15:00:54 +0100
+Subject: gpio: shared: handle pins shared by child nodes of devices
+
+From: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+
+[ Upstream commit ec42a3a90ae9ae64b16d01a2e5d32ec0865ca8cf ]
+
+Shared GPIOs may be assigned to child nodes of device nodes which don't
+themselves bind to any struct device. We need to pass the firmware node
+that is the actual consumer to gpiolib-shared and compare against it
+instead of unconditionally using the fwnode of the consumer device.
+
+Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support")
+Reported-by: Jon Hunter <jonathanh@nvidia.com>
+Closes: https://lore.kernel.org/all/921ba8ce-b18e-4a99-966d-c763d22081e2@nvidia.com/
+Tested-by: Jon Hunter <jonathanh@nvidia.com>
+Acked-by: Jon Hunter <jonathanh@nvidia.com>
+Link: https://patch.msgid.link/20260318-gpio-shared-xlate-v2-2-0ce34c707e81@oss.qualcomm.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpiolib-shared.c | 6 +++---
+ drivers/gpio/gpiolib-shared.h | 7 +++++--
+ drivers/gpio/gpiolib.c        | 4 ++--
+ 3 files changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpio/gpiolib-shared.c b/drivers/gpio/gpiolib-shared.c
+index 6316ae5a1c310..9c31736d29b77 100644
+--- a/drivers/gpio/gpiolib-shared.c
++++ b/drivers/gpio/gpiolib-shared.c
+@@ -443,8 +443,8 @@ static bool gpio_shared_dev_is_reset_gpio(struct device *consumer,
+ }
+ #endif /* CONFIG_RESET_GPIO */
+ 
+-int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_id,
+-				 unsigned long lflags)
++int gpio_shared_add_proxy_lookup(struct device *consumer, struct fwnode_handle *fwnode,
++				 const char *con_id, unsigned long lflags)
+ {
+ 	const char *dev_id = dev_name(consumer);
+ 	struct gpiod_lookup_table *lookup;
+@@ -463,7 +463,7 @@ int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_id,
+ 			if (!ref->fwnode && strstarts(dev_name(consumer), "reset.gpio.")) {
+ 				if (!gpio_shared_dev_is_reset_gpio(consumer, entry, ref))
+ 					continue;
+-			} else if (!device_match_fwnode(consumer, ref->fwnode)) {
++			} else if (fwnode != ref->fwnode) {
+ 				continue;
+ 			}
+ 
+diff --git a/drivers/gpio/gpiolib-shared.h b/drivers/gpio/gpiolib-shared.h
+index e11e260e1f590..15e72a8dcdb13 100644
+--- a/drivers/gpio/gpiolib-shared.h
++++ b/drivers/gpio/gpiolib-shared.h
+@@ -11,13 +11,15 @@
+ struct gpio_device;
+ struct gpio_desc;
+ struct device;
++struct fwnode_handle;
+ 
+ #if IS_ENABLED(CONFIG_GPIO_SHARED)
+ 
+ int gpiochip_setup_shared(struct gpio_chip *gc);
+ void gpio_device_teardown_shared(struct gpio_device *gdev);
+-int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_id,
+-				 unsigned long lflags);
++int gpio_shared_add_proxy_lookup(struct device *consumer,
++				 struct fwnode_handle *fwnode,
++				 const char *con_id, unsigned long lflags);
+ 
+ #else
+ 
+@@ -29,6 +31,7 @@ static inline int gpiochip_setup_shared(struct gpio_chip *gc)
+ static inline void gpio_device_teardown_shared(struct gpio_device *gdev) { }
+ 
+ static inline int gpio_shared_add_proxy_lookup(struct device *consumer,
++					       struct fwnode_handle *fwnode,
+ 					       const char *con_id,
+ 					       unsigned long lflags)
+ {
+diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
+index 0285142893642..fc7c4bf2de2be 100644
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -4720,8 +4720,8 @@ struct gpio_desc *gpiod_find_and_request(struct device *consumer,
+ 			 * lookup table for the proxy device as previously
+ 			 * we only knew the consumer's fwnode.
+ 			 */
+-			ret = gpio_shared_add_proxy_lookup(consumer, con_id,
+-							   lookupflags);
++			ret = gpio_shared_add_proxy_lookup(consumer, fwnode,
++							   con_id, lookupflags);
+ 			if (ret)
+ 				return ERR_PTR(ret);
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/gpio-shared-shorten-the-critical-section-in-gpiochip.patch b/queue-6.19/gpio-shared-shorten-the-critical-section-in-gpiochip.patch
new file mode 100644
index 0000000..b36c8a2
--- /dev/null
+++ b/queue-6.19/gpio-shared-shorten-the-critical-section-in-gpiochip.patch
@@ -0,0 +1,110 @@
+From 00331637c0b34f84724e076366231b827a3e83b1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 25 Mar 2026 12:06:38 +0100
+Subject: gpio: shared: shorten the critical section in gpiochip_setup_shared()
+
+From: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+
+[ Upstream commit 310a4a9cbb17037668ea440f6a3964d00705b400 ]
+
+Commit 710abda58055 ("gpio: shared: call gpio_chip::of_xlate() if set")
+introduced a critical section around the adjustmenet of entry->offset.
+However this may cause a deadlock if we create the auxiliary shared
+proxy devices with this lock taken. We only need to protect
+entry->offset while it's read/written so shorten the critical section
+and release the lock before creating the proxy device as the field in
+question is no longer accessed at this point.
+
+Fixes: 710abda58055 ("gpio: shared: call gpio_chip::of_xlate() if set")
+Reported-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
+Link: https://patch.msgid.link/20260325-gpio-shared-deadlock-v1-1-e4e7a5319e95@oss.qualcomm.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpiolib-shared.c | 56 +++++++++++++++++------------------
+ 1 file changed, 28 insertions(+), 28 deletions(-)
+
+diff --git a/drivers/gpio/gpiolib-shared.c b/drivers/gpio/gpiolib-shared.c
+index 9c31736d29b77..692f568ffe7a4 100644
+--- a/drivers/gpio/gpiolib-shared.c
++++ b/drivers/gpio/gpiolib-shared.c
+@@ -538,48 +538,48 @@ int gpiochip_setup_shared(struct gpio_chip *gc)
+ 	 * exposing shared pins. Find them and create the proxy devices.
+ 	 */
+ 	list_for_each_entry(entry, &gpio_shared_list, list) {
+-		guard(mutex)(&entry->lock);
+-
+ 		if (!device_match_fwnode(&gdev->dev, entry->fwnode))
+ 			continue;
+ 
+ 		if (list_count_nodes(&entry->refs) <= 1)
+ 			continue;
+ 
++		scoped_guard(mutex, &entry->lock) {
+ #if IS_ENABLED(CONFIG_OF)
+-		if (is_of_node(entry->fwnode) && gc->of_xlate) {
+-			/*
+-			 * This is the earliest that we can tranlate the
+-			 * devicetree offset to the chip offset.
+-			 */
+-			struct of_phandle_args gpiospec = { };
++			if (is_of_node(entry->fwnode) && gc->of_xlate) {
++				/*
++				 * This is the earliest that we can tranlate the
++				 * devicetree offset to the chip offset.
++				 */
++				struct of_phandle_args gpiospec = { };
+ 
+-			gpiospec.np = to_of_node(entry->fwnode);
+-			gpiospec.args_count = 2;
+-			gpiospec.args[0] = entry->offset;
++				gpiospec.np = to_of_node(entry->fwnode);
++				gpiospec.args_count = 2;
++				gpiospec.args[0] = entry->offset;
+ 
+-			ret = gc->of_xlate(gc, &gpiospec, NULL);
+-			if (ret < 0)
+-				return ret;
++				ret = gc->of_xlate(gc, &gpiospec, NULL);
++				if (ret < 0)
++					return ret;
+ 
+-			entry->offset = ret;
+-		}
++				entry->offset = ret;
++			}
+ #endif /* CONFIG_OF */
+ 
+-		desc = &gdev->descs[entry->offset];
++			desc = &gdev->descs[entry->offset];
+ 
+-		__set_bit(GPIOD_FLAG_SHARED, &desc->flags);
+-		/*
+-		 * Shared GPIOs are not requested via the normal path. Make
+-		 * them inaccessible to anyone even before we register the
+-		 * chip.
+-		 */
+-		ret = gpiod_request_commit(desc, "shared");
+-		if (ret)
+-			return ret;
++			__set_bit(GPIOD_FLAG_SHARED, &desc->flags);
++			/*
++			 * Shared GPIOs are not requested via the normal path. Make
++			 * them inaccessible to anyone even before we register the
++			 * chip.
++			 */
++			ret = gpiod_request_commit(desc, "shared");
++			if (ret)
++				return ret;
+ 
+-		pr_debug("GPIO %u owned by %s is shared by multiple consumers\n",
+-			 entry->offset, gpio_device_get_label(gdev));
++			pr_debug("GPIO %u owned by %s is shared by multiple consumers\n",
++				 entry->offset, gpio_device_get_label(gdev));
++		}
+ 
+ 		list_for_each_entry(ref, &entry->refs, list) {
+ 			pr_debug("Setting up a shared GPIO entry for %s (con_id: '%s')\n",
+-- 
+2.53.0
+
diff --git a/queue-6.19/gpiolib-clear-requested-flag-if-line-is-invalid.patch b/queue-6.19/gpiolib-clear-requested-flag-if-line-is-invalid.patch
new file mode 100644
index 0000000..c3a9c6c
--- /dev/null
+++ b/queue-6.19/gpiolib-clear-requested-flag-if-line-is-invalid.patch
@@ -0,0 +1,48 @@
+From 7d877eee571645ab0660b6163ad3b6e57a40a0b6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 10 Mar 2026 20:44:03 +0000
+Subject: gpiolib: clear requested flag if line is invalid
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Barnabás PÅ‘cze <pobrn@protonmail.com>
+
+[ Upstream commit 6df6ea4b3d1567dbe6442f308735c23b63007c7f ]
+
+If `gpiochip_line_is_valid()` fails, then `-EINVAL` is returned, but
+`desc->flags` will have `GPIOD_FLAG_REQUESTED` set, which will result
+in subsequent calls misleadingly returning `-EBUSY`.
+
+Fix that by clearing the flag in case of failure.
+
+Fixes: a501624864f3 ("gpio: Respect valid_mask when requesting GPIOs")
+Signed-off-by: Barnabás PÅ‘cze <pobrn@protonmail.com>
+Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
+Link: https://patch.msgid.link/20260310204359.1202451-1-pobrn@protonmail.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpiolib.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
+index 2e33afbbfda48..04068f4eb3422 100644
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -2466,8 +2466,10 @@ int gpiod_request_commit(struct gpio_desc *desc, const char *label)
+ 		return -EBUSY;
+ 
+ 	offset = gpiod_hwgpio(desc);
+-	if (!gpiochip_line_is_valid(guard.gc, offset))
+-		return -EINVAL;
++	if (!gpiochip_line_is_valid(guard.gc, offset)) {
++		ret = -EINVAL;
++		goto out_clear_bit;
++	}
+ 
+ 	/* NOTE:  gpio_request() can be called in early boot,
+ 	 * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
+-- 
+2.53.0
+
diff --git a/queue-6.19/hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch b/queue-6.19/hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch
new file mode 100644
index 0000000..8e89433
--- /dev/null
+++ b/queue-6.19/hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch
@@ -0,0 +1,76 @@
+From 590d5bd41a2b19a3ca387204a6fd42b7bc3bd67a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 31 Mar 2026 14:49:06 -0700
+Subject: hwmon: (asus-ec-sensors) Fix T_Sensor for PRIME X670E-PRO WIFI
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Corey Hickey <bugfood-c@fatooh.org>
+
+[ Upstream commit cffff6df669a438ecac506dadd49a53d4475a796 ]
+
+On the Asus PRIME X670E-PRO WIFI, the driver reports a constant value of
+zero for T_Sensor. On this board, the register for T_Sensor is at a
+different address, as found by experimentation and confirmed by
+comparison to an independent temperature reading.
+
+* sensor disconnected: -62.0°C
+* ambient temperature: +22.0°C
+* held between fingers: +30.0°C
+
+Introduce SENSOR_TEMP_T_SENSOR_ALT1 to support the PRIME X670E-PRO WIFI
+without causing a regression for other 600-series boards
+
+Fixes: e0444758dd1b ("hwmon: (asus-ec-sensors) add PRIME X670E-PRO WIFI")
+Signed-off-by: Corey Hickey <bugfood-c@fatooh.org>
+Link: https://lore.kernel.org/r/20260331215414.368785-1-bugfood-ml@fatooh.org
+[groeck: Fixed typo, updated Fixes: reference]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/asus-ec-sensors.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/asus-ec-sensors.c b/drivers/hwmon/asus-ec-sensors.c
+index a1445799e23d8..b685d9954df43 100644
+--- a/drivers/hwmon/asus-ec-sensors.c
++++ b/drivers/hwmon/asus-ec-sensors.c
+@@ -111,6 +111,8 @@ enum ec_sensors {
+ 	ec_sensor_temp_mb,
+ 	/* "T_Sensor" temperature sensor reading [℃] */
+ 	ec_sensor_temp_t_sensor,
++	/* like ec_sensor_temp_t_sensor, but at an alternate address [℃] */
++	ec_sensor_temp_t_sensor_alt1,
+ 	/* VRM temperature [℃] */
+ 	ec_sensor_temp_vrm,
+ 	/* VRM east (right) temperature [℃] */
+@@ -160,6 +162,7 @@ enum ec_sensors {
+ #define SENSOR_TEMP_CPU_PACKAGE BIT(ec_sensor_temp_cpu_package)
+ #define SENSOR_TEMP_MB BIT(ec_sensor_temp_mb)
+ #define SENSOR_TEMP_T_SENSOR BIT(ec_sensor_temp_t_sensor)
++#define SENSOR_TEMP_T_SENSOR_ALT1 BIT(ec_sensor_temp_t_sensor_alt1)
+ #define SENSOR_TEMP_VRM BIT(ec_sensor_temp_vrm)
+ #define SENSOR_TEMP_VRME BIT(ec_sensor_temp_vrme)
+ #define SENSOR_TEMP_VRMW BIT(ec_sensor_temp_vrmw)
+@@ -279,6 +282,8 @@ static const struct ec_sensor_info sensors_family_amd_600[] = {
+ 		EC_SENSOR("VRM", hwmon_temp, 1, 0x00, 0x33),
+ 	[ec_sensor_temp_t_sensor] =
+ 		EC_SENSOR("T_Sensor", hwmon_temp, 1, 0x00, 0x36),
++	[ec_sensor_temp_t_sensor_alt1] =
++		EC_SENSOR("T_Sensor", hwmon_temp, 1, 0x00, 0x37),
+ 	[ec_sensor_fan_cpu_opt] =
+ 		EC_SENSOR("CPU_Opt", hwmon_fan, 2, 0x00, 0xb0),
+ 	[ec_sensor_temp_water_in] =
+@@ -509,7 +514,7 @@ static const struct ec_board_info board_info_prime_x570_pro = {
+ static const struct ec_board_info board_info_prime_x670e_pro_wifi = {
+ 	.sensors = SENSOR_TEMP_CPU | SENSOR_TEMP_CPU_PACKAGE |
+ 		SENSOR_TEMP_MB | SENSOR_TEMP_VRM |
+-		SENSOR_TEMP_T_SENSOR | SENSOR_FAN_CPU_OPT,
++		SENSOR_TEMP_T_SENSOR_ALT1 | SENSOR_FAN_CPU_OPT,
+ 	.mutex_path = ACPI_GLOBAL_LOCK_PSEUDO_PATH,
+ 	.family = family_amd_600_series,
+ };
+-- 
+2.53.0
+
diff --git a/queue-6.19/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch b/queue-6.19/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
new file mode 100644
index 0000000..ff0ba46
--- /dev/null
+++ b/queue-6.19/hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
@@ -0,0 +1,35 @@
+From c33192b96de63b4f98ae1d5436a3ba78938ccf3c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:53 +0000
+Subject: hwmon: (ltc4286) Add missing MODULE_IMPORT_NS("PMBUS")
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit a9d2fbd3ad0e6ac588386e699beeccfe7516755f ]
+
+ltc4286.c uses PMBus core symbols exported in the PMBUS namespace,
+such as pmbus_do_probe(), but does not declare MODULE_IMPORT_NS("PMBUS").
+
+Add the missing namespace import to avoid modpost warnings.
+
+Fixes: 0c459759ca97 ("hwmon: (pmbus) Add ltc4286 driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-5-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/ltc4286.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/hwmon/pmbus/ltc4286.c b/drivers/hwmon/pmbus/ltc4286.c
+index aabd0bcdfeee3..8715d380784a0 100644
+--- a/drivers/hwmon/pmbus/ltc4286.c
++++ b/drivers/hwmon/pmbus/ltc4286.c
+@@ -173,3 +173,4 @@ module_i2c_driver(ltc4286_driver);
+ MODULE_AUTHOR("Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>");
+ MODULE_DESCRIPTION("PMBUS driver for LTC4286 and compatibles");
+ MODULE_LICENSE("GPL");
++MODULE_IMPORT_NS("PMBUS");
+-- 
+2.53.0
+
diff --git a/queue-6.19/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch b/queue-6.19/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
new file mode 100644
index 0000000..ee3e515
--- /dev/null
+++ b/queue-6.19/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
@@ -0,0 +1,42 @@
+From 2d665645e09bc8540e060fcaffd970fee695ef01 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 22:45:29 +0000
+Subject: hwmon: (occ) Fix missing newline in occ_show_extended()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 09773978879ecf71a7990fe9a28ce4eb92bce645 ]
+
+In occ_show_extended() case 0, when the EXTN_FLAG_SENSOR_ID flag
+is set, the sysfs_emit format string "%u" is missing the trailing
+newline that the sysfs ABI expects. The else branch correctly uses
+"%4phN\n", and all other show functions in this file include the
+trailing newline.
+
+Add the missing "\n" for consistency and correct sysfs output.
+
+Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260326224510.294619-3-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/occ/common.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
+index 89928d38831b6..86c79156a46b9 100644
+--- a/drivers/hwmon/occ/common.c
++++ b/drivers/hwmon/occ/common.c
+@@ -725,7 +725,7 @@ static ssize_t occ_show_extended(struct device *dev,
+ 	switch (sattr->nr) {
+ 	case 0:
+ 		if (extn->flags & EXTN_FLAG_SENSOR_ID) {
+-			rc = sysfs_emit(buf, "%u",
++			rc = sysfs_emit(buf, "%u\n",
+ 					get_unaligned_be32(&extn->sensor_id));
+ 		} else {
+ 			rc = sysfs_emit(buf, "%4phN\n", extn->name);
+-- 
+2.53.0
+
diff --git a/queue-6.19/hwmon-pxe1610-check-return-value-of-page-select-writ.patch b/queue-6.19/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
new file mode 100644
index 0000000..489842e
--- /dev/null
+++ b/queue-6.19/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
@@ -0,0 +1,45 @@
+From cf5f58f1dd14b783eb039318a581d41ed590b0f4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:48 +0000
+Subject: hwmon: (pxe1610) Check return value of page-select write in probe
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ccf70c41e562b29d1c05d1bbf53391785e09c6fb ]
+
+pxe1610_probe() writes PMBUS_PAGE to select page 0 but does not check
+the return value. If the write fails, subsequent register reads operate
+on an indeterminate page, leading to silent misconfiguration.
+
+Check the return value and propagate the error using dev_err_probe(),
+which also handles -EPROBE_DEFER correctly without log spam.
+
+Fixes: 344757bac526 ("hwmon: (pmbus) Add Infineon PXE1610 VR driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-4-sanman.pradhan@hpe.com
+[groeck: Fix "Fixes" SHA]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/pxe1610.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c
+index 6a4a978eca7e8..24c1f961c7668 100644
+--- a/drivers/hwmon/pmbus/pxe1610.c
++++ b/drivers/hwmon/pmbus/pxe1610.c
+@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)
+ 	 * By default this device doesn't boot to page 0, so set page 0
+ 	 * to access all pmbus registers.
+ 	 */
+-	i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	ret = i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	if (ret < 0)
++		return dev_err_probe(&client->dev, ret,
++				     "Failed to set page 0\n");
+ 
+ 	/* Read Manufacturer id */
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf);
+-- 
+2.53.0
+
diff --git a/queue-6.19/hwmon-tps53679-fix-array-access-with-zero-length-blo.patch b/queue-6.19/hwmon-tps53679-fix-array-access-with-zero-length-blo.patch
new file mode 100644
index 0000000..221e454
--- /dev/null
+++ b/queue-6.19/hwmon-tps53679-fix-array-access-with-zero-length-blo.patch
@@ -0,0 +1,50 @@
+From 2b3aecff763491e1368efbdff15f30f0e8f755f7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:40 +0000
+Subject: hwmon: (tps53679) Fix array access with zero-length block read
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 0e211f6aaa6a00fd0ee0c1eea5498f168c6725e6 ]
+
+i2c_smbus_read_block_data() can return 0, indicating a zero-length
+read. When this happens, tps53679_identify_chip() accesses buf[ret - 1]
+which is buf[-1], reading one byte before the buffer on the stack.
+
+Fix by changing the check from "ret < 0" to "ret <= 0", treating a
+zero-length read as an error (-EIO), which prevents the out-of-bounds
+array access.
+
+Also fix a typo in the adjacent comment: "if present" instead of
+duplicate "if".
+
+Fixes: 75ca1e5875fe ("hwmon: (pmbus/tps53679) Add support for TPS53685")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-2-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index ca2bfa25eb04c..3bca543817a60 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -103,10 +103,10 @@ static int tps53679_identify_chip(struct i2c_client *client,
+ 	}
+ 
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+-	if (ret < 0)
+-		return ret;
++	if (ret <= 0)
++		return ret < 0 ? ret : -EIO;
+ 
+-	/* Adjust length if null terminator if present */
++	/* Adjust length if null terminator is present */
+ 	buf_len = (buf[ret - 1] != '\x00' ? ret : ret - 1);
+ 
+ 	id_len = strlen(id);
+-- 
+2.53.0
+
diff --git a/queue-6.19/hwmon-tps53679-fix-device-id-comparison-and-printing.patch b/queue-6.19/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
new file mode 100644
index 0000000..ab012af
--- /dev/null
+++ b/queue-6.19/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
@@ -0,0 +1,51 @@
+From 0f9159a358380a2e18f5d4e08a9daff2582f05f3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 15:56:40 +0000
+Subject: hwmon: (tps53679) Fix device ID comparison and printing in
+ tps53676_identify()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ca34ee6d0307a0b4e52c870dfc1bb8a3c3eb956e ]
+
+tps53676_identify() uses strncmp() to compare the device ID buffer
+against a byte sequence containing embedded non-printable bytes
+(\x53\x67\x60). strncmp() is semantically wrong for binary data
+comparison; use memcmp() instead.
+
+Additionally, the buffer from i2c_smbus_read_block_data() is not
+NUL-terminated, so printing it with "%s" in the error path is
+undefined behavior and may read past the buffer. Use "%*ph" to
+hex-dump the actual bytes returned.
+
+Per the datasheet, the expected device ID is the 6-byte sequence
+54 49 53 67 60 00 ("TI\x53\x67\x60\x00"), so compare all 6 bytes
+including the trailing NUL.
+
+Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260330155618.77403-1-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index 3bca543817a60..249974c13aa39 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -175,8 +175,8 @@ static int tps53676_identify(struct i2c_client *client,
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+ 	if (ret < 0)
+ 		return ret;
+-	if (strncmp("TI\x53\x67\x60", buf, 5)) {
+-		dev_err(&client->dev, "Unexpected device ID: %s\n", buf);
++	if (ret != 6 || memcmp(buf, "TI\x53\x67\x60\x00", 6)) {
++		dev_err(&client->dev, "Unexpected device ID: %*ph\n", ret, buf);
+ 		return -ENODEV;
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch b/queue-6.19/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
new file mode 100644
index 0000000..60c20be
--- /dev/null
+++ b/queue-6.19/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
@@ -0,0 +1,43 @@
+From 4aa4e645b99bf86dc8e70fe46ed2156954cc8bfc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 Feb 2026 16:33:54 -0600
+Subject: iio: imu: bno055: fix BNO055_SCAN_CH_COUNT off by one
+
+From: David Lechner <dlechner@baylibre.com>
+
+[ Upstream commit 773ef9f95385bae52dcb7fd129fefba3a71a04db ]
+
+Fix an off-by-one error in the BNO055_SCAN_CH_COUNT macro. The count
+is derived by taking the difference of the last and first register
+addresses, dividing by the size of each channel (2 bytes). It needs to
+also add 1 to account for the fact that the count is inclusive of both
+the first and last channels.
+
+Thanks to the aligned_s64 timestamp field, there was already extra
+padding in the buffer, so there were no runtime issues caused by this
+bug.
+
+Fixes: 4aefe1c2bd0c ("iio: imu: add Bosch Sensortec BNO055 core driver")
+Signed-off-by: David Lechner <dlechner@baylibre.com>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/imu/bno055/bno055.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/iio/imu/bno055/bno055.c b/drivers/iio/imu/bno055/bno055.c
+index 303bc308f80a8..c96fec2ebb3e7 100644
+--- a/drivers/iio/imu/bno055/bno055.c
++++ b/drivers/iio/imu/bno055/bno055.c
+@@ -64,7 +64,7 @@
+ #define BNO055_GRAVITY_DATA_X_LSB_REG	0x2E
+ #define BNO055_GRAVITY_DATA_Y_LSB_REG	0x30
+ #define BNO055_GRAVITY_DATA_Z_LSB_REG	0x32
+-#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2)
++#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2 + 1)
+ #define BNO055_TEMP_REG			0x34
+ #define BNO055_CALIB_STAT_REG		0x35
+ #define BNO055_CALIB_STAT_MAGN_SHIFT 0
+-- 
+2.53.0
+
diff --git a/queue-6.19/interconnect-qcom-sm8450-fix-null-pointer-dereferenc.patch b/queue-6.19/interconnect-qcom-sm8450-fix-null-pointer-dereferenc.patch
new file mode 100644
index 0000000..5b798be
--- /dev/null
+++ b/queue-6.19/interconnect-qcom-sm8450-fix-null-pointer-dereferenc.patch
@@ -0,0 +1,72 @@
+From e9a63377a00c083dc9ce5a0e50c7d3c5269c4cb0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 Mar 2026 03:29:33 +0200
+Subject: interconnect: qcom: sm8450: Fix NULL pointer dereference in
+ icc_link_nodes()
+
+From: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
+
+[ Upstream commit dbbd550d7c8d90d3af9fe8a12a9caff077ddb8e3 ]
+
+The change to dynamic IDs for SM8450 platform interconnects left two links
+unconverted, fix it to avoid the NULL pointer dereference in runtime,
+when a pointer to a destination interconnect is not valid:
+
+    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
+    <...>
+    Call trace:
+      icc_link_nodes+0x3c/0x100 (P)
+      qcom_icc_rpmh_probe+0x1b4/0x528
+      platform_probe+0x64/0xc0
+      really_probe+0xc4/0x2a8
+      __driver_probe_device+0x80/0x140
+      driver_probe_device+0x48/0x170
+      __device_attach_driver+0xc0/0x148
+      bus_for_each_drv+0x88/0xf0
+      __device_attach+0xb0/0x1c0
+      device_initial_probe+0x58/0x68
+      bus_probe_device+0x40/0xb8
+      deferred_probe_work_func+0x90/0xd0
+      process_one_work+0x15c/0x3c0
+      worker_thread+0x2e8/0x400
+      kthread+0x150/0x208
+      ret_from_fork+0x10/0x20
+     Code: 900310f4 911d6294 91008280 94176078 (f94002a0)
+     ---[ end trace 0000000000000000 ]---
+     Kernel panic - not syncing: Oops: Fatal exception
+
+Fixes: 51513bec806f ("interconnect: qcom: sm8450: convert to dynamic IDs")
+Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
+Link: https://msgid.link/20260314012933.350644-1-vladimir.zapolskiy@linaro.org
+Signed-off-by: Georgi Djakov <djakov@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/interconnect/qcom/sm8450.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/interconnect/qcom/sm8450.c b/drivers/interconnect/qcom/sm8450.c
+index 669a638bf3efc..c88327d200acc 100644
+--- a/drivers/interconnect/qcom/sm8450.c
++++ b/drivers/interconnect/qcom/sm8450.c
+@@ -800,7 +800,7 @@ static struct qcom_icc_node qhs_compute_cfg = {
+ 	.channels = 1,
+ 	.buswidth = 4,
+ 	.num_links = 1,
+-	.link_nodes = { MASTER_CDSP_NOC_CFG },
++	.link_nodes = { &qhm_nsp_noc_config },
+ };
+ 
+ static struct qcom_icc_node qhs_cpr_cx = {
+@@ -874,7 +874,7 @@ static struct qcom_icc_node qhs_lpass_cfg = {
+ 	.channels = 1,
+ 	.buswidth = 4,
+ 	.num_links = 1,
+-	.link_nodes = { MASTER_CNOC_LPASS_AG_NOC },
++	.link_nodes = { &qhm_config_noc },
+ };
+ 
+ static struct qcom_icc_node qhs_mss_cfg = {
+-- 
+2.53.0
+
diff --git a/queue-6.19/io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch b/queue-6.19/io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch
new file mode 100644
index 0000000..847b234
--- /dev/null
+++ b/queue-6.19/io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch
@@ -0,0 +1,60 @@
+From 649515ee6e2727b027afdc1d98dd2d819365280d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 00:49:36 +0800
+Subject: io_uring/rsrc: reject zero-length fixed buffer import
+
+From: Qi Tang <tpluszz77@gmail.com>
+
+[ Upstream commit 111a12b422a8cfa93deabaef26fec48237163214 ]
+
+validate_fixed_range() admits buf_addr at the exact end of the
+registered region when len is zero, because the check uses strict
+greater-than (buf_end > imu->ubuf + imu->len).  io_import_fixed()
+then computes offset == imu->len, which causes the bvec skip logic
+to advance past the last bio_vec entry and read bv_offset from
+out-of-bounds slab memory.
+
+Return early from io_import_fixed() when len is zero.  A zero-length
+import has no data to transfer and should not walk the bvec array
+at all.
+
+  BUG: KASAN: slab-out-of-bounds in io_import_reg_buf+0x697/0x7f0
+  Read of size 4 at addr ffff888002bcc254 by task poc/103
+  Call Trace:
+   io_import_reg_buf+0x697/0x7f0
+   io_write_fixed+0xd9/0x250
+   __io_issue_sqe+0xad/0x710
+   io_issue_sqe+0x7d/0x1100
+   io_submit_sqes+0x86a/0x23c0
+   __do_sys_io_uring_enter+0xa98/0x1590
+  Allocated by task 103:
+  The buggy address is located 12 bytes to the right of
+   allocated 584-byte region [ffff888002bcc000, ffff888002bcc248)
+
+Fixes: 8622b20f23ed ("io_uring: add validate_fixed_range() for validate fixed buffer")
+Signed-off-by: Qi Tang <tpluszz77@gmail.com>
+Link: https://patch.msgid.link/20260329164936.240871-1-tpluszz77@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ io_uring/rsrc.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
+index 41c89f5c616da..81446f9649ae9 100644
+--- a/io_uring/rsrc.c
++++ b/io_uring/rsrc.c
+@@ -1084,6 +1084,10 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
+ 		return ret;
+ 	if (!(imu->dir & (1 << ddir)))
+ 		return -EFAULT;
++	if (unlikely(!len)) {
++		iov_iter_bvec(iter, ddir, NULL, 0, 0);
++		return 0;
++	}
+ 
+ 	offset = buf_addr - imu->ubuf;
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/irqchip-riscv-aplic-restrict-genpd-notifier-to-devic.patch b/queue-6.19/irqchip-riscv-aplic-restrict-genpd-notifier-to-devic.patch
new file mode 100644
index 0000000..be3dbf9
--- /dev/null
+++ b/queue-6.19/irqchip-riscv-aplic-restrict-genpd-notifier-to-devic.patch
@@ -0,0 +1,61 @@
+From ecc42e7a617c37b42d674a32d19417caef93a0e7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 31 Mar 2026 09:30:29 +0800
+Subject: irqchip/riscv-aplic: Restrict genpd notifier to device tree only
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Jessica Liu <liu.xuemei1@zte.com.cn>
+
+[ Upstream commit af416cd9b3fb9d17ac7f4cfa12d1ea83dfd0e4be ]
+
+On ACPI systems, the aplic's pm_domain is set to acpi_general_pm_domain,
+which provides its own power management callbacks (e.g., runtime_suspend
+via acpi_subsys_runtime_suspend).
+
+aplic_pm_add() unconditionally calls dev_pm_genpd_add_notifier() when
+dev->pm_domain is non‑NULL, leading to a comparison between runtime_suspend
+and genpd_runtime_suspend. This results in the following errors when ACPI
+is enabled:
+
+  riscv-aplic RSCV0002:00: failed to create APLIC context
+  riscv-aplic RSCV0002:00: error -ENODEV: failed to setup APLIC in MSI mode
+
+Fix this by checking for dev->of_node before adding or removing the genpd
+notifier, ensuring it is only used for device tree based systems.
+
+Fixes: 95a8ddde3660 ("irqchip/riscv-aplic: Preserve APLIC states across suspend/resume")
+Signed-off-by: Jessica Liu <liu.xuemei1@zte.com.cn>
+Signed-off-by: Thomas Gleixner <tglx@kernel.org>
+Link: https://patch.msgid.link/20260331093029749vRpdH-0qoEqjS0Wnn9M4x@zte.com.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/irqchip/irq-riscv-aplic-main.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/irqchip/irq-riscv-aplic-main.c b/drivers/irqchip/irq-riscv-aplic-main.c
+index 9f53979b69625..d9afb6ae98cf5 100644
+--- a/drivers/irqchip/irq-riscv-aplic-main.c
++++ b/drivers/irqchip/irq-riscv-aplic-main.c
+@@ -150,7 +150,7 @@ static void aplic_pm_remove(void *data)
+ 	struct device *dev = priv->dev;
+ 
+ 	list_del(&priv->head);
+-	if (dev->pm_domain)
++	if (dev->pm_domain && dev->of_node)
+ 		dev_pm_genpd_remove_notifier(dev);
+ }
+ 
+@@ -165,7 +165,7 @@ static int aplic_pm_add(struct device *dev, struct aplic_priv *priv)
+ 
+ 	priv->saved_hw_regs.srcs = srcs;
+ 	list_add(&priv->head, &aplics);
+-	if (dev->pm_domain) {
++	if (dev->pm_domain && dev->of_node) {
+ 		priv->genpd_nb.notifier_call = aplic_pm_notifier;
+ 		ret = dev_pm_genpd_add_notifier(dev, &priv->genpd_nb);
+ 		if (ret)
+-- 
+2.53.0
+
diff --git a/queue-6.19/mips-ralink-update-cpu-clock-index.patch b/queue-6.19/mips-ralink-update-cpu-clock-index.patch
new file mode 100644
index 0000000..7960406
--- /dev/null
+++ b/queue-6.19/mips-ralink-update-cpu-clock-index.patch
@@ -0,0 +1,49 @@
+From c880f59374bf6ac78acc1ccf49a28dfac7bd404d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Feb 2026 10:22:50 +0800
+Subject: mips: ralink: update CPU clock index
+
+From: Shiji Yang <yangshiji66@outlook.com>
+
+[ Upstream commit 43985a62bab9d35e5e9af41118ce2f44c01b97d2 ]
+
+Update CPU clock index to match the clock driver changes.
+
+Fixes: d34db686a3d7 ("clk: ralink: mtmips: fix clocks probe order in oldest ralink SoCs")
+Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
+Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
+Reviewed-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
+Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/mips/ralink/clk.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/mips/ralink/clk.c b/arch/mips/ralink/clk.c
+index 9db73fcac522e..5c1eb46ef5d07 100644
+--- a/arch/mips/ralink/clk.c
++++ b/arch/mips/ralink/clk.c
+@@ -21,16 +21,16 @@ static const char *clk_cpu(int *idx)
+ {
+ 	switch (ralink_soc) {
+ 	case RT2880_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt2880-sysc";
+ 	case RT3883_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3883-sysc";
+ 	case RT305X_SOC_RT3050:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3050-sysc";
+ 	case RT305X_SOC_RT3052:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3052-sysc";
+ 	case RT305X_SOC_RT3350:
+ 		*idx = 1;
+-- 
+2.53.0
+
diff --git a/queue-6.19/perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch b/queue-6.19/perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch
new file mode 100644
index 0000000..06021a4
--- /dev/null
+++ b/queue-6.19/perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch
@@ -0,0 +1,46 @@
+From 5b6bfac703f41c991d0e600814a7cb7b1e7db88b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 Mar 2026 12:43:05 -0700
+Subject: perf/x86: Fix potential bad container_of in intel_pmu_hw_config
+
+From: Ian Rogers <irogers@google.com>
+
+[ Upstream commit dbde07f06226438cd2cf1179745fa1bec5d8914a ]
+
+Auto counter reload may have a group of events with software events
+present within it. The software event PMU isn't the x86_hybrid_pmu and
+a container_of operation in intel_pmu_set_acr_caused_constr (via the
+hybrid helper) could cause out of bound memory reads. Avoid this by
+guarding the call to intel_pmu_set_acr_caused_constr with an
+is_x86_event check.
+
+Fixes: ec980e4facef ("perf/x86/intel: Support auto counter reload")
+Signed-off-by: Ian Rogers <irogers@google.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Thomas Falcon <thomas.falcon@intel.com>
+Link: https://patch.msgid.link/20260312194305.1834035-1-irogers@google.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/events/intel/core.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
+index 20f078ceb51da..bebaac1dbaeb3 100644
+--- a/arch/x86/events/intel/core.c
++++ b/arch/x86/events/intel/core.c
+@@ -4594,8 +4594,10 @@ static int intel_pmu_hw_config(struct perf_event *event)
+ 		intel_pmu_set_acr_caused_constr(leader, idx++, cause_mask);
+ 
+ 		if (leader->nr_siblings) {
+-			for_each_sibling_event(sibling, leader)
+-				intel_pmu_set_acr_caused_constr(sibling, idx++, cause_mask);
++			for_each_sibling_event(sibling, leader) {
++				if (is_x86_event(sibling))
++					intel_pmu_set_acr_caused_constr(sibling, idx++, cause_mask);
++			}
+ 		}
+ 
+ 		if (leader != event)
+-- 
+2.53.0
+
diff --git a/queue-6.19/riscv-kgdb-fix-several-debug-register-assignment-bug.patch b/queue-6.19/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
new file mode 100644
index 0000000..7f83394
--- /dev/null
+++ b/queue-6.19/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
@@ -0,0 +1,58 @@
+From 70e8ae24d49533fc9c2f37a95323beefc1b1cc03 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 17:43:47 -0600
+Subject: riscv: kgdb: fix several debug register assignment bugs
+
+From: Paul Walmsley <pjw@kernel.org>
+
+[ Upstream commit 834911eb8eef2501485d819b4eabebadc25c3497 ]
+
+Fix several bugs in the RISC-V kgdb implementation:
+
+- The element of dbg_reg_def[] that is supposed to pertain to the S1
+  register embeds instead the struct pt_regs offset of the A1
+  register.  Fix this to use the S1 register offset in struct pt_regs.
+
+- The sleeping_thread_to_gdb_regs() function copies the value of the
+  S10 register into the gdb_regs[] array element meant for the S9
+  register, and copies the value of the S11 register into the array
+  element meant for the S10 register.  It also neglects to copy the
+  value of the S11 register.  Fix all of these issues.
+
+Fixes: fe89bd2be8667 ("riscv: Add KGDB support")
+Cc: Vincent Chen <vincent.chen@sifive.com>
+Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/kgdb.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/riscv/kernel/kgdb.c b/arch/riscv/kernel/kgdb.c
+index 15fec5d1e6dec..0bf629204c76a 100644
+--- a/arch/riscv/kernel/kgdb.c
++++ b/arch/riscv/kernel/kgdb.c
+@@ -175,7 +175,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
+ 	{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
+ 	{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
+ 	{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
+-	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
++	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
+ 	{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
+ 	{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
+ 	{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
+@@ -244,8 +244,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
+ 	gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
+ 	gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
+ 	gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
+-	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
+-	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
++	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
++	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
++	gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
+ 	gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch b/queue-6.19/riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch
new file mode 100644
index 0000000..d053fed
--- /dev/null
+++ b/queue-6.19/riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch
@@ -0,0 +1,44 @@
+From 7d44c0151156d9b65442dde2c893f09d294f035d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 00:00:22 +0800
+Subject: riscv: Reset pmm when PR_TAGGED_ADDR_ENABLE is not set
+
+From: Zishun Yi <vulab@iscas.ac.cn>
+
+[ Upstream commit 3033b2b1e3949274f33a140e2a97571b5a307298 ]
+
+In set_tagged_addr_ctrl(), when PR_TAGGED_ADDR_ENABLE is not set, pmlen
+is correctly set to 0, but it forgets to reset pmm. This results in the
+CPU pmm state not corresponding to the software pmlen state.
+
+Fix this by resetting pmm along with pmlen.
+
+Fixes: 2e1743085887 ("riscv: Add support for the tagged address ABI")
+Signed-off-by: Zishun Yi <vulab@iscas.ac.cn>
+Reviewed-by: Samuel Holland <samuel.holland@sifive.com>
+Link: https://patch.msgid.link/20260322160022.21908-1-vulab@iscas.ac.cn
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/process.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
+index 31a392993cb45..b5188dc74727d 100644
+--- a/arch/riscv/kernel/process.c
++++ b/arch/riscv/kernel/process.c
+@@ -324,8 +324,10 @@ long set_tagged_addr_ctrl(struct task_struct *task, unsigned long arg)
+ 	if (arg & PR_TAGGED_ADDR_ENABLE && (tagged_addr_disabled || !pmlen))
+ 		return -EINVAL;
+ 
+-	if (!(arg & PR_TAGGED_ADDR_ENABLE))
++	if (!(arg & PR_TAGGED_ADDR_ENABLE)) {
+ 		pmlen = PMLEN_0;
++		pmm = ENVCFG_PMM_PMLEN_0;
++	}
+ 
+ 	if (mmap_write_lock_killable(mm))
+ 		return -EINTR;
+-- 
+2.53.0
+
diff --git a/queue-6.19/sched-debug-fix-avg_vruntime-usage.patch b/queue-6.19/sched-debug-fix-avg_vruntime-usage.patch
new file mode 100644
index 0000000..fba7f4b
--- /dev/null
+++ b/queue-6.19/sched-debug-fix-avg_vruntime-usage.patch
@@ -0,0 +1,63 @@
+From 4afc6d3204066f838704619459d1cad2315b8480 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Apr 2026 15:20:21 +0200
+Subject: sched/debug: Fix avg_vruntime() usage
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+[ Upstream commit e08d007f9d813616ce7093600bc4fdb9c9d81d89 ]
+
+John reported that stress-ng-yield could make his machine unhappy and
+managed to bisect it to commit b3d99f43c72b ("sched/fair: Fix
+zero_vruntime tracking").
+
+The commit in question changes avg_vruntime() from a function that is
+a pure reader, to a function that updates variables. This turns an
+unlocked sched/debug usage of this function from a minor mistake into
+a data corruptor.
+
+Fixes: af4cf40470c2 ("sched/fair: Add cfs_rq::avg_vruntime")
+Fixes: b3d99f43c72b ("sched/fair: Fix zero_vruntime tracking")
+Reported-by: John Stultz <jstultz@google.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
+Tested-by: K Prateek Nayak <kprateek.nayak@amd.com>
+Tested-by: John Stultz <jstultz@google.com>
+Link: https://patch.msgid.link/20260401132355.196370805@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/debug.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
+index 93f009e1076d8..3504ec9bd7307 100644
+--- a/kernel/sched/debug.c
++++ b/kernel/sched/debug.c
+@@ -798,6 +798,7 @@ static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu)
+ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
+ {
+ 	s64 left_vruntime = -1, zero_vruntime, right_vruntime = -1, left_deadline = -1, spread;
++	u64 avruntime;
+ 	struct sched_entity *last, *first, *root;
+ 	struct rq *rq = cpu_rq(cpu);
+ 	unsigned long flags;
+@@ -821,6 +822,7 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
+ 	if (last)
+ 		right_vruntime = last->vruntime;
+ 	zero_vruntime = cfs_rq->zero_vruntime;
++	avruntime = avg_vruntime(cfs_rq);
+ 	raw_spin_rq_unlock_irqrestore(rq, flags);
+ 
+ 	SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "left_deadline",
+@@ -830,7 +832,7 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
+ 	SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "zero_vruntime",
+ 			SPLIT_NS(zero_vruntime));
+ 	SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "avg_vruntime",
+-			SPLIT_NS(avg_vruntime(cfs_rq)));
++			SPLIT_NS(avruntime));
+ 	SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "right_vruntime",
+ 			SPLIT_NS(right_vruntime));
+ 	spread = right_vruntime - left_vruntime;
+-- 
+2.53.0
+
diff --git a/queue-6.19/sched-fair-fix-zero_vruntime-tracking-fix.patch b/queue-6.19/sched-fair-fix-zero_vruntime-tracking-fix.patch
new file mode 100644
index 0000000..3633954
--- /dev/null
+++ b/queue-6.19/sched-fair-fix-zero_vruntime-tracking-fix.patch
@@ -0,0 +1,103 @@
+From 56840127a764d1b5d45b1abac2ff495612031b68 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Apr 2026 15:20:20 +0200
+Subject: sched/fair: Fix zero_vruntime tracking fix
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+[ Upstream commit 1319ea57529e131822bab56bf417c8edc2db9ae8 ]
+
+John reported that stress-ng-yield could make his machine unhappy and
+managed to bisect it to commit b3d99f43c72b ("sched/fair: Fix
+zero_vruntime tracking").
+
+The combination of yield and that commit was specific enough to
+hypothesize the following scenario:
+
+Suppose we have 2 runnable tasks, both doing yield. Then one will be
+eligible and one will not be, because the average position must be in
+between these two entities.
+
+Therefore, the runnable task will be eligible, and be promoted a full
+slice (all the tasks do is yield after all). This causes it to jump over
+the other task and now the other task is eligible and current is no
+longer. So we schedule.
+
+Since we are runnable, there is no {de,en}queue. All we have is the
+__{en,de}queue_entity() from {put_prev,set_next}_task(). But per the
+fingered commit, those two no longer move zero_vruntime.
+
+All that moves zero_vruntime are tick and full {de,en}queue.
+
+This means, that if the two tasks playing leapfrog can reach the
+critical speed to reach the overflow point inside one tick's worth of
+time, we're up a creek.
+
+Additionally, when multiple cgroups are involved, there is no guarantee
+the tick will in fact hit every cgroup in a timely manner. Statistically
+speaking it will, but that same statistics does not rule out the
+possibility of one cgroup not getting a tick for a significant amount of
+time -- however unlikely.
+
+Therefore, just like with the yield() case, force an update at the end
+of every slice. This ensures the update is never more than a single
+slice behind and the whole thing is within 2 lag bounds as per the
+comment on entity_key().
+
+Fixes: b3d99f43c72b ("sched/fair: Fix zero_vruntime tracking")
+Reported-by: John Stultz <jstultz@google.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
+Tested-by: K Prateek Nayak <kprateek.nayak@amd.com>
+Tested-by: John Stultz <jstultz@google.com>
+Link: https://patch.msgid.link/20260401132355.081530332@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/fair.c | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
+index a8e766eaca1f9..2625a78c03001 100644
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -707,7 +707,7 @@ void update_zero_vruntime(struct cfs_rq *cfs_rq, s64 delta)
+  * Called in:
+  *  - place_entity()      -- before enqueue
+  *  - update_entity_lag() -- before dequeue
+- *  - entity_tick()
++ *  - update_deadline()   -- slice expiration
+  *
+  * This means it is one entry 'behind' but that puts it close enough to where
+  * the bound on entity_key() is at most two lag bounds.
+@@ -1131,6 +1131,7 @@ static bool update_deadline(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ 	 * EEVDF: vd_i = ve_i + r_i / w_i
+ 	 */
+ 	se->deadline = se->vruntime + calc_delta_fair(se->slice, se);
++	avg_vruntime(cfs_rq);
+ 
+ 	/*
+ 	 * The task has consumed its request, reschedule.
+@@ -5636,11 +5637,6 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued)
+ 	update_load_avg(cfs_rq, curr, UPDATE_TG);
+ 	update_cfs_group(curr);
+ 
+-	/*
+-	 * Pulls along cfs_rq::zero_vruntime.
+-	 */
+-	avg_vruntime(cfs_rq);
+-
+ #ifdef CONFIG_SCHED_HRTICK
+ 	/*
+ 	 * queued ticks are scheduled to match the slice, so don't bother
+@@ -9166,7 +9162,7 @@ static void yield_task_fair(struct rq *rq)
+ 	 */
+ 	if (entity_eligible(cfs_rq, se)) {
+ 		se->vruntime = se->deadline;
+-		se->deadline += calc_delta_fair(se->slice, se);
++		update_deadline(cfs_rq, se);
+ 	}
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/series b/queue-6.19/series
index 910c05e..91719cf 100644
--- a/queue-6.19/series
+++ b/queue-6.19/series
@@ -125,3 +125,36 @@
 bpf-reject-sleepable-kprobe_multi-programs-at-attach.patch
 bpf-fix-incorrect-pruning-due-to-atomic-fetch-precis.patch
 revert-drm-fix-use-after-free-on-framebuffers-and-property-blobs-when-calling-drm_dev_unplug.patch
+iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
+gpiolib-clear-requested-flag-if-line-is-invalid.patch
+interconnect-qcom-sm8450-fix-null-pointer-dereferenc.patch
+gpio-shared-call-gpio_chip-of_xlate-if-set.patch
+gpio-shared-handle-pins-shared-by-child-nodes-of-dev.patch
+gpio-qixis-fpga-fix-error-handling-for-devm_regmap_i.patch
+drm-bridge-fix-refcount-shown-via-debugfs-for-encode.patch
+accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
+io_uring-rsrc-reject-zero-length-fixed-buffer-import.patch
+hwmon-tps53679-fix-array-access-with-zero-length-blo.patch
+hwmon-pxe1610-check-return-value-of-page-select-writ.patch
+hwmon-ltc4286-add-missing-module_import_ns-pmbus.patch
+gpio-shared-shorten-the-critical-section-in-gpiochip.patch
+dt-bindings-gpio-fix-microchip-interrupt-cells.patch
+spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch
+spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch
+drm-xe-xe_pagefault-disallow-writes-to-read-only-vma.patch
+drm-xe-pxp-clean-up-termination-status-on-failure.patch
+drm-xe-pxp-remove-incorrect-handling-of-impossible-s.patch
+drm-xe-pxp-clear-restart-flag-in-pxp_start-after-jum.patch
+hwmon-tps53679-fix-device-id-comparison-and-printing.patch
+spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch
+hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
+irqchip-riscv-aplic-restrict-genpd-notifier-to-devic.patch
+drm-sysfb-fix-efidrm-error-handling-and-memory-type-.patch
+hwmon-asus-ec-sensors-fix-t_sensor-for-prime-x670e-p.patch
+mips-ralink-update-cpu-clock-index.patch
+sched-fair-fix-zero_vruntime-tracking-fix.patch
+sched-debug-fix-avg_vruntime-usage.patch
+perf-x86-fix-potential-bad-container_of-in-intel_pmu.patch
+riscv-kgdb-fix-several-debug-register-assignment-bug.patch
+riscv-reset-pmm-when-pr_tagged_addr_enable-is-not-se.patch
+acpi-rimt-add-dependency-between-iommu-and-devices.patch
diff --git a/queue-6.19/spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch b/queue-6.19/spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch
new file mode 100644
index 0000000..dfbf5b0
--- /dev/null
+++ b/queue-6.19/spi-amlogic-spifc-a4-unregister-ecc-engine-on-probe-.patch
@@ -0,0 +1,58 @@
+From 0b18d2fad6d68d1832c30e382f24c11aec9c17e2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 22 Mar 2026 22:28:45 +0800
+Subject: spi: amlogic: spifc-a4: unregister ECC engine on probe failure and
+ remove() callback
+
+From: Felix Gu <ustc.gu@gmail.com>
+
+[ Upstream commit b0dc7e7c56573e7a52080f25f3179a45f3dd7e6f ]
+
+aml_sfc_probe() registers the on-host NAND ECC engine, but teardown was
+missing from both probe unwind and remove-time cleanup. Add a devm cleanup
+action after successful registration so
+nand_ecc_unregister_on_host_hw_engine() runs automatically on probe
+failures and during device removal.
+
+Fixes: 4670db6f32e9 ("spi: amlogic: add driver for Amlogic SPI Flash Controller")
+Signed-off-by: Felix Gu <ustc.gu@gmail.com>
+Link: https://patch.msgid.link/20260322-spifc-a4-v1-1-2dc5ebcbe0a9@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-amlogic-spifc-a4.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/drivers/spi/spi-amlogic-spifc-a4.c b/drivers/spi/spi-amlogic-spifc-a4.c
+index b2589fe2425cc..3393e1f305709 100644
+--- a/drivers/spi/spi-amlogic-spifc-a4.c
++++ b/drivers/spi/spi-amlogic-spifc-a4.c
+@@ -1066,6 +1066,13 @@ static const struct nand_ecc_engine_ops aml_sfc_ecc_engine_ops = {
+ 	.finish_io_req = aml_sfc_ecc_finish_io_req,
+ };
+ 
++static void aml_sfc_unregister_ecc_engine(void *data)
++{
++	struct nand_ecc_engine *eng = data;
++
++	nand_ecc_unregister_on_host_hw_engine(eng);
++}
++
+ static int aml_sfc_clk_init(struct aml_sfc *sfc)
+ {
+ 	sfc->gate_clk = devm_clk_get_enabled(sfc->dev, "gate");
+@@ -1149,6 +1156,11 @@ static int aml_sfc_probe(struct platform_device *pdev)
+ 	if (ret)
+ 		return dev_err_probe(&pdev->dev, ret, "failed to register Aml host ecc engine.\n");
+ 
++	ret = devm_add_action_or_reset(dev, aml_sfc_unregister_ecc_engine,
++				       &sfc->ecc_eng);
++	if (ret)
++		return dev_err_probe(dev, ret, "failed to add ECC unregister action\n");
++
+ 	ret = of_property_read_u32(np, "amlogic,rx-adj", &val);
+ 	if (!ret)
+ 		sfc->rx_adj = val;
+-- 
+2.53.0
+
diff --git a/queue-6.19/spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch b/queue-6.19/spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch
new file mode 100644
index 0000000..43b632a
--- /dev/null
+++ b/queue-6.19/spi-stm32-ospi-fix-reset-control-leak-on-probe-error.patch
@@ -0,0 +1,49 @@
+From 89f52c6c52e70e57ef4811140749b7f44067ba2c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 00:07:06 +0800
+Subject: spi: stm32-ospi: Fix reset control leak on probe error
+
+From: Felix Gu <ustc.gu@gmail.com>
+
+[ Upstream commit 5a570c8d6e55689253f6fcc4a198c56cca7e39d6 ]
+
+When spi_register_controller() fails after reset_control_acquire()
+succeeds, the reset control is never released. This causes a resource
+leak in the error path.
+
+Add the missing reset_control_release() call in the error path.
+
+Fixes: cf2c3eceb757 ("spi: stm32-ospi: Make usage of reset_control_acquire/release() API")
+Signed-off-by: Felix Gu <ustc.gu@gmail.com>
+Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
+Link: https://patch.msgid.link/20260329-stm32-ospi-v1-1-142122466412@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-stm32-ospi.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-stm32-ospi.c b/drivers/spi/spi-stm32-ospi.c
+index 5fa27de89210a..2988ff288ff02 100644
+--- a/drivers/spi/spi-stm32-ospi.c
++++ b/drivers/spi/spi-stm32-ospi.c
+@@ -939,13 +939,15 @@ static int stm32_ospi_probe(struct platform_device *pdev)
+ 	if (ret) {
+ 		/* Disable ospi */
+ 		writel_relaxed(0, ospi->regs_base + OSPI_CR);
+-		goto err_pm_resume;
++		goto err_reset_control;
+ 	}
+ 
+ 	pm_runtime_put_autosuspend(ospi->dev);
+ 
+ 	return 0;
+ 
++err_reset_control:
++	reset_control_release(ospi->rstc);
+ err_pm_resume:
+ 	pm_runtime_put_sync_suspend(ospi->dev);
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.19/spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch b/queue-6.19/spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch
new file mode 100644
index 0000000..be1c03b
--- /dev/null
+++ b/queue-6.19/spi-stm32-ospi-fix-resource-leak-in-remove-callback.patch
@@ -0,0 +1,45 @@
+From 61206127b0c9877de828b21346e6718b0126dcb7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 19:14:05 +0800
+Subject: spi: stm32-ospi: Fix resource leak in remove() callback
+
+From: Felix Gu <ustc.gu@gmail.com>
+
+[ Upstream commit 73cd1f97946ae3796544448ff12c07f399bb2881 ]
+
+The remove() callback returned early if pm_runtime_resume_and_get()
+failed, skipping the cleanup of spi controller and other resources.
+
+Remove the early return so cleanup completes regardless of PM resume
+result.
+
+Fixes: 79b8a705e26c ("spi: stm32: Add OSPI driver")
+Signed-off-by: Felix Gu <ustc.gu@gmail.com>
+Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
+Link: https://patch.msgid.link/20260329-ospi-v1-1-cc8cf1c82c4a@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-stm32-ospi.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/drivers/spi/spi-stm32-ospi.c b/drivers/spi/spi-stm32-ospi.c
+index f36fd36da2692..5fa27de89210a 100644
+--- a/drivers/spi/spi-stm32-ospi.c
++++ b/drivers/spi/spi-stm32-ospi.c
+@@ -963,11 +963,8 @@ static int stm32_ospi_probe(struct platform_device *pdev)
+ static void stm32_ospi_remove(struct platform_device *pdev)
+ {
+ 	struct stm32_ospi *ospi = platform_get_drvdata(pdev);
+-	int ret;
+ 
+-	ret = pm_runtime_resume_and_get(ospi->dev);
+-	if (ret < 0)
+-		return;
++	pm_runtime_resume_and_get(ospi->dev);
+ 
+ 	spi_unregister_controller(ospi->ctrl);
+ 	/* Disable ospi */
+-- 
+2.53.0
+
diff --git a/queue-6.6/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch b/queue-6.6/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
new file mode 100644
index 0000000..c9edb17
--- /dev/null
+++ b/queue-6.6/accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
@@ -0,0 +1,111 @@
+From 80ccb07a05d84290d427c5bf3e83a7d1f94b3385 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 Feb 2026 13:34:14 +0100
+Subject: accel/qaic: Handle DBC deactivation if the owner went away
+
+From: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+
+[ Upstream commit 2feec5ae5df785658924ab6bd91280dc3926507c ]
+
+When a DBC is released, the device sends a QAIC_TRANS_DEACTIVATE_FROM_DEV
+transaction to the host over the QAIC_CONTROL MHI channel. QAIC handles
+this by calling decode_deactivate() to release the resources allocated for
+that DBC. Since that handling is done in the qaic_manage_ioctl() context,
+if the user goes away before receiving and handling the deactivation, the
+host will be out-of-sync with the DBCs available for use, and the DBC
+resources will not be freed unless the device is removed. If another user
+loads and requests to activate a network, then the device assigns the same
+DBC to that network, QAIC will "indefinitely" wait for dbc->in_use = false,
+leading the user process to hang.
+
+As a solution to this, handle QAIC_TRANS_DEACTIVATE_FROM_DEV transactions
+that are received after the user has gone away.
+
+Fixes: 129776ac2e38 ("accel/qaic: Add control path")
+Signed-off-by: Youssef Samir <youssef.abdulrahman@oss.qualcomm.com>
+Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
+Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Signed-off-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
+Link: https://patch.msgid.link/20260205123415.3870898-1-youssef.abdulrahman@oss.qualcomm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/accel/qaic/qaic_control.c | 47 +++++++++++++++++++++++++++++--
+ 1 file changed, 45 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/accel/qaic/qaic_control.c b/drivers/accel/qaic/qaic_control.c
+index 08b78f5678532..de8b17e2b29e1 100644
+--- a/drivers/accel/qaic/qaic_control.c
++++ b/drivers/accel/qaic/qaic_control.c
+@@ -910,7 +910,7 @@ static int decode_deactivate(struct qaic_device *qdev, void *trans, u32 *msg_len
+ 		 */
+ 		return -ENODEV;
+ 
+-	if (status) {
++	if (usr && status) {
+ 		/*
+ 		 * Releasing resources failed on the device side, which puts
+ 		 * us in a bind since they may still be in use, so enable the
+@@ -1104,6 +1104,9 @@ static void *msg_xfer(struct qaic_device *qdev, struct wrapper_list *wrappers, u
+ 	mutex_lock(&qdev->cntl_mutex);
+ 	if (!list_empty(&elem.list))
+ 		list_del(&elem.list);
++	/* resp_worker() processed the response but the wait was interrupted */
++	else if (ret == -ERESTARTSYS)
++		ret = 0;
+ 	if (!ret && !elem.buf)
+ 		ret = -ETIMEDOUT;
+ 	else if (ret > 0 && !elem.buf)
+@@ -1414,9 +1417,49 @@ static void resp_worker(struct work_struct *work)
+ 	}
+ 	mutex_unlock(&qdev->cntl_mutex);
+ 
+-	if (!found)
++	if (!found) {
++		/*
++		 * The user might have gone away at this point without waiting
++		 * for QAIC_TRANS_DEACTIVATE_FROM_DEV transaction coming from
++		 * the device. If this is not handled correctly, the host will
++		 * not know that the DBC[n] has been freed on the device.
++		 * Due to this failure in synchronization between the device and
++		 * the host, if another user requests to activate a network, and
++		 * the device assigns DBC[n] again, save_dbc_buf() will hang,
++		 * waiting for dbc[n]->in_use to be set to false, which will not
++		 * happen unless the qaic_dev_reset_clean_local_state() gets
++		 * called by resetting the device (or re-inserting the module).
++		 *
++		 * As a solution, we look for QAIC_TRANS_DEACTIVATE_FROM_DEV
++		 * transactions in the message before disposing of it, then
++		 * handle releasing the DBC resources.
++		 *
++		 * Since the user has gone away, if the device could not
++		 * deactivate the network (status != 0), there is no way to
++		 * enable and reassign the DBC to the user. We can put trust in
++		 * the device that it will release all the active DBCs in
++		 * response to the QAIC_TRANS_TERMINATE_TO_DEV transaction,
++		 * otherwise, the user can issue an soc_reset to the device.
++		 */
++		u32 msg_count = le32_to_cpu(msg->hdr.count);
++		u32 msg_len = le32_to_cpu(msg->hdr.len);
++		u32 len = 0;
++		int j;
++
++		for (j = 0; j < msg_count && len < msg_len; ++j) {
++			struct wire_trans_hdr *trans_hdr;
++
++			trans_hdr = (struct wire_trans_hdr *)(msg->data + len);
++			if (le32_to_cpu(trans_hdr->type) == QAIC_TRANS_DEACTIVATE_FROM_DEV) {
++				if (decode_deactivate(qdev, trans_hdr, &len, NULL))
++					len += le32_to_cpu(trans_hdr->len);
++			} else {
++				len += le32_to_cpu(trans_hdr->len);
++			}
++		}
+ 		/* request must have timed out, drop packet */
+ 		kfree(msg);
++	}
+ 
+ 	kfree(resp);
+ }
+-- 
+2.53.0
+
diff --git a/queue-6.6/dt-bindings-gpio-fix-microchip-interrupt-cells.patch b/queue-6.6/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
new file mode 100644
index 0000000..2775122
--- /dev/null
+++ b/queue-6.6/dt-bindings-gpio-fix-microchip-interrupt-cells.patch
@@ -0,0 +1,47 @@
+From 18492ccffc3af861c46a574666f98aedaeba18a7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 17:02:34 +0000
+Subject: dt-bindings: gpio: fix microchip #interrupt-cells
+
+From: Jamie Gibbons <jamie.gibbons@microchip.com>
+
+[ Upstream commit 6b5ef8c88854b343b733b574ea8754c9dab61f41 ]
+
+The GPIO controller on PolarFire SoC supports more than one type of
+interrupt and needs two interrupt cells.
+
+Fixes: 735806d8a68e9 ("dt-bindings: gpio: add bindings for microchip mpfs gpio")
+Signed-off-by: Jamie Gibbons <jamie.gibbons@microchip.com>
+Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
+Link: https://patch.msgid.link/20260326-wise-gumdrop-49217723a72a@spud
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../devicetree/bindings/gpio/microchip,mpfs-gpio.yaml         | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+index d481e78958a74..2c7355e9547a1 100644
+--- a/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
++++ b/Documentation/devicetree/bindings/gpio/microchip,mpfs-gpio.yaml
+@@ -33,7 +33,7 @@ properties:
+     const: 2
+ 
+   "#interrupt-cells":
+-    const: 1
++    const: 2
+ 
+   ngpios:
+     description:
+@@ -84,7 +84,7 @@ examples:
+         gpio-controller;
+         #gpio-cells = <2>;
+         interrupt-controller;
+-        #interrupt-cells = <1>;
++        #interrupt-cells = <2>;
+         interrupts = <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+                      <53>, <53>, <53>, <53>,
+-- 
+2.53.0
+
diff --git a/queue-6.6/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch b/queue-6.6/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
new file mode 100644
index 0000000..779745c
--- /dev/null
+++ b/queue-6.6/hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
@@ -0,0 +1,42 @@
+From 02e88facbd71d136f516f9206a3ba5bc8a16a4a2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 Mar 2026 22:45:29 +0000
+Subject: hwmon: (occ) Fix missing newline in occ_show_extended()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit 09773978879ecf71a7990fe9a28ce4eb92bce645 ]
+
+In occ_show_extended() case 0, when the EXTN_FLAG_SENSOR_ID flag
+is set, the sysfs_emit format string "%u" is missing the trailing
+newline that the sysfs ABI expects. The else branch correctly uses
+"%4phN\n", and all other show functions in this file include the
+trailing newline.
+
+Add the missing "\n" for consistency and correct sysfs output.
+
+Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260326224510.294619-3-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/occ/common.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
+index 755926fa0bf7d..c6a78436e9bba 100644
+--- a/drivers/hwmon/occ/common.c
++++ b/drivers/hwmon/occ/common.c
+@@ -725,7 +725,7 @@ static ssize_t occ_show_extended(struct device *dev,
+ 	switch (sattr->nr) {
+ 	case 0:
+ 		if (extn->flags & EXTN_FLAG_SENSOR_ID) {
+-			rc = sysfs_emit(buf, "%u",
++			rc = sysfs_emit(buf, "%u\n",
+ 					get_unaligned_be32(&extn->sensor_id));
+ 		} else {
+ 			rc = sysfs_emit(buf, "%4phN\n", extn->name);
+-- 
+2.53.0
+
diff --git a/queue-6.6/hwmon-pxe1610-check-return-value-of-page-select-writ.patch b/queue-6.6/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
new file mode 100644
index 0000000..10b76b8
--- /dev/null
+++ b/queue-6.6/hwmon-pxe1610-check-return-value-of-page-select-writ.patch
@@ -0,0 +1,45 @@
+From 841f0fee499b119fef725406d35b9f14003ee99f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2026 17:09:48 +0000
+Subject: hwmon: (pxe1610) Check return value of page-select write in probe
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ccf70c41e562b29d1c05d1bbf53391785e09c6fb ]
+
+pxe1610_probe() writes PMBUS_PAGE to select page 0 but does not check
+the return value. If the write fails, subsequent register reads operate
+on an indeterminate page, leading to silent misconfiguration.
+
+Check the return value and propagate the error using dev_err_probe(),
+which also handles -EPROBE_DEFER correctly without log spam.
+
+Fixes: 344757bac526 ("hwmon: (pmbus) Add Infineon PXE1610 VR driver")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260329170925.34581-4-sanman.pradhan@hpe.com
+[groeck: Fix "Fixes" SHA]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/pxe1610.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c
+index e2790a682dc80..d37e389b50d76 100644
+--- a/drivers/hwmon/pmbus/pxe1610.c
++++ b/drivers/hwmon/pmbus/pxe1610.c
+@@ -104,7 +104,10 @@ static int pxe1610_probe(struct i2c_client *client)
+ 	 * By default this device doesn't boot to page 0, so set page 0
+ 	 * to access all pmbus registers.
+ 	 */
+-	i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	ret = i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
++	if (ret < 0)
++		return dev_err_probe(&client->dev, ret,
++				     "Failed to set page 0\n");
+ 
+ 	/* Read Manufacturer id */
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf);
+-- 
+2.53.0
+
diff --git a/queue-6.6/hwmon-tps53679-fix-device-id-comparison-and-printing.patch b/queue-6.6/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
new file mode 100644
index 0000000..a91adf2
--- /dev/null
+++ b/queue-6.6/hwmon-tps53679-fix-device-id-comparison-and-printing.patch
@@ -0,0 +1,51 @@
+From 2587c99709bc4d8dcd2df1238ff48eb9569f0c1e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2026 15:56:40 +0000
+Subject: hwmon: (tps53679) Fix device ID comparison and printing in
+ tps53676_identify()
+
+From: Sanman Pradhan <psanman@juniper.net>
+
+[ Upstream commit ca34ee6d0307a0b4e52c870dfc1bb8a3c3eb956e ]
+
+tps53676_identify() uses strncmp() to compare the device ID buffer
+against a byte sequence containing embedded non-printable bytes
+(\x53\x67\x60). strncmp() is semantically wrong for binary data
+comparison; use memcmp() instead.
+
+Additionally, the buffer from i2c_smbus_read_block_data() is not
+NUL-terminated, so printing it with "%s" in the error path is
+undefined behavior and may read past the buffer. Use "%*ph" to
+hex-dump the actual bytes returned.
+
+Per the datasheet, the expected device ID is the 6-byte sequence
+54 49 53 67 60 00 ("TI\x53\x67\x60\x00"), so compare all 6 bytes
+including the trailing NUL.
+
+Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676")
+Signed-off-by: Sanman Pradhan <psanman@juniper.net>
+Link: https://lore.kernel.org/r/20260330155618.77403-1-sanman.pradhan@hpe.com
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pmbus/tps53679.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c
+index 5c9466244d70d..ecc1be33b3b1b 100644
+--- a/drivers/hwmon/pmbus/tps53679.c
++++ b/drivers/hwmon/pmbus/tps53679.c
+@@ -156,8 +156,8 @@ static int tps53676_identify(struct i2c_client *client,
+ 	ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf);
+ 	if (ret < 0)
+ 		return ret;
+-	if (strncmp("TI\x53\x67\x60", buf, 5)) {
+-		dev_err(&client->dev, "Unexpected device ID: %s\n", buf);
++	if (ret != 6 || memcmp(buf, "TI\x53\x67\x60\x00", 6)) {
++		dev_err(&client->dev, "Unexpected device ID: %*ph\n", ret, buf);
+ 		return -ENODEV;
+ 	}
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.6/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch b/queue-6.6/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
new file mode 100644
index 0000000..25b7852
--- /dev/null
+++ b/queue-6.6/iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
@@ -0,0 +1,43 @@
+From 8df24b489ed4a17f5effc935e7289cc84b403d28 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 Feb 2026 16:33:54 -0600
+Subject: iio: imu: bno055: fix BNO055_SCAN_CH_COUNT off by one
+
+From: David Lechner <dlechner@baylibre.com>
+
+[ Upstream commit 773ef9f95385bae52dcb7fd129fefba3a71a04db ]
+
+Fix an off-by-one error in the BNO055_SCAN_CH_COUNT macro. The count
+is derived by taking the difference of the last and first register
+addresses, dividing by the size of each channel (2 bytes). It needs to
+also add 1 to account for the fact that the count is inclusive of both
+the first and last channels.
+
+Thanks to the aligned_s64 timestamp field, there was already extra
+padding in the buffer, so there were no runtime issues caused by this
+bug.
+
+Fixes: 4aefe1c2bd0c ("iio: imu: add Bosch Sensortec BNO055 core driver")
+Signed-off-by: David Lechner <dlechner@baylibre.com>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/imu/bno055/bno055.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/iio/imu/bno055/bno055.c b/drivers/iio/imu/bno055/bno055.c
+index 98f17c29da69b..7b58b418b8a8b 100644
+--- a/drivers/iio/imu/bno055/bno055.c
++++ b/drivers/iio/imu/bno055/bno055.c
+@@ -64,7 +64,7 @@
+ #define BNO055_GRAVITY_DATA_X_LSB_REG	0x2E
+ #define BNO055_GRAVITY_DATA_Y_LSB_REG	0x30
+ #define BNO055_GRAVITY_DATA_Z_LSB_REG	0x32
+-#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2)
++#define BNO055_SCAN_CH_COUNT ((BNO055_GRAVITY_DATA_Z_LSB_REG - BNO055_ACC_DATA_X_LSB_REG) / 2 + 1)
+ #define BNO055_TEMP_REG			0x34
+ #define BNO055_CALIB_STAT_REG		0x35
+ #define BNO055_CALIB_STAT_MAGN_SHIFT 0
+-- 
+2.53.0
+
diff --git a/queue-6.6/mips-ralink-update-cpu-clock-index.patch b/queue-6.6/mips-ralink-update-cpu-clock-index.patch
new file mode 100644
index 0000000..c639d05
--- /dev/null
+++ b/queue-6.6/mips-ralink-update-cpu-clock-index.patch
@@ -0,0 +1,49 @@
+From c4606cf655109c03d16514db0b22028109d17509 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 24 Feb 2026 10:22:50 +0800
+Subject: mips: ralink: update CPU clock index
+
+From: Shiji Yang <yangshiji66@outlook.com>
+
+[ Upstream commit 43985a62bab9d35e5e9af41118ce2f44c01b97d2 ]
+
+Update CPU clock index to match the clock driver changes.
+
+Fixes: d34db686a3d7 ("clk: ralink: mtmips: fix clocks probe order in oldest ralink SoCs")
+Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
+Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
+Reviewed-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
+Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/mips/ralink/clk.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/mips/ralink/clk.c b/arch/mips/ralink/clk.c
+index 9db73fcac522e..5c1eb46ef5d07 100644
+--- a/arch/mips/ralink/clk.c
++++ b/arch/mips/ralink/clk.c
+@@ -21,16 +21,16 @@ static const char *clk_cpu(int *idx)
+ {
+ 	switch (ralink_soc) {
+ 	case RT2880_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt2880-sysc";
+ 	case RT3883_SOC:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3883-sysc";
+ 	case RT305X_SOC_RT3050:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3050-sysc";
+ 	case RT305X_SOC_RT3052:
+-		*idx = 0;
++		*idx = 1;
+ 		return "ralink,rt3052-sysc";
+ 	case RT305X_SOC_RT3350:
+ 		*idx = 1;
+-- 
+2.53.0
+
diff --git a/queue-6.6/riscv-kgdb-fix-several-debug-register-assignment-bug.patch b/queue-6.6/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
new file mode 100644
index 0000000..3b51e11
--- /dev/null
+++ b/queue-6.6/riscv-kgdb-fix-several-debug-register-assignment-bug.patch
@@ -0,0 +1,58 @@
+From cefbfdf175deac28fa200d9cd0e3660396c5203b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2026 17:43:47 -0600
+Subject: riscv: kgdb: fix several debug register assignment bugs
+
+From: Paul Walmsley <pjw@kernel.org>
+
+[ Upstream commit 834911eb8eef2501485d819b4eabebadc25c3497 ]
+
+Fix several bugs in the RISC-V kgdb implementation:
+
+- The element of dbg_reg_def[] that is supposed to pertain to the S1
+  register embeds instead the struct pt_regs offset of the A1
+  register.  Fix this to use the S1 register offset in struct pt_regs.
+
+- The sleeping_thread_to_gdb_regs() function copies the value of the
+  S10 register into the gdb_regs[] array element meant for the S9
+  register, and copies the value of the S11 register into the array
+  element meant for the S10 register.  It also neglects to copy the
+  value of the S11 register.  Fix all of these issues.
+
+Fixes: fe89bd2be8667 ("riscv: Add KGDB support")
+Cc: Vincent Chen <vincent.chen@sifive.com>
+Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org
+Signed-off-by: Paul Walmsley <pjw@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/kernel/kgdb.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/riscv/kernel/kgdb.c b/arch/riscv/kernel/kgdb.c
+index 9f3db3503dabd..edaab2aa16a3e 100644
+--- a/arch/riscv/kernel/kgdb.c
++++ b/arch/riscv/kernel/kgdb.c
+@@ -175,7 +175,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
+ 	{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
+ 	{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
+ 	{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
+-	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
++	{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
+ 	{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
+ 	{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
+ 	{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
+@@ -244,8 +244,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
+ 	gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
+ 	gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
+ 	gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
+-	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
+-	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
++	gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
++	gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
++	gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
+ 	gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
+ }
+ 
+-- 
+2.53.0
+
diff --git a/queue-6.6/series b/queue-6.6/series
index f54cbf9..061d76d 100644
--- a/queue-6.6/series
+++ b/queue-6.6/series
@@ -62,3 +62,11 @@
 net-hsr-fix-vlan-add-unwind-on-slave-errors.patch
 ipv6-avoid-overflows-in-ip6_datagram_send_ctl.patch
 bpf-reject-direct-access-to-nullable-ptr_to_buf-poin.patch
+iio-imu-bno055-fix-bno055_scan_ch_count-off-by-one.patch
+accel-qaic-handle-dbc-deactivation-if-the-owner-went.patch
+hwmon-pxe1610-check-return-value-of-page-select-writ.patch
+dt-bindings-gpio-fix-microchip-interrupt-cells.patch
+hwmon-tps53679-fix-device-id-comparison-and-printing.patch
+hwmon-occ-fix-missing-newline-in-occ_show_extended.patch
+mips-ralink-update-cpu-clock-index.patch
+riscv-kgdb-fix-several-debug-register-assignment-bug.patch