[U-Boot] [PATCH v2 1/5] ARM: OMAP4/5: Centralize early clock initialization

Steven Kipisz
2015-11-04T14:54:11Z

On 11/04/2015 02:32 AM, Lokesh Vutla wrote:
>
>
> On Tuesday 03 November 2015 05:52 PM, 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 and build it just for SPL.
>>
>> 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
>>
>> Signed-off-by: Steve Kipisz <s-kipisz2@ti.com>
>> ---
>> v2 Based on:
>> master a6104737 ARM: at91: sama5: change the environment address to 0x6000
>>
>> Changes in v2:
>> - New patch
>>
>> arch/arm/cpu/armv7/omap-common/clocks-common.c | 26 ++++++++++++++++++++++++--
>> 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, 27 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..2ede0818e444 100644
>> --- a/arch/arm/cpu/armv7/omap-common/clocks-common.c
>> +++ b/arch/arm/cpu/armv7/omap-common/clocks-common.c
>> @@ -769,7 +769,8 @@ void lock_dpll(u32 const base)
>> wait_for_lock(base);
>> }
>>
>> -void setup_clocks_for_console(void)
>> +#ifdef CONFIG_SPL_BUILD
>> +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,
>> @@ -801,6 +802,9 @@ void setup_clocks_for_console(void)
>> CD_CLKCTRL_CLKTRCTRL_HW_AUTO <<
>> CD_CLKCTRL_CLKTRCTRL_SHIFT);
>> }
>> +#else
>> +static inline void setup_clocks_for_console(void) { }
>> +#endif
>
> Please drop this if condition as clocks will be needed in u-boot for xip
> boot.
>
How about changing it to
#if defined(CONFIG_SPL_BUILD) || defined(CONFIG_NOR_BOOT)

>>
>> void do_enable_clocks(u32 const *clk_domains,
>> u32 const *clk_modules_hw_auto,
>> @@ -853,14 +857,32 @@ 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)
>> {
>> + setup_clocks_for_console();
>> +
>> switch (omap_hw_init_context()) {
>> case OMAP_INIT_CONTEXT_SPL:
>> case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR:
>> case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH:
>
> Add setup_clocks_for_console() here instead of adding in the beginning
> of function.
>
> Thanks and regards,
> Lokesh
>