]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.10
authorSasha Levin <sashal@kernel.org>
Fri, 3 May 2024 16:37:06 +0000 (12:37 -0400)
committerSasha Levin <sashal@kernel.org>
Fri, 3 May 2024 16:37:06 +0000 (12:37 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
20 files changed:
queue-5.10/dmaengine-pl330-issue_pending-waits-until-wfp-state.patch [new file with mode: 0644]
queue-5.10/dmaengine-revert-dmaengine-pl330-issue_pending-waits.patch [new file with mode: 0644]
queue-5.10/eeprom-at24-fix-memory-corruption-race-condition.patch [new file with mode: 0644]
queue-5.10/eeprom-at24-probe-for-ddr3-thermal-sensor-in-the-spd.patch [new file with mode: 0644]
queue-5.10/eeprom-at24-use-dev_err_probe-for-nvmem-register-fai.patch [new file with mode: 0644]
queue-5.10/nfs-expose-proc-net-sunrpc-nfs-in-net-namespaces.patch [new file with mode: 0644]
queue-5.10/nfs-handle-error-of-rpc_proc_register-in-nfs_net_ini.patch [new file with mode: 0644]
queue-5.10/nfs-make-the-rpc_stat-per-net-namespace.patch [new file with mode: 0644]
queue-5.10/pinctrl-core-delete-incorrect-free-in-pinctrl_enable.patch [new file with mode: 0644]
queue-5.10/pinctrl-devicetree-fix-refcount-leak-in-pinctrl_dt_t.patch [new file with mode: 0644]
queue-5.10/pinctrl-mediatek-paris-fix-pin_config_input_schmitt_.patch [new file with mode: 0644]
queue-5.10/pinctrl-mediatek-paris-rework-mtk_pinconf_-get-set-s.patch [new file with mode: 0644]
queue-5.10/pinctrl-mediatek-paris-rework-support-for-pin_config.patch [new file with mode: 0644]
queue-5.10/pinctrl-meson-fix-typo-in-pdm-s-pin-name.patch [new file with mode: 0644]
queue-5.10/pinctrl-pinctrl-aspeed-g6-fix-register-offset-for-pi.patch [new file with mode: 0644]
queue-5.10/power-rt9455-hide-unused-rt9455_boost_voltage_values.patch [new file with mode: 0644]
queue-5.10/regulator-mt6360-de-capitalize-devicetree-regulator-.patch [new file with mode: 0644]
queue-5.10/series [new file with mode: 0644]
queue-5.10/sunrpc-add-a-struct-rpc_stats-arg-to-rpc_create_args.patch [new file with mode: 0644]
queue-5.10/wifi-nl80211-don-t-free-null-coalescing-rule.patch [new file with mode: 0644]

diff --git a/queue-5.10/dmaengine-pl330-issue_pending-waits-until-wfp-state.patch b/queue-5.10/dmaengine-pl330-issue_pending-waits-until-wfp-state.patch
new file mode 100644 (file)
index 0000000..b1d5c19
--- /dev/null
@@ -0,0 +1,46 @@
+From d7abe73fc4ca573deb3e778dec247e1b4c52b802 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Dec 2023 14:50:26 +0900
+Subject: dmaengine: pl330: issue_pending waits until WFP state
+
+From: Bumyong Lee <bumyong.lee@samsung.com>
+
+[ Upstream commit 22a9d9585812440211b0b34a6bc02ade62314be4 ]
+
+According to DMA-330 errata notice[1] 71930, DMAKILL
+cannot clear internal signal, named pipeline_req_active.
+it makes that pl330 would wait forever in WFP state
+although dma already send dma request if pl330 gets
+dma request before entering WFP state.
+
+The errata suggests that polling until entering WFP state
+as workaround and then peripherals allows to issue dma request.
+
+[1]: https://developer.arm.com/documentation/genc008428/latest
+
+Signed-off-by: Bumyong Lee <bumyong.lee@samsung.com>
+Link: https://lore.kernel.org/r/20231219055026.118695-1-bumyong.lee@samsung.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Stable-dep-of: afc89870ea67 ("dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP state"")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/pl330.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
+index 627aa9e9bc12a..c71b5c8255217 100644
+--- a/drivers/dma/pl330.c
++++ b/drivers/dma/pl330.c
+@@ -1053,6 +1053,9 @@ static bool _trigger(struct pl330_thread *thrd)
+       thrd->req_running = idx;
++      if (desc->rqtype == DMA_MEM_TO_DEV || desc->rqtype == DMA_DEV_TO_MEM)
++              UNTIL(thrd, PL330_STATE_WFP);
++
+       return true;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-revert-dmaengine-pl330-issue_pending-waits.patch b/queue-5.10/dmaengine-revert-dmaengine-pl330-issue_pending-waits.patch
new file mode 100644 (file)
index 0000000..768833f
--- /dev/null
@@ -0,0 +1,39 @@
+From c8ae9e48e66cfee73fb4835b0e74dd617eb568da Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Mar 2024 12:21:51 +0530
+Subject: dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP
+ state"
+
+From: Vinod Koul <vkoul@kernel.org>
+
+[ Upstream commit afc89870ea677bd5a44516eb981f7a259b74280c ]
+
+This reverts commit 22a9d9585812 ("dmaengine: pl330: issue_pending waits
+until WFP state") as it seems to cause regression in pl330 driver.
+Note the issue now exists in mainline so a fix to be done.
+
+Cc: stable@vger.kernel.org
+Reported-by: karthikeyan <karthikeyan@linumiz.com>
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/pl330.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
+index c71b5c8255217..627aa9e9bc12a 100644
+--- a/drivers/dma/pl330.c
++++ b/drivers/dma/pl330.c
+@@ -1053,9 +1053,6 @@ static bool _trigger(struct pl330_thread *thrd)
+       thrd->req_running = idx;
+-      if (desc->rqtype == DMA_MEM_TO_DEV || desc->rqtype == DMA_DEV_TO_MEM)
+-              UNTIL(thrd, PL330_STATE_WFP);
+-
+       return true;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.10/eeprom-at24-fix-memory-corruption-race-condition.patch b/queue-5.10/eeprom-at24-fix-memory-corruption-race-condition.patch
new file mode 100644 (file)
index 0000000..59f008e
--- /dev/null
@@ -0,0 +1,65 @@
+From 6eaad431f16a1dae845246747738ed1e596ad950 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 22 Apr 2024 17:43:36 +0000
+Subject: eeprom: at24: fix memory corruption race condition
+
+From: Daniel Okazaki <dtokazaki@google.com>
+
+[ Upstream commit f42c97027fb75776e2e9358d16bf4a99aeb04cf2 ]
+
+If the eeprom is not accessible, an nvmem device will be registered, the
+read will fail, and the device will be torn down. If another driver
+accesses the nvmem device after the teardown, it will reference
+invalid memory.
+
+Move the failure point before registering the nvmem device.
+
+Signed-off-by: Daniel Okazaki <dtokazaki@google.com>
+Fixes: b20eb4c1f026 ("eeprom: at24: drop unnecessary label")
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/20240422174337.2487142-1-dtokazaki@google.com
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/misc/eeprom/at24.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
+index 65a7517c031a7..02bea44369435 100644
+--- a/drivers/misc/eeprom/at24.c
++++ b/drivers/misc/eeprom/at24.c
+@@ -782,15 +782,6 @@ static int at24_probe(struct i2c_client *client)
+       pm_runtime_set_active(dev);
+       pm_runtime_enable(dev);
+-      at24->nvmem = devm_nvmem_register(dev, &nvmem_config);
+-      if (IS_ERR(at24->nvmem)) {
+-              pm_runtime_disable(dev);
+-              if (!pm_runtime_status_suspended(dev))
+-                      regulator_disable(at24->vcc_reg);
+-              return dev_err_probe(dev, PTR_ERR(at24->nvmem),
+-                                   "failed to register nvmem\n");
+-      }
+-
+       /*
+        * Perform a one-byte test read to verify that the
+        * chip is functional.
+@@ -803,6 +794,15 @@ static int at24_probe(struct i2c_client *client)
+               return -ENODEV;
+       }
++      at24->nvmem = devm_nvmem_register(dev, &nvmem_config);
++      if (IS_ERR(at24->nvmem)) {
++              pm_runtime_disable(dev);
++              if (!pm_runtime_status_suspended(dev))
++                      regulator_disable(at24->vcc_reg);
++              return dev_err_probe(dev, PTR_ERR(at24->nvmem),
++                                   "failed to register nvmem\n");
++      }
++
+       /* If this a SPD EEPROM, probe for DDR3 thermal sensor */
+       if (cdata == &at24_data_spd)
+               at24_probe_temp_sensor(client);
+-- 
+2.43.0
+
diff --git a/queue-5.10/eeprom-at24-probe-for-ddr3-thermal-sensor-in-the-spd.patch b/queue-5.10/eeprom-at24-probe-for-ddr3-thermal-sensor-in-the-spd.patch
new file mode 100644 (file)
index 0000000..65ad36e
--- /dev/null
@@ -0,0 +1,82 @@
+From 93573686928a496fcdadbe4a6999747cb49ab9c9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Dec 2023 13:55:58 +0100
+Subject: eeprom: at24: Probe for DDR3 thermal sensor in the SPD case
+
+From: Heiner Kallweit <hkallweit1@gmail.com>
+
+[ Upstream commit caba40ec3531b0849f44502a03117796e8c9f4a1 ]
+
+The DDR3 SPD data structure advertises the presence of a thermal
+sensor on a DDR3 module in byte 32, bit 7. Let's use this information
+to explicitly instantiate the thermal sensor I2C client instead of
+having to rely on class-based I2C probing.
+
+The temp sensor i2c address can be derived from the SPD i2c address,
+so we can directly instantiate the device and don't have to probe
+for it. If the temp sensor has been instantiated already by other
+means (e.g. class-based auto-detection), then the busy-check in
+i2c_new_client_device will detect this.
+
+Note: Thermal sensors on DDR4 DIMM's are instantiated from the
+      ee1004 driver.
+
+Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
+Link: https://lore.kernel.org/r/68113672-3724-44d5-9ff8-313dd6628f8c@gmail.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Stable-dep-of: f42c97027fb7 ("eeprom: at24: fix memory corruption race condition")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/misc/eeprom/at24.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
+index b100bbc888668..65a7517c031a7 100644
+--- a/drivers/misc/eeprom/at24.c
++++ b/drivers/misc/eeprom/at24.c
+@@ -585,6 +585,31 @@ static unsigned int at24_get_offset_adj(u8 flags, unsigned int byte_len)
+       }
+ }
++static void at24_probe_temp_sensor(struct i2c_client *client)
++{
++      struct at24_data *at24 = i2c_get_clientdata(client);
++      struct i2c_board_info info = { .type = "jc42" };
++      int ret;
++      u8 val;
++
++      /*
++       * Byte 2 has value 11 for DDR3, earlier versions don't
++       * support the thermal sensor present flag
++       */
++      ret = at24_read(at24, 2, &val, 1);
++      if (ret || val != 11)
++              return;
++
++      /* Byte 32, bit 7 is set if temp sensor is present */
++      ret = at24_read(at24, 32, &val, 1);
++      if (ret || !(val & BIT(7)))
++              return;
++
++      info.addr = 0x18 | (client->addr & 7);
++
++      i2c_new_client_device(client->adapter, &info);
++}
++
+ static int at24_probe(struct i2c_client *client)
+ {
+       struct regmap_config regmap_config = { };
+@@ -778,6 +803,10 @@ static int at24_probe(struct i2c_client *client)
+               return -ENODEV;
+       }
++      /* If this a SPD EEPROM, probe for DDR3 thermal sensor */
++      if (cdata == &at24_data_spd)
++              at24_probe_temp_sensor(client);
++
+       pm_runtime_idle(dev);
+       if (writable)
+-- 
+2.43.0
+
diff --git a/queue-5.10/eeprom-at24-use-dev_err_probe-for-nvmem-register-fai.patch b/queue-5.10/eeprom-at24-use-dev_err_probe-for-nvmem-register-fai.patch
new file mode 100644 (file)
index 0000000..59d3743
--- /dev/null
@@ -0,0 +1,39 @@
+From 5f8813c15d4781a4ed4ba66c13f804e69ba92c33 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 May 2023 10:05:53 +0200
+Subject: eeprom: at24: Use dev_err_probe for nvmem register failure
+
+From: Alexander Stein <alexander.stein@ew.tq-group.com>
+
+[ Upstream commit a3c10035d12f5ec10915d5c00c2e8f7d7c066182 ]
+
+When using nvmem layouts it is possible devm_nvmem_register returns
+-EPROBE_DEFER, resulting in an 'empty' in
+/sys/kernel/debug/devices_deferred. Use dev_err_probe for providing
+additional information.
+
+Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+Stable-dep-of: f42c97027fb7 ("eeprom: at24: fix memory corruption race condition")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/misc/eeprom/at24.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
+index 305ffad131a29..b100bbc888668 100644
+--- a/drivers/misc/eeprom/at24.c
++++ b/drivers/misc/eeprom/at24.c
+@@ -762,7 +762,8 @@ static int at24_probe(struct i2c_client *client)
+               pm_runtime_disable(dev);
+               if (!pm_runtime_status_suspended(dev))
+                       regulator_disable(at24->vcc_reg);
+-              return PTR_ERR(at24->nvmem);
++              return dev_err_probe(dev, PTR_ERR(at24->nvmem),
++                                   "failed to register nvmem\n");
+       }
+       /*
+-- 
+2.43.0
+
diff --git a/queue-5.10/nfs-expose-proc-net-sunrpc-nfs-in-net-namespaces.patch b/queue-5.10/nfs-expose-proc-net-sunrpc-nfs-in-net-namespaces.patch
new file mode 100644 (file)
index 0000000..9591e23
--- /dev/null
@@ -0,0 +1,71 @@
+From c27b534a0e6fd67b2c2762b060c80e4e7f8794bd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 15 Feb 2024 14:57:31 -0500
+Subject: nfs: expose /proc/net/sunrpc/nfs in net namespaces
+
+From: Josef Bacik <josef@toxicpanda.com>
+
+[ Upstream commit d47151b79e3220e72ae323b8b8e9d6da20dc884e ]
+
+We're using nfs mounts inside of containers in production and noticed
+that the nfs stats are not exposed in /proc.  This is a problem for us
+as we use these stats for monitoring, and have to do this awkward bind
+mount from the main host into the container in order to get to these
+states.
+
+Add the rpc_proc_register call to the pernet operations entry and exit
+points so these stats can be exposed inside of network namespaces.
+
+Signed-off-by: Josef Bacik <josef@toxicpanda.com>
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/inode.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
+index 36f415278c042..51c721e2f5555 100644
+--- a/fs/nfs/inode.c
++++ b/fs/nfs/inode.c
+@@ -2226,11 +2226,13 @@ EXPORT_SYMBOL_GPL(nfs_net_id);
+ static int nfs_net_init(struct net *net)
+ {
+       nfs_clients_init(net);
++      rpc_proc_register(net, &nfs_rpcstat);
+       return nfs_fs_proc_net_init(net);
+ }
+ static void nfs_net_exit(struct net *net)
+ {
++      rpc_proc_unregister(net, "nfs");
+       nfs_fs_proc_net_exit(net);
+       nfs_clients_exit(net);
+ }
+@@ -2289,15 +2291,12 @@ static int __init init_nfs_fs(void)
+       if (err)
+               goto out1;
+-      rpc_proc_register(&init_net, &nfs_rpcstat);
+-
+       err = register_nfs_fs();
+       if (err)
+               goto out0;
+       return 0;
+ out0:
+-      rpc_proc_unregister(&init_net, "nfs");
+       nfs_destroy_directcache();
+ out1:
+       nfs_destroy_writepagecache();
+@@ -2330,7 +2329,6 @@ static void __exit exit_nfs_fs(void)
+       nfs_destroy_nfspagecache();
+       nfs_fscache_unregister();
+       unregister_pernet_subsys(&nfs_net_ops);
+-      rpc_proc_unregister(&init_net, "nfs");
+       unregister_nfs_fs();
+       nfs_fs_proc_exit();
+       nfsiod_stop();
+-- 
+2.43.0
+
diff --git a/queue-5.10/nfs-handle-error-of-rpc_proc_register-in-nfs_net_ini.patch b/queue-5.10/nfs-handle-error-of-rpc_proc_register-in-nfs_net_ini.patch
new file mode 100644 (file)
index 0000000..165d17b
--- /dev/null
@@ -0,0 +1,104 @@
+From 0a159801006d8ca9b8d4a2de7c9ec0f0a7b967dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Apr 2024 15:12:00 -0700
+Subject: nfs: Handle error of rpc_proc_register() in nfs_net_init().
+
+From: Kuniyuki Iwashima <kuniyu@amazon.com>
+
+[ Upstream commit 24457f1be29f1e7042e50a7749f5c2dde8c433c8 ]
+
+syzkaller reported a warning [0] triggered while destroying immature
+netns.
+
+rpc_proc_register() was called in init_nfs_fs(), but its error
+has been ignored since at least the initial commit 1da177e4c3f4
+("Linux-2.6.12-rc2").
+
+Recently, commit d47151b79e32 ("nfs: expose /proc/net/sunrpc/nfs
+in net namespaces") converted the procfs to per-netns and made
+the problem more visible.
+
+Even when rpc_proc_register() fails, nfs_net_init() could succeed,
+and thus nfs_net_exit() will be called while destroying the netns.
+
+Then, remove_proc_entry() will be called for non-existing proc
+directory and trigger the warning below.
+
+Let's handle the error of rpc_proc_register() properly in nfs_net_init().
+
+[0]:
+name 'nfs'
+WARNING: CPU: 1 PID: 1710 at fs/proc/generic.c:711 remove_proc_entry+0x1bb/0x2d0 fs/proc/generic.c:711
+Modules linked in:
+CPU: 1 PID: 1710 Comm: syz-executor.2 Not tainted 6.8.0-12822-gcd51db110a7e #12
+Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
+RIP: 0010:remove_proc_entry+0x1bb/0x2d0 fs/proc/generic.c:711
+Code: 41 5d 41 5e c3 e8 85 09 b5 ff 48 c7 c7 88 58 64 86 e8 09 0e 71 02 e8 74 09 b5 ff 4c 89 e6 48 c7 c7 de 1b 80 84 e8 c5 ad 97 ff <0f> 0b eb b1 e8 5c 09 b5 ff 48 c7 c7 88 58 64 86 e8 e0 0d 71 02 eb
+RSP: 0018:ffffc9000c6d7ce0 EFLAGS: 00010286
+RAX: 0000000000000000 RBX: ffff8880422b8b00 RCX: ffffffff8110503c
+RDX: ffff888030652f00 RSI: ffffffff81105045 RDI: 0000000000000001
+RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
+R10: 0000000000000001 R11: ffffffff81bb62cb R12: ffffffff84807ffc
+R13: ffff88804ad6fcc0 R14: ffffffff84807ffc R15: ffffffff85741ff8
+FS:  00007f30cfba8640(0000) GS:ffff88807dd00000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 00007ff51afe8000 CR3: 000000005a60a005 CR4: 0000000000770ef0
+DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
+PKRU: 55555554
+Call Trace:
+ <TASK>
+ rpc_proc_unregister+0x64/0x70 net/sunrpc/stats.c:310
+ nfs_net_exit+0x1c/0x30 fs/nfs/inode.c:2438
+ ops_exit_list+0x62/0xb0 net/core/net_namespace.c:170
+ setup_net+0x46c/0x660 net/core/net_namespace.c:372
+ copy_net_ns+0x244/0x590 net/core/net_namespace.c:505
+ create_new_namespaces+0x2ed/0x770 kernel/nsproxy.c:110
+ unshare_nsproxy_namespaces+0xae/0x160 kernel/nsproxy.c:228
+ ksys_unshare+0x342/0x760 kernel/fork.c:3322
+ __do_sys_unshare kernel/fork.c:3393 [inline]
+ __se_sys_unshare kernel/fork.c:3391 [inline]
+ __x64_sys_unshare+0x1f/0x30 kernel/fork.c:3391
+ do_syscall_x64 arch/x86/entry/common.c:52 [inline]
+ do_syscall_64+0x4f/0x110 arch/x86/entry/common.c:83
+ entry_SYSCALL_64_after_hwframe+0x46/0x4e
+RIP: 0033:0x7f30d0febe5d
+Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 9f 1b 00 f7 d8 64 89 01 48
+RSP: 002b:00007f30cfba7cc8 EFLAGS: 00000246 ORIG_RAX: 0000000000000110
+RAX: ffffffffffffffda RBX: 00000000004bbf80 RCX: 00007f30d0febe5d
+RDX: 0000000000000000 RSI: 0000000000000000 RDI: 000000006c020600
+RBP: 00000000004bbf80 R08: 0000000000000000 R09: 0000000000000000
+R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000002
+R13: 000000000000000b R14: 00007f30d104c530 R15: 0000000000000000
+ </TASK>
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Reported-by: syzkaller <syzkaller@googlegroups.com>
+Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/inode.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
+index 4ae50340c1152..0d06ec25e21e0 100644
+--- a/fs/nfs/inode.c
++++ b/fs/nfs/inode.c
+@@ -2228,7 +2228,12 @@ static int nfs_net_init(struct net *net)
+       struct nfs_net *nn = net_generic(net, nfs_net_id);
+       nfs_clients_init(net);
+-      rpc_proc_register(net, &nn->rpcstats);
++
++      if (!rpc_proc_register(net, &nn->rpcstats)) {
++              nfs_clients_exit(net);
++              return -ENOMEM;
++      }
++
+       return nfs_fs_proc_net_init(net);
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.10/nfs-make-the-rpc_stat-per-net-namespace.patch b/queue-5.10/nfs-make-the-rpc_stat-per-net-namespace.patch
new file mode 100644 (file)
index 0000000..08a7df3
--- /dev/null
@@ -0,0 +1,113 @@
+From ed64ed940f6337e6dee0fefcb2f9e9ffd22ded60 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 15 Feb 2024 14:57:32 -0500
+Subject: nfs: make the rpc_stat per net namespace
+
+From: Josef Bacik <josef@toxicpanda.com>
+
+[ Upstream commit 1548036ef1204df65ca5a16e8b199c858cb80075 ]
+
+Now that we're exposing the rpc stats on a per-network namespace basis,
+move this struct into struct nfs_net and use that to make sure only the
+per-network namespace stats are exposed.
+
+Signed-off-by: Josef Bacik <josef@toxicpanda.com>
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/client.c   | 5 ++++-
+ fs/nfs/inode.c    | 4 +++-
+ fs/nfs/internal.h | 2 --
+ fs/nfs/netns.h    | 2 ++
+ 4 files changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/fs/nfs/client.c b/fs/nfs/client.c
+index 818ff8b1b99da..1437eb31dd034 100644
+--- a/fs/nfs/client.c
++++ b/fs/nfs/client.c
+@@ -73,7 +73,6 @@ const struct rpc_program nfs_program = {
+       .number                 = NFS_PROGRAM,
+       .nrvers                 = ARRAY_SIZE(nfs_version),
+       .version                = nfs_version,
+-      .stats                  = &nfs_rpcstat,
+       .pipe_dir_name          = NFS_PIPE_DIRNAME,
+ };
+@@ -501,6 +500,7 @@ int nfs_create_rpc_client(struct nfs_client *clp,
+                         const struct nfs_client_initdata *cl_init,
+                         rpc_authflavor_t flavor)
+ {
++      struct nfs_net          *nn = net_generic(clp->cl_net, nfs_net_id);
+       struct rpc_clnt         *clnt = NULL;
+       struct rpc_create_args args = {
+               .net            = clp->cl_net,
+@@ -512,6 +512,7 @@ int nfs_create_rpc_client(struct nfs_client *clp,
+               .servername     = clp->cl_hostname,
+               .nodename       = cl_init->nodename,
+               .program        = &nfs_program,
++              .stats          = &nn->rpcstats,
+               .version        = clp->rpc_ops->version,
+               .authflavor     = flavor,
+               .cred           = cl_init->cred,
+@@ -1110,6 +1111,8 @@ void nfs_clients_init(struct net *net)
+ #endif
+       spin_lock_init(&nn->nfs_client_lock);
+       nn->boot_time = ktime_get_real();
++      memset(&nn->rpcstats, 0, sizeof(nn->rpcstats));
++      nn->rpcstats.program = &nfs_program;
+       nfs_netns_sysfs_setup(nn, net);
+ }
+diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
+index 51c721e2f5555..4ae50340c1152 100644
+--- a/fs/nfs/inode.c
++++ b/fs/nfs/inode.c
+@@ -2225,8 +2225,10 @@ EXPORT_SYMBOL_GPL(nfs_net_id);
+ static int nfs_net_init(struct net *net)
+ {
++      struct nfs_net *nn = net_generic(net, nfs_net_id);
++
+       nfs_clients_init(net);
+-      rpc_proc_register(net, &nfs_rpcstat);
++      rpc_proc_register(net, &nn->rpcstats);
+       return nfs_fs_proc_net_init(net);
+ }
+diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
+index a7e0970b5bfe1..9a72abfb46abc 100644
+--- a/fs/nfs/internal.h
++++ b/fs/nfs/internal.h
+@@ -435,8 +435,6 @@ int nfs_try_get_tree(struct fs_context *);
+ int nfs_get_tree_common(struct fs_context *);
+ void nfs_kill_super(struct super_block *);
+-extern struct rpc_stat nfs_rpcstat;
+-
+ extern int __init register_nfs_fs(void);
+ extern void __exit unregister_nfs_fs(void);
+ extern bool nfs_sb_active(struct super_block *sb);
+diff --git a/fs/nfs/netns.h b/fs/nfs/netns.h
+index c8374f74dce11..a68b21603ea9a 100644
+--- a/fs/nfs/netns.h
++++ b/fs/nfs/netns.h
+@@ -9,6 +9,7 @@
+ #include <linux/nfs4.h>
+ #include <net/net_namespace.h>
+ #include <net/netns/generic.h>
++#include <linux/sunrpc/stats.h>
+ struct bl_dev_msg {
+       int32_t status;
+@@ -34,6 +35,7 @@ struct nfs_net {
+       struct nfs_netns_client *nfs_client;
+       spinlock_t nfs_client_lock;
+       ktime_t boot_time;
++      struct rpc_stat rpcstats;
+ #ifdef CONFIG_PROC_FS
+       struct proc_dir_entry *proc_nfsfs;
+ #endif
+-- 
+2.43.0
+
diff --git a/queue-5.10/pinctrl-core-delete-incorrect-free-in-pinctrl_enable.patch b/queue-5.10/pinctrl-core-delete-incorrect-free-in-pinctrl_enable.patch
new file mode 100644 (file)
index 0000000..bbd86aa
--- /dev/null
@@ -0,0 +1,47 @@
+From 371ae570e4f0bbe0ee5658102190067d09eae542 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Mar 2024 09:38:39 +0300
+Subject: pinctrl: core: delete incorrect free in pinctrl_enable()
+
+From: Dan Carpenter <dan.carpenter@linaro.org>
+
+[ Upstream commit 5038a66dad0199de60e5671603ea6623eb9e5c79 ]
+
+The "pctldev" struct is allocated in devm_pinctrl_register_and_init().
+It's a devm_ managed pointer that is freed by devm_pinctrl_dev_release(),
+so freeing it in pinctrl_enable() will lead to a double free.
+
+The devm_pinctrl_dev_release() function frees the pindescs and destroys
+the mutex as well.
+
+Fixes: 6118714275f0 ("pinctrl: core: Fix pinctrl_register_and_init() with pinctrl_enable()")
+Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
+Message-ID: <578fbe56-44e9-487c-ae95-29b695650f7c@moroto.mountain>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/core.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
+index 4d52494369935..4d46260e6bff3 100644
+--- a/drivers/pinctrl/core.c
++++ b/drivers/pinctrl/core.c
+@@ -2075,13 +2075,7 @@ int pinctrl_enable(struct pinctrl_dev *pctldev)
+       error = pinctrl_claim_hogs(pctldev);
+       if (error) {
+-              dev_err(pctldev->dev, "could not claim hogs: %i\n",
+-                      error);
+-              pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
+-                                    pctldev->desc->npins);
+-              mutex_destroy(&pctldev->mutex);
+-              kfree(pctldev);
+-
++              dev_err(pctldev->dev, "could not claim hogs: %i\n", error);
+               return error;
+       }
+-- 
+2.43.0
+
diff --git a/queue-5.10/pinctrl-devicetree-fix-refcount-leak-in-pinctrl_dt_t.patch b/queue-5.10/pinctrl-devicetree-fix-refcount-leak-in-pinctrl_dt_t.patch
new file mode 100644 (file)
index 0000000..752e2e3
--- /dev/null
@@ -0,0 +1,52 @@
+From e68fb23f8dc5fe05a22dd2c9201dede0e79b8936 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Apr 2024 18:53:28 +0800
+Subject: pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map()
+
+From: Zeng Heng <zengheng4@huawei.com>
+
+[ Upstream commit a0cedbcc8852d6c77b00634b81e41f17f29d9404 ]
+
+If we fail to allocate propname buffer, we need to drop the reference
+count we just took. Because the pinctrl_dt_free_maps() includes the
+droping operation, here we call it directly.
+
+Fixes: 91d5c5060ee2 ("pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map")
+Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
+Signed-off-by: Zeng Heng <zengheng4@huawei.com>
+Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
+Message-ID: <20240415105328.3651441-1-zengheng4@huawei.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/devicetree.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
+index eac55fee5281c..0220228c50404 100644
+--- a/drivers/pinctrl/devicetree.c
++++ b/drivers/pinctrl/devicetree.c
+@@ -220,14 +220,16 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev)
+       for (state = 0; ; state++) {
+               /* Retrieve the pinctrl-* property */
+               propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
+-              if (!propname)
+-                      return -ENOMEM;
++              if (!propname) {
++                      ret = -ENOMEM;
++                      goto err;
++              }
+               prop = of_find_property(np, propname, &size);
+               kfree(propname);
+               if (!prop) {
+                       if (state == 0) {
+-                              of_node_put(np);
+-                              return -ENODEV;
++                              ret = -ENODEV;
++                              goto err;
+                       }
+                       break;
+               }
+-- 
+2.43.0
+
diff --git a/queue-5.10/pinctrl-mediatek-paris-fix-pin_config_input_schmitt_.patch b/queue-5.10/pinctrl-mediatek-paris-fix-pin_config_input_schmitt_.patch
new file mode 100644 (file)
index 0000000..1b6abdf
--- /dev/null
@@ -0,0 +1,46 @@
+From 7e6d40f4db79978efa9e63d59017218b837f7c54 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Mar 2024 17:13:33 +0800
+Subject: pinctrl: mediatek: paris: Fix PIN_CONFIG_INPUT_SCHMITT_ENABLE
+ readback
+
+From: Chen-Yu Tsai <wenst@chromium.org>
+
+[ Upstream commit 08f66a8edd08f6f7cfa769c81634b29a2b123908 ]
+
+In the generic pin config library, readback of some options are handled
+differently compared to the setting of those options: the argument value
+is used to convey enable/disable of an option in the set path, but
+success or -EINVAL is used to convey if an option is enabled or disabled
+in the debugfs readback path.
+
+PIN_CONFIG_INPUT_SCHMITT_ENABLE is one such option. Fix the readback of
+the option in the mediatek-paris library, so that the debugfs dump is
+not showing "input schmitt enabled" for pins that don't have it enabled.
+
+Fixes: 1bea6afbc842 ("pinctrl: mediatek: Refine mtk_pinconf_get()")
+Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Message-ID: <20240327091336.3434141-2-wenst@chromium.org>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/mediatek/pinctrl-paris.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
+index b9afb9595733b..95a71606c2865 100644
+--- a/drivers/pinctrl/mediatek/pinctrl-paris.c
++++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
+@@ -141,6 +141,8 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
+               }
+               err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_SMT, &ret);
++              if (!ret)
++                      err = -EINVAL;
+               break;
+       case PIN_CONFIG_DRIVE_STRENGTH:
+               if (!hw->soc->drive_get)
+-- 
+2.43.0
+
diff --git a/queue-5.10/pinctrl-mediatek-paris-rework-mtk_pinconf_-get-set-s.patch b/queue-5.10/pinctrl-mediatek-paris-rework-mtk_pinconf_-get-set-s.patch
new file mode 100644 (file)
index 0000000..9880e9c
--- /dev/null
@@ -0,0 +1,301 @@
+From ac5675cae7c3b89b6c6e35fd0163faa73eb5b9d6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Mar 2022 18:09:52 +0800
+Subject: pinctrl: mediatek: paris: Rework mtk_pinconf_{get,set} switch/case
+ logic
+
+From: Chen-Yu Tsai <wenst@chromium.org>
+
+[ Upstream commit 9b780fa1ff14663c2e0f07ad098b96b8337f27a4 ]
+
+The current code deals with optional features by testing for the
+function pointers and returning -ENOTSUPP if it is not valid. This is
+done for multiple pin config settings and results in the code that
+handles the supporting cases to get indented by one level. This is
+aggrevated by the fact that some features require another level of
+conditionals.
+
+Instead of assigning the same error code in all unsupported optional
+feature cases, simply have that error code as the default, and break
+out of the switch/case block whenever a feature is unsupported, or an
+error is returned. This reduces indentation by one level for the useful
+code.
+
+Also replace the goto statements with break statements. The result is
+the same, as the gotos simply exit the switch/case block, which can
+also be achieved with a break statement. With the latter the intent
+is clear and easier to understand.
+
+Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Link: https://lore.kernel.org/r/20220308100956.2750295-8-wenst@chromium.org
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Stable-dep-of: 08f66a8edd08 ("pinctrl: mediatek: paris: Fix PIN_CONFIG_INPUT_SCHMITT_ENABLE readback")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/mediatek/pinctrl-paris.c | 144 ++++++++++-------------
+ 1 file changed, 61 insertions(+), 83 deletions(-)
+
+diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
+index e486d66e220b0..b9afb9595733b 100644
+--- a/drivers/pinctrl/mediatek/pinctrl-paris.c
++++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
+@@ -79,37 +79,34 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
+ {
+       struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev);
+       u32 param = pinconf_to_config_param(*config);
+-      int pullup, err, reg, ret = 1;
++      int pullup, reg, err = -ENOTSUPP, ret = 1;
+       const struct mtk_pin_desc *desc;
+-      if (pin >= hw->soc->npins) {
+-              err = -EINVAL;
+-              goto out;
+-      }
++      if (pin >= hw->soc->npins)
++              return -EINVAL;
++
+       desc = (const struct mtk_pin_desc *)&hw->soc->pins[pin];
+       switch (param) {
+       case PIN_CONFIG_BIAS_DISABLE:
+       case PIN_CONFIG_BIAS_PULL_UP:
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+-              if (hw->soc->bias_get_combo) {
+-                      err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
+-                      if (err)
+-                              goto out;
+-                      if (ret == MTK_PUPD_SET_R1R0_00)
+-                              ret = MTK_DISABLE;
+-                      if (param == PIN_CONFIG_BIAS_DISABLE) {
+-                              if (ret != MTK_DISABLE)
+-                                      err = -EINVAL;
+-                      } else if (param == PIN_CONFIG_BIAS_PULL_UP) {
+-                              if (!pullup || ret == MTK_DISABLE)
+-                                      err = -EINVAL;
+-                      } else if (param == PIN_CONFIG_BIAS_PULL_DOWN) {
+-                              if (pullup || ret == MTK_DISABLE)
+-                                      err = -EINVAL;
+-                      }
+-              } else {
+-                      err = -ENOTSUPP;
++              if (!hw->soc->bias_get_combo)
++                      break;
++              err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
++              if (err)
++                      break;
++              if (ret == MTK_PUPD_SET_R1R0_00)
++                      ret = MTK_DISABLE;
++              if (param == PIN_CONFIG_BIAS_DISABLE) {
++                      if (ret != MTK_DISABLE)
++                              err = -EINVAL;
++              } else if (param == PIN_CONFIG_BIAS_PULL_UP) {
++                      if (!pullup || ret == MTK_DISABLE)
++                              err = -EINVAL;
++              } else if (param == PIN_CONFIG_BIAS_PULL_DOWN) {
++                      if (pullup || ret == MTK_DISABLE)
++                              err = -EINVAL;
+               }
+               break;
+       case PIN_CONFIG_SLEW_RATE:
+@@ -119,7 +116,7 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
+       case PIN_CONFIG_OUTPUT_ENABLE:
+               err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &ret);
+               if (err)
+-                      goto out;
++                      break;
+               /*     CONFIG     Current direction return value
+                * -------------  ----------------- ----------------------
+                * OUTPUT_ENABLE       output       1 (= HW value)
+@@ -134,23 +131,21 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
+       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
+               err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &ret);
+               if (err)
+-                      goto out;
++                      break;
+               /* return error when in output mode
+                * because schmitt trigger only work in input mode
+                */
+               if (ret) {
+                       err = -EINVAL;
+-                      goto out;
++                      break;
+               }
+               err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_SMT, &ret);
+-
+               break;
+       case PIN_CONFIG_DRIVE_STRENGTH:
+-              if (hw->soc->drive_get)
+-                      err = hw->soc->drive_get(hw, desc, &ret);
+-              else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->drive_get)
++                      break;
++              err = hw->soc->drive_get(hw, desc, &ret);
+               break;
+       case MTK_PIN_CONFIG_TDSEL:
+       case MTK_PIN_CONFIG_RDSEL:
+@@ -160,23 +155,18 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
+               break;
+       case MTK_PIN_CONFIG_PU_ADV:
+       case MTK_PIN_CONFIG_PD_ADV:
+-              if (hw->soc->adv_pull_get) {
+-                      pullup = param == MTK_PIN_CONFIG_PU_ADV;
+-                      err = hw->soc->adv_pull_get(hw, desc, pullup, &ret);
+-              } else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->adv_pull_get)
++                      break;
++              pullup = param == MTK_PIN_CONFIG_PU_ADV;
++              err = hw->soc->adv_pull_get(hw, desc, pullup, &ret);
+               break;
+       case MTK_PIN_CONFIG_DRV_ADV:
+-              if (hw->soc->adv_drive_get)
+-                      err = hw->soc->adv_drive_get(hw, desc, &ret);
+-              else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->adv_drive_get)
++                      break;
++              err = hw->soc->adv_drive_get(hw, desc, &ret);
+               break;
+-      default:
+-              err = -ENOTSUPP;
+       }
+-out:
+       if (!err)
+               *config = pinconf_to_config_packed(param, ret);
+@@ -188,33 +178,29 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+ {
+       struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev);
+       const struct mtk_pin_desc *desc;
+-      int err = 0;
++      int err = -ENOTSUPP;
+       u32 reg;
+-      if (pin >= hw->soc->npins) {
+-              err = -EINVAL;
+-              goto err;
+-      }
++      if (pin >= hw->soc->npins)
++              return -EINVAL;
++
+       desc = (const struct mtk_pin_desc *)&hw->soc->pins[pin];
+       switch ((u32)param) {
+       case PIN_CONFIG_BIAS_DISABLE:
+-              if (hw->soc->bias_set_combo)
+-                      err = hw->soc->bias_set_combo(hw, desc, 0, MTK_DISABLE);
+-              else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->bias_set_combo)
++                      break;
++              err = hw->soc->bias_set_combo(hw, desc, 0, MTK_DISABLE);
+               break;
+       case PIN_CONFIG_BIAS_PULL_UP:
+-              if (hw->soc->bias_set_combo)
+-                      err = hw->soc->bias_set_combo(hw, desc, 1, arg);
+-              else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->bias_set_combo)
++                      break;
++              err = hw->soc->bias_set_combo(hw, desc, 1, arg);
+               break;
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+-              if (hw->soc->bias_set_combo)
+-                      err = hw->soc->bias_set_combo(hw, desc, 0, arg);
+-              else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->bias_set_combo)
++                      break;
++              err = hw->soc->bias_set_combo(hw, desc, 0, arg);
+               break;
+       case PIN_CONFIG_OUTPUT_ENABLE:
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SMT,
+@@ -223,7 +209,7 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+                *  does not have SMT control
+                */
+               if (err != -ENOTSUPP)
+-                      goto err;
++                      break;
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR,
+                                      MTK_OUTPUT);
+@@ -232,7 +218,7 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+               /* regard all non-zero value as enable */
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_IES, !!arg);
+               if (err)
+-                      goto err;
++                      break;
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR,
+                                      MTK_INPUT);
+@@ -245,7 +231,7 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR,
+                                      MTK_OUTPUT);
+               if (err)
+-                      goto err;
++                      break;
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DO,
+                                      arg);
+@@ -257,15 +243,14 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+                */
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR, !arg);
+               if (err)
+-                      goto err;
++                      break;
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SMT, !!arg);
+               break;
+       case PIN_CONFIG_DRIVE_STRENGTH:
+-              if (hw->soc->drive_set)
+-                      err = hw->soc->drive_set(hw, desc, arg);
+-              else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->drive_set)
++                      break;
++              err = hw->soc->drive_set(hw, desc, arg);
+               break;
+       case MTK_PIN_CONFIG_TDSEL:
+       case MTK_PIN_CONFIG_RDSEL:
+@@ -275,26 +260,19 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+               break;
+       case MTK_PIN_CONFIG_PU_ADV:
+       case MTK_PIN_CONFIG_PD_ADV:
+-              if (hw->soc->adv_pull_set) {
+-                      bool pullup;
+-
+-                      pullup = param == MTK_PIN_CONFIG_PU_ADV;
+-                      err = hw->soc->adv_pull_set(hw, desc, pullup,
+-                                                  arg);
+-              } else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->adv_pull_set)
++                      break;
++              err = hw->soc->adv_pull_set(hw, desc,
++                                          (param == MTK_PIN_CONFIG_PU_ADV),
++                                          arg);
+               break;
+       case MTK_PIN_CONFIG_DRV_ADV:
+-              if (hw->soc->adv_drive_set)
+-                      err = hw->soc->adv_drive_set(hw, desc, arg);
+-              else
+-                      err = -ENOTSUPP;
++              if (!hw->soc->adv_drive_set)
++                      break;
++              err = hw->soc->adv_drive_set(hw, desc, arg);
+               break;
+-      default:
+-              err = -ENOTSUPP;
+       }
+-err:
+       return err;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.10/pinctrl-mediatek-paris-rework-support-for-pin_config.patch b/queue-5.10/pinctrl-mediatek-paris-rework-support-for-pin_config.patch
new file mode 100644 (file)
index 0000000..cb4efc7
--- /dev/null
@@ -0,0 +1,107 @@
+From b6607c0ca12cb3ce6bd09c62d87d400cf759badd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Mar 2024 17:13:34 +0800
+Subject: pinctrl: mediatek: paris: Rework support for
+ PIN_CONFIG_{INPUT,OUTPUT}_ENABLE
+
+From: Chen-Yu Tsai <wenst@chromium.org>
+
+[ Upstream commit c5d3b64c568a344e998830e0e94a7c04e372f89b ]
+
+There is a misinterpretation of some of the PIN_CONFIG_* options in this
+driver library. PIN_CONFIG_OUTPUT_ENABLE should refer to a buffer or
+switch in the output direction of the electrical path. The MediaTek
+hardware does not have such a thing. The driver incorrectly maps this
+option to the GPIO function's direction.
+
+Likewise, PIN_CONFIG_INPUT_ENABLE should refer to a buffer or switch in
+the input direction. The hardware does have such a mechanism, and is
+mapped to the IES bit. The driver however sets the direction in addition
+to the IES bit, which is incorrect. On readback, the IES bit isn't even
+considered.
+
+Ironically, the driver does not support readback for PIN_CONFIG_OUTPUT,
+while its readback of PIN_CONFIG_{INPUT,OUTPUT}_ENABLE is what it should
+be doing for PIN_CONFIG_OUTPUT.
+
+Rework support for these three options, so that PIN_CONFIG_OUTPUT_ENABLE
+is completely removed, PIN_CONFIG_INPUT_ENABLE is only linked to the IES
+bit, and PIN_CONFIG_OUTPUT is linked to the GPIO function's direction
+and output level.
+
+Fixes: 805250982bb5 ("pinctrl: mediatek: add pinctrl-paris that implements the vendor dt-bindings")
+Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Message-ID: <20240327091336.3434141-3-wenst@chromium.org>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/mediatek/pinctrl-paris.c | 38 +++++++-----------------
+ 1 file changed, 11 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
+index 95a71606c2865..7f1acfe1a413d 100644
+--- a/drivers/pinctrl/mediatek/pinctrl-paris.c
++++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
+@@ -113,20 +113,21 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
+               err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_SR, &ret);
+               break;
+       case PIN_CONFIG_INPUT_ENABLE:
+-      case PIN_CONFIG_OUTPUT_ENABLE:
++              err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_IES, &ret);
++              if (!ret)
++                      err = -EINVAL;
++              break;
++      case PIN_CONFIG_OUTPUT:
+               err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &ret);
+               if (err)
+                       break;
+-              /*     CONFIG     Current direction return value
+-               * -------------  ----------------- ----------------------
+-               * OUTPUT_ENABLE       output       1 (= HW value)
+-               *                     input        0 (= HW value)
+-               * INPUT_ENABLE        output       0 (= reverse HW value)
+-               *                     input        1 (= reverse HW value)
+-               */
+-              if (param == PIN_CONFIG_INPUT_ENABLE)
+-                      ret = !ret;
++              if (!ret) {
++                      err = -EINVAL;
++                      break;
++              }
++
++              err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DO, &ret);
+               break;
+       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
+               err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &ret);
+@@ -204,26 +205,9 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+                       break;
+               err = hw->soc->bias_set_combo(hw, desc, 0, arg);
+               break;
+-      case PIN_CONFIG_OUTPUT_ENABLE:
+-              err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SMT,
+-                                     MTK_DISABLE);
+-              /* Keep set direction to consider the case that a GPIO pin
+-               *  does not have SMT control
+-               */
+-              if (err != -ENOTSUPP)
+-                      break;
+-
+-              err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR,
+-                                     MTK_OUTPUT);
+-              break;
+       case PIN_CONFIG_INPUT_ENABLE:
+               /* regard all non-zero value as enable */
+               err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_IES, !!arg);
+-              if (err)
+-                      break;
+-
+-              err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR,
+-                                     MTK_INPUT);
+               break;
+       case PIN_CONFIG_SLEW_RATE:
+               /* regard all non-zero value as enable */
+-- 
+2.43.0
+
diff --git a/queue-5.10/pinctrl-meson-fix-typo-in-pdm-s-pin-name.patch b/queue-5.10/pinctrl-meson-fix-typo-in-pdm-s-pin-name.patch
new file mode 100644 (file)
index 0000000..a31d0d4
--- /dev/null
@@ -0,0 +1,56 @@
+From 5731238bc63baf1c826b9b745ed1181d2a134a06 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Mar 2024 14:30:58 +0300
+Subject: pinctrl/meson: fix typo in PDM's pin name
+
+From: Jan Dakinevich <jan.dakinevich@salutedevices.com>
+
+[ Upstream commit 368a90e651faeeb7049a876599cf2b0d74954796 ]
+
+Other pins have _a or _x suffix, but this one doesn't have any. Most
+likely this is a typo.
+
+Fixes: dabad1ff8561 ("pinctrl: meson: add pinctrl driver support for Meson-A1 SoC")
+Signed-off-by: Jan Dakinevich <jan.dakinevich@salutedevices.com>
+Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
+Message-ID: <20240325113058.248022-1-jan.dakinevich@salutedevices.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/meson/pinctrl-meson-a1.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/pinctrl/meson/pinctrl-meson-a1.c b/drivers/pinctrl/meson/pinctrl-meson-a1.c
+index 8abf750eac7ee..5be02a4fbe775 100644
+--- a/drivers/pinctrl/meson/pinctrl-meson-a1.c
++++ b/drivers/pinctrl/meson/pinctrl-meson-a1.c
+@@ -250,7 +250,7 @@ static const unsigned int pdm_dclk_x_pins[]                = { GPIOX_10 };
+ static const unsigned int pdm_din2_a_pins[]           = { GPIOA_6 };
+ static const unsigned int pdm_din1_a_pins[]           = { GPIOA_7 };
+ static const unsigned int pdm_din0_a_pins[]           = { GPIOA_8 };
+-static const unsigned int pdm_dclk_pins[]             = { GPIOA_9 };
++static const unsigned int pdm_dclk_a_pins[]           = { GPIOA_9 };
+ /* gen_clk */
+ static const unsigned int gen_clk_x_pins[]            = { GPIOX_7 };
+@@ -591,7 +591,7 @@ static struct meson_pmx_group meson_a1_periphs_groups[] = {
+       GROUP(pdm_din2_a,               3),
+       GROUP(pdm_din1_a,               3),
+       GROUP(pdm_din0_a,               3),
+-      GROUP(pdm_dclk,                 3),
++      GROUP(pdm_dclk_a,               3),
+       GROUP(pwm_c_a,                  3),
+       GROUP(pwm_b_a,                  3),
+@@ -755,7 +755,7 @@ static const char * const spi_a_groups[] = {
+ static const char * const pdm_groups[] = {
+       "pdm_din0_x", "pdm_din1_x", "pdm_din2_x", "pdm_dclk_x", "pdm_din2_a",
+-      "pdm_din1_a", "pdm_din0_a", "pdm_dclk",
++      "pdm_din1_a", "pdm_din0_a", "pdm_dclk_a",
+ };
+ static const char * const gen_clk_groups[] = {
+-- 
+2.43.0
+
diff --git a/queue-5.10/pinctrl-pinctrl-aspeed-g6-fix-register-offset-for-pi.patch b/queue-5.10/pinctrl-pinctrl-aspeed-g6-fix-register-offset-for-pi.patch
new file mode 100644 (file)
index 0000000..87f07b7
--- /dev/null
@@ -0,0 +1,97 @@
+From a3b206ed00107ecb79e9801b2497aa8b68edcb45 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Mar 2024 17:28:09 +0800
+Subject: pinctrl: pinctrl-aspeed-g6: Fix register offset for pinconf of
+ GPIOR-T
+
+From: Billy Tsai <billy_tsai@aspeedtech.com>
+
+[ Upstream commit c10cd03d69403fa0f00be8631bd4cb4690440ebd ]
+
+The register offset to disable the internal pull-down of GPIOR~T is 0x630
+instead of 0x620, as specified in the Ast2600 datasheet v15
+The datasheet can download from the official Aspeed website.
+
+Fixes: 15711ba6ff19 ("pinctrl: aspeed-g6: Add AST2600 pinconf support")
+Reported-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
+Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com>
+Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
+Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au>
+Message-ID: <20240313092809.2596644-1-billy_tsai@aspeedtech.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 34 +++++++++++-----------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c b/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
+index c2ba4064ce5b2..3e05444537ed1 100644
+--- a/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
++++ b/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
+@@ -43,7 +43,7 @@
+ #define SCU614                0x614 /* Disable GPIO Internal Pull-Down #1 */
+ #define SCU618                0x618 /* Disable GPIO Internal Pull-Down #2 */
+ #define SCU61C                0x61c /* Disable GPIO Internal Pull-Down #3 */
+-#define SCU620                0x620 /* Disable GPIO Internal Pull-Down #4 */
++#define SCU630                0x630 /* Disable GPIO Internal Pull-Down #4 */
+ #define SCU634                0x634 /* Disable GPIO Internal Pull-Down #5 */
+ #define SCU638                0x638 /* Disable GPIO Internal Pull-Down #6 */
+ #define SCU694                0x694 /* Multi-function Pin Control #25 */
+@@ -2471,38 +2471,38 @@ static struct aspeed_pin_config aspeed_g6_configs[] = {
+       ASPEED_PULL_DOWN_PINCONF(D14, SCU61C, 0),
+       /* GPIOS7 */
+-      ASPEED_PULL_DOWN_PINCONF(T24, SCU620, 23),
++      ASPEED_PULL_DOWN_PINCONF(T24, SCU630, 23),
+       /* GPIOS6 */
+-      ASPEED_PULL_DOWN_PINCONF(P23, SCU620, 22),
++      ASPEED_PULL_DOWN_PINCONF(P23, SCU630, 22),
+       /* GPIOS5 */
+-      ASPEED_PULL_DOWN_PINCONF(P24, SCU620, 21),
++      ASPEED_PULL_DOWN_PINCONF(P24, SCU630, 21),
+       /* GPIOS4 */
+-      ASPEED_PULL_DOWN_PINCONF(R26, SCU620, 20),
++      ASPEED_PULL_DOWN_PINCONF(R26, SCU630, 20),
+       /* GPIOS3*/
+-      ASPEED_PULL_DOWN_PINCONF(R24, SCU620, 19),
++      ASPEED_PULL_DOWN_PINCONF(R24, SCU630, 19),
+       /* GPIOS2 */
+-      ASPEED_PULL_DOWN_PINCONF(T26, SCU620, 18),
++      ASPEED_PULL_DOWN_PINCONF(T26, SCU630, 18),
+       /* GPIOS1 */
+-      ASPEED_PULL_DOWN_PINCONF(T25, SCU620, 17),
++      ASPEED_PULL_DOWN_PINCONF(T25, SCU630, 17),
+       /* GPIOS0 */
+-      ASPEED_PULL_DOWN_PINCONF(R23, SCU620, 16),
++      ASPEED_PULL_DOWN_PINCONF(R23, SCU630, 16),
+       /* GPIOR7 */
+-      ASPEED_PULL_DOWN_PINCONF(U26, SCU620, 15),
++      ASPEED_PULL_DOWN_PINCONF(U26, SCU630, 15),
+       /* GPIOR6 */
+-      ASPEED_PULL_DOWN_PINCONF(W26, SCU620, 14),
++      ASPEED_PULL_DOWN_PINCONF(W26, SCU630, 14),
+       /* GPIOR5 */
+-      ASPEED_PULL_DOWN_PINCONF(T23, SCU620, 13),
++      ASPEED_PULL_DOWN_PINCONF(T23, SCU630, 13),
+       /* GPIOR4 */
+-      ASPEED_PULL_DOWN_PINCONF(U25, SCU620, 12),
++      ASPEED_PULL_DOWN_PINCONF(U25, SCU630, 12),
+       /* GPIOR3*/
+-      ASPEED_PULL_DOWN_PINCONF(V26, SCU620, 11),
++      ASPEED_PULL_DOWN_PINCONF(V26, SCU630, 11),
+       /* GPIOR2 */
+-      ASPEED_PULL_DOWN_PINCONF(V24, SCU620, 10),
++      ASPEED_PULL_DOWN_PINCONF(V24, SCU630, 10),
+       /* GPIOR1 */
+-      ASPEED_PULL_DOWN_PINCONF(U24, SCU620, 9),
++      ASPEED_PULL_DOWN_PINCONF(U24, SCU630, 9),
+       /* GPIOR0 */
+-      ASPEED_PULL_DOWN_PINCONF(V25, SCU620, 8),
++      ASPEED_PULL_DOWN_PINCONF(V25, SCU630, 8),
+       /* GPIOX7 */
+       ASPEED_PULL_DOWN_PINCONF(AB10, SCU634, 31),
+-- 
+2.43.0
+
diff --git a/queue-5.10/power-rt9455-hide-unused-rt9455_boost_voltage_values.patch b/queue-5.10/power-rt9455-hide-unused-rt9455_boost_voltage_values.patch
new file mode 100644 (file)
index 0000000..2171ed9
--- /dev/null
@@ -0,0 +1,48 @@
+From ab34ca668b2a0dfc825fb215b28dfb3df754877f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Apr 2024 10:06:27 +0200
+Subject: power: rt9455: hide unused rt9455_boost_voltage_values
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 452d8950db3e839aba1bb13bc5378f4bac11fa04 ]
+
+The rt9455_boost_voltage_values[] array is only used when USB PHY
+support is enabled, causing a W=1 warning otherwise:
+
+drivers/power/supply/rt9455_charger.c:200:18: error: 'rt9455_boost_voltage_values' defined but not used [-Werror=unused-const-variable=]
+
+Enclose the definition in the same #ifdef as the references to it.
+
+Fixes: e86d69dd786e ("power_supply: Add support for Richtek RT9455 battery charger")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Link: https://lore.kernel.org/r/20240403080702.3509288-10-arnd@kernel.org
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/power/supply/rt9455_charger.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/power/supply/rt9455_charger.c b/drivers/power/supply/rt9455_charger.c
+index 594bb3b8a4d1e..a84afccd509f1 100644
+--- a/drivers/power/supply/rt9455_charger.c
++++ b/drivers/power/supply/rt9455_charger.c
+@@ -193,6 +193,7 @@ static const int rt9455_voreg_values[] = {
+       4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000
+ };
++#if IS_ENABLED(CONFIG_USB_PHY)
+ /*
+  * When the charger is in boost mode, REG02[7:2] represent boost output
+  * voltage.
+@@ -208,6 +209,7 @@ static const int rt9455_boost_voltage_values[] = {
+       5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000,
+       5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000,
+ };
++#endif
+ /* REG07[3:0] (VMREG) in uV */
+ static const int rt9455_vmreg_values[] = {
+-- 
+2.43.0
+
diff --git a/queue-5.10/regulator-mt6360-de-capitalize-devicetree-regulator-.patch b/queue-5.10/regulator-mt6360-de-capitalize-devicetree-regulator-.patch
new file mode 100644 (file)
index 0000000..9e783f9
--- /dev/null
@@ -0,0 +1,93 @@
+From 914d15b878f30d348245c00f114382471f6b7653 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 9 Apr 2024 16:44:38 +0200
+Subject: regulator: mt6360: De-capitalize devicetree regulator subnodes
+
+From: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+
+[ Upstream commit d3cf8a17498dd9104c04ad28eeac3ef3339f9f9f ]
+
+The MT6360 regulator binding, the example in the MT6360 mfd binding, and
+the devicetree users of those bindings are rightfully declaring MT6360
+regulator subnodes with non-capital names, and luckily without using the
+deprecated regulator-compatible property.
+
+With this driver declaring capitalized BUCKx/LDOx as of_match string for
+the node names, obviously no regulator gets probed: fix that by changing
+the MT6360_REGULATOR_DESC macro to add a "match" parameter which gets
+assigned to the of_match.
+
+Fixes: d321571d5e4c ("regulator: mt6360: Add support for MT6360 regulator")
+Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Link: https://msgid.link/r/20240409144438.410060-1-angelogioacchino.delregno@collabora.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/regulator/mt6360-regulator.c | 32 +++++++++++++++++-----------
+ 1 file changed, 20 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/regulator/mt6360-regulator.c b/drivers/regulator/mt6360-regulator.c
+index 15308ee29c13e..e30eb20bc8ea0 100644
+--- a/drivers/regulator/mt6360-regulator.c
++++ b/drivers/regulator/mt6360-regulator.c
+@@ -319,15 +319,15 @@ static unsigned int mt6360_regulator_of_map_mode(unsigned int hw_mode)
+       }
+ }
+-#define MT6360_REGULATOR_DESC(_name, _sname, ereg, emask, vreg,       vmask,  \
+-                            mreg, mmask, streg, stmask, vranges,      \
+-                            vcnts, offon_delay, irq_tbls)             \
++#define MT6360_REGULATOR_DESC(match, _name, _sname, ereg, emask, vreg,        \
++                            vmask, mreg, mmask, streg, stmask,        \
++                            vranges, vcnts, offon_delay, irq_tbls)    \
+ {                                                                     \
+       .desc = {                                                       \
+               .name = #_name,                                         \
+               .supply_name = #_sname,                                 \
+               .id =  MT6360_REGULATOR_##_name,                        \
+-              .of_match = of_match_ptr(#_name),                       \
++              .of_match = of_match_ptr(match),                        \
+               .regulators_node = of_match_ptr("regulator"),           \
+               .of_map_mode = mt6360_regulator_of_map_mode,            \
+               .owner = THIS_MODULE,                                   \
+@@ -351,21 +351,29 @@ static unsigned int mt6360_regulator_of_map_mode(unsigned int hw_mode)
+ }
+ static const struct mt6360_regulator_desc mt6360_regulator_descs[] =  {
+-      MT6360_REGULATOR_DESC(BUCK1, BUCK1_VIN, 0x117, 0x40, 0x110, 0xff, 0x117, 0x30, 0x117, 0x04,
++      MT6360_REGULATOR_DESC("buck1", BUCK1, BUCK1_VIN,
++                            0x117, 0x40, 0x110, 0xff, 0x117, 0x30, 0x117, 0x04,
+                             buck_vout_ranges, 256, 0, buck1_irq_tbls),
+-      MT6360_REGULATOR_DESC(BUCK2, BUCK2_VIN, 0x127, 0x40, 0x120, 0xff, 0x127, 0x30, 0x127, 0x04,
++      MT6360_REGULATOR_DESC("buck2", BUCK2, BUCK2_VIN,
++                            0x127, 0x40, 0x120, 0xff, 0x127, 0x30, 0x127, 0x04,
+                             buck_vout_ranges, 256, 0, buck2_irq_tbls),
+-      MT6360_REGULATOR_DESC(LDO6, LDO_VIN3, 0x137, 0x40, 0x13B, 0xff, 0x137, 0x30, 0x137, 0x04,
++      MT6360_REGULATOR_DESC("ldo6", LDO6, LDO_VIN3,
++                            0x137, 0x40, 0x13B, 0xff, 0x137, 0x30, 0x137, 0x04,
+                             ldo_vout_ranges1, 256, 0, ldo6_irq_tbls),
+-      MT6360_REGULATOR_DESC(LDO7, LDO_VIN3, 0x131, 0x40, 0x135, 0xff, 0x131, 0x30, 0x131, 0x04,
++      MT6360_REGULATOR_DESC("ldo7", LDO7, LDO_VIN3,
++                            0x131, 0x40, 0x135, 0xff, 0x131, 0x30, 0x131, 0x04,
+                             ldo_vout_ranges1, 256, 0, ldo7_irq_tbls),
+-      MT6360_REGULATOR_DESC(LDO1, LDO_VIN1, 0x217, 0x40, 0x21B, 0xff, 0x217, 0x30, 0x217, 0x04,
++      MT6360_REGULATOR_DESC("ldo1", LDO1, LDO_VIN1,
++                            0x217, 0x40, 0x21B, 0xff, 0x217, 0x30, 0x217, 0x04,
+                             ldo_vout_ranges2, 256, 0, ldo1_irq_tbls),
+-      MT6360_REGULATOR_DESC(LDO2, LDO_VIN1, 0x211, 0x40, 0x215, 0xff, 0x211, 0x30, 0x211, 0x04,
++      MT6360_REGULATOR_DESC("ldo2", LDO2, LDO_VIN1,
++                            0x211, 0x40, 0x215, 0xff, 0x211, 0x30, 0x211, 0x04,
+                             ldo_vout_ranges2, 256, 0, ldo2_irq_tbls),
+-      MT6360_REGULATOR_DESC(LDO3, LDO_VIN1, 0x205, 0x40, 0x209, 0xff, 0x205, 0x30, 0x205, 0x04,
++      MT6360_REGULATOR_DESC("ldo3", LDO3, LDO_VIN1,
++                            0x205, 0x40, 0x209, 0xff, 0x205, 0x30, 0x205, 0x04,
+                             ldo_vout_ranges2, 256, 100, ldo3_irq_tbls),
+-      MT6360_REGULATOR_DESC(LDO5, LDO_VIN2, 0x20B, 0x40, 0x20F, 0x7f, 0x20B, 0x30, 0x20B, 0x04,
++      MT6360_REGULATOR_DESC("ldo5", LDO5, LDO_VIN2,
++                            0x20B, 0x40, 0x20F, 0x7f, 0x20B, 0x30, 0x20B, 0x04,
+                             ldo_vout_ranges3, 128, 100, ldo5_irq_tbls),
+ };
+-- 
+2.43.0
+
diff --git a/queue-5.10/series b/queue-5.10/series
new file mode 100644 (file)
index 0000000..ee75ea8
--- /dev/null
@@ -0,0 +1,19 @@
+dmaengine-pl330-issue_pending-waits-until-wfp-state.patch
+dmaengine-revert-dmaengine-pl330-issue_pending-waits.patch
+wifi-nl80211-don-t-free-null-coalescing-rule.patch
+eeprom-at24-use-dev_err_probe-for-nvmem-register-fai.patch
+eeprom-at24-probe-for-ddr3-thermal-sensor-in-the-spd.patch
+eeprom-at24-fix-memory-corruption-race-condition.patch
+pinctrl-pinctrl-aspeed-g6-fix-register-offset-for-pi.patch
+pinctrl-meson-fix-typo-in-pdm-s-pin-name.patch
+pinctrl-core-delete-incorrect-free-in-pinctrl_enable.patch
+pinctrl-mediatek-paris-rework-mtk_pinconf_-get-set-s.patch
+pinctrl-mediatek-paris-fix-pin_config_input_schmitt_.patch
+pinctrl-mediatek-paris-rework-support-for-pin_config.patch
+sunrpc-add-a-struct-rpc_stats-arg-to-rpc_create_args.patch
+nfs-expose-proc-net-sunrpc-nfs-in-net-namespaces.patch
+nfs-make-the-rpc_stat-per-net-namespace.patch
+nfs-handle-error-of-rpc_proc_register-in-nfs_net_ini.patch
+power-rt9455-hide-unused-rt9455_boost_voltage_values.patch
+pinctrl-devicetree-fix-refcount-leak-in-pinctrl_dt_t.patch
+regulator-mt6360-de-capitalize-devicetree-regulator-.patch
diff --git a/queue-5.10/sunrpc-add-a-struct-rpc_stats-arg-to-rpc_create_args.patch b/queue-5.10/sunrpc-add-a-struct-rpc_stats-arg-to-rpc_create_args.patch
new file mode 100644 (file)
index 0000000..b6549db
--- /dev/null
@@ -0,0 +1,74 @@
+From fa22ff433c0a5c58aef853785a54436a6f847a95 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 15 Feb 2024 14:57:30 -0500
+Subject: sunrpc: add a struct rpc_stats arg to rpc_create_args
+
+From: Josef Bacik <josef@toxicpanda.com>
+
+[ Upstream commit 2057a48d0dd00c6a2a94ded7df2bf1d3f2a4a0da ]
+
+We want to be able to have our rpc stats handled in a per network
+namespace manner, so add an option to rpc_create_args to specify a
+different rpc_stats struct instead of using the one on the rpc_program.
+
+Signed-off-by: Josef Bacik <josef@toxicpanda.com>
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/sunrpc/clnt.h | 1 +
+ net/sunrpc/clnt.c           | 5 ++++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
+index 41ed614e69209..187e9f06cf64b 100644
+--- a/include/linux/sunrpc/clnt.h
++++ b/include/linux/sunrpc/clnt.h
+@@ -126,6 +126,7 @@ struct rpc_create_args {
+       const char              *servername;
+       const char              *nodename;
+       const struct rpc_program *program;
++      struct rpc_stat         *stats;
+       u32                     prognumber;     /* overrides program->number */
+       u32                     version;
+       rpc_authflavor_t        authflavor;
+diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
+index 360a3bcd91fe1..a5ce9b937c42e 100644
+--- a/net/sunrpc/clnt.c
++++ b/net/sunrpc/clnt.c
+@@ -395,7 +395,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
+       clnt->cl_maxproc  = version->nrprocs;
+       clnt->cl_prog     = args->prognumber ? : program->number;
+       clnt->cl_vers     = version->number;
+-      clnt->cl_stats    = program->stats;
++      clnt->cl_stats    = args->stats ? : program->stats;
+       clnt->cl_metrics  = rpc_alloc_iostats(clnt);
+       rpc_init_pipe_dir_head(&clnt->cl_pipedir_objects);
+       err = -ENOMEM;
+@@ -665,6 +665,7 @@ struct rpc_clnt *rpc_clone_client(struct rpc_clnt *clnt)
+               .version        = clnt->cl_vers,
+               .authflavor     = clnt->cl_auth->au_flavor,
+               .cred           = clnt->cl_cred,
++              .stats          = clnt->cl_stats,
+       };
+       return __rpc_clone_client(&args, clnt);
+ }
+@@ -687,6 +688,7 @@ rpc_clone_client_set_auth(struct rpc_clnt *clnt, rpc_authflavor_t flavor)
+               .version        = clnt->cl_vers,
+               .authflavor     = flavor,
+               .cred           = clnt->cl_cred,
++              .stats          = clnt->cl_stats,
+       };
+       return __rpc_clone_client(&args, clnt);
+ }
+@@ -967,6 +969,7 @@ struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *old,
+               .version        = vers,
+               .authflavor     = old->cl_auth->au_flavor,
+               .cred           = old->cl_cred,
++              .stats          = old->cl_stats,
+       };
+       struct rpc_clnt *clnt;
+       int err;
+-- 
+2.43.0
+
diff --git a/queue-5.10/wifi-nl80211-don-t-free-null-coalescing-rule.patch b/queue-5.10/wifi-nl80211-don-t-free-null-coalescing-rule.patch
new file mode 100644 (file)
index 0000000..82f6fc4
--- /dev/null
@@ -0,0 +1,37 @@
+From 1b6c4337d6a51acbaf66a30ff63e54182604c58c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 18 Apr 2024 10:52:23 +0200
+Subject: wifi: nl80211: don't free NULL coalescing rule
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+[ Upstream commit 801ea33ae82d6a9d954074fbcf8ea9d18f1543a7 ]
+
+If the parsing fails, we can dereference a NULL pointer here.
+
+Cc: stable@vger.kernel.org
+Fixes: be29b99a9b51 ("cfg80211/nl80211: Add packet coalesce support")
+Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
+Link: https://msgid.link/20240418105220.b328f80406e7.Id75d961050deb05b3e4e354e024866f350c68103@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/wireless/nl80211.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
+index 933591f9704b8..846e40dc00bb6 100644
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -12642,6 +12642,8 @@ static int nl80211_set_coalesce(struct sk_buff *skb, struct genl_info *info)
+ error:
+       for (i = 0; i < new_coalesce.n_rules; i++) {
+               tmp_rule = &new_coalesce.rules[i];
++              if (!tmp_rule)
++                      continue;
+               for (j = 0; j < tmp_rule->n_patterns; j++)
+                       kfree(tmp_rule->patterns[j].mask);
+               kfree(tmp_rule->patterns);
+-- 
+2.43.0
+