|
@@ -15,6 +15,7 @@
|
|
#include <linux/clk/at91_pmc.h>
|
|
#include <linux/clk/at91_pmc.h>
|
|
#include <mach/hardware.h>
|
|
#include <mach/hardware.h>
|
|
#include <mach/at91_ramc.h>
|
|
#include <mach/at91_ramc.h>
|
|
|
|
+#include "pm.h"
|
|
|
|
|
|
#define SRAMC_SELF_FRESH_ACTIVE 0x01
|
|
#define SRAMC_SELF_FRESH_ACTIVE 0x01
|
|
#define SRAMC_SELF_FRESH_EXIT 0x00
|
|
#define SRAMC_SELF_FRESH_EXIT 0x00
|
|
@@ -78,12 +79,22 @@ ENTRY(at91_slow_clock)
|
|
str r0, .pmc_base
|
|
str r0, .pmc_base
|
|
str r1, .sramc_base
|
|
str r1, .sramc_base
|
|
str r2, .sramc1_base
|
|
str r2, .sramc1_base
|
|
- str r3, .memtype
|
|
|
|
|
|
+
|
|
|
|
+ and r0, r3, #AT91_PM_MEMTYPE_MASK
|
|
|
|
+ str r0, .memtype
|
|
|
|
+
|
|
|
|
+ lsr r0, r3, #AT91_PM_MODE_OFFSET
|
|
|
|
+ and r0, r0, #AT91_PM_MODE_MASK
|
|
|
|
+ str r0, .pm_mode
|
|
|
|
|
|
/* Active the self-refresh mode */
|
|
/* Active the self-refresh mode */
|
|
mov r0, #SRAMC_SELF_FRESH_ACTIVE
|
|
mov r0, #SRAMC_SELF_FRESH_ACTIVE
|
|
bl at91_sramc_self_refresh
|
|
bl at91_sramc_self_refresh
|
|
|
|
|
|
|
|
+ ldr r0, .pm_mode
|
|
|
|
+ tst r0, #AT91_PM_SLOW_CLOCK
|
|
|
|
+ beq skip_disable_main_clock
|
|
|
|
+
|
|
ldr pmc, .pmc_base
|
|
ldr pmc, .pmc_base
|
|
|
|
|
|
/* Save Master clock setting */
|
|
/* Save Master clock setting */
|
|
@@ -112,9 +123,18 @@ ENTRY(at91_slow_clock)
|
|
orr tmp1, tmp1, #AT91_PMC_KEY
|
|
orr tmp1, tmp1, #AT91_PMC_KEY
|
|
str tmp1, [pmc, #AT91_CKGR_MOR]
|
|
str tmp1, [pmc, #AT91_CKGR_MOR]
|
|
|
|
|
|
|
|
+skip_disable_main_clock:
|
|
|
|
+ ldr pmc, .pmc_base
|
|
|
|
+
|
|
/* Wait for interrupt */
|
|
/* Wait for interrupt */
|
|
mcr p15, 0, tmp1, c7, c0, 4
|
|
mcr p15, 0, tmp1, c7, c0, 4
|
|
|
|
|
|
|
|
+ ldr r0, .pm_mode
|
|
|
|
+ tst r0, #AT91_PM_SLOW_CLOCK
|
|
|
|
+ beq skip_enable_main_clock
|
|
|
|
+
|
|
|
|
+ ldr pmc, .pmc_base
|
|
|
|
+
|
|
/* Turn on the main oscillator */
|
|
/* Turn on the main oscillator */
|
|
ldr tmp1, [pmc, #AT91_CKGR_MOR]
|
|
ldr tmp1, [pmc, #AT91_CKGR_MOR]
|
|
orr tmp1, tmp1, #AT91_PMC_MOSCEN
|
|
orr tmp1, tmp1, #AT91_PMC_MOSCEN
|
|
@@ -143,6 +163,7 @@ ENTRY(at91_slow_clock)
|
|
|
|
|
|
wait_mckrdy
|
|
wait_mckrdy
|
|
|
|
|
|
|
|
+skip_enable_main_clock:
|
|
/* Exit the self-refresh mode */
|
|
/* Exit the self-refresh mode */
|
|
mov r0, #SRAMC_SELF_FRESH_EXIT
|
|
mov r0, #SRAMC_SELF_FRESH_EXIT
|
|
bl at91_sramc_self_refresh
|
|
bl at91_sramc_self_refresh
|
|
@@ -284,6 +305,8 @@ ENDPROC(at91_sramc_self_refresh)
|
|
.word 0
|
|
.word 0
|
|
.memtype:
|
|
.memtype:
|
|
.word 0
|
|
.word 0
|
|
|
|
+.pm_mode:
|
|
|
|
+ .word 0
|
|
.saved_mckr:
|
|
.saved_mckr:
|
|
.word 0
|
|
.word 0
|
|
.saved_pllar:
|
|
.saved_pllar:
|