Messages in this thread | ![/](/images/icornerl.gif) | | Date | Thu, 14 Mar 2024 15:00:02 +0100 | Subject | Re: [PATCH] clk: qcom: apss-ipq-pll: use stromer ops for IPQ5018 to fix boot failure | From | Konrad Dybcio <> |
| |
On 3/14/24 14:50, Gabor Juhos wrote: > 2024. 03. 13. 19:36 keltezéssel, Konrad Dybcio írta: >> >> >> On 3/11/24 16:06, Gabor Juhos wrote: >>> Booting v6.8 results in a hang on various IPQ5018 based boards. >>> Investigating the problem showed that the hang happens when the >>> clk_alpha_pll_stromer_plus_set_rate() function tries to write >>> into the PLL_MODE register of the APSS PLL. >>> >>> Checking the downstream code revealed that it uses [1] stromer >>> specific operations for IPQ5018, whereas in the current code >>> the stromer plus specific operations are used. >>> >>> The ops in the 'ipq_pll_stromer_plus' clock definition can't be >>> changed since that is needed for IPQ5332, so add a new alpha pll >>> clock declaration which uses the correct stromer ops and use this >>> new clock for IPQ5018 to avoid the boot failure. >>> >>> 1. >>> https://git.codelinaro.org/clo/qsdk/oss/kernel/linux-ipq-5.4/-/blob/NHSS.QSDK.12.4/drivers/clk/qcom/apss-ipq5018.c#L67 >>> >>> Cc: stable@vger.kernel.org >>> Fixes: 50492f929486 ("clk: qcom: apss-ipq-pll: add support for IPQ5018") >>> Signed-off-by: Gabor Juhos <j4g8y7@gmail.com> >>> --- >>> Based on v6.8. >>> --- >>> drivers/clk/qcom/apss-ipq-pll.c | 20 +++++++++++++++++++- >>> 1 file changed, 19 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/clk/qcom/apss-ipq-pll.c b/drivers/clk/qcom/apss-ipq-pll.c >>> index 678b805f13d45..11f1ae59438f7 100644 >>> --- a/drivers/clk/qcom/apss-ipq-pll.c >>> +++ b/drivers/clk/qcom/apss-ipq-pll.c >>> @@ -55,6 +55,24 @@ static struct clk_alpha_pll ipq_pll_huayra = { >>> }, >>> }; >>> +static struct clk_alpha_pll ipq_pll_stromer = { >>> + .offset = 0x0, >>> + .regs = ipq_pll_offsets[CLK_ALPHA_PLL_TYPE_STROMER_PLUS], >> >> CLK_ALPHA_PLL_TYPE_STROMER? > > I admit that using CLK_ALPHA_PLL_TYPE_STROMER would be less confusing. However > 'ipq_pll_offsets' array has no entry for that enum, and given the fact that the > CLK_ALPHA_PLL_TYPE_STROMER_PLUS entry uses the correct register offsets it makes > little sense to add another entry with the same offsets. > > Although the 'clk_alpha_pll_regs' in clk-alpha-pll.c has an entry for > CLK_ALPHA_PLL_TYPE_STROMER, but the offsets defined there are not 'exactly' the > same as the ones defined locally in 'ipq_pll_offsets'. They will be identical if > [1] gets accepted but we are not there yet.
Oh, I completely overlooked that this driver has its own array.. Hm..
I suppose it would make sense to rename these indices to IPQ_PLL_x to help avoid such confusion..
Konrad
| ![\](/images/icornerr.gif) |