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
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.
10 Many device may run with uncorrect configuration with the mux sourcing
11 out of PXO instead of PLL8_VOTE.
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
17 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
19 drivers/clk/qcom/krait-cc.c | 19 ++++++++++++++++++-
20 1 file changed, 18 insertions(+), 1 deletion(-)
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
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;
33 @@ -327,6 +327,15 @@ static int krait_cc_probe(struct platfor
37 + clk = clk_get(dev, "pxo");
39 + clk = __clk_lookup("pxo_board");
41 + if (IS_ERR_OR_NULL(clk))
42 + return clk == NULL ? -ENODEV : PTR_ERR(clk);
44 + pxo_rate = clk_get_rate(clk);
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");
53 + if (cur_rate == pxo_rate) {
54 + dev_info(dev, "L2 @ PXO rate. Forcing new rate.\n");
55 + cur_rate = aux_rate;
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);
64 + if (cur_rate ==pxo_rate) {
65 + dev_info(dev, "CPU%d @ PXO rate. Forcing new rate.\n", cpu);
66 + cur_rate = aux_rate;
69 clk_set_rate(clk, aux_rate);