diff options
Diffstat (limited to 'arch/mn10300/mm')
-rw-r--r-- | arch/mn10300/mm/dma-alloc.c | 18 | ||||
-rw-r--r-- | arch/mn10300/mm/init.c | 5 | ||||
-rw-r--r-- | arch/mn10300/mm/misalignment.c | 4 | ||||
-rw-r--r-- | arch/mn10300/mm/mmu-context.c | 3 | ||||
-rw-r--r-- | arch/mn10300/mm/pgtable.c | 2 |
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 | ||
20 | static unsigned long pci_sram_allocated = 0xbc000000; | ||
21 | |||
19 | void *dma_alloc_coherent(struct device *dev, size_t size, | 22 | void *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 | ||
57 | done: | ||
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 | } |
47 | EXPORT_SYMBOL(dma_alloc_coherent); | 62 | EXPORT_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 | } |
56 | EXPORT_SYMBOL(dma_free_coherent); | 74 | EXPORT_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 | */ |
54 | void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) | 54 | void 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> |