diff options
Diffstat (limited to 'arch/sparc/mm')
-rw-r--r-- | arch/sparc/mm/srmmu.c | 43 |
1 files changed, 1 insertions, 42 deletions
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index 38fcb83aaae9..29dfabffcc5e 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c | |||
@@ -91,22 +91,6 @@ static DEFINE_SPINLOCK(srmmu_context_spinlock); | |||
91 | 91 | ||
92 | static int is_hypersparc; | 92 | static int is_hypersparc; |
93 | 93 | ||
94 | /* | ||
95 | * In general all page table modifications should use the V8 atomic | ||
96 | * swap instruction. This insures the mmu and the cpu are in sync | ||
97 | * with respect to ref/mod bits in the page tables. | ||
98 | */ | ||
99 | static inline unsigned long srmmu_swap(unsigned long *addr, unsigned long value) | ||
100 | { | ||
101 | __asm__ __volatile__("swap [%2], %0" : "=&r" (value) : "0" (value), "r" (addr)); | ||
102 | return value; | ||
103 | } | ||
104 | |||
105 | static inline void srmmu_set_pte(pte_t *ptep, pte_t pteval) | ||
106 | { | ||
107 | srmmu_swap((unsigned long *)ptep, pte_val(pteval)); | ||
108 | } | ||
109 | |||
110 | /* The very generic SRMMU page table operations. */ | 94 | /* The very generic SRMMU page table operations. */ |
111 | static inline int srmmu_device_memory(unsigned long x) | 95 | static inline int srmmu_device_memory(unsigned long x) |
112 | { | 96 | { |
@@ -160,9 +144,6 @@ static inline int srmmu_pte_none(pte_t pte) | |||
160 | static inline int srmmu_pte_present(pte_t pte) | 144 | static inline int srmmu_pte_present(pte_t pte) |
161 | { return ((pte_val(pte) & SRMMU_ET_MASK) == SRMMU_ET_PTE); } | 145 | { return ((pte_val(pte) & SRMMU_ET_MASK) == SRMMU_ET_PTE); } |
162 | 146 | ||
163 | static inline void srmmu_pte_clear(pte_t *ptep) | ||
164 | { srmmu_set_pte(ptep, __pte(0)); } | ||
165 | |||
166 | static inline int srmmu_pmd_none(pmd_t pmd) | 147 | static inline int srmmu_pmd_none(pmd_t pmd) |
167 | { return !(pmd_val(pmd) & 0xFFFFFFF); } | 148 | { return !(pmd_val(pmd) & 0xFFFFFFF); } |
168 | 149 | ||
@@ -172,12 +153,6 @@ static inline int srmmu_pmd_bad(pmd_t pmd) | |||
172 | static inline int srmmu_pmd_present(pmd_t pmd) | 153 | static inline int srmmu_pmd_present(pmd_t pmd) |
173 | { return ((pmd_val(pmd) & SRMMU_ET_MASK) == SRMMU_ET_PTD); } | 154 | { return ((pmd_val(pmd) & SRMMU_ET_MASK) == SRMMU_ET_PTD); } |
174 | 155 | ||
175 | static inline void srmmu_pmd_clear(pmd_t *pmdp) { | ||
176 | int i; | ||
177 | for (i = 0; i < PTRS_PER_PTE/SRMMU_REAL_PTRS_PER_PTE; i++) | ||
178 | srmmu_set_pte((pte_t *)&pmdp->pmdv[i], __pte(0)); | ||
179 | } | ||
180 | |||
181 | static inline int srmmu_pgd_none(pgd_t pgd) | 156 | static inline int srmmu_pgd_none(pgd_t pgd) |
182 | { return !(pgd_val(pgd) & 0xFFFFFFF); } | 157 | { return !(pgd_val(pgd) & 0xFFFFFFF); } |
183 | 158 | ||
@@ -187,9 +162,6 @@ static inline int srmmu_pgd_bad(pgd_t pgd) | |||
187 | static inline int srmmu_pgd_present(pgd_t pgd) | 162 | static inline int srmmu_pgd_present(pgd_t pgd) |
188 | { return ((pgd_val(pgd) & SRMMU_ET_MASK) == SRMMU_ET_PTD); } | 163 | { return ((pgd_val(pgd) & SRMMU_ET_MASK) == SRMMU_ET_PTD); } |
189 | 164 | ||
190 | static inline void srmmu_pgd_clear(pgd_t * pgdp) | ||
191 | { srmmu_set_pte((pte_t *)pgdp, __pte(0)); } | ||
192 | |||
193 | static inline pte_t srmmu_pte_wrprotect(pte_t pte) | 165 | static inline pte_t srmmu_pte_wrprotect(pte_t pte) |
194 | { return __pte(pte_val(pte) & ~SRMMU_WRITE);} | 166 | { return __pte(pte_val(pte) & ~SRMMU_WRITE);} |
195 | 167 | ||
@@ -628,7 +600,7 @@ static inline void srmmu_unmapioaddr(unsigned long virt_addr) | |||
628 | ptep = srmmu_pte_offset(pmdp, virt_addr); | 600 | ptep = srmmu_pte_offset(pmdp, virt_addr); |
629 | 601 | ||
630 | /* No need to flush uncacheable page. */ | 602 | /* No need to flush uncacheable page. */ |
631 | srmmu_pte_clear(ptep); | 603 | __pte_clear(ptep); |
632 | } | 604 | } |
633 | 605 | ||
634 | static void srmmu_unmapiorange(unsigned long virt_addr, unsigned int len) | 606 | static void srmmu_unmapiorange(unsigned long virt_addr, unsigned int len) |
@@ -1480,9 +1452,6 @@ static void __init init_hypersparc(void) | |||
1480 | 1452 | ||
1481 | is_hypersparc = 1; | 1453 | is_hypersparc = 1; |
1482 | 1454 | ||
1483 | BTFIXUPSET_CALL(pte_clear, srmmu_pte_clear, BTFIXUPCALL_NORM); | ||
1484 | BTFIXUPSET_CALL(pmd_clear, srmmu_pmd_clear, BTFIXUPCALL_NORM); | ||
1485 | BTFIXUPSET_CALL(pgd_clear, srmmu_pgd_clear, BTFIXUPCALL_NORM); | ||
1486 | BTFIXUPSET_CALL(flush_cache_all, hypersparc_flush_cache_all, BTFIXUPCALL_NORM); | 1455 | BTFIXUPSET_CALL(flush_cache_all, hypersparc_flush_cache_all, BTFIXUPCALL_NORM); |
1487 | BTFIXUPSET_CALL(flush_cache_mm, hypersparc_flush_cache_mm, BTFIXUPCALL_NORM); | 1456 | BTFIXUPSET_CALL(flush_cache_mm, hypersparc_flush_cache_mm, BTFIXUPCALL_NORM); |
1488 | BTFIXUPSET_CALL(flush_cache_range, hypersparc_flush_cache_range, BTFIXUPCALL_NORM); | 1457 | BTFIXUPSET_CALL(flush_cache_range, hypersparc_flush_cache_range, BTFIXUPCALL_NORM); |
@@ -1546,9 +1515,6 @@ static void __init init_cypress_common(void) | |||
1546 | { | 1515 | { |
1547 | init_vac_layout(); | 1516 | init_vac_layout(); |
1548 | 1517 | ||
1549 | BTFIXUPSET_CALL(pte_clear, srmmu_pte_clear, BTFIXUPCALL_NORM); | ||
1550 | BTFIXUPSET_CALL(pmd_clear, srmmu_pmd_clear, BTFIXUPCALL_NORM); | ||
1551 | BTFIXUPSET_CALL(pgd_clear, srmmu_pgd_clear, BTFIXUPCALL_NORM); | ||
1552 | BTFIXUPSET_CALL(flush_cache_all, cypress_flush_cache_all, BTFIXUPCALL_NORM); | 1518 | BTFIXUPSET_CALL(flush_cache_all, cypress_flush_cache_all, BTFIXUPCALL_NORM); |
1553 | BTFIXUPSET_CALL(flush_cache_mm, cypress_flush_cache_mm, BTFIXUPCALL_NORM); | 1519 | BTFIXUPSET_CALL(flush_cache_mm, cypress_flush_cache_mm, BTFIXUPCALL_NORM); |
1554 | BTFIXUPSET_CALL(flush_cache_range, cypress_flush_cache_range, BTFIXUPCALL_NORM); | 1520 | BTFIXUPSET_CALL(flush_cache_range, cypress_flush_cache_range, BTFIXUPCALL_NORM); |
@@ -1930,10 +1896,6 @@ static void __init init_viking(void) | |||
1930 | viking_mxcc_present = 0; | 1896 | viking_mxcc_present = 0; |
1931 | msi_set_sync(); | 1897 | msi_set_sync(); |
1932 | 1898 | ||
1933 | BTFIXUPSET_CALL(pte_clear, srmmu_pte_clear, BTFIXUPCALL_NORM); | ||
1934 | BTFIXUPSET_CALL(pmd_clear, srmmu_pmd_clear, BTFIXUPCALL_NORM); | ||
1935 | BTFIXUPSET_CALL(pgd_clear, srmmu_pgd_clear, BTFIXUPCALL_NORM); | ||
1936 | |||
1937 | /* | 1899 | /* |
1938 | * We need this to make sure old viking takes no hits | 1900 | * We need this to make sure old viking takes no hits |
1939 | * on it's cache for dma snoops to workaround the | 1901 | * on it's cache for dma snoops to workaround the |
@@ -2162,16 +2124,13 @@ void __init ld_mmu_srmmu(void) | |||
2162 | BTFIXUPSET_CALL(pgd_page_vaddr, srmmu_pgd_page, BTFIXUPCALL_NORM); | 2124 | BTFIXUPSET_CALL(pgd_page_vaddr, srmmu_pgd_page, BTFIXUPCALL_NORM); |
2163 | 2125 | ||
2164 | BTFIXUPSET_CALL(pte_present, srmmu_pte_present, BTFIXUPCALL_NORM); | 2126 | BTFIXUPSET_CALL(pte_present, srmmu_pte_present, BTFIXUPCALL_NORM); |
2165 | BTFIXUPSET_CALL(pte_clear, srmmu_pte_clear, BTFIXUPCALL_SWAPO0G0); | ||
2166 | 2127 | ||
2167 | BTFIXUPSET_CALL(pmd_bad, srmmu_pmd_bad, BTFIXUPCALL_NORM); | 2128 | BTFIXUPSET_CALL(pmd_bad, srmmu_pmd_bad, BTFIXUPCALL_NORM); |
2168 | BTFIXUPSET_CALL(pmd_present, srmmu_pmd_present, BTFIXUPCALL_NORM); | 2129 | BTFIXUPSET_CALL(pmd_present, srmmu_pmd_present, BTFIXUPCALL_NORM); |
2169 | BTFIXUPSET_CALL(pmd_clear, srmmu_pmd_clear, BTFIXUPCALL_SWAPO0G0); | ||
2170 | 2130 | ||
2171 | BTFIXUPSET_CALL(pgd_none, srmmu_pgd_none, BTFIXUPCALL_NORM); | 2131 | BTFIXUPSET_CALL(pgd_none, srmmu_pgd_none, BTFIXUPCALL_NORM); |
2172 | BTFIXUPSET_CALL(pgd_bad, srmmu_pgd_bad, BTFIXUPCALL_NORM); | 2132 | BTFIXUPSET_CALL(pgd_bad, srmmu_pgd_bad, BTFIXUPCALL_NORM); |
2173 | BTFIXUPSET_CALL(pgd_present, srmmu_pgd_present, BTFIXUPCALL_NORM); | 2133 | BTFIXUPSET_CALL(pgd_present, srmmu_pgd_present, BTFIXUPCALL_NORM); |
2174 | BTFIXUPSET_CALL(pgd_clear, srmmu_pgd_clear, BTFIXUPCALL_SWAPO0G0); | ||
2175 | 2134 | ||
2176 | BTFIXUPSET_CALL(mk_pte, srmmu_mk_pte, BTFIXUPCALL_NORM); | 2135 | BTFIXUPSET_CALL(mk_pte, srmmu_mk_pte, BTFIXUPCALL_NORM); |
2177 | BTFIXUPSET_CALL(mk_pte_phys, srmmu_mk_pte_phys, BTFIXUPCALL_NORM); | 2136 | BTFIXUPSET_CALL(mk_pte_phys, srmmu_mk_pte_phys, BTFIXUPCALL_NORM); |