mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Merge nommu tree
Fix merge conflict in arch/arm/mm/proc-xscale.S Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
		
						commit
						0003cedfc5
					
				
					 25 changed files with 189 additions and 131 deletions
				
			
		| 
						 | 
				
			
			@ -358,7 +358,7 @@ __setup_mmu:	sub	r3, r4, #16384		@ Page directory size
 | 
			
		|||
		str	r1, [r0]
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
__armv4_cache_on:
 | 
			
		||||
__armv4_mmu_cache_on:
 | 
			
		||||
		mov	r12, lr
 | 
			
		||||
		bl	__setup_mmu
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
| 
						 | 
				
			
			@ -367,24 +367,24 @@ __armv4_cache_on:
 | 
			
		|||
		mrc	p15, 0, r0, c1, c0, 0	@ read control reg
 | 
			
		||||
		orr	r0, r0, #0x5000		@ I-cache enable, RR cache replacement
 | 
			
		||||
		orr	r0, r0, #0x0030
 | 
			
		||||
		bl	__common_cache_on
 | 
			
		||||
		bl	__common_mmu_cache_on
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
		mcr	p15, 0, r0, c8, c7, 0	@ flush I,D TLBs
 | 
			
		||||
		mov	pc, r12
 | 
			
		||||
 | 
			
		||||
__arm6_cache_on:
 | 
			
		||||
__arm6_mmu_cache_on:
 | 
			
		||||
		mov	r12, lr
 | 
			
		||||
		bl	__setup_mmu
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
		mcr	p15, 0, r0, c7, c0, 0	@ invalidate whole cache v3
 | 
			
		||||
		mcr	p15, 0, r0, c5, c0, 0	@ invalidate whole TLB v3
 | 
			
		||||
		mov	r0, #0x30
 | 
			
		||||
		bl	__common_cache_on
 | 
			
		||||
		bl	__common_mmu_cache_on
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
		mcr	p15, 0, r0, c5, c0, 0	@ invalidate whole TLB v3
 | 
			
		||||
		mov	pc, r12
 | 
			
		||||
 | 
			
		||||
__common_cache_on:
 | 
			
		||||
__common_mmu_cache_on:
 | 
			
		||||
#ifndef DEBUG
 | 
			
		||||
		orr	r0, r0, #0x000d		@ Write buffer, mmu
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -471,12 +471,12 @@ call_cache_fn:	adr	r12, proc_types
 | 
			
		|||
proc_types:
 | 
			
		||||
		.word	0x41560600		@ ARM6/610
 | 
			
		||||
		.word	0xffffffe0
 | 
			
		||||
		b	__arm6_cache_off	@ works, but slow
 | 
			
		||||
		b	__arm6_cache_off
 | 
			
		||||
		b	__arm6_mmu_cache_off	@ works, but slow
 | 
			
		||||
		b	__arm6_mmu_cache_off
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
@		b	__arm6_cache_on		@ untested
 | 
			
		||||
@		b	__arm6_cache_off
 | 
			
		||||
@		b	__armv3_cache_flush
 | 
			
		||||
@		b	__arm6_mmu_cache_on		@ untested
 | 
			
		||||
@		b	__arm6_mmu_cache_off
 | 
			
		||||
@		b	__armv3_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x00000000		@ old ARM ID
 | 
			
		||||
		.word	0x0000f000
 | 
			
		||||
| 
						 | 
				
			
			@ -486,14 +486,14 @@ proc_types:
 | 
			
		|||
 | 
			
		||||
		.word	0x41007000		@ ARM7/710
 | 
			
		||||
		.word	0xfff8fe00
 | 
			
		||||
		b	__arm7_cache_off
 | 
			
		||||
		b	__arm7_cache_off
 | 
			
		||||
		b	__arm7_mmu_cache_off
 | 
			
		||||
		b	__arm7_mmu_cache_off
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
		.word	0x41807200		@ ARM720T (writethrough)
 | 
			
		||||
		.word	0xffffff00
 | 
			
		||||
		b	__armv4_cache_on
 | 
			
		||||
		b	__armv4_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
		.word	0x00007000		@ ARM7 IDs
 | 
			
		||||
