提交 0003cedf 编写于 作者: R Russell King 提交者: Russell King

Merge nommu tree

Fix merge conflict in arch/arm/mm/proc-xscale.S
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
...@@ -358,7 +358,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size ...@@ -358,7 +358,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
str r1, [r0] str r1, [r0]
mov pc, lr mov pc, lr
__armv4_cache_on: __armv4_mmu_cache_on:
mov r12, lr mov r12, lr
bl __setup_mmu bl __setup_mmu
mov r0, #0 mov r0, #0
...@@ -367,24 +367,24 @@ __armv4_cache_on: ...@@ -367,24 +367,24 @@ __armv4_cache_on:
mrc p15, 0, r0, c1, c0, 0 @ read control reg mrc p15, 0, r0, c1, c0, 0 @ read control reg
orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement
orr r0, r0, #0x0030 orr r0, r0, #0x0030
bl __common_cache_on bl __common_mmu_cache_on
mov r0, #0 mov r0, #0
mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs
mov pc, r12 mov pc, r12
__arm6_cache_on: __arm6_mmu_cache_on:
mov r12, lr mov r12, lr
bl __setup_mmu bl __setup_mmu
mov r0, #0 mov r0, #0
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3 mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3
mov r0, #0x30 mov r0, #0x30
bl __common_cache_on bl __common_mmu_cache_on
mov r0, #0 mov r0, #0
mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3 mcr p15, 0, r0, c5, c0, 0 @ invalidate whole TLB v3
mov pc, r12 mov pc, r12
__common_cache_on: __common_mmu_cache_on:
#ifndef DEBUG #ifndef DEBUG
orr r0, r0, #0x000d @ Write buffer, mmu orr r0, r0, #0x000d @ Write buffer, mmu
#endif #endif
...@@ -471,12 +471,12 @@ call_cache_fn: adr r12, proc_types ...@@ -471,12 +471,12 @@ call_cache_fn: adr r12, proc_types
proc_types: proc_types:
.word 0x41560600 @ ARM6/610 .word 0x41560600 @ ARM6/610
.word 0xffffffe0 .word 0xffffffe0
b __arm6_cache_off @ works, but slow b __arm6_mmu_cache_off @ works, but slow
b __arm6_cache_off b __arm6_mmu_cache_off
mov pc, lr mov pc, lr
@ b __arm6_cache_on @ untested @ b __arm6_mmu_cache_on @ untested
@ b __arm6_cache_off @ b __arm6_mmu_cache_off
@ b __armv3_cache_flush @ b __armv3_mmu_cache_flush
.word 0x00000000 @ old ARM ID .word 0x00000000 @ old ARM ID
.word 0x0000f000 .word 0x0000f000
...@@ -486,14 +486,14 @@ proc_types: ...@@ -486,14 +486,14 @@ proc_types:
.word 0x41007000 @ ARM7/710 .word 0x41007000 @ ARM7/710
.word 0xfff8fe00 .word 0xfff8fe00
b __arm7_cache_off b __arm7_mmu_cache_off
b __arm7_cache_off b __arm7_mmu_cache_off
mov pc, lr mov pc, lr
.word 0x41807200 @ ARM720T (writethrough) .word 0x41807200 @ ARM720T (writethrough)
.word 0xffffff00 .word 0xffffff00
b __armv4_cache_on b __armv4_mmu_cache_on
b __armv4_cache_off b __armv4_mmu_cache_off
mov pc, lr mov pc, lr
.word 0x00007000 @ ARM7 IDs .word 0x00007000 @ ARM7 IDs
...@@ -506,41 +506,41 @@ proc_types: ...@@ -506,41 +506,41 @@ proc_types:
.word 0x4401a100 @ sa110 / sa1100 .word 0x4401a100 @ sa110 / sa1100
.word 0xffffffe0 .word 0xffffffe0
b __armv4_cache_on b __armv4_mmu_cache_on
b __armv4_cache_off b __armv4_mmu_cache_off
b __armv4_cache_flush b __armv4_mmu_cache_flush
.word 0x6901b110 @ sa1110 .word 0x6901b110 @ sa1110
.word 0xfffffff0 .word 0xfffffff0
b __armv4_cache_on b __armv4_mmu_cache_on
b __armv4_cache_off b __armv4_mmu_cache_off
b __armv4_cache_flush b __armv4_mmu_cache_flush
@ These match on the architecture ID @ These match on the architecture ID
.word 0x00020000 @ ARMv4T .word 0x00020000 @ ARMv4T
.word 0x000f0000 .word 0x000f0000
b __armv4_cache_on b __armv4_mmu_cache_on
b __armv4_cache_off b __armv4_mmu_cache_off
b __armv4_cache_flush b __armv4_mmu_cache_flush
.word 0x00050000 @ ARMv5TE .word 0x00050000 @ ARMv5TE
.word 0x000f0000 .word 0x000f0000
b __armv4_cache_on b __armv4_mmu_cache_on
b __armv4_cache_off b __armv4_mmu_cache_off
b __armv4_cache_flush b __armv4_mmu_cache_flush
.word 0x00060000 @ ARMv5TEJ .word 0x00060000 @ ARMv5TEJ
.word 0x000f0000 .word 0x000f0000
b __armv4_cache_on b __armv4_mmu_cache_on
b __armv4_cache_off b __armv4_mmu_cache_off
b __armv4_cache_flush b __armv4_mmu_cache_flush
.word 0x00070000 @ ARMv6 .word 0x00070000 @ ARMv6
.word 0x000f0000 .word 0x000f0000
b __armv4_cache_on b __armv4_mmu_cache_on
b __armv4_cache_off b __armv4_mmu_cache_off
b __armv6_cache_flush b __armv6_mmu_cache_flush
.word 0 @ unrecognised type .word 0 @ unrecognised type
.word 0 .word 0
...@@ -562,7 +562,7 @@ proc_types: ...@@ -562,7 +562,7 @@ proc_types:
cache_off: mov r3, #12 @ cache_off function cache_off: mov r3, #12 @ cache_off function
b call_cache_fn b call_cache_fn
__armv4_cache_off: __armv4_mmu_cache_off:
mrc p15, 0, r0, c1, c0 mrc p15, 0, r0, c1, c0
bic r0, r0, #0x000d bic r0, r0, #0x000d
mcr p15, 0, r0, c1, c0 @ turn MMU and cache off mcr p15, 0, r0, c1, c0 @ turn MMU and cache off
...@@ -571,15 +571,15 @@ __armv4_cache_off: ...@@ -571,15 +571,15 @@ __armv4_cache_off:
mcr p15, 0, r0, c8, c7 @ invalidate whole TLB v4 mcr p15, 0, r0, c8, c7 @ invalidate whole TLB v4
mov pc, lr mov pc, lr
__arm6_cache_off: __arm6_mmu_cache_off:
mov r0, #0x00000030 @ ARM6 control reg. mov r0, #0x00000030 @ ARM6 control reg.
b __armv3_cache_off b __armv3_mmu_cache_off
__arm7_cache_off: __arm7_mmu_cache_off:
mov r0, #0x00000070 @ ARM7 control reg. mov r0, #0x00000070 @ ARM7 control reg.
b __armv3_cache_off b __armv3_mmu_cache_off
__armv3_cache_off: __armv3_mmu_cache_off:
mcr p15, 0, r0, c1, c0, 0 @ turn MMU and cache off mcr p15, 0, r0, c1, c0, 0 @ turn MMU and cache off
mov r0, #0 mov r0, #0
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
...@@ -601,7 +601,7 @@ cache_clean_flush: ...@@ -601,7 +601,7 @@ cache_clean_flush:
mov r3, #16 mov r3, #16
b call_cache_fn b call_cache_fn
__armv6_cache_flush: __armv6_mmu_cache_flush:
mov r1, #0 mov r1, #0
mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D
mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB
...@@ -609,7 +609,7 @@ __armv6_cache_flush: ...@@ -609,7 +609,7 @@ __armv6_cache_flush:
mcr p15, 0, r1, c7, c10, 4 @ drain WB mcr p15, 0, r1, c7, c10, 4 @ drain WB
mov pc, lr mov pc, lr
__armv4_cache_flush: __armv4_mmu_cache_flush:
mov r2, #64*1024 @ default: 32K dcache size (*2) mov r2, #64*1024 @ default: 32K dcache size (*2)
mov r11, #32 @ default: 32 byte line size mov r11, #32 @ default: 32 byte line size
mrc p15, 0, r3, c0, c0, 1 @ read cache type mrc p15, 0, r3, c0, c0, 1 @ read cache type
...@@ -637,7 +637,7 @@ no_cache_id: ...@@ -637,7 +637,7 @@ no_cache_id:
mcr p15, 0, r1, c7, c10, 4 @ drain WB mcr p15, 0, r1, c7, c10, 4 @ drain WB
mov pc, lr mov pc, lr
__armv3_cache_flush: __armv3_mmu_cache_flush:
mov r1, #0 mov r1, #0
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
mov pc, lr mov pc, lr
......
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
ENTRY(stext) ENTRY(stext)
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
@ and irqs disabled @ and irqs disabled
mrc p15, 0, r9, c0, c0 @ get processor id
bl __lookup_processor_type @ r5=procinfo r9=cpuid bl __lookup_processor_type @ r5=procinfo r9=cpuid
movs r10, r5 @ invalid processor (r5=0)? movs r10, r5 @ invalid processor (r5=0)?
beq __error_p @ yes, error 'p' beq __error_p @ yes, error 'p'
...@@ -155,6 +156,7 @@ ENTRY(secondary_startup) ...@@ -155,6 +156,7 @@ ENTRY(secondary_startup)
* as it has already been validated by the primary processor. * as it has already been validated by the primary processor.
*/ */
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC
mrc p15, 0, r9, c0, c0 @ get processor id
bl __lookup_processor_type bl __lookup_processor_type
movs r10, r5 @ invalid processor? movs r10, r5 @ invalid processor?
moveq r0, #'p' @ yes, error 'p' moveq r0, #'p' @ yes, error 'p'
...@@ -449,19 +451,19 @@ __error: ...@@ -449,19 +451,19 @@ __error:
* (and therefore, we are not in the correct address space). We have to * (and therefore, we are not in the correct address space). We have to
* calculate the offset. * calculate the offset.
* *
* r9 = cpuid
* Returns: * Returns:
* r3, r4, r6 corrupted * r3, r4, r6 corrupted
* r5 = proc_info pointer in physical address space * r5 = proc_info pointer in physical address space
* r9 = cpuid * r9 = cpuid (preserved)
*/ */
.type __lookup_processor_type, %function .type __lookup_processor_type, %function
__lookup_processor_type: __lookup_processor_type:
adr r3, 3f adr r3, 3f
ldmda r3, {r5, r6, r9} ldmda r3, {r5 - r7}
sub r3, r3, r9 @ get offset between virt&phys sub r3, r3, r7 @ get offset between virt&phys
add r5, r5, r3 @ convert virt addresses to add r5, r5, r3 @ convert virt addresses to
add r6, r6, r3 @ physical address space add r6, r6, r3 @ physical address space
mrc p15, 0, r9, c0, c0 @ get processor id
1: ldmia r5, {r3, r4} @ value, mask 1: ldmia r5, {r3, r4} @ value, mask
and r4, r4, r9 @ mask wanted bits and r4, r4, r9 @ mask wanted bits
teq r3, r4 teq r3, r4
...@@ -476,10 +478,11 @@ __lookup_processor_type: ...@@ -476,10 +478,11 @@ __lookup_processor_type:
* This provides a C-API version of the above function. * This provides a C-API version of the above function.
*/ */
ENTRY(lookup_processor_type) ENTRY(lookup_processor_type)
stmfd sp!, {r4 - r6, r9, lr} stmfd sp!, {r4 - r7, r9, lr}
mov r9, r0
bl __lookup_processor_type bl __lookup_processor_type
mov r0, r5 mov r0, r5
ldmfd sp!, {r4 - r6, r9, pc} ldmfd sp!, {r4 - r7, r9, pc}
/* /*
* Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for * Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for
......
...@@ -278,7 +278,7 @@ int cpu_architecture(void) ...@@ -278,7 +278,7 @@ int cpu_architecture(void)
* These functions re-use the assembly code in head.S, which * These functions re-use the assembly code in head.S, which
* already provide the required functionality. * already provide the required functionality.
*/ */
extern struct proc_info_list *lookup_processor_type(void); extern struct proc_info_list *lookup_processor_type(unsigned int);
extern struct machine_desc *lookup_machine_type(unsigned int); extern struct machine_desc *lookup_machine_type(unsigned int);
static void __init setup_processor(void) static void __init setup_processor(void)
...@@ -290,7 +290,7 @@ static void __init setup_processor(void) ...@@ -290,7 +290,7 @@ static void __init setup_processor(void)
* types. The linker builds this table for us from the * types. The linker builds this table for us from the
* entries in arch/arm/mm/proc-*.S * entries in arch/arm/mm/proc-*.S
*/ */
list = lookup_processor_type(); list = lookup_processor_type(processor_id);
if (!list) { if (!list) {
printk("CPU configuration botched (ID %08x), unable " printk("CPU configuration botched (ID %08x), unable "
"to continue.\n", processor_id); "to continue.\n", processor_id);
......
...@@ -234,7 +234,12 @@ asmlinkage int sys_ipc(uint call, int first, int second, int third, ...@@ -234,7 +234,12 @@ asmlinkage int sys_ipc(uint call, int first, int second, int third,
*/ */
asmlinkage int sys_fork(struct pt_regs *regs) asmlinkage int sys_fork(struct pt_regs *regs)
{ {
#ifdef CONFIG_MMU
return do_fork(SIGCHLD, regs->ARM_sp, regs, 0, NULL, NULL); return do_fork(SIGCHLD, regs->ARM_sp, regs, 0, NULL, NULL);
#else
/* can not support in nommu mode */
return(-EINVAL);
#endif
} }
/* Clone a task - this clones the calling program thread. /* Clone a task - this clones the calling program thread.
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
......
...@@ -266,12 +266,18 @@ config CPU_32v6K ...@@ -266,12 +266,18 @@ config CPU_32v6K
# This defines the compiler instruction set which depends on the machine type. # This defines the compiler instruction set which depends on the machine type.
config CPU_32v3 config CPU_32v3
bool bool
select TLS_REG_EMUL if SMP
select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
config CPU_32v4 config CPU_32v4
bool bool
select TLS_REG_EMUL if SMP
select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
config CPU_32v5 config CPU_32v5
bool bool
select TLS_REG_EMUL if SMP
select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
config CPU_32v6 config CPU_32v6
bool bool
...@@ -417,7 +423,6 @@ config CPU_BPREDICT_DISABLE ...@@ -417,7 +423,6 @@ config CPU_BPREDICT_DISABLE
config TLS_REG_EMUL config TLS_REG_EMUL
bool bool
default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3)
help help
An SMP system using a pre-ARMv6 processor (there are apparently An SMP system using a pre-ARMv6 processor (there are apparently
a few prototypes like that in existence) and therefore access to a few prototypes like that in existence) and therefore access to
...@@ -436,7 +441,6 @@ config HAS_TLS_REG ...@@ -436,7 +441,6 @@ config HAS_TLS_REG
config NEEDS_SYSCALL_FOR_CMPXCHG config NEEDS_SYSCALL_FOR_CMPXCHG
bool bool
default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3)
help help
SMP on a pre-ARMv6 processor? Well OK then. SMP on a pre-ARMv6 processor? Well OK then.
Forget about fast user space cmpxchg support. Forget about fast user space cmpxchg support.
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/page.h> #include <asm/page.h>
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/page.h> #include <asm/page.h>
......
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/page.h> #include <asm/page.h>
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/page.h> #include <asm/page.h>
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
/* /*
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/hardware/arm_scu.h> #include <asm/hardware/arm_scu.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include "proc-macros.S" #include "proc-macros.S"
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/pgtable-hwdef.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include "proc-macros.S" #include "proc-macros.S"
......
...@@ -10,10 +10,15 @@ ...@@ -10,10 +10,15 @@
#ifndef _ASMARM_PGALLOC_H #ifndef _ASMARM_PGALLOC_H
#define _ASMARM_PGALLOC_H #define _ASMARM_PGALLOC_H
#include <asm/domain.h>
#include <asm/pgtable-hwdef.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#define _PAGE_USER_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_USER))
#define _PAGE_KERNEL_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_KERNEL))
/* /*
* Since we have only two-level page tables, these are trivial * Since we have only two-level page tables, these are trivial
*/ */
......
/*
* linux/include/asm-arm/pgtable-hwdef.h
*
* Copyright (C) 1995-2002 Russell King
*
* 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 _ASMARM_PGTABLE_HWDEF_H
#define _ASMARM_PGTABLE_HWDEF_H
/*
* Hardware page table definitions.
*
* + Level 1 descriptor (PMD)
* - common
*/
#define PMD_TYPE_MASK (3 << 0)
#define PMD_TYPE_FAULT (0 << 0)
#define PMD_TYPE_TABLE (1 << 0)
#define PMD_TYPE_SECT (2 << 0)
#define PMD_BIT4 (1 << 4)
#define PMD_DOMAIN(x) ((x) << 5)
#define PMD_PROTECTION (1 << 9) /* v5 */
/*
* - section
*/
#define PMD_SECT_BUFFERABLE (1 << 2)
#define PMD_SECT_CACHEABLE (1 << 3)
#define PMD_SECT_AP_WRITE (1 << 10)
#define PMD_SECT_AP_READ (1 << 11)
#define PMD_SECT_TEX(x) ((x) << 12) /* v5 */
#define PMD_SECT_APX (1 << 15) /* v6 */
#define PMD_SECT_S (1 << 16) /* v6 */
#define PMD_SECT_nG (1 << 17) /* v6 */
#define PMD_SECT_SUPER (1 << 18) /* v6 */
#define PMD_SECT_UNCACHED (0)
#define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE)
#define PMD_SECT_WT (PMD_SECT_CACHEABLE)
#define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
#define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE)
#define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
#define PMD_SECT_NONSHARED_DEV (PMD_SECT_TEX(2))
/*
* - coarse table (not used)
*/
/*
* + Level 2 descriptor (PTE)
* - common
*/
#define PTE_TYPE_MASK (3 << 0)
#define PTE_TYPE_FAULT (0 << 0)
#define PTE_TYPE_LARGE (1 << 0)
#define PTE_TYPE_SMALL (2 << 0)
#define PTE_TYPE_EXT (3 << 0) /* v5 */
#define PTE_BUFFERABLE (1 << 2)
#define PTE_CACHEABLE (1 << 3)
/*
* - extended small page/tiny page
*/
#define PTE_EXT_XN (1 << 0) /* v6 */
#define PTE_EXT_AP_MASK (3 << 4)
#define PTE_EXT_AP0 (1 << 4)
#define PTE_EXT_AP1 (2 << 4)
#define PTE_EXT_AP_UNO_SRO (0 << 4)
#define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0)
#define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1)
#define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0)
#define PTE_EXT_TEX(x) ((x) << 6) /* v5 */
#define PTE_EXT_APX (1 << 9) /* v6 */
#define PTE_EXT_SHARED (1 << 10) /* v6 */
#define PTE_EXT_NG (1 << 11) /* v6 */
/*
* - small page
*/
#define PTE_SMALL_AP_MASK (0xff << 4)
#define PTE_SMALL_AP_UNO_SRO (0x00 << 4)
#define PTE_SMALL_AP_UNO_SRW (0x55 << 4)
#define PTE_SMALL_AP_URO_SRW (0xaa << 4)
#define PTE_SMALL_AP_URW_SRW (0xff << 4)
#endif
...@@ -136,81 +136,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val); ...@@ -136,81 +136,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
#define SUPERSECTION_SIZE (1UL << SUPERSECTION_SHIFT) #define SUPERSECTION_SIZE (1UL << SUPERSECTION_SHIFT)
#define SUPERSECTION_MASK (~(SUPERSECTION_SIZE-1)) #define SUPERSECTION_MASK (~(SUPERSECTION_SIZE-1))
/*
* Hardware page table definitions.
*
* + Level 1 descriptor (PMD)
* - common
*/
#define PMD_TYPE_MASK (3 << 0)
#define PMD_TYPE_FAULT (0 << 0)
#define PMD_TYPE_TABLE (1 << 0)
#define PMD_TYPE_SECT (2 << 0)
#define PMD_BIT4 (1 << 4)
#define PMD_DOMAIN(x) ((x) << 5)
#define PMD_PROTECTION (1 << 9) /* v5 */
/*
* - section
*/
#define PMD_SECT_BUFFERABLE (1 << 2)
#define PMD_SECT_CACHEABLE (1 << 3)
#define PMD_SECT_AP_WRITE (1 << 10)
#define PMD_SECT_AP_READ (1 << 11)
#define PMD_SECT_TEX(x) ((x) << 12) /* v5 */
#define PMD_SECT_APX (1 << 15) /* v6 */
#define PMD_SECT_S (1 << 16) /* v6 */
#define PMD_SECT_nG (1 << 17) /* v6 */
#define PMD_SECT_SUPER (1 << 18) /* v6 */
#define PMD_SECT_UNCACHED (0)
#define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE)
#define PMD_SECT_WT (PMD_SECT_CACHEABLE)
#define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
#define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE)
#define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
#define PMD_SECT_NONSHARED_DEV (PMD_SECT_TEX(2))
/*
* - coarse table (not used)
*/
/*
* + Level 2 descriptor (PTE)
* - common
*/
#define PTE_TYPE_MASK (3 << 0)
#define PTE_TYPE_FAULT (0 << 0)
#define PTE_TYPE_LARGE (1 << 0)
#define PTE_TYPE_SMALL (2 << 0)
#define PTE_TYPE_EXT (3 << 0) /* v5 */
#define PTE_BUFFERABLE (1 << 2)
#define PTE_CACHEABLE (1 << 3)
/*
* - extended small page/tiny page
*/
#define PTE_EXT_XN (1 << 0) /* v6 */
#define PTE_EXT_AP_MASK (3 << 4)
#define PTE_EXT_AP0 (1 << 4)
#define PTE_EXT_AP1 (2 << 4)
#define PTE_EXT_AP_UNO_SRO (0 << 4)
#define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0)
#define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1)
#define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0)
#define PTE_EXT_TEX(x) ((x) << 6) /* v5 */
#define PTE_EXT_APX (1 << 9) /* v6 */
#define PTE_EXT_SHARED (1 << 10) /* v6 */
#define PTE_EXT_NG (1 << 11) /* v6 */
/*
* - small page
*/
#define PTE_SMALL_AP_MASK (0xff << 4)
#define PTE_SMALL_AP_UNO_SRO (0x00 << 4)
#define PTE_SMALL_AP_UNO_SRW (0x55 << 4)
#define PTE_SMALL_AP_URO_SRW (0xaa << 4)
#define PTE_SMALL_AP_URW_SRW (0xff << 4)
/* /*
* "Linux" PTE definitions. * "Linux" PTE definitions.
* *
...@@ -236,11 +161,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val); ...@@ -236,11 +161,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <asm/domain.h>
#define _PAGE_USER_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_USER))
#define _PAGE_KERNEL_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_KERNEL))
/* /*
* The following macros handle the cache and bufferable bits... * The following macros handle the cache and bufferable bits...
*/ */
......
...@@ -19,6 +19,14 @@ ...@@ -19,6 +19,14 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#ifndef CONFIG_MMU
#include <linux/pagemap.h>
#include <asm-generic/tlb.h>
#else /* !CONFIG_MMU */
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
/* /*
...@@ -82,4 +90,5 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma) ...@@ -82,4 +90,5 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
#define tlb_migrate_finish(mm) do { } while (0) #define tlb_migrate_finish(mm) do { } while (0)
#endif /* CONFIG_MMU */
#endif #endif
...@@ -11,6 +11,13 @@ ...@@ -11,6 +11,13 @@
#define _ASMARM_TLBFLUSH_H #define _ASMARM_TLBFLUSH_H
#include <linux/config.h> #include <linux/config.h>
#ifndef CONFIG_MMU
#define tlb_flush(tlb) ((void) tlb)
#else /* CONFIG_MMU */
#include <asm/glue.h> #include <asm/glue.h>
#define TLB_V3_PAGE (1 << 0) #define TLB_V3_PAGE (1 << 0)
...@@ -423,4 +430,6 @@ extern void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte ...@@ -423,4 +430,6 @@ extern void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte
#endif #endif
#endif /* CONFIG_MMU */
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册