From: Greg Kroah-Hartman Date: Mon, 17 Aug 2026 13:14:02 +0000 (+0200) Subject: 5.10-stable patches X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch hwmon-adt7470-fix-fans-stuck-in-manual-mode-on-i2c-errors.patch prestera-fix-fallback-to-previous-version-on-same-major-version.patch --- diff --git a/queue-5.10/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch b/queue-5.10/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch new file mode 100644 index 0000000000..7d8ec9b967 --- /dev/null +++ b/queue-5.10/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch @@ -0,0 +1,31 @@ +From b6abcc19566509ab4812bd5ae5df46515d0c1d70 Mon Sep 17 00:00:00 2001 +From: Javier Carrasco +Date: Wed, 2 Oct 2024 03:08:09 +0200 +Subject: hwmon: (adt7470) Add missing dependency on REGMAP_I2C + +From: Javier Carrasco + +commit b6abcc19566509ab4812bd5ae5df46515d0c1d70 upstream. + +This driver requires REGMAP_I2C to be selected in order to get access to +regmap_config and devm_regmap_init_i2c. Add the missing dependency. + +Fixes: ef67959c4253 ("hwmon: (adt7470) Convert to use regmap") +Signed-off-by: Javier Carrasco +Message-ID: <20241002-hwmon-select-regmap-v1-2-548d03268934@gmail.com> +Signed-off-by: Guenter Roeck +Signed-off-by: Greg Kroah-Hartman +--- + drivers/hwmon/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/hwmon/Kconfig ++++ b/drivers/hwmon/Kconfig +@@ -239,6 +239,7 @@ config SENSORS_ADT7462 + config SENSORS_ADT7470 + tristate "Analog Devices ADT7470" + depends on I2C ++ select REGMAP_I2C + help + If you say yes here you get support for the Analog Devices + ADT7470 temperature monitoring chips. diff --git a/queue-5.10/hwmon-adt7470-fix-fans-stuck-in-manual-mode-on-i2c-errors.patch b/queue-5.10/hwmon-adt7470-fix-fans-stuck-in-manual-mode-on-i2c-errors.patch new file mode 100644 index 0000000000..7d0a8390a9 --- /dev/null +++ b/queue-5.10/hwmon-adt7470-fix-fans-stuck-in-manual-mode-on-i2c-errors.patch @@ -0,0 +1,110 @@ +From 625a2c02a1c04571232a746fe188b4d9a8d63edd Mon Sep 17 00:00:00 2001 +From: Luiz Angelo Daros de Luca +Date: Mon, 27 Jul 2026 21:22:17 -0300 +Subject: hwmon: (adt7470) Fix fans stuck in manual mode on I2C errors + +From: Luiz Angelo Daros de Luca + +commit 625a2c02a1c04571232a746fe188b4d9a8d63edd upstream. + +During adt7470_read_temperatures(), the driver temporarily switches +the PWM channels to manual mode, performs the temperature collection, +and then restores the original configuration registers. + +However, if an I2C transaction fails at any point after entering manual +mode, the function aborts and returns immediately. This leaves the +configuration registers un-restored, permanently trapping the fans in +manual mode. + +Introduce a recovery path to ensure that the original PWM configuration +registers are always restored, even when intermediate I2C operations +fail. + +Reported-by: sashiko-bot@kernel.org +Closes: https://lore.kernel.org/r/20260716213252.EACA71F000E9@smtp.kernel.org +Fixes: ef67959c4253 ("hwmon: (adt7470) Convert to use regmap") +Signed-off-by: Luiz Angelo Daros de Luca +Link: https://lore.kernel.org/r/20260727-adt7470_fixes-v2-1-598e38a46ba6@gmail.com +Signed-off-by: Guenter Roeck +Signed-off-by: Greg Kroah-Hartman +--- + drivers/hwmon/adt7470.c | 40 +++++++++++++++++++++++++++++----------- + 1 file changed, 29 insertions(+), 11 deletions(-) + +--- a/drivers/hwmon/adt7470.c ++++ b/drivers/hwmon/adt7470.c +@@ -205,11 +205,12 @@ static inline int adt7470_write_word_dat + /* Probe for temperature sensors. Assumes lock is held */ + static int adt7470_read_temperatures(struct adt7470_data *data) + { +- unsigned long res; ++ struct device *dev = regmap_get_device(data->regmap); ++ u8 pwm[ADT7470_FAN_COUNT]; + unsigned int pwm_cfg[2]; +- int err; ++ unsigned long res; ++ int err, err2; + int i; +- u8 pwm[ADT7470_FAN_COUNT]; + + /* save pwm[1-4] config register */ + err = regmap_read(data->regmap, ADT7470_REG_PWM_CFG(0), &pwm_cfg[0]); +@@ -233,19 +234,19 @@ static int adt7470_read_temperatures(str + err = regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(2), + ADT7470_PWM_AUTO_MASK, 0); + if (err < 0) +- return err; ++ goto out_restore; + + /* write pwm control to whatever it was */ + err = regmap_bulk_write(data->regmap, ADT7470_REG_PWM(0), &pwm[0], + ADT7470_PWM_COUNT); + if (err < 0) +- return err; ++ goto out_restore; + + /* start reading temperature sensors */ + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG, + ADT7470_T05_STB_MASK, ADT7470_T05_STB_MASK); + if (err < 0) +- return err; ++ goto out_restore; + + /* Delay is 200ms * number of temp sensors. */ + res = msleep_interruptible((data->num_temp_sensors >= 0 ? +@@ -256,13 +257,30 @@ static int adt7470_read_temperatures(str + err = regmap_update_bits(data->regmap, ADT7470_REG_CFG, + ADT7470_T05_STB_MASK, 0); + if (err < 0) +- return err; ++ goto out_restore; + ++out_restore: + /* restore pwm[1-4] config registers */ +- err = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]); +- if (err < 0) +- return err; +- err = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]); ++ err2 = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]); ++ if (err2 < 0) { ++ dev_warn_ratelimited(dev, ++ "failed to restore PWM{1,2} config (%d)\n", ++ err2); ++ ++ if (!err) ++ err = err2; ++ } ++ ++ err2 = regmap_write(data->regmap, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]); ++ if (err2 < 0) { ++ dev_warn_ratelimited(dev, ++ "failed to restore PWM{3,4} config (%d)\n", ++ err2); ++ ++ if (!err) ++ err = err2; ++ } ++ + if (err < 0) + return err; + diff --git a/queue-5.10/prestera-fix-fallback-to-previous-version-on-same-major-version.patch b/queue-5.10/prestera-fix-fallback-to-previous-version-on-same-major-version.patch new file mode 100644 index 0000000000..4dbe19d6b0 --- /dev/null +++ b/queue-5.10/prestera-fix-fallback-to-previous-version-on-same-major-version.patch @@ -0,0 +1,61 @@ +From b755c25fbcd568821a3bb0e0d5c2daa5fcb00bba Mon Sep 17 00:00:00 2001 +From: Jonas Gorski +Date: Wed, 2 Aug 2023 11:23:56 +0200 +Subject: prestera: fix fallback to previous version on same major version + +From: Jonas Gorski + +commit b755c25fbcd568821a3bb0e0d5c2daa5fcb00bba upstream. + +When both supported and previous version have the same major version, +and the firmwares are missing, the driver ends in a loop requesting the +same (previous) version over and over again: + + [ 76.327413] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.1.img firmware, fall-back to previous 4.0 version + [ 76.339802] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + [ 76.352162] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + [ 76.364502] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + [ 76.376848] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + [ 76.389183] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + [ 76.401522] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + [ 76.413860] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + [ 76.426199] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.0.img firmware, fall-back to previous 4.0 version + ... + +Fix this by inverting the check to that we aren't yet at the previous +version, and also check the minor version. + +This also catches the case where both versions are the same, as it was +after commit bb5dbf2cc64d ("net: marvell: prestera: add firmware v4.0 +support"). + +With this fix applied: + + [ 88.499622] Prestera DX 0000:01:00.0: missing latest mrvl/prestera/mvsw_prestera_fw-v4.1.img firmware, fall-back to previous 4.0 version + [ 88.511995] Prestera DX 0000:01:00.0: failed to request previous firmware: mrvl/prestera/mvsw_prestera_fw-v4.0.img + [ 88.522403] Prestera DX: probe of 0000:01:00.0 failed with error -2 + +Fixes: 47f26018a414 ("net: marvell: prestera: try to load previous fw version") +Signed-off-by: Jonas Gorski +Acked-by: Elad Nachman +Reviewed-by: Jesse Brandeburg +Acked-by: Taras Chornyi +Link: https://lore.kernel.org/r/20230802092357.163944-1-jonas.gorski@bisdn.de +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/marvell/prestera/prestera_pci.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/marvell/prestera/prestera_pci.c ++++ b/drivers/net/ethernet/marvell/prestera/prestera_pci.c +@@ -629,7 +629,8 @@ pick_fw_ver: + + err = request_firmware_direct(&fw->bin, fw_path, fw->dev.dev); + if (err) { +- if (ver_maj == PRESTERA_SUPP_FW_MAJ_VER) { ++ if (ver_maj != PRESTERA_PREV_FW_MAJ_VER || ++ ver_min != PRESTERA_PREV_FW_MIN_VER) { + ver_maj = PRESTERA_PREV_FW_MAJ_VER; + ver_min = PRESTERA_PREV_FW_MIN_VER; + diff --git a/queue-5.10/series b/queue-5.10/series index 73983dbd01..6612030e76 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -384,3 +384,6 @@ sctp-keep-chunk-transport-in-step-with-the-list-it-is-queued-on.patch sctp-fix-use-after-free-of-cached-asconf-chunk.patch sctp-clear-new_transport-when-removing-a-peer.patch thunderbolt-bound-the-drom-dual-link-port-number-before-indexing-sw-ports.patch +prestera-fix-fallback-to-previous-version-on-same-major-version.patch +hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch +hwmon-adt7470-fix-fans-stuck-in-manual-mode-on-i2c-errors.patch