Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
b0a37dca
Commit
b0a37dca
authored
Sep 22, 2011
by
Russell King
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'pm' into devel-stable
parents
f70cac8d
8e6f83bb
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
197 additions
and
201 deletions
+197
-201
arch/arm/include/asm/proc-fns.h
arch/arm/include/asm/proc-fns.h
+8
-0
arch/arm/include/asm/suspend.h
arch/arm/include/asm/suspend.h
+1
-16
arch/arm/kernel/Makefile
arch/arm/kernel/Makefile
+1
-1
arch/arm/kernel/sleep.S
arch/arm/kernel/sleep.S
+27
-58
arch/arm/kernel/suspend.c
arch/arm/kernel/suspend.c
+72
-0
arch/arm/mm/proc-arm920.S
arch/arm/mm/proc-arm920.S
+8
-13
arch/arm/mm/proc-arm926.S
arch/arm/mm/proc-arm926.S
+8
-13
arch/arm/mm/proc-sa1100.S
arch/arm/mm/proc-sa1100.S
+10
-15
arch/arm/mm/proc-v6.S
arch/arm/mm/proc-v6.S
+19
-25
arch/arm/mm/proc-v7.S
arch/arm/mm/proc-v7.S
+22
-28
arch/arm/mm/proc-xsc3.S
arch/arm/mm/proc-xsc3.S
+11
-17
arch/arm/mm/proc-xscale.S
arch/arm/mm/proc-xscale.S
+10
-15
No files found.
arch/arm/include/asm/proc-fns.h
View file @
b0a37dca
...
...
@@ -81,6 +81,10 @@ extern void cpu_dcache_clean_area(void *, int);
extern
void
cpu_do_switch_mm
(
unsigned
long
pgd_phys
,
struct
mm_struct
*
mm
);
extern
void
cpu_set_pte_ext
(
pte_t
*
ptep
,
pte_t
pte
,
unsigned
int
ext
);
extern
void
cpu_reset
(
unsigned
long
addr
)
__attribute__
((
noreturn
));
/* These three are private to arch/arm/kernel/suspend.c */
extern
void
cpu_do_suspend
(
void
*
);
extern
void
cpu_do_resume
(
void
*
);
#else
#define cpu_proc_init processor._proc_init
#define cpu_proc_fin processor._proc_fin
...
...
@@ -89,6 +93,10 @@ extern void cpu_reset(unsigned long addr) __attribute__((noreturn));
#define cpu_dcache_clean_area processor.dcache_clean_area
#define cpu_set_pte_ext processor.set_pte_ext
#define cpu_do_switch_mm processor.switch_mm
/* These three are private to arch/arm/kernel/suspend.c */
#define cpu_do_suspend processor.do_suspend
#define cpu_do_resume processor.do_resume
#endif
extern
void
cpu_resume
(
void
);
...
...
arch/arm/include/asm/suspend.h
View file @
b0a37dca
#ifndef __ASM_ARM_SUSPEND_H
#define __ASM_ARM_SUSPEND_H
#include <asm/memory.h>
#include <asm/tlbflush.h>
extern
void
cpu_resume
(
void
);
/*
* Hide the first two arguments to __cpu_suspend - these are an implementation
* detail which platform code shouldn't have to know about.
*/
static
inline
int
cpu_suspend
(
unsigned
long
arg
,
int
(
*
fn
)(
unsigned
long
))
{
extern
int
__cpu_suspend
(
int
,
long
,
unsigned
long
,
int
(
*
)(
unsigned
long
));
int
ret
=
__cpu_suspend
(
0
,
PHYS_OFFSET
-
PAGE_OFFSET
,
arg
,
fn
);
flush_tlb_all
();
return
ret
;
}
extern
int
cpu_suspend
(
unsigned
long
,
int
(
*
)(
unsigned
long
));
#endif
arch/arm/kernel/Makefile
View file @
b0a37dca
...
...
@@ -29,7 +29,7 @@ obj-$(CONFIG_MODULES) += armksyms.o module.o
obj-$(CONFIG_ARTHUR)
+=
arthur.o
obj-$(CONFIG_ISA_DMA)
+=
dma-isa.o
obj-$(CONFIG_PCI)
+=
bios32.o isa.o
obj-$(CONFIG_PM_SLEEP)
+=
sleep.o
obj-$(CONFIG_PM_SLEEP)
+=
sleep.o
suspend.o
obj-$(CONFIG_HAVE_SCHED_CLOCK)
+=
sched_clock.o
obj-$(CONFIG_SMP)
+=
smp.o smp_tlb.o
obj-$(CONFIG_HAVE_ARM_SCU)
+=
smp_scu.o
...
...
arch/arm/kernel/sleep.S
View file @
b0a37dca
...
...
@@ -8,92 +8,61 @@
.
text
/*
*
Save
CPU
state
for
a
suspend
*
r1
=
v
:
p
offset
*
r2
=
suspend
function
arg0
*
r3
=
suspend
function
*
Save
CPU
state
for
a
suspend
.
This
saves
the
CPU
general
purpose
*
registers
,
and
allocates
space
on
the
kernel
stack
to
save
the
CPU
*
specific
registers
and
some
other
data
for
resume
.
*
r0
=
suspend
function
arg0
*
r1
=
suspend
function
*/
ENTRY
(
__cpu_suspend
)
stmfd
sp
!,
{
r4
-
r11
,
lr
}
#ifdef MULTI_CPU
ldr
r10
,
=
processor
ldr
r5
,
[
r10
,
#
CPU_SLEEP_SIZE
]
@
size
of
CPU
sleep
state
ldr
ip
,
[
r10
,
#
CPU_DO_RESUME
]
@
virtual
resume
function
ldr
r4
,
[
r10
,
#
CPU_SLEEP_SIZE
]
@
size
of
CPU
sleep
state
#else
ldr
r5
,
=
cpu_suspend_size
ldr
ip
,
=
cpu_do_resume
ldr
r4
,
=
cpu_suspend_size
#endif
mov
r
6
,
sp
@
current
virtual
SP
sub
sp
,
sp
,
r5
@
allocate
CPU
state
on
stack
mov
r0
,
sp
@
save
pointer
to
CPU
save
blo
ck
add
ip
,
ip
,
r1
@
convert
resume
fn
to
phys
stmfd
sp
!,
{
r1
,
r6
,
ip
}
@
save
v
:
p
,
virt
SP
,
phys
resume
fn
ldr
r5
,
=
sleep_save_sp
add
r6
,
sp
,
r1
@
convert
SP
to
phys
stmfd
sp
!,
{
r2
,
r3
}
@
save
suspend
func
arg
and
pointer
mov
r
5
,
sp
@
current
virtual
SP
add
r4
,
r4
,
#
12
@
Space
for
pgd
,
virt
sp
,
phys
resume
fn
sub
sp
,
sp
,
r4
@
allocate
CPU
state
on
sta
ck
stmfd
sp
!,
{
r0
,
r1
}
@
save
suspend
func
arg
and
pointer
add
r0
,
sp
,
#
8
@
save
pointer
to
save
block
mov
r1
,
r4
@
size
of
save
block
mov
r2
,
r5
@
virtual
SP
ldr
r3
,
=
sleep_save_sp
#ifdef CONFIG_SMP
ALT_SMP
(
mrc
p15
,
0
,
lr
,
c0
,
c0
,
5
)
ALT_UP
(
mov
lr
,
#
0
)
and
lr
,
lr
,
#
15
str
r6
,
[
r5
,
lr
,
lsl
#
2
]
@
save
phys
SP
#else
str
r6
,
[
r5
]
@
save
phys
SP
#endif
#ifdef MULTI_CPU
mov
lr
,
pc
ldr
pc
,
[
r10
,
#
CPU_DO_SUSPEND
]
@
save
CPU
state
#else
bl
cpu_do_suspend
#endif
@
flush
data
cache
#ifdef MULTI_CACHE
ldr
r10
,
=
cpu_cache
mov
lr
,
pc
ldr
pc
,
[
r10
,
#
CACHE_FLUSH_KERN_ALL
]
#else
bl
__cpuc_flush_kern_all
add
r3
,
r3
,
lr
,
lsl
#
2
#endif
bl
__cpu_suspend_save
adr
lr
,
BSYM
(
cpu_suspend_abort
)
ldmfd
sp
!,
{
r0
,
pc
}
@
call
suspend
fn
ENDPROC
(
__cpu_suspend
)
.
ltorg
cpu_suspend_abort
:
ldmia
sp
!,
{
r1
-
r3
}
@
pop
v
:
p
,
virt
SP
,
phys
resume
fn
ldmia
sp
!,
{
r1
-
r3
}
@
pop
phys
pgd
,
virt
SP
,
phys
resume
fn
teq
r0
,
#
0
moveq
r0
,
#
1
@
force
non
-
zero
value
mov
sp
,
r2
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
ENDPROC
(
cpu_suspend_abort
)
/*
*
r0
=
control
register
value
*
r1
=
v
:
p
offset
(
preserved
by
cpu_do_resume
)
*
r2
=
phys
page
table
base
*
r3
=
L1
section
flags
*/
.
align
5
ENTRY
(
cpu_resume_mmu
)
adr
r4
,
cpu_resume_turn_mmu_on
mov
r4
,
r4
,
lsr
#
20
orr
r3
,
r3
,
r4
,
lsl
#
20
ldr
r5
,
[
r2
,
r4
,
lsl
#
2
]
@
save
old
mapping
str
r3
,
[
r2
,
r4
,
lsl
#
2
]
@
setup
1
:
1
mapping
for
mmu
code
sub
r2
,
r2
,
r1
ldr
r3
,
=
cpu_resume_after_mmu
bic
r1
,
r0
,
#
CR_C
@
ensure
D
-
cache
is
disabled
b
cpu_resume_turn_mmu_on
ENDPROC
(
cpu_resume_mmu
)
.
ltorg
.
align
5
cpu_resume_turn_mmu_on
:
mcr
p15
,
0
,
r1
,
c1
,
c0
,
0
@
turn
on
MMU
,
I
-
cache
,
etc
mrc
p15
,
0
,
r1
,
c0
,
c0
,
0
@
read
id
reg
mov
r1
,
r1
mov
r1
,
r1
mcr
p15
,
0
,
r0
,
c1
,
c0
,
0
@
turn
on
MMU
,
I
-
cache
,
etc
mrc
p15
,
0
,
r0
,
c0
,
c0
,
0
@
read
id
reg
mov
r0
,
r0
mov
r0
,
r0
mov
pc
,
r3
@
jump
to
virtual
address
ENDPROC
(
cpu_resume_
turn_mmu_on
)
ENDPROC
(
cpu_resume_
mmu
)
cpu_resume_after_mmu
:
str
r5
,
[
r2
,
r4
,
lsl
#
2
]
@
restore
old
mapping
mcr
p15
,
0
,
r0
,
c1
,
c0
,
0
@
turn
on
D
-
cache
bl
cpu_init
@
restore
the
und
/
abt
/
irq
banked
regs
mov
r0
,
#
0
@
return
zero
on
success
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
...
...
@@ -119,7 +88,7 @@ ENTRY(cpu_resume)
ldr
r0
,
sleep_save_sp
@
stack
phys
addr
#endif
setmode
PSR_I_BIT
| PSR_F_BIT |
SVC_MODE
,
r1
@
set
SVC
,
irqs
off
@
load
v
:
p
,
stack
,
resume
fn
@
load
phys
pgd
,
stack
,
resume
fn
ARM
(
ldmia
r0
!,
{
r1
,
sp
,
pc
}
)
THUMB
(
ldmia
r0
!,
{
r1
,
r2
,
r3
}
)
THUMB
(
mov
sp
,
r2
)
...
...
arch/arm/kernel/suspend.c
0 → 100644
View file @
b0a37dca
#include <linux/init.h>
#include <asm/pgalloc.h>
#include <asm/pgtable.h>
#include <asm/memory.h>
#include <asm/suspend.h>
#include <asm/tlbflush.h>
static
pgd_t
*
suspend_pgd
;
extern
int
__cpu_suspend
(
unsigned
long
,
int
(
*
)(
unsigned
long
));
extern
void
cpu_resume_mmu
(
void
);
/*
* This is called by __cpu_suspend() to save the state, and do whatever
* flushing is required to ensure that when the CPU goes to sleep we have
* the necessary data available when the caches are not searched.
*/
void
__cpu_suspend_save
(
u32
*
ptr
,
u32
ptrsz
,
u32
sp
,
u32
*
save_ptr
)
{
*
save_ptr
=
virt_to_phys
(
ptr
);
/* This must correspond to the LDM in cpu_resume() assembly */
*
ptr
++
=
virt_to_phys
(
suspend_pgd
);
*
ptr
++
=
sp
;
*
ptr
++
=
virt_to_phys
(
cpu_do_resume
);
cpu_do_suspend
(
ptr
);
flush_cache_all
();
outer_clean_range
(
*
save_ptr
,
*
save_ptr
+
ptrsz
);
outer_clean_range
(
virt_to_phys
(
save_ptr
),
virt_to_phys
(
save_ptr
)
+
sizeof
(
*
save_ptr
));
}
/*
* Hide the first two arguments to __cpu_suspend - these are an implementation
* detail which platform code shouldn't have to know about.
*/
int
cpu_suspend
(
unsigned
long
arg
,
int
(
*
fn
)(
unsigned
long
))
{
struct
mm_struct
*
mm
=
current
->
active_mm
;
int
ret
;
if
(
!
suspend_pgd
)
return
-
EINVAL
;
/*
* Provide a temporary page table with an identity mapping for
* the MMU-enable code, required for resuming. On successful
* resume (indicated by a zero return code), we need to switch
* back to the correct page tables.
*/
ret
=
__cpu_suspend
(
arg
,
fn
);
if
(
ret
==
0
)
{
cpu_switch_mm
(
mm
->
pgd
,
mm
);
local_flush_tlb_all
();
}
return
ret
;
}
static
int
__init
cpu_suspend_init
(
void
)
{
suspend_pgd
=
pgd_alloc
(
&
init_mm
);
if
(
suspend_pgd
)
{
unsigned
long
addr
=
virt_to_phys
(
cpu_resume_mmu
);
identity_mapping_add
(
suspend_pgd
,
addr
,
addr
+
SECTION_SIZE
);
}
return
suspend_pgd
?
0
:
-
ENOMEM
;
}
core_initcall
(
cpu_suspend_init
);
arch/arm/mm/proc-arm920.S
View file @
b0a37dca
...
...
@@ -379,31 +379,26 @@ ENTRY(cpu_arm920_set_pte_ext)
/*
Suspend
/
resume
support
:
taken
from
arch
/
arm
/
plat
-
s3c24xx
/
sleep
.
S
*/
.
globl
cpu_arm920_suspend_size
.
equ
cpu_arm920_suspend_size
,
4
*
4
.
equ
cpu_arm920_suspend_size
,
4
*
3
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_arm920_do_suspend
)
stmfd
sp
!,
{
r4
-
r
7
,
lr
}
stmfd
sp
!,
{
r4
-
r
6
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mrc
p15
,
0
,
r7
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r7
}
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
mrc
p15
,
0
,
r6
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r6
}
ldmfd
sp
!,
{
r4
-
r6
,
pc
}
ENDPROC
(
cpu_arm920_do_suspend
)
ENTRY
(
cpu_arm920_do_resume
)
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
I
+
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
+
D
caches
ldmia
r0
,
{
r4
-
r
7
}
ldmia
r0
,
{
r4
-
r
6
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r7
@
control
register
mov
r2
,
r6
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
| PMD_BIT4 |
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r6
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_arm920_do_resume
)
#endif
...
...
arch/arm/mm/proc-arm926.S
View file @
b0a37dca
...
...
@@ -394,31 +394,26 @@ ENTRY(cpu_arm926_set_pte_ext)
/*
Suspend
/
resume
support
:
taken
from
arch
/
arm
/
plat
-
s3c24xx
/
sleep
.
S
*/
.
globl
cpu_arm926_suspend_size
.
equ
cpu_arm926_suspend_size
,
4
*
4
.
equ
cpu_arm926_suspend_size
,
4
*
3
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_arm926_do_suspend
)
stmfd
sp
!,
{
r4
-
r
7
,
lr
}
stmfd
sp
!,
{
r4
-
r
6
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mrc
p15
,
0
,
r7
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r7
}
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
mrc
p15
,
0
,
r6
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r6
}
ldmfd
sp
!,
{
r4
-
r6
,
pc
}
ENDPROC
(
cpu_arm926_do_suspend
)
ENTRY
(
cpu_arm926_do_resume
)
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
I
+
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
+
D
caches
ldmia
r0
,
{
r4
-
r
7
}
ldmia
r0
,
{
r4
-
r
6
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r7
@
control
register
mov
r2
,
r6
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
| PMD_BIT4 |
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r6
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_arm926_do_resume
)
#endif
...
...
arch/arm/mm/proc-sa1100.S
View file @
b0a37dca
...
...
@@ -168,20 +168,19 @@ ENTRY(cpu_sa1100_set_pte_ext)
mov
pc
,
lr
.
globl
cpu_sa1100_suspend_size
.
equ
cpu_sa1100_suspend_size
,
4
*
4
.
equ
cpu_sa1100_suspend_size
,
4
*
3
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_sa1100_do_suspend
)
stmfd
sp
!,
{
r4
-
r
7
,
lr
}
stmfd
sp
!,
{
r4
-
r
6
,
lr
}
mrc
p15
,
0
,
r4
,
c3
,
c0
,
0
@
domain
ID
mrc
p15
,
0
,
r5
,
c2
,
c0
,
0
@
translation
table
base
addr
mrc
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r7
,
c1
,
c0
,
0
@
control
reg
stmia
r0
,
{
r4
-
r7
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
mrc
p15
,
0
,
r5
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r6
,
c1
,
c0
,
0
@
control
reg
stmia
r0
,
{
r4
-
r6
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r6
,
pc
}
ENDPROC
(
cpu_sa1100_do_suspend
)
ENTRY
(
cpu_sa1100_do_resume
)
ldmia
r0
,
{
r4
-
r
7
}
@
load
cp
regs
ldmia
r0
,
{
r4
-
r
6
}
@
load
cp
regs
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
flush
I
+
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
flush
I
&D
cache
...
...
@@ -189,13 +188,9 @@ ENTRY(cpu_sa1100_do_resume)
mcr
p15
,
0
,
ip
,
c9
,
c0
,
5
@
allow
user
space
to
use
RB
mcr
p15
,
0
,
r4
,
c3
,
c0
,
0
@
domain
ID
mcr
p15
,
0
,
r5
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mov
r0
,
r7
@
control
register
mov
r2
,
r5
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
|
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r5
,
c13
,
c0
,
0
@
PID
mov
r0
,
r6
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_sa1100_do_resume
)
#endif
...
...
arch/arm/mm/proc-v6.S
View file @
b0a37dca
...
...
@@ -128,20 +128,18 @@ ENTRY(cpu_v6_set_pte_ext)
/*
Suspend
/
resume
support
:
taken
from
arch
/
arm
/
mach
-
s3c64xx
/
sleep
.
S
*/
.
globl
cpu_v6_suspend_size
.
equ
cpu_v6_suspend_size
,
4
*
8
.
equ
cpu_v6_suspend_size
,
4
*
6
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_v6_do_suspend
)
stmfd
sp
!,
{
r4
-
r
11
,
lr
}
stmfd
sp
!,
{
r4
-
r
9
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mrc
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mrc
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r7
,
c2
,
c0
,
0
@
Translation
table
base
0
mrc
p15
,
0
,
r8
,
c2
,
c0
,
1
@
Translation
table
base
1
mrc
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
register
mrc
p15
,
0
,
r10
,
c1
,
c0
,
2
@
co
-
processor
access
control
mrc
p15
,
0
,
r11
,
c1
,
c0
,
0
@
control
register
stmia
r0
,
{
r4
-
r11
}
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
mrc
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r6
,
c2
,
c0
,
1
@
Translation
table
base
1
mrc
p15
,
0
,
r7
,
c1
,
c0
,
1
@
auxiliary
control
register
mrc
p15
,
0
,
r8
,
c1
,
c0
,
2
@
co
-
processor
access
control
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
control
register
stmia
r0
,
{
r4
-
r9
}
ldmfd
sp
!,
{
r4
-
r9
,
pc
}
ENDPROC
(
cpu_v6_do_suspend
)
ENTRY
(
cpu_v6_do_resume
)
...
...
@@ -150,25 +148,21 @@ ENTRY(cpu_v6_do_resume)
mcr
p15
,
0
,
ip
,
c7
,
c5
,
0
@
invalidate
I
cache
mcr
p15
,
0
,
ip
,
c7
,
c15
,
0
@
clean
+
invalidate
cache
mcr
p15
,
0
,
ip
,
c7
,
c10
,
4
@
drain
write
buffer
ldmia
r0
,
{
r4
-
r11
}
mcr
p15
,
0
,
ip
,
c13
,
c0
,
1
@
set
reserved
context
ID
ldmia
r0
,
{
r4
-
r9
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mcr
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mcr
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r7
,
c2
,
c0
,
0
@
Translation
table
base
0
mcr
p15
,
0
,
r8
,
c2
,
c0
,
1
@
Translation
table
base
1
mcr
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
register
mcr
p15
,
0
,
r10
,
c1
,
c0
,
2
@
co
-
processor
access
control
mcr
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
ALT_SMP
(
orr
r1
,
r1
,
#
TTB_FLAGS_SMP
)
ALT_UP
(
orr
r1
,
r1
,
#
TTB_FLAGS_UP
)
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
Translation
table
base
0
mcr
p15
,
0
,
r6
,
c2
,
c0
,
1
@
Translation
table
base
1
mcr
p15
,
0
,
r7
,
c1
,
c0
,
1
@
auxiliary
control
register
mcr
p15
,
0
,
r8
,
c1
,
c0
,
2
@
co
-
processor
access
control
mcr
p15
,
0
,
ip
,
c2
,
c0
,
2
@
TTB
control
register
mcr
p15
,
0
,
ip
,
c7
,
c5
,
4
@
ISB
mov
r0
,
r11
@
control
register
mov
r2
,
r7
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
cpu_resume_l1_flags
mov
r0
,
r9
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_v6_do_resume
)
cpu_resume_l1_flags
:
ALT_SMP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_SMP
)
ALT_UP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_UP
)
#endif
string
cpu_v6_name
,
"ARMv6-compatible processor"
...
...
arch/arm/mm/proc-v7.S
View file @
b0a37dca
...
...
@@ -217,56 +217,50 @@ ENDPROC(cpu_v7_set_pte_ext)
/*
Suspend
/
resume
support
:
derived
from
arch
/
arm
/
mach
-
s5pv210
/
sleep
.
S
*/
.
globl
cpu_v7_suspend_size
.
equ
cpu_v7_suspend_size
,
4
*
9
.
equ
cpu_v7_suspend_size
,
4
*
7
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_v7_do_suspend
)
stmfd
sp
!,
{
r4
-
r1
1
,
lr
}
stmfd
sp
!,
{
r4
-
r1
0
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mrc
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mrc
p15
,
0
,
r6
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
stmia
r0
!,
{
r4
-
r6
}
mrc
p15
,
0
,
r5
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
stmia
r0
!,
{
r4
-
r5
}
mrc
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r7
,
c2
,
c0
,
0
@
TTB
0
mrc
p15
,
0
,
r8
,
c2
,
c0
,
1
@
TTB
1
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
Control
register
mrc
p15
,
0
,
r10
,
c1
,
c0
,
1
@
Auxiliary
control
register
mrc
p15
,
0
,
r11
,
c1
,
c0
,
2
@
Co
-
processor
access
control
stmia
r0
,
{
r6
-
r11
}
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
mrc
p15
,
0
,
r7
,
c2
,
c0
,
1
@
TTB
1
mrc
p15
,
0
,
r8
,
c1
,
c0
,
0
@
Control
register
mrc
p15
,
0
,
r9
,
c1
,
c0
,
1
@
Auxiliary
control
register
mrc
p15
,
0
,
r10
,
c1
,
c0
,
2
@
Co
-
processor
access
control
stmia
r0
,
{
r6
-
r10
}
ldmfd
sp
!,
{
r4
-
r10
,
pc
}
ENDPROC
(
cpu_v7_do_suspend
)
ENTRY
(
cpu_v7_do_resume
)
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c5
,
0
@
invalidate
I
cache
ldmia
r0
!,
{
r4
-
r6
}
mcr
p15
,
0
,
ip
,
c13
,
c0
,
1
@
set
reserved
context
ID
ldmia
r0
!,
{
r4
-
r5
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mcr
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mcr
p15
,
0
,
r6
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
ldmia
r0
,
{
r6
-
r11
}
mcr
p15
,
0
,
r5
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
ldmia
r0
,
{
r6
-
r10
}
mcr
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r7
,
c2
,
c0
,
0
@
TTB
0
mcr
p15
,
0
,
r8
,
c2
,
c0
,
1
@
TTB
1
ALT_SMP
(
orr
r1
,
r1
,
#
TTB_FLAGS_SMP
)
ALT_UP
(
orr
r1
,
r1
,
#
TTB_FLAGS_UP
)
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
TTB
0
mcr
p15
,
0
,
r7
,
c2
,
c0
,
1
@
TTB
1
mcr
p15
,
0
,
ip
,
c2
,
c0
,
2
@
TTB
control
register
mrc
p15
,
0
,
r4
,
c1
,
c0
,
1
@
Read
Auxiliary
control
register
teq
r4
,
r
10
@
Is
it
already
set
?
mcrne
p15
,
0
,
r
10
,
c1
,
c0
,
1
@
No
,
so
write
it
mcr
p15
,
0
,
r1
1
,
c1
,
c0
,
2
@
Co
-
processor
access
control
teq
r4
,
r
9
@
Is
it
already
set
?
mcrne
p15
,
0
,
r
9
,
c1
,
c0
,
1
@
No
,
so
write
it
mcr
p15
,
0
,
r1
0
,
c1
,
c0
,
2
@
Co
-
processor
access
control
ldr
r4
,
=
PRRR
@
PRRR
ldr
r5
,
=
NMRR
@
NMRR
mcr
p15
,
0
,
r4
,
c10
,
c2
,
0
@
write
PRRR
mcr
p15
,
0
,
r5
,
c10
,
c2
,
1
@
write
NMRR
isb
dsb
mov
r0
,
r9
@
control
register
mov
r2
,
r7
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
cpu_resume_l1_flags
mov
r0
,
r8
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_v7_do_resume
)
cpu_resume_l1_flags
:
ALT_SMP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_SMP
)
ALT_UP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_UP
)
#endif
__CPUINIT
...
...
arch/arm/mm/proc-xsc3.S
View file @
b0a37dca
...
...
@@ -406,24 +406,23 @@ ENTRY(cpu_xsc3_set_pte_ext)
.
align
.
globl
cpu_xsc3_suspend_size
.
equ
cpu_xsc3_suspend_size
,
4
*
7
.
equ
cpu_xsc3_suspend_size
,
4
*
6
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_xsc3_do_suspend
)
stmfd
sp
!,
{
r4
-
r
10
,
lr
}
stmfd
sp
!,
{
r4
-
r
9
,
lr
}
mrc
p14
,
0
,
r4
,
c6
,
c0
,
0
@
clock
configuration
,
for
turbo
mode
mrc
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mrc
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mrc
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mrc
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
reg
mrc
p15
,
0
,
r10
,
c1
,
c0
,
0
@
control
reg
mrc
p15
,
0
,
r8
,
c1
,
c0
,
1
@
auxiliary
control
reg
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
control
reg
bic
r4
,
r4
,
#
2
@
clear
frequency
change
bit
stmia
r0
,
{
r4
-
r
10
}
@
store
cp
regs
ldmia
sp
!,
{
r4
-
r
10
,
pc
}
stmia
r0
,
{
r4
-
r
9
}
@
store
cp
regs
ldmia
sp
!,
{
r4
-
r
9
,
pc
}
ENDPROC
(
cpu_xsc3_do_suspend
)
ENTRY
(
cpu_xsc3_do_resume
)
ldmia
r0
,
{
r4
-
r
10
}
@
load
cp
regs
ldmia
r0
,
{
r4
-
r
9
}
@
load
cp
regs
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
&
D
caches
,
BTB
mcr
p15
,
0
,
ip
,
c7
,
c10
,
4
@
drain
write
(
&f
ill
)
buffer
...
...
@@ -433,15 +432,10 @@ ENTRY(cpu_xsc3_do_resume)
mcr
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mcr
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mcr
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
reg
@
temporarily
map
resume_turn_on_mmu
into
the
page
table
,
@
otherwise
prefetch
abort
occurs
after
MMU
is
turned
on
mov
r0
,
r10
@
control
register
mov
r2
,
r8
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
0x542e
@
section
flags
orr
r1
,
r1
,
#
0x18
@
cache
the
page
table
in
L2
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r8
,
c1
,
c0
,
1
@
auxiliary
control
reg
mov
r0
,
r9
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_xsc3_do_resume
)
#endif
...
...
arch/arm/mm/proc-xscale.S
View file @
b0a37dca
...
...
@@ -520,24 +520,23 @@ ENTRY(cpu_xscale_set_pte_ext)
.
align
.
globl
cpu_xscale_suspend_size
.
equ
cpu_xscale_suspend_size
,
4
*
7
.
equ
cpu_xscale_suspend_size
,
4
*
6
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_xscale_do_suspend
)
stmfd
sp
!,
{
r4
-
r
10
,
lr
}
stmfd
sp
!,
{
r4
-
r
9
,
lr
}
mrc
p14
,
0
,
r4
,
c6
,
c0
,
0
@
clock
configuration
,
for
turbo
mode
mrc
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mrc
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mrc
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mrc
p15
,
0
,
r9
,
c1
,
c1
,
0
@
auxiliary
control
reg
mrc
p15
,
0
,
r10
,
c1
,
c0
,
0
@
control
reg
mrc
p15
,
0
,
r8
,
c1
,
c1
,
0
@
auxiliary
control
reg
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
control
reg
bic
r4
,
r4
,
#
2
@
clear
frequency
change
bit
stmia
r0
,
{
r4
-
r
10
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r
10
,
pc
}
stmia
r0
,
{
r4
-
r
9
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r
9
,
pc
}
ENDPROC
(
cpu_xscale_do_suspend
)
ENTRY
(
cpu_xscale_do_resume
)
ldmia
r0
,
{
r4
-
r
10
}
@
load
cp
regs
ldmia
r0
,
{
r4
-
r
9
}
@
load
cp
regs
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
I
&
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
&
D
caches
,
BTB
...
...
@@ -545,13 +544,9 @@ ENTRY(cpu_xscale_do_resume)
mcr
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mcr
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mcr
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r9
,
c1
,
c1
,
0
@
auxiliary
control
reg
mov
r0
,
r10
@
control
register
mov
r2
,
r8
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
|
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r8
,
c1
,
c1
,
0
@
auxiliary
control
reg
mov
r0
,
r9
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_xscale_do_resume
)
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment