X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=arch%2Farm%2Fmach-at91%2Fspl_atmel.c;h=11db1e5f8cff2d2258458b89edf2d7eb063b5918;hb=83d290c56fab2d38cd1ab4c4cc7099559c1d5046;hp=b75c2ccefdc2a029dec8fceb243b3fb81679fa0a;hpb=b7b24a7a3cd74bb165d28a2959ed9143e3648fbf;p=platform%2Fkernel%2Fu-boot.git diff --git a/arch/arm/mach-at91/spl_atmel.c b/arch/arm/mach-at91/spl_atmel.c index b75c2cc..11db1e5 100644 --- a/arch/arm/mach-at91/spl_atmel.c +++ b/arch/arm/mach-at91/spl_atmel.c @@ -1,8 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2013 Atmel Corporation * Bo Shen - * - * SPDX-License-Identifier: GPL-2.0+ */ #include @@ -15,8 +14,6 @@ #include #include -DECLARE_GLOBAL_DATA_PTR; - static void switch_to_main_crystal_osc(void) { struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; @@ -32,6 +29,20 @@ static void switch_to_main_crystal_osc(void) while (!(readl(&pmc->sr) & AT91_PMC_IXR_MOSCS)) ; +#if defined(CONFIG_SAMA5D2) + /* Enable a measurement of the external oscillator */ + tmp = readl(&pmc->mcfr); + tmp |= AT91_PMC_MCFR_CCSS_XTAL_OSC; + tmp |= AT91_PMC_MCFR_RCMEAS; + writel(tmp, &pmc->mcfr); + + while (!(readl(&pmc->mcfr) & AT91_PMC_MCFR_MAINRDY)) + ; + + if (!(readl(&pmc->mcfr) & AT91_PMC_MCFR_MAINF_MASK)) + hang(); +#endif + tmp = readl(&pmc->mor); tmp &= ~AT91_PMC_MOR_OSCBYPASS; tmp &= ~AT91_PMC_MOR_KEY(0xff); @@ -47,11 +58,13 @@ static void switch_to_main_crystal_osc(void) while (!(readl(&pmc->sr) & AT91_PMC_IXR_MOSCSELS)) ; +#if !defined(CONFIG_SAMA5D2) /* Wait until MAINRDY field is set to make sure main clock is stable */ while (!(readl(&pmc->mcfr) & AT91_PMC_MAINRDY)) ; +#endif -#ifndef CONFIG_SAMA5D4 +#if !defined(CONFIG_SAMA5D4) && !defined(CONFIG_SAMA5D2) tmp = readl(&pmc->mor); tmp &= ~AT91_PMC_MOR_MOSCRCEN; tmp &= ~AT91_PMC_MOR_KEY(0xff);