summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2010-10-14 14:29:17 -0400
committerMike Frysinger <vapier@gentoo.org>2010-10-14 20:23:26 -0400
commit5641f34f8b83b3dcb64ba5f6c0f83d2204c41387 (patch)
tree2875cb29ad161ab436193906faf34fbbd3f07cb0
parente5d8984be69f74627623573dc9bcf60711bfdfbf (diff)
downloadu-boot-5641f34f8b83b3dcb64ba5f6c0f83d2204c41387.tar.gz
u-boot-5641f34f8b83b3dcb64ba5f6c0f83d2204c41387.tar.xz
u-boot-5641f34f8b83b3dcb64ba5f6c0f83d2204c41387.zip
Blackfin: workaround anomaly 05000440
We cannot rely on the syscontrol rom func to program PLL_DIV with anomaly 05000440 is in effect, so manually program the MMR when necessary. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--arch/blackfin/cpu/initcode.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/blackfin/cpu/initcode.c b/arch/blackfin/cpu/initcode.c
index 007f5ce775..433d477ddf 100644
--- a/arch/blackfin/cpu/initcode.c
+++ b/arch/blackfin/cpu/initcode.c
@@ -391,7 +391,9 @@ program_clocks(ADI_BOOT_DATA *bs, bool put_into_srfs)
/* Always programming PLL_LOCKCNT avoids Anomaly 05000430 */
ADI_SYSCTRL_VALUES memory_settings;
- uint32_t actions = SYSCTRL_WRITE | SYSCTRL_PLLCTL | SYSCTRL_PLLDIV | SYSCTRL_LOCKCNT;
+ uint32_t actions = SYSCTRL_WRITE | SYSCTRL_PLLCTL | SYSCTRL_LOCKCNT;
+ if (!ANOMALY_05000440)
+ actions |= SYSCTRL_PLLDIV;
if (CONFIG_HAS_VR) {
actions |= SYSCTRL_VRCTL;
if (CONFIG_VR_CTL_VAL & FREQ_MASK)
@@ -410,6 +412,8 @@ program_clocks(ADI_BOOT_DATA *bs, bool put_into_srfs)
serial_putc('e');
bfrom_SysControl(actions, &memory_settings, NULL);
serial_putc('f');
+ if (ANOMALY_05000440)
+ bfin_write_PLL_DIV(CONFIG_PLL_DIV_VAL);
#if ANOMALY_05000432
bfin_write_SIC_IWR1(-1);
#endif