Commit 6a0f7c00 authored by Siva Durga Prasad Paladugu's avatar Siva Durga Prasad Paladugu
Browse files

zynqmp: pm_service: Ignore enable/disable of PLL type clocks



PLL type clock is enabled by FSBL on boot-up. PMUFW enable/disable
them based on their user count. So, it should not be handled from ATF.

Put PLL type clock into bypass and reset mode only while changing
PLL rate (FBDIV).
Signed-off-by: default avatarTejas Patel <tejas.patel@xilinx.com>
Acked-by: default avatarWill Wong <WILLW@xilinx.com>
Signed-off-by: default avatarSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
parent 26a754f6
...@@ -2627,10 +2627,11 @@ enum pm_ret_status pm_api_clock_enable(unsigned int clock_id) ...@@ -2627,10 +2627,11 @@ enum pm_ret_status pm_api_clock_enable(unsigned int clock_id)
if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT) if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT)
return PM_RET_ERROR_NOTSUPPORTED; return PM_RET_ERROR_NOTSUPPORTED;
if (ISPLL(clock_id)) /*
ret = pm_api_pll_bypass_and_reset(clock_id, * PLL type clock should not enable explicitly.
CLK_PLL_RESET_PULSE); * It is done by FSBL on boot-up and by PMUFW whenever required.
else */
if (!ISPLL(clock_id))
ret = pm_api_clk_enable_disable(clock_id, 1); ret = pm_api_clk_enable_disable(clock_id, 1);
return ret; return ret;
...@@ -2656,10 +2657,11 @@ enum pm_ret_status pm_api_clock_disable(unsigned int clock_id) ...@@ -2656,10 +2657,11 @@ enum pm_ret_status pm_api_clock_disable(unsigned int clock_id)
if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT) if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT)
return PM_RET_ERROR_NOTSUPPORTED; return PM_RET_ERROR_NOTSUPPORTED;
if (ISPLL(clock_id)) /*
ret = pm_api_pll_bypass_and_reset(clock_id, * PLL type clock should not be disabled explicitly.
CLK_PLL_RESET_ASSERT); * It is done by PMUFW if required.
else */
if (!ISPLL(clock_id))
ret = pm_api_clk_enable_disable(clock_id, 0); ret = pm_api_clk_enable_disable(clock_id, 0);
return ret; return ret;
...@@ -2807,8 +2809,13 @@ static enum pm_ret_status pm_api_pll_set_divider(unsigned int clock_id, ...@@ -2807,8 +2809,13 @@ static enum pm_ret_status pm_api_pll_set_divider(unsigned int clock_id,
unsigned int divider) unsigned int divider)
{ {
unsigned int reg = clocks[clock_id].control_reg; unsigned int reg = clocks[clock_id].control_reg;
enum pm_ret_status ret;
return pm_mmio_write(reg, PLL_FBDIV_MASK, divider << PLL_FBDIV_SHIFT); pm_api_pll_bypass_and_reset(clock_id, CLK_PLL_RESET_ASSERT);
ret = pm_mmio_write(reg, PLL_FBDIV_MASK, divider << PLL_FBDIV_SHIFT);
pm_api_pll_bypass_and_reset(clock_id, CLK_PLL_RESET_RELEASE);
return ret;
} }
/** /**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment