浏览代码

arm, arm926ejs: Flush the data cache before disabling it

The current implementation invalidates the data cache before turning it
off and causes problems on the hawkboard. See the discussion in
http://lists.denx.de/pipermail/u-boot/2012-January/115212.html

According to the ARM926EJ-S Technical Reference Manual, the cache should
be flushed instead.

Also fix the comments to match code.

Signed-off-by: Sughosh Ganu <urwithsughosh@gmail.com>

Rebased and corrected commit message.

Signed-off-by: Christian Riesch <christian.riesch@omicron.at>
Cc: Albert Aribaud <albert.u.boot@aribaud.net>
Cc: Tom Rini <trini@ti.com>
Acked-by: Heiko Schocher <hs@denx.de>
Tested-by: Heiko Schocher <hs@denx.de>
Sughosh Ganu 13 年之前
父节点
当前提交
da104e04ec
共有 1 个文件被更改,包括 8 次插入4 次删除
  1. 8 4
      arch/arm/cpu/arm926ejs/start.S

+ 8 - 4
arch/arm/cpu/arm926ejs/start.S

@@ -358,14 +358,18 @@ _dynsym_start_ofs:
 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
 cpu_init_crit:
 cpu_init_crit:
 	/*
 	/*
-	 * flush v4 I/D caches
+	 * flush D cache before disabling it
 	 */
 	 */
 	mov	r0, #0
 	mov	r0, #0
-	mcr	p15, 0, r0, c7, c7, 0	/* flush v3/v4 cache */
-	mcr	p15, 0, r0, c8, c7, 0	/* flush v4 TLB */
+flush_dcache:
+	mrc	p15, 0, r15, c7, c10, 3
+	bne	flush_dcache
+
+	mcr	p15, 0, r0, c8, c7, 0	/* invalidate TLB */
+	mcr	p15, 0, r0, c7, c5, 0	/* invalidate I Cache */
 
 
 	/*
 	/*
-	 * disable MMU stuff and caches
+	 * disable MMU and D cache, and enable I cache
 	 */
 	 */
 	mrc	p15, 0, r0, c1, c0, 0
 	mrc	p15, 0, r0, c1, c0, 0
 	bic	r0, r0, #0x00002300	/* clear bits 13, 9:8 (--V- --RS) */
 	bic	r0, r0, #0x00002300	/* clear bits 13, 9:8 (--V- --RS) */