mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 03:58:17 +00:00 
			
		
		
		
	Move this uncommon header out of the common header. Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
 | |
| /*
 | |
|  * Copyright (c) 2018 Microsemi Corporation
 | |
|  */
 | |
| 
 | |
| #ifndef __ASM_MACH_TLB_H
 | |
| #define __ASM_MACH_TLB_H
 | |
| 
 | |
| #include <asm/mipsregs.h>
 | |
| #include <linux/bitops.h>
 | |
| #include <mach/common.h>
 | |
| #include <linux/sizes.h>
 | |
| 
 | |
| #define TLB_HI_MASK      0xffffe000
 | |
| #define TLB_LO_MASK      0x3fffffff	/* Masks off Fill bits */
 | |
| #define TLB_LO_SHIFT     6	/* PFN Start bit */
 | |
| 
 | |
| #define PAGEMASK_SHIFT   13
 | |
| 
 | |
| #define MMU_PAGE_CACHED   (3 << 3)	/* C(5:3) Cache Coherency Attributes */
 | |
| #define MMU_PAGE_UNCACHED (2 << 3)	/* C(5:3) Cache Coherency Attributes */
 | |
| #define MMU_PAGE_DIRTY    BIT(2)	/* = Writeable */
 | |
| #define MMU_PAGE_VALID    BIT(1)
 | |
| #define MMU_PAGE_GLOBAL   BIT(0)
 | |
| #define MMU_REGIO_RO_C    (MMU_PAGE_CACHED | MMU_PAGE_VALID | MMU_PAGE_GLOBAL)
 | |
| #define MMU_REGIO_RO      (MMU_PAGE_UNCACHED | MMU_PAGE_VALID | MMU_PAGE_GLOBAL)
 | |
| #define MMU_REGIO_RW      (MMU_PAGE_DIRTY | MMU_REGIO_RO)
 | |
| #define MMU_REGIO_INVAL   (MMU_PAGE_GLOBAL)
 | |
| 
 | |
| #define TLB_COUNT_MASK	  GENMASK(5, 0)
 | |
| #define TLB_COUNT_OFF	  25
 | |
| 
 | |
| static inline u32 get_tlb_count(void)
 | |
| {
 | |
| 	register u32 config1;
 | |
| 
 | |
| 	config1 = read_c0_config1();
 | |
| 	config1 >>= TLB_COUNT_OFF;
 | |
| 	config1 &= TLB_COUNT_MASK;
 | |
| 
 | |
| 	return 1 + config1;
 | |
| }
 | |
| 
 | |
| static inline void create_tlb(int index, u32 offset, u32 size, u32 tlb_attrib1,
 | |
| 			      u32 tlb_attrib2)
 | |
| {
 | |
| 	register u32 tlb_mask, tlb_lo0, tlb_lo1;
 | |
| 
 | |
| 	tlb_mask = ((size >> 12) - 1) << PAGEMASK_SHIFT;
 | |
| 	tlb_lo0 = tlb_attrib1 | (offset >> TLB_LO_SHIFT);
 | |
| 	tlb_lo1 = tlb_attrib2 | ((offset + size) >> TLB_LO_SHIFT);
 | |
| 
 | |
| 	write_one_tlb(index, tlb_mask, offset & TLB_HI_MASK,
 | |
| 		      tlb_lo0 & TLB_LO_MASK, tlb_lo1 & TLB_LO_MASK);
 | |
| }
 | |
| #endif				/* __ASM_MACH_TLB_H */
 |