aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mn10300/mm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mn10300/mm')
-rw-r--r--arch/mn10300/mm/dma-alloc.c18
-rw-r--r--arch/mn10300/mm/init.c5
-rw-r--r--arch/mn10300/mm/misalignment.c4
-rw-r--r--arch/mn10300/mm/mmu-context.c3
-rw-r--r--arch/mn10300/mm/pgtable.c2
5 files changed, 25 insertions, 7 deletions
diff --git a/arch/mn10300/mm/dma-alloc.c b/arch/mn10300/mm/dma-alloc.c
index f3649d8f50e3..4e34880bea03 100644
--- a/arch/mn10300/mm/dma-alloc.c
+++ b/arch/mn10300/mm/dma-alloc.c
@@ -14,14 +14,27 @@
14#include <linux/mm.h> 14#include <linux/mm.h>
15#include <linux/string.h> 15#include <linux/string.h>
16#include <linux/pci.h> 16#include <linux/pci.h>
17#include <linux/gfp.h>
17#include <asm/io.h> 18#include <asm/io.h>
18 19
20static unsigned long pci_sram_allocated = 0xbc000000;
21
19void *dma_alloc_coherent(struct device *dev, size_t size, 22void *dma_alloc_coherent(struct device *dev, size_t size,
20 dma_addr_t *dma_handle, int gfp) 23 dma_addr_t *dma_handle, int gfp)
21{ 24{
22 unsigned long addr; 25 unsigned long addr;
23 void *ret; 26 void *ret;
24 27
28 printk("dma_alloc_coherent(%s,%zu,,%x)\n", dev_name(dev), size, gfp);
29
30 if (0xbe000000 - pci_sram_allocated >= size) {
31 size = (size + 255) & ~255;
32 addr = pci_sram_allocated;
33 pci_sram_allocated += size;
34 ret = (void *) addr;
35 goto done;
36 }
37
25 /* ignore region specifiers */ 38 /* ignore region specifiers */
26 gfp &= ~(__GFP_DMA | __GFP_HIGHMEM); 39 gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
27 40
@@ -41,7 +54,9 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
41 /* write back and evict all cache lines covering this region */ 54 /* write back and evict all cache lines covering this region */
42 mn10300_dcache_flush_inv_range2(virt_to_phys((void *) addr), PAGE_SIZE); 55 mn10300_dcache_flush_inv_range2(virt_to_phys((void *) addr), PAGE_SIZE);
43 56
57done:
44 *dma_handle = virt_to_bus((void *) addr); 58 *dma_handle = virt_to_bus((void *) addr);
59 printk("dma_alloc_coherent() = %p [%x]\n", ret, *dma_handle);
45 return ret; 60 return ret;
46} 61}
47EXPORT_SYMBOL(dma_alloc_coherent); 62EXPORT_SYMBOL(dma_alloc_coherent);
@@ -51,6 +66,9 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
51{ 66{
52 unsigned long addr = (unsigned long) vaddr & ~0x20000000; 67 unsigned long addr = (unsigned long) vaddr & ~0x20000000;
53 68
69 if (addr >= 0x9c000000)
70 return;
71
54 free_pages(addr, get_order(size)); 72 free_pages(addr, get_order(size));
55} 73}
56EXPORT_SYMBOL(dma_free_coherent); 74EXPORT_SYMBOL(dma_free_coherent);
diff --git a/arch/mn10300/mm/init.c b/arch/mn10300/mm/init.c
index ec1420562dc7..6e6bc0e51521 100644
--- a/arch/mn10300/mm/init.c
+++ b/arch/mn10300/mm/init.c
@@ -17,7 +17,6 @@
17#include <linux/types.h> 17#include <linux/types.h>
18#include <linux/ptrace.h> 18#include <linux/ptrace.h>
19#include <linux/mman.h> 19#include <linux/mman.h>
20#include <linux/slab.h>
21#include <linux/fs.h> 20#include <linux/fs.h>
22#include <linux/mm.h> 21#include <linux/mm.h>
23#include <linux/swap.h> 22#include <linux/swap.h>
@@ -27,6 +26,7 @@
27#include <linux/highmem.h> 26#include <linux/highmem.h>
28#include <linux/pagemap.h> 27#include <linux/pagemap.h>
29#include <linux/bootmem.h> 28#include <linux/bootmem.h>
29#include <linux/gfp.h>
30 30
31#include <asm/processor.h> 31#include <asm/processor.h>
32#include <asm/system.h> 32#include <asm/system.h>
@@ -118,8 +118,7 @@ void __init mem_init(void)
118 reservedpages << (PAGE_SHIFT - 10), 118 reservedpages << (PAGE_SHIFT - 10),
119 datasize >> 10, 119 datasize >> 10,
120 initsize >> 10, 120 initsize >> 10,
121 (unsigned long) (totalhigh_pages << (PAGE_SHIFT - 10)) 121 totalhigh_pages << (PAGE_SHIFT - 10));
122 );
123} 122}
124 123
125/* 124/*
diff --git a/arch/mn10300/mm/misalignment.c b/arch/mn10300/mm/misalignment.c
index 30016251f658..6dffbf97ac26 100644
--- a/arch/mn10300/mm/misalignment.c
+++ b/arch/mn10300/mm/misalignment.c
@@ -633,13 +633,13 @@ static int misalignment_addr(unsigned long *registers, unsigned long sp,
633 goto displace_or_inc; 633 goto displace_or_inc;
634 case SD24: 634 case SD24:
635 tmp = disp << 8; 635 tmp = disp << 8;
636 asm("asr 8,%0" : "=r"(tmp) : "0"(tmp)); 636 asm("asr 8,%0" : "=r"(tmp) : "0"(tmp) : "cc");
637 disp = (long) tmp; 637 disp = (long) tmp;
638 goto displace_or_inc; 638 goto displace_or_inc;
639 case SIMM4_2: 639 case SIMM4_2:
640 tmp = opcode >> 4 & 0x0f; 640 tmp = opcode >> 4 & 0x0f;
641 tmp <<= 28; 641 tmp <<= 28;
642 asm("asr 28,%0" : "=r"(tmp) : "0"(tmp)); 642 asm("asr 28,%0" : "=r"(tmp) : "0"(tmp) : "cc");
643 disp = (long) tmp; 643 disp = (long) tmp;
644 goto displace_or_inc; 644 goto displace_or_inc;
645 case IMM8: 645 case IMM8:
diff --git a/arch/mn10300/mm/mmu-context.c b/arch/mn10300/mm/mmu-context.c
index 31c9d27a75ae..36ba02191d40 100644
--- a/arch/mn10300/mm/mmu-context.c
+++ b/arch/mn10300/mm/mmu-context.c
@@ -51,9 +51,10 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
51/* 51/*
52 * preemptively set a TLB entry 52 * preemptively set a TLB entry
53 */ 53 */
54void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) 54void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
55{ 55{
56 unsigned long pteu, ptel, cnx, flags; 56 unsigned long pteu, ptel, cnx, flags;
57 pte_t pte = *ptep;
57 58
58 addr &= PAGE_MASK; 59 addr &= PAGE_MASK;
59 ptel = pte_val(pte) & ~(xPTEL_UNUSED1 | xPTEL_UNUSED2); 60 ptel = pte_val(pte) & ~(xPTEL_UNUSED1 | xPTEL_UNUSED2);
diff --git a/arch/mn10300/mm/pgtable.c b/arch/mn10300/mm/pgtable.c
index baffc581e031..9c1624c9e4e9 100644
--- a/arch/mn10300/mm/pgtable.c
+++ b/arch/mn10300/mm/pgtable.c
@@ -12,11 +12,11 @@
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/errno.h> 14#include <linux/errno.h>
15#include <linux/gfp.h>
15#include <linux/mm.h> 16#include <linux/mm.h>
16#include <linux/swap.h> 17#include <linux/swap.h>
17#include <linux/smp.h> 18#include <linux/smp.h>
18#include <linux/highmem.h> 19#include <linux/highmem.h>
19#include <linux/slab.h>
20#include <linux/pagemap.h> 20#include <linux/pagemap.h>
21#include <linux/spinlock.h> 21#include <linux/spinlock.h>
22#include <linux/quicklist.h> 22#include <linux/quicklist.h>