-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
arm64: Add 4 levels of page tables definition with 4KB pages
This patch adds hardware definition and types for 4 levels of translation tables with 4KB pages. Signed-off-by: Jungseok Lee <jays.lee@samsung.com> Reviewed-by: Sungjinn Chung <sungjinn.chung@samsung.com> Acked-by: Kukjin Kim <kgene.kim@samsung.com> Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Tested-by: Jungseok Lee <jungseoklee85@gmail.com>
- Loading branch information
Jungseok Lee
authored and
Catalin Marinas
committed
Jul 23, 2014
1 parent
4edae01
commit 57e0139
Showing
2 changed files
with
121 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
#ifndef __ASM_PGTABLE_4LEVEL_HWDEF_H | ||
#define __ASM_PGTABLE_4LEVEL_HWDEF_H | ||
|
||
#define PTRS_PER_PTE 512 | ||
#define PTRS_PER_PMD 512 | ||
#define PTRS_PER_PUD 512 | ||
#define PTRS_PER_PGD 512 | ||
|
||
/* | ||
* PGDIR_SHIFT determines the size a top-level page table entry can map. | ||
*/ | ||
#define PGDIR_SHIFT 39 | ||
#define PGDIR_SIZE (_AC(1, UL) << PGDIR_SHIFT) | ||
#define PGDIR_MASK (~(PGDIR_SIZE-1)) | ||
|
||
/* | ||
* PUD_SHIFT determines the size the second level page table entry can map. | ||
*/ | ||
#define PUD_SHIFT 30 | ||
#define PUD_SIZE (_AC(1, UL) << PUD_SHIFT) | ||
#define PUD_MASK (~(PUD_SIZE-1)) | ||
|
||
/* | ||
* PMD_SHIFT determines the size the third level page table entry can map. | ||
*/ | ||
#define PMD_SHIFT 21 | ||
#define PMD_SIZE (_AC(1, UL) << PMD_SHIFT) | ||
#define PMD_MASK (~(PMD_SIZE-1)) | ||
|
||
/* | ||
* section address mask and size definitions. | ||
*/ | ||
#define SECTION_SHIFT 21 | ||
#define SECTION_SIZE (_AC(1, UL) << SECTION_SHIFT) | ||
#define SECTION_MASK (~(SECTION_SIZE-1)) | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
#ifndef __ASM_PGTABLE_4LEVEL_TYPES_H | ||
#define __ASM_PGTABLE_4LEVEL_TYPES_H | ||
|
||
#include <asm/types.h> | ||
|
||
typedef u64 pteval_t; | ||
typedef u64 pmdval_t; | ||
typedef u64 pudval_t; | ||
typedef u64 pgdval_t; | ||
|
||
#undef STRICT_MM_TYPECHECKS | ||
|
||
#ifdef STRICT_MM_TYPECHECKS | ||
|
||
/* | ||
* These are used to make use of C type-checking.. | ||
*/ | ||
typedef struct { pteval_t pte; } pte_t; | ||
typedef struct { pmdval_t pmd; } pmd_t; | ||
typedef struct { pudval_t pud; } pud_t; | ||
typedef struct { pgdval_t pgd; } pgd_t; | ||
typedef struct { pteval_t pgprot; } pgprot_t; | ||
|
||
#define pte_val(x) ((x).pte) | ||
#define pmd_val(x) ((x).pmd) | ||
#define pud_val(x) ((x).pud) | ||
#define pgd_val(x) ((x).pgd) | ||
#define pgprot_val(x) ((x).pgprot) | ||
|
||
#define __pte(x) ((pte_t) { (x) } ) | ||
#define __pmd(x) ((pmd_t) { (x) } ) | ||
#define __pud(x) ((pud_t) { (x) } ) | ||
#define __pgd(x) ((pgd_t) { (x) } ) | ||
#define __pgprot(x) ((pgprot_t) { (x) } ) | ||
|
||
#else /* !STRICT_MM_TYPECHECKS */ | ||
|
||
typedef pteval_t pte_t; | ||
typedef pmdval_t pmd_t; | ||
typedef pudval_t pud_t; | ||
typedef pgdval_t pgd_t; | ||
typedef pteval_t pgprot_t; | ||
|
||
#define pte_val(x) (x) | ||
#define pmd_val(x) (x) | ||
#define pud_val(x) (x) | ||
#define pgd_val(x) (x) | ||
#define pgprot_val(x) (x) | ||
|
||
#define __pte(x) (x) | ||
#define __pmd(x) (x) | ||
#define __pud(x) (x) | ||
#define __pgd(x) (x) | ||
#define __pgprot(x) (x) | ||
|
||
#endif /* STRICT_MM_TYPECHECKS */ | ||
|
||
#endif /* __ASM_PGTABLE_4LEVEL_TYPES_H */ |