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
Kirill Smelkov
linux
Commits
9e8b5199
Commit
9e8b5199
authored
Sep 06, 2008
by
Russell King
Committed by
Russell King
Oct 01, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ARM] Convert Xscale and Xscale3 to use new memory types
Signed-off-by:
Russell King
<
rmk+kernel@arm.linux.org.uk
>
parent
bb30f36f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
55 additions
and
31 deletions
+55
-31
arch/arm/include/asm/pgtable.h
arch/arm/include/asm/pgtable.h
+2
-2
arch/arm/mm/proc-xsc3.S
arch/arm/mm/proc-xsc3.S
+25
-5
arch/arm/mm/proc-xscale.S
arch/arm/mm/proc-xscale.S
+28
-24
No files found.
arch/arm/include/asm/pgtable.h
View file @
9e8b5199
...
@@ -188,8 +188,8 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
...
@@ -188,8 +188,8 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
#define L_PTE_MT_DEV_SHARED2 (0x05 << 2)
/* 0101 (v6) */
#define L_PTE_MT_DEV_SHARED2 (0x05 << 2)
/* 0101 (v6) */
#define L_PTE_MT_DEV_NONSHARED (0x0c << 2)
/* 1100 */
#define L_PTE_MT_DEV_NONSHARED (0x0c << 2)
/* 1100 */
#define L_PTE_MT_DEV_IXP2000 (0x0d << 2)
/* 1101 */
#define L_PTE_MT_DEV_IXP2000 (0x0d << 2)
/* 1101 */
#define L_PTE_MT_DEV_WC (0x09 << 2)
/* 1001 (pre-v6
, !xsc3
) */
#define L_PTE_MT_DEV_WC (0x09 << 2)
/* 1001 (pre-v6) */
#define L_PTE_MT_DEV_WC2 (0x08 << 2)
/* 1000 (
xsc3,
v6) */
#define L_PTE_MT_DEV_WC2 (0x08 << 2)
/* 1000 (v6) */
#define L_PTE_MT_DEV_CACHED (0x0b << 2)
/* 1011 */
#define L_PTE_MT_DEV_CACHED (0x0b << 2)
/* 1011 */
#define L_PTE_MT_MASK (0x0f << 2)
#define L_PTE_MT_MASK (0x0f << 2)
...
...
arch/arm/mm/proc-xsc3.S
View file @
9e8b5199
...
@@ -347,16 +347,36 @@ ENTRY(cpu_xsc3_switch_mm)
...
@@ -347,16 +347,36 @@ ENTRY(cpu_xsc3_switch_mm)
*
Set
a
PTE
and
flush
it
out
*
Set
a
PTE
and
flush
it
out
*
*
*/
*/
cpu_xsc3_mt_table
:
.
long
0x00
@
L_PTE_MT_UNCACHED
.
long
PTE_BUFFERABLE
@
L_PTE_MT_BUFFERABLE
.
long
PTE_EXT_TEX
(
5
)
|
PTE_CACHEABLE
@
L_PTE_MT_WRITETHROUGH
.
long
PTE_EXT_TEX
(
5
)
| PTE_CACHEABLE |
PTE_BUFFERABLE
@
L_PTE_MT_WRITEBACK
.
long
0x00
@
L_PTE_MT_DEV_SHARED
.
long
0x00
@
L_PTE_MT_DEV_SHARED2
.
long
0x00
@
L_PTE_MT_MINICACHE
(
not
present
)
.
long
PTE_EXT_TEX
(
5
)
| PTE_CACHEABLE |
PTE_BUFFERABLE
@
L_PTE_MT_WRITEALLOC
(
not
present
?)
.
long
PTE_EXT_TEX
(
1
)
@
L_PTE_MT_DEV_WC2
.
long
PTE_EXT_TEX
(
1
)
@
L_PTE_MT_DEV_WC
.
long
0x00
@
unused
.
long
PTE_EXT_TEX
(
5
)
| PTE_CACHEABLE |
PTE_BUFFERABLE
@
L_PTE_MT_DEV_CACHED
.
long
0x00
@
L_PTE_MT_DEV_NONSHARED
.
long
0x00
@
L_PTE_MT_DEV_IXP2000
(
not
present
)
.
long
0x00
@
unused
.
long
0x00
@
unused
.
align
5
.
align
5
ENTRY
(
cpu_xsc3_set_pte_ext
)
ENTRY
(
cpu_xsc3_set_pte_ext
)
xscale_set_pte_ext_prologue
xscale_set_pte_ext_prologue
@
If
it
's cacheable, it needs to be in L2 also.
tst
r1
,
#
L_PTE_CACHEABLE
orrne
r2
,
r2
,
#
PTE_EXT_TEX
(
0x5
)
tst
r1
,
#
L_PTE_SHARED
@
shared
?
tst
r1
,
#
L_PTE_SHARED
@
shared
?
orrne
r2
,
r2
,
#
0x200
and
r1
,
r1
,
#
L_PTE_MT_MASK
adr
ip
,
cpu_xsc3_mt_table
ldr
ip
,
[
ip
,
r1
]
orrne
r2
,
r2
,
#
PTE_EXT_COHERENT
@
interlock
:
mask
in
coherent
bit
bic
r2
,
r2
,
#
0x0c
@
clear
old
C
,
B
bits
orr
r2
,
r2
,
ip
xscale_set_pte_ext_epilogue
xscale_set_pte_ext_epilogue
mov
pc
,
lr
mov
pc
,
lr
...
...
arch/arm/mm/proc-xscale.S
View file @
9e8b5199
...
@@ -406,8 +406,6 @@ ENTRY(cpu_xscale_dcache_clean_area)
...
@@ -406,8 +406,6 @@ ENTRY(cpu_xscale_dcache_clean_area)
/*
==============================
=
PageTable
==============================
*/
/*
==============================
=
PageTable
==============================
*/
#define PTE_CACHE_WRITE_ALLOCATE 0
/*
/*
*
cpu_xscale_switch_mm
(
pgd
)
*
cpu_xscale_switch_mm
(
pgd
)
*
*
...
@@ -431,34 +429,40 @@ ENTRY(cpu_xscale_switch_mm)
...
@@ -431,34 +429,40 @@ ENTRY(cpu_xscale_switch_mm)
*
*
*
Errata
40
:
must
set
memory
to
write
-
through
for
user
read
-
only
pages
.
*
Errata
40
:
must
set
memory
to
write
-
through
for
user
read
-
only
pages
.
*/
*/
cpu_xscale_mt_table
:
.
long
0x00
@
L_PTE_MT_UNCACHED
.
long
PTE_BUFFERABLE
@
L_PTE_MT_BUFFERABLE
.
long
PTE_CACHEABLE
@
L_PTE_MT_WRITETHROUGH
.
long
PTE_CACHEABLE
|
PTE_BUFFERABLE
@
L_PTE_MT_WRITEBACK
.
long
0x00
@
L_PTE_MT_DEV_SHARED
.
long
0x00
@
L_PTE_MT_DEV_SHARED2
.
long
PTE_EXT_TEX
(
1
)
|
PTE_CACHEABLE
@
L_PTE_MT_MINICACHE
.
long
PTE_EXT_TEX
(
1
)
| PTE_CACHEABLE |
PTE_BUFFERABLE
@
L_PTE_MT_WRITEALLOC
.
long
PTE_BUFFERABLE
@
L_PTE_MT_DEV_WC2
.
long
PTE_BUFFERABLE
@
L_PTE_MT_DEV_WC
.
long
0x00
@
unused
.
long
PTE_CACHEABLE
|
PTE_BUFFERABLE
@
L_PTE_MT_DEV_CACHED
.
long
0x00
@
L_PTE_MT_DEV_NONSHARED
.
long
PTE_EXT_TEX
(
1
)
|
PTE_BUFFERABLE
@
L_PTE_MT_DEV_IXP2000
.
long
0x00
@
unused
.
long
0x00
@
unused
.
align
5
.
align
5
ENTRY
(
cpu_xscale_set_pte_ext
)
ENTRY
(
cpu_xscale_set_pte_ext
)
xscale_set_pte_ext_prologue
xscale_set_pte_ext_prologue
@
@
Handle
the
X
bit
.
We
want
to
set
this
bit
for
the
minicache
@
(
U
=
E
=
B
=
W
=
0
,
C
=
1
)
or
when
write
allocate
is
enabled
,
@
and
we
have
a
writeable
,
cacheable
region
.
If
we
ignore
the
@
U
and
E
bits
,
we
can
allow
user
space
to
use
the
minicache
as
@
well
.
@
@
X
=
(
C
&
~
W
&
~
B
)
|
(
C
&
W
&
B
&
write_allocate
)
@
and
ip
,
r1
,
#
L_PTE_CACHEABLE
| L_PTE_WRITE |
L_PTE_BUFFERABLE
teq
ip
,
#
L_PTE_CACHEABLE
#if PTE_CACHE_WRITE_ALLOCATE
teqne
ip
,
#
L_PTE_CACHEABLE
| L_PTE_WRITE |
L_PTE_BUFFERABLE
#endif
orreq
r2
,
r2
,
#
PTE_EXT_TEX
(
1
)
@
@
@
Erratum
40
:
The
B
bit
must
be
cleared
for
a
user
read
-
only
@
Erratum
40
:
must
set
memory
to
write
-
through
for
user
read
-
only
pages
@
cacheable
page
.
@
@
B
=
B
&
~
(
U
&
C
&
~
W
)
@
@
and
ip
,
r1
,
#
L_PTE_USER
| L_PTE_WRITE |
L_PTE_CACHEABLE
and
ip
,
r1
,
#(
L_PTE_MT_MASK
| L_PTE_USER |
L_PTE_WRITE
)
&
~
(
4
<<
2
)
teq
ip
,
#
L_PTE_USER
|
L_PTE_CACHEABLE
teq
ip
,
#
L_PTE_MT_WRITEBACK
|
L_PTE_USER
biceq
r2
,
r2
,
#
PTE_BUFFERABLE
moveq
r1
,
#
L_PTE_MT_WRITETHROUGH
and
r1
,
r1
,
#
L_PTE_MT_MASK
adr
ip
,
cpu_xscale_mt_table
ldr
ip
,
[
ip
,
r1
]
bic
r2
,
r2
,
#
0x0c
orr
r2
,
r2
,
ip
xscale_set_pte_ext_epilogue
xscale_set_pte_ext_epilogue
mov
pc
,
lr
mov
pc
,
lr
...
...
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