mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 08:26:29 +00:00 
			
		
		
		
	 edc9a958fd
			
		
	
	
		edc9a958fd
		
	
	
	
	
		
			
			Now that nommu selects 32BIT we run in to the situation where SH-2A supports an uncached identity mapping by way of the BSC, while the SH-2 does not. This provides stubs for the PC manglers and tidies up some of the system*.h mess in the process. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __ASM_SH_UNCACHED_H
 | |
| #define __ASM_SH_UNCACHED_H
 | |
| 
 | |
| #include <linux/bug.h>
 | |
| 
 | |
| #ifdef CONFIG_UNCACHED_MAPPING
 | |
| extern unsigned long cached_to_uncached;
 | |
| extern unsigned long uncached_size;
 | |
| extern unsigned long uncached_start, uncached_end;
 | |
| 
 | |
| extern int virt_addr_uncached(unsigned long kaddr);
 | |
| extern void uncached_init(void);
 | |
| extern void uncached_resize(unsigned long size);
 | |
| 
 | |
| /*
 | |
|  * Jump to uncached area.
 | |
|  * When handling TLB or caches, we need to do it from an uncached area.
 | |
|  */
 | |
| #define jump_to_uncached()			\
 | |
| do {						\
 | |
| 	unsigned long __dummy;			\
 | |
| 						\
 | |
| 	__asm__ __volatile__(			\
 | |
| 		"mova	1f, %0\n\t"		\
 | |
| 		"add	%1, %0\n\t"		\
 | |
| 		"jmp	@%0\n\t"		\
 | |
| 		" nop\n\t"			\
 | |
| 		".balign 4\n"			\
 | |
| 		"1:"				\
 | |
| 		: "=&z" (__dummy)		\
 | |
| 		: "r" (cached_to_uncached));	\
 | |
| } while (0)
 | |
| 
 | |
| /*
 | |
|  * Back to cached area.
 | |
|  */
 | |
| #define back_to_cached()				\
 | |
| do {							\
 | |
| 	unsigned long __dummy;				\
 | |
| 	ctrl_barrier();					\
 | |
| 	__asm__ __volatile__(				\
 | |
| 		"mov.l	1f, %0\n\t"			\
 | |
| 		"jmp	@%0\n\t"			\
 | |
| 		" nop\n\t"				\
 | |
| 		".balign 4\n"				\
 | |
| 		"1:	.long 2f\n"			\
 | |
| 		"2:"					\
 | |
| 		: "=&r" (__dummy));			\
 | |
| } while (0)
 | |
| #else
 | |
| #define virt_addr_uncached(kaddr)	(0)
 | |
| #define uncached_init()			do { } while (0)
 | |
| #define uncached_resize(size)		BUG()
 | |
| #define jump_to_uncached()		do { } while (0)
 | |
| #define back_to_cached()		do { } while (0)
 | |
| #endif
 | |
| 
 | |
| #endif /* __ASM_SH_UNCACHED_H */
 |