mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 01:54:22 +00:00
feat(nxp-clk): setup the DDR PLL
Add the DDR PLL instance and configure it to operate at its maximum allowed frequency. Change-Id: I96efd68687de78f70759f631d10a0f611c234c8d Signed-off-by: Ghennadi Procopciuc <ghennadi.procopciuc@nxp.com>
This commit is contained in:
parent
b8c68ad799
commit
18c2b137f8
5 changed files with 41 additions and 0 deletions
|
@ -13,6 +13,7 @@
|
|||
#define ARM_DFS_BASE_ADDR (0x40054000UL)
|
||||
#define CGM0_BASE_ADDR (0x40030000UL)
|
||||
#define CGM1_BASE_ADDR (0x40034000UL)
|
||||
#define DDRPLL_BASE_ADDR (0x40044000UL)
|
||||
|
||||
/* FXOSC */
|
||||
#define FXOSC_CTRL(FXOSC) ((FXOSC) + 0x0UL)
|
||||
|
|
|
@ -26,6 +26,7 @@ struct s32cc_clk_drv {
|
|||
uintptr_t armdfs_base;
|
||||
uintptr_t cgm0_base;
|
||||
uintptr_t cgm1_base;
|
||||
uintptr_t ddrpll_base;
|
||||
};
|
||||
|
||||
static int update_stack_depth(unsigned int *depth)
|
||||
|
@ -47,6 +48,7 @@ static struct s32cc_clk_drv *get_drv(void)
|
|||
.armdfs_base = ARM_DFS_BASE_ADDR,
|
||||
.cgm0_base = CGM0_BASE_ADDR,
|
||||
.cgm1_base = CGM1_BASE_ADDR,
|
||||
.ddrpll_base = DDRPLL_BASE_ADDR,
|
||||
};
|
||||
|
||||
return &driver;
|
||||
|
@ -86,6 +88,9 @@ static int get_base_addr(enum s32cc_clk_source id, const struct s32cc_clk_drv *d
|
|||
case S32CC_PERIPH_PLL:
|
||||
*base = drv->periphpll_base;
|
||||
break;
|
||||
case S32CC_DDR_PLL:
|
||||
*base = drv->ddrpll_base;
|
||||
break;
|
||||
case S32CC_ARM_DFS:
|
||||
*base = drv->armdfs_base;
|
||||
break;
|
||||
|
@ -585,6 +590,7 @@ static int enable_mux(struct s32cc_clk_obj *module,
|
|||
/* PLL mux will be enabled by PLL setup */
|
||||
case S32CC_ARM_PLL:
|
||||
case S32CC_PERIPH_PLL:
|
||||
case S32CC_DDR_PLL:
|
||||
break;
|
||||
case S32CC_CGM1:
|
||||
ret = enable_cgm_mux(mux, drv);
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#define S32CC_XBAR_2X_FREQ (800U * MHZ)
|
||||
#define S32CC_PERIPH_PLL_VCO_FREQ (2U * GHZ)
|
||||
#define S32CC_PERIPH_PLL_PHI3_FREQ UART_CLOCK_HZ
|
||||
#define S32CC_DDR_PLL_VCO_FREQ (1600U * MHZ)
|
||||
#define S32CC_DDR_PLL_PHI0_FREQ (800U * MHZ)
|
||||
|
||||
static int setup_fxosc(void)
|
||||
{
|
||||
|
@ -139,6 +141,28 @@ static int enable_uart_clk(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int setup_ddr_pll(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = clk_set_parent(S32CC_CLK_DDR_PLL_MUX, S32CC_CLK_FXOSC);
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = clk_set_rate(S32CC_CLK_DDR_PLL_VCO, S32CC_DDR_PLL_VCO_FREQ, NULL);
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = clk_set_rate(S32CC_CLK_DDR_PLL_PHI0, S32CC_DDR_PLL_PHI0_FREQ, NULL);
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int s32cc_init_early_clks(void)
|
||||
{
|
||||
int ret;
|
||||
|
@ -175,5 +199,10 @@ int s32cc_init_early_clks(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = setup_ddr_pll();
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -95,4 +95,8 @@
|
|||
#define S32CC_CLK_LINFLEX_BAUD S32CC_ARCH_CLK(16)
|
||||
#define S32CC_CLK_LINFLEX S32CC_ARCH_CLK(17)
|
||||
|
||||
/* DDR PLL */
|
||||
#define S32CC_CLK_DDR_PLL_MUX S32CC_ARCH_CLK(18)
|
||||
#define S32CC_CLK_DDR_PLL_VCO S32CC_ARCH_CLK(19)
|
||||
|
||||
#endif /* S32CC_CLK_IDS_H */
|
||||
|
|
|
@ -36,6 +36,7 @@ enum s32cc_clk_source {
|
|||
S32CC_PERIPH_PLL,
|
||||
S32CC_CGM0,
|
||||
S32CC_CGM1,
|
||||
S32CC_DDR_PLL,
|
||||
};
|
||||
|
||||
struct s32cc_clk_obj {
|
||||
|
|
Loading…
Add table
Reference in a new issue