context_switch() 手続き

から呼び出される switch_mm() 手続きから呼び出される cpu_arm926_switch_mm() 手続きについて。マニュアルが引きにくい上に CP15 なシステム制御コプロセッサの主な機能は以下とゆーのは分かった。

  • システム全体の制御と構成
  • MMUの構成と管理
  • キャッシュの構成と管理
  • システムパフォーマンスの監視

がしかし以下な命令列と照らし合わせて何を意図しているのか、ということが調べきれてませんorz

ENTRY(cpu_arm926_switch_mm)
#ifdef CONFIG_MMU
	mov	ip, #0
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
	mcr	p15, 0, ip, c7, c6, 0		@ invalidate D cache
#else
@ && 'Clean & Invalidate whole DCache'
1:	mrc	p15, 0, r15, c7, c14, 3 	@ test,clean,invalidate
	bne	1b
#endif
	mcr	p15, 0, ip, c7, c5, 0		@ invalidate I cache
	mcr	p15, 0, ip, c7, c10, 4		@ drain WB
	mcr	p15, 0, r0, c2, c0, 0		@ load page table pointer
	mcr	p15, 0, ip, c8, c7, 0		@ invalidate I & D TLBs
#endif
	mov	pc, lr

CONFIG_MMU が define されてない (memory management unit が無い) 場合は非常に簡単な処理になってますが lr って何だ。
というか、何とかして上記命令列がコメント通りの意図なのかを確認したい。

とりあえず

中途半端なエントリなのですが、なんとかして上記命令列は解読して別エントリにて補足予定ッス。