From: Greg Kroah-Hartman Date: Sun, 6 Feb 2022 12:16:03 +0000 (+0100) Subject: 5.10-stable patches X-Git-Tag: v4.9.300~40 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6d956c5c597097b1c2d0011d152fa716fcdd370d;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: revert-asoc-mediatek-check-for-error-clk-pointer.patch --- diff --git a/queue-5.10/revert-asoc-mediatek-check-for-error-clk-pointer.patch b/queue-5.10/revert-asoc-mediatek-check-for-error-clk-pointer.patch new file mode 100644 index 00000000000..c4e745cb884 --- /dev/null +++ b/queue-5.10/revert-asoc-mediatek-check-for-error-clk-pointer.patch @@ -0,0 +1,95 @@ +From bb592580baa372ee5ab7cb40ad3879b3051880d2 Mon Sep 17 00:00:00 2001 +From: Guenter Roeck +Date: Fri, 4 Feb 2022 17:47:55 -0800 +Subject: Revert "ASoC: mediatek: Check for error clk pointer" + +From: Guenter Roeck + +This reverts commit d491a2c2cf96f9f3d855cf0bcd807d48ccb98e81 which is +commit 9de2b9286a6dd16966959b3cb34fc2ddfd39213e upstream + +With this patch in the tree, Chromebooks running the affected hardware +no longer boot. Bisect points to this patch, and reverting it fixes +the problem. + +An analysis of the code with this patch applied shows: + + ret = init_clks(pdev, clk); + if (ret) + return ERR_PTR(ret); +... + for (j = 0; j < MAX_CLKS && data->clk_id[j]; j++) { + struct clk *c = clk[data->clk_id[j]]; + + if (IS_ERR(c)) { + dev_err(&pdev->dev, "%s: clk unavailable\n", + data->name); + return ERR_CAST(c); + } + + scpd->clk[j] = c; + } + +Not all clocks in the clk_names array have to be present. Only the clocks +in the data->clk_id array are actually needed. The code already checks if +the required clocks are available and bails out if not. The assumption that +all clocks have to be present is wrong, and commit 9de2b9286a6d needs to be +reverted. + +Fixes: 9de2b9286a6d ("ASoC: mediatek: Check for error clk pointer") +Cc: Jiasheng Jiang +Cc: Mark Brown +Cc: James Liao +Cc: Kevin Hilman +Cc: Matthias Brugger +Cc: Daniel Golle +Link: https://lore.kernel.org/lkml/20220205014755.699603-1-linux@roeck-us.net/ +Signed-off-by: Guenter Roeck +Signed-off-by: Greg Kroah-Hartman +--- + drivers/soc/mediatek/mtk-scpsys.c | 15 ++++----------- + 1 file changed, 4 insertions(+), 11 deletions(-) + +--- a/drivers/soc/mediatek/mtk-scpsys.c ++++ b/drivers/soc/mediatek/mtk-scpsys.c +@@ -411,17 +411,12 @@ out: + return ret; + } + +-static int init_clks(struct platform_device *pdev, struct clk **clk) ++static void init_clks(struct platform_device *pdev, struct clk **clk) + { + int i; + +- for (i = CLK_NONE + 1; i < CLK_MAX; i++) { ++ for (i = CLK_NONE + 1; i < CLK_MAX; i++) + clk[i] = devm_clk_get(&pdev->dev, clk_names[i]); +- if (IS_ERR(clk[i])) +- return PTR_ERR(clk[i]); +- } +- +- return 0; + } + + static struct scp *init_scp(struct platform_device *pdev, +@@ -431,7 +426,7 @@ static struct scp *init_scp(struct platf + { + struct genpd_onecell_data *pd_data; + struct resource *res; +- int i, j, ret; ++ int i, j; + struct scp *scp; + struct clk *clk[CLK_MAX]; + +@@ -486,9 +481,7 @@ static struct scp *init_scp(struct platf + + pd_data->num_domains = num; + +- ret = init_clks(pdev, clk); +- if (ret) +- return ERR_PTR(ret); ++ init_clks(pdev, clk); + + for (i = 0; i < num; i++) { + struct scp_domain *scpd = &scp->domains[i]; diff --git a/queue-5.10/series b/queue-5.10/series index 55107c3847a..73e163127df 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -20,3 +20,4 @@ mm-kmemleak-avoid-scanning-potential-huge-holes.patch block-bio-integrity-advance-seed-correctly-for-larger-interval-sizes.patch dma-buf-heaps-fix-potential-spectre-v1-gadget.patch ib-hfi1-fix-aip-early-init-panic.patch +revert-asoc-mediatek-check-for-error-clk-pointer.patch