From: Bai Ping Date: Mon, 9 Apr 2018 05:11:02 +0000 (+0800) Subject: MLK-17971 clk: imx: fix pll set rate failure issue on imx7ulp X-Git-Tag: C0P2-H0.0--20200415~75 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=05f1d55837fdab0a8dd7691569c46370fd94b9b7;p=linux.git MLK-17971 clk: imx: fix pll set rate failure issue on imx7ulp The logic of 'if' check for the mult is wrong, this will lead to set rate to PLL type failed. Additionally, remove the unnecessary 'CLK_IS_CRITICAL' flags. Signed-off-by: Bai Ping Reviewed-by: Anson Huang (cherry picked from commit a67aa226b9d0d294b51cfc43371fe78a005dfae4) --- diff --git a/drivers/clk/imx/clk-imx7ulp.c b/drivers/clk/imx/clk-imx7ulp.c index 6eb9b8ffbfb4..02c369a8a674 100644 --- a/drivers/clk/imx/clk-imx7ulp.c +++ b/drivers/clk/imx/clk-imx7ulp.c @@ -127,8 +127,8 @@ static void __init imx7ulp_clocks_init(struct device_node *scg_node) clks[IMX7ULP_CLK_DDR_SEL] = imx_clk_mux2("ddr_sel", base + 0x30, 24, 1, ddr_sels, ARRAY_SIZE(ddr_sels)); clks[IMX7ULP_CLK_NIC_SEL] = imx_clk_mux2("nic_sel", base + 0x40, 28, 1, nic_sels, ARRAY_SIZE(nic_sels)); - clks[IMX7ULP_CLK_CORE_DIV] = imx_clk_divider_flags("core_div", "sys_sel", base + 0x14, 16, 4, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL); - clks[IMX7ULP_CLK_HSRUN_CORE] = imx_clk_divider_flags("hsrun_core", "hsrun_sys_sel", base + 0x1c, 16, 4, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL); + clks[IMX7ULP_CLK_CORE_DIV] = imx_clk_divider_flags("core_div", "sys_sel", base + 0x14, 16, 4, CLK_SET_RATE_PARENT); + clks[IMX7ULP_CLK_HSRUN_CORE] = imx_clk_divider_flags("hsrun_core", "hsrun_sys_sel", base + 0x1c, 16, 4, CLK_SET_RATE_PARENT); clks[IMX7ULP_CLK_PLAT_DIV] = imx_clk_divider("plat_div", "core_div", base + 0x14, 12, 4); /* Fake mux */ diff --git a/drivers/clk/imx/clk-pllv4.c b/drivers/clk/imx/clk-pllv4.c index b3159c0a52a4..0aa1d01d7dc4 100644 --- a/drivers/clk/imx/clk-pllv4.c +++ b/drivers/clk/imx/clk-pllv4.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP. * * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License @@ -127,7 +128,7 @@ static int clk_pllv4_set_rate(struct clk_hw *hw, unsigned long rate, mult = rate / parent_rate; - if (clk_pllv4_is_valid_mult(mult)) + if (!clk_pllv4_is_valid_mult(mult)) return -EINVAL; temp64 = (u64) (rate - mult * parent_rate);