mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-27 00:30:57 +07:00
25d21ad6e7
This adds the TLB miss handler assembly, the low level TLB flush routines along with the necessary hook for dealing with our virtual page tables or indirect TLB entries that need to be flushes when PTE pages are freed. There is currently no support for hugetlbfs Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
68 lines
1.9 KiB
C
68 lines
1.9 KiB
C
#ifndef _ASM_POWERPC_MMU_40X_H_
|
|
#define _ASM_POWERPC_MMU_40X_H_
|
|
|
|
/*
|
|
* PPC40x support
|
|
*/
|
|
|
|
#define PPC40X_TLB_SIZE 64
|
|
|
|
/*
|
|
* TLB entries are defined by a "high" tag portion and a "low" data
|
|
* portion. On all architectures, the data portion is 32-bits.
|
|
*
|
|
* TLB entries are managed entirely under software control by reading,
|
|
* writing, and searchoing using the 4xx-specific tlbre, tlbwr, and tlbsx
|
|
* instructions.
|
|
*/
|
|
|
|
#define TLB_LO 1
|
|
#define TLB_HI 0
|
|
|
|
#define TLB_DATA TLB_LO
|
|
#define TLB_TAG TLB_HI
|
|
|
|
/* Tag portion */
|
|
|
|
#define TLB_EPN_MASK 0xFFFFFC00 /* Effective Page Number */
|
|
#define TLB_PAGESZ_MASK 0x00000380
|
|
#define TLB_PAGESZ(x) (((x) & 0x7) << 7)
|
|
#define PAGESZ_1K 0
|
|
#define PAGESZ_4K 1
|
|
#define PAGESZ_16K 2
|
|
#define PAGESZ_64K 3
|
|
#define PAGESZ_256K 4
|
|
#define PAGESZ_1M 5
|
|
#define PAGESZ_4M 6
|
|
#define PAGESZ_16M 7
|
|
#define TLB_VALID 0x00000040 /* Entry is valid */
|
|
|
|
/* Data portion */
|
|
|
|
#define TLB_RPN_MASK 0xFFFFFC00 /* Real Page Number */
|
|
#define TLB_PERM_MASK 0x00000300
|
|
#define TLB_EX 0x00000200 /* Instruction execution allowed */
|
|
#define TLB_WR 0x00000100 /* Writes permitted */
|
|
#define TLB_ZSEL_MASK 0x000000F0
|
|
#define TLB_ZSEL(x) (((x) & 0xF) << 4)
|
|
#define TLB_ATTR_MASK 0x0000000F
|
|
#define TLB_W 0x00000008 /* Caching is write-through */
|
|
#define TLB_I 0x00000004 /* Caching is inhibited */
|
|
#define TLB_M 0x00000002 /* Memory is coherent */
|
|
#define TLB_G 0x00000001 /* Memory is guarded from prefetch */
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
typedef struct {
|
|
unsigned int id;
|
|
unsigned int active;
|
|
unsigned long vdso_base;
|
|
} mm_context_t;
|
|
|
|
#endif /* !__ASSEMBLY__ */
|
|
|
|
#define mmu_virtual_psize MMU_PAGE_4K
|
|
#define mmu_linear_psize MMU_PAGE_256M
|
|
|
|
#endif /* _ASM_POWERPC_MMU_40X_H_ */
|