diff options
| -rw-r--r-- | arch/sparc/include/asm/pgtable_64.h | 24 | ||||
| -rw-r--r-- | arch/sparc/include/asm/tsb.h | 4 |
2 files changed, 9 insertions, 19 deletions
diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index 387d484c62f9..a7b5091f3b13 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h | |||
| @@ -45,40 +45,30 @@ | |||
| 45 | 45 | ||
| 46 | #define vmemmap ((struct page *)VMEMMAP_BASE) | 46 | #define vmemmap ((struct page *)VMEMMAP_BASE) |
| 47 | 47 | ||
| 48 | /* XXX All of this needs to be rethought so we can take advantage | ||
| 49 | * XXX cheetah's full 64-bit virtual address space, ie. no more hole | ||
| 50 | * XXX in the middle like on spitfire. -DaveM | ||
| 51 | */ | ||
| 52 | /* | ||
| 53 | * Given a virtual address, the lowest PAGE_SHIFT bits determine offset | ||
| 54 | * into the page; the next higher PAGE_SHIFT-3 bits determine the pte# | ||
| 55 | * in the proper pagetable (the -3 is from the 8 byte ptes, and each page | ||
| 56 | * table is a single page long). The next higher PMD_BITS determine pmd# | ||
| 57 | * in the proper pmdtable (where we must have PMD_BITS <= (PAGE_SHIFT-2) | ||
| 58 | * since the pmd entries are 4 bytes, and each pmd page is a single page | ||
| 59 | * long). Finally, the higher few bits determine pgde#. | ||
| 60 | */ | ||
| 61 | |||
| 62 | /* PMD_SHIFT determines the size of the area a second-level page | 48 | /* PMD_SHIFT determines the size of the area a second-level page |
| 63 | * table can map | 49 | * table can map |
| 64 | */ | 50 | */ |
| 65 | #define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-3)) | 51 | #define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-4)) |
| 66 | #define PMD_SIZE (_AC(1,UL) << PMD_SHIFT) | 52 | #define PMD_SIZE (_AC(1,UL) << PMD_SHIFT) |
| 67 | #define PMD_MASK (~(PMD_SIZE-1)) | 53 | #define PMD_MASK (~(PMD_SIZE-1)) |
| 68 | #define PMD_BITS (PAGE_SHIFT - 2) | 54 | #define PMD_BITS (PAGE_SHIFT - 2) |
| 69 | 55 | ||
| 70 | /* PGDIR_SHIFT determines what a third-level page table entry can map */ | 56 | /* PGDIR_SHIFT determines what a third-level page table entry can map */ |
| 71 | #define PGDIR_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-3) + PMD_BITS) | 57 | #define PGDIR_SHIFT (PAGE_SHIFT + (PAGE_SHIFT-4) + PMD_BITS) |
| 72 | #define PGDIR_SIZE (_AC(1,UL) << PGDIR_SHIFT) | 58 | #define PGDIR_SIZE (_AC(1,UL) << PGDIR_SHIFT) |
| 73 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | 59 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) |
| 74 | #define PGDIR_BITS (PAGE_SHIFT - 2) | 60 | #define PGDIR_BITS (PAGE_SHIFT - 2) |
| 75 | 61 | ||
| 62 | #if (PGDIR_SHIFT + PGDIR_BITS) != 44 | ||
| 63 | #error Page table parameters do not cover virtual address space properly. | ||
| 64 | #endif | ||
| 65 | |||
| 76 | #ifndef __ASSEMBLY__ | 66 | #ifndef __ASSEMBLY__ |
| 77 | 67 | ||
| 78 | #include <linux/sched.h> | 68 | #include <linux/sched.h> |
| 79 | 69 | ||
| 80 | /* Entries per page directory level. */ | 70 | /* Entries per page directory level. */ |
| 81 | #define PTRS_PER_PTE (1UL << (PAGE_SHIFT-3)) | 71 | #define PTRS_PER_PTE (1UL << (PAGE_SHIFT-4)) |
| 82 | #define PTRS_PER_PMD (1UL << PMD_BITS) | 72 | #define PTRS_PER_PMD (1UL << PMD_BITS) |
| 83 | #define PTRS_PER_PGD (1UL << PGDIR_BITS) | 73 | #define PTRS_PER_PGD (1UL << PGDIR_BITS) |
| 84 | 74 | ||
diff --git a/arch/sparc/include/asm/tsb.h b/arch/sparc/include/asm/tsb.h index 1a8afd1ad04f..6435924b4514 100644 --- a/arch/sparc/include/asm/tsb.h +++ b/arch/sparc/include/asm/tsb.h | |||
| @@ -152,7 +152,7 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end; | |||
| 152 | lduwa [REG1 + REG2] ASI_PHYS_USE_EC, REG1; \ | 152 | lduwa [REG1 + REG2] ASI_PHYS_USE_EC, REG1; \ |
| 153 | brz,pn REG1, FAIL_LABEL; \ | 153 | brz,pn REG1, FAIL_LABEL; \ |
| 154 | sllx VADDR, 64 - PMD_SHIFT, REG2; \ | 154 | sllx VADDR, 64 - PMD_SHIFT, REG2; \ |
| 155 | srlx REG2, 64 - PAGE_SHIFT, REG2; \ | 155 | srlx REG2, 64 - (PAGE_SHIFT - 1), REG2; \ |
| 156 | sllx REG1, 11, REG1; \ | 156 | sllx REG1, 11, REG1; \ |
| 157 | andn REG2, 0x7, REG2; \ | 157 | andn REG2, 0x7, REG2; \ |
| 158 | add REG1, REG2, REG1; | 158 | add REG1, REG2, REG1; |
| @@ -177,7 +177,7 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end; | |||
| 177 | lduwa [REG1 + REG2] ASI_PHYS_USE_EC, REG1; \ | 177 | lduwa [REG1 + REG2] ASI_PHYS_USE_EC, REG1; \ |
| 178 | brz,pn REG1, FAIL_LABEL; \ | 178 | brz,pn REG1, FAIL_LABEL; \ |
| 179 | sllx VADDR, 64 - PMD_SHIFT, REG2; \ | 179 | sllx VADDR, 64 - PMD_SHIFT, REG2; \ |
| 180 | srlx REG2, 64 - PAGE_SHIFT, REG2; \ | 180 | srlx REG2, 64 - (PAGE_SHIFT - 1), REG2; \ |
| 181 | sllx REG1, 11, REG1; \ | 181 | sllx REG1, 11, REG1; \ |
| 182 | andn REG2, 0x7, REG2; \ | 182 | andn REG2, 0x7, REG2; \ |
| 183 | add REG1, REG2, REG1; | 183 | add REG1, REG2, REG1; |
