aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2016-02-09 11:08:21 -0500
committerScott Wood <oss@buserror.net>2016-03-11 18:20:11 -0500
commit766d45cbeecc383b8ee230370b316d0b1e30d915 (patch)
tree934a848219ee9f1aea3291bd0fafbf4166fc7dee /arch/powerpc
parenta7761fe48993f103d6deac6037bf786bd1db0501 (diff)
powerpc/8xx: rewrite flush_instruction_cache() in C
On PPC8xx, flushing instruction cache is performed by writing in register SPRN_IC_CST. This registers suffers CPU6 ERRATA. The patch rewrites the fonction in C so that CPU6 ERRATA will be handled transparently Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Scott Wood <oss@buserror.net>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/kernel/misc_32.S10
-rw-r--r--arch/powerpc/mm/8xx_mmu.c7
2 files changed, 11 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S
index be8edd67f05b..7d1284f4d89e 100644
--- a/arch/powerpc/kernel/misc_32.S
+++ b/arch/powerpc/kernel/misc_32.S
@@ -296,12 +296,9 @@ _GLOBAL(real_writeb)
296 * Flush instruction cache. 296 * Flush instruction cache.
297 * This is a no-op on the 601. 297 * This is a no-op on the 601.
298 */ 298 */
299#ifndef CONFIG_PPC_8xx
299_GLOBAL(flush_instruction_cache) 300_GLOBAL(flush_instruction_cache)
300#if defined(CONFIG_8xx) 301#if defined(CONFIG_4xx)
301 isync
302 lis r5, IDC_INVALL@h
303 mtspr SPRN_IC_CST, r5
304#elif defined(CONFIG_4xx)
305#ifdef CONFIG_403GCX 302#ifdef CONFIG_403GCX
306 li r3, 512 303 li r3, 512
307 mtctr r3 304 mtctr r3
@@ -334,9 +331,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_UNIFIED_ID_CACHE)
334 mfspr r3,SPRN_HID0 331 mfspr r3,SPRN_HID0
335 ori r3,r3,HID0_ICFI 332 ori r3,r3,HID0_ICFI
336 mtspr SPRN_HID0,r3 333 mtspr SPRN_HID0,r3
337#endif /* CONFIG_8xx/4xx */ 334#endif /* CONFIG_4xx */
338 isync 335 isync
339 blr 336 blr
337#endif /* CONFIG_PPC_8xx */
340 338
341/* 339/*
342 * Write any modified data cache blocks out to memory 340 * Write any modified data cache blocks out to memory
diff --git a/arch/powerpc/mm/8xx_mmu.c b/arch/powerpc/mm/8xx_mmu.c
index 606d2319a44f..949100577db5 100644
--- a/arch/powerpc/mm/8xx_mmu.c
+++ b/arch/powerpc/mm/8xx_mmu.c
@@ -132,3 +132,10 @@ void set_context(unsigned long id, pgd_t *pgd)
132 /* sync */ 132 /* sync */
133 mb(); 133 mb();
134} 134}
135
136void flush_instruction_cache(void)
137{
138 isync();
139 mtspr(SPRN_IC_CST, IDC_INVALL);
140 isync();
141}