summaryrefslogtreecommitdiffstats
path: root/target/linux/coldfire/patches/060-m547x_8x_move_memmap.patch
blob: 01d7a6ea99d40a90ce4466f13ec1c1f2a421640f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
From 961a1f1ccbb2121a4e650cd64ca1f5c15b232e18 Mon Sep 17 00:00:00 2001
From: Kurt Mahan <kmahan@freescale.com>
Date: Thu, 29 May 2008 22:03:08 -0600
Subject: [PATCH] Update M547x/M548x memory map.

- Move internal memory
  0xF0000000 MBAR
  0xF1000000 MMUBAR
  0xF3000000 RAMBAR0
  0xF3001000 RAMBAR1

- Move KMAP area
  0xD0000000 -> 0xDFFFFFFF

- Update pagefault code for KMAP area

LTIBName: m547x-8x-move-memmap
Signed-off-by: Kurt Mahan <kmahan@freescale.com>
---
 arch/m68k/coldfire/head.S   |    2 +-
 arch/m68k/mm/cf-mmu.c       |   20 ++++++++++----------
 arch/m68k/mm/kmap.c         |   18 +++++++++++++++---
 include/asm-m68k/coldfire.h |    8 ++++----
 include/asm-m68k/pgtable.h  |    4 ++--
 5 files changed, 32 insertions(+), 20 deletions(-)

--- a/arch/m68k/coldfire/head.S
+++ b/arch/m68k/coldfire/head.S
@@ -87,7 +87,7 @@
 #else
 #if defined(CONFIG_M54455)
 #elif defined(CONFIG_M547X_8X)
-#define ACR0_DEFAULT	#0xE000C040   /* ACR0 default value */
+#define ACR0_DEFAULT	#0xF00FC040   /* ACR0 default value */
 #define ACR1_DEFAULT	#0x000FA008   /* ACR1 default value */
 #define ACR2_DEFAULT	#0x00000000   /* ACR2 default value */
 #define ACR3_DEFAULT	#0x000FA008   /* ACR3 default value */
--- a/arch/m68k/mm/cf-mmu.c
+++ b/arch/m68k/mm/cf-mmu.c
@@ -35,11 +35,9 @@
 #include <asm/coldfire.h>
 #include <asm/tlbflush.h>
 
-#if PAGE_OFFSET == CONFIG_SDRAM_BASE
-#define	KERNRAM(x) ((x >= PAGE_OFFSET) && (x < (PAGE_OFFSET + CONFIG_SDRAM_SIZE)))
-#else
-#define	KERNRAM(x) (x >= PAGE_OFFSET)
-#endif
+#define KMAPAREA(x)	((x >= KMAP_START) && ( x < KMAP_END))
+
+#undef DEBUG
 
 mm_context_t next_mmu_context;
 unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1];
@@ -162,7 +160,7 @@ int cf_tlb_miss(struct pt_regs *regs, in
 	mmuar = ( dtlb ) ? regs->mmuar
 			 : regs->pc + (extension_word * sizeof(long));
 
-        mm = (!user_mode(regs) && KERNRAM(mmuar)) ? &init_mm : current->mm;
+        mm = (!user_mode(regs) && KMAPAREA(mmuar)) ? &init_mm : current->mm;
 
         if (!mm) {
 	    local_irq_restore(flags);
@@ -181,7 +179,7 @@ int cf_tlb_miss(struct pt_regs *regs, in
 	    return (-1);
 	}	
     
-	pte = (KERNRAM(mmuar)) ? pte_offset_kernel(pmd, mmuar)
+	pte = (KMAPAREA(mmuar)) ? pte_offset_kernel(pmd, mmuar)
 	                       : pte_offset_map(pmd, mmuar);
     	if (pte_none(*pte) || !pte_present(*pte)) {
 	    local_irq_restore(flags);
@@ -198,7 +196,7 @@ int cf_tlb_miss(struct pt_regs *regs, in
 	
         set_pte(pte, pte_mkyoung(*pte));
         asid = mm->context & 0xff;
-        if (!pte_dirty(*pte) && !KERNRAM(mmuar))
+        if (!pte_dirty(*pte) && !KMAPAREA(mmuar))
     	    set_pte(pte, pte_wrprotect(*pte));
 
         *MMUTR = (mmuar & PAGE_MASK) | (asid << CF_ASID_MMU_SHIFT)
@@ -216,8 +214,10 @@ int cf_tlb_miss(struct pt_regs *regs, in
 
 	asm("nop");
 
-	/*printk("cf_tlb_miss: va=%lx, pa=%lx\n", (mmuar & PAGE_MASK), 
-		  (pte_val(*pte)  & PAGE_MASK));*/
+#ifdef DEBUG
+	printk("cf_tlb_miss: va=%lx, pa=%lx\n", (mmuar & PAGE_MASK), 
+		  (pte_val(*pte)  & PAGE_MASK));
+#endif
 	local_irq_restore(flags);
         return (0);
 }
--- a/arch/m68k/mm/kmap.c
+++ b/arch/m68k/mm/kmap.c
@@ -135,10 +135,22 @@ void __iomem *__ioremap(unsigned long ph
 
 #ifdef CONFIG_M54455
 	if (physaddr >= 0xf0000000) {
-		/* short circuit mappings for xf0000000 */
-#ifdef DEBUG
-		printk(KERN_INFO "ioremap: short circuiting 0x%lx mapping\n", physaddr);
+		/*
+	 	 * On the M5445x processors an ACR is setup to map
+		 * the 0xF0000000 range into kernel memory as
+		 * non-cacheable.
+		 */
+		return (void __iomem *)physaddr;
+	}
 #endif
+
+#ifdef CONFIG_M547X_8X
+	if (physaddr >= 0xf0000000) {
+		/*
+	 	 * On the M547x/M548x processors an ACR is setup to map
+		 * the 0xF0000000 range into kernel memory as
+		 * non-cacheable.
+		 */
 		return (void __iomem *)physaddr;
 	}
 #endif
--- a/include/asm-m68k/coldfire.h
+++ b/include/asm-m68k/coldfire.h
@@ -6,10 +6,10 @@
 #define MCF_RAMBAR1 	0x40000000
 #define MCF_SRAM	0x80000000
 #elif defined(CONFIG_M547X_8X)
-#define MCF_MBAR	0xE0000000
-#define MCF_MMUBAR	0xE1000000
-#define MCF_RAMBAR0	0xE3000000
-#define MCF_RAMBAR1	0xE3001000
+#define MCF_MBAR	0xF0000000
+#define MCF_MMUBAR	0xF1000000
+#define MCF_RAMBAR0	0xF3000000
+#define MCF_RAMBAR1	0xF3001000
 #endif
 
 #define MCF_CLK     	CONFIG_MCFCLK
--- a/include/asm-m68k/pgtable.h
+++ b/include/asm-m68k/pgtable.h
@@ -73,8 +73,8 @@
 #define KMAP_START     0x0DC00000
 #define KMAP_END       0x0E000000
 #elif defined(CONFIG_COLDFIRE)
-#define KMAP_START	0xe0000000
-#define KMAP_END	0xf0000000
+#define KMAP_START	0xd0000000
+#define KMAP_END	0xe0000000
 #else
 #define	KMAP_START	0xd0000000
 #define	KMAP_END	0xf0000000