]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.8-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 May 2024 14:13:15 +0000 (16:13 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 May 2024 14:13:15 +0000 (16:13 +0200)
added patches:
clk-samsung-revert-clk-use-device_get_match_data.patch
clk-sunxi-ng-a64-set-minimum-and-maximum-rate-for-pll-mipi.patch
clk-sunxi-ng-common-support-minimum-and-maximum-rate.patch
dyndbg-fix-old-bug_on-in-control-parser.patch
mei-me-add-lunar-lake-point-m-did.patch
slimbus-qcom-ngd-ctrl-add-timeout-for-wait-operation.patch

queue-6.8/clk-samsung-revert-clk-use-device_get_match_data.patch [new file with mode: 0644]
queue-6.8/clk-sunxi-ng-a64-set-minimum-and-maximum-rate-for-pll-mipi.patch [new file with mode: 0644]
queue-6.8/clk-sunxi-ng-common-support-minimum-and-maximum-rate.patch [new file with mode: 0644]
queue-6.8/dyndbg-fix-old-bug_on-in-control-parser.patch [new file with mode: 0644]
queue-6.8/mei-me-add-lunar-lake-point-m-did.patch [new file with mode: 0644]
queue-6.8/series
queue-6.8/slimbus-qcom-ngd-ctrl-add-timeout-for-wait-operation.patch [new file with mode: 0644]

diff --git a/queue-6.8/clk-samsung-revert-clk-use-device_get_match_data.patch b/queue-6.8/clk-samsung-revert-clk-use-device_get_match_data.patch
new file mode 100644 (file)
index 0000000..e716a71
--- /dev/null
@@ -0,0 +1,79 @@
+From aacb99de1099346244d488bdf7df489a44278574 Mon Sep 17 00:00:00 2001
+From: Marek Szyprowski <m.szyprowski@samsung.com>
+Date: Tue, 30 Apr 2024 20:46:56 +0200
+Subject: clk: samsung: Revert "clk: Use device_get_match_data()"
+
+From: Marek Szyprowski <m.szyprowski@samsung.com>
+
+commit aacb99de1099346244d488bdf7df489a44278574 upstream.
+
+device_get_match_data() function should not be used on the device other
+than the one matched to the given driver, because it always returns the
+match_data of the matched driver. In case of exynos-clkout driver, the
+original code matches the OF IDs on the PARENT device, so replacing it
+with of_device_get_match_data() broke the driver.
+
+This has been already pointed once in commit 2bc5febd05ab ("clk: samsung:
+Revert "clk: samsung: exynos-clkout: Use of_device_get_match_data()"").
+To avoid further confusion, add a comment about this special case, which
+requires direct of_match_device() call to pass custom IDs array.
+
+This partially reverts commit 409c39ec92a35e3708f5b5798c78eae78512cd71.
+
+Cc: <stable@vger.kernel.org>
+Fixes: 409c39ec92a3 ("clk: Use device_get_match_data()")
+Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Link: https://lore.kernel.org/r/20240425075628.838497-1-m.szyprowski@samsung.com
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://lore.kernel.org/r/20240430184656.357805-1-krzysztof.kozlowski@linaro.org
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/clk/samsung/clk-exynos-clkout.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/clk/samsung/clk-exynos-clkout.c b/drivers/clk/samsung/clk-exynos-clkout.c
+index 3484e6cc80ad..503c6f5b20d5 100644
+--- a/drivers/clk/samsung/clk-exynos-clkout.c
++++ b/drivers/clk/samsung/clk-exynos-clkout.c
+@@ -13,9 +13,9 @@
+ #include <linux/io.h>
+ #include <linux/of.h>
+ #include <linux/of_address.h>
++#include <linux/of_device.h>
+ #include <linux/platform_device.h>
+ #include <linux/pm.h>
+-#include <linux/property.h>
+ #define EXYNOS_CLKOUT_NR_CLKS         1
+ #define EXYNOS_CLKOUT_PARENTS         32
+@@ -84,17 +84,24 @@ MODULE_DEVICE_TABLE(of, exynos_clkout_ids);
+ static int exynos_clkout_match_parent_dev(struct device *dev, u32 *mux_mask)
+ {
+       const struct exynos_clkout_variant *variant;
++      const struct of_device_id *match;
+       if (!dev->parent) {
+               dev_err(dev, "not instantiated from MFD\n");
+               return -EINVAL;
+       }
+-      variant = device_get_match_data(dev->parent);
+-      if (!variant) {
++      /*
++       * 'exynos_clkout_ids' arrays is not the ids array matched by
++       * the dev->parent driver, so of_device_get_match_data() or
++       * device_get_match_data() cannot be used here.
++       */
++      match = of_match_device(exynos_clkout_ids, dev->parent);
++      if (!match) {
+               dev_err(dev, "cannot match parent device\n");
+               return -EINVAL;
+       }
++      variant = match->data;
+       *mux_mask = variant->mux_mask;
+-- 
+2.45.0
+
diff --git a/queue-6.8/clk-sunxi-ng-a64-set-minimum-and-maximum-rate-for-pll-mipi.patch b/queue-6.8/clk-sunxi-ng-a64-set-minimum-and-maximum-rate-for-pll-mipi.patch
new file mode 100644 (file)
index 0000000..3c70cbe
--- /dev/null
@@ -0,0 +1,48 @@
+From 69f16d9b789821183d342719d2ebd4a5ac7178bc Mon Sep 17 00:00:00 2001
+From: Frank Oltmanns <frank@oltmanns.dev>
+Date: Sun, 10 Mar 2024 14:21:12 +0100
+Subject: clk: sunxi-ng: a64: Set minimum and maximum rate for PLL-MIPI
+
+From: Frank Oltmanns <frank@oltmanns.dev>
+
+commit 69f16d9b789821183d342719d2ebd4a5ac7178bc upstream.
+
+When the Allwinner A64's TCON0 searches the ideal rate for the connected
+panel, it may happen that it requests a rate from its parent PLL-MIPI
+which PLL-MIPI does not support.
+
+This happens for example on the Olimex TERES-I laptop where TCON0
+requests PLL-MIPI to change to a rate of several GHz which causes the
+panel to stay blank. It also happens on the pinephone where a rate of
+less than 500 MHz is requested which causes instabilities on some
+phones.
+
+Set the minimum and maximum rate of Allwinner A64's PLL-MIPI according
+to the Allwinner User Manual.
+
+Fixes: ca1170b69968 ("clk: sunxi-ng: a64: force select PLL_MIPI in TCON0 mux")
+Reported-by: Diego Roversi <diegor@tiscali.it>
+Closes: https://groups.google.com/g/linux-sunxi/c/Rh-Uqqa66bw
+Tested-by: Diego Roversi <diegor@tiscali.it>
+Cc: stable@vger.kernel.org
+Reviewed-by: Maxime Ripard <mripard@kernel.org>
+Signed-off-by: Frank Oltmanns <frank@oltmanns.dev>
+Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
+Link: https://lore.kernel.org/r/20240310-pinephone-pll-fixes-v4-2-46fc80c83637@oltmanns.dev
+Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/clk/sunxi-ng/ccu-sun50i-a64.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/clk/sunxi-ng/ccu-sun50i-a64.c
++++ b/drivers/clk/sunxi-ng/ccu-sun50i-a64.c
+@@ -182,6 +182,8 @@ static struct ccu_nkm pll_mipi_clk = {
+                                             &ccu_nkm_ops,
+                                             CLK_SET_RATE_UNGATE | CLK_SET_RATE_PARENT),
+               .features       = CCU_FEATURE_CLOSEST_RATE,
++              .min_rate       = 500000000,
++              .max_rate       = 1400000000,
+       },
+ };
diff --git a/queue-6.8/clk-sunxi-ng-common-support-minimum-and-maximum-rate.patch b/queue-6.8/clk-sunxi-ng-common-support-minimum-and-maximum-rate.patch
new file mode 100644 (file)
index 0000000..1b6d43a
--- /dev/null
@@ -0,0 +1,84 @@
+From b914ec33b391ec766545a41f0cfc0de3e0b388d7 Mon Sep 17 00:00:00 2001
+From: Frank Oltmanns <frank@oltmanns.dev>
+Date: Sun, 10 Mar 2024 14:21:11 +0100
+Subject: clk: sunxi-ng: common: Support minimum and maximum rate
+
+From: Frank Oltmanns <frank@oltmanns.dev>
+
+commit b914ec33b391ec766545a41f0cfc0de3e0b388d7 upstream.
+
+The Allwinner SoC's typically have an upper and lower limit for their
+clocks' rates. Up until now, support for that has been implemented
+separately for each clock type.
+
+Implement that functionality in the sunxi-ng's common part making use of
+the CCF rate liming capabilities, so that it is available for all clock
+types.
+
+Suggested-by: Maxime Ripard <mripard@kernel.org>
+Signed-off-by: Frank Oltmanns <frank@oltmanns.dev>
+Cc: stable@vger.kernel.org
+Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
+Acked-by: Maxime Ripard <mripard@kernel.org>
+Link: https://lore.kernel.org/r/20240310-pinephone-pll-fixes-v4-1-46fc80c83637@oltmanns.dev
+Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/clk/sunxi-ng/ccu_common.c |   19 +++++++++++++++++++
+ drivers/clk/sunxi-ng/ccu_common.h |    3 +++
+ 2 files changed, 22 insertions(+)
+
+--- a/drivers/clk/sunxi-ng/ccu_common.c
++++ b/drivers/clk/sunxi-ng/ccu_common.c
+@@ -44,6 +44,16 @@ bool ccu_is_better_rate(struct ccu_commo
+                       unsigned long current_rate,
+                       unsigned long best_rate)
+ {
++      unsigned long min_rate, max_rate;
++
++      clk_hw_get_rate_range(&common->hw, &min_rate, &max_rate);
++
++      if (current_rate > max_rate)
++              return false;
++
++      if (current_rate < min_rate)
++              return false;
++
+       if (common->features & CCU_FEATURE_CLOSEST_RATE)
+               return abs(current_rate - target_rate) < abs(best_rate - target_rate);
+@@ -122,6 +132,7 @@ static int sunxi_ccu_probe(struct sunxi_
+       for (i = 0; i < desc->hw_clks->num ; i++) {
+               struct clk_hw *hw = desc->hw_clks->hws[i];
++              struct ccu_common *common = hw_to_ccu_common(hw);
+               const char *name;
+               if (!hw)
+@@ -136,6 +147,14 @@ static int sunxi_ccu_probe(struct sunxi_
+                       pr_err("Couldn't register clock %d - %s\n", i, name);
+                       goto err_clk_unreg;
+               }
++
++              if (common->max_rate)
++                      clk_hw_set_rate_range(hw, common->min_rate,
++                                            common->max_rate);
++              else
++                      WARN(common->min_rate,
++                           "No max_rate, ignoring min_rate of clock %d - %s\n",
++                           i, name);
+       }
+       ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
+--- a/drivers/clk/sunxi-ng/ccu_common.h
++++ b/drivers/clk/sunxi-ng/ccu_common.h
+@@ -31,6 +31,9 @@ struct ccu_common {
+       u16             lock_reg;
+       u32             prediv;
++      unsigned long   min_rate;
++      unsigned long   max_rate;
++
+       unsigned long   features;
+       spinlock_t      *lock;
+       struct clk_hw   hw;
diff --git a/queue-6.8/dyndbg-fix-old-bug_on-in-control-parser.patch b/queue-6.8/dyndbg-fix-old-bug_on-in-control-parser.patch
new file mode 100644 (file)
index 0000000..79d6d63
--- /dev/null
@@ -0,0 +1,36 @@
+From 00e7d3bea2ce7dac7bee1cf501fb071fd0ea8f6c Mon Sep 17 00:00:00 2001
+From: Jim Cromie <jim.cromie@gmail.com>
+Date: Mon, 29 Apr 2024 13:31:11 -0600
+Subject: dyndbg: fix old BUG_ON in >control parser
+
+From: Jim Cromie <jim.cromie@gmail.com>
+
+commit 00e7d3bea2ce7dac7bee1cf501fb071fd0ea8f6c upstream.
+
+Fix a BUG_ON from 2009.  Even if it looks "unreachable" (I didn't
+really look), lets make sure by removing it, doing pr_err and return
+-EINVAL instead.
+
+Cc: stable <stable@kernel.org>
+Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
+Link: https://lore.kernel.org/r/20240429193145.66543-2-jim.cromie@gmail.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ lib/dynamic_debug.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/lib/dynamic_debug.c
++++ b/lib/dynamic_debug.c
+@@ -302,7 +302,11 @@ static int ddebug_tokenize(char *buf, ch
+               } else {
+                       for (end = buf; *end && !isspace(*end); end++)
+                               ;
+-                      BUG_ON(end == buf);
++                      if (end == buf) {
++                              pr_err("parse err after word:%d=%s\n", nwords,
++                                     nwords ? words[nwords - 1] : "<none>");
++                              return -EINVAL;
++                      }
+               }
+               /* `buf' is start of word, `end' is one past its end */
diff --git a/queue-6.8/mei-me-add-lunar-lake-point-m-did.patch b/queue-6.8/mei-me-add-lunar-lake-point-m-did.patch
new file mode 100644 (file)
index 0000000..c16fc0b
--- /dev/null
@@ -0,0 +1,43 @@
+From 4108a30f1097eead0f6bd5d885e6bf093b4d460f Mon Sep 17 00:00:00 2001
+From: Alexander Usyskin <alexander.usyskin@intel.com>
+Date: Sun, 21 Apr 2024 16:56:31 +0300
+Subject: mei: me: add lunar lake point M DID
+
+From: Alexander Usyskin <alexander.usyskin@intel.com>
+
+commit 4108a30f1097eead0f6bd5d885e6bf093b4d460f upstream.
+
+Add Lunar (Point) Lake M device id.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Link: https://lore.kernel.org/r/20240421135631.223362-1-tomas.winkler@intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/misc/mei/hw-me-regs.h |    2 ++
+ drivers/misc/mei/pci-me.c     |    2 ++
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/misc/mei/hw-me-regs.h
++++ b/drivers/misc/mei/hw-me-regs.h
+@@ -115,6 +115,8 @@
+ #define MEI_DEV_ID_ARL_S      0x7F68  /* Arrow Lake Point S */
+ #define MEI_DEV_ID_ARL_H      0x7770  /* Arrow Lake Point H */
++#define MEI_DEV_ID_LNL_M      0xA870  /* Lunar Lake Point M */
++
+ /*
+  * MEI HW Section
+  */
+--- a/drivers/misc/mei/pci-me.c
++++ b/drivers/misc/mei/pci-me.c
+@@ -122,6 +122,8 @@ static const struct pci_device_id mei_me
+       {MEI_PCI_DEVICE(MEI_DEV_ID_ARL_S, MEI_ME_PCH15_CFG)},
+       {MEI_PCI_DEVICE(MEI_DEV_ID_ARL_H, MEI_ME_PCH15_CFG)},
++      {MEI_PCI_DEVICE(MEI_DEV_ID_LNL_M, MEI_ME_PCH15_CFG)},
++
+       /* required last entry */
+       {0, }
+ };
index adf88cc6d1470f858a6d0ab18258c75346e39360..31aff7d97278d9936fa786bbf1c8fe959559297c 100644 (file)
@@ -284,3 +284,9 @@ net-bcmgenet-synchronize-use-of-bcmgenet_set_rx_mode.patch
 net-bcmgenet-synchronize-umac_cmd-access.patch
 asoc-tegra-fix-dspk-16-bit-playback.patch
 asoc-ti-davinci-mcasp-fix-race-condition-during-probe.patch
+dyndbg-fix-old-bug_on-in-control-parser.patch
+slimbus-qcom-ngd-ctrl-add-timeout-for-wait-operation.patch
+clk-samsung-revert-clk-use-device_get_match_data.patch
+clk-sunxi-ng-common-support-minimum-and-maximum-rate.patch
+clk-sunxi-ng-a64-set-minimum-and-maximum-rate-for-pll-mipi.patch
+mei-me-add-lunar-lake-point-m-did.patch
diff --git a/queue-6.8/slimbus-qcom-ngd-ctrl-add-timeout-for-wait-operation.patch b/queue-6.8/slimbus-qcom-ngd-ctrl-add-timeout-for-wait-operation.patch
new file mode 100644 (file)
index 0000000..2c48b71
--- /dev/null
@@ -0,0 +1,43 @@
+From 98241a774db49988f25b7b3657026ce51ccec293 Mon Sep 17 00:00:00 2001
+From: Viken Dadhaniya <quic_vdadhani@quicinc.com>
+Date: Tue, 30 Apr 2024 10:12:38 +0100
+Subject: slimbus: qcom-ngd-ctrl: Add timeout for wait operation
+
+From: Viken Dadhaniya <quic_vdadhani@quicinc.com>
+
+commit 98241a774db49988f25b7b3657026ce51ccec293 upstream.
+
+In current driver qcom_slim_ngd_up_worker() indefinitely
+waiting for ctrl->qmi_up completion object. This is
+resulting in workqueue lockup on Kthread.
+
+Added wait_for_completion_interruptible_timeout to
+allow the thread to wait for specific timeout period and
+bail out instead waiting infinitely.
+
+Fixes: a899d324863a ("slimbus: qcom-ngd-ctrl: add Sub System Restart support")
+Cc: stable@vger.kernel.org
+Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Viken Dadhaniya <quic_vdadhani@quicinc.com>
+Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+Link: https://lore.kernel.org/r/20240430091238.35209-2-srinivas.kandagatla@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/slimbus/qcom-ngd-ctrl.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/slimbus/qcom-ngd-ctrl.c
++++ b/drivers/slimbus/qcom-ngd-ctrl.c
+@@ -1451,7 +1451,11 @@ static void qcom_slim_ngd_up_worker(stru
+       ctrl = container_of(work, struct qcom_slim_ngd_ctrl, ngd_up_work);
+       /* Make sure qmi service is up before continuing */
+-      wait_for_completion_interruptible(&ctrl->qmi_up);
++      if (!wait_for_completion_interruptible_timeout(&ctrl->qmi_up,
++                                                     msecs_to_jiffies(MSEC_PER_SEC))) {
++              dev_err(ctrl->dev, "QMI wait timeout\n");
++              return;
++      }
+       mutex_lock(&ctrl->ssr_lock);
+       qcom_slim_ngd_enable(ctrl, true);