mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-28 15:40:29 +09:00
clk: stm32mp1: recalculate counter when switching freq
Because stgen is initialized with HSI clock, we need to recalculate the counter when changing frequency. Signed-off-by: Lionel Debieve <lionel.debieve@st.com> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
This commit is contained in:
parent
63201281e5
commit
f3a23c2609
@ -1469,10 +1469,15 @@ static void stgen_config(struct stm32mp1_clk_priv *priv)
|
|||||||
rate = stm32mp1_clk_get(priv, p);
|
rate = stm32mp1_clk_get(priv, p);
|
||||||
|
|
||||||
if (cntfid0 != rate) {
|
if (cntfid0 != rate) {
|
||||||
|
u64 counter;
|
||||||
|
|
||||||
pr_debug("System Generic Counter (STGEN) update\n");
|
pr_debug("System Generic Counter (STGEN) update\n");
|
||||||
clrbits_le32(stgenc + STGENC_CNTCR, STGENC_CNTCR_EN);
|
clrbits_le32(stgenc + STGENC_CNTCR, STGENC_CNTCR_EN);
|
||||||
writel(0x0, stgenc + STGENC_CNTCVL);
|
counter = (u64)readl(stgenc + STGENC_CNTCVL);
|
||||||
writel(0x0, stgenc + STGENC_CNTCVU);
|
counter |= ((u64)(readl(stgenc + STGENC_CNTCVU))) << 32;
|
||||||
|
counter = lldiv(counter * (u64)rate, cntfid0);
|
||||||
|
writel((u32)counter, stgenc + STGENC_CNTCVL);
|
||||||
|
writel((u32)(counter >> 32), stgenc + STGENC_CNTCVU);
|
||||||
writel(rate, stgenc + STGENC_CNTFID0);
|
writel(rate, stgenc + STGENC_CNTFID0);
|
||||||
setbits_le32(stgenc + STGENC_CNTCR, STGENC_CNTCR_EN);
|
setbits_le32(stgenc + STGENC_CNTCR, STGENC_CNTCR_EN);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user