From 3e0dbc26b3b02dc1892a6b475b08e11cd6a99698 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Fri, 3 May 2024 12:37:06 -0400 Subject: [PATCH] Fixes for 5.10 Signed-off-by: Sasha Levin --- ...-issue_pending-waits-until-wfp-state.patch | 46 +++ ...-dmaengine-pl330-issue_pending-waits.patch | 39 +++ ...fix-memory-corruption-race-condition.patch | 65 ++++ ...e-for-ddr3-thermal-sensor-in-the-spd.patch | 82 +++++ ...dev_err_probe-for-nvmem-register-fai.patch | 39 +++ ...roc-net-sunrpc-nfs-in-net-namespaces.patch | 71 +++++ ...-of-rpc_proc_register-in-nfs_net_ini.patch | 104 ++++++ ...-make-the-rpc_stat-per-net-namespace.patch | 113 +++++++ ...ete-incorrect-free-in-pinctrl_enable.patch | 47 +++ ...ee-fix-refcount-leak-in-pinctrl_dt_t.patch | 52 +++ ...-paris-fix-pin_config_input_schmitt_.patch | 46 +++ ...-paris-rework-mtk_pinconf_-get-set-s.patch | 301 ++++++++++++++++++ ...-paris-rework-support-for-pin_config.patch | 107 +++++++ ...trl-meson-fix-typo-in-pdm-s-pin-name.patch | 56 ++++ ...aspeed-g6-fix-register-offset-for-pi.patch | 97 ++++++ ...e-unused-rt9455_boost_voltage_values.patch | 48 +++ ...-de-capitalize-devicetree-regulator-.patch | 93 ++++++ queue-5.10/series | 19 ++ ...uct-rpc_stats-arg-to-rpc_create_args.patch | 74 +++++ ...0211-don-t-free-null-coalescing-rule.patch | 37 +++ 20 files changed, 1536 insertions(+) create mode 100644 queue-5.10/dmaengine-pl330-issue_pending-waits-until-wfp-state.patch create mode 100644 queue-5.10/dmaengine-revert-dmaengine-pl330-issue_pending-waits.patch create mode 100644 queue-5.10/eeprom-at24-fix-memory-corruption-race-condition.patch create mode 100644 queue-5.10/eeprom-at24-probe-for-ddr3-thermal-sensor-in-the-spd.patch create mode 100644 queue-5.10/eeprom-at24-use-dev_err_probe-for-nvmem-register-fai.patch create mode 100644 queue-5.10/nfs-expose-proc-net-sunrpc-nfs-in-net-namespaces.patch create mode 100644 queue-5.10/nfs-handle-error-of-rpc_proc_register-in-nfs_net_ini.patch create mode 100644 queue-5.10/nfs-make-the-rpc_stat-per-net-namespace.patch create mode 100644 queue-5.10/pinctrl-core-delete-incorrect-free-in-pinctrl_enable.patch create mode 100644 queue-5.10/pinctrl-devicetree-fix-refcount-leak-in-pinctrl_dt_t.patch create mode 100644 queue-5.10/pinctrl-mediatek-paris-fix-pin_config_input_schmitt_.patch create mode 100644 queue-5.10/pinctrl-mediatek-paris-rework-mtk_pinconf_-get-set-s.patch create mode 100644 queue-5.10/pinctrl-mediatek-paris-rework-support-for-pin_config.patch create mode 100644 queue-5.10/pinctrl-meson-fix-typo-in-pdm-s-pin-name.patch create mode 100644 queue-5.10/pinctrl-pinctrl-aspeed-g6-fix-register-offset-for-pi.patch create mode 100644 queue-5.10/power-rt9455-hide-unused-rt9455_boost_voltage_values.patch create mode 100644 queue-5.10/regulator-mt6360-de-capitalize-devicetree-regulator-.patch create mode 100644 queue-5.10/series create mode 100644 queue-5.10/sunrpc-add-a-struct-rpc_stats-arg-to-rpc_create_args.patch create mode 100644 queue-5.10/wifi-nl80211-don-t-free-null-coalescing-rule.patch 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 index 00000000000..b1d5c19e6c7 --- /dev/null +++ b/queue-5.10/dmaengine-pl330-issue_pending-waits-until-wfp-state.patch @@ -0,0 +1,46 @@ +From d7abe73fc4ca573deb3e778dec247e1b4c52b802 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 19 Dec 2023 14:50:26 +0900 +Subject: dmaengine: pl330: issue_pending waits until WFP state + +From: Bumyong Lee + +[ 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 +Link: https://lore.kernel.org/r/20231219055026.118695-1-bumyong.lee@samsung.com +Signed-off-by: Vinod Koul +Stable-dep-of: afc89870ea67 ("dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP state"") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..768833f8373 --- /dev/null +++ b/queue-5.10/dmaengine-revert-dmaengine-pl330-issue_pending-waits.patch @@ -0,0 +1,39 @@ +From c8ae9e48e66cfee73fb4835b0e74dd617eb568da Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 28 Mar 2024 12:21:51 +0530 +Subject: dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP + state" + +From: Vinod Koul + +[ 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 +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..59f008ed30c --- /dev/null +++ b/queue-5.10/eeprom-at24-fix-memory-corruption-race-condition.patch @@ -0,0 +1,65 @@ +From 6eaad431f16a1dae845246747738ed1e596ad950 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 22 Apr 2024 17:43:36 +0000 +Subject: eeprom: at24: fix memory corruption race condition + +From: Daniel Okazaki + +[ 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 +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 +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..65ad36ecbc2 --- /dev/null +++ b/queue-5.10/eeprom-at24-probe-for-ddr3-thermal-sensor-in-the-spd.patch @@ -0,0 +1,82 @@ +From 93573686928a496fcdadbe4a6999747cb49ab9c9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 20 Dec 2023 13:55:58 +0100 +Subject: eeprom: at24: Probe for DDR3 thermal sensor in the SPD case + +From: Heiner Kallweit + +[ 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 +Link: https://lore.kernel.org/r/68113672-3724-44d5-9ff8-313dd6628f8c@gmail.com +Signed-off-by: Greg Kroah-Hartman +Stable-dep-of: f42c97027fb7 ("eeprom: at24: fix memory corruption race condition") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..59d3743a031 --- /dev/null +++ b/queue-5.10/eeprom-at24-use-dev_err_probe-for-nvmem-register-fai.patch @@ -0,0 +1,39 @@ +From 5f8813c15d4781a4ed4ba66c13f804e69ba92c33 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 16 May 2023 10:05:53 +0200 +Subject: eeprom: at24: Use dev_err_probe for nvmem register failure + +From: Alexander Stein + +[ 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 +Signed-off-by: Bartosz Golaszewski +Stable-dep-of: f42c97027fb7 ("eeprom: at24: fix memory corruption race condition") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..9591e237513 --- /dev/null +++ b/queue-5.10/nfs-expose-proc-net-sunrpc-nfs-in-net-namespaces.patch @@ -0,0 +1,71 @@ +From c27b534a0e6fd67b2c2762b060c80e4e7f8794bd Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 15 Feb 2024 14:57:31 -0500 +Subject: nfs: expose /proc/net/sunrpc/nfs in net namespaces + +From: Josef Bacik + +[ 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 +Signed-off-by: Trond Myklebust +Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..165d17bbf75 --- /dev/null +++ b/queue-5.10/nfs-handle-error-of-rpc_proc_register-in-nfs_net_ini.patch @@ -0,0 +1,104 @@ +From 0a159801006d8ca9b8d4a2de7c9ec0f0a7b967dc Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 4 Apr 2024 15:12:00 -0700 +Subject: nfs: Handle error of rpc_proc_register() in nfs_net_init(). + +From: Kuniyuki Iwashima + +[ 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: + + 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 + + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Reported-by: syzkaller +Signed-off-by: Kuniyuki Iwashima +Signed-off-by: Trond Myklebust +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..08a7df3b89d --- /dev/null +++ b/queue-5.10/nfs-make-the-rpc_stat-per-net-namespace.patch @@ -0,0 +1,113 @@ +From ed64ed940f6337e6dee0fefcb2f9e9ffd22ded60 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 15 Feb 2024 14:57:32 -0500 +Subject: nfs: make the rpc_stat per net namespace + +From: Josef Bacik + +[ 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 +Signed-off-by: Trond Myklebust +Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().") +Signed-off-by: Sasha Levin +--- + 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 + #include + #include ++#include + + 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 index 00000000000..bbd86aa283b --- /dev/null +++ b/queue-5.10/pinctrl-core-delete-incorrect-free-in-pinctrl_enable.patch @@ -0,0 +1,47 @@ +From 371ae570e4f0bbe0ee5658102190067d09eae542 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 21 Mar 2024 09:38:39 +0300 +Subject: pinctrl: core: delete incorrect free in pinctrl_enable() + +From: Dan Carpenter + +[ 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 +Message-ID: <578fbe56-44e9-487c-ae95-29b695650f7c@moroto.mountain> +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..752e2e3f3c6 --- /dev/null +++ b/queue-5.10/pinctrl-devicetree-fix-refcount-leak-in-pinctrl_dt_t.patch @@ -0,0 +1,52 @@ +From e68fb23f8dc5fe05a22dd2c9201dede0e79b8936 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 Apr 2024 18:53:28 +0800 +Subject: pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map() + +From: Zeng Heng + +[ 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 +Signed-off-by: Zeng Heng +Reviewed-by: Dan Carpenter +Message-ID: <20240415105328.3651441-1-zengheng4@huawei.com> +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..1b6abdf99ec --- /dev/null +++ b/queue-5.10/pinctrl-mediatek-paris-fix-pin_config_input_schmitt_.patch @@ -0,0 +1,46 @@ +From 7e6d40f4db79978efa9e63d59017218b837f7c54 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 27 Mar 2024 17:13:33 +0800 +Subject: pinctrl: mediatek: paris: Fix PIN_CONFIG_INPUT_SCHMITT_ENABLE + readback + +From: Chen-Yu Tsai + +[ 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 +Reviewed-by: AngeloGioacchino Del Regno +Message-ID: <20240327091336.3434141-2-wenst@chromium.org> +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..9880e9c5ce0 --- /dev/null +++ b/queue-5.10/pinctrl-mediatek-paris-rework-mtk_pinconf_-get-set-s.patch @@ -0,0 +1,301 @@ +From ac5675cae7c3b89b6c6e35fd0163faa73eb5b9d6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: AngeloGioacchino Del Regno +Link: https://lore.kernel.org/r/20220308100956.2750295-8-wenst@chromium.org +Signed-off-by: Linus Walleij +Stable-dep-of: 08f66a8edd08 ("pinctrl: mediatek: paris: Fix PIN_CONFIG_INPUT_SCHMITT_ENABLE readback") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..cb4efc75193 --- /dev/null +++ b/queue-5.10/pinctrl-mediatek-paris-rework-support-for-pin_config.patch @@ -0,0 +1,107 @@ +From b6607c0ca12cb3ce6bd09c62d87d400cf759badd Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Reviewed-by: AngeloGioacchino Del Regno +Message-ID: <20240327091336.3434141-3-wenst@chromium.org> +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..a31d0d41252 --- /dev/null +++ b/queue-5.10/pinctrl-meson-fix-typo-in-pdm-s-pin-name.patch @@ -0,0 +1,56 @@ +From 5731238bc63baf1c826b9b745ed1181d2a134a06 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 25 Mar 2024 14:30:58 +0300 +Subject: pinctrl/meson: fix typo in PDM's pin name + +From: Jan Dakinevich + +[ 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 +Reviewed-by: Neil Armstrong +Message-ID: <20240325113058.248022-1-jan.dakinevich@salutedevices.com> +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..87f07b7884b --- /dev/null +++ b/queue-5.10/pinctrl-pinctrl-aspeed-g6-fix-register-offset-for-pi.patch @@ -0,0 +1,97 @@ +From a3b206ed00107ecb79e9801b2497aa8b68edcb45 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Billy Tsai +Reviewed-by: Paul Menzel +Reviewed-by: Andrew Jeffery +Message-ID: <20240313092809.2596644-1-billy_tsai@aspeedtech.com> +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..2171ed90f86 --- /dev/null +++ b/queue-5.10/power-rt9455-hide-unused-rt9455_boost_voltage_values.patch @@ -0,0 +1,48 @@ +From ab34ca668b2a0dfc825fb215b28dfb3df754877f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 3 Apr 2024 10:06:27 +0200 +Subject: power: rt9455: hide unused rt9455_boost_voltage_values + +From: Arnd Bergmann + +[ 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 +Link: https://lore.kernel.org/r/20240403080702.3509288-10-arnd@kernel.org +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..9e783f9db7e --- /dev/null +++ b/queue-5.10/regulator-mt6360-de-capitalize-devicetree-regulator-.patch @@ -0,0 +1,93 @@ +From 914d15b878f30d348245c00f114382471f6b7653 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 9 Apr 2024 16:44:38 +0200 +Subject: regulator: mt6360: De-capitalize devicetree regulator subnodes + +From: AngeloGioacchino Del Regno + +[ 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 +Link: https://msgid.link/r/20240409144438.410060-1-angelogioacchino.delregno@collabora.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..ee75ea8c442 --- /dev/null +++ b/queue-5.10/series @@ -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 index 00000000000..b6549dbf704 --- /dev/null +++ b/queue-5.10/sunrpc-add-a-struct-rpc_stats-arg-to-rpc_create_args.patch @@ -0,0 +1,74 @@ +From fa22ff433c0a5c58aef853785a54436a6f847a95 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 15 Feb 2024 14:57:30 -0500 +Subject: sunrpc: add a struct rpc_stats arg to rpc_create_args + +From: Josef Bacik + +[ 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 +Signed-off-by: Trond Myklebust +Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..82f6fc433e3 --- /dev/null +++ b/queue-5.10/wifi-nl80211-don-t-free-null-coalescing-rule.patch @@ -0,0 +1,37 @@ +From 1b6c4337d6a51acbaf66a30ff63e54182604c58c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 18 Apr 2024 10:52:23 +0200 +Subject: wifi: nl80211: don't free NULL coalescing rule + +From: Johannes Berg + +[ 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 +Link: https://msgid.link/20240418105220.b328f80406e7.Id75d961050deb05b3e4e354e024866f350c68103@changeid +Signed-off-by: Johannes Berg +Signed-off-by: Sasha Levin +--- + 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 + -- 2.47.2