diff options
Diffstat (limited to 'arch/mips/sgi-ip22/ip22-mc.c')
-rw-r--r-- | arch/mips/sgi-ip22/ip22-mc.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/mips/sgi-ip22/ip22-mc.c b/arch/mips/sgi-ip22/ip22-mc.c index 3f35d6367bec..5268ac187bbd 100644 --- a/arch/mips/sgi-ip22/ip22-mc.c +++ b/arch/mips/sgi-ip22/ip22-mc.c | |||
@@ -208,4 +208,30 @@ void __init sgimc_init(void) | |||
208 | void __init prom_meminit(void) {} | 208 | void __init prom_meminit(void) {} |
209 | void __init prom_free_prom_memory(void) | 209 | void __init prom_free_prom_memory(void) |
210 | { | 210 | { |
211 | #ifdef CONFIG_SGI_IP28 | ||
212 | u32 mconfig1; | ||
213 | unsigned long flags; | ||
214 | spinlock_t lock; | ||
215 | |||
216 | /* | ||
217 | * because ARCS accesses memory uncached we wait until ARCS | ||
218 | * isn't needed any longer, before we switch from slow to | ||
219 | * normal mode | ||
220 | */ | ||
221 | spin_lock_irqsave(&lock, flags); | ||
222 | mconfig1 = sgimc->mconfig1; | ||
223 | /* map ECC register */ | ||
224 | sgimc->mconfig1 = (mconfig1 & 0xffff0000) | 0x2060; | ||
225 | iob(); | ||
226 | /* switch to normal mode */ | ||
227 | *(unsigned long *)PHYS_TO_XKSEG_UNCACHED(0x60000000) = 0; | ||
228 | iob(); | ||
229 | /* reduce WR_COL */ | ||
230 | sgimc->cmacc = (sgimc->cmacc & ~0xf) | 4; | ||
231 | iob(); | ||
232 | /* restore old config */ | ||
233 | sgimc->mconfig1 = mconfig1; | ||
234 | iob(); | ||
235 | spin_unlock_irqrestore(&lock, flags); | ||
236 | #endif | ||
211 | } | 237 | } |