Skip to content
Snippets Groups Projects
Commit 5d8ad0cd authored by Marek Vasut's avatar Marek Vasut
Browse files

arm: socfpga: clock: Trim down code duplication


Pull out functions to read frequency of Main clock VCO and
PLL clock VCO as the code is duplicated multiple times.

Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Chin Liang See <clsee@altera.com>
Cc: Dinh Nguyen <dinguyen@altera.com>
Cc: Albert Aribaud <albert.u.boot@aribaud.net>
Cc: Tom Rini <trini@ti.com>
Cc: Wolfgang Denk <wd@denx.de>
Cc: Pavel Machek <pavel@denx.de>
Acked-by: default avatarDinh Nguyen <dinguyen@opensource.altera.com>
Acked-by: default avatarPavel Machek <pavel@denx.de>
parent a832ddba
Branches
Tags
No related merge requests found
...@@ -361,7 +361,7 @@ void cm_basic_init(const cm_config_t *cfg) ...@@ -361,7 +361,7 @@ void cm_basic_init(const cm_config_t *cfg)
writel(~0, &clock_manager_base->sdr_pll.en); writel(~0, &clock_manager_base->sdr_pll.en);
} }
unsigned long cm_get_mpu_clk_hz(void) static unsigned int cm_get_main_vco_clk_hz(void)
{ {
uint32_t reg, clock; uint32_t reg, clock;
...@@ -371,6 +371,37 @@ unsigned long cm_get_mpu_clk_hz(void) ...@@ -371,6 +371,37 @@ unsigned long cm_get_mpu_clk_hz(void)
(CLKMGR_MAINPLLGRP_VCO_DENOM_GET(reg) + 1); (CLKMGR_MAINPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_MAINPLLGRP_VCO_NUMER_GET(reg) + 1); clock *= (CLKMGR_MAINPLLGRP_VCO_NUMER_GET(reg) + 1);
return clock;
}
static unsigned int cm_get_per_vco_clk_hz(void)
{
uint32_t reg, clock = 0;
/* identify PER PLL clock source */
reg = readl(&clock_manager_base->per_pll.vco);
reg = CLKMGR_PERPLLGRP_VCO_SSRC_GET(reg);
if (reg == CLKMGR_VCO_SSRC_EOSC1)
clock = CONFIG_HPS_CLK_OSC1_HZ;
else if (reg == CLKMGR_VCO_SSRC_EOSC2)
clock = CONFIG_HPS_CLK_OSC2_HZ;
else if (reg == CLKMGR_VCO_SSRC_F2S)
clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ;
/* get the PER VCO clock */
reg = readl(&clock_manager_base->per_pll.vco);
clock /= (CLKMGR_PERPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_PERPLLGRP_VCO_NUMER_GET(reg) + 1);
return clock;
}
unsigned long cm_get_mpu_clk_hz(void)
{
uint32_t reg, clock;
clock = cm_get_main_vco_clk_hz();
/* get the MPU clock */ /* get the MPU clock */
reg = readl(&clock_manager_base->altera.mpuclk); reg = readl(&clock_manager_base->altera.mpuclk);
clock /= (reg + 1); clock /= (reg + 1);
...@@ -415,11 +446,7 @@ unsigned int cm_get_l4_sp_clk_hz(void) ...@@ -415,11 +446,7 @@ unsigned int cm_get_l4_sp_clk_hz(void)
reg = CLKMGR_MAINPLLGRP_L4SRC_L4SP_GET(reg); reg = CLKMGR_MAINPLLGRP_L4SRC_L4SP_GET(reg);
if (reg == CLKMGR_L4_SP_CLK_SRC_MAINPLL) { if (reg == CLKMGR_L4_SP_CLK_SRC_MAINPLL) {
/* get the main VCO clock */ clock = cm_get_main_vco_clk_hz();
reg = readl(&clock_manager_base->main_pll.vco);
clock = CONFIG_HPS_CLK_OSC1_HZ /
(CLKMGR_MAINPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_MAINPLLGRP_VCO_NUMER_GET(reg) + 1);
/* get the clock prior L4 SP divider (main clk) */ /* get the clock prior L4 SP divider (main clk) */
reg = readl(&clock_manager_base->altera.mainclk); reg = readl(&clock_manager_base->altera.mainclk);
...@@ -427,20 +454,7 @@ unsigned int cm_get_l4_sp_clk_hz(void) ...@@ -427,20 +454,7 @@ unsigned int cm_get_l4_sp_clk_hz(void)
reg = readl(&clock_manager_base->main_pll.mainclk); reg = readl(&clock_manager_base->main_pll.mainclk);
clock /= (reg + 1); clock /= (reg + 1);
} else if (reg == CLKMGR_L4_SP_CLK_SRC_PERPLL) { } else if (reg == CLKMGR_L4_SP_CLK_SRC_PERPLL) {
/* identify PER PLL clock source */ clock = cm_get_per_vco_clk_hz();
reg = readl(&clock_manager_base->per_pll.vco);
reg = CLKMGR_PERPLLGRP_VCO_SSRC_GET(reg);
if (reg == CLKMGR_VCO_SSRC_EOSC1)
clock = CONFIG_HPS_CLK_OSC1_HZ;
else if (reg == CLKMGR_VCO_SSRC_EOSC2)
clock = CONFIG_HPS_CLK_OSC2_HZ;
else if (reg == CLKMGR_VCO_SSRC_F2S)
clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ;
/* get the PER VCO clock */
reg = readl(&clock_manager_base->per_pll.vco);
clock /= (CLKMGR_PERPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_PERPLLGRP_VCO_NUMER_GET(reg) + 1);
/* get the clock prior L4 SP divider (periph_base_clk) */ /* get the clock prior L4 SP divider (periph_base_clk) */
reg = readl(&clock_manager_base->per_pll.perbaseclk); reg = readl(&clock_manager_base->per_pll.perbaseclk);
...@@ -466,30 +480,13 @@ unsigned int cm_get_mmc_controller_clk_hz(void) ...@@ -466,30 +480,13 @@ unsigned int cm_get_mmc_controller_clk_hz(void)
if (reg == CLKMGR_SDMMC_CLK_SRC_F2S) { if (reg == CLKMGR_SDMMC_CLK_SRC_F2S) {
clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ; clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ;
} else if (reg == CLKMGR_SDMMC_CLK_SRC_MAIN) { } else if (reg == CLKMGR_SDMMC_CLK_SRC_MAIN) {
/* get the main VCO clock */ clock = cm_get_main_vco_clk_hz();
reg = readl(&clock_manager_base->main_pll.vco);
clock = CONFIG_HPS_CLK_OSC1_HZ /
(CLKMGR_MAINPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_MAINPLLGRP_VCO_NUMER_GET(reg) + 1);
/* get the SDMMC clock */ /* get the SDMMC clock */
reg = readl(&clock_manager_base->main_pll.mainnandsdmmcclk); reg = readl(&clock_manager_base->main_pll.mainnandsdmmcclk);
clock /= (reg + 1); clock /= (reg + 1);
} else if (reg == CLKMGR_SDMMC_CLK_SRC_PER) { } else if (reg == CLKMGR_SDMMC_CLK_SRC_PER) {
/* identify PER PLL clock source */ clock = cm_get_per_vco_clk_hz();
reg = readl(&clock_manager_base->per_pll.vco);
reg = CLKMGR_PERPLLGRP_VCO_SSRC_GET(reg);
if (reg == CLKMGR_VCO_SSRC_EOSC1)
clock = CONFIG_HPS_CLK_OSC1_HZ;
else if (reg == CLKMGR_VCO_SSRC_EOSC2)
clock = CONFIG_HPS_CLK_OSC2_HZ;
else if (reg == CLKMGR_VCO_SSRC_F2S)
clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ;
/* get the PER VCO clock */
reg = readl(&clock_manager_base->per_pll.vco);
clock /= (CLKMGR_PERPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_PERPLLGRP_VCO_NUMER_GET(reg) + 1);
/* get the SDMMC clock */ /* get the SDMMC clock */
reg = readl(&clock_manager_base->per_pll.pernandsdmmcclk); reg = readl(&clock_manager_base->per_pll.pernandsdmmcclk);
...@@ -512,30 +509,13 @@ unsigned int cm_get_qspi_controller_clk_hz(void) ...@@ -512,30 +509,13 @@ unsigned int cm_get_qspi_controller_clk_hz(void)
if (reg == CLKMGR_QSPI_CLK_SRC_F2S) { if (reg == CLKMGR_QSPI_CLK_SRC_F2S) {
clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ; clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ;
} else if (reg == CLKMGR_QSPI_CLK_SRC_MAIN) { } else if (reg == CLKMGR_QSPI_CLK_SRC_MAIN) {
/* get the main VCO clock */ clock = cm_get_main_vco_clk_hz();
reg = readl(&clock_manager_base->main_pll.vco);
clock = CONFIG_HPS_CLK_OSC1_HZ /
(CLKMGR_MAINPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_MAINPLLGRP_VCO_NUMER_GET(reg) + 1);
/* get the qspi clock */ /* get the qspi clock */
reg = readl(&clock_manager_base->main_pll.mainqspiclk); reg = readl(&clock_manager_base->main_pll.mainqspiclk);
clock /= (reg + 1); clock /= (reg + 1);
} else if (reg == CLKMGR_QSPI_CLK_SRC_PER) { } else if (reg == CLKMGR_QSPI_CLK_SRC_PER) {
/* identify PER PLL clock source */ clock = cm_get_per_vco_clk_hz();
reg = readl(&clock_manager_base->per_pll.vco);
reg = CLKMGR_PERPLLGRP_VCO_SSRC_GET(reg);
if (reg == CLKMGR_VCO_SSRC_EOSC1)
clock = CONFIG_HPS_CLK_OSC1_HZ;
else if (reg == CLKMGR_VCO_SSRC_EOSC2)
clock = CONFIG_HPS_CLK_OSC2_HZ;
else if (reg == CLKMGR_VCO_SSRC_F2S)
clock = CONFIG_HPS_CLK_F2S_PER_REF_HZ;
/* get the PER VCO clock */
reg = readl(&clock_manager_base->per_pll.vco);
clock /= (CLKMGR_PERPLLGRP_VCO_DENOM_GET(reg) + 1);
clock *= (CLKMGR_PERPLLGRP_VCO_NUMER_GET(reg) + 1);
/* get the qspi clock */ /* get the qspi clock */
reg = readl(&clock_manager_base->per_pll.perqspiclk); reg = readl(&clock_manager_base->per_pll.perqspiclk);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment