GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
/* 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 <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 */
|
||||
Reference in New Issue
Block a user