aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/proc-xsc3.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mm/proc-xsc3.S')
-rw-r--r--arch/arm/mm/proc-xsc3.S30
1 files changed, 25 insertions, 5 deletions
diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S
index ad1ce5a89221..96e47fc7fd6f 100644
--- a/arch/arm/mm/proc-xsc3.S
+++ b/arch/arm/mm/proc-xsc3.S
@@ -347,16 +347,36 @@ ENTRY(cpu_xsc3_switch_mm)
347 * Set a PTE and flush it out 347 * Set a PTE and flush it out
348 * 348 *
349 */ 349 */
350
351cpu_xsc3_mt_table:
352 .long 0x00 @ L_PTE_MT_UNCACHED
353 .long PTE_BUFFERABLE @ L_PTE_MT_BUFFERABLE
354 .long PTE_EXT_TEX(5) | PTE_CACHEABLE @ L_PTE_MT_WRITETHROUGH
355 .long PTE_EXT_TEX(5) | PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_WRITEBACK
356 .long 0x00 @ L_PTE_MT_DEV_SHARED
357 .long 0x00 @ L_PTE_MT_DEV_SHARED2
358 .long 0x00 @ L_PTE_MT_MINICACHE (not present)
359 .long PTE_EXT_TEX(5) | PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_WRITEALLOC (not present?)
360 .long PTE_EXT_TEX(1) @ L_PTE_MT_DEV_WC2
361 .long PTE_EXT_TEX(1) @ L_PTE_MT_DEV_WC
362 .long 0x00 @ unused
363 .long PTE_EXT_TEX(5) | PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_DEV_CACHED
364 .long 0x00 @ L_PTE_MT_DEV_NONSHARED
365 .long 0x00 @ L_PTE_MT_DEV_IXP2000 (not present)
366 .long 0x00 @ unused
367 .long 0x00 @ unused
368
350 .align 5 369 .align 5
351ENTRY(cpu_xsc3_set_pte_ext) 370ENTRY(cpu_xsc3_set_pte_ext)
352 xscale_set_pte_ext_prologue 371 xscale_set_pte_ext_prologue
353 372
354 @ If it's cacheable, it needs to be in L2 also.
355 tst r1, #L_PTE_CACHEABLE
356 orrne r2, r2, #PTE_EXT_TEX(0x5)
357
358 tst r1, #L_PTE_SHARED @ shared? 373 tst r1, #L_PTE_SHARED @ shared?
359 orrne r2, r2, #0x200 374 and r1, r1, #L_PTE_MT_MASK
375 adr ip, cpu_xsc3_mt_table
376 ldr ip, [ip, r1]
377 orrne r2, r2, #PTE_EXT_COHERENT @ interlock: mask in coherent bit
378 bic r2, r2, #0x0c @ clear old C,B bits
379 orr r2, r2, ip
360 380
361 xscale_set_pte_ext_epilogue 381 xscale_set_pte_ext_epilogue
362 mov pc, lr 382 mov pc, lr