]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
clk: qcom: clear div mask before assigning a new divider
authorVolodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Mon, 11 Mar 2024 21:33:45 +0000 (21:33 +0000)
committerCaleb Connolly <caleb.connolly@linaro.org>
Thu, 4 Apr 2024 15:46:45 +0000 (17:46 +0200)
The current behaviour does a bitwise OR of the previous and new
divider values, this is wrong as some bits may be set already. We
need to clear all the divider bits before applying new ones.

This fixes potential issue with 1Gbit ethernet on SA8155P-ADP boards.

Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
[caleb: minor wording fix]
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
drivers/clk/qcom/clock-qcom.c

index 7c683e519226fbdaa93bf81d87ea9899bc136bff..729d190c54b2f8ea10cd0090dc272fc54b280b78 100644 (file)
@@ -117,7 +117,8 @@ void clk_rcg_set_rate_mnd(phys_addr_t base, const struct bcr_regs *regs,
 
        /* setup src select and divider */
        cfg  = readl(base + regs->cfg_rcgr);
-       cfg &= ~(CFG_SRC_SEL_MASK | CFG_MODE_MASK | CFG_HW_CLK_CTRL_MASK);
+       cfg &= ~(CFG_SRC_SEL_MASK | CFG_MODE_MASK | CFG_HW_CLK_CTRL_MASK |
+                CFG_SRC_DIV_MASK);
        cfg |= source & CFG_SRC_SEL_MASK; /* Select clock source */
 
        if (div)