| 
						 | 
				
			
			@ -506,41 +506,41 @@ proc_types:
 | 
			
		|||
 | 
			
		||||
		.word	0x4401a100		@ sa110 / sa1100
 | 
			
		||||
		.word	0xffffffe0
 | 
			
		||||
		b	__armv4_cache_on
 | 
			
		||||
		b	__armv4_cache_off
 | 
			
		||||
		b	__armv4_cache_flush
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x6901b110		@ sa1110
 | 
			
		||||
		.word	0xfffffff0
 | 
			
		||||
		b	__armv4_cache_on
 | 
			
		||||
		b	__armv4_cache_off
 | 
			
		||||
		b	__armv4_cache_flush
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		@ These match on the architecture ID
 | 
			
		||||
 | 
			
		||||
		.word	0x00020000		@ ARMv4T
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv4_cache_on
 | 
			
		||||
		b	__armv4_cache_off
 | 
			
		||||
		b	__armv4_cache_flush
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x00050000		@ ARMv5TE
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv4_cache_on
 | 
			
		||||
		b	__armv4_cache_off
 | 
			
		||||
		b	__armv4_cache_flush
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x00060000		@ ARMv5TEJ
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv4_cache_on
 | 
			
		||||
		b	__armv4_cache_off
 | 
			
		||||
		b	__armv4_cache_flush
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x00070000		@ ARMv6
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv4_cache_on
 | 
			
		||||
		b	__armv4_cache_off
 | 
			
		||||
		b	__armv6_cache_flush
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv6_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0			@ unrecognised type
 | 
			
		||||
		.word	0
 | 
			
		||||
| 
						 | 
				
			
			@ -562,7 +562,7 @@ proc_types:
 | 
			
		|||
cache_off:	mov	r3, #12			@ cache_off function
 | 
			
		||||
		b	call_cache_fn
 | 
			
		||||
 | 
			
		||||
__armv4_cache_off:
 | 
			
		||||
__armv4_mmu_cache_off:
 | 
			
		||||
		mrc	p15, 0, r0, c1, c0
 | 
			
		||||
		bic	r0, r0, #0x000d
 | 
			
		||||
		mcr	p15, 0, r0, c1, c0	@ turn MMU and cache off
 | 
			
		||||
| 
						 | 
				
			
			@ -571,15 +571,15 @@ __armv4_cache_off:
 | 
			
		|||
		mcr	p15, 0, r0, c8, c7	@ invalidate whole TLB v4
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
__arm6_cache_off:
 | 
			
		||||
__arm6_mmu_cache_off:
 | 
			
		||||
		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.
 | 
			
		||||
		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
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
		mcr	p15, 0, r0, c7, c0, 0	@ invalidate whole cache v3
 | 
			
		||||
| 
						 | 
				
			
			@ -601,7 +601,7 @@ cache_clean_flush:
 | 
			
		|||
		mov	r3, #16
 | 
			
		||||
		b	call_cache_fn
 | 
			
		||||
 | 
			
		||||
__armv6_cache_flush:
 | 
			
		||||
__armv6_mmu_cache_flush:
 | 
			
		||||
		mov	r1, #0
 | 
			
		||||
		mcr	p15, 0, r1, c7, c14, 0	@ clean+invalidate D
 | 
			
		||||
		mcr	p15, 0, r1, c7, c5, 0	@ invalidate I+BTB
 | 
			
		||||
| 
						 | 
				
			
			@ -609,7 +609,7 @@ __armv6_cache_flush:
 | 
			
		|||
		mcr	p15, 0, r1, c7, c10, 4	@ drain WB
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
__armv4_cache_flush:
 | 
			
		||||
__armv4_mmu_cache_flush:
 | 
			
		||||
		mov	r2, #64*1024		@ default: 32K dcache size (*2)
 | 
			
		||||
		mov	r11, #32		@ default: 32 byte line size
 | 
			
		||||
		mrc	p15, 0, r3, c0, c0, 1	@ read cache type
 | 
			
		||||
| 
						 | 
				
			
			@ -637,7 +637,7 @@ no_cache_id:
 | 
			
		|||
		mcr	p15, 0, r1, c7, c10, 4	@ drain WB
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
__armv3_cache_flush:
 | 
			
		||||
__armv3_mmu_cache_flush:
 | 
			
		||||
		mov	r1, #0
 | 
			
		||||
		mcr	p15, 0, r0, c7, c0, 0	@ invalidate whole cache v3
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,6 +81,7 @@
 | 
			
		|||
