Message ID | 1446674413-28163-2-git-send-email-s-kipisz2@ti.com |
---|---|
State | Accepted |
Commit | 93e6253d11030902be64dd9d19cc181f3258c3ac |
Delegated to: | Tom Rini |
Headers | show |
On Thursday 05 November 2015 03:30 AM, Steve Kipisz wrote: > Early clock initialization is currently done in two stages for OMAP4/5 > SoCs. The first stage is the initialization of console clocks and > then we initialize basic clocks for functionality necessary for SoC > initialization and basic board functionality. > > By splitting up prcm_init and centralizing this clock initialization, > we setup the code for follow on patches that can do board specific > initialization such as board detection which will depend on these > basic clocks. > > As part of this change, since the early clock initialization > is centralized, we no longer need to expose the console clock > initialization. > > NOTE: we change the sequence slightly by initializing console clocks > timer after the io settings are complete, but this is not expected > to have any functioanlity impact since we setup the basic IO drive > strength initialization as part of do_io_settings Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com> Thanks and regards, Lokesh > > Signed-off-by: Steve Kipisz <s-kipisz2@ti.com> > Reviewed-by: Tom Rini <trini@konsulko.com< > --- > v3 Based on: > master 83bf0057 arm: at91: reworked meesc board support > > Changes in v3 (since v2): > - Remove SPL-only build of setup_clocks_for_console since it needs > to be built in u-boot for NOR boot > - Move setup_clocks_for_console from top of setup_early_clocks to inside > the switch statement. > > v2: http://marc.info/?t=144655363000001&r=1&w=2 > (mailing list squashed original submission) > > Changes in v2: > - New patch > > arch/arm/cpu/armv7/omap-common/clocks-common.c | 21 +++++++++++++++++++-- > arch/arm/cpu/armv7/omap-common/hwinit-common.c | 3 +-- > arch/arm/include/asm/arch-omap4/sys_proto.h | 2 +- > arch/arm/include/asm/arch-omap5/sys_proto.h | 2 +- > 4 files changed, 22 insertions(+), 6 deletions(-) > > diff --git a/arch/arm/cpu/armv7/omap-common/clocks-common.c b/arch/arm/cpu/armv7/omap-common/clocks-common.c > index e28b79568d1d..367d224361be 100644 > --- a/arch/arm/cpu/armv7/omap-common/clocks-common.c > +++ b/arch/arm/cpu/armv7/omap-common/clocks-common.c > @@ -769,7 +769,7 @@ void lock_dpll(u32 const base) > wait_for_lock(base); > } > > -void setup_clocks_for_console(void) > +static void setup_clocks_for_console(void) > { > /* Do not add any spl_debug prints in this function */ > clrsetbits_le32((*prcm)->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK, > @@ -853,14 +853,31 @@ void do_disable_clocks(u32 const *clk_domains, > disable_clock_domain(clk_domains[i]); > } > > -void prcm_init(void) > +/** > + * setup_early_clocks() - Setup early clocks needed for SoC > + * > + * Setup clocks for console, SPL basic initialization clocks and initialize > + * the timer. This is invoked prior prcm_init. > + */ > +void setup_early_clocks(void) > { > switch (omap_hw_init_context()) { > case OMAP_INIT_CONTEXT_SPL: > case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR: > case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH: > + setup_clocks_for_console(); > enable_basic_clocks(); > timer_init(); > + /* Fall through */ > + } > +} > + > +void prcm_init(void) > +{ > + switch (omap_hw_init_context()) { > + case OMAP_INIT_CONTEXT_SPL: > + case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR: > + case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH: > scale_vcores(*omap_vcores); > setup_dplls(); > setup_warmreset_time(); > diff --git a/arch/arm/cpu/armv7/omap-common/hwinit-common.c b/arch/arm/cpu/armv7/omap-common/hwinit-common.c > index 80794f9c611a..91f2dead364b 100644 > --- a/arch/arm/cpu/armv7/omap-common/hwinit-common.c > +++ b/arch/arm/cpu/armv7/omap-common/hwinit-common.c > @@ -125,10 +125,9 @@ void s_init(void) > set_mux_conf_regs(); > #ifdef CONFIG_SPL_BUILD > srcomp_enable(); > - setup_clocks_for_console(); > - > do_io_settings(); > #endif > + setup_early_clocks(); > prcm_init(); > } > > diff --git a/arch/arm/include/asm/arch-omap4/sys_proto.h b/arch/arm/include/asm/arch-omap4/sys_proto.h > index f30f86539130..71e3d776aa0d 100644 > --- a/arch/arm/include/asm/arch-omap4/sys_proto.h > +++ b/arch/arm/include/asm/arch-omap4/sys_proto.h > @@ -37,7 +37,7 @@ void do_set_mux(u32 base, struct pad_conf_entry const *array, int size); > void set_muxconf_regs_essential(void); > u32 wait_on_value(u32, u32, void *, u32); > void sdelay(unsigned long); > -void setup_clocks_for_console(void); > +void setup_early_clocks(void); > void prcm_init(void); > void bypass_dpll(u32 const base); > void freq_update_core(void); > diff --git a/arch/arm/include/asm/arch-omap5/sys_proto.h b/arch/arm/include/asm/arch-omap5/sys_proto.h > index 7fcb78389403..b9e09e7c52a8 100644 > --- a/arch/arm/include/asm/arch-omap5/sys_proto.h > +++ b/arch/arm/include/asm/arch-omap5/sys_proto.h > @@ -48,7 +48,7 @@ void do_set_mux32(u32 base, struct pad_conf_entry const *array, int size); > void set_muxconf_regs_essential(void); > u32 wait_on_value(u32, u32, void *, u32); > void sdelay(unsigned long); > -void setup_clocks_for_console(void); > +void setup_early_clocks(void); > void prcm_init(void); > void bypass_dpll(u32 const base); > void freq_update_core(void); >
diff --git a/arch/arm/cpu/armv7/omap-common/clocks-common.c b/arch/arm/cpu/armv7/omap-common/clocks-common.c index e28b79568d1d..367d224361be 100644 --- a/arch/arm/cpu/armv7/omap-common/clocks-common.c +++ b/arch/arm/cpu/armv7/omap-common/clocks-common.c @@ -769,7 +769,7 @@ void lock_dpll(u32 const base) wait_for_lock(base); } -void setup_clocks_for_console(void) +static void setup_clocks_for_console(void) { /* Do not add any spl_debug prints in this function */ clrsetbits_le32((*prcm)->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK, @@ -853,14 +853,31 @@ void do_disable_clocks(u32 const *clk_domains, disable_clock_domain(clk_domains[i]); } -void prcm_init(void) +/** + * setup_early_clocks() - Setup early clocks needed for SoC + * + * Setup clocks for console, SPL basic initialization clocks and initialize + * the timer. This is invoked prior prcm_init. + */ +void setup_early_clocks(void) { switch (omap_hw_init_context()) { case OMAP_INIT_CONTEXT_SPL: case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR: case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH: + setup_clocks_for_console(); enable_basic_clocks(); timer_init(); + /* Fall through */ + } +} + +void prcm_init(void) +{ + switch (omap_hw_init_context()) { + case OMAP_INIT_CONTEXT_SPL: + case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR: + case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH: scale_vcores(*omap_vcores); setup_dplls(); setup_warmreset_time(); diff --git a/arch/arm/cpu/armv7/omap-common/hwinit-common.c b/arch/arm/cpu/armv7/omap-common/hwinit-common.c index 80794f9c611a..91f2dead364b 100644 --- a/arch/arm/cpu/armv7/omap-common/hwinit-common.c +++ b/arch/arm/cpu/armv7/omap-common/hwinit-common.c @@ -125,10 +125,9 @@ void s_init(void) set_mux_conf_regs(); #ifdef CONFIG_SPL_BUILD srcomp_enable(); - setup_clocks_for_console(); - do_io_settings(); #endif + setup_early_clocks(); prcm_init(); } diff --git a/arch/arm/include/asm/arch-omap4/sys_proto.h b/arch/arm/include/asm/arch-omap4/sys_proto.h index f30f86539130..71e3d776aa0d 100644 --- a/arch/arm/include/asm/arch-omap4/sys_proto.h +++ b/arch/arm/include/asm/arch-omap4/sys_proto.h @@ -37,7 +37,7 @@ void do_set_mux(u32 base, struct pad_conf_entry const *array, int size); void set_muxconf_regs_essential(void); u32 wait_on_value(u32, u32, void *, u32); void sdelay(unsigned long); -void setup_clocks_for_console(void); +void setup_early_clocks(void); void prcm_init(void); void bypass_dpll(u32 const base); void freq_update_core(void); diff --git a/arch/arm/include/asm/arch-omap5/sys_proto.h b/arch/arm/include/asm/arch-omap5/sys_proto.h index 7fcb78389403..b9e09e7c52a8 100644 --- a/arch/arm/include/asm/arch-omap5/sys_proto.h +++ b/arch/arm/include/asm/arch-omap5/sys_proto.h @@ -48,7 +48,7 @@ void do_set_mux32(u32 base, struct pad_conf_entry const *array, int size); void set_muxconf_regs_essential(void); u32 wait_on_value(u32, u32, void *, u32); void sdelay(unsigned long); -void setup_clocks_for_console(void); +void setup_early_clocks(void); void prcm_init(void); void bypass_dpll(u32 const base); void freq_update_core(void);