From 2f0434fc0867fdccf0209be531f1b167088c574e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 13 May 2024 16:13:15 +0200 Subject: [PATCH] 6.8-stable patches 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 --- ...revert-clk-use-device_get_match_data.patch | 79 +++++++++++++++++ ...inimum-and-maximum-rate-for-pll-mipi.patch | 48 +++++++++++ ...mon-support-minimum-and-maximum-rate.patch | 84 +++++++++++++++++++ ...dbg-fix-old-bug_on-in-control-parser.patch | 36 ++++++++ .../mei-me-add-lunar-lake-point-m-did.patch | 43 ++++++++++ queue-6.8/series | 6 ++ ...-ctrl-add-timeout-for-wait-operation.patch | 43 ++++++++++ 7 files changed, 339 insertions(+) create mode 100644 queue-6.8/clk-samsung-revert-clk-use-device_get_match_data.patch create mode 100644 queue-6.8/clk-sunxi-ng-a64-set-minimum-and-maximum-rate-for-pll-mipi.patch create mode 100644 queue-6.8/clk-sunxi-ng-common-support-minimum-and-maximum-rate.patch create mode 100644 queue-6.8/dyndbg-fix-old-bug_on-in-control-parser.patch create mode 100644 queue-6.8/mei-me-add-lunar-lake-point-m-did.patch create mode 100644 queue-6.8/slimbus-qcom-ngd-ctrl-add-timeout-for-wait-operation.patch 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 index 00000000000..e716a71c6c8 --- /dev/null +++ b/queue-6.8/clk-samsung-revert-clk-use-device_get_match_data.patch @@ -0,0 +1,79 @@ +From aacb99de1099346244d488bdf7df489a44278574 Mon Sep 17 00:00:00 2001 +From: Marek Szyprowski +Date: Tue, 30 Apr 2024 20:46:56 +0200 +Subject: clk: samsung: Revert "clk: Use device_get_match_data()" + +From: Marek Szyprowski + +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: +Fixes: 409c39ec92a3 ("clk: Use device_get_match_data()") +Signed-off-by: Marek Szyprowski +Link: https://lore.kernel.org/r/20240425075628.838497-1-m.szyprowski@samsung.com +Signed-off-by: Krzysztof Kozlowski +Link: https://lore.kernel.org/r/20240430184656.357805-1-krzysztof.kozlowski@linaro.org +Signed-off-by: Stephen Boyd +Signed-off-by: Greg Kroah-Hartman +--- + 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 + #include + #include ++#include + #include + #include +-#include + + #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 index 00000000000..3c70cbe8056 --- /dev/null +++ b/queue-6.8/clk-sunxi-ng-a64-set-minimum-and-maximum-rate-for-pll-mipi.patch @@ -0,0 +1,48 @@ +From 69f16d9b789821183d342719d2ebd4a5ac7178bc Mon Sep 17 00:00:00 2001 +From: Frank Oltmanns +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 + +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 +Closes: https://groups.google.com/g/linux-sunxi/c/Rh-Uqqa66bw +Tested-by: Diego Roversi +Cc: stable@vger.kernel.org +Reviewed-by: Maxime Ripard +Signed-off-by: Frank Oltmanns +Reviewed-by: Jernej Skrabec +Link: https://lore.kernel.org/r/20240310-pinephone-pll-fixes-v4-2-46fc80c83637@oltmanns.dev +Signed-off-by: Jernej Skrabec +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..1b6d43ac1fa --- /dev/null +++ b/queue-6.8/clk-sunxi-ng-common-support-minimum-and-maximum-rate.patch @@ -0,0 +1,84 @@ +From b914ec33b391ec766545a41f0cfc0de3e0b388d7 Mon Sep 17 00:00:00 2001 +From: Frank Oltmanns +Date: Sun, 10 Mar 2024 14:21:11 +0100 +Subject: clk: sunxi-ng: common: Support minimum and maximum rate + +From: Frank Oltmanns + +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 +Signed-off-by: Frank Oltmanns +Cc: stable@vger.kernel.org +Reviewed-by: Jernej Skrabec +Acked-by: Maxime Ripard +Link: https://lore.kernel.org/r/20240310-pinephone-pll-fixes-v4-1-46fc80c83637@oltmanns.dev +Signed-off-by: Jernej Skrabec +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..79d6d63c651 --- /dev/null +++ b/queue-6.8/dyndbg-fix-old-bug_on-in-control-parser.patch @@ -0,0 +1,36 @@ +From 00e7d3bea2ce7dac7bee1cf501fb071fd0ea8f6c Mon Sep 17 00:00:00 2001 +From: Jim Cromie +Date: Mon, 29 Apr 2024 13:31:11 -0600 +Subject: dyndbg: fix old BUG_ON in >control parser + +From: Jim Cromie + +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 +Signed-off-by: Jim Cromie +Link: https://lore.kernel.org/r/20240429193145.66543-2-jim.cromie@gmail.com +Signed-off-by: Greg Kroah-Hartman +--- + 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] : ""); ++ 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 index 00000000000..c16fc0b6433 --- /dev/null +++ b/queue-6.8/mei-me-add-lunar-lake-point-m-did.patch @@ -0,0 +1,43 @@ +From 4108a30f1097eead0f6bd5d885e6bf093b4d460f Mon Sep 17 00:00:00 2001 +From: Alexander Usyskin +Date: Sun, 21 Apr 2024 16:56:31 +0300 +Subject: mei: me: add lunar lake point M DID + +From: Alexander Usyskin + +commit 4108a30f1097eead0f6bd5d885e6bf093b4d460f upstream. + +Add Lunar (Point) Lake M device id. + +Cc: stable@vger.kernel.org +Signed-off-by: Alexander Usyskin +Signed-off-by: Tomas Winkler +Link: https://lore.kernel.org/r/20240421135631.223362-1-tomas.winkler@intel.com +Signed-off-by: Greg Kroah-Hartman +--- + 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, } + }; diff --git a/queue-6.8/series b/queue-6.8/series index adf88cc6d14..31aff7d9727 100644 --- a/queue-6.8/series +++ b/queue-6.8/series @@ -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 index 00000000000..2c48b71fde3 --- /dev/null +++ b/queue-6.8/slimbus-qcom-ngd-ctrl-add-timeout-for-wait-operation.patch @@ -0,0 +1,43 @@ +From 98241a774db49988f25b7b3657026ce51ccec293 Mon Sep 17 00:00:00 2001 +From: Viken Dadhaniya +Date: Tue, 30 Apr 2024 10:12:38 +0100 +Subject: slimbus: qcom-ngd-ctrl: Add timeout for wait operation + +From: Viken Dadhaniya + +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 +Signed-off-by: Viken Dadhaniya +Signed-off-by: Srinivas Kandagatla +Link: https://lore.kernel.org/r/20240430091238.35209-2-srinivas.kandagatla@linaro.org +Signed-off-by: Greg Kroah-Hartman +--- + 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); -- 2.47.3