ENTRY(stext)
 | 
			
		||||
	msr	cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
 | 
			
		||||
						@ and irqs disabled
 | 
			
		||||
	mrc	p15, 0, r9, c0, c0		@ get processor id
 | 
			
		||||
	bl	__lookup_processor_type		@ r5=procinfo r9=cpuid
 | 
			
		||||
	movs	r10, r5				@ invalid processor (r5=0)?
 | 
			
		||||
	beq	__error_p			@ yes, error 'p'
 | 
			
		||||
| 
						 | 
				
			
			@ -155,6 +156,7 @@ ENTRY(secondary_startup)
 | 
			
		|||
	 * as it has already been validated by the primary processor.
 | 
			
		||||
	 */
 | 
			
		||||
	msr	cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC
 | 
			
		||||
	mrc	p15, 0, r9, c0, c0		@ get processor id
 | 
			
		||||
	bl	__lookup_processor_type
 | 
			
		||||
	movs	r10, r5				@ invalid processor?
 | 
			
		||||
	moveq	r0, #'p'			@ yes, error 'p'
 | 
			
		||||
| 
						 | 
				
			
			@ -449,19 +451,19 @@ __error:
 | 
			
		|||
 * (and therefore, we are not in the correct address space).  We have to
 | 
			
		||||
 * calculate the offset.
 | 
			
		||||
 *
 | 
			
		||||
 *	r9 = cpuid
 | 
			
		||||
 * Returns:
 | 
			
		||||
 *	r3, r4, r6 corrupted
 | 
			
		||||
 *	r5 = proc_info pointer in physical address space
 | 
			
		||||
 *	r9 = cpuid
 | 
			
		||||
 *	r9 = cpuid (preserved)
 | 
			
		||||
 */
 | 
			
		||||
	.type	__lookup_processor_type, %function
 | 
			
		||||
__lookup_processor_type:
 | 
			
		||||
	adr	r3, 3f
 | 
			
		||||
	ldmda	r3, {r5, r6, r9}
 | 
			
		||||
	sub	r3, r3, r9			@ get offset between virt&phys
 | 
			
		||||
	ldmda	r3, {r5 - r7}
 | 
			
		||||
	sub	r3, r3, r7			@ get offset between virt&phys
 | 
			
		||||
	add	r5, r5, r3			@ convert virt addresses to
 | 
			
		||||
	add	r6, r6, r3			@ physical address space
 | 
			
		||||
	mrc	p15, 0, r9, c0, c0		@ get processor id
 | 
			
		||||
1:	ldmia	r5, {r3, r4}			@ value, mask
 | 
			
		||||
	and	r4, r4, r9			@ mask wanted bits
 | 
			
		||||
	teq	r3, r4
 | 
			
		||||
| 
						 | 
				
			
			@ -476,10 +478,11 @@ __lookup_processor_type:
 | 
			
		|||
 * This provides a C-API version of the above function.
 | 
			
		||||
 */
 | 
			
		||||
