-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Haavard Skinnemoen
authored and
Haavard Skinnemoen
committed
Apr 20, 2008
1 parent
5eee3ca
commit 8f03e44
Showing
6 changed files
with
118 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 02f99d1ca70d190ce12d040971819be22ea710c8 | ||
refs/heads/master: 7e59128f31e0c57d52e86d57730d4c9281494dda |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
obj-y += at32ap.o clock.o intc.o extint.o pio.o hsmc.o | ||
obj-$(CONFIG_CPU_AT32AP700X) += at32ap700x.o | ||
obj-$(CONFIG_CPU_AT32AP700X) += at32ap700x.o pm-at32ap700x.o | ||
obj-$(CONFIG_CPU_AT32AP700X) += time-tc.o | ||
obj-$(CONFIG_CPU_FREQ_AT32AP) += cpufreq.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
/* | ||
* Low-level Power Management code. | ||
* | ||
* Copyright (C) 2008 Atmel Corporation | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
#include <asm/asm.h> | ||
#include <asm/asm-offsets.h> | ||
#include <asm/thread_info.h> | ||
#include <asm/arch/pm.h> | ||
|
||
.section .bss, "wa", @nobits | ||
.global disable_idle_sleep | ||
.type disable_idle_sleep, @object | ||
disable_idle_sleep: | ||
.int 4 | ||
.size disable_idle_sleep, . - disable_idle_sleep | ||
|
||
/* Keep this close to the irq handlers */ | ||
.section .irq.text, "ax", @progbits | ||
|
||
/* | ||
* void cpu_enter_idle(void) | ||
* | ||
* Put the CPU into "idle" mode, in which it will consume | ||
* significantly less power. | ||
* | ||
* If an interrupt comes along in the window between | ||
* unmask_interrupts and the sleep instruction below, the | ||
* interrupt code will adjust the return address so that we | ||
* never execute the sleep instruction. This is required | ||
* because the AP7000 doesn't unmask interrupts when entering | ||
* sleep modes; later CPUs may not need this workaround. | ||
*/ | ||
.global cpu_enter_idle | ||
.type cpu_enter_idle, @function | ||
cpu_enter_idle: | ||
mask_interrupts | ||
get_thread_info r8 | ||
ld.w r9, r8[TI_flags] | ||
bld r9, TIF_NEED_RESCHED | ||
brcs .Lret_from_sleep | ||
sbr r9, TIF_CPU_GOING_TO_SLEEP | ||
st.w r8[TI_flags], r9 | ||
unmask_interrupts | ||
sleep CPU_SLEEP_IDLE | ||
.size cpu_idle_sleep, . - cpu_idle_sleep | ||
|
||
/* | ||
* Common return path for PM functions that don't run from | ||
* SRAM. | ||
*/ | ||
.global cpu_idle_skip_sleep | ||
.type cpu_idle_skip_sleep, @function | ||
cpu_idle_skip_sleep: | ||
mask_interrupts | ||
ld.w r9, r8[TI_flags] | ||
cbr r9, TIF_CPU_GOING_TO_SLEEP | ||
st.w r8[TI_flags], r9 | ||
.Lret_from_sleep: | ||
unmask_interrupts | ||
retal r12 | ||
.size cpu_idle_skip_sleep, . - cpu_idle_skip_sleep |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* | ||
* AVR32 AP Power Management. | ||
* | ||
* Copyright (C) 2008 Atmel Corporation | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
#ifndef __ASM_AVR32_ARCH_PM_H | ||
#define __ASM_AVR32_ARCH_PM_H | ||
|
||
/* Possible arguments to the "sleep" instruction */ | ||
#define CPU_SLEEP_IDLE 0 | ||
#define CPU_SLEEP_FROZEN 1 | ||
#define CPU_SLEEP_STANDBY 2 | ||
#define CPU_SLEEP_STOP 3 | ||
#define CPU_SLEEP_STATIC 5 | ||
|
||
#ifndef __ASSEMBLY__ | ||
extern void cpu_enter_idle(void); | ||
|
||
extern bool disable_idle_sleep; | ||
|
||
static inline void cpu_disable_idle_sleep(void) | ||
{ | ||
disable_idle_sleep = true; | ||
} | ||
|
||
static inline void cpu_enable_idle_sleep(void) | ||
{ | ||
disable_idle_sleep = false; | ||
} | ||
|
||
static inline void cpu_idle_sleep(void) | ||
{ | ||
/* | ||
* If we're using the COUNT and COMPARE registers for | ||
* timekeeping, we can't use the IDLE state. | ||
*/ | ||
if (disable_idle_sleep) | ||
cpu_relax(); | ||
else | ||
cpu_enter_idle(); | ||
} | ||
#endif | ||
|
||
#endif /* __ASM_AVR32_ARCH_PM_H */ |