[U-Boot] [PATCH v3 01/19] arm: socfpga: Restructure clock manager driver
Ley Foon Tan
lftan.linux at gmail.com
Mon Apr 3 06:30:14 UTC 2017
On Fri, Mar 31, 2017 at 4:53 AM, Dinh Nguyen <dinh.linux at gmail.com> wrote:
> On Thu, Mar 30, 2017 at 8:08 AM, Ley Foon Tan <ley.foon.tan at intel.com> wrote:
>> Restructure clock manager driver in the preparation to support A10.
>> Move the Gen5 specific code to _gen5 files. No functional change.
>>
>> Change all uint32_t to u32 and change to use macro BIT(n) for bit shift.
>>
>> Signed-off-by: Ley Foon Tan <ley.foon.tan at intel.com>
>> ---
>> arch/arm/mach-socfpga/Makefile | 3 +-
>> arch/arm/mach-socfpga/clock_manager.c | 515 +--------------------
>> .../{clock_manager.c => clock_manager_gen5.c} | 104 ++---
>> arch/arm/mach-socfpga/include/mach/clock_manager.h | 316 +------------
>> .../mach/{clock_manager.h => clock_manager_gen5.h} | 151 +++---
>> 5 files changed, 125 insertions(+), 964 deletions(-)
>> copy arch/arm/mach-socfpga/{clock_manager.c => clock_manager_gen5.c} (88%)
>> copy arch/arm/mach-socfpga/include/mach/{clock_manager.h => clock_manager_gen5.h} (80%)
>>
>> diff --git a/arch/arm/mach-socfpga/Makefile b/arch/arm/mach-socfpga/Makefile
>> index 809cd47..b76de4c 100644
>
> [snip]
>
>>
>> /* function to write a clock register that has phase information */
>> -static void cm_write_with_phase(uint32_t value,
>> - uint32_t reg_address, uint32_t mask)
>> +static int cm_write_with_phase(u32 value, u32 reg_address, u32 mask)
>
> You changed the return type of this function here...
Will update commit message for more detail.
>
>> {
>> + int ret;
>> +
>> /* poll until phase is zero */
>> - while (readl(reg_address) & mask)
>> - ;
>> + ret = wait_for_bit(__func__, (const u32 *)reg_address, mask,
>> + false, 20000, false);
>> + if (ret)
>> + return ret;
>>
>> writel(value, reg_address);
>>
>> - while (readl(reg_address) & mask)
>> - ;
>> + return wait_for_bit(__func__, (const u32 *)reg_address, mask,
>> + false, 20000, false);
>> }
>
> because now, you got a 20 seconds timeout and a return value if there
> is a timeout,
>
>>
>> /*
>> @@ -233,11 +215,6 @@ void cm_basic_init(const struct cm_config * const cfg)
>>
>> writel(cfg->gpiodiv, &clock_manager_base->per_pll.gpiodiv);
>>
>> -#define LOCKED_MASK \
>> - (CLKMGR_INTER_SDRPLLLOCKED_MASK | \
>> - CLKMGR_INTER_PERPLLLOCKED_MASK | \
>> - CLKMGR_INTER_MAINPLLLOCKED_MASK)
>> -
>> cm_wait_for_lock(LOCKED_MASK);
>>
>> /* write the sdram clock counters before toggling outreset all */
>> @@ -257,13 +234,13 @@ void cm_basic_init(const struct cm_config * const cfg)
>> * after locking, but before taking out of bypass
>> * assert/deassert outresetall
>> */
>> - uint32_t mainvco = readl(&clock_manager_base->main_pll.vco);
>> + u32 mainvco = readl(&clock_manager_base->main_pll.vco);
>>
>> /* assert main outresetall */
>> writel(mainvco | CLKMGR_MAINPLLGRP_VCO_OUTRESETALL_MASK,
>> &clock_manager_base->main_pll.vco);
>>
>> - uint32_t periphvco = readl(&clock_manager_base->per_pll.vco);
>> + u32 periphvco = readl(&clock_manager_base->per_pll.vco);
>>
>> /* assert pheriph outresetall */
>> writel(periphvco | CLKMGR_PERPLLGRP_VCO_OUTRESETALL_MASK,
>> @@ -291,20 +268,20 @@ void cm_basic_init(const struct cm_config * const cfg)
>> * are aligned nicely; so we can change any phase.
>> */
>> cm_write_with_phase(cfg->ddrdqsclk,
>> - (uint32_t)&clock_manager_base->sdr_pll.ddrdqsclk,
>> + (u32)&clock_manager_base->sdr_pll.ddrdqsclk,
>> CLKMGR_SDRPLLGRP_DDRDQSCLK_PHASE_MASK);
>>
>> /* SDRAM DDR2XDQSCLK */
>> cm_write_with_phase(cfg->ddr2xdqsclk,
>> - (uint32_t)&clock_manager_base->sdr_pll.ddr2xdqsclk,
>> + (u32)&clock_manager_base->sdr_pll.ddr2xdqsclk,
>> CLKMGR_SDRPLLGRP_DDR2XDQSCLK_PHASE_MASK);
>>
>> cm_write_with_phase(cfg->ddrdqclk,
>> - (uint32_t)&clock_manager_base->sdr_pll.ddrdqclk,
>> + (u32)&clock_manager_base->sdr_pll.ddrdqclk,
>> CLKMGR_SDRPLLGRP_DDRDQCLK_PHASE_MASK);
>>
>> cm_write_with_phase(cfg->s2fuser2clk,
>> - (uint32_t)&clock_manager_base->sdr_pll.s2fuser2clk,
>> + (u32)&clock_manager_base->sdr_pll.s2fuser2clk,
>> CLKMGR_SDRPLLGRP_S2FUSER2CLK_PHASE_MASK);
>>
>
> but you're not checking the return value at all?
Will check the return value from cm_write_with_phase() and cm_basic_init().
Thanks.
Regards
Ley Foon
More information about the U-Boot
mailing list