ipq806x: 6.1: copy patches, files and config from 5.15
[openwrt/staging/ansuel.git] / target / linux / ipq806x / patches-6.1 / 121-08-clk-qcom-krait-cc-handle-secondary-mux-sourcing-out-.patch
1 From b6655ca513b3f1b40417287ab7f706409455fe48 Mon Sep 17 00:00:00 2001
2 From: Christian Marangi <ansuelsmth@gmail.com>
3 Date: Thu, 15 Sep 2022 02:56:47 +0200
4 Subject: [PATCH 8/9] clk: qcom: krait-cc: handle secondary mux sourcing out of
5 PXO
6
7 The secondary mux can sourc out of PXO as the secondary MUX is attached
8 to QSB and to another mux that can source out of PXO or PLL8_VOTE.
9
10 Many device may run with uncorrect configuration with the mux sourcing
11 out of PXO instead of PLL8_VOTE.
12
13 To handle this case we add also PXO as required clocks and we check if
14 the frequency is currently set to PXO and force a correct rate if it's
15 the case.
16
17 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
18 ---
19 drivers/clk/qcom/krait-cc.c | 19 ++++++++++++++++++-
20 1 file changed, 18 insertions(+), 1 deletion(-)
21
22 --- a/drivers/clk/qcom/krait-cc.c
23 +++ b/drivers/clk/qcom/krait-cc.c
24 @@ -317,7 +317,7 @@ static int krait_cc_probe(struct platfor
25 {
26 struct device *dev = &pdev->dev;
27 const struct of_device_id *id;
28 - unsigned long cur_rate, aux_rate, qsb_rate;
29 + unsigned long cur_rate, aux_rate, qsb_rate, pxo_rate;
30 int cpu;
31 struct clk *clk;
32 struct clk **clks;
33 @@ -327,6 +327,15 @@ static int krait_cc_probe(struct platfor
34 if (!id)
35 return -ENODEV;
36
37 + clk = clk_get(dev, "pxo");
38 + if (IS_ERR(clk))
39 + clk = __clk_lookup("pxo_board");
40 +
41 + if (IS_ERR_OR_NULL(clk))
42 + return clk == NULL ? -ENODEV : PTR_ERR(clk);
43 +
44 + pxo_rate = clk_get_rate(clk);
45 +
46 /*
47 * Per Documentation qsb should be provided from DTS.
48 * To address old implementation, register the fixed clock anyway.
49 @@ -394,6 +403,10 @@ static int krait_cc_probe(struct platfor
50 dev_info(dev, "L2 @ QSB rate. Forcing new rate.\n");
51 cur_rate = aux_rate;
52 }
53 + if (cur_rate == pxo_rate) {
54 + dev_info(dev, "L2 @ PXO rate. Forcing new rate.\n");
55 + cur_rate = aux_rate;
56 + }
57 clk_set_rate(l2_pri_mux_clk, aux_rate);
58 clk_set_rate(l2_pri_mux_clk, 2);
59 clk_set_rate(l2_pri_mux_clk, cur_rate);
60 @@ -405,6 +418,10 @@ static int krait_cc_probe(struct platfor
61 dev_info(dev, "CPU%d @ QSB rate. Forcing new rate.\n", cpu);
62 cur_rate = aux_rate;
63 }
64 + if (cur_rate ==pxo_rate) {
65 + dev_info(dev, "CPU%d @ PXO rate. Forcing new rate.\n", cpu);
66 + cur_rate = aux_rate;
67 + }
68
69 clk_set_rate(clk, aux_rate);
70 clk_set_rate(clk, 2);