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
96f90c79
Commit
96f90c79
authored
Aug 29, 2011
by
Nicolas Pitre
Committed by
Nicolas Pitre
Aug 29, 2011
Browse files
Options
Browse Files
Download
Plain Diff
Merge the enabling by default of ARM_PATCH_PHYS_VIRT
Conflicts: arch/arm/mach-msm/board-msm7x30.c
parents
ad30a2bb
daece596
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
95 additions
and
73 deletions
+95
-73
arch/arm/Kconfig
arch/arm/Kconfig
+7
-11
arch/arm/Makefile
arch/arm/Makefile
+3
-0
arch/arm/include/asm/memory.h
arch/arm/include/asm/memory.h
+0
-7
arch/arm/include/asm/module.h
arch/arm/include/asm/module.h
+0
-4
arch/arm/kernel/head.S
arch/arm/kernel/head.S
+13
-48
arch/arm/mach-msm/board-msm7x30.c
arch/arm/mach-msm/board-msm7x30.c
+22
-0
arch/arm/mach-msm/board-msm8960.c
arch/arm/mach-msm/board-msm8960.c
+22
-0
arch/arm/mach-msm/board-msm8x60.c
arch/arm/mach-msm/board-msm8x60.c
+25
-0
arch/arm/mach-msm/include/mach/memory.h
arch/arm/mach-msm/include/mach/memory.h
+3
-3
No files found.
arch/arm/Kconfig
View file @
96f90c79
...
...
@@ -195,7 +195,8 @@ config VECTORS_BASE
The base address of exception vectors.
config ARM_PATCH_PHYS_VIRT
bool "Patch physical to virtual translations at runtime"
bool "Patch physical to virtual translations at runtime" if EMBEDDED
default y
depends on !XIP_KERNEL && MMU
depends on !ARCH_REALVIEW || !SPARSEMEM
help
...
...
@@ -204,16 +205,12 @@ config ARM_PATCH_PHYS_VIRT
kernel in system memory.
This can only be used with non-XIP MMU kernels where the base
of physical memory is at a 16MB boundary, or theoretically 64K
for the MSM machine class.
of physical memory is at a 16MB boundary.
Only disable this option if you know that you do not require
this feature (eg, building a kernel for a single machine) and
you need to shrink the kernel to the minimal size.
config ARM_PATCH_PHYS_VIRT_16BIT
def_bool y
depends on ARM_PATCH_PHYS_VIRT && ARCH_MSM
help
This option extends the physical to virtual translation patching
to allow physical memory down to a theoretical minimum of 64K
boundaries.
source "init/Kconfig"
...
...
@@ -301,7 +298,6 @@ config ARCH_AT91
select ARCH_REQUIRE_GPIOLIB
select HAVE_CLK
select CLKDEV_LOOKUP
select ARM_PATCH_PHYS_VIRT if MMU
help
This enables support for systems based on the Atmel AT91RM9200,
AT91SAM9 and AT91CAP9 processors.
...
...
arch/arm/Makefile
View file @
96f90c79
...
...
@@ -128,6 +128,9 @@ textofs-$(CONFIG_PM_H1940) := 0x00108000
ifeq
($(CONFIG_ARCH_SA1100),y)
textofs-$(CONFIG_SA1111)
:=
0x00208000
endif
textofs-$(CONFIG_ARCH_MSM7X30)
:=
0x00208000
textofs-$(CONFIG_ARCH_MSM8X60)
:=
0x00208000
textofs-$(CONFIG_ARCH_MSM8960)
:=
0x00208000
# Machine directory name. This list is sorted alphanumerically
# by CONFIG_* macro name.
...
...
arch/arm/include/asm/memory.h
View file @
96f90c79
...
...
@@ -151,7 +151,6 @@
* so that all we need to do is modify the 8-bit constant field.
*/
#define __PV_BITS_31_24 0x81000000
#define __PV_BITS_23_16 0x00810000
extern
unsigned
long
__pv_phys_offset
;
#define PHYS_OFFSET __pv_phys_offset
...
...
@@ -169,9 +168,6 @@ static inline unsigned long __virt_to_phys(unsigned long x)
{
unsigned
long
t
;
__pv_stub
(
x
,
t
,
"add"
,
__PV_BITS_31_24
);
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
__pv_stub
(
t
,
t
,
"add"
,
__PV_BITS_23_16
);
#endif
return
t
;
}
...
...
@@ -179,9 +175,6 @@ static inline unsigned long __phys_to_virt(unsigned long x)
{
unsigned
long
t
;
__pv_stub
(
x
,
t
,
"sub"
,
__PV_BITS_31_24
);
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
__pv_stub
(
t
,
t
,
"sub"
,
__PV_BITS_23_16
);
#endif
return
t
;
}
#else
...
...
arch/arm/include/asm/module.h
View file @
96f90c79
...
...
@@ -31,11 +31,7 @@ struct mod_arch_specific {
/* Add __virt_to_phys patching state as well */
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
#define MODULE_ARCH_VERMAGIC_P2V "p2v16 "
#else
#define MODULE_ARCH_VERMAGIC_P2V "p2v8 "
#endif
#else
#define MODULE_ARCH_VERMAGIC_P2V ""
#endif
...
...
arch/arm/kernel/head.S
View file @
96f90c79
...
...
@@ -488,13 +488,8 @@ __fixup_pv_table:
add
r5
,
r5
,
r3
@
adjust
table
end
address
add
r7
,
r7
,
r3
@
adjust
__pv_phys_offset
address
str
r8
,
[
r7
]
@
save
computed
PHYS_OFFSET
to
__pv_phys_offset
#ifndef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
mov
r6
,
r3
,
lsr
#
24
@
constant
for
add
/
sub
instructions
teq
r3
,
r6
,
lsl
#
24
@
must
be
16
MiB
aligned
#else
mov
r6
,
r3
,
lsr
#
16
@
constant
for
add
/
sub
instructions
teq
r3
,
r6
,
lsl
#
16
@
must
be
64
kiB
aligned
#endif
THUMB
(
it
ne
@
cross
section
branch
)
bne
__error
str
r6
,
[
r7
,
#
4
]
@
save
to
__pv_offset
...
...
@@ -510,20 +505,8 @@ ENDPROC(__fixup_pv_table)
.
text
__fixup_a_pv_table
:
#ifdef CONFIG_THUMB2_KERNEL
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
lsls
r0
,
r6
,
#
24
lsr
r6
,
#
8
beq
1
f
clz
r7
,
r0
lsr
r0
,
#
24
lsl
r0
,
r7
bic
r0
,
0x0080
lsrs
r7
,
#
1
orrcs
r0
,
#
0x0080
orr
r0
,
r0
,
r7
,
lsl
#
12
#endif
1
:
lsls
r6
,
#
24
beq
4
f
lsls
r6
,
#
24
beq
2
f
clz
r7
,
r6
lsr
r6
,
#
24
lsl
r6
,
r7
...
...
@@ -532,43 +515,25 @@ __fixup_a_pv_table:
orrcs
r6
,
#
0x0080
orr
r6
,
r6
,
r7
,
lsl
#
12
orr
r6
,
#
0x4000
b
4
f
2
:
@
at
this
point
the
C
flag
is
always
clear
add
r7
,
r3
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
ldrh
ip
,
[
r7
]
tst
ip
,
0x0400
@
the
i
bit
tells
us
LS
or
MS
byte
beq
3
f
cmp
r0
,
#
0
@
set
C
flag
,
and
...
biceq
ip
,
0x0400
@
immediate
zero
value
has
a
special
encoding
streqh
ip
,
[
r7
]
@
that
requires
the
i
bit
cleared
#endif
3
:
ldrh
ip
,
[
r7
,
#
2
]
b
2
f
1
:
add
r7
,
r3
ldrh
ip
,
[
r7
,
#
2
]
and
ip
,
0x8f00
orrcc
ip
,
r6
@
mask
in
offset
bits
31
-
24
orrcs
ip
,
r0
@
mask
in
offset
bits
23
-
16
orr
ip
,
r6
@
mask
in
offset
bits
31
-
24
strh
ip
,
[
r7
,
#
2
]
4
:
cmp
r4
,
r5
2
:
cmp
r4
,
r5
ldrcc
r7
,
[
r4
],
#
4
@
use
branch
for
delay
slot
bcc
2
b
bcc
1
b
bx
lr
#else
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
and
r0
,
r6
,
#
255
@
offset
bits
23
-
16
mov
r6
,
r6
,
lsr
#
8
@
offset
bits
31
-
24
#else
mov
r0
,
#
0
@
just
in
case
...
#endif
b
3
f
2
:
ldr
ip
,
[
r7
,
r3
]
b
2
f
1
:
ldr
ip
,
[
r7
,
r3
]
bic
ip
,
ip
,
#
0x000000ff
tst
ip
,
#
0x400
@
rotate
shift
tells
us
LS
or
MS
byte
orrne
ip
,
ip
,
r6
@
mask
in
offset
bits
31
-
24
orreq
ip
,
ip
,
r0
@
mask
in
offset
bits
23
-
16
orr
ip
,
ip
,
r6
@
mask
in
offset
bits
31
-
24
str
ip
,
[
r7
,
r3
]
3
:
cmp
r4
,
r5
2
:
cmp
r4
,
r5
ldrcc
r7
,
[
r4
],
#
4
@
use
branch
for
delay
slot
bcc
2
b
bcc
1
b
mov
pc
,
lr
#endif
ENDPROC
(
__fixup_a_pv_table
)
...
...
arch/arm/mach-msm/board-msm7x30.c
View file @
96f90c79
...
...
@@ -24,6 +24,7 @@
#include <linux/smsc911x.h>
#include <linux/usb/msm_hsusb.h>
#include <linux/clkdev.h>
#include <linux/memblock.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
...
...
@@ -42,6 +43,21 @@
extern
struct
sys_timer
msm_timer
;
static
void
__init
msm7x30_fixup
(
struct
machine_desc
*
desc
,
struct
tag
*
tag
,
char
**
cmdline
,
struct
meminfo
*
mi
)
{
for
(;
tag
->
hdr
.
size
;
tag
=
tag_next
(
tag
))
if
(
tag
->
hdr
.
tag
==
ATAG_MEM
&&
tag
->
u
.
mem
.
start
==
0x200000
)
{
tag
->
u
.
mem
.
start
=
0
;
tag
->
u
.
mem
.
size
+=
SZ_2M
;
}
}
static
void
__init
msm7x30_reserve
(
void
)
{
memblock_remove
(
0x0
,
SZ_2M
);
}
static
int
hsusb_phy_init_seq
[]
=
{
0x30
,
0x32
,
/* Enable and set Pre-Emphasis Depth to 20% */
0x02
,
0x36
,
/* Disable CDR Auto Reset feature */
...
...
@@ -107,6 +123,8 @@ static void __init msm7x30_map_io(void)
MACHINE_START
(
MSM7X30_SURF
,
"QCT MSM7X30 SURF"
)
.
atag_offset
=
0x100
,
.
fixup
=
msm7x30_fixup
,
.
reserve
=
msm7x30_reserve
,
.
map_io
=
msm7x30_map_io
,
.
init_irq
=
msm7x30_init_irq
,
.
init_machine
=
msm7x30_init
,
...
...
@@ -115,6 +133,8 @@ MACHINE_END
MACHINE_START
(
MSM7X30_FFA
,
"QCT MSM7X30 FFA"
)
.
atag_offset
=
0x100
,
.
fixup
=
msm7x30_fixup
,
.
reserve
=
msm7x30_reserve
,
.
map_io
=
msm7x30_map_io
,
.
init_irq
=
msm7x30_init_irq
,
.
init_machine
=
msm7x30_init
,
...
...
@@ -123,6 +143,8 @@ MACHINE_END
MACHINE_START
(
MSM7X30_FLUID
,
"QCT MSM7X30 FLUID"
)
.
atag_offset
=
0x100
,
.
fixup
=
msm7x30_fixup
,
.
reserve
=
msm7x30_reserve
,
.
map_io
=
msm7x30_map_io
,
.
init_irq
=
msm7x30_init_irq
,
.
init_machine
=
msm7x30_init
,
...
...
arch/arm/mach-msm/board-msm8960.c
View file @
96f90c79
...
...
@@ -20,16 +20,34 @@
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/clkdev.h>
#include <linux/memblock.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/hardware/gic.h>
#include <asm/setup.h>
#include <mach/board.h>
#include <mach/msm_iomap.h>
#include "devices.h"
static
void
__init
msm8960_fixup
(
struct
machine_desc
*
desc
,
struct
tag
*
tag
,
char
**
cmdline
,
struct
meminfo
*
mi
)
{
for
(;
tag
->
hdr
.
size
;
tag
=
tag_next
(
tag
))
if
(
tag
->
hdr
.
tag
==
ATAG_MEM
&&
tag
->
u
.
mem
.
start
==
0x40200000
)
{
tag
->
u
.
mem
.
start
=
0x40000000
;
tag
->
u
.
mem
.
size
+=
SZ_2M
;
}
}
static
void
__init
msm8960_reserve
(
void
)
{
memblock_remove
(
0x40000000
,
SZ_2M
);
}
static
void
__init
msm8960_map_io
(
void
)
{
msm_map_msm8960_io
();
...
...
@@ -76,6 +94,8 @@ static void __init msm8960_rumi3_init(void)
}
MACHINE_START
(
MSM8960_SIM
,
"QCT MSM8960 SIMULATOR"
)
.
fixup
=
msm8960_fixup
,
.
reserve
=
msm8960_reserve
,
.
map_io
=
msm8960_map_io
,
.
init_irq
=
msm8960_init_irq
,
.
timer
=
&
msm_timer
,
...
...
@@ -83,6 +103,8 @@ MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR")
MACHINE_END
MACHINE_START
(
MSM8960_RUMI3
,
"QCT MSM8960 RUMI3"
)
.
fixup
=
msm8960_fixup
,
.
reserve
=
msm8960_reserve
,
.
map_io
=
msm8960_map_io
,
.
init_irq
=
msm8960_init_irq
,
.
timer
=
&
msm_timer
,
...
...
arch/arm/mach-msm/board-msm8x60.c
View file @
96f90c79
...
...
@@ -20,14 +20,31 @@
#include <linux/platform_device.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/memblock.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/hardware/gic.h>
#include <asm/setup.h>
#include <mach/board.h>
#include <mach/msm_iomap.h>
static
void
__init
msm8x60_fixup
(
struct
machine_desc
*
desc
,
struct
tag
*
tag
,
char
**
cmdline
,
struct
meminfo
*
mi
)
{
for
(;
tag
->
hdr
.
size
;
tag
=
tag_next
(
tag
))
if
(
tag
->
hdr
.
tag
==
ATAG_MEM
&&
tag
->
u
.
mem
.
start
==
0x40200000
)
{
tag
->
u
.
mem
.
start
=
0x40000000
;
tag
->
u
.
mem
.
size
+=
SZ_2M
;
}
}
static
void
__init
msm8x60_reserve
(
void
)
{
memblock_remove
(
0x40000000
,
SZ_2M
);
}
static
void
__init
msm8x60_map_io
(
void
)
{
...
...
@@ -65,6 +82,8 @@ static void __init msm8x60_init(void)
}
MACHINE_START
(
MSM8X60_RUMI3
,
"QCT MSM8X60 RUMI3"
)
.
fixup
=
msm8x60_fixup
,
.
reserve
=
msm8x60_reserve
,
.
map_io
=
msm8x60_map_io
,
.
init_irq
=
msm8x60_init_irq
,
.
init_machine
=
msm8x60_init
,
...
...
@@ -72,6 +91,8 @@ MACHINE_START(MSM8X60_RUMI3, "QCT MSM8X60 RUMI3")
MACHINE_END
MACHINE_START
(
MSM8X60_SURF
,
"QCT MSM8X60 SURF"
)
.
fixup
=
msm8x60_fixup
,
.
reserve
=
msm8x60_reserve
,
.
map_io
=
msm8x60_map_io
,
.
init_irq
=
msm8x60_init_irq
,
.
init_machine
=
msm8x60_init
,
...
...
@@ -79,6 +100,8 @@ MACHINE_START(MSM8X60_SURF, "QCT MSM8X60 SURF")
MACHINE_END
MACHINE_START
(
MSM8X60_SIM
,
"QCT MSM8X60 SIMULATOR"
)
.
fixup
=
msm8x60_fixup
,
.
reserve
=
msm8x60_reserve
,
.
map_io
=
msm8x60_map_io
,
.
init_irq
=
msm8x60_init_irq
,
.
init_machine
=
msm8x60_init
,
...
...
@@ -86,6 +109,8 @@ MACHINE_START(MSM8X60_SIM, "QCT MSM8X60 SIMULATOR")
MACHINE_END
MACHINE_START
(
MSM8X60_FFA
,
"QCT MSM8X60 FFA"
)
.
fixup
=
msm8x60_fixup
,
.
reserve
=
msm8x60_reserve
,
.
map_io
=
msm8x60_map_io
,
.
init_irq
=
msm8x60_init_irq
,
.
init_machine
=
msm8x60_init
,
...
...
arch/arm/mach-msm/include/mach/memory.h
View file @
96f90c79
...
...
@@ -22,11 +22,11 @@
#elif defined(CONFIG_ARCH_QSD8X50)
#define PLAT_PHYS_OFFSET UL(0x20000000)
#elif defined(CONFIG_ARCH_MSM7X30)
#define PLAT_PHYS_OFFSET UL(0x00
2
00000)
#define PLAT_PHYS_OFFSET UL(0x00
0
00000)
#elif defined(CONFIG_ARCH_MSM8X60)
#define PLAT_PHYS_OFFSET UL(0x40
2
00000)
#define PLAT_PHYS_OFFSET UL(0x40
0
00000)
#elif defined(CONFIG_ARCH_MSM8960)
#define PLAT_PHYS_OFFSET UL(0x40
2
00000)
#define PLAT_PHYS_OFFSET UL(0x40
0
00000)
#else
#define PLAT_PHYS_OFFSET UL(0x10000000)
#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