summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/system-as3525.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/as3525/system-as3525.c')
-rw-r--r--firmware/target/arm/as3525/system-as3525.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/firmware/target/arm/as3525/system-as3525.c b/firmware/target/arm/as3525/system-as3525.c
index 0d91d9cad4..feaf06aab1 100644
--- a/firmware/target/arm/as3525/system-as3525.c
+++ b/firmware/target/arm/as3525/system-as3525.c
@@ -290,7 +290,9 @@ void system_init(void)
290 /* Set PCLK frequency */ 290 /* Set PCLK frequency */
291 CGU_PERI = ((CGU_PERI & ~0x7F) | /* reset divider & clksel bits */ 291 CGU_PERI = ((CGU_PERI & ~0x7F) | /* reset divider & clksel bits */
292 (AS3525_PCLK_DIV0 << 2) | 292 (AS3525_PCLK_DIV0 << 2) |
293#if CONFIG_CPU == AS3525
293 (AS3525_PCLK_DIV1 << 6) | 294 (AS3525_PCLK_DIV1 << 6) |
295#endif
294 AS3525_PCLK_SEL); 296 AS3525_PCLK_SEL);
295 297
296#ifdef BOOTLOADER 298#ifdef BOOTLOADER
@@ -372,9 +374,16 @@ void set_cpu_frequency(long frequency)
372 "mcr p15, 0, r0, c1, c0 \n" 374 "mcr p15, 0, r0, c1, c0 \n"
373 : : : "r0" ); 375 : : : "r0" );
374#else 376#else
377 /* AS3525v2 */
378 int oldstatus = disable_irq_save();
379
380 /* Change PCLK while FCLK is low, so it doesn't go too high */
381 CGU_PERI = (CGU_PERI & ~(0x1F << 2)) | (AS3525_PCLK_DIV0 << 2);
382
375 CGU_PROC = ((AS3525_FCLK_POSTDIV << 4) | 383 CGU_PROC = ((AS3525_FCLK_POSTDIV << 4) |
376 (AS3525_FCLK_PREDIV << 2) | 384 (AS3525_FCLK_PREDIV << 2) |
377 AS3525_FCLK_SEL); 385 AS3525_FCLK_SEL);
386 restore_irq(oldstatus);
378#endif /* CONFIG_CPU == AS3525 */ 387#endif /* CONFIG_CPU == AS3525 */
379 388
380 cpu_frequency = CPUFREQ_MAX; 389 cpu_frequency = CPUFREQ_MAX;
@@ -388,9 +397,17 @@ void set_cpu_frequency(long frequency)
388 "mcr p15, 0, r0, c1, c0 \n" 397 "mcr p15, 0, r0, c1, c0 \n"
389 : : : "r0" ); 398 : : : "r0" );
390#else 399#else
400 /* AS3525v2 */
401 int oldstatus = disable_irq_save();
402
391 CGU_PROC = ((AS3525_FCLK_POSTDIV_UNBOOSTED << 4) | 403 CGU_PROC = ((AS3525_FCLK_POSTDIV_UNBOOSTED << 4) |
392 (AS3525_FCLK_PREDIV << 2) | 404 (AS3525_FCLK_PREDIV << 2) |
393 AS3525_FCLK_SEL); 405 AS3525_FCLK_SEL);
406
407 /* Change PCLK after FCLK is low, so it doesn't go too high */
408 CGU_PERI = (CGU_PERI & ~(0x1F << 2)) | (AS3525_PCLK_DIV0_UNBOOSTED << 2);
409
410 restore_irq(oldstatus);
394#endif /* CONFIG_CPU == AS3525 */ 411#endif /* CONFIG_CPU == AS3525 */
395 412
396#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE 413#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE