mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 12:09:34 +00:00 
			
		
		
		
	 d04a0f79f5
			
		
	
	
		d04a0f79f5
		
	
	
	
	
		
			
			The extended mode TLB requires both 64-bit PTEs and a 64-bit pgprot, correspondingly, the PGD also has to be 64-bits, so fix that up. The kernel and user permission bits really are decoupled in early cuts of the silicon, which means that we also have to set corresponding kernel permissions on user pages or we end up with user pages that the kernel simply can't touch (!). Finally, with those things corrected, really enable MMUCR.ME and correct the PTEA value (this simply needs to be the upper 32-bits of the PTE, with the size and protection bit encoding). Signed-off-by: Paul Mundt <lethal@linux-sh.org>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * include/asm-sh/cpu-sh4/mmu_context.h
 | |
|  *
 | |
|  * Copyright (C) 1999 Niibe Yutaka
 | |
|  *
 | |
|  * This file is subject to the terms and conditions of the GNU General Public
 | |
|  * License.  See the file "COPYING" in the main directory of this archive
 | |
|  * for more details.
 | |
|  */
 | |
| #ifndef __ASM_CPU_SH4_MMU_CONTEXT_H
 | |
| #define __ASM_CPU_SH4_MMU_CONTEXT_H
 | |
| 
 | |
| #define MMU_PTEH	0xFF000000	/* Page table entry register HIGH */
 | |
| #define MMU_PTEL	0xFF000004	/* Page table entry register LOW */
 | |
| #define MMU_TTB		0xFF000008	/* Translation table base register */
 | |
| #define MMU_TEA		0xFF00000C	/* TLB Exception Address */
 | |
| #define MMU_PTEA	0xFF000034	/* Page table entry assistance register */
 | |
| 
 | |
| #define MMUCR		0xFF000010	/* MMU Control Register */
 | |
| 
 | |
| #define MMU_ITLB_ADDRESS_ARRAY	0xF2000000
 | |
| #define MMU_UTLB_ADDRESS_ARRAY	0xF6000000
 | |
| #define MMU_PAGE_ASSOC_BIT	0x80
 | |
| 
 | |
| #ifdef CONFIG_X2TLB
 | |
| #define MMUCR_ME		(1 << 7)
 | |
| #else
 | |
| #define MMUCR_ME		(0)
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_SH_STORE_QUEUES
 | |
| #define MMUCR_SQMD		(1 << 9)
 | |
| #else
 | |
| #define MMUCR_SQMD		(0)
 | |
| #endif
 | |
| 
 | |
| #define MMU_NTLB_ENTRIES	64
 | |
| #define MMU_CONTROL_INIT	(0x05|MMUCR_SQMD|MMUCR_ME)
 | |
| 
 | |
| #define MMU_ITLB_DATA_ARRAY	0xF3000000
 | |
| #define MMU_UTLB_DATA_ARRAY	0xF7000000
 | |
| 
 | |
| #define MMU_UTLB_ENTRIES	   64
 | |
| #define MMU_U_ENTRY_SHIFT	    8
 | |
| #define MMU_UTLB_VALID		0x100
 | |
| #define MMU_ITLB_ENTRIES	    4
 | |
| #define MMU_I_ENTRY_SHIFT	    8
 | |
| #define MMU_ITLB_VALID		0x100
 | |
| 
 | |
| #define TRA	0xff000020
 | |
| #define EXPEVT	0xff000024
 | |
| #define INTEVT	0xff000028
 | |
| 
 | |
| #endif /* __ASM_CPU_SH4_MMU_CONTEXT_H */
 | |
| 
 |