diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/sparc/mm/generic.c | 1 | ||||
| -rw-r--r-- | arch/sparc/mm/loadmmu.c | 2 | ||||
| -rw-r--r-- | arch/sparc/mm/srmmu.c | 9 | ||||
| -rw-r--r-- | arch/sparc/mm/sun4c.c | 15 | ||||
| -rw-r--r-- | arch/sparc64/kernel/pci.c | 2 | ||||
| -rw-r--r-- | arch/sparc64/mm/generic.c | 1 |
6 files changed, 21 insertions, 9 deletions
diff --git a/arch/sparc/mm/generic.c b/arch/sparc/mm/generic.c index 2cb0728cee05..1ef7fa03fefe 100644 --- a/arch/sparc/mm/generic.c +++ b/arch/sparc/mm/generic.c | |||
| @@ -76,7 +76,6 @@ int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from, | |||
| 76 | vma->vm_pgoff = (offset >> PAGE_SHIFT) | | 76 | vma->vm_pgoff = (offset >> PAGE_SHIFT) | |
| 77 | ((unsigned long)space << 28UL); | 77 | ((unsigned long)space << 28UL); |
| 78 | 78 | ||
| 79 | prot = __pgprot(pg_iobits); | ||
| 80 | offset -= from; | 79 | offset -= from; |
| 81 | dir = pgd_offset(mm, from); | 80 | dir = pgd_offset(mm, from); |
| 82 | flush_cache_range(vma, beg, end); | 81 | flush_cache_range(vma, beg, end); |
diff --git a/arch/sparc/mm/loadmmu.c b/arch/sparc/mm/loadmmu.c index e9f9571601ba..36b4d24988f8 100644 --- a/arch/sparc/mm/loadmmu.c +++ b/arch/sparc/mm/loadmmu.c | |||
| @@ -22,8 +22,6 @@ struct ctx_list *ctx_list_pool; | |||
| 22 | struct ctx_list ctx_free; | 22 | struct ctx_list ctx_free; |
| 23 | struct ctx_list ctx_used; | 23 | struct ctx_list ctx_used; |
| 24 | 24 | ||
| 25 | unsigned int pg_iobits; | ||
| 26 | |||
| 27 | extern void ld_mmu_sun4c(void); | 25 | extern void ld_mmu_sun4c(void); |
| 28 | extern void ld_mmu_srmmu(void); | 26 | extern void ld_mmu_srmmu(void); |
| 29 | 27 | ||
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index c664b962987c..27b0e0ba8581 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c | |||
| @@ -2130,6 +2130,13 @@ static unsigned long srmmu_pte_to_pgoff(pte_t pte) | |||
| 2130 | return pte_val(pte) >> SRMMU_PTE_FILE_SHIFT; | 2130 | return pte_val(pte) >> SRMMU_PTE_FILE_SHIFT; |
| 2131 | } | 2131 | } |
| 2132 | 2132 | ||
| 2133 | static pgprot_t srmmu_pgprot_noncached(pgprot_t prot) | ||
| 2134 | { | ||
| 2135 | prot &= ~__pgprot(SRMMU_CACHE); | ||
| 2136 | |||
| 2137 | return prot; | ||
| 2138 | } | ||
| 2139 | |||
| 2133 | /* Load up routines and constants for sun4m and sun4d mmu */ | 2140 | /* Load up routines and constants for sun4m and sun4d mmu */ |
| 2134 | void __init ld_mmu_srmmu(void) | 2141 | void __init ld_mmu_srmmu(void) |
| 2135 | { | 2142 | { |
| @@ -2150,9 +2157,9 @@ void __init ld_mmu_srmmu(void) | |||
| 2150 | BTFIXUPSET_INT(page_readonly, pgprot_val(SRMMU_PAGE_RDONLY)); | 2157 | BTFIXUPSET_INT(page_readonly, pgprot_val(SRMMU_PAGE_RDONLY)); |
| 2151 | BTFIXUPSET_INT(page_kernel, pgprot_val(SRMMU_PAGE_KERNEL)); | 2158 | BTFIXUPSET_INT(page_kernel, pgprot_val(SRMMU_PAGE_KERNEL)); |
| 2152 | page_kernel = pgprot_val(SRMMU_PAGE_KERNEL); | 2159 | page_kernel = pgprot_val(SRMMU_PAGE_KERNEL); |
| 2153 | pg_iobits = SRMMU_VALID | SRMMU_WRITE | SRMMU_REF; | ||
| 2154 | 2160 | ||
| 2155 | /* Functions */ | 2161 | /* Functions */ |
| 2162 | BTFIXUPSET_CALL(pgprot_noncached, srmmu_pgprot_noncached, BTFIXUPCALL_NORM); | ||
| 2156 | #ifndef CONFIG_SMP | 2163 | #ifndef CONFIG_SMP |
| 2157 | BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4md, BTFIXUPCALL_SWAPG1G2); | 2164 | BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4md, BTFIXUPCALL_SWAPG1G2); |
| 2158 | #endif | 2165 | #endif |
diff --git a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c index 731f19603cad..49f28c1bdc6d 100644 --- a/arch/sparc/mm/sun4c.c +++ b/arch/sparc/mm/sun4c.c | |||
| @@ -1589,7 +1589,10 @@ static void sun4c_flush_tlb_page(struct vm_area_struct *vma, unsigned long page) | |||
| 1589 | 1589 | ||
| 1590 | static inline void sun4c_mapioaddr(unsigned long physaddr, unsigned long virt_addr) | 1590 | static inline void sun4c_mapioaddr(unsigned long physaddr, unsigned long virt_addr) |
| 1591 | { | 1591 | { |
| 1592 | unsigned long page_entry; | 1592 | unsigned long page_entry, pg_iobits; |
| 1593 | |||
| 1594 | pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE | | ||
| 1595 | _SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE; | ||
| 1593 | 1596 | ||
| 1594 | page_entry = ((physaddr >> PAGE_SHIFT) & SUN4C_PFN_MASK); | 1597 | page_entry = ((physaddr >> PAGE_SHIFT) & SUN4C_PFN_MASK); |
| 1595 | page_entry |= ((pg_iobits | _SUN4C_PAGE_PRIV) & ~(_SUN4C_PAGE_PRESENT)); | 1598 | page_entry |= ((pg_iobits | _SUN4C_PAGE_PRIV) & ~(_SUN4C_PAGE_PRESENT)); |
| @@ -2134,6 +2137,13 @@ void __init sun4c_paging_init(void) | |||
| 2134 | printk("SUN4C: %d mmu entries for the kernel\n", cnt); | 2137 | printk("SUN4C: %d mmu entries for the kernel\n", cnt); |
| 2135 | } | 2138 | } |
| 2136 | 2139 | ||
| 2140 | static pgprot_t sun4c_pgprot_noncached(pgprot_t prot) | ||
| 2141 | { | ||
| 2142 | prot |= __pgprot(_SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE); | ||
| 2143 | |||
| 2144 | return prot; | ||
| 2145 | } | ||
| 2146 | |||
| 2137 | /* Load up routines and constants for sun4c mmu */ | 2147 | /* Load up routines and constants for sun4c mmu */ |
| 2138 | void __init ld_mmu_sun4c(void) | 2148 | void __init ld_mmu_sun4c(void) |
| 2139 | { | 2149 | { |
| @@ -2156,10 +2166,9 @@ void __init ld_mmu_sun4c(void) | |||
| 2156 | BTFIXUPSET_INT(page_readonly, pgprot_val(SUN4C_PAGE_READONLY)); | 2166 | BTFIXUPSET_INT(page_readonly, pgprot_val(SUN4C_PAGE_READONLY)); |
| 2157 | BTFIXUPSET_INT(page_kernel, pgprot_val(SUN4C_PAGE_KERNEL)); | 2167 | BTFIXUPSET_INT(page_kernel, pgprot_val(SUN4C_PAGE_KERNEL)); |
| 2158 | page_kernel = pgprot_val(SUN4C_PAGE_KERNEL); | 2168 | page_kernel = pgprot_val(SUN4C_PAGE_KERNEL); |
| 2159 | pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE | | ||
| 2160 | _SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE; | ||
| 2161 | 2169 | ||
| 2162 | /* Functions */ | 2170 | /* Functions */ |
| 2171 | BTFIXUPSET_CALL(pgprot_noncached, sun4c_pgprot_noncached, BTFIXUPCALL_NORM); | ||
| 2163 | BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4c, BTFIXUPCALL_NORM); | 2172 | BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4c, BTFIXUPCALL_NORM); |
| 2164 | BTFIXUPSET_CALL(do_check_pgt_cache, sun4c_check_pgt_cache, BTFIXUPCALL_NORM); | 2173 | BTFIXUPSET_CALL(do_check_pgt_cache, sun4c_check_pgt_cache, BTFIXUPCALL_NORM); |
| 2165 | 2174 | ||
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c index 95ffa9418620..dfccff29e182 100644 --- a/arch/sparc64/kernel/pci.c +++ b/arch/sparc64/kernel/pci.c | |||
| @@ -656,6 +656,7 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | |||
| 656 | __pci_mmap_set_flags(dev, vma, mmap_state); | 656 | __pci_mmap_set_flags(dev, vma, mmap_state); |
| 657 | __pci_mmap_set_pgprot(dev, vma, mmap_state); | 657 | __pci_mmap_set_pgprot(dev, vma, mmap_state); |
| 658 | 658 | ||
| 659 | vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | ||
| 659 | ret = io_remap_pfn_range(vma, vma->vm_start, | 660 | ret = io_remap_pfn_range(vma, vma->vm_start, |
| 660 | vma->vm_pgoff, | 661 | vma->vm_pgoff, |
| 661 | vma->vm_end - vma->vm_start, | 662 | vma->vm_end - vma->vm_start, |
| @@ -663,7 +664,6 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | |||
| 663 | if (ret) | 664 | if (ret) |
| 664 | return ret; | 665 | return ret; |
| 665 | 666 | ||
| 666 | vma->vm_flags |= VM_IO; | ||
| 667 | return 0; | 667 | return 0; |
| 668 | } | 668 | } |
| 669 | 669 | ||
diff --git a/arch/sparc64/mm/generic.c b/arch/sparc64/mm/generic.c index 5fc5c579e35e..8cb06205d265 100644 --- a/arch/sparc64/mm/generic.c +++ b/arch/sparc64/mm/generic.c | |||
| @@ -140,7 +140,6 @@ int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from, | |||
| 140 | vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP; | 140 | vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP; |
| 141 | vma->vm_pgoff = phys_base >> PAGE_SHIFT; | 141 | vma->vm_pgoff = phys_base >> PAGE_SHIFT; |
| 142 | 142 | ||
| 143 | prot = __pgprot(pg_iobits); | ||
| 144 | offset -= from; | 143 | offset -= from; |
| 145 | dir = pgd_offset(mm, from); | 144 | dir = pgd_offset(mm, from); |
| 146 | flush_cache_range(vma, beg, end); | 145 | flush_cache_range(vma, beg, end); |
