stop_machine: add ALL_CPUS option
[linux-2.6] / include / asm-m68knommu / mcfcache.h
1 /****************************************************************************/
2
3 /*
4  *      mcfcache.h -- ColdFire CPU cache support code
5  *
6  *      (C) Copyright 2004, Greg Ungerer <gerg@snapgear.com>
7  */
8
9 /****************************************************************************/
10 #ifndef __M68KNOMMU_MCFCACHE_H
11 #define __M68KNOMMU_MCFCACHE_H
12 /****************************************************************************/
13
14
15 /*
16  *      The different ColdFire families have different cache arrangments.
17  *      Everything from a small instruction only cache, to configurable
18  *      data and/or instruction cache, to unified instruction/data, to 
19  *      harvard style separate instruction and data caches.
20  */
21
22 #if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || defined(CONFIG_M5272)
23 /*
24  *      Simple version 2 core cache. These have instruction cache only,
25  *      we just need to invalidate it and enable it.
26  */
27 .macro CACHE_ENABLE
28         movel   #0x01000000,%d0         /* invalidate cache cmd */
29         movec   %d0,%CACR               /* do invalidate cache */
30         movel   #0x80000100,%d0         /* setup cache mask */
31         movec   %d0,%CACR               /* enable cache */
32 .endm
33 #endif /* CONFIG_M5206 || CONFIG_M5206e || CONFIG_M5272 */
34
35 #if defined(CONFIG_M523x) || defined(CONFIG_M527x)
36 /*
37  *      New version 2 cores have a configurable split cache arrangement.
38  *      For now I am just enabling instruction cache - but ultimately I
39  *      think a split instruction/data cache would be better.
40  */
41 .macro CACHE_ENABLE
42         movel   #0x01400000,%d0
43         movec   %d0,%CACR               /* invalidate cache */
44         nop
45         movel   #0x0000c000,%d0         /* set SDRAM cached only */
46         movec   %d0,%ACR0
47         movel   #0x00000000,%d0         /* no other regions cached */
48         movec   %d0,%ACR1
49         movel   #0x80400100,%d0         /* configure cache */
50         movec   %d0,%CACR               /* enable cache */
51         nop
52 .endm
53 #endif /* CONFIG_M523x || CONFIG_M527x */
54
55 #if defined(CONFIG_M528x)
56 .macro CACHE_ENABLE
57         nop
58         movel   #0x01000000, %d0
59         movec   %d0, %CACR              /* Invalidate cache */
60         nop
61         movel   #0x0000c020, %d0        /* Set SDRAM cached only */
62         movec   %d0, %ACR0
63         movel   #0x00000000, %d0        /* No other regions cached */
64         movec   %d0, %ACR1
65         movel   #0x80000200, %d0        /* Setup cache mask */
66         movec   %d0, %CACR              /* Enable cache */
67         nop
68 .endm
69 #endif /* CONFIG_M528x */
70
71 #if defined(CONFIG_M5249) || defined(CONFIG_M5307)
72 /*
73  *      The version 3 core cache. Oddly enough the version 2 core 5249
74  *      has the same SDRAM and cache setup as the version 3 cores.
75  *      This is a single unified instruction/data cache.
76  */
77 .macro CACHE_ENABLE
78         movel   #0x01000000,%d0         /* invalidate whole cache */
79         movec   %d0,%CACR
80         nop
81 #if defined(DEBUGGER_COMPATIBLE_CACHE) || defined(CONFIG_SECUREEDGEMP3)
82         movel   #0x0000c000,%d0         /* set SDRAM cached (write-thru) */
83 #else
84         movel   #0x0000c020,%d0         /* set SDRAM cached (copyback) */
85 #endif
86         movec   %d0,%ACR0
87         movel   #0x00000000,%d0         /* no other regions cached */
88         movec   %d0,%ACR1
89         movel   #0xa0000200,%d0         /* enable cache */
90         movec   %d0,%CACR
91         nop
92 .endm
93 #endif /* CONFIG_M5249 || CONFIG_M5307 */
94
95 #if defined(CONFIG_M532x)
96 .macro CACHE_ENABLE
97         movel   #0x01000000,%d0         /* invalidate cache cmd */
98         movec   %d0,%CACR               /* do invalidate cache */
99         nop
100         movel   #0x4001C000,%d0         /* set SDRAM cached (write-thru) */
101         movec   %d0,%ACR0
102         movel   #0x00000000,%d0         /* no other regions cached */
103         movec   %d0,%ACR1
104         movel   #0x80000200,%d0         /* setup cache mask */
105         movec   %d0,%CACR               /* enable cache */
106         nop
107 .endm
108 #endif /* CONFIG_M532x */
109
110 #if defined(CONFIG_M5407)
111 /*
112  *      Version 4 cores have a true harvard style separate instruction
113  *      and data cache. Invalidate and enable cache, also enable write
114  *      buffers and branch accelerator.
115  */
116 .macro CACHE_ENABLE
117         movel   #0x01040100,%d0         /* invalidate whole cache */
118         movec   %d0,%CACR
119         nop
120         movel   #0x000fc000,%d0         /* set SDRAM cached only */
121         movec   %d0, %ACR0
122         movel   #0x00000000,%d0         /* no other regions cached */
123         movec   %d0, %ACR1
124         movel   #0x000fc000,%d0         /* set SDRAM cached only */
125         movec   %d0, %ACR2
126         movel   #0x00000000,%d0         /* no other regions cached */
127         movec   %d0, %ACR3
128         movel   #0xb6088400,%d0         /* enable caches */
129         movec   %d0,%CACR
130         nop
131 .endm
132 #endif /* CONFIG_M5407 */
133
134 #if defined(CONFIG_M520x)
135 .macro CACHE_ENABLE
136         move.l  #0x01000000,%d0         /* invalidate whole cache */
137         movec   %d0,%CACR
138         nop
139         move.l  #0x0000c000,%d0         /* set SDRAM cached (write-thru) */
140         movec   %d0,%ACR0
141         move.l  #0x00000000,%d0         /* no other regions cached */
142         movec   %d0,%ACR1
143         move.l  #0x80400000,%d0         /* enable 8K instruction cache */
144         movec   %d0,%CACR
145         nop
146 .endm
147 #endif /* CONFIG_M520x */
148
149 /****************************************************************************/
150 #endif  /* __M68KNOMMU_MCFCACHE_H */