ENTRY(lookup_processor_type)
 | 
			
		||||
	stmfd	sp!, {r4 - r6, r9, lr}
 | 
			
		||||
	stmfd	sp!, {r4 - r7, r9, lr}
 | 
			
		||||
	mov	r9, r0
 | 
			
		||||
	bl	__lookup_processor_type
 | 
			
		||||
	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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -278,7 +278,7 @@ int cpu_architecture(void)
 | 
			
		|||
 * These functions re-use the assembly code in head.S, which
 | 
			
		||||
 * 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);
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
	 * entries in arch/arm/mm/proc-*.S
 | 
			
		||||
	 */
 | 
			
		||||
	list = lookup_processor_type();
 | 
			
		||||
	list = lookup_processor_type(processor_id);
 | 
			
		||||
	if (!list) {
 | 
			
		||||
		printk("CPU configuration botched (ID %08x), unable "
 | 
			
		||||
		       "to continue.\n", processor_id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -234,7 +234,12 @@ asmlinkage int sys_ipc(uint call, int first, int second, int third,
 | 
			
		|||
 */
 | 
			
		||||
asmlinkage int sys_fork(struct pt_regs *regs)
 | 
			
		||||
{
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
	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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@
 | 
			
		|||
#include <asm/irq.h>
 | 
			
		||||
#include <asm/setup.h>
 | 
			
		||||
#include <asm/page.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/tlbflush.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -266,12 +266,18 @@ config CPU_32v6K
 | 
			
		|||
# This defines the compiler instruction set which depends on the machine type.
 | 
			
		||||
config CPU_32v3
 | 
			
		||||
	bool
 | 
			
		||||
	select TLS_REG_EMUL if SMP
 | 
			
		||||
	select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
 | 
			
		||||
 | 
			
		||||
config CPU_32v4
 | 
			
		||||
	bool
 | 
			
		||||
	select TLS_REG_EMUL if SMP
 | 
			
		||||
	select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
 | 
			
		||||
 | 
			
		||||
config CPU_32v5
 | 
			
		||||
	bool
 | 
			
		||||
	select TLS_REG_EMUL if SMP
 | 
			
		||||
	select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
 | 
			
		||||
 | 
			
		||||
config CPU_32v6
 | 
			
		||||
	bool
 | 
			
		||||
| 
						 | 
				
			
			@ -417,7 +423,6 @@ config CPU_BPREDICT_DISABLE
 | 
			
		|||
 | 
			
		||||
config TLS_REG_EMUL
 | 
			
		||||
	bool
 | 
			
		||||
	default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3)
 | 
			
		||||
	help
 | 
			
		||||
	  An SMP system using a pre-ARMv6 processor (there are apparently
 | 
			
		||||
	  a few prototypes like that in existence) and therefore access to
 | 
			
		||||
| 
						 | 
				
			
			@ -436,7 +441,6 @@ config HAS_TLS_REG
 | 
			
		|||
 | 
			
		||||
config NEEDS_SYSCALL_FOR_CMPXCHG
 | 
			
		||||
	bool
 | 
			
		||||
	default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3)
 | 
			
		||||
	help
 | 
			
		||||
	  SMP on a pre-ARMv6 processor?  Well OK then.
 | 
			
		||||
	  Forget about fast user space cmpxchg support.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@
 | 
			
		|||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@
 | 
			
		|||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@
 | 
			
		|||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@
 | 
			
		|||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@
 | 
			
		|||
#include <linux/config.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/page.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@
 | 
			
		|||
#include <linux/config.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/page.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,6 +51,7 @@
 | 
			
		|||
#include <linux/config.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/page.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@
 | 
			
		|||
#include <linux/config.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/page.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/hardware.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,7 @@
 | 
			
		|||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/hardware.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@
 | 
			
		|||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/hardware/arm_scu.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
 | 
			
		||||
#include "proc-macros.S"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,7 @@
 | 
			
		|||
#include <asm/assembler.h>
 | 
			
		||||
#include <asm/procinfo.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/page.h>
 | 
			
		||||
#include <asm/ptrace.h>
 | 
			
		||||
#include "proc-macros.S"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,10 +10,15 @@
 | 
			
		|||
#ifndef _ASMARM_PGALLOC_H
 | 
			
		||||
#define _ASMARM_PGALLOC_H
 | 
			
		||||
 | 
			
		||||
#include <asm/domain.h>
 | 
			
		||||
#include <asm/pgtable-hwdef.h>
 | 
			
		||||
#include <asm/processor.h>
 | 
			
		||||
#include <asm/cacheflush.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
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										88
									
								
								include/asm-arm/pgtable-hwdef.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								include/asm-arm/pgtable-hwdef.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
/*
 | 
			
		||||
 *  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);
 | 
			
		|||
#define SUPERSECTION_SIZE	(1UL << SUPERSECTION_SHIFT)
 | 
			
		||||
#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.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -236,11 +161,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
 | 
			
		|||
 | 
			
		||||
#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...
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,14 @@
 | 
			
		|||
 | 
			
		||||
#include <asm/cacheflush.h>
 | 
			
		||||
#include <asm/tlbflush.h>
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_MMU
 | 
			
		||||
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <asm-generic/tlb.h>
 | 
			
		||||
 | 
			
		||||
#else /* !CONFIG_MMU */
 | 
			
		||||
 | 
			
		||||
#include <asm/pgalloc.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -82,4 +90,5 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
 | 
			
		|||
 | 
			
		||||
#define tlb_migrate_finish(mm)		do { } while (0)
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_MMU */
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,13 @@
 | 
			
		|||
#define _ASMARM_TLBFLUSH_H
 | 
			
		||||
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_MMU
 | 
			
		||||
 | 
			
		||||
#define tlb_flush(tlb)	((void) tlb)
 | 
			
		||||
 | 
			
		||||
#else /* CONFIG_MMU */
 | 
			
		||||
 | 
			
		||||
#include <asm/glue.h>
 | 
			
		||||
 | 
			
		||||
#define TLB_V3_PAGE	(1 << 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -423,4 +430,6 @@ extern void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte
 | 
			
		|||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_MMU */
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue